diff --git a/Libraries/LibWeb/Crypto/CryptoAlgorithms.cpp b/Libraries/LibWeb/Crypto/CryptoAlgorithms.cpp index 4f74fc76f37..d3fcb386d2a 100644 --- a/Libraries/LibWeb/Crypto/CryptoAlgorithms.cpp +++ b/Libraries/LibWeb/Crypto/CryptoAlgorithms.cpp @@ -5202,7 +5202,10 @@ WebIDL::ExceptionOr> X25519::export_key(Bindings::KeyFormat // Set the privateKey field to the result of DER-encoding a CurvePrivateKey ASN.1 type, as defined in Section 7 of [RFC8410], // that represents the X25519 private key represented by the [[handle]] internal slot of key auto private_key = handle.get(); - auto data = TRY_OR_THROW_OOM(vm, ::Crypto::PK::wrap_in_private_key_info(private_key, ::Crypto::ASN1::x25519_oid)); + + ::Crypto::ASN1::Encoder encoder; + TRY_OR_THROW_OOM(vm, encoder.write(private_key)); + auto data = TRY_OR_THROW_OOM(vm, ::Crypto::PK::wrap_in_private_key_info(encoder.finish(), ::Crypto::ASN1::x25519_oid)); // 3. Let result be a new ArrayBuffer associated with the relevant global object of this [HTML], and containing data. result = JS::ArrayBuffer::create(m_realm, data); diff --git a/Tests/LibWeb/Text/expected/wpt-import/WebCryptoAPI/import_export/okp_importKey_X25519.https.any.txt b/Tests/LibWeb/Text/expected/wpt-import/WebCryptoAPI/import_export/okp_importKey_X25519.https.any.txt index 5055524d6c9..718fa31ce98 100644 --- a/Tests/LibWeb/Text/expected/wpt-import/WebCryptoAPI/import_export/okp_importKey_X25519.https.any.txt +++ b/Tests/LibWeb/Text/expected/wpt-import/WebCryptoAPI/import_export/okp_importKey_X25519.https.any.txt @@ -2,8 +2,7 @@ Harness status: OK Found 54 tests -46 Pass -8 Fail +54 Pass Pass Good parameters: X25519 bits (spki, buffer(44), {name: X25519}, true, []) Pass Good parameters: X25519 bits (spki, buffer(44), X25519, true, []) Pass Good parameters: X25519 bits (jwk, object(kty, crv, x), {name: X25519}, true, []) @@ -12,26 +11,26 @@ Pass Good parameters with ignored JWK alg: X25519 (jwk, object(kty, crv, x), {na Pass 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]) +Pass Good parameters: X25519 bits (pkcs8, buffer(48), {name: X25519}, true, [deriveKey]) +Pass Good parameters: X25519 bits (pkcs8, buffer(48), X25519, true, [deriveKey]) Pass Good parameters: X25519 bits (jwk, object(crv, d, x, kty), {name: X25519}, true, [deriveKey]) Pass Good parameters: X25519 bits (jwk, object(crv, d, x, kty), X25519, true, [deriveKey]) Pass Good parameters with ignored JWK alg: X25519 (jwk, object(crv, d, x, kty), {name: X25519}, true, [deriveKey]) Pass 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]) +Pass Good parameters: X25519 bits (pkcs8, buffer(48), {name: X25519}, true, [deriveBits, deriveKey]) +Pass Good parameters: X25519 bits (pkcs8, buffer(48), X25519, true, [deriveBits, deriveKey]) Pass Good parameters: X25519 bits (jwk, object(crv, d, x, kty), {name: X25519}, true, [deriveBits, deriveKey]) Pass Good parameters: X25519 bits (jwk, object(crv, d, x, kty), X25519, true, [deriveBits, deriveKey]) Pass Good parameters with ignored JWK alg: X25519 (jwk, object(crv, d, x, kty), {name: X25519}, true, [deriveBits, deriveKey]) Pass 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]) +Pass Good parameters: X25519 bits (pkcs8, buffer(48), {name: X25519}, true, [deriveBits]) +Pass Good parameters: X25519 bits (pkcs8, buffer(48), X25519, true, [deriveBits]) Pass Good parameters: X25519 bits (jwk, object(crv, d, x, kty), {name: X25519}, true, [deriveBits]) Pass Good parameters: X25519 bits (jwk, object(crv, d, x, kty), X25519, true, [deriveBits]) Pass Good parameters with ignored JWK alg: X25519 (jwk, object(crv, d, x, kty), {name: X25519}, true, [deriveBits]) Pass 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]) +Pass Good parameters: X25519 bits (pkcs8, buffer(48), {name: X25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits]) +Pass Good parameters: X25519 bits (pkcs8, buffer(48), X25519, true, [deriveKey, deriveBits, deriveKey, deriveBits]) Pass Good parameters: X25519 bits (jwk, object(crv, d, x, kty), {name: X25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits]) Pass Good parameters: X25519 bits (jwk, object(crv, d, x, kty), X25519, true, [deriveKey, deriveBits, deriveKey, deriveBits]) Pass Good parameters with ignored JWK alg: X25519 (jwk, object(crv, d, x, kty), {name: X25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits])