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