Lib: Add tests for blake2s and blake2b
Import the blake2-kat.h header with test vector output from the blake reference implementation, and add tests to mac_test.c to compare the output of the Bird MAC algorithm implementations with that reference output. Since the reference implementation only has test vectors for the full output size, there are no tests for the smaller-sized output variants.
This commit is contained in:
parent
725d9af94a
commit
f1a824190c
2 changed files with 4221 additions and 0 deletions
4130
lib/blake2-kat.h
Normal file
4130
lib/blake2-kat.h
Normal file
File diff suppressed because it is too large
Load diff
|
@ -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();
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue