From 55d485cc457d80e5bb3a44503b9c0e84661bf7b0 Mon Sep 17 00:00:00 2001 From: Sean Parkinson Date: Wed, 22 Jan 2020 09:37:45 -0800 Subject: [PATCH] Fix masking of 16 bits --- wolfcrypt/src/misc.c | 12 +++++++++++- wolfssl/wolfcrypt/misc.h | 2 ++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/wolfcrypt/src/misc.c b/wolfcrypt/src/misc.c index 6e1f41a55..7f779dc24 100644 --- a/wolfcrypt/src/misc.c +++ b/wolfcrypt/src/misc.c @@ -356,9 +356,19 @@ WC_STATIC WC_INLINE byte ctMaskEq(int a, int b) return (~ctMaskGT(a, b)) & (~ctMaskLT(a, b)); } +WC_STATIC WC_INLINE word16 ctMask16GT(int a, int b) +{ + return (((word32)a - b - 1) >> 31) - 1; +} + +WC_STATIC WC_INLINE word16 ctMask16LT(int a, int b) +{ + return (((word32)a - b - 1) >> 31) - 1; +} + WC_STATIC WC_INLINE word16 ctMask16Eq(int a, int b) { - return (~ctMaskGT(a, b)) & (~ctMaskLT(a, b)); + return (~ctMask16GT(a, b)) & (~ctMask16LT(a, b)); } /* Constant time - mask set when a != b. */ diff --git a/wolfssl/wolfcrypt/misc.h b/wolfssl/wolfcrypt/misc.h index 45fa699af..d5237dec0 100644 --- a/wolfssl/wolfcrypt/misc.h +++ b/wolfssl/wolfcrypt/misc.h @@ -98,6 +98,8 @@ WOLFSSL_LOCAL int ctMaskIntGTE(int a, int b); WOLFSSL_LOCAL byte ctMaskLT(int a, int b); WOLFSSL_LOCAL byte ctMaskLTE(int a, int b); WOLFSSL_LOCAL byte ctMaskEq(int a, int b); +WOLFSSL_LOCAL word16 ctMask16GT(int a, int b); +WOLFSSL_LOCAL word16 ctMask16LT(int a, int b); WOLFSSL_LOCAL word16 ctMask16Eq(int a, int b); WOLFSSL_LOCAL byte ctMaskNotEq(int a, int b); WOLFSSL_LOCAL byte ctMaskSel(byte m, byte a, byte b);