pathfinder_common/
hash.rs

1//! Contains the [FeltHash] trait and implementations thereof for the
2//! [Pedersen](PedersenHash) and [Poseidon](PoseidonHash) hashes.
3use pathfinder_crypto::hash::{pedersen_hash, poseidon_hash};
4use pathfinder_crypto::Felt;
5
6/// Allows for implementations to be generic over Felt hash functions.
7///
8/// Implemented by [PedersenHash] and [PoseidonHash].
9pub trait FeltHash {
10    fn hash(a: Felt, b: Felt) -> Felt;
11}
12
13/// Implements [Hash] for the [Starknet Pedersen hash](pedersen_hash).
14#[derive(Debug, Clone, Copy)]
15pub struct PedersenHash {}
16
17impl FeltHash for PedersenHash {
18    fn hash(a: Felt, b: Felt) -> Felt {
19        pedersen_hash(a, b)
20    }
21}
22
23/// Implements [Hash] for the [Starknet Poseidon hash](poseidon_hash).
24#[derive(Debug, Clone, Copy)]
25pub struct PoseidonHash;
26impl FeltHash for PoseidonHash {
27    fn hash(a: Felt, b: Felt) -> Felt {
28        poseidon_hash(a.into(), b.into()).into()
29    }
30}