Skip to main content
Version: 0.17.0

Hash methods

sha256​

Given an array of bytes, returns the resulting sha256 hash.

fn sha256(_input : [u8]) -> [u8; 32]

example:

fn main() {
let x = [163, 117, 178, 149]; // some random bytes
let hash = std::hash::sha256(x);
}
info

This is a black box function. Read this section to learn more about black box functions in Noir.

blake2s​

Given an array of bytes, returns an array with the Blake2 hash

fn blake2s(_input : [u8]) -> [u8; 32]

example:

fn main() {
let x = [163, 117, 178, 149]; // some random bytes
let hash = std::hash::blake2s(x);
}
info

This is a black box function. Read this section to learn more about black box functions in Noir.

pedersen​

Given an array of Fields, returns the Pedersen hash.

fn pedersen(_input : [Field]) -> [Field; 2]

example:

fn main() {
let x = [163, 117, 178, 149]; // some random bytes
let hash = std::hash::pedersen(x);
}
info

This is a black box function. Read this section to learn more about black box functions in Noir.

keccak256​

Given an array of bytes (u8), returns the resulting keccak hash as an array of 32 bytes ([u8; 32]). Specify a message_size to hash only the first message_size bytes of the input.

fn keccak256<N>(_input : [u8; N], _message_size: u32) -> [u8; 32]

example:

fn main() {
let x = [163, 117, 178, 149]; // some random bytes
let message_size = 4;
let hash = std::hash::keccak256(x, message_size);
}
info

This is a black box function. Read this section to learn more about black box functions in Noir.

poseidon​

Given an array of Fields, returns a new Field with the Poseidon Hash. Mind that you need to specify how many inputs are there to your Poseidon function.

// example for hash_1, hash_2 accepts an array of length 2, etc
fn hash_1(input: [Field; 1]) -> Field

example:

fn main()
{
let hash1 = std::hash::poseidon::bn254::hash_2([1, 2]);
assert(hash1 == 0x115cc0f5e7d690413df64c6b9662e9cf2a3617f2743245519e19607a4417189a);
}

mimc_bn254 and mimc​

mimc_bn254 is mimc, but with hardcoded parameters for the BN254 curve. You can use it by providing an array of Fields, and it returns a Field with the hash. You can use the mimc method if you're willing to input your own constants:

fn mimc<N>(x: Field, k: Field, constants: [Field; N], exp : Field) -> Field

otherwise, use the mimc_bn254 method:

fn mimc_bn254<N>(array: [Field; N]) -> Field

example:


fn main() {
let x = [163, 117, 178, 149]; // some random bytes
let hash = std::hash::mimc_bn254(x);
}

hash_to_field​

fn hash_to_field<N>(_input : [Field; N]) -> Field {}

Calculates the blake2s hash of the inputs and returns the hash modulo the field modulus to return a value which can be represented as a Field.

info

This is a black box function. Read this section to learn more about black box functions in Noir.