cardano_serialization_lib/serialization/crypto/
kes_signature.rs

1use 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}