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) - 64ULL) - crypto_aead_chacha20poly1305_ietf_ABYTES)
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 
50 SODIUM_EXPORT
51 int crypto_aead_chacha20poly1305_ietf_decrypt(unsigned char *m,
52                                               unsigned long long *mlen_p,
53                                               unsigned char *nsec,
54                                               const unsigned char *c,
55                                               unsigned long long clen,
56                                               const unsigned char *ad,
57                                               unsigned long long adlen,
58                                               const unsigned char *npub,
59                                               const unsigned char *k)
60             __attribute__ ((warn_unused_result));
61 
62 SODIUM_EXPORT
63 int crypto_aead_chacha20poly1305_ietf_encrypt_detached(unsigned char *c,
64                                                        unsigned char *mac,
65                                                        unsigned long long *maclen_p,
66                                                        const unsigned char *m,
67                                                        unsigned long long mlen,
68                                                        const unsigned char *ad,
69                                                        unsigned long long adlen,
70                                                        const unsigned char *nsec,
71                                                        const unsigned char *npub,
72                                                        const unsigned char *k);
73 
74 SODIUM_EXPORT
75 int crypto_aead_chacha20poly1305_ietf_decrypt_detached(unsigned char *m,
76                                                        unsigned char *nsec,
77                                                        const unsigned char *c,
78                                                        unsigned long long clen,
79                                                        const unsigned char *mac,
80                                                        const unsigned char *ad,
81                                                        unsigned long long adlen,
82                                                        const unsigned char *npub,
83                                                        const unsigned char *k)
84         __attribute__ ((warn_unused_result));
85 
86 SODIUM_EXPORT
87 void crypto_aead_chacha20poly1305_ietf_keygen(unsigned char k[crypto_aead_chacha20poly1305_ietf_KEYBYTES]);
88 
89 /* -- Original ChaCha20-Poly1305 construction with a 64-bit nonce and a 64-bit internal counter -- */
90 
91 #define crypto_aead_chacha20poly1305_KEYBYTES 32U
92 SODIUM_EXPORT
93 size_t crypto_aead_chacha20poly1305_keybytes(void);
94 
95 #define crypto_aead_chacha20poly1305_NSECBYTES 0U
96 SODIUM_EXPORT
97 size_t crypto_aead_chacha20poly1305_nsecbytes(void);
98 
99 #define crypto_aead_chacha20poly1305_NPUBBYTES 8U
100 SODIUM_EXPORT
101 size_t crypto_aead_chacha20poly1305_npubbytes(void);
102 
103 #define crypto_aead_chacha20poly1305_ABYTES 16U
104 SODIUM_EXPORT
105 size_t crypto_aead_chacha20poly1305_abytes(void);
106 
107 #define crypto_aead_chacha20poly1305_MESSAGEBYTES_MAX \
108     (SODIUM_SIZE_MAX - crypto_aead_chacha20poly1305_ABYTES)
109 SODIUM_EXPORT
110 size_t crypto_aead_chacha20poly1305_messagebytes_max(void);
111 
112 SODIUM_EXPORT
113 int crypto_aead_chacha20poly1305_encrypt(unsigned char *c,
114                                          unsigned long long *clen_p,
115                                          const unsigned char *m,
116                                          unsigned long long mlen,
117                                          const unsigned char *ad,
118                                          unsigned long long adlen,
119                                          const unsigned char *nsec,
120                                          const unsigned char *npub,
121                                          const unsigned char *k);
122 
123 SODIUM_EXPORT
124 int crypto_aead_chacha20poly1305_decrypt(unsigned char *m,
125                                          unsigned long long *mlen_p,
126                                          unsigned char *nsec,
127                                          const unsigned char *c,
128                                          unsigned long long clen,
129                                          const unsigned char *ad,
130                                          unsigned long long adlen,
131                                          const unsigned char *npub,
132                                          const unsigned char *k)
133             __attribute__ ((warn_unused_result));
134 
135 SODIUM_EXPORT
136 int crypto_aead_chacha20poly1305_encrypt_detached(unsigned char *c,
137                                                   unsigned char *mac,
138                                                   unsigned long long *maclen_p,
139                                                   const unsigned char *m,
140                                                   unsigned long long mlen,
141                                                   const unsigned char *ad,
142                                                   unsigned long long adlen,
143                                                   const unsigned char *nsec,
144                                                   const unsigned char *npub,
145                                                   const unsigned char *k);
146 
147 SODIUM_EXPORT
148 int crypto_aead_chacha20poly1305_decrypt_detached(unsigned char *m,
149                                                   unsigned char *nsec,
150                                                   const unsigned char *c,
151                                                   unsigned long long clen,
152                                                   const unsigned char *mac,
153                                                   const unsigned char *ad,
154                                                   unsigned long long adlen,
155                                                   const unsigned char *npub,
156                                                   const unsigned char *k)
157         __attribute__ ((warn_unused_result));
158 
159 SODIUM_EXPORT
160 void crypto_aead_chacha20poly1305_keygen(unsigned char k[crypto_aead_chacha20poly1305_KEYBYTES]);
161 
162 /* Aliases */
163 
164 #define crypto_aead_chacha20poly1305_IETF_KEYBYTES         crypto_aead_chacha20poly1305_ietf_KEYBYTES
165 #define crypto_aead_chacha20poly1305_IETF_NSECBYTES        crypto_aead_chacha20poly1305_ietf_NSECBYTES
166 #define crypto_aead_chacha20poly1305_IETF_NPUBBYTES        crypto_aead_chacha20poly1305_ietf_NPUBBYTES
167 #define crypto_aead_chacha20poly1305_IETF_ABYTES           crypto_aead_chacha20poly1305_ietf_ABYTES
168 #define crypto_aead_chacha20poly1305_IETF_MESSAGEBYTES_MAX crypto_aead_chacha20poly1305_ietf_MESSAGEBYTES_MAX
169 
170 #ifdef __cplusplus
171 }
172 #endif
173 
174 #endif
175