diff --git a/hash/plonky2/Cargo.toml b/hash/plonky2/Cargo.toml new file mode 100644 index 0000000..e68c003 --- /dev/null +++ b/hash/plonky2/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "plonky2" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +anyhow = "1.0.79" +plonky2 = "0.1.4" diff --git a/hash/plonky2/src/main.rs b/hash/plonky2/src/main.rs new file mode 100644 index 0000000..241b63e --- /dev/null +++ b/hash/plonky2/src/main.rs @@ -0,0 +1,47 @@ +use anyhow::Result; +use plonky2::field::types::Field; +use plonky2::hash::hash_types::RichField; +use plonky2::field::goldilocks_field::GoldilocksField; +use plonky2::hash::keccak; +use plonky2::hash::keccak::KeccakHash; +use plonky2::hash::poseidon::PoseidonHash; +use plonky2::iop::witness::{PartialWitness, WitnessWrite}; +use plonky2::plonk::circuit_builder::CircuitBuilder; +use plonky2::plonk::circuit_data::CircuitConfig; +use plonky2::plonk::config::{AlgebraicHasher, GenericConfig, PoseidonGoldilocksConfig}; + +fn main() -> Result<()> { + const D: usize = 2; + type C = PoseidonGoldilocksConfig; + type F = >::F; + + let config = CircuitConfig::standard_recursion_config(); + let mut builder = CircuitBuilder::::new(config); + + // The arithmetic circuit. + let initial = builder.add_virtual_target(); + let hash = builder.hash_or_noop::(vec![initial]); + + // Public inputs are the initial value (provided below) and the result (which is generated). + builder.register_public_input(initial); + builder.register_public_input(hash.elements[0]); + builder.register_public_input(hash.elements[1]); + builder.register_public_input(hash.elements[2]); + builder.register_public_input(hash.elements[3]); + + // Provide initial values. + let mut pw = PartialWitness::new(); + pw.set_target(initial, F::ONE); + + + let data = builder.build::(); + let proof = data.prove(pw)?; + + println!( + "hash of {} is: {}", + proof.public_inputs[0], proof.public_inputs[1] + ); + + data.verify(proof) + +}