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

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