From a644cb7c1c19c78e2ca393c8ca36989e7ca61715 Mon Sep 17 00:00:00 2001 From: Billy Brumley Date: Fri, 10 Jun 2022 00:03:23 +0300 Subject: [PATCH] [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) --- crypto/bn/bn_lib.c | 3 --- test/bntest.c | 15 +++++++++++++++ 2 files changed, 15 insertions(+), 3 deletions(-) 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); -- 2.47.2