Remove unnecessary mut in PodSigner trait (#340)

The PodSigner trait was taking `&mut self` in the `sign` method, but the
signer doesn't need mutation in the Shcnorr implementation.  Remove the
`mut`.

Previously the PodProver trait was also taking `&mut self` in the
`prove` method, and we had many tests creating a `mut Prover/mut
MockProver`.  Remove all those `mut`.

Breaking change: `PodSigner` trait method `sign` replaces `&mut self` by
`&self`
This commit is contained in:
Eduard S. 2025-07-15 17:37:26 +02:00 committed by GitHub
parent b5e0d97cb6
commit 63a716ebd7
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
11 changed files with 136 additions and 146 deletions

View file

@ -46,14 +46,14 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
let game_sk = SecretKey::new_rand(); let game_sk = SecretKey::new_rand();
let game_pk = game_sk.public_key(); let game_pk = game_sk.public_key();
let mut game_signer = Signer(game_sk); let game_signer = Signer(game_sk);
// Build 2 signed pods where the game assigns points to a player that has completed a level. // Build 2 signed pods where the game assigns points to a player that has completed a level.
let mut builder = SignedPodBuilder::new(&params); let mut builder = SignedPodBuilder::new(&params);
builder.insert("player", "Alice"); builder.insert("player", "Alice");
builder.insert("level", 1); builder.insert("level", 1);
builder.insert("points", 3512); builder.insert("points", 3512);
let pod_points_lvl_1 = builder.sign(&mut game_signer)?; let pod_points_lvl_1 = builder.sign(&game_signer)?;
pod_points_lvl_1.verify()?; pod_points_lvl_1.verify()?;
println!("# pod_points_lvl_1:\n{}", pod_points_lvl_1); println!("# pod_points_lvl_1:\n{}", pod_points_lvl_1);
@ -61,7 +61,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
builder.insert("player", "Alice"); builder.insert("player", "Alice");
builder.insert("level", 2); builder.insert("level", 2);
builder.insert("points", 5771); builder.insert("points", 5771);
let pod_points_lvl_2 = builder.sign(&mut game_signer)?; let pod_points_lvl_2 = builder.sign(&game_signer)?;
pod_points_lvl_2.verify()?; pod_points_lvl_2.verify()?;
println!("# pod_points_lvl_2:\n{}", pod_points_lvl_2); println!("# pod_points_lvl_2:\n{}", pod_points_lvl_2);

View file

@ -17,7 +17,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
let pk = sk.public_key(); let pk = sk.public_key();
println!("Public key: {}\n", pk); println!("Public key: {}\n", pk);
let mut signer = Signer(sk); let signer = Signer(sk);
// Build the signed pod // Build the signed pod
let mut builder = SignedPodBuilder::new(&params); let mut builder = SignedPodBuilder::new(&params);
@ -35,7 +35,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
); );
// Sign the pod and verify it // Sign the pod and verify it
let pod = builder.sign(&mut signer)?; let pod = builder.sign(&signer)?;
pod.verify()?; pod.verify()?;
println!("{}", pod); println!("{}", pod);

View file

