cardano_serialization_lib/serialization/crypto/
kes_signature.rs1use cbor_event::de::Deserializer;
2use cbor_event::se::Serializer;
3use crate::{DeserializeError, DeserializeFailure, KESSignature};
4use crate::protocol_types::Deserialize;
5
6impl cbor_event::se::Serialize for KESSignature {
7 fn serialize<'se, W: std::io::Write>(
8 &self,
9 serializer: &'se mut Serializer<W>,
10 ) -> cbor_event::Result<&'se mut Serializer<W>> {
11 serializer.write_bytes(&self.0)
12 }
13}
14
15impl Deserialize for KESSignature {
16 fn deserialize<R: std::io::BufRead>(
17 raw: &mut Deserializer<R>,
18 ) -> Result<Self, DeserializeError> {
19 (|| -> Result<Self, DeserializeError> {
20 let bytes = raw.bytes()?;
21 if bytes.len() != Self::BYTE_COUNT {
22 return Err(DeserializeFailure::CBOR(cbor_event::Error::WrongLen(
23 Self::BYTE_COUNT as u64,
24 cbor_event::Len::Len(bytes.len() as u64),
25 "hash length",
26 ))
27 .into());
28 }
29 Ok(KESSignature(bytes))
30 })()
31 .map_err(|e| e.annotate("KESSignature"))
32 }
33}