diff --git a/src/bytes_ser_de.rs b/src/bytes_ser_de.rs index 7cf9655..796a3da 100644 --- a/src/bytes_ser_de.rs +++ b/src/bytes_ser_de.rs @@ -437,6 +437,22 @@ where } } +impl Serializable for [u8; LENGTH] { + type Error = CryptoCoreError; + + fn length(&self) -> usize { + LENGTH + } + + fn write(&self, ser: &mut Serializer) -> Result { + ser.write_array(self) + } + + fn read(de: &mut Deserializer) -> Result { + de.read_array::() + } +} + impl Serializable for [T; LENGTH] where T::Error: From, diff --git a/src/key.rs b/src/key.rs index 58c2c6e..476c333 100644 --- a/src/key.rs +++ b/src/key.rs @@ -5,6 +5,8 @@ use std::ops::DerefMut; use zeroize::{Zeroize, ZeroizeOnDrop, Zeroizing}; +#[cfg(feature = "ser")] +use crate::bytes_ser_de::Serializable; #[cfg(feature = "sha3")] use crate::kdf256; use crate::{ @@ -99,9 +101,28 @@ impl SymmetricKey { } } +#[cfg(feature = "ser")] +impl Serializable for SymmetricKey { + type Error = CryptoCoreError; + + fn length(&self) -> usize { + self.0.length() + } + + fn write(&self, ser: &mut crate::bytes_ser_de::Serializer) -> Result { + self.0.write(ser) + } + + fn read(de: &mut crate::bytes_ser_de::Deserializer) -> Result { + de.read().map(Self) + } +} + #[cfg(test)] mod tests { + #[cfg(feature = "ser")] + use crate::bytes_ser_de::test_serialization; use crate::{reexport::rand_core::SeedableRng, CsRng, RandomFixedSizeCBytes, SymmetricKey}; const KEY_LENGTH: usize = 32; @@ -114,5 +135,7 @@ mod tests { let key_2 = SymmetricKey::new(&mut cs_rng); assert_eq!(KEY_LENGTH, key_2.len()); assert_ne!(key_1, key_2); + #[cfg(feature = "ser")] + test_serialization(&key_1).unwrap(); } }