summaryrefslogtreecommitdiffstats
path: root/crypto
diff options
context:
space:
mode:
authorSamuel Neves <sneves@dei.uc.pt>2014-10-04 00:13:36 +0100
committerKurt Roeckx <kurt@roeckx.be>2014-10-28 20:42:22 +0100
commit42af669ff2754dfbe1dd55a0ab56664f82284dc4 (patch)
tree95407849a791a0eb95b218b889479b0cb2848708 /crypto
parent4c75f4e5ca00e48dec0bd42ce3f65eec8274cdc4 (diff)
Use only unsigned arithmetic in constant-time operations
Signed-off-by: Kurt Roeckx <kurt@roeckx.be> Reviewed-by: Emilia Käsper <emilia@openssl.org>
Diffstat (limited to 'crypto')
-rw-r--r--crypto/constant_time_locl.h16
1 files changed, 3 insertions, 13 deletions
diff --git a/crypto/constant_time_locl.h b/crypto/constant_time_locl.h
index 7b339a7c31..ccb64082fd 100644
--- a/crypto/constant_time_locl.h
+++ b/crypto/constant_time_locl.h
@@ -129,17 +129,12 @@ static inline int constant_time_select_int(unsigned int mask, int a, int b);
static inline unsigned int constant_time_msb(unsigned int a)
{
- return (unsigned int)((int)(a) >> (sizeof(int) * 8 - 1));
+ return -(a >> (sizeof(unsigned int) * 8 - 1));
}
static inline unsigned int constant_time_lt(unsigned int a, unsigned int b)
{
- unsigned int lt;
- /* Case 1: msb(a) == msb(b). a < b iff the MSB of a - b is set.*/
- lt = ~(a ^ b) & (a - b);
- /* Case 2: msb(a) != msb(b). a < b iff the MSB of b is set. */
- lt |= ~a & b;
- return constant_time_msb(lt);
+ return constant_time_msb(a^((a^b)|((a-b)^b)));
}
static inline unsigned char constant_time_lt_8(unsigned int a, unsigned int b)
@@ -149,12 +144,7 @@ static inline unsigned char constant_time_lt_8(unsigned int a, unsigned int b)
static inline unsigned int constant_time_ge(unsigned int a, unsigned int b)
{
- unsigned int ge;
- /* Case 1: msb(a) == msb(b). a >= b iff the MSB of a - b is not set.*/
- ge = ~((a ^ b) | (a - b));
- /* Case 2: msb(a) != msb(b). a >= b iff the MSB of a is set. */
- ge |= a & ~b;
- return constant_time_msb(ge);
+ return ~constant_time_lt(a, b);
}
static inline unsigned char constant_time_ge_8(unsigned int a, unsigned int b)