1use crate::vmapi::crypto;
2
3use crate::structs::*;
4
5use crate::serializer::{
6 Packer as _,
7 Encoder
8};
9
10use crate::vec;
11
12pub fn assert_sha256(data: &[u8], hash: &Checksum256) {
14 crypto::assert_sha256(data.as_ptr(), data.len() as u32, hash);
15}
16
17pub fn assert_sha1(data: &[u8], hash: &Checksum160) {
19 crypto::assert_sha1(data.as_ptr(), data.len() as u32, hash);
20}
21
22pub fn assert_sha512(data: &[u8], hash: &Checksum512) {
24 crypto::assert_sha512(data.as_ptr(), data.len() as u32, hash);
25}
26
27pub fn assert_ripemd160(data: &[u8], hash: &Checksum160) {
28 crypto::assert_ripemd160(data.as_ptr(), data.len() as u32, hash)
29}
30
31pub fn sha256(data: &[u8]) -> Checksum256 {
33 let mut hash: Checksum256 = Default::default();
34 crypto::sha256(data.as_ptr(), data.len() as u32, &mut hash);
35 return hash;
36}
37
38pub fn sha1( data: &[u8]) -> Checksum160 {
40 let mut hash: Checksum160 = Checksum160::default();
41 crypto::sha1(data.as_ptr(), data.len() as u32, &mut hash);
42 return hash;
43}
44
45pub fn sha512( data: &[u8]) -> Checksum512 {
47 let mut hash: Checksum512 = Checksum512::default();
48 crypto::sha512(data.as_ptr(), data.len() as u32, & mut hash);
49 return hash;
50}
51
52pub fn ripemd160(data: &[u8]) -> Checksum160 {
54 let mut hash: Checksum160 = Checksum160::default();
55 crypto::ripemd160(data.as_ptr(), data.len() as u32, &mut hash);
56 return hash;
57}
58
59pub fn recover_key( digest: &Checksum256 , sig: &Signature) -> PublicKey {
61 let mut pubkey = vec![0u8; 34];
62 let _sig = Encoder::pack(sig);
63
64 crypto::recover_key(digest, _sig.as_ptr(), _sig.len(), pubkey.as_mut_ptr(), pubkey.len());
65 let mut ret = PublicKey::default();
66 ret.unpack(&pubkey);
67 return ret;
68}
69
70pub fn assert_recover_key(digest: &Checksum256, sig: &Signature, pubkey: &PublicKey) {
72 let _sig = Encoder::pack(sig);
73 let _pubkey = Encoder::pack(pubkey);
74 crypto::assert_recover_key(digest, _sig.as_ptr(), _sig.len(), _pubkey.as_ptr(), _pubkey.len());
75}