/* * HAVEGE rand function */ int havege_random( void *p_rng, unsigned char *buf, size_t len ) { int val; size_t use_len; havege_state *hs = (havege_state *) p_rng; unsigned char *p = buf; while( len > 0 ) { use_len = len; if( use_len > sizeof(int) ) use_len = sizeof(int); if( hs->offset[1] >= COLLECT_SIZE ) havege_fill( hs ); val = hs->pool[hs->offset[0]++]; val ^= hs->pool[hs->offset[1]++]; memcpy( p, &val, use_len ); len -= use_len; p += use_len; } return( 0 ); }
/* * HAVEGE rand function */ int havege_rand( void *p_rng ) { int ret; havege_state *hs = (havege_state *) p_rng; if( hs->offset[1] >= COLLECT_SIZE ) havege_fill( hs ); ret = hs->pool[hs->offset[0]++]; ret ^= hs->pool[hs->offset[1]++]; return( ret ); }
/* * HAVEGE initialization */ void havege_init( havege_state *hs ) { memset( hs, 0, sizeof( havege_state ) ); havege_fill( hs ); }
/* * HAVEGE initialization */ void mbedtls_havege_init( mbedtls_havege_state *hs ) { memset( hs, 0, sizeof( mbedtls_havege_state ) ); havege_fill( hs ); }