mirror of
https://github.com/arnaucube/schnorr.git
synced 2026-01-12 17:01:29 +01:00
Schnorr verification in circuit, tested, works
This commit is contained in:
@@ -121,7 +121,6 @@ mod tests {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_sig() {
|
fn test_sig() {
|
||||||
println!("NOT IMPLEMENTED");
|
|
||||||
let mut rng: rand::rngs::ThreadRng = rand::thread_rng();
|
let mut rng: rand::rngs::ThreadRng = rand::thread_rng();
|
||||||
let ss = SchnorrSigner::new();
|
let ss = SchnorrSigner::new();
|
||||||
let sk: SchnorrSecretKey = SchnorrSecretKey{ sk: 1422 };
|
let sk: SchnorrSecretKey = SchnorrSecretKey{ sk: 1422 };
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ impl SchnorrSignatureTarget {
|
|||||||
Self{ s, e }
|
Self{ s, e }
|
||||||
}
|
}
|
||||||
|
|
||||||
fn set_witness(&self, pw: &mut PartialWitness<GoldF>, sig: SchnorrSignature) -> Result<()> {
|
fn set_witness(&self, pw: &mut PartialWitness<GoldF>, sig: &SchnorrSignature) -> Result<()> {
|
||||||
pw.set_target(self.s, GoldilocksField::from_canonical_u64(sig.s))?;
|
pw.set_target(self.s, GoldilocksField::from_canonical_u64(sig.s))?;
|
||||||
pw.set_target(self.e, GoldilocksField::from_canonical_u64(sig.e))?;
|
pw.set_target(self.e, GoldilocksField::from_canonical_u64(sig.e))?;
|
||||||
Ok(())
|
Ok(())
|
||||||
@@ -66,7 +66,7 @@ impl SchnorrPublicKeyTarget {
|
|||||||
Self{ pk: builder.add_virtual_target() }
|
Self{ pk: builder.add_virtual_target() }
|
||||||
}
|
}
|
||||||
|
|
||||||
fn set_witness(&self, pw: &mut PartialWitness<GoldF>, pk: SchnorrPublicKey) -> Result<()> {
|
fn set_witness(&self, pw: &mut PartialWitness<GoldF>, pk: &SchnorrPublicKey) -> Result<()> {
|
||||||
pw.set_target(self.pk, pk.pk)?;
|
pw.set_target(self.pk, pk.pk)?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
@@ -224,7 +224,8 @@ impl SchnorrBuilder {
|
|||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests{
|
mod tests{
|
||||||
use crate::schnorr::{SchnorrPublicKey, SchnorrSecretKey, SchnorrSigner, SchnorrSignature};
|
use crate::schnorr::{SchnorrPublicKey, SchnorrSecretKey, SchnorrSigner, SchnorrSignature};
|
||||||
use crate::schnorr_prover::SchnorrBuilder;
|
use crate::schnorr_prover::{MessageTarget, SchnorrBuilder, SchnorrPublicKeyTarget, SchnorrSignatureTarget};
|
||||||
|
use plonky2::hash::poseidon::Poseidon;
|
||||||
use plonky2::iop::target::Target;
|
use plonky2::iop::target::Target;
|
||||||
use plonky2::iop::witness::{PartialWitness, PartitionWitness, Witness, WitnessWrite};
|
use plonky2::iop::witness::{PartialWitness, PartitionWitness, Witness, WitnessWrite};
|
||||||
use plonky2::plonk::circuit_builder::CircuitBuilder;
|
use plonky2::plonk::circuit_builder::CircuitBuilder;
|
||||||
@@ -295,14 +296,28 @@ mod tests{
|
|||||||
);
|
);
|
||||||
let msg_size: usize = msg.len();
|
let msg_size: usize = msg.len();
|
||||||
let sig: SchnorrSignature = ss.sign(&msg, &sk, &mut rng);
|
let sig: SchnorrSignature = ss.sign(&msg, &sk, &mut rng);
|
||||||
/*
|
|
||||||
let sig_target = builder.constant(sig);
|
let pk_targ = SchnorrPublicKeyTarget::new_virtual(&mut builder);
|
||||||
|
let sig_targ = SchnorrSignatureTarget::new_virtual(&mut builder);
|
||||||
|
let msg_targ = MessageTarget::new_with_size(&mut builder, msg_size);
|
||||||
|
|
||||||
|
|
||||||
// instead of verifying we're going to prove the verification
|
// instead of verifying we're going to prove the verification
|
||||||
sb.constrain_sig(
|
sb.constrain_sig::<PoseidonGoldilocksConfig> (
|
||||||
&mut builder,
|
&mut builder,
|
||||||
&sig,
|
&sig_targ,
|
||||||
&msg,
|
&msg_targ,
|
||||||
&pk
|
&pk_targ
|
||||||
); */
|
);
|
||||||
|
|
||||||
|
// assign witnesses for verification
|
||||||
|
let mut pw: PartialWitness<F> = PartialWitness::new();
|
||||||
|
pk_targ.set_witness(&mut pw, &pk);
|
||||||
|
sig_targ.set_witness(&mut pw, &sig);
|
||||||
|
msg_targ.set_witness(&mut pw, &msg);
|
||||||
|
|
||||||
|
|
||||||
|
let data = builder.build::<C>();
|
||||||
|
let proof = data.prove(pw).unwrap();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user