#[cfg(not(feature = "fuzztarget"))]
mod real_chachapoly {
- use crypto::aead::{AeadEncryptor,AeadDecryptor};
- use crypto::symmetriccipher::SynchronousStreamCipher;
- use crypto::poly1305::Poly1305;
- use crypto::mac::Mac;
- use crypto::util::fixed_time_eq;
-
- pub use crypto::chacha20::ChaCha20;
+ use util::chacha20::ChaCha20;
+ use util::poly1305::Poly1305;
+ use bitcoin_hashes::cmp::fixed_time_eq;
use util::byte_utils;
#[derive(Clone, Copy)]
pub struct ChaCha20Poly1305RFC {
- cipher : ChaCha20,
+ cipher: ChaCha20,
mac: Poly1305,
finished: bool,
data_len: usize,
aad_len: aad.len() as u64,
}
}
- }
- impl AeadEncryptor for ChaCha20Poly1305RFC {
- fn encrypt(&mut self, input: &[u8], output: &mut [u8], out_tag: &mut [u8]) {
+ pub fn encrypt(&mut self, input: &[u8], output: &mut [u8], out_tag: &mut [u8]) {
assert!(input.len() == output.len());
assert!(self.finished == false);
self.cipher.process(input, output);
self.mac.input(&byte_utils::le64_to_array(self.data_len as u64));
self.mac.raw_result(out_tag);
}
- }
- impl AeadDecryptor for ChaCha20Poly1305RFC {
- fn decrypt(&mut self, input: &[u8], output: &mut [u8], tag: &[u8]) -> bool {
+ pub fn decrypt(&mut self, input: &[u8], output: &mut [u8], tag: &[u8]) -> bool {
assert!(input.len() == output.len());
assert!(self.finished == false);
}
}
#[cfg(not(feature = "fuzztarget"))]
-pub use self::real_chachapoly::{ChaCha20Poly1305RFC, ChaCha20};
+pub use self::real_chachapoly::ChaCha20Poly1305RFC;
#[cfg(feature = "fuzztarget")]
mod fuzzy_chachapoly {
- use crypto::aead::{AeadEncryptor,AeadDecryptor};
- use crypto::symmetriccipher::SynchronousStreamCipher;
-
#[derive(Clone, Copy)]
pub struct ChaCha20Poly1305RFC {
tag: [u8; 16],
finished: false,
}
}
- }
- impl AeadEncryptor for ChaCha20Poly1305RFC {
- fn encrypt(&mut self, input: &[u8], output: &mut [u8], out_tag: &mut [u8]) {
+ pub fn encrypt(&mut self, input: &[u8], output: &mut [u8], out_tag: &mut [u8]) {
assert!(input.len() == output.len());
assert!(self.finished == false);
out_tag.copy_from_slice(&self.tag);
self.finished = true;
}
- }
- impl AeadDecryptor for ChaCha20Poly1305RFC {
- fn decrypt(&mut self, input: &[u8], output: &mut [u8], tag: &[u8]) -> bool {
+ pub fn decrypt(&mut self, input: &[u8], output: &mut [u8], tag: &[u8]) -> bool {
assert!(input.len() == output.len());
assert!(self.finished == false);
true
}
}
-
- pub struct ChaCha20 {}
-
- impl ChaCha20 {
- pub fn new(key: &[u8], nonce: &[u8]) -> ChaCha20 {
- assert!(key.len() == 16 || key.len() == 32);
- assert!(nonce.len() == 8 || nonce.len() == 12);
- Self {}
- }
- }
-
- impl SynchronousStreamCipher for ChaCha20 {
- fn process(&mut self, input: &[u8], output: &mut [u8]) {
- output.copy_from_slice(input);
- }
- }
}
#[cfg(feature = "fuzztarget")]
-pub use self::fuzzy_chachapoly::{ChaCha20Poly1305RFC, ChaCha20};
+pub use self::fuzzy_chachapoly::ChaCha20Poly1305RFC;