@@ -73,8 +73,8 @@ impl<C: Curve> FromBytes for AffinePoint<C> {
73
73
74
74
impl < C : Curve > Serialize for AffinePoint < C > {
75
75
fn serialize < S > ( & self , serializer : S ) -> std:: result:: Result < S :: Ok , S :: Error >
76
- where
77
- S : Serializer ,
76
+ where
77
+ S : Serializer ,
78
78
{
79
79
let mut buf = vec ! [ ] ;
80
80
self . write ( & mut buf)
@@ -85,8 +85,8 @@ impl<C: Curve> Serialize for AffinePoint<C> {
85
85
86
86
impl < ' de , C : Curve > Deserialize < ' de > for AffinePoint < C > {
87
87
fn deserialize < D > ( deserializer : D ) -> std:: result:: Result < Self , D :: Error >
88
- where
89
- D : Deserializer < ' de > ,
88
+ where
89
+ D : Deserializer < ' de > ,
90
90
{
91
91
struct AffinePointVisitor < C : Curve > {
92
92
phantom : std:: marker:: PhantomData < C > ,
@@ -169,8 +169,8 @@ mod test {
169
169
assert_eq!( x, y) ;
170
170
171
171
// Serde (de)serialization
172
- let ser = bincode :: serialize ( & x) ?;
173
- let y = bincode :: deserialize ( & ser) ?;
172
+ let ser = serde_cbor :: to_vec ( & x) ?;
173
+ let y = serde_cbor :: from_slice ( & ser) ?;
174
174
assert_eq!( x, y) ;
175
175
176
176
Ok ( ( ) )
@@ -201,11 +201,11 @@ mod test {
201
201
assert_eq!( zero, q) ;
202
202
203
203
// Serde (de)serialization
204
- let ser = bincode :: serialize ( & p) ?;
205
- let q = bincode :: deserialize ( & ser) ?;
204
+ let ser = serde_cbor :: to_vec ( & p) ?;
205
+ let q = serde_cbor :: from_slice ( & ser) ?;
206
206
assert_eq!( p, q) ;
207
- let ser = bincode :: serialize ( & zero) ?;
208
- let q = bincode :: deserialize ( & ser) ?;
207
+ let ser = serde_cbor :: to_vec ( & zero) ?;
208
+ let q = serde_cbor :: from_slice ( & ser) ?;
209
209
assert_eq!( zero, q) ;
210
210
211
211
Ok ( ( ) )
@@ -234,8 +234,7 @@ mod test {
234
234
) ;
235
235
236
236
// Generate a proof and verification key for the factorial circuit.
237
- fn get_circuit_vk < C : HaloCurve , InnerC : HaloCurve < BaseField = C :: ScalarField > > (
238
- ) -> ( Proof < C > , VerificationKey < C > ) {
237
+ fn get_circuit_vk < C : HaloCurve , InnerC : HaloCurve < BaseField =C :: ScalarField > > ( ) -> ( Proof < C > , VerificationKey < C > ) {
239
238
let mut builder = CircuitBuilder :: < C > :: new ( 128 ) ;
240
239
let n = 10 ;
241
240
let factorial_usize = ( 1 ..=n) . product ( ) ;
@@ -261,37 +260,52 @@ mod test {
261
260
( proof, vk)
262
261
}
263
262
264
- #[ test]
265
- fn test_proof_vk_serialization_tweedledee ( ) {
266
- let ( proof, vk) = get_circuit_vk :: < Tweedledee , Tweedledum > ( ) ;
267
- let ser_proof = bincode:: serialize ( & proof) . unwrap ( ) ;
268
- let ser_vk = bincode:: serialize ( & vk) . unwrap ( ) ;
269
-
270
- let der_proof = bincode:: deserialize ( & ser_proof) . unwrap ( ) ;
271
- let der_vk: VerificationKey < Tweedledee > = bincode:: deserialize ( & ser_vk) . unwrap ( ) ;
272
-
273
- assert_eq ! ( proof, der_proof) ;
274
- assert_eq ! ( vk. c_constants, der_vk. c_constants) ;
275
- assert_eq ! ( vk. c_s_sigmas, der_vk. c_s_sigmas) ;
276
- assert_eq ! ( vk. degree, der_vk. degree) ;
277
- assert_eq ! ( vk. num_public_inputs, der_vk. num_public_inputs) ;
278
- assert_eq ! ( vk. security_bits, der_vk. security_bits) ;
279
- }
280
263
281
- #[ test]
282
- fn test_proof_vk_serialization_tweedledum ( ) {
283
- let ( proof, vk) = get_circuit_vk :: < Tweedledum , Tweedledee > ( ) ;
284
- let ser_proof = bincode:: serialize ( & proof) . unwrap ( ) ;
285
- let ser_vk = bincode:: serialize ( & vk) . unwrap ( ) ;
286
-
287
- let der_proof = bincode:: deserialize ( & ser_proof) . unwrap ( ) ;
288
- let der_vk: VerificationKey < Tweedledum > = bincode:: deserialize ( & ser_vk) . unwrap ( ) ;
289
-
290
- assert_eq ! ( proof, der_proof) ;
291
- assert_eq ! ( vk. c_constants, der_vk. c_constants) ;
292
- assert_eq ! ( vk. c_s_sigmas, der_vk. c_s_sigmas) ;
293
- assert_eq ! ( vk. degree, der_vk. degree) ;
294
- assert_eq ! ( vk. num_public_inputs, der_vk. num_public_inputs) ;
295
- assert_eq ! ( vk. security_bits, der_vk. security_bits) ;
264
+ macro_rules! test_proof_vk_serialization {
265
+ ( $curve: ty, $inner_curve: ty, $test_name: ident) => {
266
+ #[ test]
267
+ fn $test_name( ) -> Result <( ) > {
268
+ let ( proof, vk) = get_circuit_vk:: <$curve, $inner_curve>( ) ;
269
+ let ser_proof = serde_cbor:: to_vec( & proof) ?;
270
+ let ser_vk = serde_cbor:: to_vec( & vk) ?;
271
+ let vk_no_fft = VerificationKey {
272
+ fft_precomputation: None ,
273
+ ..vk. clone( )
274
+ } ;
275
+ let vk_no_msm = VerificationKey {
276
+ pedersen_g_msm_precomputation: None ,
277
+ ..vk. clone( )
278
+ } ;
279
+ let vk_none = VerificationKey {
280
+ fft_precomputation: None ,
281
+ pedersen_g_msm_precomputation: None ,
282
+ ..vk. clone( )
283
+ } ;
284
+ let ser_vk_no_fft = serde_cbor:: to_vec( & vk_no_fft) ?;
285
+ let ser_vk_no_msm = serde_cbor:: to_vec( & vk_no_msm) ?;
286
+ let ser_vk_none = serde_cbor:: to_vec( & vk_none) ?;
287
+ println!( "Vk size: {} bytes" , ser_vk. len( ) ) ;
288
+ println!( "Vk size without fft precomputation: {} bytes" , ser_vk_no_fft. len( ) ) ;
289
+ println!( "Vk size without msm precomputation: {} bytes" , ser_vk_no_msm. len( ) ) ;
290
+ println!( "Vk size without any precomputation: {} bytes" , ser_vk_none. len( ) ) ;
291
+
292
+ let der_proof = serde_cbor:: from_slice( & ser_proof) ?;
293
+ let der_vk: VerificationKey <$curve> = serde_cbor:: from_slice( & ser_vk) ?;
294
+ let der_vk_no_fft: VerificationKey <$curve> = serde_cbor:: from_slice( & ser_vk_no_fft) ?;
295
+ let der_vk_no_msm: VerificationKey <$curve> = serde_cbor:: from_slice( & ser_vk_no_msm) ?;
296
+ let der_vk_none: VerificationKey <$curve> = serde_cbor:: from_slice( & ser_vk_none) ?;
297
+
298
+ assert_eq!( proof, der_proof) ;
299
+ assert_eq!( vk, der_vk) ;
300
+ assert_eq!( vk_no_fft, der_vk_no_fft) ;
301
+ assert_eq!( vk_no_msm, der_vk_no_msm) ;
302
+ assert_eq!( vk_none, der_vk_none) ;
303
+
304
+ Ok ( ( ) )
305
+ }
306
+ } ;
296
307
}
308
+
309
+ test_proof_vk_serialization ! ( Tweedledee , Tweedledum , test_proof_vk_serialization_tweedledee) ;
310
+ test_proof_vk_serialization ! ( Tweedledum , Tweedledee , test_proof_vk_serialization_tweedledum) ;
297
311
}
0 commit comments