mirror of
https://git.openldap.org/openldap/openldap.git
synced 2026-01-06 15:10:22 -05:00
/dev/urandom re-read(2) loop
This commit is contained in:
parent
43a4500b9a
commit
131470685f
1 changed files with 13 additions and 7 deletions
|
|
@ -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
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in a new issue