pub trait AEADCipher<const KEY_LEN: usize, const NONCE_LEN: usize, const TAG_LEN: usize>: SymmetricCipher<KEY_LEN, NONCE_LEN> + Sized {
// Required methods
fn aead_encrypt(
key: &KeyMaterial<KEY_LEN>,
aad: &[u8],
plaintext: &[u8],
) -> Result<([u8; NONCE_LEN], Vec<u8>, [u8; TAG_LEN]), SymmetricCipherError>;
fn aead_encrypt_out(
key: &KeyMaterial<KEY_LEN>,
aad: &[u8],
plaintext: &[u8],
ciphertext: &mut [u8],
) -> Result<([u8; NONCE_LEN], usize, [u8; TAG_LEN]), SymmetricCipherError>;
fn do_aead_encrypt_final(
self,
) -> Result<[u8; TAG_LEN], SymmetricCipherError>;
fn aead_decrypt(
key: &KeyMaterial<KEY_LEN>,
nonce: &[u8; NONCE_LEN],
aad: &[u8],
ciphertext: &[u8],
tag: &[u8; TAG_LEN],
) -> Result<Vec<u8>, SymmetricCipherError>;
fn aead_decrypt_out(
key: &KeyMaterial<KEY_LEN>,
nonce: &[u8; NONCE_LEN],
aad: &[u8],
ciphertext: &[u8],
tag: &[u8; TAG_LEN],
plaintext: &mut [u8],
) -> Result<usize, SymmetricCipherError>;
fn do_aead_decrypt_final(
self,
tag: &[u8; TAG_LEN],
) -> Result<(), SymmetricCipherError>;
}Expand description
The basic functions of an Authenticated Encryption with Addititional Data cipher.
Required Methods§
Sourcefn aead_encrypt(
key: &KeyMaterial<KEY_LEN>,
aad: &[u8],
plaintext: &[u8],
) -> Result<([u8; NONCE_LEN], Vec<u8>, [u8; TAG_LEN]), SymmetricCipherError>
fn aead_encrypt( key: &KeyMaterial<KEY_LEN>, aad: &[u8], plaintext: &[u8], ) -> Result<([u8; NONCE_LEN], Vec<u8>, [u8; TAG_LEN]), SymmetricCipherError>
A one-shot API to encrypt some plaintext with the given key.
A distinguishing feature of AEAD ciphers is the ability to provide additional authenticated data (AAD)
that is not encrypted but is protected by the authentication tag; ie it can be sent along with the ciphertext
and any tampering with it will result in the decryption operation failing the tag check.
This function returns the ciphertext as a Vec<u8>, and therefore is only available when compiling with std.
Returns a tuple containing a generated nonce, the ciphertext and the tag.
Sourcefn aead_encrypt_out(
key: &KeyMaterial<KEY_LEN>,
aad: &[u8],
plaintext: &[u8],
ciphertext: &mut [u8],
) -> Result<([u8; NONCE_LEN], usize, [u8; TAG_LEN]), SymmetricCipherError>
fn aead_encrypt_out( key: &KeyMaterial<KEY_LEN>, aad: &[u8], plaintext: &[u8], ciphertext: &mut [u8], ) -> Result<([u8; NONCE_LEN], usize, [u8; TAG_LEN]), SymmetricCipherError>
A one-shot API to encrypt some plaintext with the given key.
A distinguishing feature of AEAD ciphers is the ability to provide additional authenticated data (AAD)
that is not encrypted but is protected by the authentication tag; ie it can be sent along with the ciphertext
and any tampering with it will result in the decryption operation failing the tag check.
Returns a tuple containing the randomly-generated nonce, number of bytes written to the ciphertext buffer, and the tag.
If you need a deterministic mode where you feed in the nonce, use the streaming API of BlockCipher
or StreamCipher as appropriate and feed the nonce into the IV field.
Sourcefn do_aead_encrypt_final(self) -> Result<[u8; TAG_LEN], SymmetricCipherError>
fn do_aead_encrypt_final(self) -> Result<[u8; TAG_LEN], SymmetricCipherError>
All AEAD ciphers will also be either a BlockCipher or a StreamCipher, and so will already
have a streaming API.
This allows you to finish either style of streaming API flow with AEAD specific do_final()
that computes and returns the authentication tag.
Sourcefn aead_decrypt(
key: &KeyMaterial<KEY_LEN>,
nonce: &[u8; NONCE_LEN],
aad: &[u8],
ciphertext: &[u8],
tag: &[u8; TAG_LEN],
) -> Result<Vec<u8>, SymmetricCipherError>
fn aead_decrypt( key: &KeyMaterial<KEY_LEN>, nonce: &[u8; NONCE_LEN], aad: &[u8], ciphertext: &[u8], tag: &[u8; TAG_LEN], ) -> Result<Vec<u8>, SymmetricCipherError>
A one-shot API to decrypt some ciphertext with the given key.
This function returns the ciphertext as a Vec<u8>, and therefore is only available when compiling with std.
Sourcefn aead_decrypt_out(
key: &KeyMaterial<KEY_LEN>,
nonce: &[u8; NONCE_LEN],
aad: &[u8],
ciphertext: &[u8],
tag: &[u8; TAG_LEN],
plaintext: &mut [u8],
) -> Result<usize, SymmetricCipherError>
fn aead_decrypt_out( key: &KeyMaterial<KEY_LEN>, nonce: &[u8; NONCE_LEN], aad: &[u8], ciphertext: &[u8], tag: &[u8; TAG_LEN], plaintext: &mut [u8], ) -> Result<usize, SymmetricCipherError>
A one-shot API to decrypt some ciphertext with the given key. This function takes a reference to the output buffer for the plaintext, and is therefore available in no_std. See the documentation for the underlying implementation for details on providing a plaintext buffer of sufficient size; typically the ciphertext is the same length as the plaintext, but some ciphers may have an expansion factor or require extra space for a nonce or tag. Returns the number of bytes written to the plaintext buffer.
Sourcefn do_aead_decrypt_final(
self,
tag: &[u8; TAG_LEN],
) -> Result<(), SymmetricCipherError>
fn do_aead_decrypt_final( self, tag: &[u8; TAG_LEN], ) -> Result<(), SymmetricCipherError>
All AEAD ciphers will also be either a BlockCipher or a StreamCipher, and so will already
have a streaming API.
This allows you to finish either style of streaming API flow with AEAD specific do_final()
that computes and returns the authentication tag.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".