@@ -6,6 +6,7 @@ use ark_std::{
6
6
UniformRand ,
7
7
} ;
8
8
use blake2:: Blake2b512 ;
9
+ use dock_crypto_utils:: randomized_pairing_check:: RandomizedPairingChecker ;
9
10
use proof_system:: {
10
11
prelude:: {
11
12
generate_snark_srs_bound_check, EqualWitnesses , MetaStatements , ProofSpec , ProverConfig ,
@@ -41,7 +42,6 @@ use saver::{
41
42
setup:: { setup_for_groth16, ChunkedCommitmentGens , EncryptionGens , PreparedEncryptionGens } ,
42
43
} ;
43
44
use std:: time:: Instant ;
44
-
45
45
use test_utils:: { bbs:: * , test_serialization} ;
46
46
47
47
pub fn decrypt_and_verify (
@@ -54,12 +54,14 @@ pub fn decrypt_and_verify(
54
54
enc_gens : impl Into < PreparedEncryptionGens < Bls12_381 > > ,
55
55
chunk_bit_size : u8 ,
56
56
) {
57
+ let start = Instant :: now ( ) ;
57
58
let dk = dk. into ( ) ;
58
59
let enc_gens = enc_gens. into ( ) ;
59
60
let ct = proof. get_saver_ciphertext_and_proof ( stmt_idx) . unwrap ( ) . 0 ;
60
61
let ( decrypted_message, nu) = ct
61
62
. decrypt_given_groth16_vk ( sk, dk. clone ( ) , snark_vk, chunk_bit_size)
62
63
. unwrap ( ) ;
64
+ println ! ( "Time to decrypt {:?}" , start. elapsed( ) ) ;
63
65
assert_eq ! ( decrypted_message, decrypted) ;
64
66
ct. verify_decryption_given_groth16_vk (
65
67
& decrypted_message,
@@ -72,6 +74,38 @@ pub fn decrypt_and_verify(
72
74
. unwrap ( ) ;
73
75
}
74
76
77
+ pub fn decrypt_and_verify_with_randomized_pairing_checker (
78
+ pairing_checker : & mut RandomizedPairingChecker < Bls12_381 > ,
79
+ proof : & Proof < Bls12_381 > ,
80
+ stmt_idx : usize ,
81
+ snark_vk : & VerifyingKey < Bls12_381 > ,
82
+ decrypted : Fr ,
83
+ sk : & SecretKey < Fr > ,
84
+ dk : impl Into < PreparedDecryptionKey < Bls12_381 > > ,
85
+ enc_gens : impl Into < PreparedEncryptionGens < Bls12_381 > > ,
86
+ chunk_bit_size : u8 ,
87
+ ) {
88
+ let start = Instant :: now ( ) ;
89
+ let dk = dk. into ( ) ;
90
+ let enc_gens = enc_gens. into ( ) ;
91
+ let ct = proof. get_saver_ciphertext_and_proof ( stmt_idx) . unwrap ( ) . 0 ;
92
+ let ( decrypted_message, nu) = ct
93
+ . decrypt_given_groth16_vk ( sk, dk. clone ( ) , snark_vk, chunk_bit_size)
94
+ . unwrap ( ) ;
95
+ println ! ( "Time to decrypt {:?}" , start. elapsed( ) ) ;
96
+ assert_eq ! ( decrypted_message, decrypted) ;
97
+ ct. verify_decryption_given_groth16_vk_with_randomized_pairing_checker (
98
+ & decrypted_message,
99
+ & nu,
100
+ chunk_bit_size,
101
+ dk,
102
+ snark_vk,
103
+ enc_gens,
104
+ pairing_checker,
105
+ )
106
+ . unwrap ( ) ;
107
+ }
108
+
75
109
macro_rules! gen_tests {
76
110
( $test1_name: ident, $test2_name: ident, $setup_fn_name: ident, $prover_stmt: ident, $verifier_stmt: ident, $wit: ident) => {
77
111
#[ test]
@@ -262,6 +296,26 @@ macro_rules! gen_tests {
262
296
start. elapsed( )
263
297
) ;
264
298
299
+ let start = Instant :: now( ) ;
300
+ let mut checker = RandomizedPairingChecker :: <Bls12_381 >:: new_using_rng( & mut rng, true ) ;
301
+ decrypt_and_verify_with_randomized_pairing_checker(
302
+ & mut checker,
303
+ & proof,
304
+ 1 ,
305
+ & snark_pk. pk. vk,
306
+ msgs[ enc_msg_idx] ,
307
+ & sk,
308
+ prepared_dk. clone( ) ,
309
+ prepared_enc_gens. clone( ) ,
310
+ chunk_bit_size,
311
+ ) ;
312
+ assert!( checker. verify( ) ) ;
313
+ println!(
314
+ "Time taken to decrypt and verify 1 encrypted message in signature over {} messages using randomized pairing checker {:?}" ,
315
+ msg_count,
316
+ start. elapsed( )
317
+ ) ;
318
+
265
319
let start = Instant :: now( ) ;
266
320
let mut m = BTreeMap :: new( ) ;
267
321
let ( c, p) = proof. get_saver_ciphertext_and_proof( 1 ) . unwrap( ) ;
@@ -616,6 +670,29 @@ macro_rules! gen_tests {
616
670
start. elapsed( )
617
671
) ;
618
672
673
+ let start = Instant :: now( ) ;
674
+ let mut checker = RandomizedPairingChecker :: <Bls12_381 >:: new_using_rng( & mut rng, true ) ;
675
+ for ( i, j) in enc_msg_indices. iter( ) . enumerate( ) {
676
+ decrypt_and_verify_with_randomized_pairing_checker(
677
+ & mut checker,
678
+ & proof,
679
+ i + 1 ,
680
+ & snark_pk. pk. vk,
681
+ msgs[ * j] ,
682
+ & sk,
683
+ dk. clone( ) ,
684
+ enc_gens. clone( ) ,
685
+ chunk_bit_size,
686
+ ) ;
687
+ }
688
+ assert!( checker. verify( ) ) ;
689
+ println!(
690
+ "Time taken to decrypt and verify {} encrypted messages in signature over {} messages using randomized pairing checker {:?}" ,
691
+ enc_msg_indices. len( ) ,
692
+ msg_count,
693
+ start. elapsed( )
694
+ ) ;
695
+
619
696
let start = Instant :: now( ) ;
620
697
let mut m = BTreeMap :: new( ) ;
621
698
for i in 1 ..=enc_msg_indices. len( ) {
0 commit comments