@@ -36,94 +36,3 @@ pub trait AsymmetricEncryptionScheme {
3636 ciphertext : & Self :: Ciphertext ,
3737 ) -> Result < Self :: Plaintext , Error > ;
3838}
39-
40- #[ cfg( test) ]
41- mod test {
42- use crate :: encryption:: constraints:: AsymmetricEncryptionGadget ;
43- use ark_std:: { test_rng, UniformRand } ;
44-
45- use ark_ed_on_bls12_381:: { constraints:: EdwardsVar , EdwardsProjective as JubJub , Fq } ;
46-
47- use crate :: encryption:: elgamal:: { constraints:: ElGamalEncGadget , ElGamal , Randomness } ;
48- use crate :: encryption:: AsymmetricEncryptionScheme ;
49- use ark_r1cs_std:: prelude:: * ;
50- use ark_relations:: r1cs:: ConstraintSystem ;
51-
52- #[ test]
53- fn test_elgamal_encryption ( ) {
54- let rng = & mut test_rng ( ) ;
55-
56- // setup and key generation
57- let parameters = ElGamal :: < JubJub > :: setup ( rng) . unwrap ( ) ;
58- let ( pk, sk) = ElGamal :: < JubJub > :: keygen ( & parameters, rng) . unwrap ( ) ;
59-
60- // get a random msg and encryption randomness
61- let msg = JubJub :: rand ( rng) . into ( ) ;
62- let r = Randomness :: rand ( rng) ;
63-
64- // encrypt and decrypt the message
65- let cipher = ElGamal :: < JubJub > :: encrypt ( & parameters, & pk, & msg, & r) . unwrap ( ) ;
66- let check_msg = ElGamal :: < JubJub > :: decrypt ( & parameters, & sk, & cipher) . unwrap ( ) ;
67-
68- assert_eq ! ( msg, check_msg) ;
69- }
70-
71- #[ test]
72- fn test_elgamal_gadget ( ) {
73- let rng = & mut test_rng ( ) ;
74-
75- type MyEnc = ElGamal < JubJub > ;
76- type MyGadget = ElGamalEncGadget < JubJub , EdwardsVar > ;
77-
78- // compute primitive result
79- let parameters = MyEnc :: setup ( rng) . unwrap ( ) ;
80- let ( pk, _) = MyEnc :: keygen ( & parameters, rng) . unwrap ( ) ;
81- let msg = JubJub :: rand ( rng) . into ( ) ;
82- let randomness = Randomness :: rand ( rng) ;
83- let primitive_result = MyEnc :: encrypt ( & parameters, & pk, & msg, & randomness) . unwrap ( ) ;
84-
85- // construct constraint system
86- let cs = ConstraintSystem :: < Fq > :: new_ref ( ) ;
87- let randomness_var =
88- <MyGadget as AsymmetricEncryptionGadget < MyEnc , Fq > >:: RandomnessVar :: new_witness (
89- ark_relations:: ns!( cs, "gadget_randomness" ) ,
90- || Ok ( & randomness) ,
91- )
92- . unwrap ( ) ;
93- let parameters_var =
94- <MyGadget as AsymmetricEncryptionGadget < MyEnc , Fq > >:: ParametersVar :: new_constant (
95- ark_relations:: ns!( cs, "gadget_parameters" ) ,
96- & parameters,
97- )
98- . unwrap ( ) ;
99- let msg_var =
100- <MyGadget as AsymmetricEncryptionGadget < MyEnc , Fq > >:: PlaintextVar :: new_witness (
101- ark_relations:: ns!( cs, "gadget_message" ) ,
102- || Ok ( & msg) ,
103- )
104- . unwrap ( ) ;
105- let pk_var =
106- <MyGadget as AsymmetricEncryptionGadget < MyEnc , Fq > >:: PublicKeyVar :: new_witness (
107- ark_relations:: ns!( cs, "gadget_public_key" ) ,
108- || Ok ( & pk) ,
109- )
110- . unwrap ( ) ;
111-
112- // use gadget
113- let result_var =
114- MyGadget :: encrypt ( & parameters_var, & msg_var, & randomness_var, & pk_var) . unwrap ( ) ;
115-
116- // check that result equals expected ciphertext in the constraint system
117- let expected_var =
118- <MyGadget as AsymmetricEncryptionGadget < MyEnc , Fq > >:: OutputVar :: new_input (
119- ark_relations:: ns!( cs, "gadget_expected" ) ,
120- || Ok ( & primitive_result) ,
121- )
122- . unwrap ( ) ;
123- expected_var. enforce_equal ( & result_var) . unwrap ( ) ;
124-
125- assert_eq ! ( primitive_result. 0 , result_var. c1. value( ) . unwrap( ) ) ;
126- assert_eq ! ( primitive_result. 1 , result_var. c2. value( ) . unwrap( ) ) ;
127- assert ! ( cs. is_satisfied( ) . unwrap( ) ) ;
128- }
129- }
0 commit comments