1use alloc::string::{String, ToString};
2use alloc::vec::Vec;
3
4use sentc_crypto_common::group::GroupHmacData;
5use sentc_crypto_common::user::{UserPublicKeyData, UserVerifyKeyData};
6use sentc_crypto_common::{DeviceId, SymKeyId, UserId};
7use sentc_crypto_utils::cryptomat::{PkWrapper, SignKWrapper, SkWrapper, SymKeyWrapper, VerifyKWrapper};
8pub use sentc_crypto_utils::user::DeviceKeyDataExport;
9use sentc_crypto_utils::user::DeviceKeyDataInt;
10use serde::{Deserialize, Serialize};
11
12use crate::entities::group::GroupOutDataHmacKeyExport;
13use crate::{sdk_utils, SdkError};
14
15pub struct UserKeyDataInt<S: SymKeyWrapper, Sk: SkWrapper, Pk: PkWrapper, SiK: SignKWrapper, Vk: VerifyKWrapper>
16{
17 pub group_key: S,
18 pub private_key: Sk,
19 pub public_key: Pk,
20 pub time: u128,
21 pub sign_key: SiK,
22 pub verify_key: Vk,
23 pub exported_public_key: UserPublicKeyData,
24 pub exported_verify_key: UserVerifyKeyData,
25}
26
27pub struct UserDataInt<S: SymKeyWrapper, Sk: SkWrapper, Pk: PkWrapper, SiK: SignKWrapper, Vk: VerifyKWrapper>
28{
29 pub jwt: String,
30 pub refresh_token: String,
31 pub user_id: UserId,
32 pub device_id: DeviceId,
33
34 pub user_keys: Vec<UserKeyDataInt<S, Sk, Pk, SiK, Vk>>,
35 pub device_keys: DeviceKeyDataInt<Sk, Pk, SiK, Vk>,
36 pub hmac_keys: Vec<GroupHmacData>,
37}
38
39#[derive(Serialize, Deserialize)]
43pub struct UserKeyDataExport
44{
45 pub private_key: String,
46 pub public_key: String,
47 pub group_key: String,
48 pub time: u128,
49 pub group_key_id: SymKeyId,
50 pub sign_key: String,
51 pub verify_key: String,
52 pub exported_public_key: String,
53 pub exported_public_key_sig_key_id: Option<String>,
54 pub exported_verify_key: String,
55}
56
57impl<S: SymKeyWrapper, Sk: SkWrapper, Pk: PkWrapper, SiK: SignKWrapper, Vk: VerifyKWrapper> TryFrom<UserKeyDataInt<S, Sk, Pk, SiK, Vk>>
58 for UserKeyDataExport
59{
60 type Error = SdkError;
61
62 fn try_from(value: UserKeyDataInt<S, Sk, Pk, SiK, Vk>) -> Result<Self, Self::Error>
63 {
64 let group_key_id = value.group_key.get_id().to_string();
65
66 Ok(Self {
67 private_key: value.private_key.to_string()?,
68 public_key: value.public_key.to_string()?,
69 group_key_id,
70 group_key: value.group_key.to_string()?,
71 time: value.time,
72 sign_key: value.sign_key.to_string()?,
73 verify_key: value.verify_key.to_string()?,
74 exported_public_key: value
75 .exported_public_key
76 .to_string()
77 .map_err(|_e| SdkError::JsonToStringFailed)?,
78 exported_public_key_sig_key_id: value.exported_public_key.public_key_sig_key_id,
79 exported_verify_key: value
80 .exported_verify_key
81 .to_string()
82 .map_err(|_e| SdkError::JsonToStringFailed)?,
83 })
84 }
85}
86
87impl<'a, S: SymKeyWrapper, Sk: SkWrapper, Pk: PkWrapper, SiK: SignKWrapper, Vk: VerifyKWrapper> TryFrom<&'a UserKeyDataInt<S, Sk, Pk, SiK, Vk>>
88 for UserKeyDataExport
89{
90 type Error = SdkError;
91
92 fn try_from(value: &'a UserKeyDataInt<S, Sk, Pk, SiK, Vk>) -> Result<Self, Self::Error>
93 {
94 let group_key_id = value.group_key.get_id().to_string();
95
96 Ok(Self {
97 private_key: value.private_key.to_string_ref()?,
98 public_key: value.public_key.to_string_ref()?,
99 group_key_id,
100 group_key: value.group_key.to_string_ref()?,
101 time: value.time,
102 sign_key: value.sign_key.to_string_ref()?,
103 verify_key: value.verify_key.to_string_ref()?,
104 exported_public_key: value
105 .exported_public_key
106 .to_string()
107 .map_err(|_e| SdkError::JsonToStringFailed)?,
108 exported_public_key_sig_key_id: value.exported_public_key.public_key_sig_key_id.clone(),
109 exported_verify_key: value
110 .exported_verify_key
111 .to_string()
112 .map_err(|_e| SdkError::JsonToStringFailed)?,
113 })
114 }
115}
116
117impl<S: SymKeyWrapper, Sk: SkWrapper, Pk: PkWrapper, SiK: SignKWrapper, Vk: VerifyKWrapper> TryInto<UserKeyDataInt<S, Sk, Pk, SiK, Vk>>
118 for UserKeyDataExport
119{
120 type Error = SdkError;
121
122 fn try_into(self) -> Result<UserKeyDataInt<S, Sk, Pk, SiK, Vk>, Self::Error>
123 {
124 Ok(UserKeyDataInt {
125 group_key: self
126 .group_key
127 .parse()
128 .map_err(|_| SdkError::Util(sdk_utils::error::SdkUtilError::ImportSymmetricKeyFailed))?,
129 private_key: self
130 .private_key
131 .parse()
132 .map_err(|_| SdkError::Util(sdk_utils::error::SdkUtilError::JsonToStringFailed))?,
133 public_key: self
134 .public_key
135 .parse()
136 .map_err(|_| SdkError::Util(sdk_utils::error::SdkUtilError::JsonToStringFailed))?,
137 time: self.time,
138 sign_key: self
139 .sign_key
140 .parse()
141 .map_err(|_| SdkError::Util(sdk_utils::error::SdkUtilError::ImportingSignKeyFailed))?,
142 verify_key: self
143 .verify_key
144 .parse()
145 .map_err(|_| SdkError::Util(sdk_utils::error::SdkUtilError::ImportVerifyKeyFailed))?,
146 exported_public_key: UserPublicKeyData::from_string(&self.exported_public_key)
147 .map_err(|_| SdkError::Util(sdk_utils::error::SdkUtilError::ImportingKeyFromPemFailed))?,
148 exported_verify_key: UserVerifyKeyData::from_string(&self.exported_verify_key)
149 .map_err(|_| SdkError::Util(sdk_utils::error::SdkUtilError::ImportingKeyFromPemFailed))?,
150 })
151 }
152}
153
154#[derive(Serialize, Deserialize)]
157pub struct UserDataExport
158{
159 pub user_keys: Vec<UserKeyDataExport>,
160 pub device_keys: DeviceKeyDataExport,
161 pub jwt: String,
162 pub refresh_token: String,
163 pub user_id: UserId,
164 pub device_id: DeviceId,
165 pub hmac_keys: Vec<GroupOutDataHmacKeyExport>,
166}
167
168impl<S: SymKeyWrapper, Sk: SkWrapper, Pk: PkWrapper, SiK: SignKWrapper, Vk: VerifyKWrapper> TryFrom<UserDataInt<S, Sk, Pk, SiK, Vk>>
169 for UserDataExport
170{
171 type Error = SdkError;
172
173 fn try_from(value: UserDataInt<S, Sk, Pk, SiK, Vk>) -> Result<Self, Self::Error>
174 {
175 Ok(Self {
176 user_keys: value
177 .user_keys
178 .into_iter()
179 .map(|k| k.try_into())
180 .collect::<Result<_, SdkError>>()?,
181 device_keys: value.device_keys.try_into()?,
182 jwt: value.jwt,
183 refresh_token: value.refresh_token,
184 user_id: value.user_id,
185 device_id: value.device_id,
186 hmac_keys: value
187 .hmac_keys
188 .into_iter()
189 .map(|k| k.try_into())
190 .collect::<Result<_, SdkError>>()?,
191 })
192 }
193}