diff options
| author | Simon L. B. Nielsen <simon@FreeBSD.org> | 2008-09-21 14:56:30 +0000 | 
|---|---|---|
| committer | Simon L. B. Nielsen <simon@FreeBSD.org> | 2008-09-21 14:56:30 +0000 | 
| commit | bb1499d2aac1d25a95b8573ff425751f06f159e1 (patch) | |
| tree | a136b5b2317abe8eb83b021afe5e088230fd67e2 /crypto/dsa/dsa_gen.c | |
| parent | ee266f1253f9cc49430572463d26f72910dfb49e (diff) | |
Diffstat (limited to 'crypto/dsa/dsa_gen.c')
| -rw-r--r-- | crypto/dsa/dsa_gen.c | 11 | 
1 files changed, 9 insertions, 2 deletions
| diff --git a/crypto/dsa/dsa_gen.c b/crypto/dsa/dsa_gen.c index 6a6be3b57537..ca0b86a6cfc0 100644 --- a/crypto/dsa/dsa_gen.c +++ b/crypto/dsa/dsa_gen.c @@ -117,13 +117,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; @@ -300,7 +307,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;  		} | 
