aboutsummaryrefslogtreecommitdiffstats
path: root/src/tests/test_bigint.cpp
diff options
context:
space:
mode:
authorJack Lloyd <[email protected]>2018-12-02 18:16:40 -0500
committerJack Lloyd <[email protected]>2018-12-02 18:16:40 -0500
commit1670af4bdf6b5139fa218377fa8761e2c4ea0e4a (patch)
treeb38ace599215af3b83aa5614d42b40e565c26701 /src/tests/test_bigint.cpp
parent1e47ce9a3ad995d7a5207e8d741ea9dfa4a68626 (diff)
Add a constant time divide variant for dividing by uint8_t
Originally wrote it for div-by-word but that ends up requiring a dword type which we don't always have. And uint8_t covers the most important cases of n = 10 and n = 58 (whenever I get around to writing base58). We could portably support up to div-by-uint32, but I don't think we need it. Nicely for n = 10, this is actually faster than the variable time division.
Diffstat (limited to 'src/tests/test_bigint.cpp')
-rw-r--r--src/tests/test_bigint.cpp18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/tests/test_bigint.cpp b/src/tests/test_bigint.cpp
index 9d8a88497..d85115e03 100644
--- a/src/tests/test_bigint.cpp
+++ b/src/tests/test_bigint.cpp
@@ -405,6 +405,16 @@ class BigInt_Div_Test final : public Text_Based_Test
e /= b;
result.test_eq("a /= b", e, c);
+ if(b.bytes() == 1)
+ {
+ const uint8_t b8 = b.byte_at(0);
+
+ Botan::BigInt ct_q;
+ uint8_t ct_r;
+ Botan::ct_divide_u8(a, b8, ct_q, ct_r);
+ result.test_eq("ct_divide_u8 q", ct_q, c);
+ }
+
Botan::BigInt ct_q, ct_r;
Botan::ct_divide(a, b, ct_q, ct_r);
result.test_eq("ct_divide q", ct_q, c);
@@ -449,6 +459,14 @@ class BigInt_Mod_Test final : public Text_Based_Test
result.test_eq("a % b (as word)", a % b_word, expected);
}
+ if(b.bytes() == 1)
+ {
+ Botan::BigInt ct_q;
+ Botan::uint8_t ct_r;
+ Botan::ct_divide_u8(a, b.byte_at(0), ct_q, ct_r);
+ result.test_eq("ct_divide_u8 r", ct_r, expected);
+ }
+
Botan::BigInt ct_q, ct_r;
Botan::ct_divide(a, b, ct_q, ct_r);
result.test_eq("ct_divide r", ct_r, expected);