use bitwarden_core::key_management::LocalUserDataKeyState;
use bitwarden_test::MemoryRepository;
#[cfg(feature = "internal")]
#[tokio::test]
async fn test_register_initialize_crypto() {
use std::num::NonZeroU32;
use bitwarden_core::{
Client, UserId,
key_management::{
EphemeralPinEnvelopeState, MasterPasswordUnlockData, UserKeyState,
account_cryptographic_state::WrappedAccountCryptographicState,
crypto::{InitUserCryptoMethod, InitUserCryptoRequest},
},
};
use bitwarden_crypto::Kdf;
let client = Client::new(None);
let user_key_repository = MemoryRepository::<UserKeyState>::default();
client
.platform()
.state()
.register_client_managed(std::sync::Arc::new(user_key_repository));
client
.platform()
.state()
.register_client_managed(std::sync::Arc::new(
MemoryRepository::<LocalUserDataKeyState>::default(),
));
client
.platform()
.state()
.register_client_managed(std::sync::Arc::new(MemoryRepository::<
EphemeralPinEnvelopeState,
>::default()));
let email = "test@bitwarden.com";
let password = "test123";
let kdf = Kdf::PBKDF2 {
iterations: NonZeroU32::new(600_000).unwrap(),
};
let register_response = client
.auth()
.make_register_keys(email.to_owned(), password.to_owned(), kdf.clone())
.unwrap();
client
.crypto()
.initialize_user_crypto(InitUserCryptoRequest {
user_id: Some(UserId::new_v4()),
kdf_params: kdf.clone(),
email: email.to_owned(),
account_cryptographic_state: WrappedAccountCryptographicState::V1 {
private_key: register_response.keys.private,
},
method: InitUserCryptoMethod::MasterPasswordUnlock {
password: password.to_owned(),
master_password_unlock: MasterPasswordUnlockData {
kdf,
master_key_wrapped_user_key: register_response.encrypted_user_key,
salt: email.to_owned(),
},
},
upgrade_token: None,
})
.await
.unwrap();
}