multiversx_sc/api/
crypto_api.rs1use crate::types::MessageHashType;
2
3use super::{HandleTypeInfo, ManagedTypeApi, ManagedTypeApiImpl};
4
5pub const SHA256_RESULT_LEN: usize = 32;
6pub const KECCAK256_RESULT_LEN: usize = 32;
7pub const RIPEMD_RESULT_LEN: usize = 20;
8pub const ED25519_KEY_BYTE_LEN: usize = 32;
9pub const ED25519_SIGNATURE_BYTE_LEN: usize = 64;
10
11pub trait CryptoApi: ManagedTypeApi {
12 type CryptoApiImpl: CryptoApiImpl
13 + HandleTypeInfo<
14 ManagedBufferHandle = Self::ManagedBufferHandle,
15 BigIntHandle = Self::BigIntHandle,
16 BigFloatHandle = Self::BigFloatHandle,
17 EllipticCurveHandle = Self::EllipticCurveHandle,
18 >;
19
20 fn crypto_api_impl() -> Self::CryptoApiImpl;
21}
22
23pub trait CryptoApiImpl: ManagedTypeApiImpl {
24 fn sha256_managed(
25 &self,
26 dest: Self::ManagedBufferHandle,
27 data_handle: Self::ManagedBufferHandle,
28 );
29
30 fn keccak256_managed(
31 &self,
32 dest: Self::ManagedBufferHandle,
33 data_handle: Self::ManagedBufferHandle,
34 );
35
36 fn ripemd160_managed(
37 &self,
38 dest: Self::ManagedBufferHandle,
39 data_handle: Self::ManagedBufferHandle,
40 );
41
42 fn verify_bls_managed(
43 &self,
44 key: Self::ManagedBufferHandle,
45 message: Self::ManagedBufferHandle,
46 signature: Self::ManagedBufferHandle,
47 );
48
49 fn verify_ed25519_managed(
50 &self,
51 key: Self::ManagedBufferHandle,
52 message: Self::ManagedBufferHandle,
53 signature: Self::ManagedBufferHandle,
54 );
55
56 fn verify_secp256k1_managed(
59 &self,
60 key: Self::ManagedBufferHandle,
61 message: Self::ManagedBufferHandle,
62 signature: Self::ManagedBufferHandle,
63 ) -> bool;
64
65 fn verify_custom_secp256k1_managed(
66 &self,
67 key: Self::ManagedBufferHandle,
68 message: Self::ManagedBufferHandle,
69 signature: Self::ManagedBufferHandle,
70 hash_type: MessageHashType,
71 ) -> bool;
72
73 fn encode_secp256k1_der_signature_managed(
74 &self,
75 r: Self::ManagedBufferHandle,
76 s: Self::ManagedBufferHandle,
77 dest: Self::ManagedBufferHandle,
78 );
79
80 fn verify_secp256r1_managed(
81 &self,
82 key: Self::ManagedBufferHandle,
83 message: Self::ManagedBufferHandle,
84 signature: Self::ManagedBufferHandle,
85 );
86
87 fn verify_bls_signature_share_managed(
88 &self,
89 key: Self::ManagedBufferHandle,
90 message: Self::ManagedBufferHandle,
91 signature: Self::ManagedBufferHandle,
92 );
93
94 fn verify_bls_aggregated_signature_managed(
95 &self,
96 key: Self::ManagedBufferHandle,
97 message: Self::ManagedBufferHandle,
98 signature: Self::ManagedBufferHandle,
99 );
100}