1const 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}