libsodium (1.0.19)
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