mirror of
https://github.com/servo/servo.git
synced 2025-08-07 14:35:33 +01:00
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:
parent
89d7f874b2
commit
4ab4e5dd47
1 changed files with 29 additions and 18 deletions
|
@ -622,7 +622,8 @@ impl SubtleCryptoMethods<crate::DomTypeHolder> for SubtleCrypto {
|
|||
KeyFormat::Raw,
|
||||
&secret,
|
||||
extractable,
|
||||
key_usages
|
||||
key_usages,
|
||||
CanGc::note()
|
||||
);
|
||||
let result = match result {
|
||||
Ok(key) => key,
|
||||
|
@ -769,17 +770,19 @@ impl SubtleCryptoMethods<crate::DomTypeHolder> for SubtleCrypto {
|
|||
|
||||
let this = Trusted::new(self);
|
||||
let trusted_promise = TrustedPromise::new(promise.clone());
|
||||
self.global().task_manager().dom_manipulation_task_source().queue(
|
||||
task!(import_key: move || {
|
||||
self.global()
|
||||
.task_manager()
|
||||
.dom_manipulation_task_source()
|
||||
.queue(task!(import_key: move || {
|
||||
let subtle = this.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 {
|
||||
Ok(k) => promise.resolve_native(&k),
|
||||
Err(e) => promise.reject_error(e),
|
||||
};
|
||||
}),
|
||||
);
|
||||
}));
|
||||
|
||||
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),
|
||||
Err(e) => promise.reject_error(e),
|
||||
}
|
||||
|
@ -2185,6 +2189,7 @@ impl SubtleCrypto {
|
|||
extractable: bool,
|
||||
usages: Vec<KeyUsage>,
|
||||
alg_name: &str,
|
||||
can_gc: CanGc,
|
||||
) -> Result<DomRoot<CryptoKey>, Error> {
|
||||
if usages.iter().any(|usage| {
|
||||
!matches!(
|
||||
|
@ -2227,7 +2232,7 @@ impl SubtleCrypto {
|
|||
algorithm_object.handle(),
|
||||
usages,
|
||||
handle,
|
||||
CanGc::note(),
|
||||
can_gc,
|
||||
);
|
||||
|
||||
Ok(crypto_key)
|
||||
|
@ -2295,6 +2300,7 @@ impl SubtleCrypto {
|
|||
data: &[u8],
|
||||
extractable: bool,
|
||||
usages: Vec<KeyUsage>,
|
||||
can_gc: CanGc,
|
||||
) -> Result<DomRoot<CryptoKey>, Error> {
|
||||
// Step 1. Let keyData be the key data to be imported.
|
||||
// Step 2. If format is "raw":
|
||||
|
@ -2332,7 +2338,7 @@ impl SubtleCrypto {
|
|||
algorithm_object.handle(),
|
||||
usages,
|
||||
Handle::Hkdf(data.to_vec()),
|
||||
CanGc::note(),
|
||||
can_gc,
|
||||
);
|
||||
|
||||
// Step 8. Return key.
|
||||
|
@ -2352,6 +2358,7 @@ impl SubtleCrypto {
|
|||
key_data: &[u8],
|
||||
extractable: bool,
|
||||
usages: Vec<KeyUsage>,
|
||||
can_gc: CanGc,
|
||||
) -> Result<DomRoot<CryptoKey>, Error> {
|
||||
// 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.
|
||||
|
@ -2430,7 +2437,7 @@ impl SubtleCrypto {
|
|||
algorithm_object.handle(),
|
||||
usages,
|
||||
Handle::Hmac(truncated_data),
|
||||
CanGc::note(),
|
||||
can_gc,
|
||||
);
|
||||
|
||||
// Step 15. Return key.
|
||||
|
@ -2545,6 +2552,7 @@ impl SubtleCrypto {
|
|||
data: &[u8],
|
||||
extractable: bool,
|
||||
usages: Vec<KeyUsage>,
|
||||
can_gc: CanGc,
|
||||
) -> Result<DomRoot<CryptoKey>, Error> {
|
||||
// Step 1. If format is not "raw", throw a NotSupportedError
|
||||
if format != KeyFormat::Raw {
|
||||
|
@ -2584,7 +2592,7 @@ impl SubtleCrypto {
|
|||
algorithm_object.handle(),
|
||||
usages,
|
||||
Handle::Pbkdf2(data.to_vec()),
|
||||
CanGc::note(),
|
||||
can_gc,
|
||||
);
|
||||
|
||||
// Step 9. Return key.
|
||||
|
@ -2818,25 +2826,28 @@ impl ImportKeyAlgorithm {
|
|||
secret: &[u8],
|
||||
extractable: bool,
|
||||
key_usages: Vec<KeyUsage>,
|
||||
can_gc: CanGc,
|
||||
) -> Result<DomRoot<CryptoKey>, Error> {
|
||||
match self {
|
||||
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 => {
|
||||
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 => {
|
||||
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 => {
|
||||
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) => {
|
||||
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::Hkdf => subtle.import_key_hkdf(format, secret, extractable, key_usages),
|
||||
Self::Pbkdf2 => {
|
||||
subtle.import_key_pbkdf2(format, secret, extractable, key_usages, can_gc)
|
||||
},
|
||||
Self::Hkdf => subtle.import_key_hkdf(format, secret, extractable, key_usages, can_gc),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue