summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/rsa/rsa_gen.c
diff options
context:
space:
mode:
authortb <>2021-12-26 15:16:50 +0000
committertb <>2021-12-26 15:16:50 +0000
commitc8d92e7494cde45554fdc18c66728a2adbe1bb71 (patch)
tree6a671dbeeec853ee17f157f9b538e98cd605b1c5 /src/lib/libcrypto/rsa/rsa_gen.c
parent9656351e09b56a51fb7279fc55f9ec06f3459223 (diff)
downloadopenbsd-c8d92e7494cde45554fdc18c66728a2adbe1bb71.tar.gz
openbsd-c8d92e7494cde45554fdc18c66728a2adbe1bb71.tar.bz2
openbsd-c8d92e7494cde45554fdc18c66728a2adbe1bb71.zip
Consistently call BN_init() before BN_with_flags()
BN_with_flags() preserves the BN_FLG_MALLOCED flag of the destination which results in a potential use of an uninitialized bit. In practice this doesn't matter since we don't free the cloned BIGNUMs anyway. As jsing points out, these are mostly pointless noise and should be garbage collected. I'll leave that for another rainy day. Coverity flagged one instance BN_gcd_no_branch(), the rest was found by the ever so helpful grep(1). CID 345122 ok jsing
Diffstat (limited to 'src/lib/libcrypto/rsa/rsa_gen.c')
-rw-r--r--src/lib/libcrypto/rsa/rsa_gen.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/lib/libcrypto/rsa/rsa_gen.c b/src/lib/libcrypto/rsa/rsa_gen.c
index 596eb8eb78..1c37d8ef21 100644
--- a/src/lib/libcrypto/rsa/rsa_gen.c
+++ b/src/lib/libcrypto/rsa/rsa_gen.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: rsa_gen.c,v 1.22 2017/01/29 17:49:23 beck Exp $ */ 1/* $OpenBSD: rsa_gen.c,v 1.23 2021/12/26 15:16:50 tb Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
@@ -194,12 +194,14 @@ rsa_builtin_keygen(RSA *rsa, int bits, BIGNUM *e_value, BN_GENCB *cb)
194 if (!BN_mul(r0, r1, r2, ctx)) /* (p-1)(q-1) */ 194 if (!BN_mul(r0, r1, r2, ctx)) /* (p-1)(q-1) */
195 goto err; 195 goto err;
196 196
197 BN_init(&pr0);
197 BN_with_flags(&pr0, r0, BN_FLG_CONSTTIME); 198 BN_with_flags(&pr0, r0, BN_FLG_CONSTTIME);
198 199
199 if (!BN_mod_inverse_ct(rsa->d, rsa->e, &pr0, ctx)) /* d */ 200 if (!BN_mod_inverse_ct(rsa->d, rsa->e, &pr0, ctx)) /* d */
200 goto err; 201 goto err;
201 202
202 /* set up d for correct BN_FLG_CONSTTIME flag */ 203 /* set up d for correct BN_FLG_CONSTTIME flag */
204 BN_init(&d);
203 BN_with_flags(&d, rsa->d, BN_FLG_CONSTTIME); 205 BN_with_flags(&d, rsa->d, BN_FLG_CONSTTIME);
204 206
205 /* calculate d mod (p-1) */ 207 /* calculate d mod (p-1) */
@@ -211,6 +213,7 @@ rsa_builtin_keygen(RSA *rsa, int bits, BIGNUM *e_value, BN_GENCB *cb)
211 goto err; 213 goto err;
212 214
213 /* calculate inverse of q mod p */ 215 /* calculate inverse of q mod p */
216 BN_init(&p);
214 BN_with_flags(&p, rsa->p, BN_FLG_CONSTTIME); 217 BN_with_flags(&p, rsa->p, BN_FLG_CONSTTIME);
215 if (!BN_mod_inverse_ct(rsa->iqmp, rsa->q, &p, ctx)) 218 if (!BN_mod_inverse_ct(rsa->iqmp, rsa->q, &p, ctx))
216 goto err; 219 goto err;