|
|
@@ -369,14 +369,17 @@ impl CodeGen {
|
|
|
let sent_instance_code = {
|
|
|
let chunks = self.sent_instance.fields.iter().map(|sf| match sf {
|
|
|
StructField::Point(id) => quote! {
|
|
|
- #proof_var.extend(sigma_proofs::serialization::serialize_elements(
|
|
|
- std::slice::from_ref(&#codegen_instance_var.#id)
|
|
|
- ));
|
|
|
+ #proof_var.extend_from_slice(
|
|
|
+ <Point as group::GroupEncoding>::to_bytes(&#codegen_instance_var.#id)
|
|
|
+ .as_ref()
|
|
|
+ );
|
|
|
},
|
|
|
StructField::VecPoint(id) => quote! {
|
|
|
- #proof_var.extend(sigma_proofs::serialization::serialize_elements(
|
|
|
- &#codegen_instance_var.#id
|
|
|
- ));
|
|
|
+ for point in &#codegen_instance_var.#id {
|
|
|
+ #proof_var.extend_from_slice(
|
|
|
+ <Point as group::GroupEncoding>::to_bytes(point).as_ref()
|
|
|
+ );
|
|
|
+ }
|
|
|
},
|
|
|
_ => quote! {},
|
|
|
});
|
|
|
@@ -462,18 +465,43 @@ impl CodeGen {
|
|
|
|
|
|
let chunks = self.sent_instance.fields.iter().map(|sf| match sf {
|
|
|
StructField::Point(id) => quote! {
|
|
|
- let #id: Point = sigma_proofs::serialization::deserialize_elements(
|
|
|
- &#proof_var[#offset_var..],
|
|
|
- 1,
|
|
|
- ).ok_or(SigmaError::VerificationFailure)?[0];
|
|
|
- #offset_var += #element_len_var;
|
|
|
+ let #id: Point = {
|
|
|
+ let end = #offset_var + #element_len_var;
|
|
|
+ if #proof_var.len() < end {
|
|
|
+ return Err(SigmaError::VerificationFailure);
|
|
|
+ }
|
|
|
+ let mut repr = <Point as group::GroupEncoding>::Repr::default();
|
|
|
+ repr.as_mut()
|
|
|
+ .copy_from_slice(&#proof_var[#offset_var..end]);
|
|
|
+ #offset_var = end;
|
|
|
+ Option::<Point>::from(
|
|
|
+ <Point as group::GroupEncoding>::from_bytes(&repr)
|
|
|
+ )
|
|
|
+ .ok_or(SigmaError::VerificationFailure)?
|
|
|
+ };
|
|
|
},
|
|
|
StructField::VecPoint(id) => quote! {
|
|
|
- #id = sigma_proofs::serialization::deserialize_elements(
|
|
|
- &#proof_var[#offset_var..],
|
|
|
- #id.len(),
|
|
|
- ).ok_or(SigmaError::VerificationFailure)?;
|
|
|
- #offset_var += #element_len_var * #id.len();
|
|
|
+ {
|
|
|
+ let expected_len = #id.len();
|
|
|
+ let mut points = Vec::with_capacity(expected_len);
|
|
|
+ for _ in 0..expected_len {
|
|
|
+ let end = #offset_var + #element_len_var;
|
|
|
+ if #proof_var.len() < end {
|
|
|
+ return Err(SigmaError::VerificationFailure);
|
|
|
+ }
|
|
|
+ let mut repr =
|
|
|
+ <Point as group::GroupEncoding>::Repr::default();
|
|
|
+ repr.as_mut()
|
|
|
+ .copy_from_slice(&#proof_var[#offset_var..end]);
|
|
|
+ #offset_var = end;
|
|
|
+ let point = Option::<Point>::from(
|
|
|
+ <Point as group::GroupEncoding>::from_bytes(&repr)
|
|
|
+ )
|
|
|
+ .ok_or(SigmaError::VerificationFailure)?;
|
|
|
+ points.push(point);
|
|
|
+ }
|
|
|
+ #id = points;
|
|
|
+ }
|
|
|
},
|
|
|
_ => quote! {},
|
|
|
});
|