1
0
mirror of https://gitlab.xiph.org/xiph/icecast-server.git synced 2024-06-16 06:15:24 +00:00

Feature: Crossseed with OpenSSL if we have OpenSSL

This commit is contained in:
Philipp Schafft 2020-10-22 08:36:50 +00:00
parent 43155d7273
commit 8d80ef6a8b

View File

@ -23,6 +23,11 @@
#include <sys/utsname.h>
#endif
#ifdef HAVE_OPENSSL
#include <openssl/rand.h>
#include <openssl/err.h>
#endif
#include "common/thread/thread.h"
#include "prng.h"
@ -75,6 +80,23 @@ static void prng_initial_seed(void)
prng_write(&seed, sizeof(seed));
}
static void prng_cross_seed(void)
{
char buffer[1024];
ssize_t len;
#ifdef HAVE_OPENSSL
if (RAND_bytes((unsigned char*)buffer, sizeof(buffer)) == 1) {
prng_write(buffer, sizeof(buffer));
} else {
ERR_get_error(); // clear error
}
len = prng_read(buffer, sizeof(buffer));
if (len > 0)
RAND_add(buffer, len, len/10.);
#endif
}
void prng_initialize(void)
{
if (initialized)
@ -86,6 +108,7 @@ void prng_initialize(void)
digest_b = digest_new(DIGEST_ALGO_SHA3_512);
initialized = 1;
prng_initial_seed();
prng_cross_seed();
}
void prng_shutdown(void)
@ -112,6 +135,7 @@ void prng_configure(ice_config_t *config)
prng_read_file(seed->filename, seed->size);
seed = seed->next;
}
prng_cross_seed();
}
void prng_deconfigure(void)
@ -155,6 +179,7 @@ void prng_auto_reseed(void)
seed = seed->next;
}
config_release_config();
prng_cross_seed();
}
void prng_write(const void *buffer, size_t len)