Skip to content

Commit aa27673

Browse files
authored
Add serialization for labeled polys (#65)
* add serialization for labeled poly * no std
1 parent d64d18b commit aa27673

File tree

1 file changed

+94
-0
lines changed

1 file changed

+94
-0
lines changed

src/data_structures.rs

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ use ark_std::{
66
io::{Read, Write},
77
marker::PhantomData,
88
ops::{AddAssign, MulAssign, SubAssign},
9+
string::ToString,
910
};
1011
use rand_core::RngCore;
1112

@@ -123,6 +124,99 @@ pub struct LabeledPolynomial<F: Field, P: Polynomial<F>> {
123124
_field: PhantomData<F>,
124125
}
125126

127+
impl<F: Field, P: Polynomial<F>> CanonicalSerialize for LabeledPolynomial<F, P> {
128+
fn serialize<W: Write>(&self, mut writer: W) -> Result<(), SerializationError> {
129+
self.label.clone().into_bytes().serialize(&mut writer)?;
130+
self.polynomial.serialize(&mut writer)?;
131+
self.degree_bound.serialize(&mut writer)?;
132+
self.hiding_bound.serialize(&mut writer)
133+
}
134+
135+
fn serialized_size(&self) -> usize {
136+
self.label.clone().into_bytes().serialized_size()
137+
+ self.polynomial.serialized_size()
138+
+ self.degree_bound.serialized_size()
139+
+ self.hiding_bound.serialized_size()
140+
}
141+
142+
fn serialize_uncompressed<W: Write>(&self, mut writer: W) -> Result<(), SerializationError> {
143+
self.label
144+
.clone()
145+
.into_bytes()
146+
.serialize_uncompressed(&mut writer)?;
147+
self.polynomial.serialize_uncompressed(&mut writer)?;
148+
self.degree_bound.serialize_uncompressed(&mut writer)?;
149+
self.hiding_bound.serialize_uncompressed(&mut writer)
150+
}
151+
152+
fn serialize_unchecked<W: Write>(&self, mut writer: W) -> Result<(), SerializationError> {
153+
self.label
154+
.clone()
155+
.into_bytes()
156+
.serialize_unchecked(&mut writer)?;
157+
self.polynomial.serialize_unchecked(&mut writer)?;
158+
self.degree_bound.serialize_unchecked(&mut writer)?;
159+
self.hiding_bound.serialize_unchecked(&mut writer)
160+
}
161+
162+
fn uncompressed_size(&self) -> usize {
163+
self.label.clone().into_bytes().uncompressed_size()
164+
+ self.polynomial.uncompressed_size()
165+
+ self.degree_bound.uncompressed_size()
166+
+ self.hiding_bound.uncompressed_size()
167+
}
168+
}
169+
170+
impl<F: Field, P: Polynomial<F>> CanonicalDeserialize for LabeledPolynomial<F, P> {
171+
fn deserialize<R: Read>(mut reader: R) -> Result<Self, SerializationError> {
172+
let label_bytes = Vec::<u8>::deserialize(&mut reader)?;
173+
let label = String::from_utf8_lossy(&label_bytes);
174+
let polynomial = Rc::new(P::deserialize(&mut reader)?);
175+
let degree_bound = Option::<usize>::deserialize(&mut reader)?;
176+
let hiding_bound = Option::<usize>::deserialize(&mut reader)?;
177+
178+
Ok(Self {
179+
label: label.to_string(),
180+
polynomial,
181+
degree_bound,
182+
hiding_bound,
183+
_field: PhantomData,
184+
})
185+
}
186+
187+
fn deserialize_uncompressed<R: Read>(mut reader: R) -> Result<Self, SerializationError> {
188+
let label_bytes = Vec::<u8>::deserialize_uncompressed(&mut reader)?;
189+
let label = String::from_utf8_lossy(&label_bytes);
190+
let polynomial = Rc::new(P::deserialize_uncompressed(&mut reader)?);
191+
let degree_bound = Option::<usize>::deserialize_uncompressed(&mut reader)?;
192+
let hiding_bound = Option::<usize>::deserialize_uncompressed(&mut reader)?;
193+
194+
Ok(Self {
195+
label: label.to_string(),
196+
polynomial,
197+
degree_bound,
198+
hiding_bound,
199+
_field: PhantomData,
200+
})
201+
}
202+
203+
fn deserialize_unchecked<R: Read>(mut reader: R) -> Result<Self, SerializationError> {
204+
let label_bytes = Vec::<u8>::deserialize_unchecked(&mut reader)?;
205+
let label = String::from_utf8_lossy(&label_bytes);
206+
let polynomial = Rc::new(P::deserialize_unchecked(&mut reader)?);
207+
let degree_bound = Option::<usize>::deserialize_unchecked(&mut reader)?;
208+
let hiding_bound = Option::<usize>::deserialize_unchecked(&mut reader)?;
209+
210+
Ok(Self {
211+
label: label.to_string(),
212+
polynomial,
213+
degree_bound,
214+
hiding_bound,
215+
_field: PhantomData,
216+
})
217+
}
218+
}
219+
126220
impl<'a, F: Field, P: Polynomial<F>> core::ops::Deref for LabeledPolynomial<F, P> {
127221
type Target = P;
128222

0 commit comments

Comments
 (0)