1 #ifndef crypto_aead_chacha20poly1305_H
2 #define crypto_aead_chacha20poly1305_H
3 
4 #include <stddef.h>
5 #include "export.h"
6 
7 #ifdef __cplusplus
8 # ifdef __GNUC__
9 #  pragma GCC diagnostic ignored "-Wlong-long"
10 # endif
11 extern "C" {
12 #endif
13 
14 /* -- IETF ChaCha20-Poly1305 construction with a 96-bit nonce and a 32-bit internal counter -- */
15 
16 #define crypto_aead_chacha20poly1305_ietf_KEYBYTES 32U
17 SODIUM_EXPORT
18 size_t crypto_aead_chacha20poly1305_ietf_keybytes(void);
19 
20 #define crypto_aead_chacha20poly1305_ietf_NSECBYTES 0U
21 SODIUM_EXPORT
22 size_t crypto_aead_chacha20poly1305_ietf_nsecbytes(void);
23 
24 #define crypto_aead_chacha20poly1305_ietf_NPUBBYTES 12U
25 
26 SODIUM_EXPORT
27 size_t crypto_aead_chacha20poly1305_ietf_npubbytes(void);
28 
29 #define crypto_aead_chacha20poly1305_ietf_ABYTES 16U
30 SODIUM_EXPORT
31 size_t crypto_aead_chacha20poly1305_ietf_abytes(void);
32 
33 #define crypto_aead_chacha20poly1305_ietf_MESSAGEBYTES_MAX \
34     SODIUM_MIN(SODIUM_SIZE_MAX - crypto_aead_chacha20poly1305_ietf_ABYTES, \
35                (64ULL * ((1ULL << 32) - 1ULL)))
36 SODIUM_EXPORT
37 size_t crypto_aead_chacha20poly1305_ietf_messagebytes_max(void);
38 
39 SODIUM_EXPORT
40 int crypto_aead_chacha20poly1305_ietf_encrypt(unsigned char *c,
41                                               unsigned long long *clen_p,
42                                               const unsigned char *m,
43                                               unsigned long long mlen,
44                                               const unsigned char *ad,
45                                               unsigned long long adlen,
46                                               const unsigned char *nsec,
47                                               const unsigned char *npub,
48                                               const unsigned char *k)
49             __attribute__ ((nonnull(1, 8, 9)));
50 
51 SODIUM_EXPORT
52 int crypto_aead_chacha20poly1305_ietf_decrypt(unsigned char *m,
53                                               unsigned long long *mlen_p,
54                                               unsigned char *nsec,
55                                               const unsigned char *c,
56                                               unsigned long long clen,
57                                               const unsigned char *ad,
58                                               unsigned long long adlen,
59                                               const unsigned char *npub,
60                                               const unsigned char *k)
61             __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(4, 8, 9)));
62 
63 SODIUM_EXPORT
64 int crypto_aead_chacha20poly1305_ietf_encrypt_detached(unsigned char *c,
65                                                        unsigned char *mac,
66                                                        unsigned long long *maclen_p,
67                                                        const unsigned char *m,
68                                                        unsigned long long mlen,
69                                                        const unsigned char *ad,
70                                                        unsigned long long adlen,
71                                                        const unsigned char *nsec,
72                                                        const unsigned char *npub,
73                                                        const unsigned char *k)
74             __attribute__ ((nonnull(1, 2, 9, 10)));
75 
76 SODIUM_EXPORT
77 int 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)) __attribute__ ((nonnull(3, 5, 8, 9)));
87 
88 SODIUM_EXPORT
89 void crypto_aead_chacha20poly1305_ietf_keygen(unsigned char k[crypto_aead_chacha20poly1305_ietf_KEYBYTES])
90             __attribute__ ((nonnull));
91 
92 /* -- Original ChaCha20-Poly1305 construction with a 64-bit nonce and a 64-bit internal counter -- */
93 
94 #define crypto_aead_chacha20poly1305_KEYBYTES 32U
95 SODIUM_EXPORT
96 size_t crypto_aead_chacha20poly1305_keybytes(void);
97 
98 #define crypto_aead_chacha20poly1305_NSECBYTES 0U
99 SODIUM_EXPORT
100 size_t crypto_aead_chacha20poly1305_nsecbytes(void);
101 
102 #define crypto_aead_chacha20poly1305_NPUBBYTES 8U
103 SODIUM_EXPORT
104 size_t crypto_aead_chacha20poly1305_npubbytes(void);
105 
106 #define crypto_aead_chacha20poly1305_ABYTES 16U
107 SODIUM_EXPORT
108 size_t crypto_aead_chacha20poly1305_abytes(void);
109 
110 #define crypto_aead_chacha20poly1305_MESSAGEBYTES_MAX \
111     (SODIUM_SIZE_MAX - crypto_aead_chacha20poly1305_ABYTES)
112 SODIUM_EXPORT
113 size_t crypto_aead_chacha20poly1305_messagebytes_max(void);
114 
115 SODIUM_EXPORT
116 int crypto_aead_chacha20poly1305_encrypt(unsigned char *c,
117                                          unsigned long long *clen_p,
118                                          const unsigned char *m,
119                                          unsigned long long mlen,
120                                          const unsigned char *ad,
121                                          unsigned long long adlen,
122                                          const unsigned char *nsec,
123                                          const unsigned char *npub,
124                                          const unsigned char *k)
125             __attribute__ ((nonnull(1, 8, 9)));
126 
127 SODIUM_EXPORT
128 int crypto_aead_chacha20poly1305_decrypt(unsigned char *m,
129                                          unsigned long long *mlen_p,
130                                          unsigned char *nsec,
131                                          const unsigned char *c,
132                                          unsigned long long clen,
133                                          const unsigned char *ad,
134                                          unsigned long long adlen,
135                                          const unsigned char *npub,
136                                          const unsigned char *k)
137             __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(4, 8, 9)));
138 
139 SODIUM_EXPORT
140 int crypto_aead_chacha20poly1305_encrypt_detached(unsigned char *c,
141                                                   unsigned char *mac,
142                                                   unsigned long long *maclen_p,
143                                                   const unsigned char *m,
144                                                   unsigned long long mlen,
145                                                   const unsigned char *ad,
146                                                   unsigned long long adlen,
147                                                   const unsigned char *nsec,
148                                                   const unsigned char *npub,
149                                                   const unsigned char *k)
150             __attribute__ ((nonnull(1, 2, 9, 10)));
151 
152 SODIUM_EXPORT
153 int crypto_aead_chacha20poly1305_decrypt_detached(unsigned char *m,
154                                                   unsigned char *nsec,
155                                                   const unsigned char *c,
156                                                   unsigned long long clen,
157                                                   const unsigned char *mac,
158                                                   const unsigned char *ad,
159                                                   unsigned long long adlen,
160                                                   const unsigned char *npub,
161                                                   const unsigned char *k)
162             __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(3, 5, 8, 9)));
163 
164 SODIUM_EXPORT
165 void crypto_aead_chacha20poly1305_keygen(unsigned char k[crypto_aead_chacha20poly1305_KEYBYTES])
166             __attribute__ ((nonnull));
167 
168 /* Aliases */
169 
170 #define crypto_aead_chacha20poly1305_IETF_KEYBYTES         crypto_aead_chacha20poly1305_ietf_KEYBYTES
171 #define crypto_aead_chacha20poly1305_IETF_NSECBYTES        crypto_aead_chacha20poly1305_ietf_NSECBYTES
172 #define crypto_aead_chacha20poly1305_IETF_NPUBBYTES        crypto_aead_chacha20poly1305_ietf_NPUBBYTES
173 #define crypto_aead_chacha20poly1305_IETF_ABYTES           crypto_aead_chacha20poly1305_ietf_ABYTES
174 #define crypto_aead_chacha20poly1305_IETF_MESSAGEBYTES_MAX crypto_aead_chacha20poly1305_ietf_MESSAGEBYTES_MAX
175 
176 #ifdef __cplusplus
177 }
178 #endif
179 
180 #endif
181