summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorTomas Mraz <tomas@openssl.org>2024-04-25 15:35:36 +0200
committerTomas Mraz <tomas@openssl.org>2024-05-02 09:16:36 +0200
commit2d285fa873028f6cff9484a0cdf690fe05d7fb16 (patch)
tree2d8a55cbc66e655d3348c39a3c5ae87a1022920b /include
parentd7d1bdcb6aa3d5000bf7f5ebc5518be5c91fd5a5 (diff)
Make ossl_gen_deterministic_nonce_rfc6979() constant time
Reviewed-by: Paul Dale <ppzgs1@gmail.com> Reviewed-by: Neil Horman <nhorman@openssl.org> (Merged from https://github.com/openssl/openssl/pull/24265)
Diffstat (limited to 'include')
-rw-r--r--include/crypto/bn.h2
-rw-r--r--include/internal/constant_time.h11
2 files changed, 13 insertions, 0 deletions
diff --git a/include/crypto/bn.h b/include/crypto/bn.h
index f5d8683ebc..50d89fa67a 100644
--- a/include/crypto/bn.h
+++ b/include/crypto/bn.h
@@ -87,6 +87,8 @@ int bn_lshift_fixed_top(BIGNUM *r, const BIGNUM *a, int n);
int bn_rshift_fixed_top(BIGNUM *r, const BIGNUM *a, int n);
int bn_div_fixed_top(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m,
const BIGNUM *d, BN_CTX *ctx);
+int ossl_bn_mask_bits_fixed_top(BIGNUM *a, int n);
+int ossl_bn_is_word_fixed_top(const BIGNUM *a, BN_ULONG w);
#define BN_PRIMETEST_COMPOSITE 0
#define BN_PRIMETEST_COMPOSITE_WITH_FACTOR 1
diff --git a/include/internal/constant_time.h b/include/internal/constant_time.h
index e8244cd57b..f2572ded51 100644
--- a/include/internal/constant_time.h
+++ b/include/internal/constant_time.h
@@ -150,6 +150,17 @@ static ossl_inline BN_ULONG constant_time_lt_bn(BN_ULONG a, BN_ULONG b)
{
return constant_time_msb_bn(a ^ ((a ^ b) | ((a - b) ^ b)));
}
+
+static ossl_inline BN_ULONG constant_time_is_zero_bn(BN_ULONG a)
+{
+ return constant_time_msb_bn(~a & (a - 1));
+}
+
+static ossl_inline BN_ULONG constant_time_eq_bn(BN_ULONG a,
+ BN_ULONG b)
+{
+ return constant_time_is_zero_bn(a ^ b);
+}
#endif
static ossl_inline unsigned int constant_time_ge(unsigned int a,