Lines Matching refs:prng

56 static void s_fortuna_update_iv(prng_state *prng)  in s_fortuna_update_iv()  argument
61 IV = prng->u.fortuna.IV; in s_fortuna_update_iv()
96 static int s_fortuna_reseed(prng_state *prng) in s_fortuna_reseed() argument
105 if (now == prng->u.fortuna.wd) { in s_fortuna_reseed()
109 if (++prng->u.fortuna.wd < LTC_FORTUNA_WD) { in s_fortuna_reseed()
116 if ((err = sha256_process(&md, prng->u.fortuna.K, 32)) != CRYPT_OK) { in s_fortuna_reseed()
121 reset_cnt = prng->u.fortuna.reset_cnt + 1; in s_fortuna_reseed()
126 if ((err = sha256_done(&prng->u.fortuna.pool[x], tmp)) != CRYPT_OK) { in s_fortuna_reseed()
136 if ((err = sha256_init(&prng->u.fortuna.pool[x])) != CRYPT_OK) { in s_fortuna_reseed()
146 if ((err = sha256_done(&md, prng->u.fortuna.K)) != CRYPT_OK) { in s_fortuna_reseed()
149 if ((err = rijndael_setup(prng->u.fortuna.K, 32, 0, &prng->u.fortuna.skey)) != CRYPT_OK) { in s_fortuna_reseed()
152 s_fortuna_update_iv(prng); in s_fortuna_reseed()
155 prng->u.fortuna.pool0_len = 0; in s_fortuna_reseed()
157 prng->u.fortuna.wd = now; in s_fortuna_reseed()
159 prng->u.fortuna.wd = 0; in s_fortuna_reseed()
161 prng->u.fortuna.reset_cnt = reset_cnt; in s_fortuna_reseed()
180 int fortuna_update_seed(const unsigned char *in, unsigned long inlen, prng_state *prng) in fortuna_update_seed() argument
186 LTC_MUTEX_LOCK(&prng->lock); in fortuna_update_seed()
189 if ((err = sha256_process(&md, prng->u.fortuna.K, 32)) != CRYPT_OK) { in fortuna_update_seed()
198 if ((err = sha256_done(&md, prng->u.fortuna.K)) != CRYPT_OK) { in fortuna_update_seed()
201 s_fortuna_update_iv(prng); in fortuna_update_seed()
204 LTC_MUTEX_UNLOCK(&prng->lock); in fortuna_update_seed()
217 int fortuna_start(prng_state *prng) in fortuna_start() argument
222 LTC_ARGCHK(prng != NULL); in fortuna_start()
223 prng->ready = 0; in fortuna_start()
227 if ((err = sha256_init(&prng->u.fortuna.pool[x])) != CRYPT_OK) { in fortuna_start()
229 sha256_done(&prng->u.fortuna.pool[y], tmp); in fortuna_start()
234 prng->u.fortuna.pool_idx = prng->u.fortuna.pool0_len = 0; in fortuna_start()
235 prng->u.fortuna.reset_cnt = prng->u.fortuna.wd = 0; in fortuna_start()
238 zeromem(prng->u.fortuna.K, 32); in fortuna_start()
239 if ((err = rijndael_setup(prng->u.fortuna.K, 32, 0, &prng->u.fortuna.skey)) != CRYPT_OK) { in fortuna_start()
241 sha256_done(&prng->u.fortuna.pool[x], tmp); in fortuna_start()
245 zeromem(prng->u.fortuna.IV, 16); in fortuna_start()
247 LTC_MUTEX_INIT(&prng->lock) in fortuna_start()
252 …ed long source, unsigned long pool, const unsigned char *in, unsigned long inlen, prng_state *prng) in s_fortuna_add() argument
266 if ((err = sha256_process(&prng->u.fortuna.pool[pool], tmp, 2)) != CRYPT_OK) { in s_fortuna_add()
269 if ((err = sha256_process(&prng->u.fortuna.pool[pool], in, inlen)) != CRYPT_OK) { in s_fortuna_add()
273 prng->u.fortuna.pool0_len += inlen; in s_fortuna_add()
287 …ed long source, unsigned long pool, const unsigned char *in, unsigned long inlen, prng_state *prng) in fortuna_add_random_event() argument
291 LTC_ARGCHK(prng != NULL); in fortuna_add_random_event()
297 LTC_MUTEX_LOCK(&prng->lock); in fortuna_add_random_event()
299 err = s_fortuna_add(source, pool, in, inlen, prng); in fortuna_add_random_event()
301 LTC_MUTEX_UNLOCK(&prng->lock); in fortuna_add_random_event()
313 int fortuna_add_entropy(const unsigned char *in, unsigned long inlen, prng_state *prng) in fortuna_add_entropy() argument
317 LTC_ARGCHK(prng != NULL); in fortuna_add_entropy()
321 LTC_MUTEX_LOCK(&prng->lock); in fortuna_add_entropy()
323 err = s_fortuna_add(0, prng->u.fortuna.pool_idx, in, inlen, prng); in fortuna_add_entropy()
326 ++(prng->u.fortuna.pool_idx); in fortuna_add_entropy()
327 prng->u.fortuna.pool_idx %= LTC_FORTUNA_POOLS; in fortuna_add_entropy()
330 LTC_MUTEX_UNLOCK(&prng->lock); in fortuna_add_entropy()
340 int fortuna_ready(prng_state *prng) in fortuna_ready() argument
343 LTC_ARGCHK(prng != NULL); in fortuna_ready()
345 LTC_MUTEX_LOCK(&prng->lock); in fortuna_ready()
349 prng->u.fortuna.wd = s_fortuna_current_time() - 1; in fortuna_ready()
351 prng->u.fortuna.wd = LTC_FORTUNA_WD; in fortuna_ready()
353 err = s_fortuna_reseed(prng); in fortuna_ready()
354 prng->ready = (err == CRYPT_OK) ? 1 : 0; in fortuna_ready()
356 LTC_MUTEX_UNLOCK(&prng->lock); in fortuna_ready()
367 unsigned long fortuna_read(unsigned char *out, unsigned long outlen, prng_state *prng) in fortuna_read() argument
372 if (outlen == 0 || prng == NULL || out == NULL) return 0; in fortuna_read()
374 LTC_MUTEX_LOCK(&prng->lock); in fortuna_read()
376 if (!prng->ready) { in fortuna_read()
381 if (prng->u.fortuna.pool0_len >= 64) { in fortuna_read()
382 if (s_fortuna_reseed(prng) != CRYPT_OK) { in fortuna_read()
388 if (prng->u.fortuna.reset_cnt == 0) { in fortuna_read()
398 rijndael_ecb_encrypt(prng->u.fortuna.IV, out, &prng->u.fortuna.skey); in fortuna_read()
401 s_fortuna_update_iv(prng); in fortuna_read()
406 rijndael_ecb_encrypt(prng->u.fortuna.IV, tmp, &prng->u.fortuna.skey); in fortuna_read()
408 s_fortuna_update_iv(prng); in fortuna_read()
412 rijndael_ecb_encrypt(prng->u.fortuna.IV, prng->u.fortuna.K , &prng->u.fortuna.skey); in fortuna_read()
413 s_fortuna_update_iv(prng); in fortuna_read()
415 rijndael_ecb_encrypt(prng->u.fortuna.IV, prng->u.fortuna.K+16, &prng->u.fortuna.skey); in fortuna_read()
416 s_fortuna_update_iv(prng); in fortuna_read()
418 if (rijndael_setup(prng->u.fortuna.K, 32, 0, &prng->u.fortuna.skey) != CRYPT_OK) { in fortuna_read()
426 LTC_MUTEX_UNLOCK(&prng->lock); in fortuna_read()
435 int fortuna_done(prng_state *prng) in fortuna_done() argument
440 LTC_ARGCHK(prng != NULL); in fortuna_done()
442 LTC_MUTEX_LOCK(&prng->lock); in fortuna_done()
443 prng->ready = 0; in fortuna_done()
447 if ((err = sha256_done(&(prng->u.fortuna.pool[x]), tmp)) != CRYPT_OK) { in fortuna_done()
458 LTC_MUTEX_UNLOCK(&prng->lock); in fortuna_done()
459 LTC_MUTEX_DESTROY(&prng->lock); in fortuna_done()
479 int fortuna_import(const unsigned char *in, unsigned long inlen, prng_state *prng) in LTC_PRNG_EXPORT()
484 LTC_ARGCHK(prng != NULL); in LTC_PRNG_EXPORT()
490 if ((err = fortuna_start(prng)) != CRYPT_OK) { in LTC_PRNG_EXPORT()
494 if ((err = fortuna_update_seed(in, inlen, prng)) != CRYPT_OK) { in LTC_PRNG_EXPORT()