summaryrefslogtreecommitdiff
path: root/lib/mac_test.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/mac_test.c')
-rw-r--r--lib/mac_test.c91
1 files changed, 91 insertions, 0 deletions
diff --git a/lib/mac_test.c b/lib/mac_test.c
index 806fe3e4..0e2f94c7 100644
--- a/lib/mac_test.c
+++ b/lib/mac_test.c
@@ -1133,6 +1133,94 @@ t_sha512_concating(void)
return 1;
}
+#include "lib/blake2.h"
+#include "lib/blake2-kat.h"
+
+static void
+blake_in_fmt(char *buf, size_t size, const void *data, size_t key_len)
+{
+ uint8_t in[BLAKE2_KAT_LENGTH] = {0};
+ uint8_t key[64] = {0};
+ size_t i, len = (size_t)data;
+
+ if (size < len*2+key_len*2+2)
+ return;
+
+ for (i = 0; i < sizeof(in); ++i)
+ in[i] = i;
+ for (i = 0; i < sizeof(key); ++i)
+ key[i] = i;
+
+ bt_bytes_to_hex(buf, in, len);
+ buf[len*2] = ',';
+ bt_bytes_to_hex(buf+len*2+1, key, key_len);
+}
+
+#define define_blake_fmt(name, sz) \
+static void \
+name##_in_fmt(char *buf, size_t size, const void *data) \
+{ \
+ if (size < sz * 2 + 1) \
+ return; \
+ blake_in_fmt(buf, size, data, sz); \
+} \
+static void \
+name##_out_fmt(char *buf, size_t size, const void *data) \
+{ \
+ if (size < sz * 2) \
+ return; \
+ bt_bytes_to_hex(buf, data, sz); \
+}
+
+define_blake_fmt(blake2s, BLAKE2S_256_SIZE)
+define_blake_fmt(blake2b, BLAKE2B_512_SIZE)
+
+#define define_test_blake_fn(name, id) \
+static int test_##name(void *out_, const void *in_, \
+ const void *expected_out_) { \
+ uint8_t in[BLAKE2_KAT_LENGTH] = {0}; \
+ uint8_t key[64] = {0}; \
+ uint len = mac_type_length(id); \
+ uint in_len = (size_t)in_; \
+ byte *out; \
+ size_t i; \
+ \
+ for (i = 0; i < sizeof(in); ++i) \
+ in[i] = i; \
+ \
+ for (i = 0; i < sizeof(key); ++i) \
+ key[i] = i; \
+ \
+ struct mac_context ctx; \
+ mac_init(&ctx, id, key, len); \
+ mac_update(&ctx, in, in_len); \
+ out = mac_final(&ctx); \
+ memcpy(out_, out, len); \
+ return memcmp(out, expected_out_, len) == 0; \
+}
+
+define_test_blake_fn(blake2s, ALG_BLAKE2S_256)
+define_test_blake_fn(blake2b, ALG_BLAKE2B_512)
+
+
+#define define_t_blake(name) \
+static int \
+t_##name(void) \
+{ \
+ struct bt_pair test_vectors[BLAKE2_KAT_LENGTH]; \
+ size_t i; \
+ \
+ for (i = 0; i < BLAKE2_KAT_LENGTH; i++) { \
+ test_vectors[i].in = (void *)i; \
+ test_vectors[i].out = name##_keyed_kat[i]; \
+ } \
+ \
+ return bt_assert_batch(test_vectors, test_##name, name##_in_fmt, name##_out_fmt); \
+}
+
+define_t_blake(blake2s)
+define_t_blake(blake2b)
+
int
main(int argc, char *argv[])
{
@@ -1155,5 +1243,8 @@ main(int argc, char *argv[])
bt_test_suite(t_sha256_concating, "Testing concatenation input string to hash using sha256_update");
bt_test_suite(t_sha512_concating, "Testing concatenation input string to hash using sha512_update");
+ bt_test_suite(t_blake2s, "Testing Blake2s-256");
+ bt_test_suite(t_blake2b, "Testing Blake2b-512");
+
return bt_exit_value();
}