summaryrefslogtreecommitdiff
path: root/ext/crypto/00_crypto.js
diff options
context:
space:
mode:
Diffstat (limited to 'ext/crypto/00_crypto.js')
-rw-r--r--ext/crypto/00_crypto.js68
1 files changed, 68 insertions, 0 deletions
diff --git a/ext/crypto/00_crypto.js b/ext/crypto/00_crypto.js
index fdd0f612d..f0ba0b4bf 100644
--- a/ext/crypto/00_crypto.js
+++ b/ext/crypto/00_crypto.js
@@ -1278,6 +1278,28 @@
// 3.
return data.buffer;
}
+ case "spki": {
+ // 1.
+ if (key[_type] !== "public") {
+ throw new DOMException(
+ "Key is not a public key",
+ "InvalidAccessError",
+ );
+ }
+
+ // 2.
+ const data = await core.opAsync(
+ "op_crypto_export_key",
+ {
+ key: innerKey,
+ format: "spki",
+ algorithm: "RSASSA-PKCS1-v1_5",
+ },
+ );
+
+ // 3.
+ return data.buffer;
+ }
default:
throw new DOMException("Not implemented", "NotSupportedError");
}
@@ -1307,6 +1329,29 @@
// 3.
return data.buffer;
}
+ case "spki": {
+ // 1.
+ if (key[_type] !== "public") {
+ throw new DOMException(
+ "Key is not a public key",
+ "InvalidAccessError",
+ );
+ }
+
+ // 2.
+ const data = await core.opAsync(
+ "op_crypto_export_key",
+ {
+ key: innerKey,
+ format: "spki",
+ algorithm: "RSA-PSS",
+ hash: key[_algorithm].hash.name,
+ },
+ );
+
+ // 3.
+ return data.buffer;
+ }
default:
throw new DOMException("Not implemented", "NotSupportedError");
}
@@ -1336,6 +1381,29 @@
// 3.
return data.buffer;
}
+ case "spki": {
+ // 1.
+ if (key[_type] !== "public") {
+ throw new DOMException(
+ "Key is not a public key",
+ "InvalidAccessError",
+ );
+ }
+
+ // 2.
+ const data = await core.opAsync(
+ "op_crypto_export_key",
+ {
+ key: innerKey,
+ format: "spki",
+ algorithm: "RSA-OAEP",
+ hash: key[_algorithm].hash.name,
+ },
+ );
+
+ // 3.
+ return data.buffer;
+ }
default:
throw new DOMException("Not implemented", "NotSupportedError");
}