diff options
author | des <des@FreeBSD.org> | 2006-03-22 19:46:12 +0000 |
---|---|---|
committer | des <des@FreeBSD.org> | 2006-03-22 19:46:12 +0000 |
commit | 448503722a8c8934d8520302b7551e95de730b06 (patch) | |
tree | 42b3633dec62ddc0b702c6e83df5d64683b1c6c3 /crypto/openssh/entropy.c | |
parent | 755a16fa864cacbbd9fbefc822011b6741351d8d (diff) | |
download | FreeBSD-src-448503722a8c8934d8520302b7551e95de730b06.zip FreeBSD-src-448503722a8c8934d8520302b7551e95de730b06.tar.gz |
Vendor import of OpenSSH 4.3p1.
Diffstat (limited to 'crypto/openssh/entropy.c')
-rw-r--r-- | crypto/openssh/entropy.c | 38 |
1 files changed, 33 insertions, 5 deletions
diff --git a/crypto/openssh/entropy.c b/crypto/openssh/entropy.c index 410bbb9..e5b45b0 100644 --- a/crypto/openssh/entropy.c +++ b/crypto/openssh/entropy.c @@ -26,6 +26,7 @@ #include <openssl/rand.h> #include <openssl/crypto.h> +#include <openssl/err.h> #include "ssh.h" #include "misc.h" @@ -33,6 +34,8 @@ #include "atomicio.h" #include "pathnames.h" #include "log.h" +#include "buffer.h" +#include "bufaux.h" /* * Portable OpenSSH PRNG seeding: @@ -45,7 +48,7 @@ * XXX: we should tell the child how many bytes we need. */ -RCSID("$Id: entropy.c,v 1.49 2005/07/17 07:26:44 djm Exp $"); +RCSID("$Id: entropy.c,v 1.52 2005/09/27 22:26:30 dtucker Exp $"); #ifndef OPENSSL_PRNG_ONLY #define RANDOM_SEED_SIZE 48 @@ -145,10 +148,35 @@ init_rng(void) "have %lx", OPENSSL_VERSION_NUMBER, SSLeay()); #ifndef OPENSSL_PRNG_ONLY - if ((original_uid = getuid()) == -1) - fatal("getuid: %s", strerror(errno)); - if ((original_euid = geteuid()) == -1) - fatal("geteuid: %s", strerror(errno)); + original_uid = getuid(); + original_euid = geteuid(); #endif } +#ifndef OPENSSL_PRNG_ONLY +void +rexec_send_rng_seed(Buffer *m) +{ + u_char buf[RANDOM_SEED_SIZE]; + + if (RAND_bytes(buf, sizeof(buf)) <= 0) { + error("Couldn't obtain random bytes (error %ld)", + ERR_get_error()); + buffer_put_string(m, "", 0); + } else + buffer_put_string(m, buf, sizeof(buf)); +} + +void +rexec_recv_rng_seed(Buffer *m) +{ + u_char *buf; + u_int len; + + buf = buffer_get_string_ret(m, &len); + if (buf != NULL) { + debug3("rexec_recv_rng_seed: seeding rng with %u bytes", len); + RAND_add(buf, len, len); + } +} +#endif |