aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMattias Andrée <maandree@kth.se>2022-02-26 22:56:28 +0100
committerMattias Andrée <maandree@kth.se>2022-02-26 22:56:28 +0100
commitcb299842e5710ddcc4be7e6d3a28cfd4f64a72af (patch)
treedce24aacf5a9d54d2194fdcec2e1633fe8dc8c42
parentAdd some known-answer tests (diff)
downloadlibkeccak-cb299842e5710ddcc4be7e6d3a28cfd4f64a72af.tar.gz
libkeccak-cb299842e5710ddcc4be7e6d3a28cfd4f64a72af.tar.bz2
libkeccak-cb299842e5710ddcc4be7e6d3a28cfd4f64a72af.tar.xz
Add tests for byte-incomplete output
Signed-off-by: Mattias Andrée <maandree@kth.se>
-rw-r--r--test.c76
1 files changed, 75 insertions, 1 deletions
diff --git a/test.c b/test.c
index 1eb16ea..e7d19a2 100644
--- a/test.c
+++ b/test.c
@@ -760,6 +760,74 @@ test_digest_bits(void)
/**
+ * Run test cases for `libkeccak_digest` with
+ * outputs that are not multiples of 8
+ *
+ * @return Zero on success, -1 on error
+ */
+static int
+test_digest_trunc(void)
+{
+#define shake(semicapacity, output, output_lastbyte)\
+ (printf(" Testing SHAKE-"#semicapacity"('', %i): ", output),\
+ libkeccak_spec_shake(&spec, semicapacity, output),\
+ test_digest_case(&spec, LIBKECCAK_SHAKE_SUFFIX, "", 0, INCOMPLETE_ANSWER output_lastbyte))
+#define INCOMPLETE_ANSWER\
+ "7f9c2ba4e88f827d616045507605853ed73b8093f6efbc88eb1a6eacfa66ef263cb1eea988004b93103cfb0aeefd2a68"\
+ "6e01fa4a58e8a3639ca8a1e3f9ae57e235b8cc873c23dc62b8d260169afa2f75ab916a58d974918835d25e6a435085b2"\
+ "badfd6dfaac359a5efbb7bcc4b59d538df9a04302e10c8bc1cbf1a0b3a5120ea17cda7cfad765f5623474d368ccca8af"\
+ "0007cd9f5e4c849f167a580b14aabdefaee7eef47cb0fca9767be1fda69419dfb927e9df07348b196691abaeb580b32d"\
+ "ef58538b8d23f87732ea63b02b4fa0f4873360e2841928cd60dd4cee8cc0d4c922a96188d032675c8ac850933c7aff15"\
+ "33b94c834adbb69c6115bad4692d8619f90b0cdf8a7b9c264029ac185b70b83f2801f2f4b3f70c593ea3aeeb613a7f1b"\
+ "1de33fd75081f592305f2e4526edc09631b10958f464d889f31ba010250fda7f1368ec2967fc84ef2ae9aff268e0b170"\
+ "0affc6820b523a3d917135f2dff2ee06bfe72b3124721d4a26c04e53a75e30e73a7a9c4a95d91c55d495e9f51dd0b5e9"\
+ "d83c6d5e8ce803aa62b8d654db53d09b8dcff273cdfeb573fad8bcd45578bec2e770d01efde86e721a3f7c6cce275dab"\
+ "e6e2143f1af18da7efddc4c7b70b5e345db93cc936bea323491ccb38a388f546a9ff00dd4e1300b9b2153d2041d205b4"\
+ "43e41b45a653f2a5c4492c1add544512dda2529833462b71a41a45be97290b"
+
+
+ struct libkeccak_spec spec;
+
+ printf("Testing libkeccak_digest with byte-incomplete output:\n");
+
+
+ if (shake(128, 4096, "6f"))
+ return -1;
+
+ if (shake(128, 4095, "6f"))
+ return -1;
+
+ if (shake(128, 4094, "2f"))
+ return -1;
+
+ if (shake(128, 4093, "0f"))
+ return -1;
+
+ if (shake(128, 4092, "0f"))
+ return -1;
+
+ if (shake(128, 4091, "07"))
+ return -1;
+
+ if (shake(128, 4090, "03"))
+ return -1;
+
+ if (shake(128, 4089, "01"))
+ return -1;
+
+ if (shake(128, 4088, ""))
+ return -1;
+
+
+ printf("\n");
+ return 0;
+
+#undef shake
+#undef INCOMPLETE_ANSWER
+}
+
+
+/**
* Run a test case for `libkeccak_update`
*
* @param spec The specification for the hashing
@@ -1107,7 +1175,13 @@ main(void)
}
printf("\n");
- if (test_hex() || test_state(&spec) || test_digest() || test_digest_bits() || test_update() || test_squeeze())
+ if (test_hex() ||
+ test_state(&spec) ||
+ test_digest() ||
+ test_digest_bits() ||
+ test_digest_trunc() ||
+ test_update() ||
+ test_squeeze())
return 1;
if (test_file(&spec, LIBKECCAK_SHA3_SUFFIX, ".testfile",