summaryrefslogtreecommitdiffstats
path: root/openpgp/src/crypto/backend/cng/aead.rs
diff options
context:
space:
mode:
Diffstat (limited to 'openpgp/src/crypto/backend/cng/aead.rs')
-rw-r--r--openpgp/src/crypto/backend/cng/aead.rs11
1 files changed, 9 insertions, 2 deletions
diff --git a/openpgp/src/crypto/backend/cng/aead.rs b/openpgp/src/crypto/backend/cng/aead.rs
index c714efbb..a3aaefb4 100644
--- a/openpgp/src/crypto/backend/cng/aead.rs
+++ b/openpgp/src/crypto/backend/cng/aead.rs
@@ -127,7 +127,7 @@ macro_rules! impl_aead {
dst[src.len()..].copy_from_slice(&tag[..]);
Ok(())
}
- fn decrypt_verify(&mut self, _dst: &mut [u8], _src: &[u8], _digest: &[u8]) -> Result<()> {
+ fn decrypt_verify(&mut self, _dst: &mut [u8], _src: &[u8]) -> Result<()> {
panic!("AEAD decryption called in the encryption context")
}
}
@@ -141,7 +141,14 @@ macro_rules! impl_aead {
fn encrypt_seal(&mut self, _dst: &mut [u8], _src: &[u8]) -> Result<()> {
panic!("AEAD encryption called in the decryption context")
}
- fn decrypt_verify(&mut self, dst: &mut [u8], src: &[u8], digest: &[u8]) -> Result<()> {
+ fn decrypt_verify(&mut self, dst: &mut [u8], src: &[u8]) -> Result<()> {
+ debug_assert_eq!(dst.len() + self.digest_size(), src.len());
+
+ // Split src into ciphertext and digest.
+ let l = self.digest_size();
+ let digest = &src[src.len().saturating_sub(l)..];
+ let src = &src[..src.len().saturating_sub(l)];
+
let len = core::cmp::min(dst.len(), src.len());
dst[..len].copy_from_slice(&src[..len]);
self.decrypt_unauthenticated_hazmat(&mut dst[..len]);