7
7
#include < crypto/ripemd160.h>
8
8
#include < crypto/sha1.h>
9
9
#include < crypto/sha256.h>
10
+ #include < crypto/sha3.h>
10
11
#include < crypto/sha512.h>
11
12
#include < hash.h>
12
13
#include < test/fuzz/FuzzedDataProvider.h>
@@ -32,6 +33,7 @@ void test_one_input(const std::vector<uint8_t>& buffer)
32
33
CSHA1 sha1;
33
34
CSHA256 sha256;
34
35
CSHA512 sha512;
36
+ SHA3_256 sha3;
35
37
CSipHasher sip_hasher{fuzzed_data_provider.ConsumeIntegral <uint64_t >(), fuzzed_data_provider.ConsumeIntegral <uint64_t >()};
36
38
37
39
while (fuzzed_data_provider.ConsumeBool ()) {
@@ -51,6 +53,7 @@ void test_one_input(const std::vector<uint8_t>& buffer)
51
53
(void )ripemd160.Write (data.data (), data.size ());
52
54
(void )sha1.Write (data.data (), data.size ());
53
55
(void )sha256.Write (data.data (), data.size ());
56
+ (void )sha3.Write (data);
54
57
(void )sha512.Write (data.data (), data.size ());
55
58
(void )sip_hasher.Write (data.data (), data.size ());
56
59
@@ -65,11 +68,12 @@ void test_one_input(const std::vector<uint8_t>& buffer)
65
68
(void )ripemd160.Reset ();
66
69
(void )sha1.Reset ();
67
70
(void )sha256.Reset ();
71
+ (void )sha3.Reset ();
68
72
(void )sha512.Reset ();
69
73
break ;
70
74
}
71
75
case 2 : {
72
- switch (fuzzed_data_provider.ConsumeIntegralInRange <int >(0 , 8 )) {
76
+ switch (fuzzed_data_provider.ConsumeIntegralInRange <int >(0 , 9 )) {
73
77
case 0 : {
74
78
data.resize (CHash160::OUTPUT_SIZE);
75
79
hash160.Finalize (data);
@@ -115,9 +119,21 @@ void test_one_input(const std::vector<uint8_t>& buffer)
115
119
data[0 ] = sip_hasher.Finalize () % 256 ;
116
120
break ;
117
121
}
122
+ case 9 : {
123
+ data.resize (SHA3_256::OUTPUT_SIZE);
124
+ sha3.Finalize (data);
125
+ break ;
126
+ }
118
127
}
119
128
break ;
120
129
}
121
130
}
122
131
}
132
+ if (fuzzed_data_provider.ConsumeBool ()) {
133
+ uint64_t state[25 ];
134
+ for (size_t i = 0 ; i < 25 ; ++i) {
135
+ state[i] = fuzzed_data_provider.ConsumeIntegral <uint64_t >();
136
+ }
137
+ KeccakF (state);
138
+ }
123
139
}
0 commit comments