2 #define TEST_NAME "metamorphic"
11 crypto_generichash_state st;
12 unsigned char *h, *h2;
21 for (i = 0; i < MAX_ITER; i++) {
22 mlen = randombytes_uniform(MAXLEN);
23 m = (unsigned char *) sodium_malloc(mlen);
24 klen = randombytes_uniform(crypto_generichash_KEYBYTES_MAX -
25 crypto_generichash_KEYBYTES_MIN + 1U)
26 + crypto_generichash_KEYBYTES_MIN;
27 k = (unsigned char *) sodium_malloc(klen);
28 hlen = randombytes_uniform(crypto_generichash_BYTES_MAX -
29 crypto_generichash_BYTES_MIN + 1U)
30 + crypto_generichash_BYTES_MIN;
31 h = (unsigned char *) sodium_malloc(hlen);
32 h2 = (unsigned char *) sodium_malloc(hlen);
34 randombytes_buf(k, klen);
35 randombytes_buf(m, mlen);
37 crypto_generichash_init(&st, k, klen, hlen);
38 l1 = randombytes_uniform((uint32_t) mlen);
39 l2 = randombytes_uniform((uint32_t) (mlen - l1));
40 crypto_generichash_update(&st, m, l1);
41 crypto_generichash_update(&st, m + l1, l2);
42 crypto_generichash_update(&st, m + l1 + l2, mlen - l1 - l2);
43 crypto_generichash_final(&st, h, hlen);
45 crypto_generichash(h2, hlen, m, mlen, k, klen);
47 assert(memcmp(h, h2, hlen) == 0);
59 crypto_onetimeauth_state st;
60 unsigned char *h, *h2;
67 for (i = 0; i < MAX_ITER; i++) {
68 mlen = randombytes_uniform(MAXLEN);
69 m = (unsigned char *) sodium_malloc(mlen);
70 k = (unsigned char *) sodium_malloc(crypto_onetimeauth_KEYBYTES);
71 h = (unsigned char *) sodium_malloc(crypto_onetimeauth_BYTES);
72 h2 = (unsigned char *) sodium_malloc(crypto_onetimeauth_BYTES);
74 crypto_onetimeauth_keygen(k);
75 randombytes_buf(m, mlen);
77 crypto_onetimeauth_init(&st, k);
78 l1 = randombytes_uniform((uint32_t) mlen);
79 l2 = randombytes_uniform((uint32_t) (mlen - l1));
80 crypto_onetimeauth_update(&st, m, l1);
81 crypto_onetimeauth_update(&st, m + l1, l2);
82 crypto_onetimeauth_update(&st, m + l1 + l2, mlen - l1 - l2);
83 crypto_onetimeauth_final(&st, h);
85 crypto_onetimeauth(h2, m, mlen, k);
87 assert(memcmp(h, h2, crypto_onetimeauth_BYTES) == 0);
99 crypto_auth_hmacsha256_state st;
100 unsigned char *h, *h2;
107 for (i = 0; i < MAX_ITER; i++) {
108 mlen = randombytes_uniform(MAXLEN);
109 m = (unsigned char *) sodium_malloc(mlen);
110 k = (unsigned char *) sodium_malloc(crypto_auth_hmacsha256_KEYBYTES);
111 h = (unsigned char *) sodium_malloc(crypto_auth_hmacsha256_BYTES);
112 h2 = (unsigned char *) sodium_malloc(crypto_auth_hmacsha256_BYTES);
114 crypto_auth_hmacsha256_keygen(k);
115 randombytes_buf(m, mlen);
117 crypto_auth_hmacsha256_init(&st, k, crypto_auth_hmacsha256_KEYBYTES);
118 l1 = randombytes_uniform((uint32_t) mlen);
119 l2 = randombytes_uniform((uint32_t) (mlen - l1));
120 crypto_auth_hmacsha256_update(&st, m, l1);
121 crypto_auth_hmacsha256_update(&st, m + l1, l2);
122 crypto_auth_hmacsha256_update(&st, m + l1 + l2, mlen - l1 - l2);
123 crypto_auth_hmacsha256_final(&st, h);
125 crypto_auth_hmacsha256(h2, m, mlen, k);
127 assert(memcmp(h, h2, crypto_auth_hmacsha256_BYTES) == 0);
139 crypto_auth_hmacsha512_state st;
140 unsigned char *h, *h2;
147 for (i = 0; i < MAX_ITER; i++) {
148 mlen = randombytes_uniform(MAXLEN);
149 m = (unsigned char *) sodium_malloc(mlen);
150 k = (unsigned char *) sodium_malloc(crypto_auth_hmacsha512_KEYBYTES);
151 h = (unsigned char *) sodium_malloc(crypto_auth_hmacsha512_BYTES);
152 h2 = (unsigned char *) sodium_malloc(crypto_auth_hmacsha512_BYTES);
154 crypto_auth_hmacsha512_keygen(k);
155 randombytes_buf(m, mlen);
157 crypto_auth_hmacsha512_init(&st, k, crypto_auth_hmacsha512_KEYBYTES);
158 l1 = randombytes_uniform((uint32_t) mlen);
159 l2 = randombytes_uniform((uint32_t) (mlen - l1));
160 crypto_auth_hmacsha512_update(&st, m, l1);
161 crypto_auth_hmacsha512_update(&st, m + l1, l2);
162 crypto_auth_hmacsha512_update(&st, m + l1 + l2, mlen - l1 - l2);
163 crypto_auth_hmacsha512_final(&st, h);
165 crypto_auth_hmacsha512(h2, m, mlen, k);
167 assert(memcmp(h, h2, crypto_auth_hmacsha512_BYTES) == 0);