diff options
Diffstat (limited to 'src/lib')
-rw-r--r-- | src/lib/libcrypto/bn/bn_gcd.c | 40 | ||||
-rw-r--r-- | src/lib/libcrypto/rsa/rsa_eay.c | 3 | ||||
-rw-r--r-- | src/lib/libcrypto/rsa/rsa_gen.c | 5 |
3 files changed, 33 insertions, 15 deletions
diff --git a/src/lib/libcrypto/bn/bn_gcd.c b/src/lib/libcrypto/bn/bn_gcd.c index 469ae752fb..d756398c8f 100644 --- a/src/lib/libcrypto/bn/bn_gcd.c +++ b/src/lib/libcrypto/bn/bn_gcd.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: bn_gcd.c,v 1.15 2017/01/29 17:49:22 beck Exp $ */ | 1 | /* $OpenBSD: bn_gcd.c,v 1.16 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 | * |
@@ -576,6 +576,9 @@ BN_mod_inverse_no_branch(BIGNUM *in, const BIGNUM *a, const BIGNUM *n, | |||
576 | bn_check_top(a); | 576 | bn_check_top(a); |
577 | bn_check_top(n); | 577 | bn_check_top(n); |
578 | 578 | ||
579 | BN_init(&local_A); | ||
580 | BN_init(&local_B); | ||
581 | |||
579 | BN_CTX_start(ctx); | 582 | BN_CTX_start(ctx); |
580 | if ((A = BN_CTX_get(ctx)) == NULL) | 583 | if ((A = BN_CTX_get(ctx)) == NULL) |
581 | goto err; | 584 | goto err; |
@@ -608,10 +611,12 @@ BN_mod_inverse_no_branch(BIGNUM *in, const BIGNUM *a, const BIGNUM *n, | |||
608 | A->neg = 0; | 611 | A->neg = 0; |
609 | 612 | ||
610 | if (B->neg || (BN_ucmp(B, A) >= 0)) { | 613 | if (B->neg || (BN_ucmp(B, A) >= 0)) { |
611 | /* Turn BN_FLG_CONSTTIME flag on, so that when BN_div is invoked, | 614 | /* |
612 | * BN_div_no_branch will be called eventually. | 615 | * Turn BN_FLG_CONSTTIME flag on, so that when BN_div is invoked, |
613 | */ | 616 | * BN_div_no_branch will be called eventually. |
617 | */ | ||
614 | pB = &local_B; | 618 | pB = &local_B; |
619 | /* BN_init() done at the top of the function. */ | ||
615 | BN_with_flags(pB, B, BN_FLG_CONSTTIME); | 620 | BN_with_flags(pB, B, BN_FLG_CONSTTIME); |
616 | if (!BN_nnmod(B, pB, A, ctx)) | 621 | if (!BN_nnmod(B, pB, A, ctx)) |
617 | goto err; | 622 | goto err; |
@@ -633,10 +638,12 @@ BN_mod_inverse_no_branch(BIGNUM *in, const BIGNUM *a, const BIGNUM *n, | |||
633 | * sign*Y*a == A (mod |n|) | 638 | * sign*Y*a == A (mod |n|) |
634 | */ | 639 | */ |
635 | 640 | ||
636 | /* Turn BN_FLG_CONSTTIME flag on, so that when BN_div is invoked, | 641 | /* |
637 | * BN_div_no_branch will be called eventually. | 642 | * Turn BN_FLG_CONSTTIME flag on, so that when BN_div is invoked, |
638 | */ | 643 | * BN_div_no_branch will be called eventually. |
644 | */ | ||
639 | pA = &local_A; | 645 | pA = &local_A; |
646 | /* BN_init() done at the top of the function. */ | ||
640 | BN_with_flags(pA, A, BN_FLG_CONSTTIME); | 647 | BN_with_flags(pA, A, BN_FLG_CONSTTIME); |
641 | 648 | ||
642 | /* (D, M) := (A/B, A%B) ... */ | 649 | /* (D, M) := (A/B, A%B) ... */ |
@@ -740,6 +747,9 @@ BN_gcd_no_branch(BIGNUM *in, const BIGNUM *a, const BIGNUM *n, | |||
740 | goto err; | 747 | goto err; |
741 | R = in; | 748 | R = in; |
742 | 749 | ||
750 | BN_init(&local_A); | ||
751 | BN_init(&local_B); | ||
752 | |||
743 | bn_check_top(a); | 753 | bn_check_top(a); |
744 | bn_check_top(n); | 754 | bn_check_top(n); |
745 | 755 | ||
@@ -768,10 +778,12 @@ BN_gcd_no_branch(BIGNUM *in, const BIGNUM *a, const BIGNUM *n, | |||
768 | A->neg = 0; | 778 | A->neg = 0; |
769 | 779 | ||
770 | if (B->neg || (BN_ucmp(B, A) >= 0)) { | 780 | if (B->neg || (BN_ucmp(B, A) >= 0)) { |
771 | /* Turn BN_FLG_CONSTTIME flag on, so that when BN_div is invoked, | 781 | /* |
772 | * BN_div_no_branch will be called eventually. | 782 | * Turn BN_FLG_CONSTTIME flag on, so that when BN_div is invoked, |
773 | */ | 783 | * BN_div_no_branch will be called eventually. |
784 | */ | ||
774 | pB = &local_B; | 785 | pB = &local_B; |
786 | /* BN_init() done at the top of the function. */ | ||
775 | BN_with_flags(pB, B, BN_FLG_CONSTTIME); | 787 | BN_with_flags(pB, B, BN_FLG_CONSTTIME); |
776 | if (!BN_nnmod(B, pB, A, ctx)) | 788 | if (!BN_nnmod(B, pB, A, ctx)) |
777 | goto err; | 789 | goto err; |
@@ -793,10 +805,12 @@ BN_gcd_no_branch(BIGNUM *in, const BIGNUM *a, const BIGNUM *n, | |||
793 | * sign*Y*a == A (mod |n|) | 805 | * sign*Y*a == A (mod |n|) |
794 | */ | 806 | */ |
795 | 807 | ||
796 | /* Turn BN_FLG_CONSTTIME flag on, so that when BN_div is invoked, | 808 | /* |
797 | * BN_div_no_branch will be called eventually. | 809 | * Turn BN_FLG_CONSTTIME flag on, so that when BN_div is invoked, |
798 | */ | 810 | * BN_div_no_branch will be called eventually. |
811 | */ | ||
799 | pA = &local_A; | 812 | pA = &local_A; |
813 | /* BN_init() done at the top of the function. */ | ||
800 | BN_with_flags(pA, A, BN_FLG_CONSTTIME); | 814 | BN_with_flags(pA, A, BN_FLG_CONSTTIME); |
801 | 815 | ||
802 | /* (D, M) := (A/B, A%B) ... */ | 816 | /* (D, M) := (A/B, A%B) ... */ |
diff --git a/src/lib/libcrypto/rsa/rsa_eay.c b/src/lib/libcrypto/rsa/rsa_eay.c index 33201a8a8b..e9fc67349b 100644 --- a/src/lib/libcrypto/rsa/rsa_eay.c +++ b/src/lib/libcrypto/rsa/rsa_eay.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: rsa_eay.c,v 1.51 2019/11/02 13:52:31 jsing Exp $ */ | 1 | /* $OpenBSD: rsa_eay.c,v 1.52 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 | * |
@@ -753,6 +753,7 @@ RSA_eay_mod_exp(BIGNUM *r0, const BIGNUM *I, RSA *rsa, BN_CTX *ctx) | |||
753 | goto err; | 753 | goto err; |
754 | 754 | ||
755 | /* compute I mod p */ | 755 | /* compute I mod p */ |
756 | BN_init(&c); | ||
756 | BN_with_flags(&c, I, BN_FLG_CONSTTIME); | 757 | BN_with_flags(&c, I, BN_FLG_CONSTTIME); |
757 | 758 | ||
758 | if (!BN_mod_ct(r1, &c, rsa->p, ctx)) | 759 | if (!BN_mod_ct(r1, &c, rsa->p, ctx)) |
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; |