oasis_contract_sdk/
env.rs1use oasis_contract_sdk_types::address::Address;
3
4use crate::types::{
5    env::{QueryRequest, QueryResponse},
6    InstanceId,
7};
8
9pub trait Env {
11    fn query<Q: Into<QueryRequest>>(&self, query: Q) -> QueryResponse;
13
14    fn address_for_instance(&self, instance_id: InstanceId) -> Address;
16
17    #[cfg(feature = "debug-utils")]
19    fn debug_print(&self, msg: &str);
20}
21
22#[derive(Debug, thiserror::Error)]
24pub enum CryptoError {
25    #[error("decryption or additional data authentication failed")]
26    DecryptionFailed,
27}
28
29pub trait Crypto {
31    fn ecdsa_recover(&self, input: &[u8]) -> [u8; 65];
33
34    fn signature_verify_ed25519(&self, key: &[u8], message: &[u8], signature: &[u8]) -> bool;
36
37    fn signature_verify_secp256k1(&self, key: &[u8], message: &[u8], signature: &[u8]) -> bool;
39
40    fn signature_verify_sr25519(
42        &self,
43        key: &[u8],
44        context: &[u8],
45        message: &[u8],
46        signature: &[u8],
47    ) -> bool;
48
49    fn x25519_derive_symmetric(&self, public_key: &[u8], private_key: &[u8]) -> [u8; 32];
51
52    fn deoxysii_seal(
54        &self,
55        key: &[u8],
56        nonce: &[u8],
57        message: &[u8],
58        additional_data: &[u8],
59    ) -> Result<Vec<u8>, CryptoError>;
60
61    fn deoxysii_open(
63        &self,
64        key: &[u8],
65        nonce: &[u8],
66        message: &[u8],
67        additional_data: &[u8],
68    ) -> Result<Vec<u8>, CryptoError>;
69
70    fn random_bytes(&self, pers: &[u8], dst: &mut [u8]) -> usize;
74}