Files
wolfssl/doc/dox_comments/header_files/chacha20_poly1305.h

121 lines
4.5 KiB
C
Raw Normal View History

/*!
\ingroup ChaCha20Poly1305
2018-06-27 16:22:12 -06:00
\brief This function encrypts an input message, inPlaintext, using the
ChaCha20 stream cipher, into the output buffer, outCiphertext. It
also performs Poly-1305 authentication (on the cipher text), and
stores the generated authentication tag in the output buffer, outAuthTag.
2018-06-27 16:22:12 -06:00
\return 0 Returned upon successfully encrypting the message
2018-06-27 16:22:12 -06:00
\return BAD_FUNC_ARG returned if there is an error during the encryption
process
2018-06-27 16:22:12 -06:00
\param inKey pointer to a buffer containing the 32 byte key to use
for encryption
2018-06-27 16:22:12 -06:00
\param inIv pointer to a buffer containing the 12 byte iv to use for
encryption
2018-06-27 16:22:12 -06:00
\param inAAD pointer to the buffer containing arbitrary length additional
authenticated data (AAD)
\param inAADLen length of the input AAD
2018-06-27 16:22:12 -06:00
\param inPlaintext pointer to the buffer containing the plaintext to
encrypt
\param inPlaintextLen the length of the plain text to encrypt
\param outCiphertext pointer to the buffer in which to store the ciphertext
2018-06-27 16:22:12 -06:00
\param outAuthTag pointer to a 16 byte wide buffer in which to store the
authentication tag
2018-06-27 16:22:12 -06:00
_Example_
\code
byte key[] = { // initialize 32 byte key };
byte iv[] = { // initialize 12 byte key };
byte inAAD[] = { // initialize AAD };
byte plain[] = { // initialize message to encrypt };
byte cipher[sizeof(plain)];
byte authTag[16];
int ret = wc_ChaCha20Poly1305_Encrypt(key, iv, inAAD, sizeof(inAAD),
plain, sizeof(plain), cipher, authTag);
if(ret != 0) {
// error running encrypt
}
\endcode
2018-06-27 16:22:12 -06:00
\sa wc_ChaCha20Poly1305_Decrypt
\sa wc_ChaCha_*
\sa wc_Poly1305*
*/
int wc_ChaCha20Poly1305_Encrypt(
const byte inKey[CHACHA20_POLY1305_AEAD_KEYSIZE],
const byte inIV[CHACHA20_POLY1305_AEAD_IV_SIZE],
const byte* inAAD, const word32 inAADLen,
const byte* inPlaintext, const word32 inPlaintextLen,
byte* outCiphertext,
byte outAuthTag[CHACHA20_POLY1305_AEAD_AUTHTAG_SIZE]);
/*!
2018-06-27 16:22:12 -06:00
\ingroup ChaCha20Poly1305
\brief This function decrypts input ciphertext, inCiphertext, using the
ChaCha20 stream cipher, into the output buffer, outPlaintext. It also
performs Poly-1305 authentication, comparing the given inAuthTag to an
authentication generated with the inAAD (arbitrary length additional
authentication data). Note: If the generated authentication tag does
not match the supplied authentication tag, the text is not decrypted.
2018-06-27 16:22:12 -06:00
\return 0 Returned upon successfully decrypting the message
2018-06-27 16:22:12 -06:00
\return BAD_FUNC_ARG Returned if any of the function arguments do not
match what is expected
2018-06-27 16:22:12 -06:00
\return MAC_CMP_FAILED_E Returned if the generated authentication tag
does not match the supplied inAuthTag.
2018-06-27 16:22:12 -06:00
\param inKey pointer to a buffer containing the 32 byte key to use for
decryption
2018-06-27 16:22:12 -06:00
\param inIv pointer to a buffer containing the 12 byte iv to use for
decryption
2018-06-27 16:22:12 -06:00
\param inAAD pointer to the buffer containing arbitrary length additional
authenticated data (AAD)
\param inAADLen length of the input AAD
2018-06-27 16:22:12 -06:00
\param inCiphertext pointer to the buffer containing the ciphertext to
decrypt
\param outCiphertextLen the length of the ciphertext to decrypt
2018-06-27 16:22:12 -06:00
\param inAuthTag pointer to the buffer containing the 16 byte digest
for authentication
\param outPlaintext pointer to the buffer in which to store the plaintext
_Example_
\code
byte key[] = { // initialize 32 byte key };
byte iv[] = { // initialize 12 byte key };
byte inAAD[] = { // initialize AAD };
byte cipher[] = { // initialize with received ciphertext };
byte authTag[16] = { // initialize with received authentication tag };
byte plain[sizeof(cipher)];
int ret = wc_ChaCha20Poly1305_Decrypt(key, iv, inAAD, sizeof(inAAD),
cipher, sizeof(cipher), plain, authTag);
if(ret == MAC_CMP_FAILED_E) {
// error during authentication
} else if( ret != 0) {
// error with function arguments
}
\endcode
2018-06-27 16:22:12 -06:00
\sa wc_ChaCha20Poly1305_Encrypt
\sa wc_ChaCha_*
\sa wc_Poly1305*
*/
int wc_ChaCha20Poly1305_Decrypt(
const byte inKey[CHACHA20_POLY1305_AEAD_KEYSIZE],
const byte inIV[CHACHA20_POLY1305_AEAD_IV_SIZE],
const byte* inAAD, const word32 inAADLen,
const byte* inCiphertext, const word32 inCiphertextLen,
const byte inAuthTag[CHACHA20_POLY1305_AEAD_AUTHTAG_SIZE],
byte* outPlaintext);