Fix masking of 16 bits

pull/2755/head
Sean Parkinson 2020-01-22 09:37:45 -08:00
parent a624ae14df
commit 55d485cc45
2 changed files with 13 additions and 1 deletions

View File

@ -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. */

View File

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