decaf377/ark_curve/
serialize.rs1use 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}