bitwarden_core/key_management/
user_decryption.rs

1use bitwarden_api_api::models::UserDecryptionResponseModel;
2use serde::{Deserialize, Serialize};
3
4use crate::{
5    auth::UserDecryptionOptionsResponseModel,
6    key_management::master_password::{MasterPasswordError, MasterPasswordUnlockData},
7};
8
9/// Represents data required to decrypt user's vault.
10/// Currently, this is only used for master password unlock.
11#[allow(dead_code)]
12#[derive(Serialize, Deserialize, Debug)]
13#[serde(rename_all = "camelCase", deny_unknown_fields)]
14struct UserDecryptionData {
15    /// Optional master password unlock data.
16    master_password_unlock: Option<MasterPasswordUnlockData>,
17}
18
19impl TryFrom<UserDecryptionResponseModel> for UserDecryptionData {
20    type Error = MasterPasswordError;
21
22    fn try_from(response: UserDecryptionResponseModel) -> Result<Self, Self::Error> {
23        let master_password_unlock = response
24            .master_password_unlock
25            .map(|response| MasterPasswordUnlockData::try_from(*response))
26            .transpose()?;
27
28        Ok(UserDecryptionData {
29            master_password_unlock,
30        })
31    }
32}
33
34impl TryFrom<UserDecryptionOptionsResponseModel> for UserDecryptionData {
35    type Error = MasterPasswordError;
36
37    fn try_from(response: UserDecryptionOptionsResponseModel) -> Result<Self, Self::Error> {
38        let master_password_unlock = response
39            .master_password_unlock
40            .map(MasterPasswordUnlockData::try_from)
41            .transpose()?;
42
43        Ok(UserDecryptionData {
44            master_password_unlock,
45        })
46    }
47}