@@ -64,7 +64,7 @@ static void _fortuna_update_iv(prng_state *prng)
6464 int x ;
6565 unsigned char * IV ;
6666 /* update IV */
67- IV = prng -> fortuna .IV ;
67+ IV = prng -> u . fortuna .IV ;
6868 for (x = 0 ; x < 16 ; x ++ ) {
6969 IV [x ] = (IV [x ] + 1 ) & 255 ;
7070 if (IV [x ] != 0 ) break ;
@@ -108,26 +108,26 @@ static int _fortuna_reseed(prng_state *prng)
108108
109109#ifdef LTC_FORTUNA_RESEED_RATELIMIT_TIMED
110110 ulong64 now = _fortuna_current_time ();
111- if (now == prng -> fortuna .wd )
111+ if (now == prng -> u . fortuna .wd )
112112 return CRYPT_OK ;
113113#else
114- if (++ prng -> fortuna .wd < LTC_FORTUNA_WD )
114+ if (++ prng -> u . fortuna .wd < LTC_FORTUNA_WD )
115115 return CRYPT_OK ;
116116#endif
117117
118118 /* new K == LTC_SHA256(K || s) where s == LTC_SHA256(P0) || LTC_SHA256(P1) ... */
119119 sha256_init (& md );
120- if ((err = sha256_process (& md , prng -> fortuna .K , 32 )) != CRYPT_OK ) {
120+ if ((err = sha256_process (& md , prng -> u . fortuna .K , 32 )) != CRYPT_OK ) {
121121 sha256_done (& md , tmp );
122122 return err ;
123123 }
124124
125- reset_cnt = prng -> fortuna .reset_cnt + 1 ;
125+ reset_cnt = prng -> u . fortuna .reset_cnt + 1 ;
126126
127127 for (x = 0 ; x < LTC_FORTUNA_POOLS ; x ++ ) {
128128 if (x == 0 || ((reset_cnt >> (x - 1 )) & 1 ) == 0 ) {
129129 /* terminate this hash */
130- if ((err = sha256_done (& prng -> fortuna .pool [x ], tmp )) != CRYPT_OK ) {
130+ if ((err = sha256_done (& prng -> u . fortuna .pool [x ], tmp )) != CRYPT_OK ) {
131131 sha256_done (& md , tmp );
132132 return err ;
133133 }
@@ -137,7 +137,7 @@ static int _fortuna_reseed(prng_state *prng)
137137 return err ;
138138 }
139139 /* reset this pool */
140- if ((err = sha256_init (& prng -> fortuna .pool [x ])) != CRYPT_OK ) {
140+ if ((err = sha256_init (& prng -> u . fortuna .pool [x ])) != CRYPT_OK ) {
141141 sha256_done (& md , tmp );
142142 return err ;
143143 }
@@ -147,22 +147,22 @@ static int _fortuna_reseed(prng_state *prng)
147147 }
148148
149149 /* finish key */
150- if ((err = sha256_done (& md , prng -> fortuna .K )) != CRYPT_OK ) {
150+ if ((err = sha256_done (& md , prng -> u . fortuna .K )) != CRYPT_OK ) {
151151 return err ;
152152 }
153- if ((err = rijndael_setup (prng -> fortuna .K , 32 , 0 , & prng -> fortuna .skey )) != CRYPT_OK ) {
153+ if ((err = rijndael_setup (prng -> u . fortuna .K , 32 , 0 , & prng -> u . fortuna .skey )) != CRYPT_OK ) {
154154 return err ;
155155 }
156156 _fortuna_update_iv (prng );
157157
158158 /* reset/update internals */
159- prng -> fortuna .pool0_len = 0 ;
159+ prng -> u . fortuna .pool0_len = 0 ;
160160#ifdef LTC_FORTUNA_RESEED_RATELIMIT_TIMED
161- prng -> fortuna .wd = now ;
161+ prng -> u . fortuna .wd = now ;
162162#else
163- prng -> fortuna .wd = 0 ;
163+ prng -> u . fortuna .wd = 0 ;
164164#endif
165- prng -> fortuna .reset_cnt = reset_cnt ;
165+ prng -> u . fortuna .reset_cnt = reset_cnt ;
166166
167167
168168#ifdef LTC_CLEAN_STACK
@@ -190,7 +190,7 @@ int fortuna_update_seed(const unsigned char *in, unsigned long inlen, prng_state
190190 LTC_MUTEX_LOCK (& prng -> lock );
191191 /* new K = LTC_SHA256(K || in) */
192192 sha256_init (& md );
193- if ((err = sha256_process (& md , prng -> fortuna .K , 32 )) != CRYPT_OK ) {
193+ if ((err = sha256_process (& md , prng -> u . fortuna .K , 32 )) != CRYPT_OK ) {
194194 sha256_done (& md , tmp );
195195 goto LBL_UNLOCK ;
196196 }
@@ -199,7 +199,7 @@ int fortuna_update_seed(const unsigned char *in, unsigned long inlen, prng_state
199199 goto LBL_UNLOCK ;
200200 }
201201 /* finish key */
202- if ((err = sha256_done (& md , prng -> fortuna .K )) != CRYPT_OK ) {
202+ if ((err = sha256_done (& md , prng -> u . fortuna .K )) != CRYPT_OK ) {
203203 goto LBL_UNLOCK ;
204204 }
205205 _fortuna_update_iv (prng );
@@ -228,25 +228,25 @@ int fortuna_start(prng_state *prng)
228228
229229 /* initialize the pools */
230230 for (x = 0 ; x < LTC_FORTUNA_POOLS ; x ++ ) {
231- if ((err = sha256_init (& prng -> fortuna .pool [x ])) != CRYPT_OK ) {
231+ if ((err = sha256_init (& prng -> u . fortuna .pool [x ])) != CRYPT_OK ) {
232232 for (y = 0 ; y < x ; y ++ ) {
233- sha256_done (& prng -> fortuna .pool [y ], tmp );
233+ sha256_done (& prng -> u . fortuna .pool [y ], tmp );
234234 }
235235 return err ;
236236 }
237237 }
238- prng -> fortuna .pool_idx = prng -> fortuna .pool0_len = prng -> fortuna .wd = 0 ;
239- prng -> fortuna .reset_cnt = 0 ;
238+ prng -> u . fortuna .pool_idx = prng -> u . fortuna .pool0_len = prng -> u . fortuna .wd = 0 ;
239+ prng -> u . fortuna .reset_cnt = 0 ;
240240
241241 /* reset bufs */
242- zeromem (prng -> fortuna .K , 32 );
243- if ((err = rijndael_setup (prng -> fortuna .K , 32 , 0 , & prng -> fortuna .skey )) != CRYPT_OK ) {
242+ zeromem (prng -> u . fortuna .K , 32 );
243+ if ((err = rijndael_setup (prng -> u . fortuna .K , 32 , 0 , & prng -> u . fortuna .skey )) != CRYPT_OK ) {
244244 for (x = 0 ; x < LTC_FORTUNA_POOLS ; x ++ ) {
245- sha256_done (& prng -> fortuna .pool [x ], tmp );
245+ sha256_done (& prng -> u . fortuna .pool [x ], tmp );
246246 }
247247 return err ;
248248 }
249- zeromem (prng -> fortuna .IV , 16 );
249+ zeromem (prng -> u . fortuna .IV , 16 );
250250
251251 LTC_MUTEX_INIT (& prng -> lock )
252252
@@ -267,14 +267,14 @@ static int _fortuna_add(unsigned long source, unsigned long pool, const unsigned
267267 tmp [0 ] = (unsigned char )source ;
268268 tmp [1 ] = (unsigned char )inlen ;
269269
270- if ((err = sha256_process (& prng -> fortuna .pool [pool ], tmp , 2 )) != CRYPT_OK ) {
270+ if ((err = sha256_process (& prng -> u . fortuna .pool [pool ], tmp , 2 )) != CRYPT_OK ) {
271271 return err ;
272272 }
273- if ((err = sha256_process (& prng -> fortuna .pool [pool ], in , inlen )) != CRYPT_OK ) {
273+ if ((err = sha256_process (& prng -> u . fortuna .pool [pool ], in , inlen )) != CRYPT_OK ) {
274274 return err ;
275275 }
276276 if (pool == 0 ) {
277- prng -> fortuna .pool0_len += inlen ;
277+ prng -> u . fortuna .pool0_len += inlen ;
278278 }
279279 return CRYPT_OK ; /* success */
280280}
@@ -324,11 +324,11 @@ int fortuna_add_entropy(const unsigned char *in, unsigned long inlen, prng_state
324324
325325 LTC_MUTEX_LOCK (& prng -> lock );
326326
327- err = _fortuna_add (0 , prng -> fortuna .pool_idx , in , inlen , prng );
327+ err = _fortuna_add (0 , prng -> u . fortuna .pool_idx , in , inlen , prng );
328328
329329 if (err == CRYPT_OK ) {
330- ++ (prng -> fortuna .pool_idx );
331- prng -> fortuna .pool_idx %= LTC_FORTUNA_POOLS ;
330+ ++ (prng -> u . fortuna .pool_idx );
331+ prng -> u . fortuna .pool_idx %= LTC_FORTUNA_POOLS ;
332332 }
333333
334334 LTC_MUTEX_UNLOCK (& prng -> lock );
@@ -350,9 +350,9 @@ int fortuna_ready(prng_state *prng)
350350 /* make sure the reseed doesn't fail because
351351 * of the chosen rate limit */
352352#ifdef LTC_FORTUNA_RESEED_RATELIMIT_TIMED
353- prng -> fortuna .wd = _fortuna_current_time () - 1 ;
353+ prng -> u . fortuna .wd = _fortuna_current_time () - 1 ;
354354#else
355- prng -> fortuna .wd = LTC_FORTUNA_WD ;
355+ prng -> u . fortuna .wd = LTC_FORTUNA_WD ;
356356#endif
357357 err = _fortuna_reseed (prng );
358358 prng -> ready = (err == CRYPT_OK ) ? 1 : 0 ;
@@ -382,14 +382,14 @@ unsigned long fortuna_read(unsigned char *out, unsigned long outlen, prng_state
382382 }
383383
384384 /* do we have to reseed? */
385- if (prng -> fortuna .pool0_len >= 64 ) {
385+ if (prng -> u . fortuna .pool0_len >= 64 ) {
386386 if (_fortuna_reseed (prng ) != CRYPT_OK ) {
387387 goto LBL_UNLOCK ;
388388 }
389389 }
390390
391391 /* ensure that one reseed happened before allowing to read */
392- if (prng -> fortuna .reset_cnt == 0 ) {
392+ if (prng -> u . fortuna .reset_cnt == 0 ) {
393393 goto LBL_UNLOCK ;
394394 }
395395
@@ -399,27 +399,27 @@ unsigned long fortuna_read(unsigned char *out, unsigned long outlen, prng_state
399399 /* handle whole blocks without the extra XMEMCPY */
400400 while (outlen >= 16 ) {
401401 /* encrypt the IV and store it */
402- rijndael_ecb_encrypt (prng -> fortuna .IV , out , & prng -> fortuna .skey );
402+ rijndael_ecb_encrypt (prng -> u . fortuna .IV , out , & prng -> u . fortuna .skey );
403403 out += 16 ;
404404 outlen -= 16 ;
405405 _fortuna_update_iv (prng );
406406 }
407407
408408 /* left over bytes? */
409409 if (outlen > 0 ) {
410- rijndael_ecb_encrypt (prng -> fortuna .IV , tmp , & prng -> fortuna .skey );
410+ rijndael_ecb_encrypt (prng -> u . fortuna .IV , tmp , & prng -> u . fortuna .skey );
411411 XMEMCPY (out , tmp , outlen );
412412 _fortuna_update_iv (prng );
413413 }
414414
415415 /* generate new key */
416- rijndael_ecb_encrypt (prng -> fortuna .IV , prng -> fortuna .K , & prng -> fortuna .skey );
416+ rijndael_ecb_encrypt (prng -> u . fortuna .IV , prng -> u . fortuna .K , & prng -> u . fortuna .skey );
417417 _fortuna_update_iv (prng );
418418
419- rijndael_ecb_encrypt (prng -> fortuna .IV , prng -> fortuna .K + 16 , & prng -> fortuna .skey );
419+ rijndael_ecb_encrypt (prng -> u . fortuna .IV , prng -> u . fortuna .K + 16 , & prng -> u . fortuna .skey );
420420 _fortuna_update_iv (prng );
421421
422- if (rijndael_setup (prng -> fortuna .K , 32 , 0 , & prng -> fortuna .skey ) != CRYPT_OK ) {
422+ if (rijndael_setup (prng -> u . fortuna .K , 32 , 0 , & prng -> u . fortuna .skey ) != CRYPT_OK ) {
423423 tlen = 0 ;
424424 }
425425
@@ -448,7 +448,7 @@ int fortuna_done(prng_state *prng)
448448
449449 /* terminate all the hashes */
450450 for (x = 0 ; x < LTC_FORTUNA_POOLS ; x ++ ) {
451- if ((err = sha256_done (& (prng -> fortuna .pool [x ]), tmp )) != CRYPT_OK ) {
451+ if ((err = sha256_done (& (prng -> u . fortuna .pool [x ]), tmp )) != CRYPT_OK ) {
452452 goto LBL_UNLOCK ;
453453 }
454454 }
0 commit comments