From: Billy Brumley Date: Thu, 9 Jun 2022 21:03:23 +0000 (+0300) Subject: [crypto/bn] BN_consttime_swap: remove superfluous early exit X-Git-Tag: openssl-3.2.0-alpha1~2541 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a644cb7c1c19c78e2ca393c8ca36989e7ca61715;p=thirdparty%2Fopenssl.git [crypto/bn] BN_consttime_swap: remove superfluous early exit Reviewed-by: Matt Caswell Reviewed-by: Paul Dale Reviewed-by: Tomas Mraz (Merged from https://github.com/openssl/openssl/pull/18518) --- diff --git a/crypto/bn/bn_lib.c b/crypto/bn/bn_lib.c index 23a4415fb9f..089b23963d2 100644 --- a/crypto/bn/bn_lib.c +++ b/crypto/bn/bn_lib.c @@ -910,9 +910,6 @@ void BN_consttime_swap(BN_ULONG condition, BIGNUM *a, BIGNUM *b, int nwords) BN_ULONG t; int i; - if (a == b) - return; - bn_wcheck_size(a, nwords); bn_wcheck_size(b, nwords); diff --git a/test/bntest.c b/test/bntest.c index 9f4bc0b3eb5..85445b701b1 100644 --- a/test/bntest.c +++ b/test/bntest.c @@ -171,6 +171,11 @@ static int test_swap(void) || !equalBN("swap", b, c)) goto err; + /* regular swap: same pointer */ + BN_swap(a, a); + if (!equalBN("swap with same pointer", a, d)) + goto err; + /* conditional swap: true */ cond = 1; BN_consttime_swap(cond, a, b, top); @@ -178,6 +183,11 @@ static int test_swap(void) || !equalBN("cswap true", b, d)) goto err; + /* conditional swap: true, same pointer */ + BN_consttime_swap(cond, a, a, top); + if (!equalBN("cswap true", a, c)) + goto err; + /* conditional swap: false */ cond = 0; BN_consttime_swap(cond, a, b, top); @@ -185,6 +195,11 @@ static int test_swap(void) || !equalBN("cswap false", b, d)) goto err; + /* conditional swap: false, same pointer */ + BN_consttime_swap(cond, a, a, top); + if (!equalBN("cswap false", a, c)) + goto err; + /* same tests but checking flag swap */ BN_set_flags(a, BN_FLG_CONSTTIME);