1#ifndef crypto_aead_chacha20poly1305_H
2#define crypto_aead_chacha20poly1305_H
3
4#if 0
5#include <stddef.h>
6#endif
7#include "export.h"
8
9#ifdef __cplusplus
10# ifdef __GNUC__
11#  pragma GCC diagnostic ignored "-Wlong-long"
12# endif
13extern "C" {
14#endif
15
16/* -- IETF ChaCha20-Poly1305 construction with a 96-bit nonce and a 32-bit internal counter -- */
17
18#define crypto_aead_chacha20poly1305_ietf_KEYBYTES 32U
19SODIUM_EXPORT
20size_t crypto_aead_chacha20poly1305_ietf_keybytes(void);
21
22#define crypto_aead_chacha20poly1305_ietf_NSECBYTES 0U
23SODIUM_EXPORT
24size_t crypto_aead_chacha20poly1305_ietf_nsecbytes(void);
25
26#define crypto_aead_chacha20poly1305_ietf_NPUBBYTES 12U
27
28SODIUM_EXPORT
29size_t crypto_aead_chacha20poly1305_ietf_npubbytes(void);
30
31#define crypto_aead_chacha20poly1305_ietf_ABYTES 16U
32SODIUM_EXPORT
33size_t crypto_aead_chacha20poly1305_ietf_abytes(void);
34
35#define crypto_aead_chacha20poly1305_ietf_MESSAGEBYTES_MAX \
36    SODIUM_MIN(SODIUM_SIZE_MAX - crypto_aead_chacha20poly1305_ietf_ABYTES, \
37               (64ULL * (1ULL << 32) - 64ULL) - crypto_aead_chacha20poly1305_ietf_ABYTES)
38SODIUM_EXPORT
39size_t crypto_aead_chacha20poly1305_ietf_messagebytes_max(void);
40
41SODIUM_EXPORT
42int crypto_aead_chacha20poly1305_ietf_encrypt(unsigned char *c,
43                                              unsigned long long *clen_p,
44                                              const unsigned char *m,
45                                              unsigned long long mlen,
46                                              const unsigned char *ad,
47                                              unsigned long long adlen,
48                                              const unsigned char *nsec,
49                                              const unsigned char *npub,
50                                              const unsigned char *k);
51
52SODIUM_EXPORT
53int crypto_aead_chacha20poly1305_ietf_decrypt(unsigned char *m,
54                                              unsigned long long *mlen_p,
55                                              unsigned char *nsec,
56                                              const unsigned char *c,
57                                              unsigned long long clen,
58                                              const unsigned char *ad,
59                                              unsigned long long adlen,
60                                              const unsigned char *npub,
61                                              const unsigned char *k)
62            __attribute__ ((warn_unused_result));
63
64SODIUM_EXPORT
65int crypto_aead_chacha20poly1305_ietf_encrypt_detached(unsigned char *c,
66                                                       unsigned char *mac,
67                                                       unsigned long long *maclen_p,
68                                                       const unsigned char *m,
69                                                       unsigned long long mlen,
70                                                       const unsigned char *ad,
71                                                       unsigned long long adlen,
72                                                       const unsigned char *nsec,
73                                                       const unsigned char *npub,
74                                                       const unsigned char *k);
75
76SODIUM_EXPORT
77int crypto_aead_chacha20poly1305_ietf_decrypt_detached(unsigned char *m,
78                                                       unsigned char *nsec,
79                                                       const unsigned char *c,
80                                                       unsigned long long clen,
81                                                       const unsigned char *mac,
82                                                       const unsigned char *ad,
83                                                       unsigned long long adlen,
84                                                       const unsigned char *npub,
85                                                       const unsigned char *k)
86        __attribute__ ((warn_unused_result));
87
88SODIUM_EXPORT
89void crypto_aead_chacha20poly1305_ietf_keygen(unsigned char k[crypto_aead_chacha20poly1305_ietf_KEYBYTES]);
90
91/* -- Original ChaCha20-Poly1305 construction with a 64-bit nonce and a 64-bit internal counter -- */
92
93#define crypto_aead_chacha20poly1305_KEYBYTES 32U
94SODIUM_EXPORT
95size_t crypto_aead_chacha20poly1305_keybytes(void);
96
97#define crypto_aead_chacha20poly1305_NSECBYTES 0U
98SODIUM_EXPORT
99size_t crypto_aead_chacha20poly1305_nsecbytes(void);
100
101#define crypto_aead_chacha20poly1305_NPUBBYTES 8U
102SODIUM_EXPORT
103size_t crypto_aead_chacha20poly1305_npubbytes(void);
104
105#define crypto_aead_chacha20poly1305_ABYTES 16U
106SODIUM_EXPORT
107size_t crypto_aead_chacha20poly1305_abytes(void);
108
109#define crypto_aead_chacha20poly1305_MESSAGEBYTES_MAX \
110    (SODIUM_SIZE_MAX - crypto_aead_chacha20poly1305_ABYTES)
111SODIUM_EXPORT
112size_t crypto_aead_chacha20poly1305_messagebytes_max(void);
113
114SODIUM_EXPORT
115int crypto_aead_chacha20poly1305_encrypt(unsigned char *c,
116                                         unsigned long long *clen_p,
117                                         const unsigned char *m,
118                                         unsigned long long mlen,
119                                         const unsigned char *ad,
120                                         unsigned long long adlen,
121                                         const unsigned char *nsec,
122                                         const unsigned char *npub,
123                                         const unsigned char *k);
124
125SODIUM_EXPORT
126int crypto_aead_chacha20poly1305_decrypt(unsigned char *m,
127                                         unsigned long long *mlen_p,
128                                         unsigned char *nsec,
129                                         const unsigned char *c,
130                                         unsigned long long clen,
131                                         const unsigned char *ad,
132                                         unsigned long long adlen,
133                                         const unsigned char *npub,
134                                         const unsigned char *k)
135            __attribute__ ((warn_unused_result));
136
137SODIUM_EXPORT
138int crypto_aead_chacha20poly1305_encrypt_detached(unsigned char *c,
139                                                  unsigned char *mac,
140                                                  unsigned long long *maclen_p,
141                                                  const unsigned char *m,
142                                                  unsigned long long mlen,
143                                                  const unsigned char *ad,
144                                                  unsigned long long adlen,
145                                                  const unsigned char *nsec,
146                                                  const unsigned char *npub,
147                                                  const unsigned char *k);
148
149SODIUM_EXPORT
150int crypto_aead_chacha20poly1305_decrypt_detached(unsigned char *m,
151                                                  unsigned char *nsec,
152                                                  const unsigned char *c,
153                                                  unsigned long long clen,
154                                                  const unsigned char *mac,
155                                                  const unsigned char *ad,
156                                                  unsigned long long adlen,
157                                                  const unsigned char *npub,
158                                                  const unsigned char *k)
159        __attribute__ ((warn_unused_result));
160
161SODIUM_EXPORT
162void crypto_aead_chacha20poly1305_keygen(unsigned char k[crypto_aead_chacha20poly1305_KEYBYTES]);
163
164/* Aliases */
165
166#define crypto_aead_chacha20poly1305_IETF_KEYBYTES         crypto_aead_chacha20poly1305_ietf_KEYBYTES
167#define crypto_aead_chacha20poly1305_IETF_NSECBYTES        crypto_aead_chacha20poly1305_ietf_NSECBYTES
168#define crypto_aead_chacha20poly1305_IETF_NPUBBYTES        crypto_aead_chacha20poly1305_ietf_NPUBBYTES
169#define crypto_aead_chacha20poly1305_IETF_ABYTES           crypto_aead_chacha20poly1305_ietf_ABYTES
170#define crypto_aead_chacha20poly1305_IETF_MESSAGEBYTES_MAX crypto_aead_chacha20poly1305_ietf_MESSAGEBYTES_MAX
171
172#ifdef __cplusplus
173}
174#endif
175
176#endif
177#ifndef crypto_aead_chacha20poly1305_H
178#define crypto_aead_chacha20poly1305_H
179
180#if 0
181#include <stddef.h>
182#endif
183#include "export.h"
184
185#ifdef __cplusplus
186# ifdef __GNUC__
187#  pragma GCC diagnostic ignored "-Wlong-long"
188# endif
189extern "C" {
190#endif
191
192/* -- IETF ChaCha20-Poly1305 construction with a 96-bit nonce and a 32-bit internal counter -- */
193
194#define crypto_aead_chacha20poly1305_ietf_KEYBYTES 32U
195SODIUM_EXPORT
196size_t crypto_aead_chacha20poly1305_ietf_keybytes(void);
197
198#define crypto_aead_chacha20poly1305_ietf_NSECBYTES 0U
199SODIUM_EXPORT
200size_t crypto_aead_chacha20poly1305_ietf_nsecbytes(void);
201
202#define crypto_aead_chacha20poly1305_ietf_NPUBBYTES 12U
203
204SODIUM_EXPORT
205size_t crypto_aead_chacha20poly1305_ietf_npubbytes(void);
206
207#define crypto_aead_chacha20poly1305_ietf_ABYTES 16U
208SODIUM_EXPORT
209size_t crypto_aead_chacha20poly1305_ietf_abytes(void);
210
211#define crypto_aead_chacha20poly1305_ietf_MESSAGEBYTES_MAX \
212    SODIUM_MIN(SODIUM_SIZE_MAX - crypto_aead_chacha20poly1305_ietf_ABYTES, \
213               (64ULL * (1ULL << 32) - 64ULL) - crypto_aead_chacha20poly1305_ietf_ABYTES)
214SODIUM_EXPORT
215size_t crypto_aead_chacha20poly1305_ietf_messagebytes_max(void);
216
217SODIUM_EXPORT
218int crypto_aead_chacha20poly1305_ietf_encrypt(unsigned char *c,
219                                              unsigned long long *clen_p,
220                                              const unsigned char *m,
221                                              unsigned long long mlen,
222                                              const unsigned char *ad,
223                                              unsigned long long adlen,
224                                              const unsigned char *nsec,
225                                              const unsigned char *npub,
226                                              const unsigned char *k);
227
228SODIUM_EXPORT
229int crypto_aead_chacha20poly1305_ietf_decrypt(unsigned char *m,
230                                              unsigned long long *mlen_p,
231                                              unsigned char *nsec,
232                                              const unsigned char *c,
233                                              unsigned long long clen,
234                                              const unsigned char *ad,
235                                              unsigned long long adlen,
236                                              const unsigned char *npub,
237                                              const unsigned char *k)
238            __attribute__ ((warn_unused_result));
239
240SODIUM_EXPORT
241int crypto_aead_chacha20poly1305_ietf_encrypt_detached(unsigned char *c,
242                                                       unsigned char *mac,
243                                                       unsigned long long *maclen_p,
244                                                       const unsigned char *m,
245                                                       unsigned long long mlen,
246                                                       const unsigned char *ad,
247                                                       unsigned long long adlen,
248                                                       const unsigned char *nsec,
249                                                       const unsigned char *npub,
250                                                       const unsigned char *k);
251
252SODIUM_EXPORT
253int crypto_aead_chacha20poly1305_ietf_decrypt_detached(unsigned char *m,
254                                                       unsigned char *nsec,
255                                                       const unsigned char *c,
256                                                       unsigned long long clen,
257                                                       const unsigned char *mac,
258                                                       const unsigned char *ad,
259                                                       unsigned long long adlen,
260                                                       const unsigned char *npub,
261                                                       const unsigned char *k)
262        __attribute__ ((warn_unused_result));
263
264SODIUM_EXPORT
265void crypto_aead_chacha20poly1305_ietf_keygen(unsigned char k[crypto_aead_chacha20poly1305_ietf_KEYBYTES]);
266
267/* -- Original ChaCha20-Poly1305 construction with a 64-bit nonce and a 64-bit internal counter -- */
268
269#define crypto_aead_chacha20poly1305_KEYBYTES 32U
270SODIUM_EXPORT
271size_t crypto_aead_chacha20poly1305_keybytes(void);
272
273#define crypto_aead_chacha20poly1305_NSECBYTES 0U
274SODIUM_EXPORT
275size_t crypto_aead_chacha20poly1305_nsecbytes(void);
276
277#define crypto_aead_chacha20poly1305_NPUBBYTES 8U
278SODIUM_EXPORT
279size_t crypto_aead_chacha20poly1305_npubbytes(void);
280
281#define crypto_aead_chacha20poly1305_ABYTES 16U
282SODIUM_EXPORT
283size_t crypto_aead_chacha20poly1305_abytes(void);
284
285#define crypto_aead_chacha20poly1305_MESSAGEBYTES_MAX \
286    (SODIUM_SIZE_MAX - crypto_aead_chacha20poly1305_ABYTES)
287SODIUM_EXPORT
288size_t crypto_aead_chacha20poly1305_messagebytes_max(void);
289
290SODIUM_EXPORT
291int crypto_aead_chacha20poly1305_encrypt(unsigned char *c,
292                                         unsigned long long *clen_p,
293                                         const unsigned char *m,
294                                         unsigned long long mlen,
295                                         const unsigned char *ad,
296                                         unsigned long long adlen,
297                                         const unsigned char *nsec,
298                                         const unsigned char *npub,
299                                         const unsigned char *k);
300
301SODIUM_EXPORT
302int crypto_aead_chacha20poly1305_decrypt(unsigned char *m,
303                                         unsigned long long *mlen_p,
304                                         unsigned char *nsec,
305                                         const unsigned char *c,
306                                         unsigned long long clen,
307                                         const unsigned char *ad,
308                                         unsigned long long adlen,
309                                         const unsigned char *npub,
310                                         const unsigned char *k)
311            __attribute__ ((warn_unused_result));
312
313SODIUM_EXPORT
314int crypto_aead_chacha20poly1305_encrypt_detached(unsigned char *c,
315                                                  unsigned char *mac,
316                                                  unsigned long long *maclen_p,
317                                                  const unsigned char *m,
318                                                  unsigned long long mlen,
319                                                  const unsigned char *ad,
320                                                  unsigned long long adlen,
321                                                  const unsigned char *nsec,
322                                                  const unsigned char *npub,
323                                                  const unsigned char *k);
324
325SODIUM_EXPORT
326int crypto_aead_chacha20poly1305_decrypt_detached(unsigned char *m,
327                                                  unsigned char *nsec,
328                                                  const unsigned char *c,
329                                                  unsigned long long clen,
330                                                  const unsigned char *mac,
331                                                  const unsigned char *ad,
332                                                  unsigned long long adlen,
333                                                  const unsigned char *npub,
334                                                  const unsigned char *k)
335        __attribute__ ((warn_unused_result));
336
337SODIUM_EXPORT
338void crypto_aead_chacha20poly1305_keygen(unsigned char k[crypto_aead_chacha20poly1305_KEYBYTES]);
339
340/* Aliases */
341
342#define crypto_aead_chacha20poly1305_IETF_KEYBYTES         crypto_aead_chacha20poly1305_ietf_KEYBYTES
343#define crypto_aead_chacha20poly1305_IETF_NSECBYTES        crypto_aead_chacha20poly1305_ietf_NSECBYTES
344#define crypto_aead_chacha20poly1305_IETF_NPUBBYTES        crypto_aead_chacha20poly1305_ietf_NPUBBYTES
345#define crypto_aead_chacha20poly1305_IETF_ABYTES           crypto_aead_chacha20poly1305_ietf_ABYTES
346#define crypto_aead_chacha20poly1305_IETF_MESSAGEBYTES_MAX crypto_aead_chacha20poly1305_ietf_MESSAGEBYTES_MAX
347
348#ifdef __cplusplus
349}
350#endif
351
352#endif
353#ifndef crypto_aead_chacha20poly1305_H
354#define crypto_aead_chacha20poly1305_H
355
356#if 0
357#include <stddef.h>
358#endif
359#include "export.h"
360
361#ifdef __cplusplus
362# ifdef __GNUC__
363#  pragma GCC diagnostic ignored "-Wlong-long"
364# endif
365extern "C" {
366#endif
367
368/* -- IETF ChaCha20-Poly1305 construction with a 96-bit nonce and a 32-bit internal counter -- */
369
370#define crypto_aead_chacha20poly1305_ietf_KEYBYTES 32U
371SODIUM_EXPORT
372size_t crypto_aead_chacha20poly1305_ietf_keybytes(void);
373
374#define crypto_aead_chacha20poly1305_ietf_NSECBYTES 0U
375SODIUM_EXPORT
376size_t crypto_aead_chacha20poly1305_ietf_nsecbytes(void);
377
378#define crypto_aead_chacha20poly1305_ietf_NPUBBYTES 12U
379
380SODIUM_EXPORT
381size_t crypto_aead_chacha20poly1305_ietf_npubbytes(void);
382
383#define crypto_aead_chacha20poly1305_ietf_ABYTES 16U
384SODIUM_EXPORT
385size_t crypto_aead_chacha20poly1305_ietf_abytes(void);
386
387#define crypto_aead_chacha20poly1305_ietf_MESSAGEBYTES_MAX \
388    SODIUM_MIN(SODIUM_SIZE_MAX - crypto_aead_chacha20poly1305_ietf_ABYTES, \
389               (64ULL * (1ULL << 32) - 64ULL) - crypto_aead_chacha20poly1305_ietf_ABYTES)
390SODIUM_EXPORT
391size_t crypto_aead_chacha20poly1305_ietf_messagebytes_max(void);
392
393SODIUM_EXPORT
394int crypto_aead_chacha20poly1305_ietf_encrypt(unsigned char *c,
395                                              unsigned long long *clen_p,
396                                              const unsigned char *m,
397                                              unsigned long long mlen,
398                                              const unsigned char *ad,
399                                              unsigned long long adlen,
400                                              const unsigned char *nsec,
401                                              const unsigned char *npub,
402                                              const unsigned char *k);
403
404SODIUM_EXPORT
405int crypto_aead_chacha20poly1305_ietf_decrypt(unsigned char *m,
406                                              unsigned long long *mlen_p,
407                                              unsigned char *nsec,
408                                              const unsigned char *c,
409                                              unsigned long long clen,
410                                              const unsigned char *ad,
411                                              unsigned long long adlen,
412                                              const unsigned char *npub,
413                                              const unsigned char *k)
414            __attribute__ ((warn_unused_result));
415
416SODIUM_EXPORT
417int crypto_aead_chacha20poly1305_ietf_encrypt_detached(unsigned char *c,
418                                                       unsigned char *mac,
419                                                       unsigned long long *maclen_p,
420                                                       const unsigned char *m,
421                                                       unsigned long long mlen,
422                                                       const unsigned char *ad,
423                                                       unsigned long long adlen,
424                                                       const unsigned char *nsec,
425                                                       const unsigned char *npub,
426                                                       const unsigned char *k);
427
428SODIUM_EXPORT
429int crypto_aead_chacha20poly1305_ietf_decrypt_detached(unsigned char *m,
430                                                       unsigned char *nsec,
431                                                       const unsigned char *c,
432                                                       unsigned long long clen,
433                                                       const unsigned char *mac,
434                                                       const unsigned char *ad,
435                                                       unsigned long long adlen,
436                                                       const unsigned char *npub,
437                                                       const unsigned char *k)
438        __attribute__ ((warn_unused_result));
439
440SODIUM_EXPORT
441void crypto_aead_chacha20poly1305_ietf_keygen(unsigned char k[crypto_aead_chacha20poly1305_ietf_KEYBYTES]);
442
443/* -- Original ChaCha20-Poly1305 construction with a 64-bit nonce and a 64-bit internal counter -- */
444
445#define crypto_aead_chacha20poly1305_KEYBYTES 32U
446SODIUM_EXPORT
447size_t crypto_aead_chacha20poly1305_keybytes(void);
448
449#define crypto_aead_chacha20poly1305_NSECBYTES 0U
450SODIUM_EXPORT
451size_t crypto_aead_chacha20poly1305_nsecbytes(void);
452
453#define crypto_aead_chacha20poly1305_NPUBBYTES 8U
454SODIUM_EXPORT
455size_t crypto_aead_chacha20poly1305_npubbytes(void);
456
457#define crypto_aead_chacha20poly1305_ABYTES 16U
458SODIUM_EXPORT
459size_t crypto_aead_chacha20poly1305_abytes(void);
460
461#define crypto_aead_chacha20poly1305_MESSAGEBYTES_MAX \
462    (SODIUM_SIZE_MAX - crypto_aead_chacha20poly1305_ABYTES)
463SODIUM_EXPORT
464size_t crypto_aead_chacha20poly1305_messagebytes_max(void);
465
466SODIUM_EXPORT
467int crypto_aead_chacha20poly1305_encrypt(unsigned char *c,
468                                         unsigned long long *clen_p,
469                                         const unsigned char *m,
470                                         unsigned long long mlen,
471                                         const unsigned char *ad,
472                                         unsigned long long adlen,
473                                         const unsigned char *nsec,
474                                         const unsigned char *npub,
475                                         const unsigned char *k);
476
477SODIUM_EXPORT
478int crypto_aead_chacha20poly1305_decrypt(unsigned char *m,
479                                         unsigned long long *mlen_p,
480                                         unsigned char *nsec,
481                                         const unsigned char *c,
482                                         unsigned long long clen,
483                                         const unsigned char *ad,
484                                         unsigned long long adlen,
485                                         const unsigned char *npub,
486                                         const unsigned char *k)
487            __attribute__ ((warn_unused_result));
488
489SODIUM_EXPORT
490int crypto_aead_chacha20poly1305_encrypt_detached(unsigned char *c,
491                                                  unsigned char *mac,
492                                                  unsigned long long *maclen_p,
493                                                  const unsigned char *m,
494                                                  unsigned long long mlen,
495                                                  const unsigned char *ad,
496                                                  unsigned long long adlen,
497                                                  const unsigned char *nsec,
498                                                  const unsigned char *npub,
499                                                  const unsigned char *k);
500
501SODIUM_EXPORT
502int crypto_aead_chacha20poly1305_decrypt_detached(unsigned char *m,
503                                                  unsigned char *nsec,
504                                                  const unsigned char *c,
505                                                  unsigned long long clen,
506                                                  const unsigned char *mac,
507                                                  const unsigned char *ad,
508                                                  unsigned long long adlen,
509                                                  const unsigned char *npub,
510                                                  const unsigned char *k)
511        __attribute__ ((warn_unused_result));
512
513SODIUM_EXPORT
514void crypto_aead_chacha20poly1305_keygen(unsigned char k[crypto_aead_chacha20poly1305_KEYBYTES]);
515
516/* Aliases */
517
518#define crypto_aead_chacha20poly1305_IETF_KEYBYTES         crypto_aead_chacha20poly1305_ietf_KEYBYTES
519#define crypto_aead_chacha20poly1305_IETF_NSECBYTES        crypto_aead_chacha20poly1305_ietf_NSECBYTES
520#define crypto_aead_chacha20poly1305_IETF_NPUBBYTES        crypto_aead_chacha20poly1305_ietf_NPUBBYTES
521#define crypto_aead_chacha20poly1305_IETF_ABYTES           crypto_aead_chacha20poly1305_ietf_ABYTES
522#define crypto_aead_chacha20poly1305_IETF_MESSAGEBYTES_MAX crypto_aead_chacha20poly1305_ietf_MESSAGEBYTES_MAX
523
524#ifdef __cplusplus
525}
526#endif
527
528#endif
529#ifndef crypto_aead_chacha20poly1305_H
530#define crypto_aead_chacha20poly1305_H
531
532#if 0
533#include <stddef.h>
534#endif
535#include "export.h"
536
537#ifdef __cplusplus
538# ifdef __GNUC__
539#  pragma GCC diagnostic ignored "-Wlong-long"
540# endif
541extern "C" {
542#endif
543
544/* -- IETF ChaCha20-Poly1305 construction with a 96-bit nonce and a 32-bit internal counter -- */
545
546#define crypto_aead_chacha20poly1305_ietf_KEYBYTES 32U
547SODIUM_EXPORT
548size_t crypto_aead_chacha20poly1305_ietf_keybytes(void);
549
550#define crypto_aead_chacha20poly1305_ietf_NSECBYTES 0U
551SODIUM_EXPORT
552size_t crypto_aead_chacha20poly1305_ietf_nsecbytes(void);
553
554#define crypto_aead_chacha20poly1305_ietf_NPUBBYTES 12U
555
556SODIUM_EXPORT
557size_t crypto_aead_chacha20poly1305_ietf_npubbytes(void);
558
559#define crypto_aead_chacha20poly1305_ietf_ABYTES 16U
560SODIUM_EXPORT
561size_t crypto_aead_chacha20poly1305_ietf_abytes(void);
562
563#define crypto_aead_chacha20poly1305_ietf_MESSAGEBYTES_MAX \
564    SODIUM_MIN(SODIUM_SIZE_MAX - crypto_aead_chacha20poly1305_ietf_ABYTES, \
565               (64ULL * (1ULL << 32) - 64ULL) - crypto_aead_chacha20poly1305_ietf_ABYTES)
566SODIUM_EXPORT
567size_t crypto_aead_chacha20poly1305_ietf_messagebytes_max(void);
568
569SODIUM_EXPORT
570int crypto_aead_chacha20poly1305_ietf_encrypt(unsigned char *c,
571                                              unsigned long long *clen_p,
572                                              const unsigned char *m,
573                                              unsigned long long mlen,
574                                              const unsigned char *ad,
575                                              unsigned long long adlen,
576                                              const unsigned char *nsec,
577                                              const unsigned char *npub,
578                                              const unsigned char *k);
579
580SODIUM_EXPORT
581int crypto_aead_chacha20poly1305_ietf_decrypt(unsigned char *m,
582                                              unsigned long long *mlen_p,
583                                              unsigned char *nsec,
584                                              const unsigned char *c,
585                                              unsigned long long clen,
586                                              const unsigned char *ad,
587                                              unsigned long long adlen,
588                                              const unsigned char *npub,
589                                              const unsigned char *k)
590            __attribute__ ((warn_unused_result));
591
592SODIUM_EXPORT
593int crypto_aead_chacha20poly1305_ietf_encrypt_detached(unsigned char *c,
594                                                       unsigned char *mac,
595                                                       unsigned long long *maclen_p,
596                                                       const unsigned char *m,
597                                                       unsigned long long mlen,
598                                                       const unsigned char *ad,
599                                                       unsigned long long adlen,
600                                                       const unsigned char *nsec,
601                                                       const unsigned char *npub,
602                                                       const unsigned char *k);
603
604SODIUM_EXPORT
605int crypto_aead_chacha20poly1305_ietf_decrypt_detached(unsigned char *m,
606                                                       unsigned char *nsec,
607                                                       const unsigned char *c,
608                                                       unsigned long long clen,
609                                                       const unsigned char *mac,
610                                                       const unsigned char *ad,
611                                                       unsigned long long adlen,
612                                                       const unsigned char *npub,
613                                                       const unsigned char *k)
614        __attribute__ ((warn_unused_result));
615
616SODIUM_EXPORT
617void crypto_aead_chacha20poly1305_ietf_keygen(unsigned char k[crypto_aead_chacha20poly1305_ietf_KEYBYTES]);
618
619/* -- Original ChaCha20-Poly1305 construction with a 64-bit nonce and a 64-bit internal counter -- */
620
621#define crypto_aead_chacha20poly1305_KEYBYTES 32U
622SODIUM_EXPORT
623size_t crypto_aead_chacha20poly1305_keybytes(void);
624
625#define crypto_aead_chacha20poly1305_NSECBYTES 0U
626SODIUM_EXPORT
627size_t crypto_aead_chacha20poly1305_nsecbytes(void);
628
629#define crypto_aead_chacha20poly1305_NPUBBYTES 8U
630SODIUM_EXPORT
631size_t crypto_aead_chacha20poly1305_npubbytes(void);
632
633#define crypto_aead_chacha20poly1305_ABYTES 16U
634SODIUM_EXPORT
635size_t crypto_aead_chacha20poly1305_abytes(void);
636
637#define crypto_aead_chacha20poly1305_MESSAGEBYTES_MAX \
638    (SODIUM_SIZE_MAX - crypto_aead_chacha20poly1305_ABYTES)
639SODIUM_EXPORT
640size_t crypto_aead_chacha20poly1305_messagebytes_max(void);
641
642SODIUM_EXPORT
643int crypto_aead_chacha20poly1305_encrypt(unsigned char *c,
644                                         unsigned long long *clen_p,
645                                         const unsigned char *m,
646                                         unsigned long long mlen,
647                                         const unsigned char *ad,
648                                         unsigned long long adlen,
649                                         const unsigned char *nsec,
650                                         const unsigned char *npub,
651                                         const unsigned char *k);
652
653SODIUM_EXPORT
654int crypto_aead_chacha20poly1305_decrypt(unsigned char *m,
655                                         unsigned long long *mlen_p,
656                                         unsigned char *nsec,
657                                         const unsigned char *c,
658                                         unsigned long long clen,
659                                         const unsigned char *ad,
660                                         unsigned long long adlen,
661                                         const unsigned char *npub,
662                                         const unsigned char *k)
663            __attribute__ ((warn_unused_result));
664
665SODIUM_EXPORT
666int crypto_aead_chacha20poly1305_encrypt_detached(unsigned char *c,
667                                                  unsigned char *mac,
668                                                  unsigned long long *maclen_p,
669                                                  const unsigned char *m,
670                                                  unsigned long long mlen,
671                                                  const unsigned char *ad,
672                                                  unsigned long long adlen,
673                                                  const unsigned char *nsec,
674                                                  const unsigned char *npub,
675                                                  const unsigned char *k);
676
677SODIUM_EXPORT
678int crypto_aead_chacha20poly1305_decrypt_detached(unsigned char *m,
679                                                  unsigned char *nsec,
680                                                  const unsigned char *c,
681                                                  unsigned long long clen,
682                                                  const unsigned char *mac,
683                                                  const unsigned char *ad,
684                                                  unsigned long long adlen,
685                                                  const unsigned char *npub,
686                                                  const unsigned char *k)
687        __attribute__ ((warn_unused_result));
688
689SODIUM_EXPORT
690void crypto_aead_chacha20poly1305_keygen(unsigned char k[crypto_aead_chacha20poly1305_KEYBYTES]);
691
692/* Aliases */
693
694#define crypto_aead_chacha20poly1305_IETF_KEYBYTES         crypto_aead_chacha20poly1305_ietf_KEYBYTES
695#define crypto_aead_chacha20poly1305_IETF_NSECBYTES        crypto_aead_chacha20poly1305_ietf_NSECBYTES
696#define crypto_aead_chacha20poly1305_IETF_NPUBBYTES        crypto_aead_chacha20poly1305_ietf_NPUBBYTES
697#define crypto_aead_chacha20poly1305_IETF_ABYTES           crypto_aead_chacha20poly1305_ietf_ABYTES
698#define crypto_aead_chacha20poly1305_IETF_MESSAGEBYTES_MAX crypto_aead_chacha20poly1305_ietf_MESSAGEBYTES_MAX
699
700#ifdef __cplusplus
701}
702#endif
703
704#endif
705