- Changed the used random function pointer to more flexible format. Renamed havege_rand() to havege_random() to prevent mistakes. Lots of changes as a consequence in library code and programs
diff --git a/library/bignum.c b/library/bignum.c
index 36e78e1..6591b5b 100644
--- a/library/bignum.c
+++ b/library/bignum.c
@@ -1608,18 +1608,16 @@
return( ret );
}
-int mpi_fill_random( mpi *X, size_t size, int (*f_rng)(void *), void *p_rng )
+int mpi_fill_random( mpi *X, size_t size,
+ int (*f_rng)(void *, unsigned char *, size_t),
+ void *p_rng )
{
int ret;
- size_t k;
- unsigned char *p;
MPI_CHK( mpi_grow( X, size ) );
MPI_CHK( mpi_lset( X, 0 ) );
- p = (unsigned char *) X->p;
- for( k = 0; k < X->n * ciL; k++ )
- *p++ = (unsigned char) f_rng( p_rng );
+ MPI_CHK( f_rng( p_rng, (unsigned char *) X->p, X->n * ciL ) );
cleanup:
return( ret );
@@ -1750,7 +1748,9 @@
/*
* Miller-Rabin primality test (HAC 4.24)
*/
-int mpi_is_prime( mpi *X, int (*f_rng)(void *), void *p_rng )
+int mpi_is_prime( mpi *X,
+ int (*f_rng)(void *, unsigned char *, size_t),
+ void *p_rng )
{
int ret, xs;
size_t i, j, n, s;
@@ -1809,7 +1809,7 @@
/*
* pick a random A, 1 < A < |X| - 1
*/
- mpi_fill_random( &A, X->n, f_rng, p_rng );
+ MPI_CHK( mpi_fill_random( &A, X->n, f_rng, p_rng ) );
if( mpi_cmp_mpi( &A, &W ) >= 0 )
{
@@ -1867,7 +1867,8 @@
* Prime number generation
*/
int mpi_gen_prime( mpi *X, size_t nbits, int dh_flag,
- int (*f_rng)(void *), void *p_rng )
+ int (*f_rng)(void *, unsigned char *, size_t),
+ void *p_rng )
{
int ret;
size_t k, n;
@@ -1880,7 +1881,7 @@
n = BITS_TO_LIMBS( nbits );
- mpi_fill_random( X, n, f_rng, p_rng );
+ MPI_CHK( mpi_fill_random( X, n, f_rng, p_rng ) );
k = mpi_msb( X );
if( k < nbits ) MPI_CHK( mpi_shift_l( X, nbits - k ) );