protect the random initiator with a mutex

git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@12305 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
Love Hörnquist Åstrand
2003-05-16 20:44:55 +00:00
parent 3064229aaf
commit 8b3ba5532c

View File

@@ -152,6 +152,9 @@ static void free_key_data(krb5_context context, struct key_data *key);
* * * *
************************************************************/ ************************************************************/
static HEIMDAL_MUTEX crypto_mutex = HEIMDAL_MUTEX_INITIALIZER;
static void static void
krb5_DES_random_key(krb5_context context, krb5_DES_random_key(krb5_context context,
krb5_keyblock *key) krb5_keyblock *key)
@@ -3194,12 +3197,14 @@ krb5_generate_random_block(void *buf, size_t len)
{ {
static int rng_initialized = 0; static int rng_initialized = 0;
HEIMDAL_MUTEX_lock(&crypto_mutex);
if (!rng_initialized) { if (!rng_initialized) {
if (seed_something()) if (seed_something())
krb5_abortx(NULL, "Fatal: could not seed the random number generator"); krb5_abortx(NULL, "Fatal: could not seed the random number generator");
rng_initialized = 1; rng_initialized = 1;
} }
HEIMDAL_MUTEX_unlock(&crypto_mutex);
RAND_bytes(buf, len); RAND_bytes(buf, len);
} }
@@ -3214,12 +3219,15 @@ krb5_generate_random_block(void *buf, size_t len)
int i; int i;
static int initialized = 0; static int initialized = 0;
HEIMDAL_MUTEX_lock(&crypto_mutex);
if(!initialized) { if(!initialized) {
des_new_random_key(&key); des_new_random_key(&key);
des_set_key(&key, schedule); des_set_key(&key, schedule);
memset(&key, 0, sizeof(key)); memset(&key, 0, sizeof(key));
des_new_random_key(&counter); des_new_random_key(&counter);
initialized = 1;
} }
HEIMDAL_MUTEX_unlock(&crypto_mutex);
while(len > 0) { while(len > 0) {
des_ecb_encrypt(&counter, &out, schedule, DES_ENCRYPT); des_ecb_encrypt(&counter, &out, schedule, DES_ENCRYPT);
for(i = 7; i >=0; i--) for(i = 7; i >=0; i--)