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