decaf377/ark_curve/
serialize.rs

1use core::convert::TryInto;
2
3use ark_serialize::{CanonicalDeserialize, CanonicalSerialize};
4use ark_std::io::{Read, Write};
5
6use crate::ark_curve::{AffinePoint, Element, Encoding};
7
8impl CanonicalDeserialize for AffinePoint {
9    fn deserialize_with_mode<R: Read>(
10        reader: R,
11        compress: ark_serialize::Compress,
12        validate: ark_serialize::Validate,
13    ) -> Result<Self, ark_serialize::SerializationError> {
14        match compress {
15            ark_serialize::Compress::Yes => (),
16            ark_serialize::Compress::No => unimplemented!(),
17        };
18        match validate {
19            ark_serialize::Validate::Yes => (),
20            ark_serialize::Validate::No => unimplemented!(),
21        }
22        let bytes = Encoding::deserialize_compressed(reader)?;
23        let element: Element = bytes
24            .try_into()
25            .map_err(|_| ark_serialize::SerializationError::InvalidData)?;
26        Ok(element.into())
27    }
28}
29
30impl CanonicalSerialize for AffinePoint {
31    fn serialized_size(&self, compress: ark_serialize::Compress) -> usize {
32        match compress {
33            ark_serialize::Compress::Yes => 32,
34            ark_serialize::Compress::No => unimplemented!(),
35        }
36    }
37
38    fn serialize_with_mode<W: Write>(
39        &self,
40        writer: W,
41        mode: ark_serialize::Compress,
42    ) -> Result<(), ark_serialize::SerializationError> {
43        let element: Element = self.into();
44        element.vartime_compress().serialize_with_mode(writer, mode)
45    }
46}