Skip to content

Commit 25d1907

Browse files
committed
Typesafe base64 handling
1 parent 4445aec commit 25d1907

File tree

13 files changed

+99
-42
lines changed

13 files changed

+99
-42
lines changed

crates/bitwarden-core/src/auth/auth_client.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ use crate::{
2626
RegisterRequest,
2727
},
2828
client::encryption_settings::EncryptionSettingsError,
29+
Base64String,
2930
};
3031
use crate::{
3132
auth::{login::LoginError, renew::renew_token},
@@ -89,7 +90,7 @@ impl AuthClient {
8990
pub fn make_register_tde_keys(
9091
&self,
9192
email: String,
92-
org_public_key: String,
93+
org_public_key: Base64String,
9394
remember_device: bool,
9495
) -> Result<RegisterTdeKeyResponse, EncryptionSettingsError> {
9596
make_register_tde_keys(&self.client, email, org_public_key, remember_device)
@@ -172,7 +173,7 @@ impl AuthClient {
172173
#[allow(missing_docs)]
173174
pub fn approve_auth_request(
174175
&self,
175-
public_key: String,
176+
public_key: Base64String,
176177
) -> Result<UnsignedSharedKey, ApproveAuthRequestError> {
177178
approve_auth_request(&self.client, public_key)
178179
}

crates/bitwarden-core/src/auth/auth_request.rs

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use bitwarden_crypto::{EncString, SymmetricCryptoKey};
88
use thiserror::Error;
99

1010
#[cfg(feature = "internal")]
11-
use crate::client::encryption_settings::EncryptionSettingsError;
11+
use crate::{client::encryption_settings::EncryptionSettingsError, Base64String};
1212
use crate::{key_management::SymmetricKeyId, Client, VaultLockedError};
1313

1414
/// Response for `new_auth_request`.
@@ -49,25 +49,25 @@ pub(crate) fn new_auth_request(email: &str) -> Result<AuthRequestResponse, Crypt
4949
/// Decrypt the user key using the private key generated previously.
5050
#[cfg(feature = "internal")]
5151
pub(crate) fn auth_request_decrypt_user_key(
52-
private_key: String,
52+
private_key: Base64String,
5353
user_key: UnsignedSharedKey,
5454
) -> Result<SymmetricCryptoKey, EncryptionSettingsError> {
55-
let key = AsymmetricCryptoKey::from_der(&STANDARD.decode(private_key)?.into())?;
56-
let key: SymmetricCryptoKey = user_key.decapsulate_key_unsigned(&key)?;
55+
let private_key = AsymmetricCryptoKey::from_der(&private_key.try_into()?)?;
56+
let key: SymmetricCryptoKey = user_key.decapsulate_key_unsigned(&private_key)?;
5757
Ok(key)
5858
}
5959

6060
/// Decrypt the user key using the private key generated previously.
6161
#[cfg(feature = "internal")]
6262
pub(crate) fn auth_request_decrypt_master_key(
63-
private_key: String,
63+
private_key: Base64String,
6464
master_key: UnsignedSharedKey,
6565
user_key: EncString,
6666
) -> Result<SymmetricCryptoKey, EncryptionSettingsError> {
6767
use bitwarden_crypto::MasterKey;
6868

69-
let key = AsymmetricCryptoKey::from_der(&STANDARD.decode(private_key)?.into())?;
70-
let master_key: SymmetricCryptoKey = master_key.decapsulate_key_unsigned(&key)?;
69+
let private_key = AsymmetricCryptoKey::from_der(&private_key.try_into()?)?;
70+
let master_key: SymmetricCryptoKey = master_key.decapsulate_key_unsigned(&private_key)?;
7171
let master_key = MasterKey::try_from(&master_key)?;
7272

7373
Ok(master_key.decrypt_user_key(user_key)?)
@@ -89,9 +89,9 @@ pub enum ApproveAuthRequestError {
8989
/// Encrypts the user key with a public key.
9090
pub(crate) fn approve_auth_request(
9191
client: &Client,
92-
public_key: String,
92+
public_key: Base64String,
9393
) -> Result<UnsignedSharedKey, ApproveAuthRequestError> {
94-
let public_key = AsymmetricPublicCryptoKey::from_der(&STANDARD.decode(public_key)?)?;
94+
let public_key = AsymmetricPublicCryptoKey::from_der(&public_key.try_into()?)?;
9595

9696
let key_store = client.internal.get_key_store();
9797
let ctx = key_store.context();
@@ -140,7 +140,8 @@ mod tests {
140140
)
141141
.unwrap();
142142

143-
let decrypted = auth_request_decrypt_user_key(request.private_key, encrypted).unwrap();
143+
let decrypted =
144+
auth_request_decrypt_user_key(request.private_key.into(), encrypted).unwrap();
144145

145146
assert_eq!(decrypted.to_encoded().to_vec(), secret.to_vec());
146147
}
@@ -173,15 +174,16 @@ mod tests {
173174
let fingerprint = fingerprint("[email protected]", &pubkey).unwrap();
174175
assert_eq!(fingerprint, "childless-unfair-prowler-dropbox-designate");
175176

176-
approve_auth_request(&client, public_key.to_owned()).unwrap();
177+
approve_auth_request(&client, public_key.to_owned().into()).unwrap();
177178
}
178179

179180
#[tokio::test]
180181
async fn test_decrypt_user_key() {
181182
let private_key = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCzLtEUdxfcLxDj84yaGFsVF5hZ8Hjlb08NMQDy1RnBma06I3ZESshLYzVz4r/gegMn9OOltfV/Yxlyvida8oW6qdlfJ7AVz6Oa8pV7BiL40C7b76+oqraQpyYw2HChANB1AhXL9SqWngKmLZwjA7qiCrmcc0kZHeOb4KnKtp9iVvPVs+8veFvKgYO4ba2AAOHKFdR0W55/agXfAy+fWUAkC8mc9ikyJdQWaPV6OZvC2XFkOseBQm9Rynudh3BQpoWiL6w620efe7t5k+02/EyOFJL9f/XEEjM/+Yo0t3LAfkuhHGeKiRST59Xc9hTEmyJTeVXROtz+0fjqOp3xkaObAgMBAAECggEACs4xhnO0HaZhh1/iH7zORMIRXKeyxP2LQiTR8xwN5JJ9wRWmGAR9VasS7EZFTDidIGVME2u/h4s5EqXnhxfO+0gGksVvgNXJ/qw87E8K2216g6ZNo6vSGA7H1GH2voWwejJ4/k/cJug6dz2S402rRAKh2Wong1arYHSkVlQp3diiMa5FHAOSE+Cy09O2ZsaF9IXQYUtlW6AVXFrBEPYH2kvkaPXchh8VETMijo6tbvoKLnUHe+wTaDMls7hy8exjtVyI59r3DNzjy1lNGaGb5QSnFMXR+eHhPZc844Wv02MxC15zKABADrl58gpJyjTl6XpDdHCYGsmGpVGH3X9TQQKBgQDz/9beFjzq59ve6rGwn+EtnQfSsyYT+jr7GN8lNEXb3YOFXBgPhfFIcHRh2R00Vm9w2ApfAx2cd8xm2I6HuvQ1Os7g26LWazvuWY0Qzb+KaCLQTEGH1RnTq6CCG+BTRq/a3J8M4t38GV5TWlzv8wr9U4dl6FR4efjb65HXs1GQ4QKBgQC7/uHfrOTEHrLeIeqEuSl0vWNqEotFKdKLV6xpOvNuxDGbgW4/r/zaxDqt0YBOXmRbQYSEhmO3oy9J6XfE1SUln0gbavZeW0HESCAmUIC88bDnspUwS9RxauqT5aF8ODKN/bNCWCnBM1xyonPOs1oT1nyparJVdQoG//Y7vkB3+wKBgBqLqPq8fKAp3XfhHLfUjREDVoiLyQa/YI9U42IOz9LdxKNLo6p8rgVthpvmnRDGnpUuS+KOWjhdqDVANjF6G3t3DG7WNl8Rh5Gk2H4NhFswfSkgQrjebFLlBy9gjQVCWXt8KSmjvPbiY6q52Aaa8IUjA0YJAregvXxfopxO+/7BAoGARicvEtDp7WWnSc1OPoj6N14VIxgYcI7SyrzE0d/1x3ffKzB5e7qomNpxKzvqrVP8DzG7ydh8jaKPmv1MfF8tpYRy3AhmN3/GYwCnPqT75YYrhcrWcVdax5gmQVqHkFtIQkRSCIftzPLlpMGKha/YBV8c1fvC4LD0NPh/Ynv0gtECgYEAyOZg95/kte0jpgUEgwuMrzkhY/AaUJULFuR5MkyvReEbtSBQwV5tx60+T95PHNiFooWWVXiLMsAgyI2IbkxVR1Pzdri3gWK5CTfqb7kLuaj/B7SGvBa2Sxo478KS5K8tBBBWkITqo+wLC0mn3uZi1dyMWO1zopTA+KtEGF2dtGQ=";
182183

183184
let enc_user_key = "4.dxbd5OMwi/Avy7DQxvLV+Z7kDJgHBtg/jAbgYNO7QU0Zii4rLFNco2lS5aS9z42LTZHc2p5HYwn2ZwkZNfHsQ6//d5q40MDgGYJMKBXOZP62ZHhct1XsvYBmtcUtIOm5j2HSjt2pjEuGAc1LbyGIWRJJQ3Lp1ULbL2m71I+P23GF36JyOM8SUWvpvxE/3+qqVhRFPG2VqMCYa2kLLxwVfUmpV+KKjX1TXsrq6pfJIwHNwHw4h7MSfD8xTy2bx4MiBt638Z9Vt1pGsSQkh9RgPvCbnhuCpZQloUgJ8ByLVEcrlKx3yaaxiQXvte+ZhuOI7rGdjmoVoOzisooje4JgYw==".parse().unwrap();
184-
let dec = auth_request_decrypt_user_key(private_key.to_owned(), enc_user_key).unwrap();
185+
let dec =
186+
auth_request_decrypt_user_key(private_key.to_owned().into(), enc_user_key).unwrap();
185187

186188
assert_eq!(
187189
&dec.to_encoded().to_vec(),
@@ -198,9 +200,12 @@ mod tests {
198200

199201
let enc_master_key = "4.dxbd5OMwi/Avy7DQxvLV+Z7kDJgHBtg/jAbgYNO7QU0Zii4rLFNco2lS5aS9z42LTZHc2p5HYwn2ZwkZNfHsQ6//d5q40MDgGYJMKBXOZP62ZHhct1XsvYBmtcUtIOm5j2HSjt2pjEuGAc1LbyGIWRJJQ3Lp1ULbL2m71I+P23GF36JyOM8SUWvpvxE/3+qqVhRFPG2VqMCYa2kLLxwVfUmpV+KKjX1TXsrq6pfJIwHNwHw4h7MSfD8xTy2bx4MiBt638Z9Vt1pGsSQkh9RgPvCbnhuCpZQloUgJ8ByLVEcrlKx3yaaxiQXvte+ZhuOI7rGdjmoVoOzisooje4JgYw==".parse().unwrap();
200202
let enc_user_key = "2.Q/2PhzcC7GdeiMHhWguYAQ==|GpqzVdr0go0ug5cZh1n+uixeBC3oC90CIe0hd/HWA/pTRDZ8ane4fmsEIcuc8eMKUt55Y2q/fbNzsYu41YTZzzsJUSeqVjT8/iTQtgnNdpo=|dwI+uyvZ1h/iZ03VQ+/wrGEFYVewBUUl/syYgjsNMbE=".parse().unwrap();
201-
let dec =
202-
auth_request_decrypt_master_key(private_key.to_owned(), enc_master_key, enc_user_key)
203-
.unwrap();
203+
let dec = auth_request_decrypt_master_key(
204+
private_key.to_owned().into(),
205+
enc_master_key,
206+
enc_user_key,
207+
)
208+
.unwrap();
204209

205210
assert_eq!(
206211
&dec.to_encoded().to_vec(),
@@ -238,7 +243,8 @@ mod tests {
238243

239244
// Initialize an auth request, and approve it on the existing device
240245
let auth_req = new_auth_request(email).unwrap();
241-
let approved_req = approve_auth_request(&existing_device, auth_req.public_key).unwrap();
246+
let approved_req =
247+
approve_auth_request(&existing_device, auth_req.public_key.into()).unwrap();
242248

243249
// Unlock the vault using the approved request
244250
new_device

crates/bitwarden-core/src/auth/tde.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,20 @@
1-
use base64::{engine::general_purpose::STANDARD, Engine};
21
use bitwarden_crypto::{
32
AsymmetricPublicCryptoKey, DeviceKey, EncString, Kdf, SymmetricCryptoKey, TrustDeviceResponse,
43
UnsignedSharedKey, UserKey,
54
};
65

7-
use crate::{client::encryption_settings::EncryptionSettingsError, Client};
6+
use crate::{client::encryption_settings::EncryptionSettingsError, Base64String, Client};
87

98
/// This function generates a new user key and key pair, initializes the client's crypto with the
109
/// generated user key, and encrypts the user key with the organization public key for admin
1110
/// password reset. If remember_device is true, it also generates a device key.
1211
pub(super) fn make_register_tde_keys(
1312
client: &Client,
1413
email: String,
15-
org_public_key: String,
14+
org_public_key: Base64String,
1615
remember_device: bool,
1716
) -> Result<RegisterTdeKeyResponse, EncryptionSettingsError> {
18-
let public_key = AsymmetricPublicCryptoKey::from_der(&STANDARD.decode(org_public_key)?)?;
17+
let public_key = AsymmetricPublicCryptoKey::from_der(&org_public_key.try_into()?)?;
1918

2019
let user_key = UserKey::new(SymmetricCryptoKey::make_aes256_cbc_hmac_key());
2120
let key_pair = user_key.make_key_pair()?;

crates/bitwarden-core/src/key_management/crypto.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ use base64::{engine::general_purpose::STANDARD, Engine};
1010
use bitwarden_crypto::{
1111
AsymmetricCryptoKey, CoseSerializable, CryptoError, EncString, Kdf, KeyDecryptable,
1212
KeyEncryptable, MasterKey, Pkcs8PrivateKeyBytes, PrimitiveEncryptable, SignatureAlgorithm,
13-
SignedPublicKey, SigningKey, SymmetricCryptoKey, UnsignedSharedKey, UserKey,
13+
SignedPublicKey, SigningKey, SpkiPublicKeyBytes, SymmetricCryptoKey, UnsignedSharedKey,
14+
UserKey,
1415
};
1516
use bitwarden_error::bitwarden_error;
1617
use schemars::JsonSchema;
@@ -21,7 +22,7 @@ use {tsify_next::Tsify, wasm_bindgen::prelude::*};
2122
use crate::{
2223
client::{encryption_settings::EncryptionSettingsError, LoginMethod, UserLoginMethod},
2324
key_management::{AsymmetricKeyId, SigningKeyId, SymmetricKeyId},
24-
Client, NotAuthenticatedError, VaultLockedError, WrongPasswordError,
25+
Base64String, Client, NotAuthenticatedError, VaultLockedError, WrongPasswordError,
2526
};
2627

2728
/// Catch all error for mobile crypto operations.
@@ -177,13 +178,13 @@ pub(super) async fn initialize_user_crypto(
177178
} => {
178179
let user_key = match method {
179180
AuthRequestMethod::UserKey { protected_user_key } => {
180-
auth_request_decrypt_user_key(request_private_key, protected_user_key)?
181+
auth_request_decrypt_user_key(request_private_key.into(), protected_user_key)?
181182
}
182183
AuthRequestMethod::MasterKey {
183184
protected_master_key,
184185
auth_request_key,
185186
} => auth_request_decrypt_master_key(
186-
request_private_key,
187+
request_private_key.into(),
187188
protected_master_key,
188189
auth_request_key,
189190
)?,
@@ -407,12 +408,11 @@ pub enum EnrollAdminPasswordResetError {
407408

408409
pub(super) fn enroll_admin_password_reset(
409410
client: &Client,
410-
public_key: String,
411+
public_key: Base64String,
411412
) -> Result<UnsignedSharedKey, EnrollAdminPasswordResetError> {
412-
use base64::{engine::general_purpose::STANDARD, Engine};
413413
use bitwarden_crypto::AsymmetricPublicCryptoKey;
414414

415-
let public_key = AsymmetricPublicCryptoKey::from_der(&STANDARD.decode(public_key)?)?;
415+
let public_key = AsymmetricPublicCryptoKey::from_der(&public_key.try_into()?)?;
416416
let key_store = client.internal.get_key_store();
417417
let ctx = key_store.context();
418418
// FIXME: [PM-18110] This should be removed once the key store can handle public key encryption
@@ -841,7 +841,7 @@ mod tests {
841841

842842
let public_key = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsy7RFHcX3C8Q4/OMmhhbFReYWfB45W9PDTEA8tUZwZmtOiN2RErIS2M1c+K/4HoDJ/TjpbX1f2MZcr4nWvKFuqnZXyewFc+jmvKVewYi+NAu2++vqKq2kKcmMNhwoQDQdQIVy/Uqlp4Cpi2cIwO6ogq5nHNJGR3jm+CpyrafYlbz1bPvL3hbyoGDuG2tgADhyhXUdFuef2oF3wMvn1lAJAvJnPYpMiXUFmj1ejmbwtlxZDrHgUJvUcp7nYdwUKaFoi+sOttHn3u7eZPtNvxMjhSS/X/1xBIzP/mKNLdywH5LoRxniokUk+fV3PYUxJsiU3lV0Trc/tH46jqd8ZGjmwIDAQAB";
843843

844-
let encrypted = enroll_admin_password_reset(&client, public_key.to_owned()).unwrap();
844+
let encrypted = enroll_admin_password_reset(&client, public_key.to_owned().into()).unwrap();
845845

846846
let private_key = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCzLtEUdxfcLxDj84yaGFsVF5hZ8Hjlb08NMQDy1RnBma06I3ZESshLYzVz4r/gegMn9OOltfV/Yxlyvida8oW6qdlfJ7AVz6Oa8pV7BiL40C7b76+oqraQpyYw2HChANB1AhXL9SqWngKmLZwjA7qiCrmcc0kZHeOb4KnKtp9iVvPVs+8veFvKgYO4ba2AAOHKFdR0W55/agXfAy+fWUAkC8mc9ikyJdQWaPV6OZvC2XFkOseBQm9Rynudh3BQpoWiL6w620efe7t5k+02/EyOFJL9f/XEEjM/+Yo0t3LAfkuhHGeKiRST59Xc9hTEmyJTeVXROtz+0fjqOp3xkaObAgMBAAECggEACs4xhnO0HaZhh1/iH7zORMIRXKeyxP2LQiTR8xwN5JJ9wRWmGAR9VasS7EZFTDidIGVME2u/h4s5EqXnhxfO+0gGksVvgNXJ/qw87E8K2216g6ZNo6vSGA7H1GH2voWwejJ4/k/cJug6dz2S402rRAKh2Wong1arYHSkVlQp3diiMa5FHAOSE+Cy09O2ZsaF9IXQYUtlW6AVXFrBEPYH2kvkaPXchh8VETMijo6tbvoKLnUHe+wTaDMls7hy8exjtVyI59r3DNzjy1lNGaGb5QSnFMXR+eHhPZc844Wv02MxC15zKABADrl58gpJyjTl6XpDdHCYGsmGpVGH3X9TQQKBgQDz/9beFjzq59ve6rGwn+EtnQfSsyYT+jr7GN8lNEXb3YOFXBgPhfFIcHRh2R00Vm9w2ApfAx2cd8xm2I6HuvQ1Os7g26LWazvuWY0Qzb+KaCLQTEGH1RnTq6CCG+BTRq/a3J8M4t38GV5TWlzv8wr9U4dl6FR4efjb65HXs1GQ4QKBgQC7/uHfrOTEHrLeIeqEuSl0vWNqEotFKdKLV6xpOvNuxDGbgW4/r/zaxDqt0YBOXmRbQYSEhmO3oy9J6XfE1SUln0gbavZeW0HESCAmUIC88bDnspUwS9RxauqT5aF8ODKN/bNCWCnBM1xyonPOs1oT1nyparJVdQoG//Y7vkB3+wKBgBqLqPq8fKAp3XfhHLfUjREDVoiLyQa/YI9U42IOz9LdxKNLo6p8rgVthpvmnRDGnpUuS+KOWjhdqDVANjF6G3t3DG7WNl8Rh5Gk2H4NhFswfSkgQrjebFLlBy9gjQVCWXt8KSmjvPbiY6q52Aaa8IUjA0YJAregvXxfopxO+/7BAoGARicvEtDp7WWnSc1OPoj6N14VIxgYcI7SyrzE0d/1x3ffKzB5e7qomNpxKzvqrVP8DzG7ydh8jaKPmv1MfF8tpYRy3AhmN3/GYwCnPqT75YYrhcrWcVdax5gmQVqHkFtIQkRSCIftzPLlpMGKha/YBV8c1fvC4LD0NPh/Ynv0gtECgYEAyOZg95/kte0jpgUEgwuMrzkhY/AaUJULFuR5MkyvReEbtSBQwV5tx60+T95PHNiFooWWVXiLMsAgyI2IbkxVR1Pzdri3gWK5CTfqb7kLuaj/B7SGvBa2Sxo478KS5K8tBBBWkITqo+wLC0mn3uZi1dyMWO1zopTA+KtEGF2dtGQ=";
847847
let private_key = STANDARD.decode(private_key).unwrap();

crates/bitwarden-core/src/key_management/crypto_client.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ impl CryptoClient {
109109
&self,
110110
public_key: String,
111111
) -> Result<UnsignedSharedKey, EnrollAdminPasswordResetError> {
112-
enroll_admin_password_reset(&self.client, public_key)
112+
enroll_admin_password_reset(&self.client, public_key.into())
113113
}
114114

115115
/// Derive the master key for migrating to the key connector

crates/bitwarden-core/src/lib.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,3 +28,5 @@ pub use client::{Client, ClientSettings, DeviceType};
2828

2929
mod ids;
3030
pub use ids::*;
31+
mod types;
32+
pub use types::*;

crates/bitwarden-core/src/types.rs

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
use base64::{engine::general_purpose::STANDARD, Engine};
2+
use bitwarden_crypto::{Pkcs8PrivateKeyBytes, SpkiPublicKeyBytes};
3+
4+
/// A wrapper around a Base64-encoded string that can be used to decode it into a byte vector.
5+
/// This is useful for handling Base64-encoded strings in a type-safe manner,
6+
/// ensuring that the string is always treated as Base64 data.
7+
pub struct Base64String(String);
8+
9+
impl From<String> for Base64String {
10+
fn from(val: String) -> Self {
11+
Base64String(val)
12+
}
13+
}
14+
15+
impl TryInto<Vec<u8>> for Base64String {
16+
type Error = base64::DecodeError;
17+
18+
fn try_into(self) -> Result<Vec<u8>, Self::Error> {
19+
STANDARD.decode(&self.0)
20+
}
21+
}
22+
23+
impl From<Vec<u8>> for Base64String {
24+
fn from(val: Vec<u8>) -> Self {
25+
Base64String(STANDARD.encode(val))
26+
}
27+
}
28+
29+
impl TryInto<SpkiPublicKeyBytes> for Base64String {
30+
type Error = base64::DecodeError;
31+
32+
fn try_into(self) -> Result<SpkiPublicKeyBytes, Self::Error> {
33+
let bytes: Vec<u8> = self.try_into()?;
34+
Ok(SpkiPublicKeyBytes::from(bytes))
35+
}
36+
}
37+
38+
impl TryInto<Pkcs8PrivateKeyBytes> for Base64String {
39+
type Error = base64::DecodeError;
40+
41+
fn try_into(self) -> Result<Pkcs8PrivateKeyBytes, Self::Error> {
42+
let bytes: Vec<u8> = self.try_into()?;
43+
Ok(Pkcs8PrivateKeyBytes::from(bytes))
44+
}
45+
}

crates/bitwarden-crypto/src/fingerprint.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ pub enum FingerprintError {
6464
#[cfg(test)]
6565
mod tests {
6666
use super::fingerprint;
67-
use crate::{Bytes, SpkiPublicKeyBytes};
67+
use crate::SpkiPublicKeyBytes;
6868

6969
#[test]
7070
fn test_fingerprint() {

crates/bitwarden-crypto/src/keys/asymmetric_crypto_key.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,11 @@ impl AsymmetricPublicCryptoKey {
3535
}
3636

3737
/// Build a public key from the SubjectPublicKeyInfo DER.
38-
pub fn from_der(der: &[u8]) -> Result<Self> {
38+
pub fn from_der(der: &SpkiPublicKeyBytes) -> Result<Self> {
3939
Ok(AsymmetricPublicCryptoKey {
4040
inner: RawPublicKey::RsaOaepSha1(
41-
RsaPublicKey::from_public_key_der(der).map_err(|_| CryptoError::InvalidKey)?,
41+
RsaPublicKey::from_public_key_der(der.as_ref())
42+
.map_err(|_| CryptoError::InvalidKey)?,
4243
),
4344
})
4445
}
@@ -263,7 +264,7 @@ DnqOsltgPomWZ7xVfMkm9niL2OA=
263264

264265
let private_key = Pkcs8PrivateKeyBytes::from(private_key);
265266
let private_key = AsymmetricCryptoKey::from_der(&private_key).unwrap();
266-
let public_key = AsymmetricPublicCryptoKey::from_der(&public_key).unwrap();
267+
let public_key = AsymmetricPublicCryptoKey::from_der(&public_key.into()).unwrap();
267268

268269
let raw_key = SymmetricCryptoKey::make_aes256_cbc_hmac_key();
269270
let encrypted = UnsignedSharedKey::encapsulate_key_unsigned(&raw_key, &public_key).unwrap();

crates/bitwarden-crypto/src/keys/pin_key.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ impl PinKey {
2020

2121
/// Encrypt the users user key
2222
pub fn encrypt_user_key(&self, user_key: &SymmetricCryptoKey) -> Result<EncString> {
23-
user_key.encrypt_with_key(&self)
23+
user_key.encrypt_with_key(self)
2424
}
2525

2626
/// Decrypt the users user key

0 commit comments

Comments
 (0)