1use crate::imports;
12
13pub fn sha256(input: Vec<u8>) -> Vec<u8>{
15 let input_ptr = input.as_ptr();
16
17 let mut val_ptr: u32 = 0;
18 let val_ptr_ptr = &mut val_ptr;
19
20 unsafe {
21 imports::sha256(input_ptr, input.len() as u32, val_ptr_ptr);
22 Vec::<u8>::from_raw_parts(val_ptr as *mut u8, 32, 32)
23 }
24}
25
26pub fn keccak256(input: Vec<u8>) -> Vec<u8>{
28 let input_ptr = input.as_ptr();
29
30 let mut val_ptr: u32 = 0;
31 let val_ptr_ptr = &mut val_ptr;
32
33 unsafe {
34 imports::keccak256(input_ptr, input.len() as u32, val_ptr_ptr);
35 Vec::<u8>::from_raw_parts(val_ptr as *mut u8, 32, 32)
36 }
37}
38
39pub fn ripemd(input: Vec<u8>) -> Vec<u8>{
41 let input_ptr = input.as_ptr();
42
43 let mut val_ptr: u32 = 0;
44 let val_ptr_ptr = &mut val_ptr;
45
46 unsafe {
47 imports::ripemd(input_ptr, input.len() as u32, val_ptr_ptr);
48 Vec::<u8>::from_raw_parts(val_ptr as *mut u8, 20, 20)
49 }
50}
51
52pub fn verify_ed25519_signature(input: Vec<u8>, signature: Vec<u8>, address: Vec<u8>) -> bool {
55 let input_ptr = input.as_ptr();
56 let signature_ptr = signature.as_ptr();
57 let address_ptr = address.as_ptr();
58
59 let value;
60 unsafe {
61 value = imports::verify_ed25519_signature(input_ptr, input.len() as u32, signature_ptr, address_ptr);
62 }
63
64 value != 0
65}