1 2#define TEST_NAME "generichash2" 3#include "cmptest.h" 4 5int 6main(void) 7{ 8#define MAXLEN 64 9 crypto_generichash_state st; 10 unsigned char in[MAXLEN], out[crypto_generichash_BYTES_MAX], 11 k[crypto_generichash_KEYBYTES_MAX]; 12 size_t h, i, j; 13 14 assert(crypto_generichash_statebytes() >= sizeof st); 15 for (h = 0; h < crypto_generichash_KEYBYTES_MAX; ++h) 16 k[h] = (unsigned char) h; 17 18 for (i = 0; i < MAXLEN; ++i) { 19 in[i] = (unsigned char) i; 20 if (crypto_generichash_init(&st, k, 21 1 + i % crypto_generichash_KEYBYTES_MAX, 22 1 + i % crypto_generichash_BYTES_MAX) != 0) { 23 printf("crypto_generichash_init()\n"); 24 return 1; 25 } 26 crypto_generichash_update(&st, in, i); 27 crypto_generichash_update(&st, in, i); 28 crypto_generichash_update(&st, in, i); 29 if (crypto_generichash_final(&st, out, 30 1 + i % crypto_generichash_BYTES_MAX) != 0) { 31 printf("crypto_generichash_final() should have returned 0\n"); 32 } 33 for (j = 0; j < 1 + i % crypto_generichash_BYTES_MAX; ++j) { 34 printf("%02x", (unsigned int)out[j]); 35 } 36 printf("\n"); 37 if (crypto_generichash_final(&st, out, 38 1 + i % crypto_generichash_BYTES_MAX) != -1) { 39 printf("crypto_generichash_final() should have returned -1\n"); 40 } 41 } 42 43 assert(crypto_generichash_init(&st, k, sizeof k, 0U) == -1); 44 assert(crypto_generichash_init(&st, k, sizeof k, 45 crypto_generichash_BYTES_MAX + 1U) == -1); 46 assert(crypto_generichash_init(&st, k, crypto_generichash_KEYBYTES_MAX + 1U, 47 sizeof out) == -1); 48 assert(crypto_generichash_init(&st, k, 0U, sizeof out) == 0); 49 assert(crypto_generichash_init(&st, k, 1U, sizeof out) == 0); 50 assert(crypto_generichash_init(&st, NULL, 1U, 0U) == -1); 51 assert(crypto_generichash_init(&st, NULL, crypto_generichash_KEYBYTES, 52 1U) == 0); 53 assert(crypto_generichash_init(&st, NULL, crypto_generichash_KEYBYTES, 54 0U) == -1); 55 return 0; 56} 57