1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 14:48:14 +00:00
serenity/Tests/LibWeb/Text/input/Crypto/SubtleCrypto-exportKey.html

52 lines
2.1 KiB
HTML

<script src="../include.js"></script>
<script>
function bufferToHex(buffer) {
return [...new Uint8Array(buffer)].map(b => b.toString(16).padStart(2, "0")).join("");
}
asyncTest(async done => {
let algorithm = {
name: "RSA-OAEP",
modulusLength: 512,
publicExponent: new Uint8Array([1, 0, 1]),
hash: "SHA-256",
};
println("exportKey with RSA-OAEP algorithm");
let key = await window.crypto.subtle.generateKey(algorithm, true, [
"encrypt",
"decrypt",
"wrapKey",
"unwrapKey",
]);
// FIXME: Create a roundtrip test that starts with a key object and imports it, then exports it.
let exportedPublicKey = await window.crypto.subtle.exportKey("jwk", key.publicKey);
println(`exportedPublicKey kwt: ${exportedPublicKey.kty}`);
println(`exportedPublicKey alg: ${exportedPublicKey.alg}`);
println(`exportedPublicKey exponent: ${exportedPublicKey.e}`);
println(`exportedPublicKey key_ops: ${exportedPublicKey.key_ops}`);
println(`exportedPublicKey ext: ${exportedPublicKey.ext}`);
let exportedPrivateKey = await window.crypto.subtle.exportKey("jwk", key.privateKey);
println(`exportedPrivateKey kwt: ${exportedPrivateKey.kty}`);
println(`exportedPrivateKey alg: ${exportedPrivateKey.alg}`);
println(`exportedPrivateKey exponent: ${exportedPrivateKey.e}`);
println(`exportedPrivateKey key_ops: ${exportedPrivateKey.key_ops}`);
println(`exportedPrivateKey ext: ${exportedPrivateKey.ext}`);
let exportedPublicKey2 = await window.crypto.subtle.exportKey("spki", key.publicKey);
println(`FIXME: exportedPublicKey2: ${bufferToHex(exportedPublicKey2)}`);
try {
let exportedPrivateKey2 = await window.crypto.subtle.exportKey("spki", key.privateKey);
println("FAIL: Shouldn't be able to export private key as spki");
} catch (e) {
println(`exportKey spki private key: ${e.name} ${e.message}`);
}
done();
});
</script>