8000 Change call site of sqlite3_randomness and fortuna_ready · PHPDOTSQL/sqlcipher@7026edb · GitHub
[go: up one dir, main page]

Skip to content

Commit 7026edb

Browse files
Change call site of sqlite3_randomness and fortuna_ready
sqlite3_randomness was blocking when invoked with sqlcipher_ltc_activate. As new entropy is added to the pool, calls to fortuna_ready are required to allow the new entropy to be used.
1 parent a60090f commit 7026edb

File tree

1 file changed

+17
-16
lines changed

1 file changed

+17
-16
lines changed

src/crypto_libtomcrypt.c

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -19,19 +19,11 @@ static int sqlcipher_ltc_activate(void *ctx) {
1919
ltc_ctx *ltc = (ltc_ctx*)ctx;
2020
sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER));
2121
if(ltc_init == 0) {
22-
int random_buffer_sz = 256;
23-
char random_buffer[random_buffer_sz];
24-
2522
if(register_prng(&fortuna_desc) != CRYPT_OK) return SQLITE_ERROR;
2623
if(register_cipher(&rijndael_desc) != CRYPT_OK) return SQLITE_ERROR;
2724
if(register_hash(&sha1_desc) != CRYPT_OK) return SQLITE_ERROR;
2825
if(fortuna_start(&(ltc->prng)) != CRYPT_OK) return SQLITE_ERROR;
29-
30-
sqlite3_randomness(random_buffer_sz, random_buffer);
31-
if(sqlcipher_ltc_add_random(ctx, random_buffer, random_buffer_sz) != SQLITE_OK) return SQLITE_ERROR;
3226
if(sqlcipher_ltc_add_random(ctx, &ltc, sizeof(ltc_ctx *)) != SQLITE_OK) return SQLITE_ERROR;
33-
if(fortuna_ready(&(ltc->prng)) != CRYPT_OK) return SQLITE_ERROR;
34-
3527
ltc_init = 1;
3628
}
3729
sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER));
@@ -48,9 +40,17 @@ static const char* sqlcipher_ltc_get_provider_name(void *ctx) {
4840
}
4941

5042
static int sqlcipher_ltc_random(void *ctx, void *buffer, int length) {
51-
int random_value;
52-
5343
ltc_ctx *ltc = (ltc_ctx*)ctx;
44+
int random_buffer_sz = 256;
45+
char random_buffer[random_buffer_sz];
46+
47+
sqlite3_randomness(random_buffer_sz, &random_buffer);
48+
if(sqlcipher_ltc_add_random(ctx, random_buffer, random_buffer_sz) != SQLITE_OK) {
49+
return SQLITE_ERROR;
50+
}
51+
if(fortuna_ready(&(ltc->prng)) != CRYPT_OK) {
52+
return SQLITE_ERROR;
53+
}
5454
fortuna_read(buffer, length, &(ltc->prng));
5555
return SQLITE_OK;
5656
}
@@ -65,6 +65,7 @@ static int sqlcipher_ltc_hmac(void *ctx, unsigned char *hmac_key, int key_sz, un
6565
if((rc = hmac_process(&hmac, in, in_sz)) != CRYPT_OK) return SQLITE_ERROR;
6666
if((rc = hmac_process(&hmac, in2, in2_sz)) != CRYPT_OK) return SQLITE_ERROR;
6767
if((rc = hmac_done(&hmac, out, &outlen)) != CRYPT_OK) return SQLITE_ERROR;
68+
sqlcipher_ltc_add_random(ctx, out, outlen);
6869
return SQLITE_OK;
6970
}
7071

@@ -76,14 +77,14 @@ static int sqlcipher_ltc_kdf(void *ctx, const unsigned char *pass, int pass_sz,
7677

7778
hash_idx = find_hash("sha1");
7879
if((rc = pkcs_5_alg2(pass, pass_sz, salt, salt_sz,
79-
workfactor, hash_idx, key, &outlen)) != CRYPT_OK) return SQLITE_ERROR;
80-
81-
// improve entropy of foruna
80+
workfactor, hash_idx, key, &outlen)) != CRYPT_OK) {
81+
return SQLITE_ERROR;
82+
}
8283
if((rc = pkcs_5_alg2(key, key_sz, salt, salt_sz,
83-
1, hash_idx, random_buffer, &random_buffer_sz)) != CRYPT_OK) return SQLITE_ERROR;
84-
84+
1, hash_idx, random_buffer, &random_buffer_sz)) != CRYPT_OK) {
85+
return SQLITE_ERROR;
86+
}
8587
sqlcipher_ltc_add_random(ctx, random_buffer, random_buffer_sz);
86-
8788
return SQLITE_OK;
8889
}
8990

0 commit comments

Comments
 (0)
0