dharitri_sc_wasm_adapter/api/
crypto_api_node.rs

1use 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}