LibWeb: Set algorithm length for HMAC key generation

This assignment was missing from the spec, but has been fixed since
https://github.com/w3c/webcrypto/pull/394.

Also add relevant WPT tests.
This commit is contained in:
devgianlu 2024-12-26 20:09:58 +01:00 committed by Andreas Kling
parent ac0036d184
commit f5d3d6a7d4
Notes: github-actions[bot] 2025-01-02 10:38:45 +00:00
4 changed files with 230 additions and 5 deletions

View file

@ -6205,19 +6205,22 @@ WebIDL::ExceptionOr<Variant<GC::Ref<CryptoKey>, GC::Ref<CryptoKeyPair>>> HMAC::g
// 10. Set the hash attribute of algorithm to hash. // 10. Set the hash attribute of algorithm to hash.
algorithm->set_hash(hash); algorithm->set_hash(hash);
// 11. Set the [[type]] internal slot of key to "secret". // 11. Set the length attribute of algorithm to length.
algorithm->set_length(length);
// 12. Set the [[type]] internal slot of key to "secret".
key->set_type(Bindings::KeyType::Secret); key->set_type(Bindings::KeyType::Secret);
// 12. Set the [[algorithm]] internal slot of key to algorithm. // 13. Set the [[algorithm]] internal slot of key to algorithm.
key->set_algorithm(algorithm); key->set_algorithm(algorithm);
// 13. Set the [[extractable]] internal slot of key to be extractable. // 14. Set the [[extractable]] internal slot of key to be extractable.
key->set_extractable(extractable); key->set_extractable(extractable);
// 14. Set the [[usages]] internal slot of key to be usages. // 15. Set the [[usages]] internal slot of key to be usages.
key->set_usages(usages); key->set_usages(usages);
// 15. Return key. // 16. Return key.
return Variant<GC::Ref<CryptoKey>, GC::Ref<CryptoKeyPair>> { key }; return Variant<GC::Ref<CryptoKey>, GC::Ref<CryptoKeyPair>> { key };
} }

View file

