7#include <botan/sodium.h>
14int sodium_aead_chacha20poly1305_encrypt(uint8_t ctext[],
15 unsigned long long* ctext_len,
16 const uint8_t ptext[],
20 const uint8_t nonce[],
26 chacha20poly1305->set_key(key, 32);
27 chacha20poly1305->set_associated_data(ad, ad_len);
28 chacha20poly1305->start(nonce, nonce_len);
31 secure_vector<uint8_t> buf;
32 buf.reserve(ptext_len + 16);
33 buf.assign(ptext, ptext + ptext_len);
35 chacha20poly1305->finish(buf);
37 copy_mem(ctext, buf.data(), buf.size());
39 *ctext_len = buf.size();
43int sodium_aead_chacha20poly1305_decrypt(uint8_t ptext[],
44 unsigned long long* ptext_len,
45 const uint8_t ctext[],
49 const uint8_t nonce[],
60 chacha20poly1305->set_key(key, 32);
61 chacha20poly1305->set_associated_data(ad, ad_len);
62 chacha20poly1305->start(nonce, nonce_len);
65 secure_vector<uint8_t> buf;
66 buf.assign(ctext, ctext + ctext_len);
70 chacha20poly1305->finish(buf);
72 catch(Invalid_Authentication_Tag&)
77 *ptext_len = ctext_len - 16;
79 copy_mem(ptext, buf.data(), buf.size());
83int sodium_aead_chacha20poly1305_encrypt_detached(uint8_t ctext[],
85 const uint8_t ptext[],
89 const uint8_t nonce[],
95 chacha20poly1305->set_key(key, 32);
96 chacha20poly1305->set_associated_data(ad, ad_len);
97 chacha20poly1305->start(nonce, nonce_len);
100 secure_vector<uint8_t> buf;
101 buf.reserve(ptext_len + 16);
102 buf.assign(ptext, ptext + ptext_len);
104 chacha20poly1305->finish(buf);
106 copy_mem(ctext, buf.data(), ptext_len);
107 copy_mem(mac, buf.data() + ptext_len, 16);
111int sodium_aead_chacha20poly1305_decrypt_detached(uint8_t ptext[],
112 const uint8_t ctext[],
117 const uint8_t nonce[],
123 chacha20poly1305->set_key(key, 32);
124 chacha20poly1305->set_associated_data(ad, ad_len);
125 chacha20poly1305->start(nonce, nonce_len);
128 secure_vector<uint8_t> buf;
129 buf.reserve(ctext_len + 16);
130 buf.assign(ctext, ctext + ctext_len);
131 buf.insert(buf.end(), mac, mac + 16);
135 chacha20poly1305->finish(buf);
137 catch(Invalid_Authentication_Tag&)
142 copy_mem(ptext, buf.data(), buf.size());
149 unsigned long long* ctext_len,
150 const uint8_t ptext[],
154 const uint8_t unused_secret_nonce[],
155 const uint8_t nonce[],
160 return sodium_aead_chacha20poly1305_encrypt(
161 ctext, ctext_len, ptext, ptext_len,
166 unsigned long long* ptext_len,
167 uint8_t unused_secret_nonce[],
168 const uint8_t ctext[],
172 const uint8_t nonce[],
177 return sodium_aead_chacha20poly1305_decrypt(
178 ptext, ptext_len, ctext, ctext_len,
184 unsigned long long* mac_len,
185 const uint8_t ptext[],
189 const uint8_t unused_secret_nonce[],
190 const uint8_t nonce[],
198 return sodium_aead_chacha20poly1305_encrypt_detached(
199 ctext, mac, ptext, ptext_len,
204 uint8_t unused_secret_nonce[],
205 const uint8_t ctext[],
210 const uint8_t nonce[],
215 return sodium_aead_chacha20poly1305_decrypt_detached(
216 ptext, ctext, ctext_len, mac,
221 unsigned long long* ctext_len,
222 const uint8_t ptext[],
226 const uint8_t unused_secret_nonce[],
227 const uint8_t nonce[],
231 return sodium_aead_chacha20poly1305_encrypt(
232 ctext, ctext_len, ptext, ptext_len,
237 unsigned long long* ptext_len,
238 uint8_t unused_secret_nonce[],
239 const uint8_t ctext[],
243 const uint8_t nonce[],
247 return sodium_aead_chacha20poly1305_decrypt(
248 ptext, ptext_len, ctext, ctext_len,
254 unsigned long long* mac_len,
255 const uint8_t ptext[],
259 const uint8_t unused_secret_nonce[],
260 const uint8_t nonce[],
267 return sodium_aead_chacha20poly1305_encrypt_detached(
268 ctext, mac, ptext, ptext_len,
273 uint8_t unused_secret_nonce[],
274 const uint8_t ctext[],
279 const uint8_t nonce[],
284 return sodium_aead_chacha20poly1305_decrypt_detached(
285 ptext, ctext, ctext_len, mac,
290 unsigned long long* ctext_len,
291 const uint8_t ptext[],
295 const uint8_t unused_secret_nonce[],
296 const uint8_t nonce[],
301 return sodium_aead_chacha20poly1305_encrypt(
302 ctext, ctext_len, ptext, ptext_len,
307 unsigned long long* ptext_len,
308 uint8_t unused_secret_nonce[],
309 const uint8_t ctext[],
313 const uint8_t nonce[],
318 return sodium_aead_chacha20poly1305_decrypt(
319 ptext, ptext_len, ctext, ctext_len,
325 unsigned long long* mac_len,
326 const uint8_t ptext[],
330 const uint8_t unused_secret_nonce[],
331 const uint8_t nonce[],
338 return sodium_aead_chacha20poly1305_encrypt_detached(
339 ctext, mac, ptext, ptext_len,
344 uint8_t unused_secret_nonce[],
345 const uint8_t ctext[],
350 const uint8_t nonce[],
354 return sodium_aead_chacha20poly1305_decrypt_detached(
355 ptext, ctext, ctext_len, mac,
#define BOTAN_UNUSED(...)
static std::unique_ptr< AEAD_Mode > create_or_throw(const std::string &algo, Cipher_Dir direction, const std::string &provider="")
int crypto_aead_xchacha20poly1305_ietf_decrypt(uint8_t ptext[], unsigned long long *ptext_len, uint8_t unused_secret_nonce[], const uint8_t ctext[], size_t ctext_len, const uint8_t ad[], size_t ad_len, const uint8_t nonce[], const uint8_t key[])
int crypto_aead_chacha20poly1305_decrypt(uint8_t m[], unsigned long long *ptext_len, uint8_t unused_secret_nonce[], const uint8_t ctext[], size_t ctext_len, const uint8_t ad[], size_t ad_len, const uint8_t nonce[], const uint8_t key[])
int crypto_aead_chacha20poly1305_decrypt_detached(uint8_t m[], uint8_t unused_secret_nonce[], const uint8_t ctext[], size_t ctext_len, const uint8_t mac[], const uint8_t ad[], size_t ad_len, const uint8_t nonce[], const uint8_t key[])
int crypto_aead_chacha20poly1305_ietf_encrypt_detached(uint8_t ctext[], uint8_t mac[], unsigned long long *mac_len, const uint8_t ptext[], size_t ptext_len, const uint8_t ad[], size_t ad_len, const uint8_t unused_secret_nonce[], const uint8_t nonce[], const uint8_t key[])
size_t crypto_aead_chacha20poly1305_ietf_npubbytes()
int crypto_aead_chacha20poly1305_encrypt(uint8_t ctext[], unsigned long long *ctext_len, const uint8_t ptext[], size_t ptext_len, const uint8_t ad[], size_t ad_len, const uint8_t unused_secret_nonce[], const uint8_t nonce[], const uint8_t key[])
size_t crypto_aead_xchacha20poly1305_ietf_npubbytes()
int crypto_aead_chacha20poly1305_ietf_encrypt(uint8_t ctext[], unsigned long long *ctext_len, const uint8_t ptext[], size_t ptext_len, const uint8_t ad[], size_t ad_len, const uint8_t unused_secret_nonce[], const uint8_t nonce[], const uint8_t key[])
int crypto_aead_xchacha20poly1305_ietf_encrypt(uint8_t ctext[], unsigned long long *ctext_len, const uint8_t ptext[], size_t ptext_len, const uint8_t ad[], size_t ad_len, const uint8_t unused_secret_nonce[], const uint8_t nonce[], const uint8_t key[])
int crypto_aead_chacha20poly1305_ietf_decrypt(uint8_t ptext[], unsigned long long *ptext_len, uint8_t unused_secret_nonce[], const uint8_t ctext[], size_t ctext_len, const uint8_t ad[], size_t ad_len, const uint8_t nonce[], const uint8_t key[])
int crypto_aead_chacha20poly1305_encrypt_detached(uint8_t ctext[], uint8_t mac[], unsigned long long *mac_len, const uint8_t ptext[], size_t ptext_len, const uint8_t ad[], size_t ad_len, const uint8_t unused_secret_nonce[], const uint8_t nonce[], const uint8_t key[])
int crypto_aead_xchacha20poly1305_ietf_encrypt_detached(uint8_t ctext[], uint8_t mac[], unsigned long long *mac_len, const uint8_t ptext[], size_t ptext_len, const uint8_t ad[], size_t ad_len, const uint8_t unused_secret_nonce[], const uint8_t nonce[], const uint8_t key[])
size_t crypto_aead_chacha20poly1305_npubbytes()
int crypto_aead_chacha20poly1305_ietf_decrypt_detached(uint8_t m[], uint8_t unused_secret_nonce[], const uint8_t ctext[], size_t ctext_len, const uint8_t mac[], const uint8_t ad[], size_t ad_len, const uint8_t nonce[], const uint8_t key[])
int crypto_aead_xchacha20poly1305_ietf_decrypt_detached(uint8_t ptext[], uint8_t unused_secret_nonce[], const uint8_t ctext[], size_t ctext_len, const uint8_t mac[], const uint8_t ad[], size_t ad_len, const uint8_t nonce[], const uint8_t key[])
void copy_mem(T *out, const T *in, size_t n)