dharitri_sc_wasm_adapter/api/
crypto_api_node.rs1use super::VmApiImpl;
2use dharitri_sc::{
3 api::{CryptoApi, CryptoApiImpl},
4 types::MessageHashType,
5};
6
7unsafe extern "C" {
8 fn managedSha256(inputHandle: i32, outputHandle: i32) -> i32;
9
10 fn managedKeccak256(inputHandle: i32, outputHandle: i32) -> i32;
11
12 fn managedRipemd160(inputHandle: i32, outputHandle: i32) -> i32;
13
14 fn managedVerifyBLS(keyHandle: i32, messageHandle: i32, sigHandle: i32) -> i32;
15
16 fn managedVerifyEd25519(keyHandle: i32, messageHandle: i32, sigHandle: i32) -> i32;
17
18 fn managedVerifySecp256k1(keyHandle: i32, messageHandle: i32, sigHandle: i32) -> i32;
19
20 fn managedVerifyCustomSecp256k1(
21 keyHandle: i32,
22 messageHandle: i32,
23 sigHandle: i32,
24 hashType: i32,
25 ) -> i32;
26
27 fn managedEncodeSecp256k1DerSignature(rHandle: i32, sHandle: i32, sigHandle: i32) -> i32;
28
29 fn managedVerifySecp256r1(keyHandle: i32, messageHandle: i32, sigHandle: i32) -> i32;
30
31 fn managedVerifyBLSSignatureShare(keyHandle: i32, messageHandle: i32, sigHandle: i32) -> i32;
32
33 fn managedVerifyBLSAggregatedSignature(
34 keyHandle: i32,
35 messageHandle: i32,
36 sigHandle: i32,
37 ) -> i32;
38}
39
40impl CryptoApi for VmApiImpl {
41 type CryptoApiImpl = VmApiImpl;
42
43 #[inline]
44 fn crypto_api_impl() -> Self::CryptoApiImpl {
45 VmApiImpl {}
46 }
47}
48
49impl CryptoApiImpl for VmApiImpl {
50 fn sha256_managed(
51 &self,
52 result_handle: Self::ManagedBufferHandle,
53 data_handle: Self::ManagedBufferHandle,
54 ) {
55 unsafe {
56 let _ = managedSha256(data_handle, result_handle);
57 }
58 }
59
60 fn keccak256_managed(
61 &self,
62 result_handle: Self::ManagedBufferHandle,
63 data_handle: Self::ManagedBufferHandle,
64 ) {
65 unsafe {
66 let _ = managedKeccak256(data_handle, result_handle);
67 }
68 }
69
70 #[inline]
71 fn ripemd160_managed(
72 &self,
73 dest: Self::ManagedBufferHandle,
74 data_handle: Self::ManagedBufferHandle,
75 ) {
76 unsafe {
77 let _ = managedRipemd160(data_handle, dest);
78 }
79 }
80
81 #[inline]
82 fn verify_bls_managed(
83 &self,
84 key: Self::ManagedBufferHandle,
85 message: Self::ManagedBufferHandle,
86 signature: Self::ManagedBufferHandle,
87 ) {
88 unsafe {
89 let _ = managedVerifyBLS(key, message, signature);
90 }
91 }
92
93 #[inline]
94 fn verify_ed25519_managed(
95 &self,
96 key: Self::ManagedBufferHandle,
97 message: Self::ManagedBufferHandle,
98 signature: Self::ManagedBufferHandle,
99 ) {
100 unsafe {
101 managedVerifyEd25519(key, message, signature);
102 }
103 }
104
105 #[inline]
106 fn verify_secp256k1_managed(
107 &self,
108 key: Self::ManagedBufferHandle,
109 message: Self::ManagedBufferHandle,
110 signature: Self::ManagedBufferHandle,
111 ) -> bool {
112 unsafe { managedVerifySecp256k1(key, message, signature) == 0 }
113 }
114
115 #[inline]
116 fn verify_custom_secp256k1_managed(
117 &self,
118 key: Self::ManagedBufferHandle,
119 message: Self::ManagedBufferHandle,
120 signature: Self::ManagedBufferHandle,
121 hash_type: MessageHashType,
122 ) -> bool {
123 unsafe {
124 managedVerifyCustomSecp256k1(key, message, signature, hash_type.as_u8() as i32) == 0
125 }
126 }
127
128 fn encode_secp256k1_der_signature_managed(
129 &self,
130 r: Self::ManagedBufferHandle,
131 s: Self::ManagedBufferHandle,
132 dest_sig_handle: Self::ManagedBufferHandle,
133 ) {
134 unsafe {
135 let _ = managedEncodeSecp256k1DerSignature(r, s, dest_sig_handle);
136 }
137 }
138
139 fn verify_secp256r1_managed(
140 &self,
141 key: Self::ManagedBufferHandle,
142 message: Self::ManagedBufferHandle,
143 signature: Self::ManagedBufferHandle,
144 ) {
145 unsafe {
146 let _ = managedVerifySecp256r1(key, message, signature);
147 }
148 }
149
150 fn verify_bls_signature_share_managed(
151 &self,
152 key: Self::ManagedBufferHandle,
153 message: Self::ManagedBufferHandle,
154 signature: Self::ManagedBufferHandle,
155 ) {
156 unsafe {
157 let _ = managedVerifyBLSSignatureShare(key, message, signature);
158 }
159 }
160
161 fn verify_bls_aggregated_signature_managed(
162 &self,
163 key: Self::ManagedBufferHandle,
164 message: Self::ManagedBufferHandle,
165 signature: Self::ManagedBufferHandle,
166 ) {
167 unsafe {
168 let _ = managedVerifyBLSAggregatedSignature(key, message, signature);
169 }
170 }
171}