Home | History | Annotate | Download | only in prngs

Lines Matching full:fortuna

14   @file fortuna.c
15 Fortuna PRNG, Tom St Denis
18 /* Implementation of Fortuna by Tom St Denis
24 #ifdef FORTUNA
28 #error FORTUNA requires SHA256 and RIJNDAEL (AES)
41 "fortuna", 1024,
58 IV = prng->fortuna.IV;
72 ++prng->fortuna.reset_cnt;
76 if ((err = sha256_process(&md, prng->fortuna.K, 32)) != CRYPT_OK) {
82 if (x == 0 || ((prng->fortuna.reset_cnt >> (x-1)) & 1) == 0) {
84 if ((err = sha256_done(&prng->fortuna.pool[x], tmp)) != CRYPT_OK) {
94 if ((err = sha256_init(&prng->fortuna.pool[x])) != CRYPT_OK) {
104 if ((err = sha256_done(&md, prng->fortuna.K)) != CRYPT_OK) {
107 if ((err = rijndael_setup(prng->fortuna.K, 32, 0, &prng->fortuna.skey)) != CRYPT_OK) {
113 prng->fortuna.pool0_len = 0;
114 prng->fortuna.wd = 0;
139 if ((err = sha256_init(&prng->fortuna.pool[x])) != CRYPT_OK) {
141 sha256_done(&prng->fortuna.pool[y], tmp);
146 prng->fortuna.pool_idx = prng->fortuna.pool0_len = prng->fortuna.wd = 0;
147 prng->fortuna.reset_cnt = 0;
150 zeromem(prng->fortuna.K, 32);
151 if ((err = rijndael_setup(prng->fortuna.K, 32, 0, &prng->fortuna.skey)) != CRYPT_OK) {
153 sha256_done(&prng->fortuna.pool[x], tmp);
157 zeromem(prng->fortuna.IV, 16);
159 LTC_MUTEX_INIT(&prng->fortuna.prng_lock)
179 LTC_MUTEX_LOCK(&prng->fortuna.prng_lock);
183 LTC_MUTEX_UNLOCK(&prng->fortuna.prng_lock);
190 if ((err = sha256_process(&prng->fortuna.pool[prng->fortuna.pool_idx], tmp, 2)) != CRYPT_OK) {
191 LTC_MUTEX_UNLOCK(&prng->fortuna.prng_lock);
194 if ((err = sha256_process(&prng->fortuna.pool[prng->fortuna.pool_idx], in, inlen)) != CRYPT_OK) {
195 LTC_MUTEX_UNLOCK(&prng->fortuna.prng_lock);
198 if (prng->fortuna.pool_idx == 0) {
199 prng->fortuna.pool0_len += inlen;
201 if (++(prng->fortuna.pool_idx) == FORTUNA_POOLS) {
202 prng->fortuna.pool_idx = 0;
205 LTC_MUTEX_UNLOCK(&prng->fortuna.prng_lock);
235 LTC_MUTEX_LOCK(&prng->fortuna.prng_lock);
238 if (++prng->fortuna.wd == FORTUNA_WD || prng->fortuna.pool0_len >= 64) {
240 LTC_MUTEX_UNLOCK(&prng->fortuna.prng_lock);
251 rijndael_ecb_encrypt(prng->fortuna.IV, out, &prng->fortuna.skey);
259 rijndael_ecb_encrypt(prng->fortuna.IV, tmp, &prng->fortuna.skey);
265 rijndael_ecb_encrypt(prng->fortuna.IV, prng->fortuna.K , &prng->fortuna.skey); fortuna_update_iv(prng);
266 rijndael_ecb_encrypt(prng->fortuna.IV, prng->fortuna.K+16, &prng->fortuna.skey); fortuna_update_iv(prng);
267 if ((err = rijndael_setup(prng->fortuna.K, 32, 0, &prng->fortuna.skey)) != CRYPT_OK) {
268 LTC_MUTEX_UNLOCK(&prng->fortuna.prng_lock);
275 LTC_MUTEX_UNLOCK(&prng->fortuna.prng_lock);
290 LTC_MUTEX_LOCK(&prng->fortuna.prng_lock);
294 if ((err = sha256_done(&(prng->fortuna.pool[x]), tmp)) != CRYPT_OK) {
295 LTC_MUTEX_UNLOCK(&prng->fortuna.prng_lock);
305 LTC_MUTEX_UNLOCK(&prng->fortuna.prng_lock);
325 LTC_MUTEX_LOCK(&prng->fortuna.prng_lock);
329 LTC_MUTEX_UNLOCK(&prng->fortuna.prng_lock);
336 LTC_MUTEX_UNLOCK(&prng->fortuna.prng_lock);
345 XMEMCPY(md, &(prng->fortuna.pool[x]), sizeof(*md));
371 LTC_MUTEX_UNLOCK(&prng->fortuna.prng_lock);
425 /* $Source: /cvs/libtom/libtomcrypt/src/prngs/fortuna.c,v $ */