Fix bug in DSA parameter generation code which stopped it copying a

generated random seed to the supplied seed parameter.
This commit is contained in:
Dr. Stephen Henson
2007-10-05 13:14:55 +00:00
parent e6e5592a50
commit d73ed541db
3 changed files with 97 additions and 4 deletions

View File

@@ -119,13 +119,20 @@ static int dsa_builtin_paramgen(DSA *ret, int bits,
if (bits < 512) bits=512;
bits=(bits+63)/64*64;
if (seed_len < 20)
/* NB: seed_len == 0 is special case: copy generated seed to
* seed_in if it is not NULL.
*/
if (seed_len && (seed_len < 20))
seed_in = NULL; /* seed buffer too small -- ignore */
if (seed_len > 20)
seed_len = 20; /* App. 2.2 of FIPS PUB 186 allows larger SEED,
* but our internal buffers are restricted to 160 bits*/
if ((seed_in != NULL) && (seed_len == 20))
{
memcpy(seed,seed_in,seed_len);
/* set seed_in to NULL to avoid it being copied back */
seed_in = NULL;
}
if ((ctx=BN_CTX_new()) == NULL) goto err;
@@ -302,7 +309,7 @@ err:
ok=0;
goto err;
}
if ((m > 1) && (seed_in != NULL)) memcpy(seed_in,seed,20);
if (seed_in != NULL) memcpy(seed_in,seed,20);
if (counter_ret != NULL) *counter_ret=counter;
if (h_ret != NULL) *h_ret=h;
}