/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 | 816 | { |
11 | 816 | if(len % 2 == 1 || len > 2*4096/8) |
12 | 19 | return; |
13 | 797 | |
14 | 797 | // Save on allocations by making these static |
15 | 797 | static Botan::BigInt x, y, q, r, ct_q, ct_r, z; |
16 | 797 | |
17 | 797 | x = Botan::BigInt::decode(in, len / 2); |
18 | 797 | y = Botan::BigInt::decode(in + len / 2, len / 2); |
19 | 797 | |
20 | 797 | if(y == 0) |
21 | 1 | return; |
22 | 796 | |
23 | 796 | Botan::divide(x, y, q, r); |
24 | 796 | |
25 | 796 | FUZZER_ASSERT_TRUE(r < y); |
26 | 796 | |
27 | 796 | z = q*y + r; |
28 | 796 | |
29 | 796 | FUZZER_ASSERT_EQUAL(z, x); |
30 | 796 | |
31 | 796 | Botan::ct_divide(x, y, ct_q, ct_r); |
32 | 796 | |
33 | 796 | FUZZER_ASSERT_EQUAL(q, ct_q); |
34 | 796 | FUZZER_ASSERT_EQUAL(r, ct_r); |
35 | 796 | |
36 | 796 | // Now divide by just low byte of y |
37 | 796 | |
38 | 796 | y = y.byte_at(0); |
39 | 796 | if(y == 0) |
40 | 147 | y = 251; |
41 | 796 | Botan::divide(x, y, q, r); |
42 | 796 | |
43 | 796 | z = q*y + r; |
44 | 796 | FUZZER_ASSERT_EQUAL(z, x); |
45 | 796 | |
46 | 796 | uint8_t r8; |
47 | 796 | Botan::ct_divide_u8(x, y.byte_at(0), ct_q, r8); |
48 | 796 | FUZZER_ASSERT_EQUAL(ct_q, q); |
49 | 796 | FUZZER_ASSERT_EQUAL(r8, r.byte_at(0)); |
50 | 796 | |
51 | 796 | } |
52 | | |