Skip to content

Commit 2ba44aa

Browse files
committed
Add exhaustive SHAKE Squeeze tests
Test each possible chunck size (|to_sq_bytes| from 1 to |digest_length|) to generate the expected output as incremental Squeeze calls, requesting |to_sq_bytes| bytes in each individual call
1 parent 686e88e commit 2ba44aa

File tree

1 file changed

+58
-6
lines changed

1 file changed

+58
-6
lines changed

crypto/fipsmodule/sha/sha3_test.cc

Lines changed: 58 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,40 @@
2121
static const struct {
2222
size_t startsz, incsz;
2323
} stride_tests[] = {
24+
// Test Edge Cases for SHAKE128 with blocksize of 136B
2425
{ 1, 1 },
26+
{ 8, 8 },
27+
{ 9, 9 },
28+
{ 10, 10 },
29+
{ 1, 168 },
30+
{ 1, 168/2 },
31+
{ 1, 168/2-1 },
32+
{ 1, 168/2+1 },
33+
{ 1, 168*3 },
34+
{ 168/2 - 1, 168 },
35+
{ 168/2 - 1, 168-1 },
36+
{ 168/2 - 1, 168+1 },
37+
{ 168/2, 168 },
38+
{ 168/2, 168-1 },
39+
{ 168/2, 168+1 },
40+
{ 168/2 + 1, 168 },
41+
{ 168/2 + 1, 168-1 },
42+
{ 168/2 + 1, 168+1 },
43+
{ 168, 2 },
44+
{ 168, 168 },
45+
{ 168-1, 168 },
46+
{ 168-1, 168-1 },
47+
{ 168-1, 168+1 },
48+
{ 168+1, 168 },
49+
{ 168+1, 168-1 },
50+
{ 168+1, 168+1 },
51+
{ 168*3, 168 },
52+
{ 168*3, 168 + 1 },
53+
{ 168*3, 168 - 1 },
54+
{ 168*3, 168/2 },
55+
{ 168*3, 168/2 + 1 },
56+
{ 168*3, 168/2 - 1 },
57+
// Test Edge Cases for SHAKE256 with blocksize of 136B
2558
{ 1, 136 },
2659
{ 1, 136/2 },
2760
{ 1, 136/2-1 },
@@ -215,17 +248,36 @@ class SHA3TestVector {
215248
ASSERT_TRUE(EVP_DigestUpdate(ctx.get(), msg_.data(), msg_.size()));
216249

217250
while (sqd_bytes < digest_length) {
218-
if ((sqd_bytes + to_sq_bytes) > digest_length) {
219-
to_sq_bytes = digest_length - sqd_bytes;
220-
}
221-
ASSERT_TRUE(EVP_DigestSqueeze(ctx.get(), digest.get() + sqd_bytes, to_sq_bytes));
222-
sqd_bytes += to_sq_bytes;
223-
to_sq_bytes = stride_tests[cur_test].incsz;
251+
if ((sqd_bytes + to_sq_bytes) > digest_length) {
252+
to_sq_bytes = digest_length - sqd_bytes;
253+
}
254+
ASSERT_TRUE(EVP_DigestSqueeze(ctx.get(), digest.get() + sqd_bytes, to_sq_bytes));
255+
sqd_bytes += to_sq_bytes;
256+
to_sq_bytes = stride_tests[cur_test].incsz;
224257
}
225258
EXPECT_EQ(Bytes(digest.get(), digest_length),
226259
Bytes(digest_.data(), digest_length));
227260
}
228261

262+
// Test Squeeze Exhaustive
263+
// Assert success when |EVP_DigestSqueeze| is called in all possible byte increments
264+
for (to_sq_bytes = 1; to_sq_bytes < digest_length; to_sq_bytes++) {
265+
OPENSSL_memset(digest.get(), 0, digest_length);
266+
ASSERT_TRUE(EVP_DigestInit_ex(ctx.get(), algorithm, NULL));
267+
ASSERT_TRUE(EVP_DigestUpdate(ctx.get(), msg_.data(), msg_.size()));
268+
269+
for (sqd_bytes = 0; sqd_bytes <= digest_length - to_sq_bytes; sqd_bytes+=to_sq_bytes) {
270+
ASSERT_TRUE(EVP_DigestSqueeze(ctx.get(), digest.get() + sqd_bytes, to_sq_bytes));
271+
}
272+
273+
if ((digest_length - sqd_bytes) > 0) {
274+
ASSERT_TRUE(EVP_DigestSqueeze(ctx.get(), digest.get() + sqd_bytes, digest_length - sqd_bytes));
275+
}
276+
277+
EXPECT_EQ(Bytes(digest.get(), digest_length),
278+
Bytes(digest_.data(), digest_length));
279+
}
280+
229281
// Test Squeeze with random Input
230282
// Assert success when |EVP_DigestSqueeze| is called on a random message
231283
ASSERT_TRUE(RAND_bytes(random_bytes, RAND_BYTES));

0 commit comments

Comments
 (0)