Skip to content

[NOT FOR MERGE] Km/crypto v2 feature branch #327

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. Weโ€™ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 100 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
100 commits
Select commit Hold shift + click to select a range
bc5900b
Implement cose content format
quexten May 9, 2025
2e905c4
Cargo fmt
quexten May 9, 2025
b41f5ef
Fix docs
quexten May 9, 2025
eb70dfc
Fix formatting
quexten May 9, 2025
1e2e95c
Merge main
quexten May 9, 2025
68be6e6
Fix formatting
quexten May 9, 2025
d6a18a4
Fix comment
quexten May 9, 2025
6e9e526
Cleanup
quexten May 21, 2025
50d8f70
Switch from pass by ref to pass by value for enum
quexten May 21, 2025
e5bd251
Add CompositeEncryptable trait
quexten May 21, 2025
b92010b
Cleanup
quexten May 21, 2025
9635098
Merge branch 'main' into km/cose-content-format
quexten May 21, 2025
b8056c2
Fix typo
quexten May 21, 2025
9440825
Typed encryptable
quexten May 21, 2025
f8cb804
Apply cargo fmt
quexten May 22, 2025
e6939e6
Fix build
quexten May 22, 2025
2a202c1
Remove unused imports
quexten May 22, 2025
ba9e2c3
Rename to primitiveencryptablewithcontenttype
quexten May 22, 2025
a42b1e7
Set correct content type for pkcs8
quexten May 22, 2025
5447cbb
Add cose keywrap
quexten May 22, 2025
66c345f
Fix keywrap
quexten May 22, 2025
9b2f6c9
Run cargo fmt
quexten May 22, 2025
88b96b7
Fix encryptable
quexten May 22, 2025
7e69b7b
Run cargo fmt
quexten May 22, 2025
b7d2bc8
Cleanup
quexten May 29, 2025
acb6d12
Rename to PrimitiveEncryptableWithoutContentFormat
quexten May 29, 2025
723ec63
Rename to PrimitiveEncryptable
quexten May 29, 2025
36d8de9
Merge branch 'main' into km/cose-content-format
quexten May 29, 2025
33da07b
Add documentation for the encryptable traits
quexten May 29, 2025
2861a9a
Merge branch 'km/cose-content-format' of github.com:bitwarden/sdk-intโ€ฆ
quexten May 29, 2025
1681df9
Fix clippy errors
quexten Jun 2, 2025
0cd85fa
Fix docs
quexten Jun 2, 2025
f91f0b8
Cargo fmt
quexten Jun 2, 2025
34ee00e
Fix docs
quexten Jun 2, 2025
485b6d8
Fix docs
quexten Jun 2, 2025
f122ff0
Fix docs
quexten Jun 2, 2025
f22531c
Update crates/bitwarden-crypto/src/keys/utils.rs
quexten Jun 4, 2025
ba10631
Update crates/bitwarden-crypto/src/keys/utils.rs
quexten Jun 4, 2025
69d8c57
Update crates/bitwarden-crypto/src/keys/utils.rs
quexten Jun 4, 2025
8833146
Merge branch 'main' into km/cose-content-format
quexten Jun 4, 2025
47ced5a
Merge branch 'main' into km/cose-content-format
quexten Jun 6, 2025
42dccb0
Add docs
quexten Jun 6, 2025
9d0ea55
Merge branch 'km/cose-content-format' of github.com:bitwarden/sdk-intโ€ฆ
quexten Jun 6, 2025
a3ed9d6
Merge branch 'main' into km/cose-content-format
quexten Jun 16, 2025
9eceb32
Cargo fmt
quexten Jun 16, 2025
f30c3ce
Apply fixes
quexten Jun 16, 2025
5f4dc3a
Cleanup
quexten Jun 16, 2025
7b17ca3
Cleanup
quexten Jun 16, 2025
38c8945
Cleanup
quexten Jun 16, 2025
b5dd862
Apply more fixes
quexten Jun 16, 2025
47c7764
Apply fixes
quexten Jun 16, 2025
b009c81
Apply fixes
quexten Jun 16, 2025
c9f6111
Update test vector to include content type
quexten Jun 17, 2025
b9b0f6e
Add bitwarden legacy content type
quexten Jun 17, 2025
67dd5e9
Move content format to separate file
quexten Jun 17, 2025
7635cd0
Remove unused import
quexten Jun 17, 2025
ec14e51
Fix missing parsing for content type
quexten Jun 17, 2025
75be6db
Merge branch 'main' into km/cose-content-format
quexten Jun 17, 2025
6d8bb8f
Fix doc error
quexten Jun 17, 2025
38b8958
Typed byte arrays
quexten Jun 19, 2025
9f334fb
Fix readme
quexten Jun 19, 2025
02cc7b3
Clippy cleanup
quexten Jun 19, 2025
f145eb3
Fix clippy errors
quexten Jun 19, 2025
99d909c
Fix clippy errors
quexten Jun 19, 2025
d47e8c0
Switch bitwarden symmetric crypto key bytes to serialized bytes generic
quexten Jun 19, 2025
1920a49
Rename to bytes
quexten Jun 19, 2025
625b830
Cargo fmt
quexten Jun 19, 2025
24f1431
Simplify encoded symmetric key
quexten Jun 19, 2025
9eb4ff8
Merge branch 'main' into km/cose-content-format
quexten Jun 19, 2025
916a46e
Remove unwrap in example
quexten Jun 19, 2025
8722077
Merge branch 'km/cose-content-format' of github.com:bitwarden/sdk-intโ€ฆ
quexten Jun 19, 2025
670c6a7
Cleanup
quexten Jun 19, 2025
6da4a0b
Fix docs
quexten Jun 19, 2025
4becfdd
Implement key rotation for signing keys
quexten Jun 19, 2025
c4cbe47
Add security state
quexten Jun 20, 2025
d0e08f0
Add v2 encryption init
quexten Jun 20, 2025
55629ff
Cargo fmt
quexten Jun 20, 2025
7c4ed72
Apply clippy fixes
quexten Jun 20, 2025
1142d16
Fix test build
quexten Jun 20, 2025
04edc74
Fix build
quexten Jun 20, 2025
f5e5170
Merge branch 'main' into km/account-security-version
quexten Jun 20, 2025
3af3f80
Fix id
quexten Jun 20, 2025
a766ab9
Merge branch 'main' into km/cose-key-rotation
quexten Jun 20, 2025
10ef27c
Change uuid to bytebuf
quexten Jun 23, 2025
53aff71
Merge branch 'km/cose-key-rotation' into km/account-security-version
quexten Jun 23, 2025
ecb1528
Fix test
quexten Jun 23, 2025
387b493
Add test and update enrollment function
quexten Jun 23, 2025
ab40b02
Apply fmt
quexten Jun 23, 2025
469e2cb
Apply clippy fix
quexten Jun 23, 2025
e6cbfb5
Fix mobile builds
quexten Jun 23, 2025
03e3dbd
Add docs
quexten Jun 23, 2025
7333296
Cargo fmt
quexten Jun 23, 2025
344ef72
Add plain security version
quexten Jun 23, 2025
f6f25e9
Default security version to 2
quexten Jun 23, 2025
2a076a4
Rename signed security state to security state
quexten Jun 23, 2025
94a3983
Fix build
quexten Jun 24, 2025
0e9aef0
Merge branch 'km/cose-content-format' into km/crypto-v2-feature-branch
quexten Jun 24, 2025
e328bfa
Merge branch 'km/cose-key-rotation' into km/crypto-v2-feature-branch
quexten Jun 24, 2025
05cd930
Merge branch 'km/account-security-version' into km/crypto-v2-feature-โ€ฆ
quexten Jun 24, 2025
db06815
Fix build
quexten Jun 24, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion bitwarden_license/bitwarden-sm/src/projects/create.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use bitwarden_api_api::models::ProjectCreateRequestModel;
use bitwarden_core::{key_management::SymmetricKeyId, Client};
use bitwarden_crypto::Encryptable;
use bitwarden_crypto::PrimitiveEncryptable;
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use uuid::Uuid;
Expand Down
2 changes: 1 addition & 1 deletion bitwarden_license/bitwarden-sm/src/projects/update.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use bitwarden_api_api::models::ProjectUpdateRequestModel;
use bitwarden_core::{key_management::SymmetricKeyId, Client};
use bitwarden_crypto::Encryptable;
use bitwarden_crypto::PrimitiveEncryptable;
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use uuid::Uuid;
Expand Down
2 changes: 1 addition & 1 deletion bitwarden_license/bitwarden-sm/src/secrets/create.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use bitwarden_api_api::models::SecretCreateRequestModel;
use bitwarden_core::{key_management::SymmetricKeyId, Client};
use bitwarden_crypto::Encryptable;
use bitwarden_crypto::PrimitiveEncryptable;
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use uuid::Uuid;
Expand Down
2 changes: 1 addition & 1 deletion bitwarden_license/bitwarden-sm/src/secrets/update.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use bitwarden_api_api::models::SecretUpdateRequestModel;
use bitwarden_core::{key_management::SymmetricKeyId, Client};
use bitwarden_crypto::Encryptable;
use bitwarden_crypto::PrimitiveEncryptable;
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use uuid::Uuid;
Expand Down
80 changes: 46 additions & 34 deletions crates/bitwarden-core/src/auth/auth_request.rs
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ pub(crate) fn auth_request_decrypt_user_key(
private_key: String,
user_key: UnsignedSharedKey,
) -> Result<SymmetricCryptoKey, EncryptionSettingsError> {
let key = AsymmetricCryptoKey::from_der(&STANDARD.decode(private_key)?)?;
let key = AsymmetricCryptoKey::from_der(&STANDARD.decode(private_key)?.into())?;
let key: SymmetricCryptoKey = user_key.decapsulate_key_unsigned(&key)?;
Ok(key)
}
Expand All @@ -66,7 +66,7 @@ pub(crate) fn auth_request_decrypt_master_key(
) -> Result<SymmetricCryptoKey, EncryptionSettingsError> {
use bitwarden_crypto::MasterKey;

let key = AsymmetricCryptoKey::from_der(&STANDARD.decode(private_key)?)?;
let key = AsymmetricCryptoKey::from_der(&STANDARD.decode(private_key)?.into())?;
let master_key: SymmetricCryptoKey = master_key.decapsulate_key_unsigned(&key)?;
let master_key = MasterKey::try_from(&master_key)?;

Expand Down Expand Up @@ -106,43 +106,47 @@ pub(crate) fn approve_auth_request(
)?)
}

