diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/libcrypto/bn/bn_sqrt.c | 29 |
1 files changed, 15 insertions, 14 deletions
diff --git a/src/lib/libcrypto/bn/bn_sqrt.c b/src/lib/libcrypto/bn/bn_sqrt.c index 8514f23a27..4b9638b6dc 100644 --- a/src/lib/libcrypto/bn/bn_sqrt.c +++ b/src/lib/libcrypto/bn/bn_sqrt.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: bn_sqrt.c,v 1.9 2017/01/29 17:49:22 beck Exp $ */ | 1 | /* $OpenBSD: bn_sqrt.c,v 1.10 2022/03/15 15:52:39 tb Exp $ */ |
| 2 | /* Written by Lenka Fibikova <fibikova@exp-math.uni-essen.de> | 2 | /* Written by Lenka Fibikova <fibikova@exp-math.uni-essen.de> |
| 3 | * and Bodo Moeller for the OpenSSL project. */ | 3 | * and Bodo Moeller for the OpenSSL project. */ |
| 4 | /* ==================================================================== | 4 | /* ==================================================================== |
| @@ -351,21 +351,22 @@ BN_mod_sqrt(BIGNUM *in, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx) | |||
| 351 | goto vrfy; | 351 | goto vrfy; |
| 352 | } | 352 | } |
| 353 | 353 | ||
| 354 | 354 | /* Find the smallest i with 0 < i < e such that b^(2^i) = 1. */ | |
| 355 | /* find smallest i such that b^(2^i) = 1 */ | 355 | for (i = 1; i < e; i++) { |
| 356 | i = 1; | 356 | if (i == 1) { |
| 357 | if (!BN_mod_sqr(t, b, p, ctx)) | 357 | if (!BN_mod_sqr(t, b, p, ctx)) |
| 358 | goto end; | 358 | goto end; |
| 359 | while (!BN_is_one(t)) { | 359 | } else { |
| 360 | i++; | 360 | if (!BN_mod_sqr(t, t, p, ctx)) |
| 361 | if (i == e) { | 361 | goto end; |
| 362 | BNerror(BN_R_NOT_A_SQUARE); | ||
| 363 | goto end; | ||
| 364 | } | 362 | } |
| 365 | if (!BN_mod_mul(t, t, t, p, ctx)) | 363 | if (BN_is_one(t)) |
| 366 | goto end; | 364 | break; |
| 365 | } | ||
| 366 | if (i >= e) { | ||
| 367 | BNerror(BN_R_NOT_A_SQUARE); | ||
| 368 | goto end; | ||
| 367 | } | 369 | } |
| 368 | |||
| 369 | 370 | ||
| 370 | /* t := y^2^(e - i - 1) */ | 371 | /* t := y^2^(e - i - 1) */ |
| 371 | if (!BN_copy(t, y)) | 372 | if (!BN_copy(t, y)) |