@ -219,8 +219,8 @@ pub mod tests {
pod.insert("dateOfBirth", 1169909384); pod.insert("dateOfBirth", 1169909384);
pod.insert("socialSecurityNumber", "G2121210"); pod.insert("socialSecurityNumber", "G2121210");
let sk = SecretKey::new_rand(); let sk = SecretKey::new_rand();
let mut signer = Signer(sk); let signer = Signer(sk);
let pod = pod.sign(&mut signer).unwrap(); let pod = pod.sign(&signer).unwrap();
let signed_pod = (pod.pod as Box<dyn Any>).downcast::<SignedPod>().unwrap(); let signed_pod = (pod.pod as Box<dyn Any>).downcast::<SignedPod>().unwrap();
// use the pod in the circuit // use the pod in the circuit

View file

@ -739,12 +739,12 @@ pub mod tests {
let (gov_id_builder, pay_stub_builder, sanction_list_builder) = let (gov_id_builder, pay_stub_builder, sanction_list_builder) =
zu_kyc_sign_pod_builders(&params); zu_kyc_sign_pod_builders(&params);
let mut signer = Signer(SecretKey(BigUint::one())); let signer = Signer(SecretKey(BigUint::one()));
let gov_id_pod = gov_id_builder.sign(&mut signer)?; let gov_id_pod = gov_id_builder.sign(&signer)?;
let mut signer = Signer(SecretKey(2u64.into())); let signer = Signer(SecretKey(2u64.into()));
let pay_stub_pod = pay_stub_builder.sign(&mut signer)?; let pay_stub_pod = pay_stub_builder.sign(&signer)?;
let mut signer = Signer(SecretKey(3u64.into())); let signer = Signer(SecretKey(3u64.into()));
let sanction_list_pod = sanction_list_builder.sign(&mut signer)?; let sanction_list_pod = sanction_list_builder.sign(&signer)?;
let kyc_builder = zu_kyc_pod_builder( let kyc_builder = zu_kyc_pod_builder(
&params, &params,
&vd_set, &vd_set,
@ -753,8 +753,8 @@ pub mod tests {
&sanction_list_pod, &sanction_list_pod,
)?; )?;
let mut prover = Prover {}; let prover = Prover {};
let kyc_pod = kyc_builder.prove(&mut prover, &params)?; let kyc_pod = kyc_builder.prove(&prover, &params)?;
crate::measure_gates_print!(); crate::measure_gates_print!();
let pod = (kyc_pod.pod as Box<dyn Any>).downcast::<MainPod>().unwrap(); let pod = (kyc_pod.pod as Box<dyn Any>).downcast::<MainPod>().unwrap();
@ -778,8 +778,8 @@ pub mod tests {
gov_id_builder.insert("idNumber", "4242424242"); gov_id_builder.insert("idNumber", "4242424242");
gov_id_builder.insert("dateOfBirth", 1169909384); gov_id_builder.insert("dateOfBirth", 1169909384);
gov_id_builder.insert("socialSecurityNumber", "G2121210"); gov_id_builder.insert("socialSecurityNumber", "G2121210");
let mut signer = Signer(SecretKey(42u64.into())); let signer = Signer(SecretKey(42u64.into()));
let gov_id = gov_id_builder.sign(&mut signer).unwrap(); let gov_id = gov_id_builder.sign(&signer).unwrap();
let now_minus_18y: i64 = 1169909388; let now_minus_18y: i64 = 1169909388;
let mut kyc_builder = frontend::MainPodBuilder::new(&params, &vd_set); let mut kyc_builder = frontend::MainPodBuilder::new(&params, &vd_set);
kyc_builder.add_signed_pod(&gov_id); kyc_builder.add_signed_pod(&gov_id);
@ -791,8 +791,8 @@ pub mod tests {
println!(); println!();
// Mock // Mock
let mut prover = MockProver {}; let prover = MockProver {};
let kyc_pod = kyc_builder.prove(&mut prover, &params).unwrap(); let kyc_pod = kyc_builder.prove(&prover, &params).unwrap();
let pod = (kyc_pod.pod as Box<dyn Any>) let pod = (kyc_pod.pod as Box<dyn Any>)
.downcast::<MockMainPod>() .downcast::<MockMainPod>()
.unwrap(); .unwrap();
@ -800,8 +800,8 @@ pub mod tests {
println!("{:#}", pod); println!("{:#}", pod);
// Real // Real
let mut prover = Prover {}; let prover = Prover {};
let kyc_pod = kyc_builder.prove(&mut prover, &params).unwrap(); let kyc_pod = kyc_builder.prove(&prover, &params).unwrap();
let pod = (kyc_pod.pod as Box<dyn Any>).downcast::<MainPod>().unwrap(); let pod = (kyc_pod.pod as Box<dyn Any>).downcast::<MainPod>().unwrap();
pod.verify().unwrap() pod.verify().unwrap()
} }
@ -832,8 +832,8 @@ pub mod tests {
let pod_builder = frontend::MainPodBuilder::new(&params, &vd_set); let pod_builder = frontend::MainPodBuilder::new(&params, &vd_set);
// Mock // Mock
let mut prover = MockProver {}; let prover = MockProver {};
let kyc_pod = pod_builder.prove(&mut prover, &params).unwrap(); let kyc_pod = pod_builder.prove(&prover, &params).unwrap();
let pod = (kyc_pod.pod as Box<dyn Any>) let pod = (kyc_pod.pod as Box<dyn Any>)
.downcast::<MockMainPod>() .downcast::<MockMainPod>()
.unwrap(); .unwrap();
@ -841,8 +841,8 @@ pub mod tests {
println!("{:#}", pod); println!("{:#}", pod);
// Real // Real
let mut prover = Prover {}; let prover = Prover {};
let kyc_pod = pod_builder.prove(&mut prover, &params).unwrap(); let kyc_pod = pod_builder.prove(&prover, &params).unwrap();
let pod = (kyc_pod.pod as Box<dyn Any>).downcast::<MainPod>().unwrap(); let pod = (kyc_pod.pod as Box<dyn Any>).downcast::<MainPod>().unwrap();
pod.verify().unwrap() pod.verify().unwrap()
} }
@ -853,27 +853,23 @@ pub mod tests {
println!("{:#?}", params); println!("{:#?}", params);
let vd_set = &*DEFAULT_VD_SET; let vd_set = &*DEFAULT_VD_SET;
let mut alice = Signer(SecretKey(1u32.into())); let alice = Signer(SecretKey(1u32.into()));
let mut bob = Signer(SecretKey(2u32.into())); let bob = Signer(SecretKey(2u32.into()));
let charlie = Signer(SecretKey(3u32.into())); let charlie = Signer(SecretKey(3u32.into()));
// Alice attests that she is ETH friends with Bob and Bob // Alice attests that she is ETH friends with Bob and Bob
// attests that he is ETH friends with Charlie. // attests that he is ETH friends with Charlie.
let alice_attestation = let alice_attestation = attest_eth_friend(&params, &alice, Value::from(bob.public_key()));
attest_eth_friend(&params, &mut alice, Value::from(bob.public_key())); let bob_attestation = attest_eth_friend(&params, &bob, Value::from(charlie.public_key()));
let bob_attestation =
attest_eth_friend(&params, &mut bob, Value::from(charlie.public_key()));
let helper = EthDosHelper::new(&params, vd_set, false, Value::from(alice.public_key()))?; let helper = EthDosHelper::new(&params, vd_set, false, Value::from(alice.public_key()))?;
let mut prover = Prover {}; let prover = Prover {};
let dist_1 = helper let dist_1 = helper.dist_1(&alice_attestation)?.prove(&prover, &params)?;
.dist_1(&alice_attestation)?
.prove(&mut prover, &params)?;
crate::measure_gates_print!(); crate::measure_gates_print!();
dist_1.pod.verify()?; dist_1.pod.verify()?;
let dist_2 = helper let dist_2 = helper
.dist_n_plus_1(&dist_1, &bob_attestation)? .dist_n_plus_1(&dist_1, &bob_attestation)?
.prove(&mut prover, &params)?; .prove(&prover, &params)?;
Ok(dist_2.pod.verify()?) Ok(dist_2.pod.verify()?)
} }
@ -920,12 +916,12 @@ pub mod tests {
let _st3 = pod_builder.priv_op(op!(custom, cpb_and.clone(), st0, st2))?; let _st3 = pod_builder.priv_op(op!(custom, cpb_and.clone(), st0, st2))?;
let mut prover = MockProver {}; let prover = MockProver {};
let pod = pod_builder.prove(&mut prover, &params)?; let pod = pod_builder.prove(&prover, &params)?;
assert!(pod.pod.verify().is_ok()); assert!(pod.pod.verify().is_ok());
let mut prover = Prover {}; let prover = Prover {};
let pod = pod_builder.prove(&mut prover, &params)?; let pod = pod_builder.prove(&prover, &params)?;
crate::measure_gates_print!(); crate::measure_gates_print!();
let pod = (pod.pod as Box<dyn Any>).downcast::<MainPod>().unwrap(); let pod = (pod.pod as Box<dyn Any>).downcast::<MainPod>().unwrap();
@ -948,8 +944,8 @@ pub mod tests {
builder.pub_op(op!(set_contains, st, 1))?; builder.pub_op(op!(set_contains, st, 1))?;
let mut prover = Prover {}; let prover = Prover {};
let proof = builder.prove(&mut prover, &params).unwrap(); let proof = builder.prove(&prover, &params).unwrap();
let pod = (proof.pod as Box<dyn Any>).downcast::<MainPod>().unwrap(); let pod = (proof.pod as Box<dyn Any>).downcast::<MainPod>().unwrap();
Ok(pod.verify()?) Ok(pod.verify()?)
} }

View file

@ -441,12 +441,12 @@ pub mod tests {
let vd_set = &*MOCK_VD_SET; let vd_set = &*MOCK_VD_SET;
let (gov_id_builder, pay_stub_builder, sanction_list_builder) = let (gov_id_builder, pay_stub_builder, sanction_list_builder) =
zu_kyc_sign_pod_builders(&params); zu_kyc_sign_pod_builders(&params);
let mut signer = Signer(SecretKey(1u32.into())); let signer = Signer(SecretKey(1u32.into()));
let gov_id_pod = gov_id_builder.sign(&mut signer)?; let gov_id_pod = gov_id_builder.sign(&signer)?;
let mut signer = Signer(SecretKey(2u32.into())); let signer = Signer(SecretKey(2u32.into()));
let pay_stub_pod = pay_stub_builder.sign(&mut signer)?; let pay_stub_pod = pay_stub_builder.sign(&signer)?;
let mut signer = Signer(SecretKey(3u32.into())); let signer = Signer(SecretKey(3u32.into()));
let sanction_list_pod = sanction_list_builder.sign(&mut signer)?; let sanction_list_pod = sanction_list_builder.sign(&signer)?;
let kyc_builder = zu_kyc_pod_builder( let kyc_builder = zu_kyc_pod_builder(
&params, &params,
&vd_set, &vd_set,
@ -455,8 +455,8 @@ pub mod tests {
&sanction_list_pod, &sanction_list_pod,
)?; )?;
let mut prover = MockProver {}; let prover = MockProver {};
let kyc_pod = kyc_builder.prove(&mut prover, &params)?; let kyc_pod = kyc_builder.prove(&prover, &params)?;
let pod = (kyc_pod.pod as Box<dyn Any>) let pod = (kyc_pod.pod as Box<dyn Any>)
.downcast::<MockMainPod>() .downcast::<MockMainPod>()
.unwrap(); .unwrap();
@ -471,8 +471,8 @@ pub mod tests {
fn test_mock_main_great_boy() -> frontend::Result<()> { fn test_mock_main_great_boy() -> frontend::Result<()> {
let (params, great_boy_builder) = great_boy_pod_full_flow()?; let (params, great_boy_builder) = great_boy_pod_full_flow()?;
let mut prover = MockProver {}; let prover = MockProver {};
let great_boy_pod = great_boy_builder.prove(&mut prover, &params)?; let great_boy_pod = great_boy_builder.prove(&prover, &params)?;
let pod = (great_boy_pod.pod as Box<dyn Any>) let pod = (great_boy_pod.pod as Box<dyn Any>)
.downcast::<MockMainPod>() .downcast::<MockMainPod>()
.unwrap(); .unwrap();
@ -488,8 +488,8 @@ pub mod tests {
fn test_mock_main_tickets() -> frontend::Result<()> { fn test_mock_main_tickets() -> frontend::Result<()> {
let params = middleware::Params::default(); let params = middleware::Params::default();
let tickets_builder = tickets_pod_full_flow()?; let tickets_builder = tickets_pod_full_flow()?;
let mut prover = MockProver {}; let prover = MockProver {};
let proof_pod = tickets_builder.prove(&mut prover, &params)?; let proof_pod = tickets_builder.prove(&prover, &params)?;
let pod = (proof_pod.pod as Box<dyn Any>) let pod = (proof_pod.pod as Box<dyn Any>)
.downcast::<MockMainPod>() .downcast::<MockMainPod>()
.unwrap(); .unwrap();

View file

@ -27,7 +27,7 @@ pub struct Signer(pub SecretKey);
impl Signer { impl Signer {
fn sign_with_nonce( fn sign_with_nonce(
&mut self, &self,
params: &Params, params: &Params,
nonce: BigUint, nonce: BigUint,
kvs: &HashMap<Key, Value>, kvs: &HashMap<Key, Value>,
@ -48,7 +48,7 @@ impl Signer {
dict, dict,
}) })
} }
fn _sign(&mut self, params: &Params, kvs: &HashMap<Key, Value>) -> Result<SignedPod> { fn _sign(&self, params: &Params, kvs: &HashMap<Key, Value>) -> Result<SignedPod> {
let nonce = OsRng.gen_biguint_below(&GROUP_ORDER); let nonce = OsRng.gen_biguint_below(&GROUP_ORDER);
self.sign_with_nonce(params, nonce, kvs) self.sign_with_nonce(params, nonce, kvs)
} }
@ -59,7 +59,7 @@ impl Signer {
} }
impl PodSigner for Signer { impl PodSigner for Signer {
fn sign(&mut self, params: &Params, kvs: &HashMap<Key, Value>) -> Result<Box<dyn Pod>> { fn sign(&self, params: &Params, kvs: &HashMap<Key, Value>) -> Result<Box<dyn Pod>> {
Ok(self._sign(params, kvs).map(Box::new)?) Ok(self._sign(params, kvs).map(Box::new)?)
} }
} }
@ -200,8 +200,8 @@ pub mod tests {
pod.insert("socialSecurityNumber", "G2121210"); pod.insert("socialSecurityNumber", "G2121210");
let sk = SecretKey(123u64.into()); let sk = SecretKey(123u64.into());
let mut signer = Signer(sk); let signer = Signer(sk);
let pod = pod.sign(&mut signer).unwrap(); let pod = pod.sign(&signer).unwrap();
let pod = (pod.pod as Box<dyn Any>).downcast::<SignedPod>().unwrap(); let pod = (pod.pod as Box<dyn Any>).downcast::<SignedPod>().unwrap();
pod.verify()?; pod.verify()?;

View file

@ -73,7 +73,7 @@ pub fn zu_kyc_pod_builder(
// ETHDoS // ETHDoS
pub fn attest_eth_friend(params: &Params, src: &mut impl PodSigner, dst: Value) -> SignedPod { pub fn attest_eth_friend(params: &Params, src: &impl PodSigner, dst: Value) -> SignedPod {
let mut attestation = SignedPodBuilder::new(params); let mut attestation = SignedPodBuilder::new(params);
attestation.insert("attestation", dst); attestation.insert("attestation", dst);
attestation.sign(src).unwrap() attestation.sign(src).unwrap()
@ -334,13 +334,13 @@ pub fn great_boy_pod_full_flow() -> Result<(Params, MainPodBuilder)> {
}; };
let vd_set = &*MOCK_VD_SET; let vd_set = &*MOCK_VD_SET;
let mut giggles_signer = Signer(SecretKey(1u32.into())); let giggles_signer = Signer(SecretKey(1u32.into()));
let mut macrosoft_signer = Signer(SecretKey(2u32.into())); let macrosoft_signer = Signer(SecretKey(2u32.into()));
let mut faebook_signer = Signer(SecretKey(3u32.into())); let faebook_signer = Signer(SecretKey(3u32.into()));
let good_boy_issuers = let good_boy_issuers =
[&giggles_signer, &macrosoft_signer, &faebook_signer].map(|s| s.0.public_key()); [&giggles_signer, &macrosoft_signer, &faebook_signer].map(|s| s.0.public_key());
let mut bob_signer = Signer(SecretKey(11u32.into())); let bob_signer = Signer(SecretKey(11u32.into()));
let mut charlie_signer = Signer(SecretKey(12u32.into())); let charlie_signer = Signer(SecretKey(12u32.into()));
let alice_signer = Signer(SecretKey(13u32.into())); let alice_signer = Signer(SecretKey(13u32.into()));
let bob = bob_signer.public_key(); let bob = bob_signer.public_key();
let charlie = charlie_signer.public_key(); let charlie = charlie_signer.public_key();
@ -351,23 +351,23 @@ pub fn great_boy_pod_full_flow() -> Result<(Params, MainPodBuilder)> {
let mut bob_good_boys = Vec::new(); let mut bob_good_boys = Vec::new();
let good_boy = good_boy_sign_pod_builder(&params, &bob, 36); let good_boy = good_boy_sign_pod_builder(&params, &bob, 36);
bob_good_boys.push(good_boy.sign(&mut giggles_signer).unwrap()); bob_good_boys.push(good_boy.sign(&giggles_signer).unwrap());
bob_good_boys.push(good_boy.sign(&mut macrosoft_signer).unwrap()); bob_good_boys.push(good_boy.sign(&macrosoft_signer).unwrap());
// Charlie receives two good_boy pods from Macrosoft and Faebook // Charlie receives two good_boy pods from Macrosoft and Faebook
let mut charlie_good_boys = Vec::new(); let mut charlie_good_boys = Vec::new();
let good_boy = good_boy_sign_pod_builder(&params, &charlie, 27); let good_boy = good_boy_sign_pod_builder(&params, &charlie, 27);
charlie_good_boys.push(good_boy.sign(&mut macrosoft_signer).unwrap()); charlie_good_boys.push(good_boy.sign(&macrosoft_signer).unwrap());
charlie_good_boys.push(good_boy.sign(&mut faebook_signer).unwrap()); charlie_good_boys.push(good_boy.sign(&faebook_signer).unwrap());
// Bob and Charlie send Alice a Friend POD // Bob and Charlie send Alice a Friend POD
let mut alice_friend_pods = Vec::new(); let mut alice_friend_pods = Vec::new();
let friend = friend_sign_pod_builder(&params, &alice); let friend = friend_sign_pod_builder(&params, &alice);
alice_friend_pods.push(friend.sign(&mut bob_signer).unwrap()); alice_friend_pods.push(friend.sign(&bob_signer).unwrap());
alice_friend_pods.push(friend.sign(&mut charlie_signer).unwrap()); alice_friend_pods.push(friend.sign(&charlie_signer).unwrap());
let good_boy_issuers = Value::from(Set::new( let good_boy_issuers = Value::from(Set::new(
params.max_depth_mt_containers, params.max_depth_mt_containers,
@ -433,7 +433,7 @@ pub fn tickets_pod_full_flow() -> Result<MainPodBuilder> {
let vd_set = &*MOCK_VD_SET; let vd_set = &*MOCK_VD_SET;
let builder = tickets_sign_pod_builder(&params); let builder = tickets_sign_pod_builder(&params);
let signed_pod = builder.sign(&mut Signer(SecretKey(1u32.into()))).unwrap(); let signed_pod = builder.sign(&Signer(SecretKey(1u32.into()))).unwrap();
tickets_pod_builder( tickets_pod_builder(
&params, &params,
vd_set, vd_set,

View file

@ -311,8 +311,8 @@ mod tests {
mp_builder.pub_op(op!(custom, gt_custom_pred, desugared_gt))?; mp_builder.pub_op(op!(custom, gt_custom_pred, desugared_gt))?;
// Check that the POD builds // Check that the POD builds
let mut prover = MockProver {}; let prover = MockProver {};
let proof = mp_builder.prove(&mut prover, &params)?; let proof = mp_builder.prove(&prover, &params)?;
Ok(()) Ok(())
} }
@ -360,8 +360,8 @@ mod tests {
let set_contains_custom_pred = CustomPredicateRef::new(batch, 0); let set_contains_custom_pred = CustomPredicateRef::new(batch, 0);
mp_builder.pub_op(op!(custom, set_contains_custom_pred, set_contains))?; mp_builder.pub_op(op!(custom, set_contains_custom_pred, set_contains))?;
let mut prover = MockProver {}; let prover = MockProver {};
let proof = mp_builder.prove(&mut prover, &params)?; let proof = mp_builder.prove(&prover, &params)?;
Ok(()) Ok(())
} }

View file

@ -49,9 +49,7 @@ impl SignedPodBuilder {
self.kvs.insert(key.into(), value.into()); self.kvs.insert(key.into(), value.into());
} }
// TODO: Remove mut because Schnorr signature doesn't need any mutability of the signer, the pub fn sign<S: PodSigner>(&self, signer: &S) -> Result<SignedPod> {
// nonces are sourced from OS randomness.
pub fn sign<S: PodSigner>(&self, signer: &mut S) -> Result<SignedPod> {
// Sign POD with committed KV store. // Sign POD with committed KV store.
let pod = signer.sign(&self.params, &self.kvs)?; let pod = signer.sign(&self.params, &self.kvs)?;
@ -879,18 +877,18 @@ pub mod tests {
println!("{}", gov_id); println!("{}", gov_id);
println!("{}", pay_stub); println!("{}", pay_stub);
let mut signer = Signer(SecretKey(1u32.into())); let signer = Signer(SecretKey(1u32.into()));
let gov_id = gov_id.sign(&mut signer)?; let gov_id = gov_id.sign(&signer)?;
check_kvs(&gov_id)?; check_kvs(&gov_id)?;
println!("{}", gov_id); println!("{}", gov_id);
let mut signer = Signer(SecretKey(2u32.into())); let signer = Signer(SecretKey(2u32.into()));
let pay_stub = pay_stub.sign(&mut signer)?; let pay_stub = pay_stub.sign(&signer)?;
check_kvs(&pay_stub)?; check_kvs(&pay_stub)?;
println!("{}", pay_stub); println!("{}", pay_stub);
let mut signer = Signer(SecretKey(3u32.into())); let signer = Signer(SecretKey(3u32.into()));
let sanction_list = sanction_list.sign(&mut signer)?; let sanction_list = sanction_list.sign(&signer)?;
check_kvs(&sanction_list)?; check_kvs(&sanction_list)?;
println!("{}", sanction_list); println!("{}", sanction_list);
@ -898,8 +896,8 @@ pub mod tests {
println!("{}", kyc_builder); println!("{}", kyc_builder);
// prove kyc with MockProver and print it // prove kyc with MockProver and print it
let mut prover = MockProver {}; let prover = MockProver {};
let kyc = kyc_builder.prove(&mut prover, &params)?; let kyc = kyc_builder.prove(&prover, &params)?;
println!("{}", kyc); println!("{}", kyc);
@ -916,31 +914,29 @@ pub mod tests {
}; };
let vd_set = &*MOCK_VD_SET; let vd_set = &*MOCK_VD_SET;
let mut alice = Signer(SecretKey(1u32.into())); let alice = Signer(SecretKey(1u32.into()));
let mut bob = Signer(SecretKey(2u32.into())); let bob = Signer(SecretKey(2u32.into()));
let mut charlie = Signer(SecretKey(3u32.into())); let charlie = Signer(SecretKey(3u32.into()));
let david = Signer(SecretKey(4u32.into())); let david = Signer(SecretKey(4u32.into()));
let helper = EthDosHelper::new(&params, vd_set, true, alice.public_key())?; let helper = EthDosHelper::new(&params, vd_set, true, alice.public_key())?;
let mut prover = MockProver {}; let prover = MockProver {};
let alice_attestation = attest_eth_friend(&params, &mut alice, bob.public_key()); let alice_attestation = attest_eth_friend(&params, &alice, bob.public_key());
let dist_1 = helper let dist_1 = helper.dist_1(&alice_attestation)?.prove(&prover, &params)?;
.dist_1(&alice_attestation)?
.prove(&mut prover, &params)?;
dist_1.pod.verify()?; dist_1.pod.verify()?;
let bob_attestation = attest_eth_friend(&params, &mut bob, charlie.public_key()); let bob_attestation = attest_eth_friend(&params, &bob, charlie.public_key());
let dist_2 = helper let dist_2 = helper
.dist_n_plus_1(&dist_1, &bob_attestation)? .dist_n_plus_1(&dist_1, &bob_attestation)?
.prove(&mut prover, &params)?; .prove(&prover, &params)?;
dist_2.pod.verify()?; dist_2.pod.verify()?;
let charlie_attestation = attest_eth_friend(&params, &mut charlie, david.public_key()); let charlie_attestation = attest_eth_friend(&params, &charlie, david.public_key());
let dist_3 = helper let dist_3 = helper
.dist_n_plus_1(&dist_2, &charlie_attestation)? .dist_n_plus_1(&dist_2, &charlie_attestation)?
.prove(&mut prover, &params)?; .prove(&prover, &params)?;
dist_3.pod.verify()?; dist_3.pod.verify()?;
Ok(()) Ok(())
@ -974,8 +970,8 @@ pub mod tests {
let mut signed_builder = SignedPodBuilder::new(&params); let mut signed_builder = SignedPodBuilder::new(&params);
signed_builder.insert("a", 1); signed_builder.insert("a", 1);
signed_builder.insert("b", 1); signed_builder.insert("b", 1);
let mut signer = Signer(SecretKey(1u32.into())); let signer = Signer(SecretKey(1u32.into()));
let signed_pod = signed_builder.sign(&mut signer).unwrap(); let signed_pod = signed_builder.sign(&signer).unwrap();
let mut builder = MainPodBuilder::new(&params, &vd_set); let mut builder = MainPodBuilder::new(&params, &vd_set);
builder.add_signed_pod(&signed_pod); builder.add_signed_pod(&signed_pod);
@ -1011,8 +1007,8 @@ pub mod tests {
); );
builder.op(true, op_eq3).unwrap(); builder.op(true, op_eq3).unwrap();
let mut prover = MockProver {}; let prover = MockProver {};
let pod = builder.prove(&mut prover, &params).unwrap(); let pod = builder.prove(&prover, &params).unwrap();
println!("{}", pod); println!("{}", pod);
} }
@ -1025,8 +1021,8 @@ pub mod tests {
let mut builder = SignedPodBuilder::new(&params); let mut builder = SignedPodBuilder::new(&params);
builder.insert("num", 2); builder.insert("num", 2);
let mut signer = Signer(SecretKey(1u32.into())); let signer = Signer(SecretKey(1u32.into()));
let pod = builder.sign(&mut signer).unwrap(); let pod = builder.sign(&signer).unwrap();
println!("{}", pod); println!("{}", pod);
@ -1034,8 +1030,8 @@ pub mod tests {
builder.add_signed_pod(&pod); builder.add_signed_pod(&pod);
builder.pub_op(op!(gt, (&pod, "num"), 5)).unwrap(); builder.pub_op(op!(gt, (&pod, "num"), 5)).unwrap();
let mut prover = MockProver {}; let prover = MockProver {};
let false_pod = builder.prove(&mut prover, &params).unwrap(); let false_pod = builder.prove(&prover, &params).unwrap();
println!("{}", builder); println!("{}", builder);
println!("{}", false_pod); println!("{}", false_pod);
@ -1057,8 +1053,8 @@ pub mod tests {
let dict_root = Value::from(dict.clone()); let dict_root = Value::from(dict.clone());
builder.insert("dict", dict_root); builder.insert("dict", dict_root);
let mut signer = Signer(SecretKey(1u32.into())); let signer = Signer(SecretKey(1u32.into()));
let pod = builder.sign(&mut signer).unwrap(); let pod = builder.sign(&signer).unwrap();
let mut builder = MainPodBuilder::new(&params, &vd_set); let mut builder = MainPodBuilder::new(&params, &vd_set);
builder.add_signed_pod(&pod); builder.add_signed_pod(&pod);
@ -1079,8 +1075,8 @@ pub mod tests {
OperationAux::MerkleProof(dict.prove(&Key::from("a")).unwrap().1), OperationAux::MerkleProof(dict.prove(&Key::from("a")).unwrap().1),
)) ))
.unwrap(); .unwrap();
let mut main_prover = MockProver {}; let main_prover = MockProver {};
let main_pod = builder.prove(&mut main_prover, &params).unwrap(); let main_pod = builder.prove(&main_prover, &params).unwrap();
println!("{}", main_pod); println!("{}", main_pod);
@ -1109,8 +1105,8 @@ pub mod tests {
let st = Statement::equal(AnchoredKey::from((SELF, "a")), Value::from(28)); let st = Statement::equal(AnchoredKey::from((SELF, "a")), Value::from(28));
builder.insert(false, (st, op_new_entry.clone())); builder.insert(false, (st, op_new_entry.clone()));
let mut prover = MockProver {}; let prover = MockProver {};
let pod = builder.prove(&mut prover, &params).unwrap(); let pod = builder.prove(&prover, &params).unwrap();
pod.pod.verify().unwrap(); pod.pod.verify().unwrap();
} }
@ -1145,8 +1141,8 @@ pub mod tests {
); );
builder.insert(false, (st, op)); builder.insert(false, (st, op));
let mut prover = MockProver {}; let prover = MockProver {};
let pod = builder.prove(&mut prover, &params).unwrap(); let pod = builder.prove(&prover, &params).unwrap();
pod.pod.verify().unwrap(); pod.pod.verify().unwrap();
} }
} }

View file

@ -222,8 +222,8 @@ mod tests {
#[test] #[test]
fn test_signed_pod_serialization() { fn test_signed_pod_serialization() {
let builder = signed_pod_builder(); let builder = signed_pod_builder();
let mut signer = Signer(SecretKey(1u32.into())); let signer = Signer(SecretKey(1u32.into()));
let pod = builder.sign(&mut signer).unwrap(); let pod = builder.sign(&signer).unwrap();
let serialized = serde_json::to_string_pretty(&pod).unwrap(); let serialized = serde_json::to_string_pretty(&pod).unwrap();
println!("serialized: {}", serialized); println!("serialized: {}", serialized);
@ -240,8 +240,8 @@ mod tests {
#[test] #[test]
fn test_mock_signed_pod_serialization() { fn test_mock_signed_pod_serialization() {
let builder = signed_pod_builder(); let builder = signed_pod_builder();
let mut signer = Signer(SecretKey(1u32.into())); let signer = Signer(SecretKey(1u32.into()));
let pod = builder.sign(&mut signer).unwrap(); let pod = builder.sign(&signer).unwrap();
let serialized = serde_json::to_string_pretty(&pod).unwrap(); let serialized = serde_json::to_string_pretty(&pod).unwrap();
println!("serialized: {}", serialized); println!("serialized: {}", serialized);
@ -261,12 +261,12 @@ mod tests {
let (gov_id_builder, pay_stub_builder, sanction_list_builder) = let (gov_id_builder, pay_stub_builder, sanction_list_builder) =
zu_kyc_sign_pod_builders(&params); zu_kyc_sign_pod_builders(&params);
let mut signer = Signer(SecretKey(1u32.into())); let signer = Signer(SecretKey(1u32.into()));
let gov_id_pod = gov_id_builder.sign(&mut signer).unwrap(); let gov_id_pod = gov_id_builder.sign(&signer).unwrap();
let mut signer = Signer(SecretKey(2u32.into())); let signer = Signer(SecretKey(2u32.into()));
let pay_stub_pod = pay_stub_builder.sign(&mut signer).unwrap(); let pay_stub_pod = pay_stub_builder.sign(&signer).unwrap();
let mut signer = Signer(SecretKey(3u32.into())); let signer = Signer(SecretKey(3u32.into()));
let sanction_list_pod = sanction_list_builder.sign(&mut signer).unwrap(); let sanction_list_pod = sanction_list_builder.sign(&signer).unwrap();
let kyc_builder = zu_kyc_pod_builder( let kyc_builder = zu_kyc_pod_builder(
&params, &params,
&vd_set, &vd_set,
@ -276,8 +276,8 @@ mod tests {
) )
.unwrap(); .unwrap();
let mut prover = MockProver {}; let prover = MockProver {};
let kyc_pod = kyc_builder.prove(&mut prover, &params).unwrap(); let kyc_pod = kyc_builder.prove(&prover, &params).unwrap();
Ok(kyc_pod) Ok(kyc_pod)
} }
@ -292,12 +292,12 @@ mod tests {
let (gov_id_builder, pay_stub_builder, sanction_list_builder) = let (gov_id_builder, pay_stub_builder, sanction_list_builder) =
zu_kyc_sign_pod_builders(&params); zu_kyc_sign_pod_builders(&params);
let mut signer = Signer(SecretKey(1u32.into())); let signer = Signer(SecretKey(1u32.into()));
let gov_id_pod = gov_id_builder.sign(&mut signer)?; let gov_id_pod = gov_id_builder.sign(&signer)?;
let mut signer = Signer(SecretKey(2u32.into())); let signer = Signer(SecretKey(2u32.into()));
let pay_stub_pod = pay_stub_builder.sign(&mut signer)?; let pay_stub_pod = pay_stub_builder.sign(&signer)?;
let mut signer = Signer(SecretKey(3u32.into())); let signer = Signer(SecretKey(3u32.into()));
let sanction_list_pod = sanction_list_builder.sign(&mut signer)?; let sanction_list_pod = sanction_list_builder.sign(&signer)?;
let kyc_builder = zu_kyc_pod_builder( let kyc_builder = zu_kyc_pod_builder(
&params, &params,
&vd_set, &vd_set,
@ -306,8 +306,8 @@ mod tests {
&sanction_list_pod, &sanction_list_pod,
)?; )?;
let mut prover = Prover {}; let prover = Prover {};
let kyc_pod = kyc_builder.prove(&mut prover, &params)?; let kyc_pod = kyc_builder.prove(&prover, &params)?;
Ok(kyc_pod) Ok(kyc_pod)
} }
@ -348,23 +348,21 @@ mod tests {
}; };
let vd_set = &*MOCK_VD_SET; let vd_set = &*MOCK_VD_SET;
let mut alice = Signer(SecretKey(1u32.into())); let alice = Signer(SecretKey(1u32.into()));
let mut bob = Signer(SecretKey(2u32.into())); let bob = Signer(SecretKey(2u32.into()));
let charlie = Signer(SecretKey(3u32.into())); let charlie = Signer(SecretKey(3u32.into()));
// Alice attests that she is ETH friends with Bob and Bob // Alice attests that she is ETH friends with Bob and Bob
// attests that he is ETH friends with Charlie. // attests that he is ETH friends with Charlie.
let alice_attestation = attest_eth_friend(&params, &mut alice, bob.public_key()); let alice_attestation = attest_eth_friend(&params, &alice, bob.public_key());
let bob_attestation = attest_eth_friend(&params, &mut bob, charlie.public_key()); let bob_attestation = attest_eth_friend(&params, &bob, charlie.public_key());
let helper = EthDosHelper::new(&params, vd_set, true, alice.public_key())?; let helper = EthDosHelper::new(&params, vd_set, true, alice.public_key())?;
let mut prover = MockProver {}; let prover = MockProver {};
let dist_1 = helper let dist_1 = helper.dist_1(&alice_attestation)?.prove(&prover, &params)?;
.dist_1(&alice_attestation)?
.prove(&mut prover, &params)?;
let dist_2 = helper let dist_2 = helper
.dist_n_plus_1(&dist_1, &bob_attestation)? .dist_n_plus_1(&dist_1, &bob_attestation)?
.prove(&mut prover, &params)?; .prove(&prover, &params)?;
Ok(dist_2) Ok(dist_2)
} }
@ -380,7 +378,7 @@ mod tests {
let kyc_pod = build_mock_zukyc_pod().unwrap(); let kyc_pod = build_mock_zukyc_pod().unwrap();
let signed_pod = signed_pod_builder() let signed_pod = signed_pod_builder()
.sign(&mut Signer(SecretKey(1u32.into()))) .sign(&Signer(SecretKey(1u32.into())))
.unwrap(); .unwrap();
let ethdos_pod = build_ethdos_pod().unwrap(); let ethdos_pod = build_ethdos_pod().unwrap();
let mainpod_schema_value = serde_json::to_value(&mainpod_schema).unwrap(); let mainpod_schema_value = serde_json::to_value(&mainpod_schema).unwrap();

View file

@ -874,7 +874,7 @@ dyn_clone::clone_trait_object!(RecursivePod);
pub trait PodSigner { pub trait PodSigner {
fn sign( fn sign(
&mut self, &self,
params: &Params, params: &Params,
kvs: &HashMap<Key, Value>, kvs: &HashMap<Key, Value>,
) -> Result<Box<dyn Pod>, BackendError>; ) -> Result<Box<dyn Pod>, BackendError>;