xref: /freebsd/sys/contrib/libsodium/test/default/generichash3.c (revision 0ac341f145426f1f0d00b64d35f19fada2be635c)
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