Skip to main content

memlink_runtime/
mhash.rs

1//! Method hashing for FFI-efficient dispatch.
2
3const FNV_PRIME: u32 = 16777619;
4const FNV_OFFSET_BASIS: u32 = 2166136261;
5
6pub fn fnv1a_hash(method_name: &str) -> u32 {
7    let mut hash = FNV_OFFSET_BASIS;
8
9    for byte in method_name.bytes() {
10        hash ^= byte as u32;
11        hash = hash.wrapping_mul(FNV_PRIME);
12    }
13
14    hash
15}
16
17pub fn fnv1a_hash_bytes(data: &[u8]) -> u32 {
18    let mut hash = FNV_OFFSET_BASIS;
19
20    for &byte in data {
21        hash ^= byte as u32;
22        hash = hash.wrapping_mul(FNV_PRIME);
23    }
24
25    hash
26}
27
28pub fn verify_method_id(method_id: u32, method_name: &str) -> bool {
29    fnv1a_hash(method_name) == method_id
30}