1pub mod error;
17pub mod hash;
18pub mod encrypt;
19pub mod rng;
20pub mod avx2_inline;
21
22
23#[unsafe(no_mangle)]
26pub extern "C" fn tequel_hash_raw(data: *const u8, len: usize, out: *mut u8) {
27 let input = unsafe { std::slice::from_raw_parts(data, len) };
28
29 let mut teq = hash::TequelHash::new();
30 let hash_result = teq.tqlhash_raw(input);
31
32 unsafe {
33 std::ptr::copy_nonoverlapping(hash_result.as_ptr(), out, 48);
34 }
35}
36
37
38#[unsafe(no_mangle)]
39pub extern "C" fn isv_tequel_hash_raw(hash_ptr: *const u8, input_ptr: *const u8, input_len: usize) -> bool {
40
41 let hash = unsafe { assert!(!hash_ptr.is_null()); std::slice::from_raw_parts(hash_ptr, 48) };
42 let input = unsafe { assert!(!input_ptr.is_null()); std::slice::from_raw_parts(input_ptr, input_len) };
43
44 let mut teq = hash::TequelHash::new();
45 let curr_hash = teq.tqlhash_raw(input);
46
47 let mut result = 0u8;
48
49 for i in 0..48 {
50 result |= curr_hash[i] ^ hash[i];
51 }
52
53 result == 0
54
55}