1*0ac341f1SConrad Meyer
2*0ac341f1SConrad Meyer #define TEST_NAME "secretstream"
3*0ac341f1SConrad Meyer #include "cmptest.h"
4*0ac341f1SConrad Meyer
5*0ac341f1SConrad Meyer int
main(void)6*0ac341f1SConrad Meyer main(void)
7*0ac341f1SConrad Meyer {
8*0ac341f1SConrad Meyer crypto_secretstream_xchacha20poly1305_state *state, *statesave;
9*0ac341f1SConrad Meyer crypto_secretstream_xchacha20poly1305_state state_copy;
10*0ac341f1SConrad Meyer unsigned char *ad;
11*0ac341f1SConrad Meyer unsigned char *header;
12*0ac341f1SConrad Meyer unsigned char *k;
13*0ac341f1SConrad Meyer unsigned char *c1, *c2, *c3, *csave;
14*0ac341f1SConrad Meyer unsigned char *m1, *m2, *m3;
15*0ac341f1SConrad Meyer unsigned char *m1_, *m2_, *m3_;
16*0ac341f1SConrad Meyer unsigned long long res_len;
17*0ac341f1SConrad Meyer size_t ad_len;
18*0ac341f1SConrad Meyer size_t m1_len, m2_len, m3_len;
19*0ac341f1SConrad Meyer int ret;
20*0ac341f1SConrad Meyer unsigned char tag;
21*0ac341f1SConrad Meyer
22*0ac341f1SConrad Meyer state = (crypto_secretstream_xchacha20poly1305_state *)
23*0ac341f1SConrad Meyer sodium_malloc(crypto_secretstream_xchacha20poly1305_statebytes());
24*0ac341f1SConrad Meyer statesave = (crypto_secretstream_xchacha20poly1305_state *)
25*0ac341f1SConrad Meyer sodium_malloc(crypto_secretstream_xchacha20poly1305_statebytes());
26*0ac341f1SConrad Meyer header = (unsigned char *)
27*0ac341f1SConrad Meyer sodium_malloc(crypto_secretstream_xchacha20poly1305_HEADERBYTES);
28*0ac341f1SConrad Meyer
29*0ac341f1SConrad Meyer ad_len = randombytes_uniform(100);
30*0ac341f1SConrad Meyer m1_len = randombytes_uniform(1000);
31*0ac341f1SConrad Meyer m2_len = randombytes_uniform(1000);
32*0ac341f1SConrad Meyer m3_len = randombytes_uniform(1000);
33*0ac341f1SConrad Meyer
34*0ac341f1SConrad Meyer c1 = (unsigned char *)
35*0ac341f1SConrad Meyer sodium_malloc(m1_len + crypto_secretstream_xchacha20poly1305_ABYTES);
36*0ac341f1SConrad Meyer c2 = (unsigned char *)
37*0ac341f1SConrad Meyer sodium_malloc(m2_len + crypto_secretstream_xchacha20poly1305_ABYTES);
38*0ac341f1SConrad Meyer c3 = (unsigned char *)
39*0ac341f1SConrad Meyer sodium_malloc(m3_len + crypto_secretstream_xchacha20poly1305_ABYTES);
40*0ac341f1SConrad Meyer csave = (unsigned char *)
41*0ac341f1SConrad Meyer sodium_malloc((m1_len | m2_len | m3_len) + crypto_secretstream_xchacha20poly1305_ABYTES);
42*0ac341f1SConrad Meyer
43*0ac341f1SConrad Meyer ad = (unsigned char *) sodium_malloc(ad_len);
44*0ac341f1SConrad Meyer m1 = (unsigned char *) sodium_malloc(m1_len);
45*0ac341f1SConrad Meyer m2 = (unsigned char *) sodium_malloc(m2_len);
46*0ac341f1SConrad Meyer m3 = (unsigned char *) sodium_malloc(m3_len);
47*0ac341f1SConrad Meyer m1_ = (unsigned char *) sodium_malloc(m1_len);
48*0ac341f1SConrad Meyer m2_ = (unsigned char *) sodium_malloc(m2_len);
49*0ac341f1SConrad Meyer m3_ = (unsigned char *) sodium_malloc(m3_len);
50*0ac341f1SConrad Meyer
51*0ac341f1SConrad Meyer randombytes_buf(ad, ad_len);
52*0ac341f1SConrad Meyer
53*0ac341f1SConrad Meyer randombytes_buf(m1, m1_len);
54*0ac341f1SConrad Meyer memcpy(m1_, m1, m1_len);
55*0ac341f1SConrad Meyer randombytes_buf(m2, m2_len);
56*0ac341f1SConrad Meyer memcpy(m2_, m2, m2_len);
57*0ac341f1SConrad Meyer randombytes_buf(m3, m3_len);
58*0ac341f1SConrad Meyer memcpy(m3_, m3, m3_len);
59*0ac341f1SConrad Meyer
60*0ac341f1SConrad Meyer k = (unsigned char *)
61*0ac341f1SConrad Meyer sodium_malloc(crypto_secretstream_xchacha20poly1305_KEYBYTES);
62*0ac341f1SConrad Meyer crypto_secretstream_xchacha20poly1305_keygen(k);
63*0ac341f1SConrad Meyer
64*0ac341f1SConrad Meyer /* push */
65*0ac341f1SConrad Meyer
66*0ac341f1SConrad Meyer ret = crypto_secretstream_xchacha20poly1305_init_push(state, header, k);
67*0ac341f1SConrad Meyer assert(ret == 0);
68*0ac341f1SConrad Meyer
69*0ac341f1SConrad Meyer ret = crypto_secretstream_xchacha20poly1305_push
70*0ac341f1SConrad Meyer (state, c1, &res_len, m1, m1_len, NULL, 0, 0);
71*0ac341f1SConrad Meyer assert(ret == 0);
72*0ac341f1SConrad Meyer assert(res_len == m1_len + crypto_secretstream_xchacha20poly1305_ABYTES);
73*0ac341f1SConrad Meyer
74*0ac341f1SConrad Meyer ret = crypto_secretstream_xchacha20poly1305_push
75*0ac341f1SConrad Meyer (state, c2, NULL, m2, m2_len, ad, 0, 0);
76*0ac341f1SConrad Meyer assert(ret == 0);
77*0ac341f1SConrad Meyer
78*0ac341f1SConrad Meyer ret = crypto_secretstream_xchacha20poly1305_push
79*0ac341f1SConrad Meyer (state, c3, NULL, m3, m3_len, ad, ad_len,
80*0ac341f1SConrad Meyer crypto_secretstream_xchacha20poly1305_TAG_FINAL);
81*0ac341f1SConrad Meyer assert(ret == 0);
82*0ac341f1SConrad Meyer
83*0ac341f1SConrad Meyer /* pull */
84*0ac341f1SConrad Meyer
85*0ac341f1SConrad Meyer ret = crypto_secretstream_xchacha20poly1305_init_pull(state, header, k);
86*0ac341f1SConrad Meyer assert(ret == 0);
87*0ac341f1SConrad Meyer
88*0ac341f1SConrad Meyer ret = crypto_secretstream_xchacha20poly1305_pull
89*0ac341f1SConrad Meyer (state, m1, &res_len, &tag,
90*0ac341f1SConrad Meyer c1, m1_len + crypto_secretstream_xchacha20poly1305_ABYTES, NULL, 0);
91*0ac341f1SConrad Meyer assert(ret == 0);
92*0ac341f1SConrad Meyer assert(tag == 0);
93*0ac341f1SConrad Meyer assert(memcmp(m1, m1_, m1_len) == 0);
94*0ac341f1SConrad Meyer assert(res_len == m1_len);
95*0ac341f1SConrad Meyer
96*0ac341f1SConrad Meyer ret = crypto_secretstream_xchacha20poly1305_pull
97*0ac341f1SConrad Meyer (state, m2, NULL, &tag,
98*0ac341f1SConrad Meyer c2, m2_len + crypto_secretstream_xchacha20poly1305_ABYTES, NULL, 0);
99*0ac341f1SConrad Meyer assert(ret == 0);
100*0ac341f1SConrad Meyer assert(tag == 0);
101*0ac341f1SConrad Meyer assert(memcmp(m2, m2_, m2_len) == 0);
102*0ac341f1SConrad Meyer
103*0ac341f1SConrad Meyer if (ad_len > 0) {
104*0ac341f1SConrad Meyer ret = crypto_secretstream_xchacha20poly1305_pull
105*0ac341f1SConrad Meyer (state, m3, NULL, &tag,
106*0ac341f1SConrad Meyer c3, m3_len + crypto_secretstream_xchacha20poly1305_ABYTES, NULL, 0);
107*0ac341f1SConrad Meyer assert(ret == -1);
108*0ac341f1SConrad Meyer }
109*0ac341f1SConrad Meyer ret = crypto_secretstream_xchacha20poly1305_pull
110*0ac341f1SConrad Meyer (state, m3, NULL, &tag,
111*0ac341f1SConrad Meyer c3, m3_len + crypto_secretstream_xchacha20poly1305_ABYTES, ad, ad_len);
112*0ac341f1SConrad Meyer assert(ret == 0);
113*0ac341f1SConrad Meyer assert(tag == crypto_secretstream_xchacha20poly1305_TAG_FINAL);
114*0ac341f1SConrad Meyer assert(memcmp(m3, m3_, m3_len) == 0);
115*0ac341f1SConrad Meyer
116*0ac341f1SConrad Meyer /* previous with FINAL tag */
117*0ac341f1SConrad Meyer
118*0ac341f1SConrad Meyer ret = crypto_secretstream_xchacha20poly1305_pull
119*0ac341f1SConrad Meyer (state, m3, NULL, &tag,
120*0ac341f1SConrad Meyer c3, m3_len + crypto_secretstream_xchacha20poly1305_ABYTES, ad, ad_len);
121*0ac341f1SConrad Meyer assert(ret == -1);
122*0ac341f1SConrad Meyer
123*0ac341f1SConrad Meyer /* previous without a tag */
124*0ac341f1SConrad Meyer
125*0ac341f1SConrad Meyer ret = crypto_secretstream_xchacha20poly1305_pull
126*0ac341f1SConrad Meyer (state, m2, NULL, &tag,
127*0ac341f1SConrad Meyer c2, m2_len + crypto_secretstream_xchacha20poly1305_ABYTES, NULL, 0);
128*0ac341f1SConrad Meyer assert(ret == -1);
129*0ac341f1SConrad Meyer
130*0ac341f1SConrad Meyer /* short ciphertext */
131*0ac341f1SConrad Meyer
132*0ac341f1SConrad Meyer ret = crypto_secretstream_xchacha20poly1305_pull
133*0ac341f1SConrad Meyer (state, m2, NULL, &tag, c2,
134*0ac341f1SConrad Meyer randombytes_uniform(crypto_secretstream_xchacha20poly1305_ABYTES),
135*0ac341f1SConrad Meyer NULL, 0);
136*0ac341f1SConrad Meyer assert(ret == -1);
137*0ac341f1SConrad Meyer ret = crypto_secretstream_xchacha20poly1305_pull
138*0ac341f1SConrad Meyer (state, m2, NULL, &tag, c2, 0, NULL, 0);
139*0ac341f1SConrad Meyer assert(ret == -1);
140*0ac341f1SConrad Meyer
141*0ac341f1SConrad Meyer /* empty ciphertext */
142*0ac341f1SConrad Meyer
143*0ac341f1SConrad Meyer ret = crypto_secretstream_xchacha20poly1305_pull
144*0ac341f1SConrad Meyer (state, m2, NULL, &tag, c2,
145*0ac341f1SConrad Meyer crypto_secretstream_xchacha20poly1305_ABYTES, NULL, 0);
146*0ac341f1SConrad Meyer assert(ret == -1);
147*0ac341f1SConrad Meyer
148*0ac341f1SConrad Meyer /* without explicit rekeying */
149*0ac341f1SConrad Meyer
150*0ac341f1SConrad Meyer ret = crypto_secretstream_xchacha20poly1305_init_push(state, header, k);
151*0ac341f1SConrad Meyer assert(ret == 0);
152*0ac341f1SConrad Meyer ret = crypto_secretstream_xchacha20poly1305_push
153*0ac341f1SConrad Meyer (state, c1, NULL, m1, m1_len, NULL, 0, 0);
154*0ac341f1SConrad Meyer assert(ret == 0);
155*0ac341f1SConrad Meyer ret = crypto_secretstream_xchacha20poly1305_push
156*0ac341f1SConrad Meyer (state, c2, NULL, m2, m2_len, NULL, 0, 0);
157*0ac341f1SConrad Meyer assert(ret == 0);
158*0ac341f1SConrad Meyer
159*0ac341f1SConrad Meyer ret = crypto_secretstream_xchacha20poly1305_init_pull(state, header, k);
160*0ac341f1SConrad Meyer assert(ret == 0);
161*0ac341f1SConrad Meyer ret = crypto_secretstream_xchacha20poly1305_pull
162*0ac341f1SConrad Meyer (state, m1, NULL, &tag,
163*0ac341f1SConrad Meyer c1, m1_len + crypto_secretstream_xchacha20poly1305_ABYTES, NULL, 0);
164*0ac341f1SConrad Meyer assert(ret == 0);
165*0ac341f1SConrad Meyer ret = crypto_secretstream_xchacha20poly1305_pull
166*0ac341f1SConrad Meyer (state, m2, NULL, &tag,
167*0ac341f1SConrad Meyer c2, m2_len + crypto_secretstream_xchacha20poly1305_ABYTES, NULL, 0);
168*0ac341f1SConrad Meyer assert(ret == 0);
169*0ac341f1SConrad Meyer
170*0ac341f1SConrad Meyer /* with explicit rekeying */
171*0ac341f1SConrad Meyer
172*0ac341f1SConrad Meyer ret = crypto_secretstream_xchacha20poly1305_init_push(state, header, k);
173*0ac341f1SConrad Meyer assert(ret == 0);
174*0ac341f1SConrad Meyer ret = crypto_secretstream_xchacha20poly1305_push
175*0ac341f1SConrad Meyer (state, c1, NULL, m1, m1_len, NULL, 0, 0);
176*0ac341f1SConrad Meyer assert(ret == 0);
177*0ac341f1SConrad Meyer
178*0ac341f1SConrad Meyer crypto_secretstream_xchacha20poly1305_rekey(state);
179*0ac341f1SConrad Meyer
180*0ac341f1SConrad Meyer ret = crypto_secretstream_xchacha20poly1305_push
181*0ac341f1SConrad Meyer (state, c2, NULL, m2, m2_len, NULL, 0, 0);
182*0ac341f1SConrad Meyer assert(ret == 0);
183*0ac341f1SConrad Meyer
184*0ac341f1SConrad Meyer ret = crypto_secretstream_xchacha20poly1305_init_pull(state, header, k);
185*0ac341f1SConrad Meyer assert(ret == 0);
186*0ac341f1SConrad Meyer ret = crypto_secretstream_xchacha20poly1305_pull
187*0ac341f1SConrad Meyer (state, m1, NULL, &tag,
188*0ac341f1SConrad Meyer c1, m1_len + crypto_secretstream_xchacha20poly1305_ABYTES, NULL, 0);
189*0ac341f1SConrad Meyer assert(ret == 0);
190*0ac341f1SConrad Meyer
191*0ac341f1SConrad Meyer ret = crypto_secretstream_xchacha20poly1305_pull
192*0ac341f1SConrad Meyer (state, m2, NULL, &tag,
193*0ac341f1SConrad Meyer c2, m2_len + crypto_secretstream_xchacha20poly1305_ABYTES, NULL, 0);
194*0ac341f1SConrad Meyer assert(ret == -1);
195*0ac341f1SConrad Meyer
196*0ac341f1SConrad Meyer crypto_secretstream_xchacha20poly1305_rekey(state);
197*0ac341f1SConrad Meyer
198*0ac341f1SConrad Meyer ret = crypto_secretstream_xchacha20poly1305_pull
199*0ac341f1SConrad Meyer (state, m2, NULL, &tag,
200*0ac341f1SConrad Meyer c2, m2_len + crypto_secretstream_xchacha20poly1305_ABYTES, NULL, 0);
201*0ac341f1SConrad Meyer assert(ret == 0);
202*0ac341f1SConrad Meyer
203*0ac341f1SConrad Meyer /* with explicit rekeying using TAG_REKEY */
204*0ac341f1SConrad Meyer
205*0ac341f1SConrad Meyer ret = crypto_secretstream_xchacha20poly1305_init_push(state, header, k);
206*0ac341f1SConrad Meyer assert(ret == 0);
207*0ac341f1SConrad Meyer
208*0ac341f1SConrad Meyer memcpy(statesave, state, sizeof *state);
209*0ac341f1SConrad Meyer
210*0ac341f1SConrad Meyer ret = crypto_secretstream_xchacha20poly1305_push
211*0ac341f1SConrad Meyer (state, c1, NULL, m1, m1_len, NULL, 0, crypto_secretstream_xchacha20poly1305_TAG_REKEY);
212*0ac341f1SConrad Meyer assert(ret == 0);
213*0ac341f1SConrad Meyer
214*0ac341f1SConrad Meyer ret = crypto_secretstream_xchacha20poly1305_push
215*0ac341f1SConrad Meyer (state, c2, NULL, m2, m2_len, NULL, 0, 0);
216*0ac341f1SConrad Meyer assert(ret == 0);
217*0ac341f1SConrad Meyer
218*0ac341f1SConrad Meyer memcpy(csave, c2, m2_len + crypto_secretstream_xchacha20poly1305_ABYTES);
219*0ac341f1SConrad Meyer
220*0ac341f1SConrad Meyer ret = crypto_secretstream_xchacha20poly1305_init_pull(state, header, k);
221*0ac341f1SConrad Meyer assert(ret == 0);
222*0ac341f1SConrad Meyer ret = crypto_secretstream_xchacha20poly1305_pull
223*0ac341f1SConrad Meyer (state, m1, NULL, &tag,
224*0ac341f1SConrad Meyer c1, m1_len + crypto_secretstream_xchacha20poly1305_ABYTES, &tag, 0);
225*0ac341f1SConrad Meyer assert(ret == 0);
226*0ac341f1SConrad Meyer assert(tag == crypto_secretstream_xchacha20poly1305_TAG_REKEY);
227*0ac341f1SConrad Meyer
228*0ac341f1SConrad Meyer ret = crypto_secretstream_xchacha20poly1305_pull
229*0ac341f1SConrad Meyer (state, m2, NULL, &tag,
230*0ac341f1SConrad Meyer c2, m2_len + crypto_secretstream_xchacha20poly1305_ABYTES, &tag, 0);
231*0ac341f1SConrad Meyer assert(ret == 0);
232*0ac341f1SConrad Meyer assert(tag == 0);
233*0ac341f1SConrad Meyer
234*0ac341f1SConrad Meyer memcpy(state, statesave, sizeof *state);
235*0ac341f1SConrad Meyer
236*0ac341f1SConrad Meyer ret = crypto_secretstream_xchacha20poly1305_push
237*0ac341f1SConrad Meyer (state, c1, NULL, m1, m1_len, NULL, 0, 0);
238*0ac341f1SConrad Meyer assert(ret == 0);
239*0ac341f1SConrad Meyer
240*0ac341f1SConrad Meyer ret = crypto_secretstream_xchacha20poly1305_push
241*0ac341f1SConrad Meyer (state, c2, NULL, m2, m2_len, NULL, 0, 0);
242*0ac341f1SConrad Meyer assert(ret == 0);
243*0ac341f1SConrad Meyer
244*0ac341f1SConrad Meyer assert(memcmp(csave, c2, m2_len + crypto_secretstream_xchacha20poly1305_ABYTES) != 0);
245*0ac341f1SConrad Meyer
246*0ac341f1SConrad Meyer /* New stream */
247*0ac341f1SConrad Meyer
248*0ac341f1SConrad Meyer ret = crypto_secretstream_xchacha20poly1305_init_push(state, header, k);
249*0ac341f1SConrad Meyer assert(ret == 0);
250*0ac341f1SConrad Meyer
251*0ac341f1SConrad Meyer ret = crypto_secretstream_xchacha20poly1305_push
252*0ac341f1SConrad Meyer (state, c1, &res_len, m1, m1_len, NULL, 0,
253*0ac341f1SConrad Meyer crypto_secretstream_xchacha20poly1305_TAG_PUSH);
254*0ac341f1SConrad Meyer assert(ret == 0);
255*0ac341f1SConrad Meyer assert(res_len == m1_len + crypto_secretstream_xchacha20poly1305_ABYTES);
256*0ac341f1SConrad Meyer
257*0ac341f1SConrad Meyer /* Force a counter overflow, check that the key has been updated
258*0ac341f1SConrad Meyer * even though the tag was not changed to REKEY */
259*0ac341f1SConrad Meyer
260*0ac341f1SConrad Meyer memset(state->nonce, 0xff, 4U);
261*0ac341f1SConrad Meyer state_copy = *state;
262*0ac341f1SConrad Meyer
263*0ac341f1SConrad Meyer ret = crypto_secretstream_xchacha20poly1305_push
264*0ac341f1SConrad Meyer (state, c2, NULL, m2, m2_len, ad, 0, 0);
265*0ac341f1SConrad Meyer assert(ret == 0);
266*0ac341f1SConrad Meyer
267*0ac341f1SConrad Meyer assert(memcmp(state_copy.k, state->k, sizeof state->k) != 0);
268*0ac341f1SConrad Meyer assert(memcmp(state_copy.nonce, state->nonce, sizeof state->nonce) != 0);
269*0ac341f1SConrad Meyer assert(state->nonce[0] == 1U);
270*0ac341f1SConrad Meyer assert(sodium_is_zero(state->nonce + 1, 3U));
271*0ac341f1SConrad Meyer
272*0ac341f1SConrad Meyer ret = crypto_secretstream_xchacha20poly1305_init_pull(state, header, k);
273*0ac341f1SConrad Meyer assert(ret == 0);
274*0ac341f1SConrad Meyer
275*0ac341f1SConrad Meyer ret = crypto_secretstream_xchacha20poly1305_pull
276*0ac341f1SConrad Meyer (state, m1, &res_len, &tag,
277*0ac341f1SConrad Meyer c1, m1_len + crypto_secretstream_xchacha20poly1305_ABYTES, NULL, 0);
278*0ac341f1SConrad Meyer assert(ret == 0);
279*0ac341f1SConrad Meyer assert(tag == crypto_secretstream_xchacha20poly1305_TAG_PUSH);
280*0ac341f1SConrad Meyer assert(memcmp(m1, m1_, m1_len) == 0);
281*0ac341f1SConrad Meyer assert(res_len == m1_len);
282*0ac341f1SConrad Meyer
283*0ac341f1SConrad Meyer memset(state->nonce, 0xff, 4U);
284*0ac341f1SConrad Meyer
285*0ac341f1SConrad Meyer ret = crypto_secretstream_xchacha20poly1305_pull
286*0ac341f1SConrad Meyer (state, m2, NULL, &tag,
287*0ac341f1SConrad Meyer c2, m2_len + crypto_secretstream_xchacha20poly1305_ABYTES, NULL, 0);
288*0ac341f1SConrad Meyer assert(ret == 0);
289*0ac341f1SConrad Meyer assert(tag == 0);
290*0ac341f1SConrad Meyer assert(memcmp(m2, m2_, m2_len) == 0);
291*0ac341f1SConrad Meyer
292*0ac341f1SConrad Meyer sodium_free(m3_);
293*0ac341f1SConrad Meyer sodium_free(m2_);
294*0ac341f1SConrad Meyer sodium_free(m1_);
295*0ac341f1SConrad Meyer sodium_free(m3);
296*0ac341f1SConrad Meyer sodium_free(m2);
297*0ac341f1SConrad Meyer sodium_free(m1);
298*0ac341f1SConrad Meyer sodium_free(ad);
299*0ac341f1SConrad Meyer sodium_free(csave);
300*0ac341f1SConrad Meyer sodium_free(c3);
301*0ac341f1SConrad Meyer sodium_free(c2);
302*0ac341f1SConrad Meyer sodium_free(c1);
303*0ac341f1SConrad Meyer sodium_free(k);
304*0ac341f1SConrad Meyer sodium_free(header);
305*0ac341f1SConrad Meyer sodium_free(statesave);
306*0ac341f1SConrad Meyer sodium_free(state);
307*0ac341f1SConrad Meyer
308*0ac341f1SConrad Meyer assert(crypto_secretstream_xchacha20poly1305_abytes() ==
309*0ac341f1SConrad Meyer crypto_secretstream_xchacha20poly1305_ABYTES);
310*0ac341f1SConrad Meyer assert(crypto_secretstream_xchacha20poly1305_headerbytes() ==
311*0ac341f1SConrad Meyer crypto_secretstream_xchacha20poly1305_HEADERBYTES);
312*0ac341f1SConrad Meyer assert(crypto_secretstream_xchacha20poly1305_keybytes() ==
313*0ac341f1SConrad Meyer crypto_secretstream_xchacha20poly1305_KEYBYTES);
314*0ac341f1SConrad Meyer assert(crypto_secretstream_xchacha20poly1305_messagebytes_max() ==
315*0ac341f1SConrad Meyer crypto_secretstream_xchacha20poly1305_MESSAGEBYTES_MAX);
316*0ac341f1SConrad Meyer
317*0ac341f1SConrad Meyer assert(crypto_secretstream_xchacha20poly1305_tag_message() ==
318*0ac341f1SConrad Meyer crypto_secretstream_xchacha20poly1305_TAG_MESSAGE);
319*0ac341f1SConrad Meyer assert(crypto_secretstream_xchacha20poly1305_tag_push() ==
320*0ac341f1SConrad Meyer crypto_secretstream_xchacha20poly1305_TAG_PUSH);
321*0ac341f1SConrad Meyer assert(crypto_secretstream_xchacha20poly1305_tag_rekey() ==
322*0ac341f1SConrad Meyer crypto_secretstream_xchacha20poly1305_TAG_REKEY);
323*0ac341f1SConrad Meyer assert(crypto_secretstream_xchacha20poly1305_tag_final() ==
324*0ac341f1SConrad Meyer crypto_secretstream_xchacha20poly1305_TAG_FINAL);
325*0ac341f1SConrad Meyer
326*0ac341f1SConrad Meyer printf("OK\n");
327*0ac341f1SConrad Meyer
328*0ac341f1SConrad Meyer return 0;
329*0ac341f1SConrad Meyer }
330