Avoid integer overflow in entropy counter.
authorBodo Möller <bodo@openssl.org>
Fri, 21 Jan 2000 19:54:22 +0000 (19:54 +0000)
committerBodo Möller <bodo@openssl.org>
Fri, 21 Jan 2000 19:54:22 +0000 (19:54 +0000)
Slightly clarify the RAND_... documentation.

crypto/rand/md_rand.c
doc/crypto/RAND_add.pod
doc/crypto/RAND_bytes.pod

index 1a840220fcf882bef67feb4677af1037b0566596..18b8e8d922830d7615148592e759487207e6ae73 100644 (file)
@@ -138,7 +138,7 @@ static int state_num=0,state_index=0;
 static unsigned char state[STATE_SIZE+MD_DIGEST_LENGTH];
 static unsigned char md[MD_DIGEST_LENGTH];
 static long md_count[2]={0,0};
-static int entropy=0;
+static unsigned entropy=0;
 
 const char *RAND_version="RAND" OPENSSL_VERSION_PTEXT;
 
@@ -286,7 +286,8 @@ static void ssleay_rand_add(const void *buf, int num, int add)
 #ifndef THREADS        
        assert(md_c[1] == md_count[1]);
 #endif
-       entropy += add;
+       if (entropy < ENTROPY_NEEDED)
+           entropy += add;
        }
 
 static void ssleay_rand_seed(const void *buf, int num)
index fe539198019340db48d7030cbaaadf735107d365..9eeb3993770397f9d0b983252240c060bfc96a24 100644 (file)
@@ -30,7 +30,7 @@ RAND_add() may be called with sensitive data such as user entered
 passwords. The seed values cannot be recovered from the PRNG output.
 
 OpenSSL makes sure that the PRNG state is unique for each thread. On
-systems that provide C</dev/random>, the randomness device is used
+systems that provide C</dev/urandom>, the randomness device is used
 to seed the PRNG transparently. However, on all other systems, the
 application is responsible for seeding the PRNG by calling RAND_add()
 or RAND_load_file(3).
index 4abe93a832036bbd8cdc2d615d5a4f587b72083c..aa89f3c27c449d7486eece18c1f39f1bebb25eb3 100644 (file)
@@ -14,13 +14,16 @@ RAND_bytes, RAND_pseudo_bytes - Generate random data
 
 =head1 DESCRIPTION
 
-RAND_bytes() puts B<num> random bytes into B<buf>. An error occurs if
-the PRNG has not been seeded with enough randomness.
-
-RAND_pseudo_bytes() puts B<num> pseudo-random bytes into B<buf>. These
-bytes are guaranteed to be unique, but not unpredictable. They can be
-used for non-cryptographic purposes and for certain purposes in
-cryptographic protocols, but not for key generation etc.
+RAND_bytes() puts B<num> cryptographically strong pseudo-random bytes
+into B<buf>. An error occurs if the PRNG has not been seeded with
+enough randomness to ensure an unpredictable byte sequence.
+
+RAND_pseudo_bytes() puts B<num> pseudo-random bytes into B<buf>.
+Pseudo-random byte sequences generated by RAND_pseudo_bytes() will be
+unique if they are of sufficient length, but are not necessarily
+unpredictable. They can be used for non-cryptographic purposes and for
+certain purposes in cryptographic protocols, but usually not for key
+generation etc.
 
 =head1 RETURN VALUES