poseidon

module
v0.0.0-...-ba6c393 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 1, 2024 License: Apache-2.0

README

poseidon

A Golang and Gnark implementation of the Poseidon hash function. The Golang version is an adaption of the iden3 implementation, but with support for multiple curves. The Gnark implementation is an adaption of the circom implementation, available in both native field and emulated versions.

Usage

Standard:

poseidon.Hash[*fr.Element]([]*big.Int{in1, in2})

Gnark circuit:

poseidon.Hash(api, []frontend.Variable{in1, in2})

Gnark circuit using emulated field:

bnField, _ := emulated.NewField[sw_bn254.ScalarField](api)
poseidon.Hash(bnField, []*emulated.Element[sw_bn254.ScalarField]{in1, in2})
Constants

The constants were generated using a combination of a version of the poseidon sage script from the hadeshash project, and triplewz's generator implementation forked to support multiple field elements provided by gnark-crypto. The hadeshash script has a minor modification to round up the Rp value to the nearest multiple of t. The generated constants match the constants in the circom library for the BN254 curve.

You can regenerate the constants using make constants. The repo currently has constants generated for:

Curve Alpha Constants
BN254 5 constants/bn254.go
BLS12-381 5 constants/bls12_381.go
BW6-761 5 constants/bw6_761.go

Note that other alpha values are not yet supported in the hash implementations.

Directories

Path Synopsis
circuits
cmd

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL