multiversx_chain_vm/vm_hooks/vh_handler/
vh_crypto.rs1use crate::{crypto_functions, types::RawHandle, vm_hooks::VMHooksHandlerSource};
2
3pub trait VMHooksCrypto: VMHooksHandlerSource {
4 fn sha256_managed(&self, dest: RawHandle, data_handle: RawHandle) {
5 let mut types = self.m_types_lock();
8 let data = types.mb_get(data_handle);
9 let result_bytes = crypto_functions::sha256(data);
10 types.mb_set(dest, result_bytes[..].to_vec());
11 }
12
13 fn keccak256_managed(&self, dest: RawHandle, data_handle: RawHandle) {
14 let mut types = self.m_types_lock();
17 let data = types.mb_get(data_handle);
18 let result_bytes = crypto_functions::keccak256(data);
19 types.mb_set(dest, result_bytes[..].to_vec());
20 }
21
22 fn verify_ed25519_managed(&self, key: RawHandle, message: RawHandle, signature: RawHandle) {
24 let types = self.m_types_lock();
25 let key = types.mb_get(key);
26 let message = types.mb_get(message);
27 let signature = types.mb_get(signature);
28 let sig_valid = crypto_functions::verify_ed25519(key, message, signature);
29 if !sig_valid {
30 self.vm_error("invalid signature");
31 }
32 }
33}