multiversx_sc/api/
crypto_api.rs

1use 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    /// Note: the signature is minimum 2 bytes in length,
57    /// the second byte encodes the length of the remaining signature bytes.
58    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}