StarknetByExample
StarknetByExample copied to clipboard
feat: use starknet_keccak
The following code snippet can be used to calculate the starknet_keccak of a u256 word. The input must have 32 characters. If the input is shoter, it needs to be most significant byte aligned first.
fn starknet_keccak(word: u256) -> felt252 {
let mut input: Array::<u256> = Default::default();
input.append(word);
let res_le = keccak_u256s_be_inputs(input.span());
let low: felt252 = integer::u128_byte_reverse(res_le.high).into();
let high: felt252 = (integer::u128_byte_reverse(res_le.low) & 0x3ffffffffffffffffffffffffffffff)
.into();
high * 0x100000000000000000000000000000000 + low
}
fn test_starknet_keccak() {
let res = keccak::starknet_keccak('01234567890123456789012345678901');
assert_eq(res, 0x2f6f0bb62127422171f029ef8588af3a45d58989134675112c2acc78dd16078, res)
}
Now possible with https://github.com/starkware-libs/cairo/commit/0275aa023ff81b490c58f6e1fd249a80663e35d8
blocked: not included in 2.0.x release
cairo_keccak
is now available in 2.1.0 release.