@@ -49,8 +49,9 @@ static int sqlcipher_ltc_add_random(void *ctx, void *buffer, int length) {
49
49
50
50
static int sqlcipher_ltc_activate (void * ctx ) {
51
51
ltc_ctx * ltc = (ltc_ctx * )ctx ;
52
- int random_buffer_sz = 32 ;
53
- unsigned char random_buffer [random_buffer_sz ];
52
+ int random_buffer_sz = sizeof (char ) * 32 ;
53
+ unsigned char * random_buffer = sqlcipher_malloc (random_buffer_sz );
54
+ sqlcipher_memset (random_buffer , 0 , random_buffer_sz );
54
55
55
56
if (ltc_init == 0 ) {
56
57
if (register_prng (& fortuna_desc ) != CRYPT_OK ) return SQLITE_ERROR ;
@@ -61,7 +62,7 @@ static int sqlcipher_ltc_activate(void *ctx) {
61
62
if (fortuna_start (& (ltc -> prng )) != CRYPT_OK ) {
62
63
return SQLITE_ERROR ;
63
64
}
64
- sqlite3_randomness (random_buffer_sz , & random_buffer );
65
+ sqlite3_randomness (random_buffer_sz , random_buffer );
65
66
if (sqlcipher_ltc_add_random (ctx , random_buffer , random_buffer_sz ) != SQLITE_OK ) {
66
67
return SQLITE_ERROR ;
67
68
}
@@ -71,12 +72,14 @@ static int sqlcipher_ltc_activate(void *ctx) {
71
72
if (fortuna_ready (& (ltc -> prng )) != CRYPT_OK ) {
72
73
return SQLITE_ERROR ;
73
74
}
75
+ sqlcipher_free (random_buffer , random_buffer_sz );
74
76
return SQLITE_OK ;
75
77
}
76
78
77
79
static int sqlcipher_ltc_deactivate (void * ctx ) {
78
80
ltc_ctx * ltc = (ltc_ctx * )ctx ;
79
81
fortuna_done (& (ltc -> prng ));
82
+ return SQLITE_OK ;
80
83
}
81
84
82
85
static const char * sqlcipher_ltc_get_provider_name (void * ctx ) {
@@ -109,10 +112,11 @@ static int sqlcipher_ltc_hmac(void *ctx, unsigned char *hmac_key, int key_sz, un
109
112
110
113
static int sqlcipher_ltc_kdf (void * ctx , const char * pass , int pass_sz , unsigned char * salt , int salt_sz , int workfactor , int key_sz , unsigned char * key ) {
111
114
int rc , hash_idx ;
112
- unsigned long outlen = key_sz ;
113
- unsigned long random_buffer_sz = 256 ;
114
- char random_buffer [random_buffer_sz ];
115
115
ltc_ctx * ltc = (ltc_ctx * )ctx ;
116
+ unsigned long outlen = key_sz ;
117
+ unsigned long random_buffer_sz = sizeof (char ) * 256 ;
118
+ unsigned char * random_buffer = sqlcipher_malloc (random_buffer_sz );
119
+ sqlcipher_memset (random_buffer , 0 , random_buffer_sz );
116
120
117
121
hash_idx = find_hash ("sha1" );
118
122
if ((rc = pkcs_5_alg2 (pass , pass_sz , salt , salt_sz ,
@@ -124,6 +128,7 @@ static int sqlcipher_ltc_kdf(void *ctx, const char *pass, int pass_sz, unsigned
124
128
return SQLITE_ERROR ;
125
129
}
126
130
sqlcipher_ltc_add_random (ctx , random_buffer , random_buffer_sz );
131
+ sqlcipher_free (random_buffer , random_buffer_sz );
127
132
return SQLITE_OK ;
128
133
}
129
134
@@ -132,7 +137,7 @@ static const char* sqlcipher_ltc_get_cipher(void *ctx) {
132
137
}
133
138
134
139
static int sqlcipher_ltc_cipher (void * ctx , int mode , unsigned char * key , int key_sz , unsigned char * iv , unsigned char * in , int in_sz , unsigned char * out ) {
135
- int rc , cipher_idx , hash_idx ;
140
+ int rc , cipher_idx ;
136
141
symmetric_CBC cbc ;
137
142
138
143
if ((cipher_idx = find_cipher (sqlcipher_ltc_get_cipher (ctx ))) == -1 ) return SQLITE_ERROR ;
@@ -208,6 +213,7 @@ int sqlcipher_ltc_setup(sqlcipher_provider *p) {
208
213
p -> ctx_init = sqlcipher_ltc_ctx_init ;
209
214
p -> ctx_free = sqlcipher_ltc_ctx_free ;
210
215
p -> add_random = sqlcipher_ltc_add_random ;
216
+ return SQLITE_OK ;
211
217
}
212
218
213
219
#endif
0 commit comments