rust_chain/vmapi/off_chain/
crypto.rs

1use crate::structs::*;
2
3use chaintester::{
4    get_vm_api_client,
5	interfaces::{
6		TApplySyncClient,
7	}
8};
9
10use core::slice;
11
12///
13pub 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
20///
21pub 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
28///
29pub 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
36///
37pub 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
44///
45pub 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
53///
54pub 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
62///
63pub 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
71///
72pub 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
80///
81pub 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
94///
95pub 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}