#poseidon-hash #circom #pso #prime-field #input #bn254 #fr

pso-poseidon

Poseidon hash implementation compatible with Circom

3 unstable releases

0.2.0 Mar 13, 2026
0.1.2 Feb 17, 2026
0.1.0 Feb 16, 2026

#540 in Math

Download history 123/week @ 2026-04-13 1043/week @ 2026-04-20 1948/week @ 2026-04-27 2077/week @ 2026-05-04

5,191 downloads per month

MIT license

2MB
65K SLoC

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:

  • PoseidonHasher with the hash method which returns ark_ff::PrimeField. Might be useful if you want to immediately process the result with an another library which works with ark_ff::PrimeField types.

Examples

With PoseidonHasher trait and ark_ff::PrimeField result:

use ark_bn254::Fr;
use ark_ff::PrimeField;
use pso_poseidon::{Poseidon, PoseidonHasher};

let mut poseidon = Poseidon::<Fr>::new_circom(2).unwrap();

let input1 = Fr::from_le_bytes_mod_order(&[1u8; 32]);
let input2 = Fr::from_le_bytes_mod_order(&[2u8; 32]);

let hash = poseidon.hash(&[input1, input2]).unwrap();

// Do something with `hash`.

Field Arithmetic

This library uses ark-ff for field arithmetic. While ark-ff carries an academic disclaimer, it is widely adopted in production by major projects including Aleo, Penumbra, Mina (Kimchi), and Espresso Systems.

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.

Dependencies

~5.5MB
~102K SLoC