@@ -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
5042static 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