If we forked, force a reseed again. Add the pid as part of the reseed().
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@23171 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -118,6 +118,7 @@ struct fortuna_state
|
|||||||
unsigned pool0_bytes;
|
unsigned pool0_bytes;
|
||||||
unsigned rnd_pos;
|
unsigned rnd_pos;
|
||||||
int tricks_done;
|
int tricks_done;
|
||||||
|
pid_t pid;
|
||||||
};
|
};
|
||||||
typedef struct fortuna_state FState;
|
typedef struct fortuna_state FState;
|
||||||
|
|
||||||
@@ -175,6 +176,7 @@ init_state(FState * st)
|
|||||||
memset(st, 0, sizeof(*st));
|
memset(st, 0, sizeof(*st));
|
||||||
for (i = 0; i < NUM_POOLS; i++)
|
for (i = 0; i < NUM_POOLS; i++)
|
||||||
md_init(&st->pool[i]);
|
md_init(&st->pool[i]);
|
||||||
|
st->pid = getpid();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -276,6 +278,9 @@ reseed(FState * st)
|
|||||||
/* add old key into mix too */
|
/* add old key into mix too */
|
||||||
md_update(&key_md, st->key, BLOCK);
|
md_update(&key_md, st->key, BLOCK);
|
||||||
|
|
||||||
|
/* add pid to make output diverse after fork() */
|
||||||
|
md_update(&key_md, &st->pid, sizeof(st->pid));
|
||||||
|
|
||||||
/* now we have new key */
|
/* now we have new key */
|
||||||
md_result(&key_md, st->key);
|
md_result(&key_md, st->key);
|
||||||
|
|
||||||
@@ -384,6 +389,7 @@ extract_data(FState * st, unsigned count, unsigned char *dst)
|
|||||||
{
|
{
|
||||||
unsigned n;
|
unsigned n;
|
||||||
unsigned block_nr = 0;
|
unsigned block_nr = 0;
|
||||||
|
pid_t pid = getpid();
|
||||||
|
|
||||||
/* Should we reseed? */
|
/* Should we reseed? */
|
||||||
if (st->pool0_bytes >= POOL0_FILL || st->reseed_count == 0)
|
if (st->pool0_bytes >= POOL0_FILL || st->reseed_count == 0)
|
||||||
@@ -394,6 +400,12 @@ extract_data(FState * st, unsigned count, unsigned char *dst)
|
|||||||
if (!st->tricks_done)
|
if (!st->tricks_done)
|
||||||
startup_tricks(st);
|
startup_tricks(st);
|
||||||
|
|
||||||
|
/* If we forked, force a reseed again */
|
||||||
|
if (pid != st->pid) {
|
||||||
|
st->pid = pid;
|
||||||
|
reseed();
|
||||||
|
}
|
||||||
|
|
||||||
while (count > 0)
|
while (count > 0)
|
||||||
{
|
{
|
||||||
/* produce bytes */
|
/* produce bytes */
|
||||||
|
Reference in New Issue
Block a user