Skip to content

Commit 6c7c1ec

Browse files
authored
Merge branch 'main' into km/pin-unlock
2 parents d96a110 + bc66e3d commit 6c7c1ec

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

65 files changed

+483
-347
lines changed

Cargo.lock

Lines changed: 13 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ bitwarden-ssh = { path = "crates/bitwarden-ssh", version = "=1.0.0" }
3939
bitwarden-state = { path = "crates/bitwarden-state", version = "=1.0.0" }
4040
bitwarden-test = { path = "crates/bitwarden-test", version = "=1.0.0" }
4141
bitwarden-threading = { path = "crates/bitwarden-threading", version = "=1.0.0" }
42+
bitwarden-uniffi-error = { path = "crates/bitwarden-uniffi-error", version = "=1.0.0" }
4243
bitwarden-uuid = { path = "crates/bitwarden-uuid", version = "=1.0.0" }
4344
bitwarden-uuid-macro = { path = "crates/bitwarden-uuid-macro", version = "=1.0.0" }
4445
bitwarden-vault = { path = "crates/bitwarden-vault", version = "=1.0.0" }

crates/bitwarden-core/Cargo.toml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,11 @@ no-memory-hardening = [
2020
"bitwarden-crypto/no-memory-hardening"
2121
] # Disable memory hardening features
2222
secrets = [] # Secrets manager API
23-
uniffi = ["bitwarden-crypto/uniffi", "dep:uniffi"] # Uniffi bindings
23+
uniffi = [
24+
"bitwarden-crypto/uniffi",
25+
"bitwarden-encoding/uniffi",
26+
"dep:uniffi"
27+
] # Uniffi bindings
2428
wasm = [
2529
"bitwarden-error/wasm",
2630
"dep:wasm-bindgen",
@@ -30,13 +34,13 @@ wasm = [
3034

3135
[dependencies]
3236
async-trait = { workspace = true }
33-
base64 = ">=0.22.1, <0.23"
3437
bitwarden-api-api = { workspace = true }
3538
bitwarden-api-identity = { workspace = true }
3639
bitwarden-crypto = { workspace = true }
3740
bitwarden-encoding = { workspace = true }
3841
bitwarden-error = { workspace = true }
3942
bitwarden-state = { workspace = true }
43+
bitwarden-uniffi-error = { workspace = true }
4044
bitwarden-uuid = { workspace = true }
4145
chrono = { workspace = true, features = ["std"] }
4246
# We don't use this directly (it's used by rand), but we need it here to enable WASM support

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

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
use std::{fmt::Debug, str::FromStr};
22

3-
use base64::Engine;
43
use bitwarden_crypto::{derive_shareable_key, SymmetricCryptoKey};
4+
use bitwarden_encoding::{NotB64Encoded, B64};
55
use thiserror::Error;
66
use uuid::Uuid;
77
use zeroize::Zeroizing;
88

9-
use crate::util::STANDARD_INDIFFERENT;
10-
119
#[allow(missing_docs)]
1210
#[derive(Debug, Error)]
1311
pub enum AccessTokenInvalidError {
@@ -21,7 +19,7 @@ pub enum AccessTokenInvalidError {
2119
InvalidUuid,
2220

2321
#[error("Error decoding base64: {0}")]
24-
InvalidBase64(#[from] base64::DecodeError),
22+
InvalidBase64(#[from] NotB64Encoded),
2523

2624
#[error("Invalid base64 length: expected {expected}, got {got}")]
2725
InvalidBase64Length { expected: usize, got: usize },
@@ -67,13 +65,14 @@ impl FromStr for AccessToken {
6765
return Err(AccessTokenInvalidError::InvalidUuid);
6866
};
6967

70-
let encryption_key = STANDARD_INDIFFERENT.decode(encryption_key)?;
71-
let encryption_key = Zeroizing::new(encryption_key.try_into().map_err(|e: Vec<_>| {
72-
AccessTokenInvalidError::InvalidBase64Length {
73-
expected: 16,
74-
got: e.len(),
75-
}
76-
})?);
68+
let encryption_key: B64 = encryption_key.parse()?;
69+
let encryption_key =
70+
Zeroizing::new(encryption_key.as_bytes().try_into().map_err(|_| {
71+
AccessTokenInvalidError::InvalidBase64Length {
72+
expected: 16,
73+
got: encryption_key.as_bytes().len(),
74+
}
75+
})?);
7776
let encryption_key =
7877
derive_shareable_key(encryption_key, "accesstoken", Some("sm-access-token"));
7978

@@ -102,7 +101,7 @@ mod tests {
102101
"ec2c1d46-6a4b-4751-a310-af9601317f2d"
103102
);
104103
assert_eq!(token.client_secret, "C2IgxjjLF7qSshsbwe8JGcbM075YXw");
105-
assert_eq!(token.encryption_key.to_base64(), "H9/oIRLtL9nGCQOVDjSMoEbJsjWXSOCb3qeyDt6ckzS3FhyboEDWyTP/CQfbIszNmAVg2ExFganG1FVFGXO/Jg==");
104+
assert_eq!(token.encryption_key.to_base64().to_string(), "H9/oIRLtL9nGCQOVDjSMoEbJsjWXSOCb3qeyDt6ckzS3FhyboEDWyTP/CQfbIszNmAVg2ExFganG1FVFGXO/Jg==");
106105
}
107106

108107
#[test]

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ impl AuthClient {
137137
pub fn validate_password(
138138
&self,
139139
password: String,
140-
password_hash: String,
140+
password_hash: B64,
141141
) -> Result<bool, AuthValidateError> {
142142
validate_password(&self.client, password, password_hash)
143143
}
@@ -147,7 +147,7 @@ impl AuthClient {
147147
&self,
148148
password: String,
149149
encrypted_user_key: String,
150-
) -> Result<String, AuthValidateError> {
150+
) -> Result<B64, AuthValidateError> {
151151
validate_password_user_key(&self.client, password, encrypted_user_key)
152152
}
153153

@@ -168,7 +168,7 @@ impl AuthClient {
168168
#[allow(missing_docs)]
169169
pub fn approve_auth_request(
170170
&self,
171-
public_key: String,
171+
public_key: B64,
172172
) -> Result<UnsignedSharedKey, ApproveAuthRequestError> {
173173
approve_auth_request(&self.client, public_key)
174174
}

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

Lines changed: 21 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
1-
use base64::{engine::general_purpose::STANDARD, Engine};
21
use bitwarden_crypto::{
32
fingerprint, generate_random_alphanumeric, AsymmetricCryptoKey, AsymmetricPublicCryptoKey,
43
CryptoError, PublicKeyEncryptionAlgorithm, SpkiPublicKeyBytes, UnsignedSharedKey,
54
};
65
#[cfg(feature = "internal")]
76
use bitwarden_crypto::{EncString, SymmetricCryptoKey};
7+
#[cfg(feature = "internal")]
8+
use bitwarden_encoding::B64;
89
use thiserror::Error;
910

1011
#[cfg(feature = "internal")]
@@ -16,9 +17,9 @@ use crate::{key_management::SymmetricKeyId, Client, VaultLockedError};
1617
pub struct AuthRequestResponse {
1718
/// Base64 encoded private key
1819
/// This key is temporarily passed back and will most likely not be available in the future
19-
pub private_key: String,
20+
pub private_key: B64,
2021
/// Base64 encoded public key
21-
pub public_key: String,
22+
pub public_key: B64,
2223
/// Fingerprint of the public key
2324
pub fingerprint: String,
2425
/// Access code
@@ -36,11 +37,10 @@ pub(crate) fn new_auth_request(email: &str) -> Result<AuthRequestResponse, Crypt
3637
let spki = key.to_public_key().to_der()?;
3738

3839
let fingerprint = fingerprint(email, &spki)?;
39-
let b64 = STANDARD.encode(&spki);
4040

4141
Ok(AuthRequestResponse {
42-
private_key: STANDARD.encode(key.to_der()?),
43-
public_key: b64,
42+
private_key: key.to_der()?.as_ref().into(),
43+
public_key: spki.into(),
4444
fingerprint,
4545
access_code: generate_random_alphanumeric(25),
4646
})
@@ -49,24 +49,24 @@ 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: B64,
5353
user_key: UnsignedSharedKey,
5454
) -> Result<SymmetricCryptoKey, EncryptionSettingsError> {
55-
let key = AsymmetricCryptoKey::from_der(&STANDARD.decode(private_key)?.into())?;
55+
let key = AsymmetricCryptoKey::from_der(&private_key.as_bytes().into())?;
5656
let key: SymmetricCryptoKey = user_key.decapsulate_key_unsigned(&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: B64,
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())?;
69+
let key = AsymmetricCryptoKey::from_der(&private_key.as_bytes().into())?;
7070
let master_key: SymmetricCryptoKey = master_key.decapsulate_key_unsigned(&key)?;
7171
let master_key = MasterKey::try_from(&master_key)?;
7272

@@ -80,20 +80,16 @@ pub enum ApproveAuthRequestError {
8080
Crypto(#[from] CryptoError),
8181
#[error(transparent)]
8282
VaultLocked(#[from] VaultLockedError),
83-
#[error(transparent)]
84-
InvalidBase64(#[from] base64::DecodeError),
8583
}
8684

8785
/// Approve an auth request.
8886
///
8987
/// Encrypts the user key with a public key.
9088
pub(crate) fn approve_auth_request(
9189
client: &Client,
92-
public_key: String,
90+
public_key: B64,
9391
) -> Result<UnsignedSharedKey, ApproveAuthRequestError> {
94-
let public_key = AsymmetricPublicCryptoKey::from_der(&SpkiPublicKeyBytes::from(
95-
STANDARD.decode(public_key)?,
96-
))?;
92+
let public_key = AsymmetricPublicCryptoKey::from_der(&SpkiPublicKeyBytes::from(&public_key))?;
9793

9894
let key_store = client.internal.get_key_store();
9995
let ctx = key_store.context();
@@ -136,8 +132,7 @@ mod tests {
136132
];
137133

138134
let private_key =
139-
AsymmetricCryptoKey::from_der(&STANDARD.decode(&request.private_key).unwrap().into())
140-
.unwrap();
135+
AsymmetricCryptoKey::from_der(&request.private_key.as_bytes().into()).unwrap();
141136

142137
let secret = BitwardenLegacyKeyBytes::from(secret);
143138
let encrypted = UnsignedSharedKey::encapsulate_key_unsigned(
@@ -179,23 +174,23 @@ mod tests {
179174
)
180175
.unwrap();
181176

182-
let public_key = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvyLRDUwXB4BfQ507D4meFPmwn5zwy3IqTPJO4plrrhnclWahXa240BzyFW9gHgYu+Jrgms5xBfRTBMcEsqqNm7+JpB6C1B6yvnik0DpJgWQw1rwvy4SUYidpR/AWbQi47n/hvnmzI/sQxGddVfvWu1iTKOlf5blbKYAXnUE5DZBGnrWfacNXwRRdtP06tFB0LwDgw+91CeLSJ9py6dm1qX5JIxoO8StJOQl65goLCdrTWlox+0Jh4xFUfCkb+s3px+OhSCzJbvG/hlrSRcUz5GnwlCEyF3v5lfUtV96MJD+78d8pmH6CfFAp2wxKRAbGdk+JccJYO6y6oIXd3Fm7twIDAQAB";
177+
let public_key: B64 = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvyLRDUwXB4BfQ507D4meFPmwn5zwy3IqTPJO4plrrhnclWahXa240BzyFW9gHgYu+Jrgms5xBfRTBMcEsqqNm7+JpB6C1B6yvnik0DpJgWQw1rwvy4SUYidpR/AWbQi47n/hvnmzI/sQxGddVfvWu1iTKOlf5blbKYAXnUE5DZBGnrWfacNXwRRdtP06tFB0LwDgw+91CeLSJ9py6dm1qX5JIxoO8StJOQl65goLCdrTWlox+0Jh4xFUfCkb+s3px+OhSCzJbvG/hlrSRcUz5GnwlCEyF3v5lfUtV96MJD+78d8pmH6CfFAp2wxKRAbGdk+JccJYO6y6oIXd3Fm7twIDAQAB".parse().unwrap();
183178

184179
// Verify fingerprint
185-
let pubkey = STANDARD.decode(public_key).unwrap();
186-
let pubkey = SpkiPublicKeyBytes::from(pubkey.clone());
180+
let pubkey = SpkiPublicKeyBytes::from(&public_key);
187181
let fingerprint = fingerprint("[email protected]", &pubkey).unwrap();
188182
assert_eq!(fingerprint, "childless-unfair-prowler-dropbox-designate");
189183

190-
approve_auth_request(&client, public_key.to_owned()).unwrap();
184+
approve_auth_request(&client, public_key).unwrap();
191185
}
192186

193187
#[tokio::test]
194188
async fn test_decrypt_user_key() {
195-
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=";
189+
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=".parse()
190+
.unwrap();
196191

197192
let enc_user_key = "4.dxbd5OMwi/Avy7DQxvLV+Z7kDJgHBtg/jAbgYNO7QU0Zii4rLFNco2lS5aS9z42LTZHc2p5HYwn2ZwkZNfHsQ6//d5q40MDgGYJMKBXOZP62ZHhct1XsvYBmtcUtIOm5j2HSjt2pjEuGAc1LbyGIWRJJQ3Lp1ULbL2m71I+P23GF36JyOM8SUWvpvxE/3+qqVhRFPG2VqMCYa2kLLxwVfUmpV+KKjX1TXsrq6pfJIwHNwHw4h7MSfD8xTy2bx4MiBt638Z9Vt1pGsSQkh9RgPvCbnhuCpZQloUgJ8ByLVEcrlKx3yaaxiQXvte+ZhuOI7rGdjmoVoOzisooje4JgYw==".parse().unwrap();
198-
let dec = auth_request_decrypt_user_key(private_key.to_owned(), enc_user_key).unwrap();
193+
let dec = auth_request_decrypt_user_key(private_key, enc_user_key).unwrap();
199194

200195
assert_eq!(
201196
&dec.to_encoded().to_vec(),
@@ -208,13 +203,12 @@ mod tests {
208203

209204
#[tokio::test]
210205
async fn test_decrypt_master_key() {
211-
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=";
206+
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=".parse().unwrap();
212207

213208
let enc_master_key = "4.dxbd5OMwi/Avy7DQxvLV+Z7kDJgHBtg/jAbgYNO7QU0Zii4rLFNco2lS5aS9z42LTZHc2p5HYwn2ZwkZNfHsQ6//d5q40MDgGYJMKBXOZP62ZHhct1XsvYBmtcUtIOm5j2HSjt2pjEuGAc1LbyGIWRJJQ3Lp1ULbL2m71I+P23GF36JyOM8SUWvpvxE/3+qqVhRFPG2VqMCYa2kLLxwVfUmpV+KKjX1TXsrq6pfJIwHNwHw4h7MSfD8xTy2bx4MiBt638Z9Vt1pGsSQkh9RgPvCbnhuCpZQloUgJ8ByLVEcrlKx3yaaxiQXvte+ZhuOI7rGdjmoVoOzisooje4JgYw==".parse().unwrap();
214209
let enc_user_key = "2.Q/2PhzcC7GdeiMHhWguYAQ==|GpqzVdr0go0ug5cZh1n+uixeBC3oC90CIe0hd/HWA/pTRDZ8ane4fmsEIcuc8eMKUt55Y2q/fbNzsYu41YTZzzsJUSeqVjT8/iTQtgnNdpo=|dwI+uyvZ1h/iZ03VQ+/wrGEFYVewBUUl/syYgjsNMbE=".parse().unwrap();
215210
let dec =
216-
auth_request_decrypt_master_key(private_key.to_owned(), enc_master_key, enc_user_key)
217-
.unwrap();
211+
auth_request_decrypt_master_key(private_key, enc_master_key, enc_user_key).unwrap();
218212

219213
assert_eq!(
220214
&dec.to_encoded().to_vec(),

0 commit comments

Comments
 (0)