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);