@@ -19,19 +19,11 @@ static int sqlcipher_ltc_activate(void *ctx) {
19
19
ltc_ctx * ltc = (ltc_ctx * )ctx ;
20
20
sqlite3_mutex_enter (sqlite3MutexAlloc (SQLITE_MUTEX_STATIC_MASTER ));
21
21
if (ltc_init == 0 ) {
22
- int random_buffer_sz = 256 ;
23
- char random_buffer [random_buffer_sz ];
24
-
25
22
if (register_prng (& fortuna_desc ) != CRYPT_OK ) return SQLITE_ERROR ;
26
23
if (register_cipher (& rijndael_desc ) != CRYPT_OK ) return SQLITE_ERROR ;
27
24
if (register_hash (& sha1_desc ) != CRYPT_OK ) return SQLITE_ERROR ;
28
25
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 ;
32
26
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
-
35
27
ltc_init = 1 ;
36
28
}
37
29
sqlite3_mutex_leave (sqlite3MutexAlloc (SQLITE_MUTEX_STATIC_MASTER ));
@@ -48,9 +40,17 @@ static const char* sqlcipher_ltc_get_provider_name(void *ctx) {
48
40
}
49
41
50
42
static int sqlcipher_ltc_random (void * ctx , void * buffer , int length ) {
51
- int random_value ;
52
-
53
43
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
+ }
54
54
fortuna_read (buffer , length , & (ltc -> prng ));
55
55
return SQLITE_OK ;
56
56
}
@@ -65,6 +65,7 @@ static int sqlcipher_ltc_hmac(void *ctx, unsigned char *hmac_key, int key_sz, un
65
65
if ((rc = hmac_process (& hmac , in , in_sz )) != CRYPT_OK ) return SQLITE_ERROR ;
66
66
if ((rc = hmac_process (& hmac , in2 , in2_sz )) != CRYPT_OK ) return SQLITE_ERROR ;
67
67
if ((rc = hmac_done (& hmac , out , & outlen )) != CRYPT_OK ) return SQLITE_ERROR ;
68
+ sqlcipher_ltc_add_random (ctx , out , outlen );
68
69
return SQLITE_OK ;
69
70
}
70
71
@@ -76,14 +77,14 @@ static int sqlcipher_ltc_kdf(void *ctx, const unsigned char *pass, int pass_sz,
76
77
77
78
hash_idx = find_hash ("sha1" );
78
79
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
+ }
82
83
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
+ }
85
87
sqlcipher_ltc_add_random (ctx , random_buffer , random_buffer_sz );
86
-
87
88
return SQLITE_OK ;
88
89
}
89
90
0 commit comments