summaryrefslogtreecommitdiff
path: root/nss/lib/freebl/ecl/uint128.c
diff options
context:
space:
mode:
Diffstat (limited to 'nss/lib/freebl/ecl/uint128.c')
-rw-r--r--nss/lib/freebl/ecl/uint128.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/nss/lib/freebl/ecl/uint128.c b/nss/lib/freebl/ecl/uint128.c
index 22cbd02..5465875 100644
--- a/nss/lib/freebl/ecl/uint128.c
+++ b/nss/lib/freebl/ecl/uint128.c
@@ -31,6 +31,9 @@ init128x(uint64_t x)
return ret;
}
+#define CONSTANT_TIME_CARRY(a, b) \
+ ((a ^ ((a ^ b) | ((a - b) ^ b))) >> (sizeof(a) * 8 - 1))
+
/* arithmetic */
uint128_t
@@ -38,7 +41,7 @@ add128(uint128_t a, uint128_t b)
{
uint128_t ret;
ret.lo = a.lo + b.lo;
- ret.hi = a.hi + b.hi + (ret.lo < b.lo);
+ ret.hi = a.hi + b.hi + CONSTANT_TIME_CARRY(ret.lo, b.lo);
return ret;
}