From: Bodo Möller Date: Mon, 24 Jan 2000 10:03:24 +0000 (+0000) Subject: RAND_load_file(..., -1) now means "read the complete file"; X-Git-Tag: OpenSSL_0_9_5beta1~199 X-Git-Url: https://git.openssl.org/gitweb/?p=openssl.git;a=commitdiff_plain;h=05ccd698b986131a217f85281977e767673b27d1;ds=inline RAND_load_file(..., -1) now means "read the complete file"; this is what we now use to read $RANDFILE / $HOME/.rnd. (Previously, after 'cat'ting lots of stuff into .rnd only the first MB would be looked at.) Bugfix for apps/enc.c: Continue if RAND_pseudo_bytes returns 0 (only -1 is an error). --- diff --git a/apps/app_rand.c b/apps/app_rand.c index 9e29e54954..6384dd0be5 100644 --- a/apps/app_rand.c +++ b/apps/app_rand.c @@ -130,7 +130,7 @@ int app_RAND_load_file(const char *file, BIO *bio_e, int dont_warn) if (file == NULL) file = RAND_file_name(buffer, sizeof buffer); - if (file == NULL || !RAND_load_file(file, 1024L*1024L)) + if (file == NULL || !RAND_load_file(file, -1)) { if (!dont_warn) { diff --git a/apps/enc.c b/apps/enc.c index 842036697c..d5db3bf0e1 100644 --- a/apps/enc.c +++ b/apps/enc.c @@ -448,7 +448,7 @@ bad: "invalid hex salt value\n"); goto end; } - } else if (RAND_pseudo_bytes(salt, PKCS5_SALT_LEN) <= 0) + } else if (RAND_pseudo_bytes(salt, PKCS5_SALT_LEN) < 0) goto end; /* If -P option then don't bother writing */ if((printkey != 2) diff --git a/crypto/rand/randfile.c b/crypto/rand/randfile.c index 375c339e5c..cea9f54e73 100644 --- a/crypto/rand/randfile.c +++ b/crypto/rand/randfile.c @@ -82,6 +82,9 @@ int RAND_load_file(const char *file, long bytes) { + /* If bytes >= 0, read up to 'bytes' bytes. + * if bytes == -1, read complete file. */ + MS_STATIC unsigned char buf[BUFSIZE]; struct stat sb; int i,ret=0,n; @@ -93,20 +96,26 @@ int RAND_load_file(const char *file, long bytes) /* If the state fails, put some crap in anyway */ RAND_add(&sb,sizeof(sb),0); if (i < 0) return(0); - if (bytes <= 0) return(ret); + if (bytes == 0) return(ret); in=fopen(file,"rb"); if (in == NULL) goto err; for (;;) { - n=(bytes < BUFSIZE)?(int)bytes:BUFSIZE; + if (bytes > 0) + n = (bytes < BUFSIZE)?(int)bytes:BUFSIZE; + else + n = BUFSIZE; i=fread(buf,1,n,in); if (i <= 0) break; /* even if n != i, use the full array */ RAND_add(buf,n,i); ret+=i; - bytes-=n; - if (bytes <= 0) break; + if (bytes > 0) + { + bytes-=n; + if (bytes == 0) break; + } } fclose(in); memset(buf,0,BUFSIZE); diff --git a/doc/crypto/RAND_load_file.pod b/doc/crypto/RAND_load_file.pod index 8fc985ee3e..c6a00a240e 100644 --- a/doc/crypto/RAND_load_file.pod +++ b/doc/crypto/RAND_load_file.pod @@ -18,12 +18,14 @@ RAND_load_file, RAND_write_file, RAND_file_name - PRNG seed file RAND_file_name() generates a default path for the random seed file. B points to a buffer of size B in which to store the -filename. The seed file is $RANDFILE, if that environment variable is -set, $HOME/.rand otherwise. If $HOME is not set either, or B is +filename. The seed file is $RANDFILE if that environment variable is +set, $HOME/.rnd otherwise. If $HOME is not set either, or B is too small for the path name, an error occurs. -RAND_load_file() reads up to B from file B and -adds them to the PRNG. +RAND_load_file() reads a number of bytes from file B and +adds them to the PRNG. If B is non-negative, +up to to B are read; if B is -1, the complete file +is read. RAND_write_file() writes a number of random bytes (currently 1024) to file B which can be used to initialze the PRNG by calling