/* $OpenLDAP$ */
/*
- * Copyright 1998-2000 The OpenLDAP Foundation, All Rights Reserved.
+ * Copyright 1998-2002 The OpenLDAP Foundation, All Rights Reserved.
* COPYING RESTRICTIONS APPLY, see COPYRIGHT file
*/
#include <ac/time.h>
#include <ac/unistd.h>
-#ifdef HAVE_WINCRYPT_H
-#include <wincrypt.h>
-#endif
#ifdef HAVE_PROCESS_H
#include <process.h>
#endif
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 );
- close(fd);
+ do {
+ rc = read( fd, buf, nbytes );
+ if( rc <= 0 ) break;
- /* should return nbytes */
- if( rc < nbytes ) return -1;
+ buf+=rc;
+ nbytes-=rc;
- return 0;
+ if( ++n >= URANDOM_NREADS ) break;
+ } while( nbytes > 0 );
+
+ close(fd);
+ return nbytes > 0 ? -1 : 0;
}
#elif PROV_RSA_FULL
{
struct rdata_s {
int counter;
- char *buf;
+ unsigned char *buf;
struct rdata_s *stack;
pid_t pid;
rdata.junk++;
lutil_MD5Init( &ctx );
- lutil_MD5Update( &ctx, (char *) &rdata, sizeof( rdata ) );
+ lutil_MD5Update( &ctx, (unsigned char *) &rdata, sizeof( rdata ) );
/* allow caller to provided additional entropy */
- lutil_MD5Update( &ctx, (char *) &buf, nbytes );
+ lutil_MD5Update( &ctx, buf, nbytes );
lutil_MD5Final( digest, &ctx );