lair_keystore_api/lair_api/
crypto_box_xsalsa_by_sign_pub_key.rs

1use super::*;
2
3/// Request "crypto_box" encryption.
4#[derive(Debug, serde::Serialize, serde::Deserialize)]
5#[serde(rename_all = "camelCase")]
6pub struct LairApiReqCryptoBoxXSalsaBySignPubKey {
7    /// Msg id to relate request / response.
8    pub msg_id: Arc<str>,
9
10    /// The pub key representing the sender.
11    pub sender_pub_key: Ed25519PubKey,
12
13    /// The pub key of the recipient.
14    pub recipient_pub_key: Ed25519PubKey,
15
16    /// If this new seed is to be deep_locked, the passphrase for that.
17    #[serde(skip_serializing_if = "Option::is_none", default)]
18    pub deep_lock_passphrase: Option<SecretDataSized<64, 81>>,
19
20    /// The data to encrypt
21    pub data: Arc<[u8]>,
22}
23
24impl LairApiReqCryptoBoxXSalsaBySignPubKey {
25    /// Make a crypto_box request.
26    pub fn new(
27        sender_pub_key: Ed25519PubKey,
28        recipient_pub_key: Ed25519PubKey,
29        deep_lock_passphrase: Option<SecretDataSized<64, 81>>,
30        data: Arc<[u8]>,
31    ) -> Self {
32        Self {
33            msg_id: new_msg_id(),
34            sender_pub_key,
35            recipient_pub_key,
36            deep_lock_passphrase,
37            data,
38        }
39    }
40}
41
42impl std::convert::TryFrom<LairApiEnum>
43    for LairApiReqCryptoBoxXSalsaBySignPubKey
44{
45    type Error = one_err::OneErr;
46
47    fn try_from(e: LairApiEnum) -> Result<Self, Self::Error> {
48        if let LairApiEnum::ReqCryptoBoxXSalsaBySignPubKey(s) = e {
49            Ok(s)
50        } else {
51            Err(format!("Invalid response type: {e:?}").into())
52        }
53    }
54}
55
56impl AsLairCodec for LairApiReqCryptoBoxXSalsaBySignPubKey {
57    fn into_api_enum(self) -> LairApiEnum {
58        LairApiEnum::ReqCryptoBoxXSalsaBySignPubKey(self)
59    }
60}
61
62/// A "crypto_box" encryption response.
63#[derive(Debug, serde::Serialize, serde::Deserialize)]
64#[serde(rename_all = "camelCase")]
65#[non_exhaustive]
66pub struct LairApiResCryptoBoxXSalsaBySignPubKey {
67    /// Msg id to relate request / response.
68    pub msg_id: Arc<str>,
69
70    /// The generated nonce.
71    pub nonce: [u8; 24],
72
73    /// The encrypted bytes.
74    pub cipher: Arc<[u8]>,
75}
76
77impl std::convert::TryFrom<LairApiEnum>
78    for LairApiResCryptoBoxXSalsaBySignPubKey
79{
80    type Error = one_err::OneErr;
81
82    fn try_from(e: LairApiEnum) -> Result<Self, Self::Error> {
83        if let LairApiEnum::ResCryptoBoxXSalsaBySignPubKey(s) = e {
84            Ok(s)
85        } else {
86            Err(format!("Invalid response type: {e:?}").into())
87        }
88    }
89}
90
91impl AsLairCodec for LairApiResCryptoBoxXSalsaBySignPubKey {
92    fn into_api_enum(self) -> LairApiEnum {
93        LairApiEnum::ResCryptoBoxXSalsaBySignPubKey(self)
94    }
95}
96
97impl AsLairRequest for LairApiReqCryptoBoxXSalsaBySignPubKey {
98    type Response = LairApiResCryptoBoxXSalsaBySignPubKey;
99}
100
101impl AsLairResponse for LairApiResCryptoBoxXSalsaBySignPubKey {
102    type Request = LairApiReqCryptoBoxXSalsaBySignPubKey;
103}