You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This repository has been created so there's a unique library that holds the tools & functions required to perform Poseidon Hashes on field elements of the bls12-381 elliptic curve.
The hash uses the Hades design for its inner permutation and the SAFE framework for contstructing the sponge.
The library provides the two hashing techniques of Poseidon:
The 'normal' hashing functionalities operating on BlsScalar.
The 'gadget' hashing functionalities that build a circuit which outputs the hash.
Example
use rand::rngs::StdRng;use rand::SeedableRng;use dusk_poseidon::{Domain,Hash};use dusk_bls12_381::BlsScalar;use ff::Field;// generate random inputletmut rng = StdRng::seed_from_u64(0xbeef);letmut input = [BlsScalar::zero();42];for scalar in input.iter_mut(){*scalar = BlsScalar::random(&mut rng);}// digest the input all at oncelet hash = Hash::digest(Domain::Other,&input);// update the input graduallyletmut hasher = Hash::new(Domain::Other);
hasher.update(&input[..3]);
hasher.update(&input[3..]);assert_eq!(hash, hasher.finalize());// create a hash used for merkle tree hashing with arity = 4let merkle_hash = Hash::digest(Domain::Merkle4,&input[..4]);// which is different when another domain is usedassert_ne!(merkle_hash,Hash::digest(Domain::Other,&input[..4]));
Benchmarks
There are benchmarks for hashing, encrypting and decrypting in their native form, operating on Scalar, and for a zero-knowledge circuit proof generation and verification.
To run all benchmarks on your machine, run
cargo bench --features=zk,encryption
in the repository.
Licensing
This code is licensed under Mozilla Public License Version 2.0 (MPL-2.0). Please see LICENSE for further info.