@@ -17,16 +17,25 @@ static int sqlcipher_ltc_add_random(void *ctx, void *buffer, int length) {
1717
1818static int sqlcipher_ltc_activate (void * ctx ) {
1919 ltc_ctx * ltc = (ltc_ctx * )ctx ;
20- sqlite3_mutex_enter (sqlite3MutexAlloc (SQLITE_MUTEX_STATIC_MASTER ));
20+ int random_buffer_sz = 256 ;
21+ unsigned char random_buffer [random_buffer_sz ];
22+
2123 if (ltc_init == 0 ) {
2224 if (register_prng (& fortuna_desc ) != CRYPT_OK ) return SQLITE_ERROR ;
2325 if (register_cipher (& rijndael_desc ) != CRYPT_OK ) return SQLITE_ERROR ;
2426 if (register_hash (& sha1_desc ) != CRYPT_OK ) return SQLITE_ERROR ;
25- if (fortuna_start (& (ltc -> prng )) != CRYPT_OK ) return SQLITE_ERROR ;
26- if (sqlcipher_ltc_add_random (ctx , & ltc , sizeof (ltc_ctx * )) != SQLITE_OK ) return SQLITE_ERROR ;
2727 ltc_init = 1 ;
2828 }
29- sqlite3_mutex_leave (sqlite3MutexAlloc (SQLITE_MUTEX_STATIC_MASTER ));
29+
30+ if (fortuna_start (& (ltc -> prng )) != CRYPT_OK ) return SQLITE_ERROR ;
31+ sqlite3_randomness (random_buffer_sz , & random_buffer );
32+ if (sqlcipher_ltc_add_random (ctx , random_buffer , random_buffer_sz ) != SQLITE_OK ) {
33+ return SQLITE_ERROR ;
34+ }
35+ if (sqlcipher_ltc_add_random (ctx , & ltc , sizeof (ltc_ctx * )) != SQLITE_OK ) return SQLITE_ERROR ;
36+ if (fortuna_ready (& (ltc -> prng )) != CRYPT_OK ) {
37+ return SQLITE_ERROR ;
38+ }
3039 return SQLITE_OK ;
3140}
3241
@@ -41,16 +50,15 @@ static const char* sqlcipher_ltc_get_provider_name(void *ctx) {
4150
4251static int sqlcipher_ltc_random (void * ctx , void * buffer , int length ) {
4352 ltc_ctx * ltc = (ltc_ctx * )ctx ;
53+ /*
4454 int random_buffer_sz = 256;
4555 char random_buffer[random_buffer_sz];
4656
4757 sqlite3_randomness(random_buffer_sz, &random_buffer);
4858 if(sqlcipher_ltc_add_random(ctx, random_buffer, random_buffer_sz) != SQLITE_OK) {
4959 return SQLITE_ERROR;
5060 }
51- if (fortuna_ready (& (ltc -> prng )) != CRYPT_OK ) {
52- return SQLITE_ERROR ;
53- }
61+ */
5462 fortuna_read (buffer , length , & (ltc -> prng ));
5563 return SQLITE_OK ;
5664}
@@ -65,7 +73,6 @@ static int sqlcipher_ltc_hmac(void *ctx, unsigned char *hmac_key, int key_sz, un
6573 if ((rc = hmac_process (& hmac , in , in_sz )) != CRYPT_OK ) return SQLITE_ERROR ;
6674 if ((rc = hmac_process (& hmac , in2 , in2_sz )) != CRYPT_OK ) return SQLITE_ERROR ;
6775 if ((rc = hmac_done (& hmac , out , & outlen )) != CRYPT_OK ) return SQLITE_ERROR ;
68- sqlcipher_ltc_add_random (ctx , out , outlen );
6976 return SQLITE_OK ;
7077}
7178
0 commit comments