2023-10-25 18:12:26 +02:00
|
|
|
pragma circom 2.0.0;
|
|
|
|
|
|
|
|
|
|
include "poseidon2_sponge.circom";
|
|
|
|
|
|
2024-03-12 11:48:13 +01:00
|
|
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
|
// Hash `n` field elements into 1, with approximately 127-254 bits of preimage security
|
|
|
|
|
// Note that the output size must be at least twice than the desired security level (?)
|
|
|
|
|
// (assuming bn128 scalar field. We use capacity=2, rate=1, t=3).
|
|
|
|
|
|
|
|
|
|
template Poseidon2_hash_rate1(n) {
|
|
|
|
|
signal input inp[n];
|
|
|
|
|
signal output out;
|
|
|
|
|
|
|
|
|
|
component sponge = PoseidonSponge(3,2,n,1);
|
|
|
|
|
sponge.inp <== inp;
|
|
|
|
|
sponge.out[0] ==> out;
|
|
|
|
|
}
|
|
|
|
|
|
2023-10-25 18:12:26 +02:00
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
|
// Hash `n` field elements into 1, with approximately 127 bits of preimage security
|
|
|
|
|
// (assuming bn128 scalar field. We use capacity=1, rate=2, t=3).
|
|
|
|
|
|
|
|
|
|
template Poseidon2_hash_rate2(n) {
|
|
|
|
|
signal input inp[n];
|
|
|
|
|
signal output out;
|
|
|
|
|
|
|
|
|
|
component sponge = PoseidonSponge(3,1,n,1);
|
|
|
|
|
sponge.inp <== inp;
|
|
|
|
|
sponge.out[0] ==> out;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//------------------------------------------------------------------------------
|