summaryrefslogtreecommitdiff
path: root/nss/lib/freebl/ecl/uint128.c
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2017-06-08 10:53:01 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2017-06-08 10:53:01 +0000
commitf95d45c36e7c7131747259956821d844e8952e5d (patch)
treeeee14f8b212c48f8597c2a4927a167fcc3a15ea5 /nss/lib/freebl/ecl/uint128.c
parentdc1565216a5d20ae0d75872151523252309a1292 (diff)
downloadnss-f95d45c36e7c7131747259956821d844e8952e5d.tar.gz
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;
}