|
21 | 21 | static const struct {
|
22 | 22 | size_t startsz, incsz;
|
23 | 23 | } stride_tests[] = {
|
| 24 | + // Test Edge Cases for SHAKE128 with blocksize of 136B |
24 | 25 | { 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 |
25 | 58 | { 1, 136 },
|
26 | 59 | { 1, 136/2 },
|
27 | 60 | { 1, 136/2-1 },
|
@@ -215,17 +248,36 @@ class SHA3TestVector {
|
215 | 248 | ASSERT_TRUE(EVP_DigestUpdate(ctx.get(), msg_.data(), msg_.size()));
|
216 | 249 |
|
217 | 250 | 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; |
224 | 257 | }
|
225 | 258 | EXPECT_EQ(Bytes(digest.get(), digest_length),
|
226 | 259 | Bytes(digest_.data(), digest_length));
|
227 | 260 | }
|
228 | 261 |
|
| 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 | + |
229 | 281 | // Test Squeeze with random Input
|
230 | 282 | // Assert success when |EVP_DigestSqueeze| is called on a random message
|
231 | 283 | ASSERT_TRUE(RAND_bytes(random_bytes, RAND_BYTES));
|
|
0 commit comments