@ -0,0 +1,198 @@
Harness status: OK
Found 192 tests
96 Pass
96 Fail
Pass Success: generateKey({hash: SHA-1, length: 160, name: HMAC}, false, [sign])
Pass Success: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign])
Pass Success: generateKey({hash: SHA-1, length: 160, name: HMAC}, false, [verify, sign])
Pass Success: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify, sign])
Pass Success: generateKey({hash: SHA-1, length: 160, name: HMAC}, false, [verify])
Pass Success: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [verify])
Pass Success: generateKey({hash: SHA-1, length: 160, name: HMAC}, false, [sign, verify, sign, verify])
Pass Success: generateKey({hash: SHA-1, length: 160, name: HMAC}, true, [sign, verify, sign, verify])
Pass Success: generateKey({hash: SHA-256, length: 256, name: HMAC}, false, [sign])
Pass Success: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign])
Pass Success: generateKey({hash: SHA-256, length: 256, name: HMAC}, false, [verify, sign])
Pass Success: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify, sign])
Pass Success: generateKey({hash: SHA-256, length: 256, name: HMAC}, false, [verify])
Pass Success: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [verify])
Pass Success: generateKey({hash: SHA-256, length: 256, name: HMAC}, false, [sign, verify, sign, verify])
Pass Success: generateKey({hash: SHA-256, length: 256, name: HMAC}, true, [sign, verify, sign, verify])
Pass Success: generateKey({hash: SHA-384, length: 384, name: HMAC}, false, [sign])
Pass Success: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign])
Pass Success: generateKey({hash: SHA-384, length: 384, name: HMAC}, false, [verify, sign])
Pass Success: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify, sign])
Pass Success: generateKey({hash: SHA-384, length: 384, name: HMAC}, false, [verify])
Pass Success: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [verify])
Pass Success: generateKey({hash: SHA-384, length: 384, name: HMAC}, false, [sign, verify, sign, verify])
Pass Success: generateKey({hash: SHA-384, length: 384, name: HMAC}, true, [sign, verify, sign, verify])
Pass Success: generateKey({hash: SHA-512, length: 512, name: HMAC}, false, [sign])
Pass Success: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign])
Pass Success: generateKey({hash: SHA-512, length: 512, name: HMAC}, false, [verify, sign])
Pass Success: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify, sign])
Pass Success: generateKey({hash: SHA-512, length: 512, name: HMAC}, false, [verify])
Pass Success: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [verify])
Pass Success: generateKey({hash: SHA-512, length: 512, name: HMAC}, false, [sign, verify, sign, verify])
Pass Success: generateKey({hash: SHA-512, length: 512, name: HMAC}, true, [sign, verify, sign, verify])
Fail Success: generateKey({hash: SHA-1, name: HMAC}, false, [sign])
Fail Success: generateKey({hash: SHA-1, name: HMAC}, true, [sign])
Fail Success: generateKey({hash: SHA-1, name: HMAC}, false, [verify, sign])
Fail Success: generateKey({hash: SHA-1, name: HMAC}, true, [verify, sign])
Fail Success: generateKey({hash: SHA-1, name: HMAC}, false, [verify])
Fail Success: generateKey({hash: SHA-1, name: HMAC}, true, [verify])
Fail Success: generateKey({hash: SHA-1, name: HMAC}, false, [sign, verify, sign, verify])
Fail Success: generateKey({hash: SHA-1, name: HMAC}, true, [sign, verify, sign, verify])
Fail Success: generateKey({hash: SHA-256, name: HMAC}, false, [sign])
Fail Success: generateKey({hash: SHA-256, name: HMAC}, true, [sign])
Fail Success: generateKey({hash: SHA-256, name: HMAC}, false, [verify, sign])
Fail Success: generateKey({hash: SHA-256, name: HMAC}, true, [verify, sign])
Fail Success: generateKey({hash: SHA-256, name: HMAC}, false, [verify])
Fail Success: generateKey({hash: SHA-256, name: HMAC}, true, [verify])
Fail Success: generateKey({hash: SHA-256, name: HMAC}, false, [sign, verify, sign, verify])
Fail Success: generateKey({hash: SHA-256, name: HMAC}, true, [sign, verify, sign, verify])
Fail Success: generateKey({hash: SHA-384, name: HMAC}, false, [sign])
Fail Success: generateKey({hash: SHA-384, name: HMAC}, true, [sign])
Fail Success: generateKey({hash: SHA-384, name: HMAC}, false, [verify, sign])
Fail Success: generateKey({hash: SHA-384, name: HMAC}, true, [verify, sign])
Fail Success: generateKey({hash: SHA-384, name: HMAC}, false, [verify])
Fail Success: generateKey({hash: SHA-384, name: HMAC}, true, [verify])
Fail Success: generateKey({hash: SHA-384, name: HMAC}, false, [sign, verify, sign, verify])
Fail Success: generateKey({hash: SHA-384, name: HMAC}, true, [sign, verify, sign, verify])
Fail Success: generateKey({hash: SHA-512, name: HMAC}, false, [sign])
Fail Success: generateKey({hash: SHA-512, name: HMAC}, true, [sign])
Fail Success: generateKey({hash: SHA-512, name: HMAC}, false, [verify, sign])
Fail Success: generateKey({hash: SHA-512, name: HMAC}, true, [verify, sign])
Fail Success: generateKey({hash: SHA-512, name: HMAC}, false, [verify])
Fail Success: generateKey({hash: SHA-512, name: HMAC}, true, [verify])
Fail Success: generateKey({hash: SHA-512, name: HMAC}, false, [sign, verify, sign, verify])
Fail Success: generateKey({hash: SHA-512, name: HMAC}, true, [sign, verify, sign, verify])
Pass Success: generateKey({hash: SHA-1, length: 160, name: hmac}, false, [sign])
Pass Success: generateKey({hash: SHA-1, length: 160, name: hmac}, true, [sign])
Pass Success: generateKey({hash: SHA-1, length: 160, name: hmac}, false, [verify, sign])
Pass Success: generateKey({hash: SHA-1, length: 160, name: hmac}, true, [verify, sign])
Pass Success: generateKey({hash: SHA-1, length: 160, name: hmac}, false, [verify])
Pass Success: generateKey({hash: SHA-1, length: 160, name: hmac}, true, [verify])
Pass Success: generateKey({hash: SHA-1, length: 160, name: hmac}, false, [sign, verify, sign, verify])
Pass Success: generateKey({hash: SHA-1, length: 160, name: hmac}, true, [sign, verify, sign, verify])
Pass Success: generateKey({hash: SHA-256, length: 256, name: hmac}, false, [sign])
Pass Success: generateKey({hash: SHA-256, length: 256, name: hmac}, true, [sign])
Pass Success: generateKey({hash: SHA-256, length: 256, name: hmac}, false, [verify, sign])
Pass Success: generateKey({hash: SHA-256, length: 256, name: hmac}, true, [verify, sign])
Pass Success: generateKey({hash: SHA-256, length: 256, name: hmac}, false, [verify])
Pass Success: generateKey({hash: SHA-256, length: 256, name: hmac}, true, [verify])
Pass Success: generateKey({hash: SHA-256, length: 256, name: hmac}, false, [sign, verify, sign, verify])
Pass Success: generateKey({hash: SHA-256, length: 256, name: hmac}, true, [sign, verify, sign, verify])
Pass Success: generateKey({hash: SHA-384, length: 384, name: hmac}, false, [sign])
Pass Success: generateKey({hash: SHA-384, length: 384, name: hmac}, true, [sign])
Pass Success: generateKey({hash: SHA-384, length: 384, name: hmac}, false, [verify, sign])
Pass Success: generateKey({hash: SHA-384, length: 384, name: hmac}, true, [verify, sign])
Pass Success: generateKey({hash: SHA-384, length: 384, name: hmac}, false, [verify])
Pass Success: generateKey({hash: SHA-384, length: 384, name: hmac}, true, [verify])
Pass Success: generateKey({hash: SHA-384, length: 384, name: hmac}, false, [sign, verify, sign, verify])
Pass Success: generateKey({hash: SHA-384, length: 384, name: hmac}, true, [sign, verify, sign, verify])
Pass Success: generateKey({hash: SHA-512, length: 512, name: hmac}, false, [sign])
Pass Success: generateKey({hash: SHA-512, length: 512, name: hmac}, true, [sign])
Pass Success: generateKey({hash: SHA-512, length: 512, name: hmac}, false, [verify, sign])
Pass Success: generateKey({hash: SHA-512, length: 512, name: hmac}, true, [verify, sign])
Pass Success: generateKey({hash: SHA-512, length: 512, name: hmac}, false, [verify])
Pass Success: generateKey({hash: SHA-512, length: 512, name: hmac}, true, [verify])
Pass Success: generateKey({hash: SHA-512, length: 512, name: hmac}, false, [sign, verify, sign, verify])
Pass Success: generateKey({hash: SHA-512, length: 512, name: hmac}, true, [sign, verify, sign, verify])
Fail Success: generateKey({hash: SHA-1, name: hmac}, false, [sign])
Fail Success: generateKey({hash: SHA-1, name: hmac}, true, [sign])
Fail Success: generateKey({hash: SHA-1, name: hmac}, false, [verify, sign])
Fail Success: generateKey({hash: SHA-1, name: hmac}, true, [verify, sign])
Fail Success: generateKey({hash: SHA-1, name: hmac}, false, [verify])
Fail Success: generateKey({hash: SHA-1, name: hmac}, true, [verify])
Fail Success: generateKey({hash: SHA-1, name: hmac}, false, [sign, verify, sign, verify])
Fail Success: generateKey({hash: SHA-1, name: hmac}, true, [sign, verify, sign, verify])
Fail Success: generateKey({hash: SHA-256, name: hmac}, false, [sign])
Fail Success: generateKey({hash: SHA-256, name: hmac}, true, [sign])
Fail Success: generateKey({hash: SHA-256, name: hmac}, false, [verify, sign])
Fail Success: generateKey({hash: SHA-256, name: hmac}, true, [verify, sign])
Fail Success: generateKey({hash: SHA-256, name: hmac}, false, [verify])
Fail Success: generateKey({hash: SHA-256, name: hmac}, true, [verify])
Fail Success: generateKey({hash: SHA-256, name: hmac}, false, [sign, verify, sign, verify])
Fail Success: generateKey({hash: SHA-256, name: hmac}, true, [sign, verify, sign, verify])
Fail Success: generateKey({hash: SHA-384, name: hmac}, false, [sign])
Fail Success: generateKey({hash: SHA-384, name: hmac}, true, [sign])
Fail Success: generateKey({hash: SHA-384, name: hmac}, false, [verify, sign])
Fail Success: generateKey({hash: SHA-384, name: hmac}, true, [verify, sign])
Fail Success: generateKey({hash: SHA-384, name: hmac}, false, [verify])
Fail Success: generateKey({hash: SHA-384, name: hmac}, true, [verify])
Fail Success: generateKey({hash: SHA-384, name: hmac}, false, [sign, verify, sign, verify])
Fail Success: generateKey({hash: SHA-384, name: hmac}, true, [sign, verify, sign, verify])
Fail Success: generateKey({hash: SHA-512, name: hmac}, false, [sign])
Fail Success: generateKey({hash: SHA-512, name: hmac}, true, [sign])
Fail Success: generateKey({hash: SHA-512, name: hmac}, false, [verify, sign])
Fail Success: generateKey({hash: SHA-512, name: hmac}, true, [verify, sign])
Fail Success: generateKey({hash: SHA-512, name: hmac}, false, [verify])
Fail Success: generateKey({hash: SHA-512, name: hmac}, true, [verify])
Fail Success: generateKey({hash: SHA-512, name: hmac}, false, [sign, verify, sign, verify])
Fail Success: generateKey({hash: SHA-512, name: hmac}, true, [sign, verify, sign, verify])
Pass Success: generateKey({hash: SHA-1, length: 160, name: Hmac}, false, [sign])
Pass Success: generateKey({hash: SHA-1, length: 160, name: Hmac}, true, [sign])
Pass Success: generateKey({hash: SHA-1, length: 160, name: Hmac}, false, [verify, sign])
Pass Success: generateKey({hash: SHA-1, length: 160, name: Hmac}, true, [verify, sign])
Pass Success: generateKey({hash: SHA-1, length: 160, name: Hmac}, false, [verify])
Pass Success: generateKey({hash: SHA-1, length: 160, name: Hmac}, true, [verify])
Pass Success: generateKey({hash: SHA-1, length: 160, name: Hmac}, false, [sign, verify, sign, verify])
Pass Success: generateKey({hash: SHA-1, length: 160, name: Hmac}, true, [sign, verify, sign, verify])
Pass Success: generateKey({hash: SHA-256, length: 256, name: Hmac}, false, [sign])
Pass Success: generateKey({hash: SHA-256, length: 256, name: Hmac}, true, [sign])
Pass Success: generateKey({hash: SHA-256, length: 256, name: Hmac}, false, [verify, sign])
Pass Success: generateKey({hash: SHA-256, length: 256, name: Hmac}, true, [verify, sign])
Pass Success: generateKey({hash: SHA-256, length: 256, name: Hmac}, false, [verify])
Pass Success: generateKey({hash: SHA-256, length: 256, name: Hmac}, true, [verify])
Pass Success: generateKey({hash: SHA-256, length: 256, name: Hmac}, false, [sign, verify, sign, verify])
Pass Success: generateKey({hash: SHA-256, length: 256, name: Hmac}, true, [sign, verify, sign, verify])
Pass Success: generateKey({hash: SHA-384, length: 384, name: Hmac}, false, [sign])
Pass Success: generateKey({hash: SHA-384, length: 384, name: Hmac}, true, [sign])
Pass Success: generateKey({hash: SHA-384, length: 384, name: Hmac}, false, [verify, sign])
Pass Success: generateKey({hash: SHA-384, length: 384, name: Hmac}, true, [verify, sign])
Pass Success: generateKey({hash: SHA-384, length: 384, name: Hmac}, false, [verify])
Pass Success: generateKey({hash: SHA-384, length: 384, name: Hmac}, true, [verify])
Pass Success: generateKey({hash: SHA-384, length: 384, name: Hmac}, false, [sign, verify, sign, verify])
Pass Success: generateKey({hash: SHA-384, length: 384, name: Hmac}, true, [sign, verify, sign, verify])
Pass Success: generateKey({hash: SHA-512, length: 512, name: Hmac}, false, [sign])
Pass Success: generateKey({hash: SHA-512, length: 512, name: Hmac}, true, [sign])
Pass Success: generateKey({hash: SHA-512, length: 512, name: Hmac}, false, [verify, sign])
Pass Success: generateKey({hash: SHA-512, length: 512, name: Hmac}, true, [verify, sign])
Pass Success: generateKey({hash: SHA-512, length: 512, name: Hmac}, false, [verify])
Pass Success: generateKey({hash: SHA-512, length: 512, name: Hmac}, true, [verify])
Pass Success: generateKey({hash: SHA-512, length: 512, name: Hmac}, false, [sign, verify, sign, verify])
Pass Success: generateKey({hash: SHA-512, length: 512, name: Hmac}, true, [sign, verify, sign, verify])
Fail Success: generateKey({hash: SHA-1, name: Hmac}, false, [sign])
Fail Success: generateKey({hash: SHA-1, name: Hmac}, true, [sign])
Fail Success: generateKey({hash: SHA-1, name: Hmac}, false, [verify, sign])
Fail Success: generateKey({hash: SHA-1, name: Hmac}, true, [verify, sign])
Fail Success: generateKey({hash: SHA-1, name: Hmac}, false, [verify])
Fail Success: generateKey({hash: SHA-1, name: Hmac}, true, [verify])
Fail Success: generateKey({hash: SHA-1, name: Hmac}, false, [sign, verify, sign, verify])
Fail Success: generateKey({hash: SHA-1, name: Hmac}, true, [sign, verify, sign, verify])
Fail Success: generateKey({hash: SHA-256, name: Hmac}, false, [sign])
Fail Success: generateKey({hash: SHA-256, name: Hmac}, true, [sign])
Fail Success: generateKey({hash: SHA-256, name: Hmac}, false, [verify, sign])
Fail Success: generateKey({hash: SHA-256, name: Hmac}, true, [verify, sign])
Fail Success: generateKey({hash: SHA-256, name: Hmac}, false, [verify])
Fail Success: generateKey({hash: SHA-256, name: Hmac}, true, [verify])
Fail Success: generateKey({hash: SHA-256, name: Hmac}, false, [sign, verify, sign, verify])
Fail Success: generateKey({hash: SHA-256, name: Hmac}, true, [sign, verify, sign, verify])
Fail Success: generateKey({hash: SHA-384, name: Hmac}, false, [sign])
Fail Success: generateKey({hash: SHA-384, name: Hmac}, true, [sign])
Fail Success: generateKey({hash: SHA-384, name: Hmac}, false, [verify, sign])
Fail Success: generateKey({hash: SHA-384, name: Hmac}, true, [verify, sign])
Fail Success: generateKey({hash: SHA-384, name: Hmac}, false, [verify])
Fail Success: generateKey({hash: SHA-384, name: Hmac}, true, [verify])
Fail Success: generateKey({hash: SHA-384, name: Hmac}, false, [sign, verify, sign, verify])
Fail Success: generateKey({hash: SHA-384, name: Hmac}, true, [sign, verify, sign, verify])
Fail Success: generateKey({hash: SHA-512, name: Hmac}, false, [sign])
Fail Success: generateKey({hash: SHA-512, name: Hmac}, true, [sign])
Fail Success: generateKey({hash: SHA-512, name: Hmac}, false, [verify, sign])
Fail Success: generateKey({hash: SHA-512, name: Hmac}, true, [verify, sign])
Fail Success: generateKey({hash: SHA-512, name: Hmac}, false, [verify])
Fail Success: generateKey({hash: SHA-512, name: Hmac}, true, [verify])
Fail Success: generateKey({hash: SHA-512, name: Hmac}, false, [sign, verify, sign, verify])
Fail Success: generateKey({hash: SHA-512, name: Hmac}, true, [sign, verify, sign, verify])

View file

@ -0,0 +1,18 @@
<!doctype html>
<meta charset=utf-8>
<title>WebCryptoAPI: generateKey() Successful Calls</title>
<meta name="timeout" content="long">
<script>
self.GLOBAL = {
isWindow: function() { return true; },
isWorker: function() { return false; },
isShadowRealm: function() { return false; },
};
</script>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script src="../util/helpers.js"></script>
<script src="../../common/subset-tests.js"></script>
<script src="successes.js"></script>
<div id=log></div>
<script src="../../WebCryptoAPI/generateKey/successes_HMAC.https.any.js"></script>

View file

@ -0,0 +1,6 @@
// META: title=WebCryptoAPI: generateKey() Successful Calls
// META: timeout=long
// META: script=../util/helpers.js
// META: script=/common/subset-tests.js
// META: script=successes.js
run_test(["HMAC"]);