1*f447f37aSriastradh
2*f447f37aSriastradh #define TEST_NAME "aead_chacha20poly1305"
3*f447f37aSriastradh #include "cmptest.h"
4*f447f37aSriastradh
5*f447f37aSriastradh static int
tv(void)6*f447f37aSriastradh tv(void)
7*f447f37aSriastradh {
8*f447f37aSriastradh #undef MLEN
9*f447f37aSriastradh #define MLEN 10U
10*f447f37aSriastradh #undef ADLEN
11*f447f37aSriastradh #define ADLEN 10U
12*f447f37aSriastradh #undef CLEN
13*f447f37aSriastradh #define CLEN (MLEN + crypto_aead_chacha20poly1305_ABYTES)
14*f447f37aSriastradh static const unsigned char firstkey[crypto_aead_chacha20poly1305_KEYBYTES]
15*f447f37aSriastradh = { 0x42, 0x90, 0xbc, 0xb1, 0x54, 0x17, 0x35, 0x31, 0xf3, 0x14, 0xaf,
16*f447f37aSriastradh 0x57, 0xf3, 0xbe, 0x3b, 0x50, 0x06, 0xda, 0x37, 0x1e, 0xce, 0x27,
17*f447f37aSriastradh 0x2a, 0xfa, 0x1b, 0x5d, 0xbd, 0xd1, 0x10, 0x0a, 0x10, 0x07 };
18*f447f37aSriastradh static const unsigned char m[MLEN]
19*f447f37aSriastradh = { 0x86, 0xd0, 0x99, 0x74, 0x84, 0x0b, 0xde, 0xd2, 0xa5, 0xca };
20*f447f37aSriastradh static const unsigned char nonce[crypto_aead_chacha20poly1305_NPUBBYTES]
21*f447f37aSriastradh = { 0xcd, 0x7c, 0xf6, 0x7b, 0xe3, 0x9c, 0x79, 0x4a };
22*f447f37aSriastradh static const unsigned char ad[ADLEN]
23*f447f37aSriastradh = { 0x87, 0xe2, 0x29, 0xd4, 0x50, 0x08, 0x45, 0xa0, 0x79, 0xc0 };
24*f447f37aSriastradh unsigned char *c = (unsigned char *) sodium_malloc(CLEN);
25*f447f37aSriastradh unsigned char *detached_c = (unsigned char *) sodium_malloc(MLEN);
26*f447f37aSriastradh unsigned char *mac = (unsigned char *) sodium_malloc(crypto_aead_chacha20poly1305_ABYTES);
27*f447f37aSriastradh unsigned char *m2 = (unsigned char *) sodium_malloc(MLEN);
28*f447f37aSriastradh unsigned long long found_clen;
29*f447f37aSriastradh unsigned long long found_maclen;
30*f447f37aSriastradh unsigned long long m2len;
31*f447f37aSriastradh size_t i;
32*f447f37aSriastradh
33*f447f37aSriastradh crypto_aead_chacha20poly1305_encrypt(c, &found_clen, m, MLEN,
34*f447f37aSriastradh ad, ADLEN,
35*f447f37aSriastradh NULL, nonce, firstkey);
36*f447f37aSriastradh if (found_clen != CLEN) {
37*f447f37aSriastradh printf("found_clen is not properly set\n");
38*f447f37aSriastradh }
39*f447f37aSriastradh for (i = 0U; i < CLEN; ++i) {
40*f447f37aSriastradh printf(",0x%02x", (unsigned int) c[i]);
41*f447f37aSriastradh if (i % 8 == 7) {
42*f447f37aSriastradh printf("\n");
43*f447f37aSriastradh }
44*f447f37aSriastradh }
45*f447f37aSriastradh printf("\n");
46*f447f37aSriastradh crypto_aead_chacha20poly1305_encrypt_detached(detached_c,
47*f447f37aSriastradh mac, &found_maclen,
48*f447f37aSriastradh m, MLEN, ad, ADLEN,
49*f447f37aSriastradh NULL, nonce, firstkey);
50*f447f37aSriastradh if (found_maclen != crypto_aead_chacha20poly1305_abytes()) {
51*f447f37aSriastradh printf("found_maclen is not properly set\n");
52*f447f37aSriastradh }
53*f447f37aSriastradh if (memcmp(detached_c, c, MLEN) != 0) {
54*f447f37aSriastradh printf("detached ciphertext is bogus\n");
55*f447f37aSriastradh }
56*f447f37aSriastradh
57*f447f37aSriastradh if (crypto_aead_chacha20poly1305_decrypt(m2, &m2len, NULL, c, CLEN,
58*f447f37aSriastradh ad, ADLEN,
59*f447f37aSriastradh nonce, firstkey) != 0) {
60*f447f37aSriastradh printf("crypto_aead_chacha20poly1305_decrypt() failed\n");
61*f447f37aSriastradh }
62*f447f37aSriastradh if (m2len != MLEN) {
63*f447f37aSriastradh printf("m2len is not properly set\n");
64*f447f37aSriastradh }
65*f447f37aSriastradh if (memcmp(m, m2, MLEN) != 0) {
66*f447f37aSriastradh printf("m != m2\n");
67*f447f37aSriastradh }
68*f447f37aSriastradh memset(m2, 0, m2len);
69*f447f37aSriastradh assert(crypto_aead_chacha20poly1305_decrypt_detached(NULL, NULL,
70*f447f37aSriastradh c, MLEN, mac,
71*f447f37aSriastradh ad, ADLEN,
72*f447f37aSriastradh nonce, firstkey) == 0);
73*f447f37aSriastradh if (crypto_aead_chacha20poly1305_decrypt_detached(m2, NULL,
74*f447f37aSriastradh c, MLEN, mac,
75*f447f37aSriastradh ad, ADLEN,
76*f447f37aSriastradh nonce, firstkey) != 0) {
77*f447f37aSriastradh printf("crypto_aead_chacha20poly1305_decrypt_detached() failed\n");
78*f447f37aSriastradh }
79*f447f37aSriastradh if (memcmp(m, m2, MLEN) != 0) {
80*f447f37aSriastradh printf("detached m != m2\n");
81*f447f37aSriastradh }
82*f447f37aSriastradh
83*f447f37aSriastradh for (i = 0U; i < CLEN; i++) {
84*f447f37aSriastradh c[i] ^= (i + 1U);
85*f447f37aSriastradh if (crypto_aead_chacha20poly1305_decrypt(m2, NULL, NULL, c, CLEN,
86*f447f37aSriastradh ad, ADLEN, nonce, firstkey)
87*f447f37aSriastradh == 0 || memcmp(m, m2, MLEN) == 0) {
88*f447f37aSriastradh printf("message can be forged\n");
89*f447f37aSriastradh }
90*f447f37aSriastradh c[i] ^= (i + 1U);
91*f447f37aSriastradh }
92*f447f37aSriastradh
93*f447f37aSriastradh crypto_aead_chacha20poly1305_encrypt(c, &found_clen, m, MLEN,
94*f447f37aSriastradh NULL, 0U, NULL, nonce, firstkey);
95*f447f37aSriastradh if (found_clen != CLEN) {
96*f447f37aSriastradh printf("found_clen is not properly set (adlen=0)\n");
97*f447f37aSriastradh }
98*f447f37aSriastradh for (i = 0U; i < CLEN; ++i) {
99*f447f37aSriastradh printf(",0x%02x", (unsigned int) c[i]);
100*f447f37aSriastradh if (i % 8 == 7) {
101*f447f37aSriastradh printf("\n");
102*f447f37aSriastradh }
103*f447f37aSriastradh }
104*f447f37aSriastradh printf("\n");
105*f447f37aSriastradh
106*f447f37aSriastradh if (crypto_aead_chacha20poly1305_decrypt(m2, &m2len, NULL, c, CLEN,
107*f447f37aSriastradh NULL, 0U, nonce, firstkey) != 0) {
108*f447f37aSriastradh printf("crypto_aead_chacha20poly1305_decrypt() failed (adlen=0)\n");
109*f447f37aSriastradh }
110*f447f37aSriastradh if (m2len != MLEN) {
111*f447f37aSriastradh printf("m2len is not properly set (adlen=0)\n");
112*f447f37aSriastradh }
113*f447f37aSriastradh if (memcmp(m, m2, MLEN) != 0) {
114*f447f37aSriastradh printf("m != m2 (adlen=0)\n");
115*f447f37aSriastradh }
116*f447f37aSriastradh m2len = 1;
117*f447f37aSriastradh if (crypto_aead_chacha20poly1305_decrypt(
118*f447f37aSriastradh m2, &m2len, NULL, NULL,
119*f447f37aSriastradh randombytes_uniform(crypto_aead_chacha20poly1305_ABYTES),
120*f447f37aSriastradh NULL, 0U, nonce, firstkey) != -1) {
121*f447f37aSriastradh printf("crypto_aead_chacha20poly1305_decrypt() worked with a short "
122*f447f37aSriastradh "ciphertext\n");
123*f447f37aSriastradh }
124*f447f37aSriastradh if (m2len != 0) {
125*f447f37aSriastradh printf("Message length should have been set to zero after a failure\n");
126*f447f37aSriastradh }
127*f447f37aSriastradh m2len = 1;
128*f447f37aSriastradh if (crypto_aead_chacha20poly1305_decrypt(m2, &m2len, NULL, c, 0U, NULL, 0U,
129*f447f37aSriastradh nonce, firstkey) != -1) {
130*f447f37aSriastradh printf("crypto_aead_chacha20poly1305_decrypt() worked with an empty "
131*f447f37aSriastradh "ciphertext\n");
132*f447f37aSriastradh }
133*f447f37aSriastradh if (m2len != 0) {
134*f447f37aSriastradh printf("Message length should have been set to zero after a failure\n");
135*f447f37aSriastradh }
136*f447f37aSriastradh
137*f447f37aSriastradh memcpy(c, m, MLEN);
138*f447f37aSriastradh crypto_aead_chacha20poly1305_encrypt(c, &found_clen, c, MLEN,
139*f447f37aSriastradh NULL, 0U, NULL, nonce, firstkey);
140*f447f37aSriastradh if (found_clen != CLEN) {
141*f447f37aSriastradh printf("found_clen is not properly set (adlen=0)\n");
142*f447f37aSriastradh }
143*f447f37aSriastradh for (i = 0U; i < CLEN; ++i) {
144*f447f37aSriastradh printf(",0x%02x", (unsigned int) c[i]);
145*f447f37aSriastradh if (i % 8 == 7) {
146*f447f37aSriastradh printf("\n");
147*f447f37aSriastradh }
148*f447f37aSriastradh }
149*f447f37aSriastradh printf("\n");
150*f447f37aSriastradh
151*f447f37aSriastradh if (crypto_aead_chacha20poly1305_decrypt(c, &m2len, NULL, c, CLEN,
152*f447f37aSriastradh NULL, 0U, nonce, firstkey) != 0) {
153*f447f37aSriastradh printf("crypto_aead_chacha20poly1305_decrypt() failed (adlen=0)\n");
154*f447f37aSriastradh }
155*f447f37aSriastradh if (m2len != MLEN) {
156*f447f37aSriastradh printf("m2len is not properly set (adlen=0)\n");
157*f447f37aSriastradh }
158*f447f37aSriastradh if (memcmp(m, c, MLEN) != 0) {
159*f447f37aSriastradh printf("m != c (adlen=0)\n");
160*f447f37aSriastradh }
161*f447f37aSriastradh
162*f447f37aSriastradh sodium_free(c);
163*f447f37aSriastradh sodium_free(detached_c);
164*f447f37aSriastradh sodium_free(mac);
165*f447f37aSriastradh sodium_free(m2);
166*f447f37aSriastradh
167*f447f37aSriastradh assert(crypto_aead_chacha20poly1305_keybytes() > 0U);
168*f447f37aSriastradh assert(crypto_aead_chacha20poly1305_npubbytes() > 0U);
169*f447f37aSriastradh assert(crypto_aead_chacha20poly1305_nsecbytes() == 0U);
170*f447f37aSriastradh assert(crypto_aead_chacha20poly1305_messagebytes_max() > 0U);
171*f447f37aSriastradh assert(crypto_aead_chacha20poly1305_messagebytes_max() == crypto_aead_chacha20poly1305_MESSAGEBYTES_MAX);
172*f447f37aSriastradh assert(crypto_aead_chacha20poly1305_keybytes() == crypto_aead_chacha20poly1305_KEYBYTES);
173*f447f37aSriastradh assert(crypto_aead_chacha20poly1305_nsecbytes() == crypto_aead_chacha20poly1305_NSECBYTES);
174*f447f37aSriastradh assert(crypto_aead_chacha20poly1305_npubbytes() == crypto_aead_chacha20poly1305_NPUBBYTES);
175*f447f37aSriastradh assert(crypto_aead_chacha20poly1305_abytes() == crypto_aead_chacha20poly1305_ABYTES);
176*f447f37aSriastradh
177*f447f37aSriastradh return 0;
178*f447f37aSriastradh }
179*f447f37aSriastradh
180*f447f37aSriastradh static int
tv_ietf(void)181*f447f37aSriastradh tv_ietf(void)
182*f447f37aSriastradh {
183*f447f37aSriastradh #undef MLEN
184*f447f37aSriastradh #define MLEN 114U
185*f447f37aSriastradh #undef ADLEN
186*f447f37aSriastradh #define ADLEN 12U
187*f447f37aSriastradh #undef CLEN
188*f447f37aSriastradh #define CLEN (MLEN + crypto_aead_chacha20poly1305_ietf_ABYTES)
189*f447f37aSriastradh static const unsigned char firstkey[crypto_aead_chacha20poly1305_ietf_KEYBYTES]
190*f447f37aSriastradh = {
191*f447f37aSriastradh 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
192*f447f37aSriastradh 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
193*f447f37aSriastradh 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
194*f447f37aSriastradh 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
195*f447f37aSriastradh };
196*f447f37aSriastradh #undef MESSAGE
197*f447f37aSriastradh #define MESSAGE "Ladies and Gentlemen of the class of '99: If I could offer you " \
198*f447f37aSriastradh "only one tip for the future, sunscreen would be it."
199*f447f37aSriastradh unsigned char *m = (unsigned char *) sodium_malloc(MLEN);
200*f447f37aSriastradh static const unsigned char nonce[crypto_aead_chacha20poly1305_ietf_NPUBBYTES]
201*f447f37aSriastradh = { 0x07, 0x00, 0x00, 0x00,
202*f447f37aSriastradh 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47 };
203*f447f37aSriastradh static const unsigned char ad[ADLEN]
204*f447f37aSriastradh = { 0x50, 0x51, 0x52, 0x53, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7 };
205*f447f37aSriastradh unsigned char *c = (unsigned char *) sodium_malloc(CLEN);
206*f447f37aSriastradh unsigned char *detached_c = (unsigned char *) sodium_malloc(MLEN);
207*f447f37aSriastradh unsigned char *mac = (unsigned char *) sodium_malloc(crypto_aead_chacha20poly1305_ietf_ABYTES);
208*f447f37aSriastradh unsigned char *m2 = (unsigned char *) sodium_malloc(MLEN);
209*f447f37aSriastradh unsigned long long found_clen;
210*f447f37aSriastradh unsigned long long found_maclen;
211*f447f37aSriastradh unsigned long long m2len;
212*f447f37aSriastradh size_t i;
213*f447f37aSriastradh
214*f447f37aSriastradh assert(sizeof MESSAGE - 1U == MLEN);
215*f447f37aSriastradh memcpy(m, MESSAGE, MLEN);
216*f447f37aSriastradh crypto_aead_chacha20poly1305_ietf_encrypt(c, &found_clen, m, MLEN,
217*f447f37aSriastradh ad, ADLEN,
218*f447f37aSriastradh NULL, nonce, firstkey);
219*f447f37aSriastradh if (found_clen != MLEN + crypto_aead_chacha20poly1305_ietf_abytes()) {
220*f447f37aSriastradh printf("found_clen is not properly set\n");
221*f447f37aSriastradh }
222*f447f37aSriastradh for (i = 0U; i < CLEN; ++i) {
223*f447f37aSriastradh printf(",0x%02x", (unsigned int) c[i]);
224*f447f37aSriastradh if (i % 8 == 7) {
225*f447f37aSriastradh printf("\n");
226*f447f37aSriastradh }
227*f447f37aSriastradh }
228*f447f37aSriastradh printf("\n");
229*f447f37aSriastradh crypto_aead_chacha20poly1305_ietf_encrypt_detached(detached_c,
230*f447f37aSriastradh mac, &found_maclen,
231*f447f37aSriastradh m, MLEN,
232*f447f37aSriastradh ad, ADLEN,
233*f447f37aSriastradh NULL, nonce, firstkey);
234*f447f37aSriastradh if (found_maclen != crypto_aead_chacha20poly1305_ietf_abytes()) {
235*f447f37aSriastradh printf("found_maclen is not properly set\n");
236*f447f37aSriastradh }
237*f447f37aSriastradh if (memcmp(detached_c, c, MLEN) != 0) {
238*f447f37aSriastradh printf("detached ciphertext is bogus\n");
239*f447f37aSriastradh }
240*f447f37aSriastradh
241*f447f37aSriastradh if (crypto_aead_chacha20poly1305_ietf_decrypt(m2, &m2len, NULL, c, CLEN, ad,
242*f447f37aSriastradh ADLEN, nonce, firstkey) != 0) {
243*f447f37aSriastradh printf("crypto_aead_chacha20poly1305_ietf_decrypt() failed\n");
244*f447f37aSriastradh }
245*f447f37aSriastradh if (m2len != MLEN) {
246*f447f37aSriastradh printf("m2len is not properly set\n");
247*f447f37aSriastradh }
248*f447f37aSriastradh if (memcmp(m, m2, MLEN) != 0) {
249*f447f37aSriastradh printf("m != m2\n");
250*f447f37aSriastradh }
251*f447f37aSriastradh memset(m2, 0, m2len);
252*f447f37aSriastradh assert(crypto_aead_chacha20poly1305_ietf_decrypt_detached(NULL, NULL,
253*f447f37aSriastradh c, MLEN, mac,
254*f447f37aSriastradh ad, ADLEN,
255*f447f37aSriastradh nonce, firstkey) == 0);
256*f447f37aSriastradh if (crypto_aead_chacha20poly1305_ietf_decrypt_detached(m2, NULL,
257*f447f37aSriastradh c, MLEN, mac,
258*f447f37aSriastradh ad, ADLEN,
259*f447f37aSriastradh nonce, firstkey) != 0) {
260*f447f37aSriastradh printf("crypto_aead_chacha20poly1305_ietf_decrypt_detached() failed\n");
261*f447f37aSriastradh }
262*f447f37aSriastradh if (memcmp(m, m2, MLEN) != 0) {
263*f447f37aSriastradh printf("detached m != m2\n");
264*f447f37aSriastradh }
265*f447f37aSriastradh
266*f447f37aSriastradh for (i = 0U; i < CLEN; i++) {
267*f447f37aSriastradh c[i] ^= (i + 1U);
268*f447f37aSriastradh if (crypto_aead_chacha20poly1305_ietf_decrypt(m2, NULL, NULL, c, CLEN,
269*f447f37aSriastradh ad, ADLEN, nonce, firstkey)
270*f447f37aSriastradh == 0 || memcmp(m, m2, MLEN) == 0) {
271*f447f37aSriastradh printf("message can be forged\n");
272*f447f37aSriastradh }
273*f447f37aSriastradh c[i] ^= (i + 1U);
274*f447f37aSriastradh }
275*f447f37aSriastradh crypto_aead_chacha20poly1305_ietf_encrypt(c, &found_clen, m, MLEN,
276*f447f37aSriastradh NULL, 0U, NULL, nonce, firstkey);
277*f447f37aSriastradh if (found_clen != CLEN) {
278*f447f37aSriastradh printf("clen is not properly set (adlen=0)\n");
279*f447f37aSriastradh }
280*f447f37aSriastradh for (i = 0U; i < CLEN; ++i) {
281*f447f37aSriastradh printf(",0x%02x", (unsigned int) c[i]);
282*f447f37aSriastradh if (i % 8 == 7) {
283*f447f37aSriastradh printf("\n");
284*f447f37aSriastradh }
285*f447f37aSriastradh }
286*f447f37aSriastradh printf("\n");
287*f447f37aSriastradh if (crypto_aead_chacha20poly1305_ietf_decrypt(m2, &m2len, NULL, c, CLEN,
288*f447f37aSriastradh NULL, 0U, nonce, firstkey) != 0) {
289*f447f37aSriastradh printf("crypto_aead_chacha20poly1305_ietf_decrypt() failed (adlen=0)\n");
290*f447f37aSriastradh }
291*f447f37aSriastradh if (m2len != MLEN) {
292*f447f37aSriastradh printf("m2len is not properly set (adlen=0)\n");
293*f447f37aSriastradh }
294*f447f37aSriastradh if (memcmp(m, m2, MLEN) != 0) {
295*f447f37aSriastradh printf("m != m2 (adlen=0)\n");
296*f447f37aSriastradh }
297*f447f37aSriastradh m2len = 1;
298*f447f37aSriastradh if (crypto_aead_chacha20poly1305_ietf_decrypt(
299*f447f37aSriastradh m2, &m2len, NULL, NULL,
300*f447f37aSriastradh randombytes_uniform(crypto_aead_chacha20poly1305_ietf_ABYTES),
301*f447f37aSriastradh NULL, 0U, nonce, firstkey) != -1) {
302*f447f37aSriastradh printf("crypto_aead_chacha20poly1305_ietf_decrypt() worked with a short "
303*f447f37aSriastradh "ciphertext\n");
304*f447f37aSriastradh }
305*f447f37aSriastradh if (m2len != 0) {
306*f447f37aSriastradh printf("Message length should have been set to zero after a failure\n");
307*f447f37aSriastradh }
308*f447f37aSriastradh m2len = 1;
309*f447f37aSriastradh if (crypto_aead_chacha20poly1305_ietf_decrypt(m2, &m2len, NULL, c, 0U, NULL, 0U,
310*f447f37aSriastradh nonce, firstkey) != -1) {
311*f447f37aSriastradh printf("crypto_aead_chacha20poly1305_ietf_decrypt() worked with an empty "
312*f447f37aSriastradh "ciphertext\n");
313*f447f37aSriastradh }
314*f447f37aSriastradh if (m2len != 0) {
315*f447f37aSriastradh printf("Message length should have been set to zero after a failure\n");
316*f447f37aSriastradh }
317*f447f37aSriastradh
318*f447f37aSriastradh memcpy(c, m, MLEN);
319*f447f37aSriastradh crypto_aead_chacha20poly1305_ietf_encrypt(c, &found_clen, c, MLEN,
320*f447f37aSriastradh NULL, 0U, NULL, nonce, firstkey);
321*f447f37aSriastradh if (found_clen != CLEN) {
322*f447f37aSriastradh printf("clen is not properly set (adlen=0)\n");
323*f447f37aSriastradh }
324*f447f37aSriastradh for (i = 0U; i < CLEN; ++i) {
325*f447f37aSriastradh printf(",0x%02x", (unsigned int) c[i]);
326*f447f37aSriastradh if (i % 8 == 7) {
327*f447f37aSriastradh printf("\n");
328*f447f37aSriastradh }
329*f447f37aSriastradh }
330*f447f37aSriastradh printf("\n");
331*f447f37aSriastradh
332*f447f37aSriastradh if (crypto_aead_chacha20poly1305_ietf_decrypt(c, &m2len, NULL, c, CLEN,
333*f447f37aSriastradh NULL, 0U, nonce, firstkey) != 0) {
334*f447f37aSriastradh printf("crypto_aead_chacha20poly1305_ietf_decrypt() failed (adlen=0)\n");
335*f447f37aSriastradh }
336*f447f37aSriastradh if (m2len != MLEN) {
337*f447f37aSriastradh printf("m2len is not properly set (adlen=0)\n");
338*f447f37aSriastradh }
339*f447f37aSriastradh if (memcmp(m, c, MLEN) != 0) {
340*f447f37aSriastradh printf("m != c (adlen=0)\n");
341*f447f37aSriastradh }
342*f447f37aSriastradh
343*f447f37aSriastradh sodium_free(c);
344*f447f37aSriastradh sodium_free(detached_c);
345*f447f37aSriastradh sodium_free(mac);
346*f447f37aSriastradh sodium_free(m2);
347*f447f37aSriastradh sodium_free(m);
348*f447f37aSriastradh
349*f447f37aSriastradh assert(crypto_aead_chacha20poly1305_ietf_keybytes() > 0U);
350*f447f37aSriastradh assert(crypto_aead_chacha20poly1305_ietf_keybytes() == crypto_aead_chacha20poly1305_keybytes());
351*f447f37aSriastradh assert(crypto_aead_chacha20poly1305_ietf_npubbytes() > 0U);
352*f447f37aSriastradh assert(crypto_aead_chacha20poly1305_ietf_npubbytes() > crypto_aead_chacha20poly1305_npubbytes());
353*f447f37aSriastradh assert(crypto_aead_chacha20poly1305_ietf_nsecbytes() == 0U);
354*f447f37aSriastradh assert(crypto_aead_chacha20poly1305_ietf_nsecbytes() == crypto_aead_chacha20poly1305_nsecbytes());
355*f447f37aSriastradh assert(crypto_aead_chacha20poly1305_ietf_messagebytes_max() == crypto_aead_chacha20poly1305_ietf_MESSAGEBYTES_MAX);
356*f447f37aSriastradh assert(crypto_aead_chacha20poly1305_IETF_KEYBYTES == crypto_aead_chacha20poly1305_ietf_KEYBYTES);
357*f447f37aSriastradh assert(crypto_aead_chacha20poly1305_IETF_NSECBYTES == crypto_aead_chacha20poly1305_ietf_NSECBYTES);
358*f447f37aSriastradh assert(crypto_aead_chacha20poly1305_IETF_NPUBBYTES == crypto_aead_chacha20poly1305_ietf_NPUBBYTES);
359*f447f37aSriastradh assert(crypto_aead_chacha20poly1305_IETF_ABYTES == crypto_aead_chacha20poly1305_ietf_ABYTES);
360*f447f37aSriastradh assert(crypto_aead_chacha20poly1305_IETF_MESSAGEBYTES_MAX == crypto_aead_chacha20poly1305_ietf_MESSAGEBYTES_MAX);
361*f447f37aSriastradh
362*f447f37aSriastradh return 0;
363*f447f37aSriastradh }
364*f447f37aSriastradh
365*f447f37aSriastradh int
main(void)366*f447f37aSriastradh main(void)
367*f447f37aSriastradh {
368*f447f37aSriastradh tv();
369*f447f37aSriastradh tv_ietf();
370*f447f37aSriastradh
371*f447f37aSriastradh return 0;
372*f447f37aSriastradh }
373