diff -uNr a/eucrypt/README b/eucrypt/README --- a/eucrypt/README 6d9112fb539eed54572be08e83fa23127773c52c6aea0500217d50ec2f8c728cc64864f11c666521f393eb25690961b1c5fcae914efb049f6d65f8c4f34e64ec +++ b/eucrypt/README 0f1e1e6138e6ac1f44446b24c9fcef78dab67b5ac2186aea170b507eb33839533699c37c897dafab1bad76f35bf5b98c80dea90b2102dfab6580e2ccd1e6a9ce @@ -8,6 +8,8 @@ To understand EuCrypt, start from http://www.dianacoman.com/2017/12/07/introducing-eucrypt/ +NB: EuCrypt aims to *keep trying* to accomplish a task. In particular, when entropy is needed, it will keep asking for as many random bits as it needs from the configured entropy source and it will not proceed unless those are provided. + Components: 1. mpi Arbitrary length integers and operations. diff -uNr a/eucrypt/smg_rsa/primegen.c b/eucrypt/smg_rsa/primegen.c --- a/eucrypt/smg_rsa/primegen.c 125731ab93cc7040a8516735c40563958a82ef0484e0f9df9bc60e33225e39bf919d5f6b277421fed43047fa2b2185c0244378c5568a3623674e8b4abb015168 +++ b/eucrypt/smg_rsa/primegen.c 992c1ed9b3037031c841db0bb5d6467d2142acce1e9b67ddf91d1661d7a9731452d2f2d95222aac51ee7672a781fd2bb195692d3949e14eaf46b8e29d2243fe0 @@ -135,8 +135,11 @@ * loop until a prime is found: get noctets of random bits, trim and apply 110...01 mask, check if prime */ unsigned char *p = xmalloc( noctets ); + int nread; do { - get_random_octets_from( noctets, p, entropy_source ); + do { + nread = get_random_octets_from( noctets, p, entropy_source ); + } while ( nread != noctets ); mpi_set_buffer( output, p, noctets, 0); /* convert to MPI representation */ mpi_set_highbit( output, nbits - 1 ); /* trim at required size and set top bit */ mpi_set_bit( output, nbits - 2); /* set second top bit */