From 8b6442c3af3f1b21dccec576c74ace5adc873507 Mon Sep 17 00:00:00 2001 From: JP Aumasson Date: Tue, 11 Oct 2016 22:55:35 +0200 Subject: sse genkats --- sse/genkat-c.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++- sse/genkat-json.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- sse/makefile | 2 +- 3 files changed, 107 insertions(+), 3 deletions(-) diff --git a/sse/genkat-c.c b/sse/genkat-c.c index 1525f8d..9dc7470 100644 --- a/sse/genkat-c.c +++ b/sse/genkat-c.c @@ -65,12 +65,58 @@ do \ \ } while (0) +#define MAKE_XOF_KAT(name) \ +do \ +{ \ + printf( "static const uint8_t " #name "_kat[BLAKE2_KAT_LENGTH][BLAKE2_KAT_LENGTH] = \n{\n" ); \ + \ + for( size_t i = 1; i <= LENGTH; ++i ) \ + { \ + name( hash, i, in, LENGTH, NULL, 0 ); \ + printf( "\t{\n\t\t" ); \ + \ + for( int j = 0; j < i; ++j ) \ + printf( "0x%02X%s", hash[j], ( j + 1 ) == LENGTH ? "\n" : j && !( ( j + 1 ) % 8 ) ? ",\n\t\t" : ", " ); \ + \ + for( int j = i; j < LENGTH; ++j ) \ + printf( "0x00%s", ( j + 1 ) == LENGTH ? "\n" : j && !( ( j + 1 ) % 8 ) ? ",\n\t\t" : ", " ); \ + \ + printf( "\t},\n" ); \ + } \ + \ + printf( "};\n\n\n\n\n" ); \ + \ +} while (0) + +#define MAKE_XOF_KEYED_KAT(name,size_prefix) \ +do \ +{ \ + printf( "static const uint8_t " #name "_keyed_kat[BLAKE2_KAT_LENGTH][BLAKE2_KAT_LENGTH] = \n{\n" ); \ + \ + for( size_t i = 1; i <= LENGTH; ++i ) \ + { \ + name( hash, i, in, LENGTH, key, size_prefix ## _KEYBYTES ); \ + printf( "\t{\n\t\t" ); \ + \ + for( int j = 0; j < i; ++j ) \ + printf( "0x%02X%s", hash[j], ( j + 1 ) == LENGTH ? "\n" : j && !( ( j + 1 ) % 8 ) ? ",\n\t\t" : ", " ); \ + \ + for( int j = i; j < LENGTH; ++j ) \ + printf( "0x00%s", ( j + 1 ) == LENGTH ? "\n" : j && !( ( j + 1 ) % 8 ) ? ",\n\t\t" : ", " ); \ + \ + printf( "\t},\n" ); \ + } \ + \ + printf( "};\n\n\n\n\n" ); \ + \ +} while (0) + int main( int argc, char **argv ) { uint8_t key[64] = {0}; uint8_t in[LENGTH] = {0}; - uint8_t hash[64] = {0}; + uint8_t hash[LENGTH] = {0}; for( size_t i = 0; i < sizeof( in ); ++i ) in[i] = i; @@ -90,6 +136,10 @@ int main( int argc, char **argv ) MAKE_KEYED_KAT( blake2sp, BLAKE2S ); MAKE_KAT( blake2bp, BLAKE2B ); MAKE_KEYED_KAT( blake2bp, BLAKE2B ); + MAKE_XOF_KAT( blake2xs ); + MAKE_XOF_KEYED_KAT( blake2xs, BLAKE2S ); + MAKE_XOF_KAT( blake2xb ); + MAKE_XOF_KEYED_KAT( blake2xb, BLAKE2B ); puts( "#endif" ); return 0; } diff --git a/sse/genkat-json.c b/sse/genkat-json.c index f230928..8362942 100644 --- a/sse/genkat-json.c +++ b/sse/genkat-json.c @@ -75,12 +75,62 @@ do \ }\ } while (0) +#define MAKE_XOF_KAT(name) \ +do \ +{ \ + for( size_t i = 1; i <= LENGTH; ++i ) \ + { \ + printf("\n{\n");\ + \ + printf(" \"hash\": \"" #name "\",\n");\ + printf(" \"in\": \"");\ + for( int j = 0; j < LENGTH; ++j ) printf( "%02x", in[j]);\ + \ + printf( "\",\n" ); \ + printf(" \"key\": \"\",\n");\ + printf(" \"out\": \"");\ + \ + name( hash, i, in, LENGTH, NULL, 0 ); \ + \ + for( int j = 0; j < i; ++j ) \ + printf( "%02x", hash[j]);\ + printf( "\"\n" ); \ + printf( "}," ); \ + }\ +} while (0) + +#define MAKE_XOF_KEYED_KAT(name,size_prefix) \ +do \ +{ \ + for( size_t i = 1; i <= LENGTH; ++i ) \ + { \ + printf("\n{\n");\ + \ + printf(" \"hash\": \"" #name "\",\n");\ + printf(" \"in\": \"");\ + for( int j = 0; j < LENGTH; ++j ) printf( "%02x", in[j]);\ + \ + printf( "\",\n" ); \ + printf(" \"key\": \"");\ + for( int j = 0; j < size_prefix ## _KEYBYTES; ++j ) printf( "%02x", key[j]);\ + printf("\",\n");\ + printf(" \"out\": \"");\ + \ + name( hash, i, in, LENGTH, key, size_prefix ## _KEYBYTES ); \ + \ + for( int j = 0; j < i; ++j ) \ + printf( "%02x", hash[j]);\ + printf( "\"\n" ); \ + printf( "}," ); \ + }\ +} while (0) + int main( int argc, char **argv ) { uint8_t key[64] = {0}; uint8_t in[LENGTH] = {0}; - uint8_t hash[64] = {0}; + uint8_t hash[LENGTH] = {0}; for( size_t i = 0; i < sizeof( in ); ++i ) in[i] = i; @@ -97,6 +147,10 @@ int main( int argc, char **argv ) MAKE_KEYED_KAT( blake2sp, BLAKE2S ); MAKE_KAT( blake2bp, BLAKE2B ); MAKE_KEYED_KAT( blake2bp, BLAKE2B ); + MAKE_XOF_KAT( blake2xs ); + MAKE_XOF_KEYED_KAT( blake2xs, BLAKE2S ); + MAKE_XOF_KAT( blake2xb ); + MAKE_XOF_KEYED_KAT( blake2xb, BLAKE2B ); printf("\n]\n"); fflush(stdout); return 0; diff --git a/sse/makefile b/sse/makefile index 5ff54d7..566de88 100644 --- a/sse/makefile +++ b/sse/makefile @@ -37,4 +37,4 @@ kat: ./genkat-json > blake2-kat.json clean: - rm -rf *.o genkat-c genkat-json $(BLAKE2BINS) + rm -rf *.o genkat-c genkat-json $(BLAKEBINS) -- cgit v1.2.3