P.S.O. Poseidon
pso-poseidon is a Poseidon hash implementation in Rust created for PSO based on light-poseidon library.
Parameters
The library provides pre-generated parameters over the BN254 curve, however it can work with any parameters provided as long as developers take care of generating the round constants.
Parameters provided by the library are:
- x^5 S-boxes
- width - 2 ≤ t ≤ 13
- inputs - 1 ≤ n ≤ 12
- 8 full rounds and partial rounds depending on t: [56, 57, 56, 60, 60, 63, 64, 63, 60, 66, 60, 65]
Output type
Poseidon type implements two traits which serve the purpose
of returning the calculated hash in different representations:
PoseidonHasherwith thehashmethod which returnsff::PrimeField. Might be useful if you want to immediately process the result with an another library which works withff::PrimeFieldtypes.
Examples
With PoseidonHasher trait and ff::PrimeField result:
use Fr;
use PrimeField;
use ;
let mut poseidon = new_circom.unwrap;
let input1 = from_bytes.unwrap;
let input2 = from_bytes.unwrap;
let hash = poseidon.hash.unwrap;
// Do something with `hash`.
Implementation
The implementation is compatible with the original SageMath implementation, but it was also inspired by the following ones:
Security
This library has been audited by Veridise. You can read the audit report here.