Skip to content

Commit 0cc7dbc

Browse files
committed
feat : impl pedersen hash_single
1 parent 1c90543 commit 0cc7dbc

File tree

1 file changed

+21
-2
lines changed

1 file changed

+21
-2
lines changed

crates/starknet-types-core/src/hash/pedersen.rs

+21-2
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ impl StarkHash for Pedersen {
1717

1818
/// Computes the Pedersen hash of an array of Felts, as defined
1919
/// in <https://docs.starknet.io/documentation/architecture_and_concepts/Hashing/hash-functions/#array_hashing.>
20+
///
21+
/// Warning: there is room for collision as:
22+
/// Pedersen::hash_array([value]) and Pedersen::hash(Pedersen::hash(0, value), 1) will return the same values
2023
fn hash_array(felts: &[Felt]) -> Felt {
2124
let data_len = Felt::from(felts.len());
2225
let current_hash: FieldElement<Stark252PrimeField> = felts
@@ -26,16 +29,32 @@ impl StarkHash for Pedersen {
2629
});
2730
Felt(PedersenStarkCurve::hash(&current_hash, &data_len.0))
2831
}
29-
32+
33+
/// Computes the Pedersen hash of a single Felt
34+
///
35+
/// Warning: there is room for collision as:
36+
/// Pedersen::hash_singlevalue) and Pedersen::hash(value, 0) will return the same values
3037
fn hash_single(felt: &Felt) -> Felt {
31-
todo!()
38+
Felt(PedersenStarkCurve::hash(&felt.0, &Felt::from(0).0))
3239
}
3340
}
3441

3542
#[cfg(test)]
3643
mod tests {
3744
use super::*;
3845

46+
#[test]
47+
fn test_pedersen_hash_single() {
48+
let x =
49+
Felt::from_hex("0x03d937c035c878245caf64531a5756109c53068da139362728feb561405371cb")
50+
.unwrap();
51+
assert_eq!(
52+
Pedersen::hash_single(&x),
53+
Felt::from_hex("0x460ded9dacd215bcfc43f1b30b2a02690378e00f82a2283617d47d948c7b7f1")
54+
.unwrap()
55+
)
56+
}
57+
3958
#[test]
4059
fn test_pedersen_hash() {
4160
let x =

0 commit comments

Comments
 (0)