/dev/urandom re-read(2) loop

This commit is contained in:
Kurt Zeilenga 2002-06-03 16:43:57 +00:00
parent 43a4500b9a
commit 131470685f

View file

@ -36,21 +36,27 @@ int lutil_entropy( unsigned char *buf, ber_len_t nbytes )
if( nbytes == 0 ) return 0;
#ifdef URANDOM_DEVICE
#define URANDOM_NREADS 4
/* Linux and *BSD offer a urandom device */
{
int rc, fd;
int rc, fd, n=0;
fd = open( URANDOM_DEVICE, O_RDONLY );
if( fd < 0 ) return -1;
rc = read( fd, buf, nbytes );
do {
rc = read( fd, buf, nbytes );
if( rc <= 0 ) break;
buf+=rc;
nbytes-=rc;
if( ++n >= URANDOM_NREADS ) break;
} while( nbytes > 0 );
close(fd);
/* should return nbytes */
if( rc != nbytes ) return -1;
return 0;
return nbytes > 0 ? -1 : 0;
}
#elif PROV_RSA_FULL
{