rust_chain/vmapi/off_chain/
crypto.rs1use crate::structs::*;
2
3use chaintester::{
4 get_vm_api_client,
5 interfaces::{
6 TApplySyncClient,
7 }
8};
9
10use core::slice;
11
12pub fn assert_sha256( data: *const u8, length: u32, hash: *const Checksum256) {
14 unsafe {
15 let _data = slice::from_raw_parts(data, length as usize);
16 get_vm_api_client().assert_sha256(_data.into(), (*hash).data.into()).unwrap()
17 }
18}
19
20pub fn assert_sha1( data: *const u8, length: u32, hash: *const Checksum160) {
22 unsafe {
23 let _data = slice::from_raw_parts(data, length as usize);
24 get_vm_api_client().assert_sha1(_data.into(), (*hash).data.into()).unwrap()
25 }
26}
27
28pub fn assert_sha512(data: *const u8, length: u32, hash: *const Checksum512) {
30 unsafe {
31 let _data = slice::from_raw_parts(data, length as usize);
32 get_vm_api_client().assert_sha512(_data.into(), (*hash).data.into()).unwrap()
33 }
34}
35
36pub fn assert_ripemd160(data: *const u8, length: u32, hash: *const Checksum160) {
38 unsafe {
39 let _data = slice::from_raw_parts(data, length as usize);
40 get_vm_api_client().assert_ripemd160(_data.into(), (*hash).data.into()).unwrap()
41 }
42}
43
44pub fn sha256( data: *const u8, length: u32, hash: *mut Checksum256 ) {
46 unsafe {
47 let _data = slice::from_raw_parts(data, length as usize);
48 let _hash = get_vm_api_client().sha256(_data.into()).unwrap();
49 crate::vmapi::eosio::memcpy((*hash).data.as_ptr() as *mut u8, _hash.as_ptr(), 32);
50 }
51}
52
53pub fn sha1(data: *const u8, length: u32, hash: *mut Checksum160) {
55 unsafe {
56 let _data = slice::from_raw_parts(data, length as usize);
57 let _hash = get_vm_api_client().sha1(_data.into()).unwrap();
58 crate::vmapi::eosio::memcpy((*hash).data.as_ptr() as *mut u8, _hash.as_ptr(), 20);
59 }
60}
61
62pub fn sha512(data: *const u8, length: u32, hash: *mut Checksum512 ) {
64 unsafe {
65 let _data = slice::from_raw_parts(data, length as usize);
66 let _hash = get_vm_api_client().sha512(_data.into()).unwrap();
67 crate::vmapi::eosio::memcpy((*hash).data.as_ptr() as *mut u8, _hash.as_ptr(), 64);
68 }
69}
70
71pub fn ripemd160(data: *const u8, length: u32, hash: *mut Checksum160 ) {
73 unsafe {
74 let _data = slice::from_raw_parts(data, length as usize);
75 let _hash = get_vm_api_client().ripemd160(_data.into()).unwrap();
76 crate::vmapi::eosio::memcpy((*hash).data.as_ptr() as *mut u8, _hash.as_ptr(), 20);
77 }
78}
79
80pub fn recover_key( digest: *const Checksum256 , sig: *const u8, siglen: usize, pubkey: *mut u8, publen: usize ) -> i32 {
82 if publen != 34 {
83 panic!("invalid pub key length");
84 }
85
86 unsafe {
87 let _sig = slice::from_raw_parts(sig, siglen as usize);
88 let _pubkey = get_vm_api_client().recover_key((*digest).data.into(), _sig.into()).unwrap();
89 crate::vmapi::eosio::memcpy(pubkey, _pubkey.as_ptr(), _pubkey.len());
90 _pubkey.len() as i32
91 }
92}
93
94pub fn assert_recover_key(digest: *const Checksum256, sig: *const u8, siglen: usize, pubkey: *const u8, pubkey_len: usize) {
96 if pubkey_len != 34 {
97 panic!("invalid pub key length");
98 }
99
100 unsafe {
101 let _sig = slice::from_raw_parts(sig, siglen as usize);
102 let _pubkey = slice::from_raw_parts(pubkey, pubkey_len as usize);
103 get_vm_api_client().assert_recover_key((*digest).data.into(), _sig.into(), _pubkey.into()).unwrap();
104 }
105}