bitwarden_core/auth/
key_connector.rs1use bitwarden_crypto::{CryptoError, MasterKey, RsaKeyPair};
2
3#[allow(missing_docs)]
4#[cfg_attr(feature = "uniffi", derive(uniffi::Record))]
5pub struct KeyConnectorResponse {
6 pub master_key: String,
7 pub encrypted_user_key: String,
8 pub keys: RsaKeyPair,
9}
10
11pub(super) fn make_key_connector_keys(
12 mut rng: impl rand::RngCore,
13) -> Result<KeyConnectorResponse, CryptoError> {
14 let master_key = MasterKey::generate(&mut rng);
15 let (user_key, encrypted_user_key) = master_key.make_user_key()?;
16 let keys = user_key.make_key_pair()?;
17
18 Ok(KeyConnectorResponse {
19 master_key: master_key.to_base64(),
20 encrypted_user_key: encrypted_user_key.to_string(),
21 keys,
22 })
23}
24
25#[cfg(test)]
26mod tests {
27 use rand::SeedableRng;
28 use rand_chacha::ChaCha8Rng;
29
30 use super::*;
31
32 #[test]
33 fn test_make_key_connector_keys() {
34 let mut rng = ChaCha8Rng::from_seed([0u8; 32]);
35
36 let result = make_key_connector_keys(&mut rng).unwrap();
37
38 assert_eq!(
39 result.master_key,
40 "PgDvL4lfQNZ/W7joHwmloSyEDsPOmn87GBvhiO9xGh4="
41 );
42 }
43}