1
0
Fork 0
mirror of https://github.com/LadybirdBrowser/ladybird.git synced 2025-06-09 09:34:57 +09:00

LibWeb: Decode X25519 keys as base64url + throw on bogus key data

This makes the X25519 importKey tests from WPT actually run.
This commit is contained in:
Andreas Kling 2024-11-24 20:08:33 +01:00 committed by Andreas Kling
parent e0def9d745
commit 8cb371b2ce
Notes: github-actions[bot] 2024-11-24 22:29:50 +00:00
3 changed files with 310 additions and 2 deletions

View file

@ -3188,7 +3188,11 @@ WebIDL::ExceptionOr<GC::Ref<CryptoKey>> X25519::import_key([[maybe_unused]] Web:
// 2. Let key be a new CryptoKey object that represents the X25519 private key identified by interpreting jwk according to Section 2 of [RFC8037].
auto private_key_base_64 = jwk.d.value();
auto private_key = TRY_OR_THROW_OOM(vm, decode_base64(private_key_base_64));
auto private_key_or_error = decode_base64url(private_key_base_64);
if (private_key_or_error.is_error()) {
return WebIDL::DataError::create(m_realm, "Failed to decode base64"_string);
}
auto private_key = private_key_or_error.release_value();
key = CryptoKey::create(m_realm, CryptoKey::InternalKeyData { private_key });
// 3. Set the [[type]] internal slot of Key to "private".
@ -3217,7 +3221,11 @@ WebIDL::ExceptionOr<GC::Ref<CryptoKey>> X25519::import_key([[maybe_unused]] Web:
// 2. Let key be a new CryptoKey object that represents the X25519 public key identified by interpreting jwk according to Section 2 of [RFC8037].
auto public_key_base_64 = jwk.x.value();
auto public_key = TRY_OR_THROW_OOM(vm, decode_base64(public_key_base_64));
auto public_key_or_error = decode_base64url(public_key_base_64);
if (public_key_or_error.is_error()) {
return WebIDL::DataError::create(m_realm, "Failed to decode base64"_string);
}
auto public_key = public_key_or_error.release_value();
key = CryptoKey::create(m_realm, CryptoKey::InternalKeyData { public_key });
// 3. Set the [[type]] internal slot of Key to "public".

View file

@ -0,0 +1,65 @@
Summary
Harness status: OK
Rerun
Found 54 tests
24 Pass
30 Fail
Details
Result Test Name MessageFail Good parameters: X25519 bits (spki, buffer(44), {name: X25519}, true, [])
Fail Good parameters: X25519 bits (spki, buffer(44), X25519, true, [])
Fail Good parameters: X25519 bits (jwk, object(kty, crv, x), {name: X25519}, true, [])
Fail Good parameters: X25519 bits (jwk, object(kty, crv, x), X25519, true, [])
Fail Good parameters with ignored JWK alg: X25519 (jwk, object(kty, crv, x), {name: X25519}, true, [])
Fail Good parameters with ignored JWK alg: X25519 (jwk, object(kty, crv, x), X25519, true, [])
Pass Good parameters: X25519 bits (raw, buffer(32), {name: X25519}, true, [])
Pass Good parameters: X25519 bits (raw, buffer(32), X25519, true, [])
Fail Good parameters: X25519 bits (pkcs8, buffer(48), {name: X25519}, true, [deriveKey])
Fail Good parameters: X25519 bits (pkcs8, buffer(48), X25519, true, [deriveKey])
Fail Good parameters: X25519 bits (jwk, object(crv, d, x, kty), {name: X25519}, true, [deriveKey])
Fail Good parameters: X25519 bits (jwk, object(crv, d, x, kty), X25519, true, [deriveKey])
Fail Good parameters with ignored JWK alg: X25519 (jwk, object(crv, d, x, kty), {name: X25519}, true, [deriveKey])
Fail Good parameters with ignored JWK alg: X25519 (jwk, object(crv, d, x, kty), X25519, true, [deriveKey])
Fail Good parameters: X25519 bits (pkcs8, buffer(48), {name: X25519}, true, [deriveBits, deriveKey])
Fail Good parameters: X25519 bits (pkcs8, buffer(48), X25519, true, [deriveBits, deriveKey])
Fail Good parameters: X25519 bits (jwk, object(crv, d, x, kty), {name: X25519}, true, [deriveBits, deriveKey])
Fail Good parameters: X25519 bits (jwk, object(crv, d, x, kty), X25519, true, [deriveBits, deriveKey])
Fail Good parameters with ignored JWK alg: X25519 (jwk, object(crv, d, x, kty), {name: X25519}, true, [deriveBits, deriveKey])
Fail Good parameters with ignored JWK alg: X25519 (jwk, object(crv, d, x, kty), X25519, true, [deriveBits, deriveKey])
Fail Good parameters: X25519 bits (pkcs8, buffer(48), {name: X25519}, true, [deriveBits])
Fail Good parameters: X25519 bits (pkcs8, buffer(48), X25519, true, [deriveBits])
Fail Good parameters: X25519 bits (jwk, object(crv, d, x, kty), {name: X25519}, true, [deriveBits])
Fail Good parameters: X25519 bits (jwk, object(crv, d, x, kty), X25519, true, [deriveBits])
Fail Good parameters with ignored JWK alg: X25519 (jwk, object(crv, d, x, kty), {name: X25519}, true, [deriveBits])
Fail Good parameters with ignored JWK alg: X25519 (jwk, object(crv, d, x, kty), X25519, true, [deriveBits])
Fail Good parameters: X25519 bits (pkcs8, buffer(48), {name: X25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits])
Fail Good parameters: X25519 bits (pkcs8, buffer(48), X25519, true, [deriveKey, deriveBits, deriveKey, deriveBits])
Fail Good parameters: X25519 bits (jwk, object(crv, d, x, kty), {name: X25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits])
Fail Good parameters: X25519 bits (jwk, object(crv, d, x, kty), X25519, true, [deriveKey, deriveBits, deriveKey, deriveBits])
Fail Good parameters with ignored JWK alg: X25519 (jwk, object(crv, d, x, kty), {name: X25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits])
Fail Good parameters with ignored JWK alg: X25519 (jwk, object(crv, d, x, kty), X25519, true, [deriveKey, deriveBits, deriveKey, deriveBits])
Pass Good parameters: X25519 bits (spki, buffer(44), {name: X25519}, false, [])
Pass Good parameters: X25519 bits (spki, buffer(44), X25519, false, [])
Pass Good parameters: X25519 bits (jwk, object(kty, crv, x), {name: X25519}, false, [])
Pass Good parameters: X25519 bits (jwk, object(kty, crv, x), X25519, false, [])
Pass Good parameters: X25519 bits (raw, buffer(32), {name: X25519}, false, [])
Pass Good parameters: X25519 bits (raw, buffer(32), X25519, false, [])
Pass Good parameters: X25519 bits (pkcs8, buffer(48), {name: X25519}, false, [deriveKey])
Pass Good parameters: X25519 bits (pkcs8, buffer(48), X25519, false, [deriveKey])
Pass Good parameters: X25519 bits (jwk, object(crv, d, x, kty), {name: X25519}, false, [deriveKey])
Pass Good parameters: X25519 bits (jwk, object(crv, d, x, kty), X25519, false, [deriveKey])
Pass Good parameters: X25519 bits (pkcs8, buffer(48), {name: X25519}, false, [deriveBits, deriveKey])
Pass Good parameters: X25519 bits (pkcs8, buffer(48), X25519, false, [deriveBits, deriveKey])
Pass Good parameters: X25519 bits (jwk, object(crv, d, x, kty), {name: X25519}, false, [deriveBits, deriveKey])
Pass Good parameters: X25519 bits (jwk, object(crv, d, x, kty), X25519, false, [deriveBits, deriveKey])
Pass Good parameters: X25519 bits (pkcs8, buffer(48), {name: X25519}, false, [deriveBits])
Pass Good parameters: X25519 bits (pkcs8, buffer(48), X25519, false, [deriveBits])
Pass Good parameters: X25519 bits (jwk, object(crv, d, x, kty), {name: X25519}, false, [deriveBits])
Pass Good parameters: X25519 bits (jwk, object(crv, d, x, kty), X25519, false, [deriveBits])
Pass Good parameters: X25519 bits (pkcs8, buffer(48), {name: X25519}, false, [deriveKey, deriveBits, deriveKey, deriveBits])
Pass Good parameters: X25519 bits (pkcs8, buffer(48), X25519, false, [deriveKey, deriveBits, deriveKey, deriveBits])
Pass Good parameters: X25519 bits (jwk, object(crv, d, x, kty), {name: X25519}, false, [deriveKey, deriveBits, deriveKey, deriveBits])
Pass Good parameters: X25519 bits (jwk, object(crv, d, x, kty), X25519, false, [deriveKey, deriveBits, deriveKey, deriveBits])

View file

@ -0,0 +1,235 @@
Summary
Harness status: OK
Rerun
Found 224 tests
208 Pass
16 Fail
Details
Result Test Name MessagePass Bad usages: importKey(spki, {name: X25519}, true, [encrypt])
Pass Bad usages: importKey(spki, {name: X25519}, false, [encrypt])
Pass Bad usages: importKey(spki, {name: X25519}, true, [decrypt])
Pass Bad usages: importKey(spki, {name: X25519}, false, [decrypt])
Pass Bad usages: importKey(spki, {name: X25519}, true, [sign])
Pass Bad usages: importKey(spki, {name: X25519}, false, [sign])
Pass Bad usages: importKey(spki, {name: X25519}, true, [verify])
Pass Bad usages: importKey(spki, {name: X25519}, false, [verify])
Pass Bad usages: importKey(spki, {name: X25519}, true, [wrapKey])
Pass Bad usages: importKey(spki, {name: X25519}, false, [wrapKey])
Pass Bad usages: importKey(spki, {name: X25519}, true, [unwrapKey])
Pass Bad usages: importKey(spki, {name: X25519}, false, [unwrapKey])
Pass Bad usages: importKey(spki, {name: X25519}, true, [deriveKey])
Pass Bad usages: importKey(spki, {name: X25519}, false, [deriveKey])
Pass Bad usages: importKey(spki, {name: X25519}, true, [deriveBits])
Pass Bad usages: importKey(spki, {name: X25519}, false, [deriveBits])
Pass Bad usages: importKey(pkcs8, {name: X25519}, true, [encrypt])
Pass Bad usages: importKey(pkcs8, {name: X25519}, false, [encrypt])
Pass Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveKey, encrypt])
Pass Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveKey, encrypt])
Pass Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveBits, deriveKey, encrypt])
Pass Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveBits, deriveKey, encrypt])
Pass Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveBits, encrypt])
Pass Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveBits, encrypt])
Pass Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits, encrypt])
Pass Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveKey, deriveBits, deriveKey, deriveBits, encrypt])
Pass Bad usages: importKey(pkcs8, {name: X25519}, true, [decrypt])
Pass Bad usages: importKey(pkcs8, {name: X25519}, false, [decrypt])
Pass Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveKey, decrypt])
Pass Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveKey, decrypt])
Pass Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveBits, deriveKey, decrypt])
Pass Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveBits, deriveKey, decrypt])
Pass Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveBits, decrypt])
Pass Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveBits, decrypt])
Pass Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits, decrypt])
Pass Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveKey, deriveBits, deriveKey, deriveBits, decrypt])
Pass Bad usages: importKey(pkcs8, {name: X25519}, true, [sign])
Pass Bad usages: importKey(pkcs8, {name: X25519}, false, [sign])
Pass Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveKey, sign])
Pass Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveKey, sign])
Pass Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveBits, deriveKey, sign])
Pass Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveBits, deriveKey, sign])
Pass Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveBits, sign])
Pass Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveBits, sign])
Pass Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits, sign])
Pass Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveKey, deriveBits, deriveKey, deriveBits, sign])
Pass Bad usages: importKey(pkcs8, {name: X25519}, true, [verify])
Pass Bad usages: importKey(pkcs8, {name: X25519}, false, [verify])
Pass Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveKey, verify])
Pass Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveKey, verify])
Pass Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveBits, deriveKey, verify])
Pass Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveBits, deriveKey, verify])
Pass Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveBits, verify])
Pass Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveBits, verify])
Pass Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits, verify])
Pass Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveKey, deriveBits, deriveKey, deriveBits, verify])
Pass Bad usages: importKey(pkcs8, {name: X25519}, true, [wrapKey])
Pass Bad usages: importKey(pkcs8, {name: X25519}, false, [wrapKey])
Pass Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveKey, wrapKey])
Pass Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveKey, wrapKey])
Pass Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveBits, deriveKey, wrapKey])
Pass Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveBits, deriveKey, wrapKey])
Pass Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveBits, wrapKey])
Pass Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveBits, wrapKey])
Pass Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits, wrapKey])
Pass Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveKey, deriveBits, deriveKey, deriveBits, wrapKey])
Pass Bad usages: importKey(pkcs8, {name: X25519}, true, [unwrapKey])
Pass Bad usages: importKey(pkcs8, {name: X25519}, false, [unwrapKey])
Pass Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveKey, unwrapKey])
Pass Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveKey, unwrapKey])
Pass Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveBits, deriveKey, unwrapKey])
Pass Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveBits, deriveKey, unwrapKey])
Pass Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveBits, unwrapKey])
Pass Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveBits, unwrapKey])
Pass Bad usages: importKey(pkcs8, {name: X25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits, unwrapKey])
Pass Bad usages: importKey(pkcs8, {name: X25519}, false, [deriveKey, deriveBits, deriveKey, deriveBits, unwrapKey])
Pass Bad usages: importKey(raw, {name: X25519}, true, [encrypt])
Pass Bad usages: importKey(raw, {name: X25519}, false, [encrypt])
Pass Bad usages: importKey(raw, {name: X25519}, true, [decrypt])
Pass Bad usages: importKey(raw, {name: X25519}, false, [decrypt])
Pass Bad usages: importKey(raw, {name: X25519}, true, [sign])
Pass Bad usages: importKey(raw, {name: X25519}, false, [sign])
Pass Bad usages: importKey(raw, {name: X25519}, true, [verify])
Pass Bad usages: importKey(raw, {name: X25519}, false, [verify])
Pass Bad usages: importKey(raw, {name: X25519}, true, [wrapKey])
Pass Bad usages: importKey(raw, {name: X25519}, false, [wrapKey])
Pass Bad usages: importKey(raw, {name: X25519}, true, [unwrapKey])
Pass Bad usages: importKey(raw, {name: X25519}, false, [unwrapKey])
Pass Bad usages: importKey(raw, {name: X25519}, true, [deriveKey])
Pass Bad usages: importKey(raw, {name: X25519}, false, [deriveKey])
Pass Bad usages: importKey(raw, {name: X25519}, true, [deriveBits])
Pass Bad usages: importKey(raw, {name: X25519}, false, [deriveBits])
Pass Bad usages: importKey(jwk(private), {name: X25519}, true, [encrypt])
Pass Bad usages: importKey(jwk(private), {name: X25519}, false, [encrypt])
Pass Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveKey, encrypt])
Pass Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveKey, encrypt])
Pass Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveBits, deriveKey, encrypt])
Pass Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveBits, deriveKey, encrypt])
Pass Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveBits, encrypt])
Pass Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveBits, encrypt])
Pass Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits, encrypt])
Pass Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveKey, deriveBits, deriveKey, deriveBits, encrypt])
Pass Bad usages: importKey(jwk(private), {name: X25519}, true, [decrypt])
Pass Bad usages: importKey(jwk(private), {name: X25519}, false, [decrypt])
Pass Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveKey, decrypt])
Pass Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveKey, decrypt])
Pass Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveBits, deriveKey, decrypt])
Pass Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveBits, deriveKey, decrypt])
Pass Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveBits, decrypt])
Pass Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveBits, decrypt])
Pass Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits, decrypt])
Pass Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveKey, deriveBits, deriveKey, deriveBits, decrypt])
Pass Bad usages: importKey(jwk(private), {name: X25519}, true, [sign])
Pass Bad usages: importKey(jwk(private), {name: X25519}, false, [sign])
Pass Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveKey, sign])
Pass Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveKey, sign])
Pass Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveBits, deriveKey, sign])
Pass Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveBits, deriveKey, sign])
Pass Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveBits, sign])
Pass Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveBits, sign])
Pass Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits, sign])
Pass Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveKey, deriveBits, deriveKey, deriveBits, sign])
Pass Bad usages: importKey(jwk(private), {name: X25519}, true, [verify])
Pass Bad usages: importKey(jwk(private), {name: X25519}, false, [verify])
Pass Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveKey, verify])
Pass Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveKey, verify])
Pass Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveBits, deriveKey, verify])
Pass Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveBits, deriveKey, verify])
Pass Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveBits, verify])
Pass Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveBits, verify])
Pass Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits, verify])
Pass Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveKey, deriveBits, deriveKey, deriveBits, verify])
Pass Bad usages: importKey(jwk(private), {name: X25519}, true, [wrapKey])
Pass Bad usages: importKey(jwk(private), {name: X25519}, false, [wrapKey])
Pass Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveKey, wrapKey])
Pass Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveKey, wrapKey])
Pass Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveBits, deriveKey, wrapKey])
Pass Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveBits, deriveKey, wrapKey])
Pass Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveBits, wrapKey])
Pass Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveBits, wrapKey])
Pass Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits, wrapKey])
Pass Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveKey, deriveBits, deriveKey, deriveBits, wrapKey])
Pass Bad usages: importKey(jwk(private), {name: X25519}, true, [unwrapKey])
Pass Bad usages: importKey(jwk(private), {name: X25519}, false, [unwrapKey])
Pass Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveKey, unwrapKey])
Pass Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveKey, unwrapKey])
Pass Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveBits, deriveKey, unwrapKey])
Pass Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveBits, deriveKey, unwrapKey])
Pass Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveBits, unwrapKey])
Pass Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveBits, unwrapKey])
Pass Bad usages: importKey(jwk(private), {name: X25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits, unwrapKey])
Pass Bad usages: importKey(jwk(private), {name: X25519}, false, [deriveKey, deriveBits, deriveKey, deriveBits, unwrapKey])
Pass Bad usages: importKey(jwk (public) , {name: X25519}, true, [encrypt])
Pass Bad usages: importKey(jwk (public) , {name: X25519}, false, [encrypt])
Pass Bad usages: importKey(jwk (public) , {name: X25519}, true, [decrypt])
Pass Bad usages: importKey(jwk (public) , {name: X25519}, false, [decrypt])
Pass Bad usages: importKey(jwk (public) , {name: X25519}, true, [sign])
Pass Bad usages: importKey(jwk (public) , {name: X25519}, false, [sign])
Pass Bad usages: importKey(jwk (public) , {name: X25519}, true, [verify])
Pass Bad usages: importKey(jwk (public) , {name: X25519}, false, [verify])
Pass Bad usages: importKey(jwk (public) , {name: X25519}, true, [wrapKey])
Pass Bad usages: importKey(jwk (public) , {name: X25519}, false, [wrapKey])
Pass Bad usages: importKey(jwk (public) , {name: X25519}, true, [unwrapKey])
Pass Bad usages: importKey(jwk (public) , {name: X25519}, false, [unwrapKey])
Pass Bad usages: importKey(jwk (public) , {name: X25519}, true, [deriveKey])
Pass Bad usages: importKey(jwk (public) , {name: X25519}, false, [deriveKey])
Pass Bad usages: importKey(jwk (public) , {name: X25519}, true, [deriveBits])
Pass Bad usages: importKey(jwk (public) , {name: X25519}, false, [deriveBits])
Pass Empty usages: importKey(pkcs8, {name: X25519}, true, [])
Pass Empty usages: importKey(pkcs8, {name: X25519}, false, [])
Pass Empty usages: importKey(jwk(private), {name: X25519}, true, [])
Pass Empty usages: importKey(jwk(private), {name: X25519}, false, [])
Pass Bad key length: importKey(spki, {name: X25519}, true, [])
Pass Bad key length: importKey(spki, {name: X25519}, false, [])
Pass Bad key length: importKey(pkcs8, {name: X25519}, true, [deriveKey])
Pass Bad key length: importKey(pkcs8, {name: X25519}, false, [deriveKey])
Pass Bad key length: importKey(pkcs8, {name: X25519}, true, [deriveBits, deriveKey])
Pass Bad key length: importKey(pkcs8, {name: X25519}, false, [deriveBits, deriveKey])
Pass Bad key length: importKey(pkcs8, {name: X25519}, true, [deriveBits])
Pass Bad key length: importKey(pkcs8, {name: X25519}, false, [deriveBits])
Pass Bad key length: importKey(pkcs8, {name: X25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits])
Pass Bad key length: importKey(pkcs8, {name: X25519}, false, [deriveKey, deriveBits, deriveKey, deriveBits])
Fail Bad key length: importKey(raw, {name: X25519}, true, [])
Fail Bad key length: importKey(raw, {name: X25519}, false, [])
Fail Bad key length: importKey(jwk (public) , {name: X25519}, true, [])
Fail Bad key length: importKey(jwk (public) , {name: X25519}, false, [])
Fail Bad key length: importKey(jwk(private), {name: X25519}, true, [deriveKey])
Fail Bad key length: importKey(jwk(private), {name: X25519}, false, [deriveKey])
Fail Bad key length: importKey(jwk(private), {name: X25519}, true, [deriveBits, deriveKey])
Fail Bad key length: importKey(jwk(private), {name: X25519}, false, [deriveBits, deriveKey])
Fail Bad key length: importKey(jwk(private), {name: X25519}, true, [deriveBits])
Fail Bad key length: importKey(jwk(private), {name: X25519}, false, [deriveBits])
Fail Bad key length: importKey(jwk(private), {name: X25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits])
Fail Bad key length: importKey(jwk(private), {name: X25519}, false, [deriveKey, deriveBits, deriveKey, deriveBits])
Pass Missing JWK 'x' parameter: importKey(jwk(private), {name: X25519}, true, [deriveKey])
Pass Missing JWK 'x' parameter: importKey(jwk(private), {name: X25519}, false, [deriveKey])
Pass Missing JWK 'x' parameter: importKey(jwk(private), {name: X25519}, true, [deriveBits, deriveKey])
Pass Missing JWK 'x' parameter: importKey(jwk(private), {name: X25519}, false, [deriveBits, deriveKey])
Pass Missing JWK 'x' parameter: importKey(jwk(private), {name: X25519}, true, [deriveBits])
Pass Missing JWK 'x' parameter: importKey(jwk(private), {name: X25519}, false, [deriveBits])
Pass Missing JWK 'x' parameter: importKey(jwk(private), {name: X25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits])
Pass Missing JWK 'x' parameter: importKey(jwk(private), {name: X25519}, false, [deriveKey, deriveBits, deriveKey, deriveBits])
Pass Missing JWK 'kty' parameter: importKey(jwk(private), {name: X25519}, true, [deriveKey])
Pass Missing JWK 'kty' parameter: importKey(jwk(private), {name: X25519}, false, [deriveKey])
Pass Missing JWK 'kty' parameter: importKey(jwk(private), {name: X25519}, true, [deriveBits, deriveKey])
Pass Missing JWK 'kty' parameter: importKey(jwk(private), {name: X25519}, false, [deriveBits, deriveKey])
Pass Missing JWK 'kty' parameter: importKey(jwk(private), {name: X25519}, true, [deriveBits])
Pass Missing JWK 'kty' parameter: importKey(jwk(private), {name: X25519}, false, [deriveBits])
Pass Missing JWK 'kty' parameter: importKey(jwk(private), {name: X25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits])
Pass Missing JWK 'kty' parameter: importKey(jwk(private), {name: X25519}, false, [deriveKey, deriveBits, deriveKey, deriveBits])
Pass Missing JWK 'crv' parameter: importKey(jwk (public) , {name: X25519}, true, [])
Pass Missing JWK 'crv' parameter: importKey(jwk (public) , {name: X25519}, false, [])
Fail Invalid key pair: importKey(jwk(private), {name: X25519}, true, [deriveKey])
Fail Invalid key pair: importKey(jwk(private), {name: X25519}, true, [deriveBits, deriveKey])
Fail Invalid key pair: importKey(jwk(private), {name: X25519}, true, [deriveBits])
Fail Invalid key pair: importKey(jwk(private), {name: X25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits])
Pass Missing algorithm name: importKey(pkcs8, {}, true, deriveKey)
Pass Missing algorithm name: importKey(pkcs8, {}, false, deriveKey)
Pass Missing algorithm name: importKey(pkcs8, {}, true, deriveBits)
Pass Missing algorithm name: importKey(pkcs8, {}, false, deriveBits)
Pass Missing algorithm name: importKey(jwk(private), {}, true, deriveKey)
Pass Missing algorithm name: importKey(jwk(private), {}, false, deriveKey)
Pass Missing algorithm name: importKey(jwk(private), {}, true, deriveBits)
Pass Missing algorithm name: importKey(jwk(private), {}, false, deriveBits)