/src/botan/src/fuzzer/divide.cpp
Line | Count | Source |
1 | | /* |
2 | | * (C) 2015,2016,2018 Jack Lloyd |
3 | | * |
4 | | * Botan is released under the Simplified BSD License (see license.txt) |
5 | | */ |
6 | | #include "fuzzers.h" |
7 | | #include <botan/divide.h> |
8 | | |
9 | | void fuzz(const uint8_t in[], size_t len) |
10 | 738 | { |
11 | 738 | if(len % 2 == 1 || len > 2*4096/8) |
12 | 19 | return; |
13 | 719 | |
14 | 719 | // Save on allocations by making these static |
15 | 719 | static Botan::BigInt x, y, q, r, ct_q, ct_r, z; |
16 | 719 | |
17 | 719 | x = Botan::BigInt::decode(in, len / 2); |
18 | 719 | y = Botan::BigInt::decode(in + len / 2, len / 2); |
19 | 719 | |
20 | 719 | if(y == 0) |
21 | 1 | return; |
22 | 718 | |
23 | 718 | Botan::divide(x, y, q, r); |
24 | 718 | |
25 | 718 | FUZZER_ASSERT_TRUE(r < y); |
26 | 718 | |
27 | 718 | z = q*y + r; |
28 | 718 | |
29 | 718 | FUZZER_ASSERT_EQUAL(z, x); |
30 | 718 | |
31 | 718 | Botan::ct_divide(x, y, ct_q, ct_r); |
32 | 718 | |
33 | 718 | FUZZER_ASSERT_EQUAL(q, ct_q); |
34 | 718 | FUZZER_ASSERT_EQUAL(r, ct_r); |
35 | 718 | |
36 | 718 | // Now divide by just low byte of y |
37 | 718 | |
38 | 718 | y = y.byte_at(0); |
39 | 718 | if(y == 0) |
40 | 121 | y = 251; |
41 | 718 | Botan::divide(x, y, q, r); |
42 | 718 | |
43 | 718 | z = q*y + r; |
44 | 718 | FUZZER_ASSERT_EQUAL(z, x); |
45 | 718 | |
46 | 718 | uint8_t r8; |
47 | 718 | Botan::ct_divide_u8(x, y.byte_at(0), ct_q, r8); |
48 | 718 | FUZZER_ASSERT_EQUAL(ct_q, q); |
49 | 718 | FUZZER_ASSERT_EQUAL(r8, r.byte_at(0)); |
50 | 718 | |
51 | 718 | } |
52 | | |