Skip to content

Commit b42e9a9

Browse files
Merge pull request #9529 from SparkiDev/dsa_pg_sp_int_fix
DSA Parameter Generation: init g earlier
2 parents 75fdf95 + dacb342 commit b42e9a9

File tree

1 file changed

+12
-9
lines changed

1 file changed

+12
-9
lines changed

wolfcrypt/src/dsa.c

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -323,7 +323,7 @@ int wc_MakeDsaParameters(WC_RNG *rng, int modulus_size, DsaKey *dsa)
323323

324324
if (err == MP_OKAY)
325325
#endif
326-
err = mp_init_multi(tmp, tmp2, &dsa->p, &dsa->q, 0, 0);
326+
err = mp_init_multi(tmp, tmp2, &dsa->p, &dsa->q, &dsa->g, 0);
327327

328328
if (err == MP_OKAY)
329329
err = mp_read_unsigned_bin(tmp2, buf, (word32)(msize - qsize));
@@ -368,9 +368,6 @@ int wc_MakeDsaParameters(WC_RNG *rng, int modulus_size, DsaKey *dsa)
368368
err = mp_add_d(tmp2, 2 * (mp_digit)loop_check_prime, tmp2);
369369
}
370370

371-
if (err == MP_OKAY)
372-
err = mp_init(&dsa->g);
373-
374371
/* find a value g for which g^tmp2 != 1 */
375372
if (err == MP_OKAY)
376373
err = mp_set(&dsa->g, 1);
@@ -399,18 +396,24 @@ int wc_MakeDsaParameters(WC_RNG *rng, int modulus_size, DsaKey *dsa)
399396
#if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC)
400397
XFREE(buf, dsa->heap, DYNAMIC_TYPE_TMP_BUFFER);
401398
if (tmp != NULL) {
402-
mp_clear(tmp);
399+
if ((err != WC_NO_ERR_TRACE(MP_INIT_E)) &&
400+
(err != WC_NO_ERR_TRACE(MEMORY_E)))
401+
mp_clear(tmp);
403402
XFREE(tmp, NULL, DYNAMIC_TYPE_WOLF_BIGINT);
404403
}
405404
if (tmp2 != NULL) {
406-
mp_clear(tmp2);
405+
if ((err != WC_NO_ERR_TRACE(MP_INIT_E)) &&
406+
(err != WC_NO_ERR_TRACE(MEMORY_E)))
407+
mp_clear(tmp2);
407408
XFREE(tmp2, NULL, DYNAMIC_TYPE_WOLF_BIGINT);
408409
}
409410
#else
410-
mp_clear(tmp);
411-
mp_clear(tmp2);
411+
if (err != WC_NO_ERR_TRACE(MP_INIT_E)) {
412+
mp_clear(tmp);
413+
mp_clear(tmp2);
414+
}
412415
#endif
413-
if (err != MP_OKAY) {
416+
if ((err != MP_OKAY) && (err != WC_NO_ERR_TRACE(MP_INIT_E))) {
414417
mp_clear(&dsa->q);
415418
mp_clear(&dsa->p);
416419
mp_clear(&dsa->g);

0 commit comments

Comments
 (0)