refactor: add CanGc as argument to SubtleCrypto::import_key_{pbkdf2, aes, hkdf, hmac} (#35601)

* refactor: add CanGc as argument to SubtleCrypto::import_key_pbkdf2

Signed-off-by: Yerkebulan Tulibergenov <yerkebulan@gmail.com>

* refactor: add CanGc as argument to SubtleCrypto::{import_key_aes, import_key_hkdf, import_key_hmac}

Signed-off-by: Yerkebulan Tulibergenov <yerkebulan@gmail.com>

---------

Signed-off-by: Yerkebulan Tulibergenov <yerkebulan@gmail.com>
This commit is contained in:
Yerkebulan Tulibergenov 2025-02-22 00:17:22 -08:00 committed by GitHub
parent 89d7f874b2
commit 4ab4e5dd47
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -622,7 +622,8 @@ impl SubtleCryptoMethods<crate::DomTypeHolder> for SubtleCrypto {
KeyFormat::Raw, KeyFormat::Raw,
&secret, &secret,
extractable, extractable,
key_usages key_usages,
CanGc::note()
); );
let result = match result { let result = match result {
Ok(key) => key, Ok(key) => key,
@ -769,17 +770,19 @@ impl SubtleCryptoMethods<crate::DomTypeHolder> for SubtleCrypto {
let this = Trusted::new(self); let this = Trusted::new(self);
let trusted_promise = TrustedPromise::new(promise.clone()); let trusted_promise = TrustedPromise::new(promise.clone());
self.global().task_manager().dom_manipulation_task_source().queue( self.global()
task!(import_key: move || { .task_manager()
.dom_manipulation_task_source()
.queue(task!(import_key: move || {
let subtle = this.root(); let subtle = this.root();
let promise = trusted_promise.root(); let promise = trusted_promise.root();
let imported_key = normalized_algorithm.import_key(&subtle, format, &data, extractable, key_usages); let imported_key = normalized_algorithm.import_key(&subtle,
format, &data, extractable, key_usages, CanGc::note());
match imported_key { match imported_key {
Ok(k) => promise.resolve_native(&k), Ok(k) => promise.resolve_native(&k),
Err(e) => promise.reject_error(e), Err(e) => promise.reject_error(e),
}; };
}), }));
);
promise promise
} }
@ -1063,7 +1066,8 @@ impl SubtleCryptoMethods<crate::DomTypeHolder> for SubtleCrypto {
} }
}, },
}; };
match normalized_key_algorithm.import_key(&subtle, format, &import_key_bytes, extractable, key_usages) { match normalized_key_algorithm.import_key(&subtle, format, &import_key_bytes,
extractable, key_usages, CanGc::note()) {
Ok(imported_key) => promise.resolve_native(&imported_key), Ok(imported_key) => promise.resolve_native(&imported_key),
Err(e) => promise.reject_error(e), Err(e) => promise.reject_error(e),
} }
@ -2185,6 +2189,7 @@ impl SubtleCrypto {
extractable: bool, extractable: bool,
usages: Vec<KeyUsage>, usages: Vec<KeyUsage>,
alg_name: &str, alg_name: &str,
can_gc: CanGc,
) -> Result<DomRoot<CryptoKey>, Error> { ) -> Result<DomRoot<CryptoKey>, Error> {
if usages.iter().any(|usage| { if usages.iter().any(|usage| {
!matches!( !matches!(
@ -2227,7 +2232,7 @@ impl SubtleCrypto {
algorithm_object.handle(), algorithm_object.handle(),
usages, usages,
handle, handle,
CanGc::note(), can_gc,
); );
Ok(crypto_key) Ok(crypto_key)
@ -2295,6 +2300,7 @@ impl SubtleCrypto {
data: &[u8], data: &[u8],
extractable: bool, extractable: bool,
usages: Vec<KeyUsage>, usages: Vec<KeyUsage>,
can_gc: CanGc,
) -> Result<DomRoot<CryptoKey>, Error> { ) -> Result<DomRoot<CryptoKey>, Error> {
// Step 1. Let keyData be the key data to be imported. // Step 1. Let keyData be the key data to be imported.
// Step 2. If format is "raw": // Step 2. If format is "raw":
@ -2332,7 +2338,7 @@ impl SubtleCrypto {
algorithm_object.handle(), algorithm_object.handle(),
usages, usages,
Handle::Hkdf(data.to_vec()), Handle::Hkdf(data.to_vec()),
CanGc::note(), can_gc,
); );
// Step 8. Return key. // Step 8. Return key.
@ -2352,6 +2358,7 @@ impl SubtleCrypto {
key_data: &[u8], key_data: &[u8],
extractable: bool, extractable: bool,
usages: Vec<KeyUsage>, usages: Vec<KeyUsage>,
can_gc: CanGc,
) -> Result<DomRoot<CryptoKey>, Error> { ) -> Result<DomRoot<CryptoKey>, Error> {
// Step 1. Let keyData be the key data to be imported. // Step 1. Let keyData be the key data to be imported.
// Step 2. If usages contains an entry which is not "sign" or "verify", then throw a SyntaxError. // Step 2. If usages contains an entry which is not "sign" or "verify", then throw a SyntaxError.
@ -2430,7 +2437,7 @@ impl SubtleCrypto {
algorithm_object.handle(), algorithm_object.handle(),
usages, usages,
Handle::Hmac(truncated_data), Handle::Hmac(truncated_data),
CanGc::note(), can_gc,
); );
// Step 15. Return key. // Step 15. Return key.
@ -2545,6 +2552,7 @@ impl SubtleCrypto {
data: &[u8], data: &[u8],
extractable: bool, extractable: bool,
usages: Vec<KeyUsage>, usages: Vec<KeyUsage>,
can_gc: CanGc,
) -> Result<DomRoot<CryptoKey>, Error> { ) -> Result<DomRoot<CryptoKey>, Error> {
// Step 1. If format is not "raw", throw a NotSupportedError // Step 1. If format is not "raw", throw a NotSupportedError
if format != KeyFormat::Raw { if format != KeyFormat::Raw {
@ -2584,7 +2592,7 @@ impl SubtleCrypto {
algorithm_object.handle(), algorithm_object.handle(),
usages, usages,
Handle::Pbkdf2(data.to_vec()), Handle::Pbkdf2(data.to_vec()),
CanGc::note(), can_gc,
); );
// Step 9. Return key. // Step 9. Return key.
@ -2818,25 +2826,28 @@ impl ImportKeyAlgorithm {
secret: &[u8], secret: &[u8],
extractable: bool, extractable: bool,
key_usages: Vec<KeyUsage>, key_usages: Vec<KeyUsage>,
can_gc: CanGc,
) -> Result<DomRoot<CryptoKey>, Error> { ) -> Result<DomRoot<CryptoKey>, Error> {
match self { match self {
Self::AesCbc => { Self::AesCbc => {
subtle.import_key_aes(format, secret, extractable, key_usages, ALG_AES_CBC) subtle.import_key_aes(format, secret, extractable, key_usages, ALG_AES_CBC, can_gc)
}, },
Self::AesCtr => { Self::AesCtr => {
subtle.import_key_aes(format, secret, extractable, key_usages, ALG_AES_CTR) subtle.import_key_aes(format, secret, extractable, key_usages, ALG_AES_CTR, can_gc)
}, },
Self::AesKw => { Self::AesKw => {
subtle.import_key_aes(format, secret, extractable, key_usages, ALG_AES_KW) subtle.import_key_aes(format, secret, extractable, key_usages, ALG_AES_KW, can_gc)
}, },
Self::AesGcm => { Self::AesGcm => {
subtle.import_key_aes(format, secret, extractable, key_usages, ALG_AES_GCM) subtle.import_key_aes(format, secret, extractable, key_usages, ALG_AES_GCM, can_gc)
}, },
Self::Hmac(params) => { Self::Hmac(params) => {
subtle.import_key_hmac(params, format, secret, extractable, key_usages) subtle.import_key_hmac(params, format, secret, extractable, key_usages, can_gc)
}, },
Self::Pbkdf2 => subtle.import_key_pbkdf2(format, secret, extractable, key_usages), Self::Pbkdf2 => {
Self::Hkdf => subtle.import_key_hkdf(format, secret, extractable, key_usages), subtle.import_key_pbkdf2(format, secret, extractable, key_usages, can_gc)
},
Self::Hkdf => subtle.import_key_hkdf(format, secret, extractable, key_usages, can_gc),
} }
} }
} }