#[test]
fn test_auth_request() {
let request = new_auth_request("[email protected]").unwrap();

let secret = vec![
111, 32, 97, 169, 4, 241, 174, 74, 239, 206, 113, 86, 174, 68, 216, 238, 52, 85, 156, 27,
134, 149, 54, 55, 91, 147, 45, 130, 131, 237, 51, 31, 191, 106, 155, 14, 160, 82, 47, 40,
96, 31, 114, 127, 212, 187, 167, 110, 205, 116, 198, 243, 218, 72, 137, 53, 248, 43, 255,
67, 35, 61, 245, 93,
];

let private_key =
AsymmetricCryptoKey::from_der(&STANDARD.decode(&request.private_key).unwrap()).unwrap();

let encrypted = UnsignedSharedKey::encapsulate_key_unsigned(
&SymmetricCryptoKey::try_from(secret.clone()).unwrap(),
&private_key.to_public_key(),
)
.unwrap();

let decrypted = auth_request_decrypt_user_key(request.private_key, encrypted).unwrap();

assert_eq!(decrypted.to_encoded(), secret);
}

#[cfg(test)]
mod tests {
use std::num::NonZeroU32;

use bitwarden_crypto::{Kdf, MasterKey};
use bitwarden_crypto::{
BitwardenLegacyKeyContentFormat, Bytes, Kdf, MasterKey, SpkiPublicKeyDerContentFormat,
};

use super::*;
use crate::key_management::{
crypto::{AuthRequestMethod, InitUserCryptoMethod, InitUserCryptoRequest},
SymmetricKeyId,
};

#[test]
fn test_auth_request() {
let request = new_auth_request("[email protected]").unwrap();

let secret = vec![
111, 32, 97, 169, 4, 241, 174, 74, 239, 206, 113, 86, 174, 68, 216, 238, 52, 85, 156,
27, 134, 149, 54, 55, 91, 147, 45, 130, 131, 237, 51, 31, 191, 106, 155, 14, 160, 82,
47, 40, 96, 31, 114, 127, 212, 187, 167, 110, 205, 116, 198, 243, 218, 72, 137, 53,
248, 43, 255, 67, 35, 61, 245, 93,
];

let private_key =
AsymmetricCryptoKey::from_der(&STANDARD.decode(&request.private_key).unwrap().into())
.unwrap();

let secret = Bytes::<BitwardenLegacyKeyContentFormat>::from(secret);
let encrypted = UnsignedSharedKey::encapsulate_key_unsigned(
&SymmetricCryptoKey::try_from(&secret).unwrap(),
&private_key.to_public_key(),
)
.unwrap();

let decrypted = auth_request_decrypt_user_key(request.private_key, encrypted).unwrap();

assert_eq!(decrypted.to_encoded().to_vec(), secret.to_vec());
}

#[test]
fn test_approve() {
let client = Client::new(None);
Expand All @@ -160,14 +164,15 @@ mod tests {
let private_key ="2.yN7l00BOlUE0Sb0M//Q53w==|EwKG/BduQRQ33Izqc/ogoBROIoI5dmgrxSo82sgzgAMIBt3A2FZ9vPRMY+GWT85JiqytDitGR3TqwnFUBhKUpRRAq4x7rA6A1arHrFp5Tp1p21O3SfjtvB3quiOKbqWk6ZaU1Np9HwqwAecddFcB0YyBEiRX3VwF2pgpAdiPbSMuvo2qIgyob0CUoC/h4Bz1be7Qa7B0Xw9/fMKkB1LpOm925lzqosyMQM62YpMGkjMsbZz0uPopu32fxzDWSPr+kekNNyLt9InGhTpxLmq1go/pXR2uw5dfpXc5yuta7DB0EGBwnQ8Vl5HPdDooqOTD9I1jE0mRyuBpWTTI3FRnu3JUh3rIyGBJhUmHqGZvw2CKdqHCIrQeQkkEYqOeJRJVdBjhv5KGJifqT3BFRwX/YFJIChAQpebNQKXe/0kPivWokHWwXlDB7S7mBZzhaAPidZvnuIhalE2qmTypDwHy22FyqV58T8MGGMchcASDi/QXI6kcdpJzPXSeU9o+NC68QDlOIrMVxKFeE7w7PvVmAaxEo0YwmuAzzKy9QpdlK0aab/xEi8V4iXj4hGepqAvHkXIQd+r3FNeiLfllkb61p6WTjr5urcmDQMR94/wYoilpG5OlybHdbhsYHvIzYoLrC7fzl630gcO6t4nM24vdB6Ymg9BVpEgKRAxSbE62Tqacxqnz9AcmgItb48NiR/He3n3ydGjPYuKk/ihZMgEwAEZvSlNxYONSbYrIGDtOY+8Nbt6KiH3l06wjZW8tcmFeVlWv+tWotnTY9IqlAfvNVTjtsobqtQnvsiDjdEVtNy/s2ci5TH+NdZluca2OVEr91Wayxh70kpM6ib4UGbfdmGgCo74gtKvKSJU0rTHakQ5L9JlaSDD5FamBRyI0qfL43Ad9qOUZ8DaffDCyuaVyuqk7cz9HwmEmvWU3VQ+5t06n/5kRDXttcw8w+3qClEEdGo1KeENcnXCB32dQe3tDTFpuAIMLqwXs6FhpawfZ5kPYvLPczGWaqftIs/RXJ/EltGc0ugw2dmTLpoQhCqrcKEBDoYVk0LDZKsnzitOGdi9mOWse7Se8798ib1UsHFUjGzISEt6upestxOeupSTOh0v4+AjXbDzRUyogHww3V+Bqg71bkcMxtB+WM+pn1XNbVTyl9NR040nhP7KEf6e9ruXAtmrBC2ah5cFEpLIot77VFZ9ilLuitSz+7T8n1yAh1IEG6xxXxninAZIzi2qGbH69O5RSpOJuJTv17zTLJQIIc781JwQ2TTwTGnx5wZLbffhCasowJKd2EVcyMJyhz6ru0PvXWJ4hUdkARJs3Xu8dus9a86N8Xk6aAPzBDqzYb1vyFIfBxP0oO8xFHgd30Cgmz8UrSE3qeWRrF8ftrI6xQnFjHBGWD/JWSvd6YMcQED0aVuQkuNW9ST/DzQThPzRfPUoiL10yAmV7Ytu4fR3x2sF0Yfi87YhHFuCMpV/DsqxmUizyiJuD938eRcH8hzR/VO53Qo3UIsqOLcyXtTv6THjSlTopQ+JOLOnHm1w8dzYbLN44OG44rRsbihMUQp+wUZ6bsI8rrOnm9WErzkbQFbrfAINdoCiNa6cimYIjvvnMTaFWNymqY1vZxGztQiMiHiHYwTfwHTXrb9j0uPM=|09J28iXv9oWzYtzK2LBT6Yht4IT4MijEkk0fwFdrVQ4=".parse().unwrap();
client
.internal
.initialize_user_crypto_master_key(master_key, user_key, private_key, None)
.initialize_user_crypto_master_key(master_key, user_key, private_key, None, None)
.unwrap();

let public_key = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvyLRDUwXB4BfQ507D4meFPmwn5zwy3IqTPJO4plrrhnclWahXa240BzyFW9gHgYu+Jrgms5xBfRTBMcEsqqNm7+JpB6C1B6yvnik0DpJgWQw1rwvy4SUYidpR/AWbQi47n/hvnmzI/sQxGddVfvWu1iTKOlf5blbKYAXnUE5DZBGnrWfacNXwRRdtP06tFB0LwDgw+91CeLSJ9py6dm1qX5JIxoO8StJOQl65goLCdrTWlox+0Jh4xFUfCkb+s3px+OhSCzJbvG/hlrSRcUz5GnwlCEyF3v5lfUtV96MJD+78d8pmH6CfFAp2wxKRAbGdk+JccJYO6y6oIXd3Fm7twIDAQAB";

// Verify fingerprint
let pbkey = STANDARD.decode(public_key).unwrap();
let fingerprint = fingerprint("[email protected]", &pbkey).unwrap();
let pubkey = STANDARD.decode(public_key).unwrap();
let pubkey = Bytes::<SpkiPublicKeyDerContentFormat>::from(pubkey.clone());
let fingerprint = fingerprint("[email protected]", &pubkey).unwrap();
assert_eq!(fingerprint, "childless-unfair-prowler-dropbox-designate");

approve_auth_request(&client, public_key.to_owned()).unwrap();
Expand All @@ -181,7 +186,7 @@ mod tests {
let dec = auth_request_decrypt_user_key(private_key.to_owned(), enc_user_key).unwrap();

assert_eq!(
&dec.to_encoded(),
&dec.to_encoded().to_vec(),
&[
201, 37, 234, 213, 21, 75, 40, 70, 149, 213, 234, 16, 19, 251, 162, 245, 161, 74,
34, 245, 211, 151, 211, 192, 95, 10, 117, 50, 88, 223, 23, 157
Expand All @@ -200,7 +205,7 @@ mod tests {
.unwrap();

assert_eq!(
&dec.to_encoded(),
&dec.to_encoded().to_vec(),
&[
109, 128, 172, 147, 206, 123, 134, 95, 16, 36, 155, 113, 201, 18, 186, 230, 216,
212, 173, 188, 74, 11, 134, 131, 137, 242, 105, 178, 105, 126, 52, 139, 248, 91,
Expand All @@ -227,7 +232,13 @@ mod tests {

existing_device
.internal
.initialize_user_crypto_master_key(master_key, user_key, private_key.clone(), None)
.initialize_user_crypto_master_key(
master_key,
user_key,
private_key.clone(),
None,
None,
)
.unwrap();

// Initialize a new device which will request to be logged in
Expand All @@ -246,6 +257,7 @@ mod tests {
email: email.to_owned(),
private_key,
signing_key: None,
security_state: None,
method: InitUserCryptoMethod::AuthRequest {
request_private_key: auth_req.private_key,
method: AuthRequestMethod::UserKey {
Expand Down
7 changes: 5 additions & 2 deletions crates/bitwarden-core/src/auth/login/access_token.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
use std::path::{Path, PathBuf};

use base64::{engine::general_purpose::STANDARD, Engine};
use bitwarden_crypto::{EncString, KeyDecryptable, SymmetricCryptoKey};
use bitwarden_crypto::{
BitwardenLegacyKeyContentFormat, Bytes, EncString, KeyDecryptable, SymmetricCryptoKey,
};
use chrono::Utc;
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
Expand Down Expand Up @@ -67,7 +69,8 @@ pub(crate) async fn login_access_token(

let payload: Payload = serde_json::from_slice(&decrypted_payload)?;
let encryption_key = STANDARD.decode(&payload.encryption_key)?;
let encryption_key = SymmetricCryptoKey::try_from(encryption_key)?;
let encryption_key = Bytes::<BitwardenLegacyKeyContentFormat>::from(encryption_key);
let encryption_key = SymmetricCryptoKey::try_from(&encryption_key)?;

let access_token_obj: JwtToken = r.access_token.parse()?;

Expand Down
1 change: 1 addition & 0 deletions crates/bitwarden-core/src/auth/login/api_key.rs
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ pub(crate) async fn login_api_key(
user_key,
private_key,
None,
None,
)?;
}

Expand Down
1 change: 1 addition & 0 deletions crates/bitwarden-core/src/auth/login/auth_request.rs
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,7 @@ pub(crate) async fn complete_auth_request(
email: auth_req.email,
private_key: require!(r.private_key).parse()?,
signing_key: None,
security_state: None,
method: InitUserCryptoMethod::AuthRequest {
request_private_key: auth_req.private_key,
method,
Expand Down
1 change: 1 addition & 0 deletions crates/bitwarden-core/src/auth/login/password.rs
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ pub(crate) async fn login_password(
user_key,
private_key,
None,
None,
)?;
}

Expand Down
2 changes: 2 additions & 0 deletions crates/bitwarden-core/src/auth/password/validate.rs
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,7 @@ mod tests {
user_key.parse().unwrap(),
private_key,
None,
None,
)
.unwrap();

Expand Down Expand Up @@ -193,6 +194,7 @@ mod tests {
user_key.parse().unwrap(),
private_key,
None,
None,
)
.unwrap();

Expand Down
1 change: 1 addition & 0 deletions crates/bitwarden-core/src/auth/pin.rs
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ mod tests {
user_key.parse().unwrap(),
private_key,
None,
None,
)
.unwrap();

Expand Down
1 change: 1 addition & 0 deletions crates/bitwarden-core/src/auth/tde.rs
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ pub(super) fn make_register_tde_keys(
// Note: Signing keys are not supported on registration yet. This needs to be changed as
// soon as registration is supported.
None,
None,
)?;

Ok(RegisterTdeKeyResponse {
Expand Down
Loading