From aa4d426b4d3527d7e166df1a05058c9a4a0f6683 Mon Sep 17 00:00:00 2001 From: Wojtek Kosior Date: Fri, 30 Apr 2021 00:33:56 +0200 Subject: initial/final commit --- openssl-1.1.0h/apps/app_rand.c | 115 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 openssl-1.1.0h/apps/app_rand.c (limited to 'openssl-1.1.0h/apps/app_rand.c') diff --git a/openssl-1.1.0h/apps/app_rand.c b/openssl-1.1.0h/apps/app_rand.c new file mode 100644 index 0000000..ff0771c --- /dev/null +++ b/openssl-1.1.0h/apps/app_rand.c @@ -0,0 +1,115 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#include "apps.h" +#include +#include + +static int seeded = 0; +static int egdsocket = 0; + +int app_RAND_load_file(const char *file, int dont_warn) +{ + int consider_randfile = (file == NULL); + char buffer[200]; + + if (file == NULL) + file = RAND_file_name(buffer, sizeof(buffer)); +#ifndef OPENSSL_NO_EGD + else if (RAND_egd(file) > 0) { + /* + * we try if the given filename is an EGD socket. if it is, we don't + * write anything back to the file. + */ + egdsocket = 1; + return 1; + } +#endif + if (file == NULL || !RAND_load_file(file, -1)) { + if (RAND_status() == 0) { + if (!dont_warn) { + BIO_printf(bio_err, "unable to load 'random state'\n"); + BIO_printf(bio_err, + "This means that the random number generator has not been seeded\n"); + BIO_printf(bio_err, "with much random data.\n"); + if (consider_randfile) { /* explanation does not apply when a + * file is explicitly named */ + BIO_printf(bio_err, + "Consider setting the RANDFILE environment variable to point at a file that\n"); + BIO_printf(bio_err, + "'random' data can be kept in (the file will be overwritten).\n"); + } + } + return 0; + } + } + seeded = 1; + return 1; +} + +long app_RAND_load_files(char *name) +{ + char *p, *n; + int last; + long tot = 0; +#ifndef OPENSSL_NO_EGD + int egd; +#endif + + for (;;) { + last = 0; + for (p = name; ((*p != '\0') && (*p != LIST_SEPARATOR_CHAR)); p++) ; + if (*p == '\0') + last = 1; + *p = '\0'; + n = name; + name = p + 1; + if (*n == '\0') + break; + +#ifndef OPENSSL_NO_EGD + egd = RAND_egd(n); + if (egd > 0) + tot += egd; + else +#endif + tot += RAND_load_file(n, -1); + if (last) + break; + } + if (tot > 512) + app_RAND_allow_write_file(); + return (tot); +} + +int app_RAND_write_file(const char *file) +{ + char buffer[200]; + + if (egdsocket || !seeded) + /* + * If we did not manage to read the seed file, we should not write a + * low-entropy seed file back -- it would suppress a crucial warning + * the next time we want to use it. + */ + return 0; + + if (file == NULL) + file = RAND_file_name(buffer, sizeof(buffer)); + if (file == NULL || !RAND_write_file(file)) { + BIO_printf(bio_err, "unable to write 'random state'\n"); + return 0; + } + return 1; +} + +void app_RAND_allow_write_file(void) +{ + seeded = 1; +} -- cgit v1.2.3