1*0ac341f1SConrad Meyer 2*0ac341f1SConrad Meyer #define TEST_NAME "generichash3" 3*0ac341f1SConrad Meyer #include "cmptest.h" 4*0ac341f1SConrad Meyer 5*0ac341f1SConrad Meyer int 6*0ac341f1SConrad Meyer main(void) 7*0ac341f1SConrad Meyer { 8*0ac341f1SConrad Meyer #define MAXLEN 64 9*0ac341f1SConrad Meyer crypto_generichash_blake2b_state st; 10*0ac341f1SConrad Meyer unsigned char salt[crypto_generichash_blake2b_SALTBYTES] 11*0ac341f1SConrad Meyer = { '5', 'b', '6', 'b', '4', '1', 'e', 'd', 12*0ac341f1SConrad Meyer '9', 'b', '3', '4', '3', 'f', 'e', '0' }; 13*0ac341f1SConrad Meyer unsigned char personal[crypto_generichash_blake2b_PERSONALBYTES] 14*0ac341f1SConrad Meyer = { '5', '1', '2', '6', 'f', 'b', '2', 'a', 15*0ac341f1SConrad Meyer '3', '7', '4', '0', '0', 'd', '2', 'a' }; 16*0ac341f1SConrad Meyer unsigned char in[MAXLEN]; 17*0ac341f1SConrad Meyer unsigned char out[crypto_generichash_blake2b_BYTES_MAX]; 18*0ac341f1SConrad Meyer unsigned char k[crypto_generichash_blake2b_KEYBYTES_MAX]; 19*0ac341f1SConrad Meyer size_t h; 20*0ac341f1SConrad Meyer size_t i; 21*0ac341f1SConrad Meyer size_t j; 22*0ac341f1SConrad Meyer 23*0ac341f1SConrad Meyer assert(crypto_generichash_blake2b_statebytes() >= sizeof st); 24*0ac341f1SConrad Meyer for (h = 0; h < crypto_generichash_blake2b_KEYBYTES_MAX; ++h) { 25*0ac341f1SConrad Meyer k[h] = (unsigned char) h; 26*0ac341f1SConrad Meyer } 27*0ac341f1SConrad Meyer 28*0ac341f1SConrad Meyer for (i = 0; i < MAXLEN; ++i) { 29*0ac341f1SConrad Meyer in[i] = (unsigned char) i; 30*0ac341f1SConrad Meyer crypto_generichash_blake2b_init_salt_personal( 31*0ac341f1SConrad Meyer &st, k, 1 + i % crypto_generichash_blake2b_KEYBYTES_MAX, 32*0ac341f1SConrad Meyer 1 + i % crypto_generichash_blake2b_BYTES_MAX, salt, personal); 33*0ac341f1SConrad Meyer crypto_generichash_blake2b_update(&st, in, (unsigned long long) i); 34*0ac341f1SConrad Meyer crypto_generichash_blake2b_final( 35*0ac341f1SConrad Meyer &st, out, 1 + i % crypto_generichash_blake2b_BYTES_MAX); 36*0ac341f1SConrad Meyer for (j = 0; j < 1 + i % crypto_generichash_blake2b_BYTES_MAX; ++j) { 37*0ac341f1SConrad Meyer printf("%02x", (unsigned int) out[j]); 38*0ac341f1SConrad Meyer } 39*0ac341f1SConrad Meyer printf("\n"); 40*0ac341f1SConrad Meyer } 41*0ac341f1SConrad Meyer 42*0ac341f1SConrad Meyer memset(out, 0, sizeof out); 43*0ac341f1SConrad Meyer crypto_generichash_blake2b_init_salt_personal( 44*0ac341f1SConrad Meyer &st, k, 0U, crypto_generichash_blake2b_BYTES_MAX, salt, personal); 45*0ac341f1SConrad Meyer crypto_generichash_blake2b_update(&st, in, MAXLEN); 46*0ac341f1SConrad Meyer crypto_generichash_blake2b_final(&st, out, 47*0ac341f1SConrad Meyer crypto_generichash_blake2b_BYTES_MAX); 48*0ac341f1SConrad Meyer for (j = 0; j < crypto_generichash_blake2b_BYTES_MAX; ++j) { 49*0ac341f1SConrad Meyer printf("%02x", (unsigned int) out[j]); 50*0ac341f1SConrad Meyer } 51*0ac341f1SConrad Meyer printf("\n"); 52*0ac341f1SConrad Meyer 53*0ac341f1SConrad Meyer memset(out, 0, sizeof out); 54*0ac341f1SConrad Meyer crypto_generichash_blake2b_init_salt_personal( 55*0ac341f1SConrad Meyer &st, NULL, 1U, crypto_generichash_blake2b_BYTES_MAX, salt, personal); 56*0ac341f1SConrad Meyer crypto_generichash_blake2b_update(&st, in, MAXLEN); 57*0ac341f1SConrad Meyer crypto_generichash_blake2b_final(&st, out, 58*0ac341f1SConrad Meyer crypto_generichash_blake2b_BYTES_MAX); 59*0ac341f1SConrad Meyer for (j = 0; j < crypto_generichash_blake2b_BYTES_MAX; ++j) { 60*0ac341f1SConrad Meyer printf("%02x", (unsigned int) out[j]); 61*0ac341f1SConrad Meyer } 62*0ac341f1SConrad Meyer printf("\n"); 63*0ac341f1SConrad Meyer 64*0ac341f1SConrad Meyer memset(out, 0, sizeof out); 65*0ac341f1SConrad Meyer crypto_generichash_blake2b_init_salt_personal( 66*0ac341f1SConrad Meyer &st, k, crypto_generichash_blake2b_KEYBYTES_MAX, 67*0ac341f1SConrad Meyer crypto_generichash_blake2b_BYTES_MAX, NULL, personal); 68*0ac341f1SConrad Meyer crypto_generichash_blake2b_update(&st, in, MAXLEN); 69*0ac341f1SConrad Meyer crypto_generichash_blake2b_final(&st, out, 70*0ac341f1SConrad Meyer crypto_generichash_blake2b_BYTES_MAX); 71*0ac341f1SConrad Meyer for (j = 0; j < crypto_generichash_blake2b_BYTES_MAX; ++j) { 72*0ac341f1SConrad Meyer printf("%02x", (unsigned int) out[j]); 73*0ac341f1SConrad Meyer } 74*0ac341f1SConrad Meyer printf("\n"); 75*0ac341f1SConrad Meyer 76*0ac341f1SConrad Meyer memset(out, 0, sizeof out); 77*0ac341f1SConrad Meyer crypto_generichash_blake2b_init_salt_personal( 78*0ac341f1SConrad Meyer &st, k, crypto_generichash_blake2b_KEYBYTES_MAX, 79*0ac341f1SConrad Meyer crypto_generichash_blake2b_BYTES_MAX, salt, NULL); 80*0ac341f1SConrad Meyer crypto_generichash_blake2b_update(&st, in, MAXLEN); 81*0ac341f1SConrad Meyer crypto_generichash_blake2b_final( 82*0ac341f1SConrad Meyer &st, out, crypto_generichash_blake2b_BYTES_MAX); 83*0ac341f1SConrad Meyer for (j = 0; j < crypto_generichash_blake2b_BYTES_MAX; ++j) { 84*0ac341f1SConrad Meyer printf("%02x", (unsigned int) out[j]); 85*0ac341f1SConrad Meyer } 86*0ac341f1SConrad Meyer printf("\n"); 87*0ac341f1SConrad Meyer 88*0ac341f1SConrad Meyer memset(out, 0, sizeof out); 89*0ac341f1SConrad Meyer crypto_generichash_blake2b_salt_personal( 90*0ac341f1SConrad Meyer out, crypto_generichash_blake2b_BYTES_MAX, in, MAXLEN, 91*0ac341f1SConrad Meyer k, 0U, salt, personal); 92*0ac341f1SConrad Meyer for (j = 0; j < crypto_generichash_blake2b_BYTES_MAX; ++j) { 93*0ac341f1SConrad Meyer printf("%02x", (unsigned int) out[j]); 94*0ac341f1SConrad Meyer } 95*0ac341f1SConrad Meyer printf("\n"); 96*0ac341f1SConrad Meyer 97*0ac341f1SConrad Meyer memset(out, 0, sizeof out); 98*0ac341f1SConrad Meyer crypto_generichash_blake2b_salt_personal( 99*0ac341f1SConrad Meyer out, crypto_generichash_blake2b_BYTES_MAX, in, MAXLEN, 100*0ac341f1SConrad Meyer NULL, 0U, salt, personal); 101*0ac341f1SConrad Meyer for (j = 0; j < crypto_generichash_blake2b_BYTES_MAX; ++j) { 102*0ac341f1SConrad Meyer printf("%02x", (unsigned int) out[j]); 103*0ac341f1SConrad Meyer } 104*0ac341f1SConrad Meyer printf("\n"); 105*0ac341f1SConrad Meyer 106*0ac341f1SConrad Meyer memset(out, 0, sizeof out); 107*0ac341f1SConrad Meyer crypto_generichash_blake2b_salt_personal( 108*0ac341f1SConrad Meyer out, crypto_generichash_blake2b_BYTES_MAX, in, MAXLEN, 109*0ac341f1SConrad Meyer k, crypto_generichash_blake2b_KEYBYTES_MAX, salt, personal); 110*0ac341f1SConrad Meyer for (j = 0; j < crypto_generichash_blake2b_BYTES_MAX; ++j) { 111*0ac341f1SConrad Meyer printf("%02x", (unsigned int) out[j]); 112*0ac341f1SConrad Meyer } 113*0ac341f1SConrad Meyer printf("\n"); 114*0ac341f1SConrad Meyer 115*0ac341f1SConrad Meyer memset(out, 0, sizeof out); 116*0ac341f1SConrad Meyer crypto_generichash_blake2b_salt_personal( 117*0ac341f1SConrad Meyer out, crypto_generichash_blake2b_BYTES_MAX, in, MAXLEN, 118*0ac341f1SConrad Meyer k, crypto_generichash_blake2b_KEYBYTES_MAX, NULL, personal); 119*0ac341f1SConrad Meyer for (j = 0; j < crypto_generichash_blake2b_BYTES_MAX; ++j) { 120*0ac341f1SConrad Meyer printf("%02x", (unsigned int) out[j]); 121*0ac341f1SConrad Meyer } 122*0ac341f1SConrad Meyer printf("\n"); 123*0ac341f1SConrad Meyer 124*0ac341f1SConrad Meyer memset(out, 0, sizeof out); 125*0ac341f1SConrad Meyer crypto_generichash_blake2b_salt_personal( 126*0ac341f1SConrad Meyer out, crypto_generichash_blake2b_BYTES_MAX, in, MAXLEN, 127*0ac341f1SConrad Meyer k, crypto_generichash_blake2b_KEYBYTES_MAX, salt, NULL); 128*0ac341f1SConrad Meyer for (j = 0; j < crypto_generichash_blake2b_BYTES_MAX; ++j) { 129*0ac341f1SConrad Meyer printf("%02x", (unsigned int) out[j]); 130*0ac341f1SConrad Meyer } 131*0ac341f1SConrad Meyer printf("\n"); 132*0ac341f1SConrad Meyer 133*0ac341f1SConrad Meyer assert(crypto_generichash_blake2b_salt_personal 134*0ac341f1SConrad Meyer (NULL, 0, 135*0ac341f1SConrad Meyer in, (unsigned long long) sizeof in, 136*0ac341f1SConrad Meyer k, sizeof k, NULL, NULL) == -1); 137*0ac341f1SConrad Meyer assert(crypto_generichash_blake2b_salt_personal 138*0ac341f1SConrad Meyer (NULL, crypto_generichash_BYTES_MAX + 1, 139*0ac341f1SConrad Meyer in, (unsigned long long) sizeof in, 140*0ac341f1SConrad Meyer k, sizeof k, NULL, NULL) == -1); 141*0ac341f1SConrad Meyer assert(crypto_generichash_blake2b_salt_personal 142*0ac341f1SConrad Meyer (NULL, (unsigned long long) sizeof in, 143*0ac341f1SConrad Meyer in, (unsigned long long) sizeof in, 144*0ac341f1SConrad Meyer k, crypto_generichash_KEYBYTES_MAX + 1, NULL, NULL) == -1); 145*0ac341f1SConrad Meyer 146*0ac341f1SConrad Meyer crypto_generichash_blake2b_init_salt_personal(&st, NULL, 0U, crypto_generichash_BYTES, 147*0ac341f1SConrad Meyer NULL, personal); 148*0ac341f1SConrad Meyer crypto_generichash_blake2b_update(&st, in, MAXLEN); 149*0ac341f1SConrad Meyer crypto_generichash_blake2b_final(&st, out, crypto_generichash_blake2b_BYTES_MAX); 150*0ac341f1SConrad Meyer for (j = 0; j < crypto_generichash_blake2b_BYTES_MAX; ++j) { 151*0ac341f1SConrad Meyer printf("%02x", (unsigned int) out[j]); 152*0ac341f1SConrad Meyer } 153*0ac341f1SConrad Meyer printf("\n"); 154*0ac341f1SConrad Meyer 155*0ac341f1SConrad Meyer crypto_generichash_blake2b_init_salt_personal(&st, NULL, 0U, crypto_generichash_BYTES, 156*0ac341f1SConrad Meyer salt, NULL); 157*0ac341f1SConrad Meyer crypto_generichash_blake2b_update(&st, in, MAXLEN); 158*0ac341f1SConrad Meyer crypto_generichash_blake2b_final(&st, out, crypto_generichash_blake2b_BYTES_MAX); 159*0ac341f1SConrad Meyer for (j = 0; j < crypto_generichash_blake2b_BYTES_MAX; ++j) { 160*0ac341f1SConrad Meyer printf("%02x", (unsigned int) out[j]); 161*0ac341f1SConrad Meyer } 162*0ac341f1SConrad Meyer printf("\n"); 163*0ac341f1SConrad Meyer 164*0ac341f1SConrad Meyer assert(crypto_generichash_blake2b_init_salt_personal 165*0ac341f1SConrad Meyer (&st, k, sizeof k, 0, NULL, NULL) == -1); 166*0ac341f1SConrad Meyer assert(crypto_generichash_blake2b_init_salt_personal 167*0ac341f1SConrad Meyer (&st, k, sizeof k, crypto_generichash_blake2b_BYTES_MAX + 1, NULL, NULL) == -1); 168*0ac341f1SConrad Meyer assert(crypto_generichash_blake2b_init_salt_personal 169*0ac341f1SConrad Meyer (&st, k, crypto_generichash_blake2b_KEYBYTES_MAX + 1, sizeof out, NULL, NULL) == -1); 170*0ac341f1SConrad Meyer 171*0ac341f1SConrad Meyer assert(crypto_generichash_blake2b_init_salt_personal(&st, k, sizeof k, crypto_generichash_BYTES, 172*0ac341f1SConrad Meyer NULL, personal) == 0); 173*0ac341f1SConrad Meyer assert(crypto_generichash_blake2b_init_salt_personal(&st, k, sizeof k, crypto_generichash_BYTES, 174*0ac341f1SConrad Meyer salt, NULL) == 0); 175*0ac341f1SConrad Meyer return 0; 176*0ac341f1SConrad Meyer } 177