Build Status codecov Repository Documentation

Hades252

Implementation of Hades252 permutation algorithm over the Bls12-381 Scalar field.

Unstable : No guarantees can be made regarding the API stability.

Documentation

To generate the Hades252 documentation:

sh make doc make doc-internal

Use

To import Hades252, add the following to the dependencies section of your project's Cargo.toml:

toml Hades252 = "0.12.0"

By default Hades252 has a width equals to 5. It's possible to use an arbitrary value, between 3 and 9, by setting the environment variable HADES252_WIDTH to the desired number.

Parameters

Example with permutation of scalars using the ScalarStrategy.

```rust use duskhades::{ScalarStrategy, Strategy, WIDTH}; use duskplonk::bls12_381::BlsScalar;

// Generate the inputs that will permute. // The number of values we can input is equivalent to WIDTH

let input = vec![BlsScalar::from(1u64); dusk_hades::WIDTH]; let mut strategy = ScalarStrategy::new();

let mut output = input.clone(); strategy.perm(output.asmutslice());

assertne!(&input, &output); asserteq!(input.len(), output.len());

```

Example with permutation of Variables using the GadgetStrategy

```rust // Proving that we know the pre-image of a hades-252 hash. use duskhades::{GadgetStrategy, Strategy, WIDTH}; use duskplonk::prelude::*;

// Setup OG params. const CAPACITY: usize = 1 << 7; let publicparameters = PublicParameters::setup(CAPACITY, &mut rand::threadrng()).unwrap(); let (ck, vk) = public_parameters.trim(CAPACITY).unwrap();;

// Gen composer let mut composer = StandardComposer::new();

// Gen inputs let mut inputs = [BlsScalar::one(); WIDTH];

let mut prover = Prover::new(b"Hades_Testing");

// Generate the witness data let mut composer = prover.mutcs(); let zero = composer.addinput(BlsScalar::zero()); let mut witness = [zero; WIDTH]; witness.itermut() .zip(inputs.iter()) .foreach(|(w, i)| w = composer.add_input(i));

// Perform the permutation in the circuit GadgetStrategy::hadesgadget(prover.mutcs(), &mut witness);

// Now your composer has been filled with a hades permutation // inside. // Now you can build your proof or keep extending your circuit. ```

Deviations

Reference

https://eprint.iacr.org/2019/458.pdf