From ae22cd16989c74b978597c5bca5de4cc3f653e23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9ophile=20BR=C3=89ZOT?= Date: Wed, 15 Oct 2025 16:17:56 +0200 Subject: [PATCH 1/3] implement `Serializable` for `SymmetricKey` --- src/key.rs | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/key.rs b/src/key.rs index 58c2c6e..717fc39 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,10 +101,30 @@ 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 { - use crate::{reexport::rand_core::SeedableRng, CsRng, RandomFixedSizeCBytes, SymmetricKey}; + use crate::{ + bytes_ser_de::test_serialization, reexport::rand_core::SeedableRng, CsRng, + RandomFixedSizeCBytes, SymmetricKey, + }; const KEY_LENGTH: usize = 32; @@ -114,5 +136,6 @@ mod tests { let key_2 = SymmetricKey::new(&mut cs_rng); assert_eq!(KEY_LENGTH, key_2.len()); assert_ne!(key_1, key_2); + test_serialization(&key_1).unwrap(); } } From 333a9c8c0ed36957008b60112314c5253ceb8d2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9ophile=20BR=C3=89ZOT?= Date: Wed, 15 Oct 2025 16:23:56 +0200 Subject: [PATCH 2/3] fix tests --- src/key.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/key.rs b/src/key.rs index 717fc39..476c333 100644 --- a/src/key.rs +++ b/src/key.rs @@ -121,10 +121,9 @@ impl Serializable for SymmetricKey { #[cfg(test)] mod tests { - use crate::{ - bytes_ser_de::test_serialization, reexport::rand_core::SeedableRng, CsRng, - RandomFixedSizeCBytes, SymmetricKey, - }; + #[cfg(feature = "ser")] + use crate::bytes_ser_de::test_serialization; + use crate::{reexport::rand_core::SeedableRng, CsRng, RandomFixedSizeCBytes, SymmetricKey}; const KEY_LENGTH: usize = 32; @@ -136,6 +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(); } } From 2f74cfe19613cecb7d28bcee82e2c2f9347bd013 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9ophile=20BR=C3=89ZOT?= Date: Thu, 16 Oct 2025 09:24:53 +0000 Subject: [PATCH 3/3] implement `Serializable` for `[u8; LENGTH]` (#112) --- src/bytes_ser_de.rs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) 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,