Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/crypto/dist/ssh take the safest side, mandate rnd(4).



details:   https://anonhg.NetBSD.org/src/rev/faa842c632f5
branches:  trunk
changeset: 503801:faa842c632f5
user:      itojun <itojun%NetBSD.org@localhost>
date:      Wed Feb 14 04:46:58 2001 +0000

description:
take the safest side, mandate rnd(4).

diffstat:

 crypto/dist/ssh/random.c |  29 +++++++++++++++++++++--------
 crypto/dist/ssh/random.h |   3 ++-
 crypto/dist/ssh/sshd.c   |   3 +++
 3 files changed, 26 insertions(+), 9 deletions(-)

diffs (89 lines):

diff -r 7a8319478c8a -r faa842c632f5 crypto/dist/ssh/random.c
--- a/crypto/dist/ssh/random.c  Wed Feb 14 01:29:45 2001 +0000
+++ b/crypto/dist/ssh/random.c  Wed Feb 14 04:46:58 2001 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: random.c,v 1.3 2001/02/09 00:44:35 itojun Exp $        */
+/*     $NetBSD: random.c,v 1.4 2001/02/14 04:46:58 itojun Exp $        */
 
 /*-
  * Copyright (c) 2000 The NetBSD Foundation, Inc.
@@ -38,7 +38,7 @@
 
 #include <sys/cdefs.h>
 #ifndef lint
-__RCSID("$NetBSD: random.c,v 1.3 2001/02/09 00:44:35 itojun Exp $");
+__RCSID("$NetBSD: random.c,v 1.4 2001/02/14 04:46:58 itojun Exp $");
 #endif
 
 /*
@@ -58,9 +58,26 @@
 #include "includes.h"
 #include "pathnames.h"
 #include "random.h"
+#include "log.h"
 
 #define        BUFSIZE 32
 
+static const char *rndfail = "random number device is mandatory.  see rnd(4).";
+
+int
+arc4random_check(void)
+{
+       int fd;
+
+       fd = open(_PATH_URANDOM, O_RDONLY, 0666);
+       if (fd < 0) {
+               fatal(rndfail);
+               /*NOTREACHED*/
+       }
+       close(fd);
+       return 0;
+}
+
 void
 arc4random_stir(void)
 {
@@ -76,12 +93,8 @@
                (void) close(fd);
                memset(buf, 0, sizeof(buf));
        } else {
-               /*
-                * XXX We should stir in other environmental
-                * XXX noise, here.
-                */
-               RAND_pseudo_bytes(buf, sizeof(buf) >> 1);
-               RAND_seed(buf, sizeof(buf) >> 1);
+               fatal(rndfail);
+               /*NOTREACHED*/
        }
 }
 
diff -r 7a8319478c8a -r faa842c632f5 crypto/dist/ssh/random.h
--- a/crypto/dist/ssh/random.h  Wed Feb 14 01:29:45 2001 +0000
+++ b/crypto/dist/ssh/random.h  Wed Feb 14 04:46:58 2001 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: random.h,v 1.1 2001/02/07 17:05:33 itojun Exp $        */
+/*     $NetBSD: random.h,v 1.2 2001/02/14 04:46:58 itojun Exp $        */
 
 /*-
  * Copyright (c) 2000 The NetBSD Foundation, Inc.
@@ -36,5 +36,6 @@
  * POSSIBILITY OF SUCH DAMAGE.
  */
 
+int arc4random_check(void);
 void arc4random_stir(void);
 u_int32_t arc4random(void);
diff -r 7a8319478c8a -r faa842c632f5 crypto/dist/ssh/sshd.c
--- a/crypto/dist/ssh/sshd.c    Wed Feb 14 01:29:45 2001 +0000
+++ b/crypto/dist/ssh/sshd.c    Wed Feb 14 04:46:58 2001 +0000
@@ -556,6 +556,9 @@
        int startups = 0;
        int ret, key_used = 0;
 
+       if (arc4random_check() < 0)
+               fatal("rnd(4) is mandatory.");
+
        /* Save argv. */
        saved_argv = av;
 



Home | Main Index | Thread Index | Old Index