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