@@ -4,10 +4,15 @@ use std::ops::Mul;
44use ark_bls12_381:: { Fr , G1Affine , G1Projective } ;
55use ark_ec:: CurveGroup ;
66use ark_ff:: { batch_inversion, Field , One } ;
7+ use ark_serialize:: Read ;
8+ use ark_serialize:: SerializationError ;
9+ use ark_serialize:: Write ;
710use ark_serialize:: { CanonicalDeserialize , CanonicalSerialize } ;
811use ark_std:: rand:: RngCore ;
912
1013use crate :: transcript:: CurdleproofsTranscript ;
14+ use crate :: util:: deserialize_g1projective_vec;
15+ use crate :: util:: serialize_g1projective_vec;
1116use merlin:: Transcript ;
1217
1318use crate :: errors:: ProofError ;
@@ -17,7 +22,7 @@ use crate::util::{
1722} ;
1823
1924/// A $SameMsm$ proof object
20- #[ derive( Clone , Debug , CanonicalSerialize , CanonicalDeserialize ) ]
25+ #[ derive( Clone , Debug ) ]
2126pub struct SameMultiscalarProof {
2227 B_a : G1Projective ,
2328 B_t : G1Projective ,
@@ -254,6 +259,34 @@ impl SameMultiscalarProof {
254259 msm_accumulator. accumulate_check ( & point_lhs, & vec_x_times_s, vec_U, rng) ;
255260 Ok ( ( ) )
256261 }
262+
263+ pub fn serialize < W : Write > ( & self , mut w : W ) -> Result < ( ) , SerializationError > {
264+ self . B_a . serialize_compressed ( & mut w) ?;
265+ self . B_t . serialize_compressed ( & mut w) ?;
266+ self . B_u . serialize_compressed ( & mut w) ?;
267+ serialize_g1projective_vec ( & self . vec_L_A , & mut w) ?;
268+ serialize_g1projective_vec ( & self . vec_L_T , & mut w) ?;
269+ serialize_g1projective_vec ( & self . vec_L_U , & mut w) ?;
270+ serialize_g1projective_vec ( & self . vec_R_A , & mut w) ?;
271+ serialize_g1projective_vec ( & self . vec_R_T , & mut w) ?;
272+ serialize_g1projective_vec ( & self . vec_R_U , & mut w) ?;
273+ self . x_final . serialize_compressed ( & mut w) ?;
274+ Ok ( ( ) )
275+ }
276+ pub fn deserialize < R : Read > ( mut r : R , log2_n : usize ) -> Result < Self , SerializationError > {
277+ Ok ( Self {
278+ B_a : G1Projective :: deserialize_compressed ( & mut r) ?,
279+ B_t : G1Projective :: deserialize_compressed ( & mut r) ?,
280+ B_u : G1Projective :: deserialize_compressed ( & mut r) ?,
281+ vec_L_A : deserialize_g1projective_vec ( & mut r, log2_n) ?,
282+ vec_L_T : deserialize_g1projective_vec ( & mut r, log2_n) ?,
283+ vec_L_U : deserialize_g1projective_vec ( & mut r, log2_n) ?,
284+ vec_R_A : deserialize_g1projective_vec ( & mut r, log2_n) ?,
285+ vec_R_T : deserialize_g1projective_vec ( & mut r, log2_n) ?,
286+ vec_R_U : deserialize_g1projective_vec ( & mut r, log2_n) ?,
287+ x_final : Fr :: deserialize_compressed ( & mut r) ?,
288+ } )
289+ }
257290}
258291
259292#[ cfg( test) ]
0 commit comments