7#include <botan/sodium.h>
8#include <botan/secmem.h>
9#include <botan/stream_cipher.h>
15 const uint8_t ptext[],
17 const uint8_t nonce[],
28 salsa->write_keystream(auth_key.data(), auth_key.size());
30 salsa->cipher(ptext + 32, ctext + 32, ptext_len - 32);
33 poly1305->set_key(auth_key);
34 poly1305->update(ctext + 32, ptext_len - 32);
35 poly1305->final(ctext + 16);
42 const uint8_t ctext[],
44 const uint8_t nonce[],
57 salsa->write_keystream(auth_key.data(), auth_key.size());
60 poly1305->set_key(auth_key);
61 poly1305->update(ctext + 32, ctext_len - 32);
67 salsa->cipher(ctext + 32, ptext + 32, ctext_len - 32);
74 const uint8_t ptext[],
76 const uint8_t nonce[],
84 salsa->write_keystream(auth_key.data(), auth_key.size());
86 salsa->cipher(ptext, ctext, ptext_len);
89 poly1305->set_key(auth_key);
90 poly1305->update(ctext, ptext_len);
97 const uint8_t ctext[],
100 const uint8_t nonce[],
108 salsa->write_keystream(auth_key.data(), auth_key.size());
111 poly1305->set_key(auth_key);
112 poly1305->update(ctext, ctext_len);
118 salsa->cipher(ctext, ptext, ctext_len);
static std::unique_ptr< MessageAuthenticationCode > create_or_throw(const std::string &algo_spec, const std::string &provider="")
static std::unique_ptr< StreamCipher > create_or_throw(const std::string &algo_spec, const std::string &provider="")
@ crypto_secretbox_KEYBYTES
@ crypto_box_curve25519xsalsa20poly1305_ZEROBYTES
@ crypto_secretbox_NONCEBYTES
int crypto_secretbox_xsalsa20poly1305_open(uint8_t ptext[], const uint8_t ctext[], size_t ctext_len, const uint8_t nonce[], const uint8_t key[])
int crypto_secretbox_open_detached(uint8_t ptext[], const uint8_t ctext[], const uint8_t mac[], size_t ctext_len, const uint8_t nonce[], const uint8_t key[])
int crypto_secretbox_xsalsa20poly1305(uint8_t ctext[], const uint8_t ptext[], size_t ptext_len, const uint8_t nonce[], const uint8_t key[])
int crypto_secretbox_detached(uint8_t ctext[], uint8_t mac[], const uint8_t ptext[], size_t ptext_len, const uint8_t nonce[], const uint8_t key[])
bool constant_time_compare(const uint8_t x[], const uint8_t y[], size_t len)
std::vector< T, secure_allocator< T > > secure_vector
void clear_mem(T *ptr, size_t n)