multiversx_chain_vm/
crypto_functions.rs1use sha2::Sha256;
2use sha3::{Digest, Keccak256};
3
4pub const SHA256_RESULT_LEN: usize = 32;
5pub const KECCAK256_RESULT_LEN: usize = 32;
6
7pub fn sha256(data: &[u8]) -> [u8; SHA256_RESULT_LEN] {
8 let mut hasher = Sha256::new();
9 hasher.update(data);
10 hasher.finalize().into()
11}
12
13pub fn keccak256(data: &[u8]) -> [u8; KECCAK256_RESULT_LEN] {
14 let mut hasher = Keccak256::new();
15 hasher.update(data);
16 hasher.finalize().into()
17}
18
19pub fn verify_ed25519(key: &[u8], message: &[u8], signature: &[u8]) -> bool {
20 use ed25519_dalek::{Signature, Verifier, VerifyingKey};
21
22 let key_32: [u8; 32] = if let Ok(key_32) = key.try_into() {
23 key_32
24 } else {
25 return false;
26 };
27 let signature_64: [u8; 64] = if let Ok(signature_64) = signature.try_into() {
28 signature_64
29 } else {
30 return false;
31 };
32
33 let verifying_key_result = VerifyingKey::from_bytes(&key_32);
34 let verifying_key = if let Ok(verifying_key) = verifying_key_result {
35 verifying_key
36 } else {
37 return false;
38 };
39
40 let sig = Signature::from_bytes(&signature_64);
41
42 let result = verifying_key.verify(message, &sig);
43 result.is_ok()
44}