jose
Version:
JWA, JWS, JWE, JWT, JWK, JWKS for Node.js, Browser, Cloudflare Workers, Deno, Bun, and other Web-interoperable runtimes
36 lines (35 loc) • 1.12 kB
JavaScript
import { toSPKI as exportPublic, toPKCS8 as exportPrivate } from "../lib/asn1.js";
import { invalidKeyInput, isCryptoKey, isKeyObject } from "../lib/key.js";
import { encode as b64u } from "../util/base64url.js";
function exportSPKI(key) {
return exportPublic(key);
}
function exportPKCS8(key) {
return exportPrivate(key);
}
async function exportJWK(key) {
if (isKeyObject(key))
if (key.type === "secret")
key = key.export();
else
return key.export({ format: "jwk" });
if (key instanceof Uint8Array)
return {
kty: "oct",
k: b64u(key)
};
if (!isCryptoKey(key))
throw new TypeError(invalidKeyInput(key, "CryptoKey", "KeyObject", "Uint8Array"));
if (!key.extractable)
throw new TypeError("non-extractable CryptoKey cannot be exported as a JWK");
const jwk = await crypto.subtle.exportKey("jwk", key);
delete jwk.ext, delete jwk.key_ops, delete jwk.use, jwk.kty !== "AKP" && delete jwk.alg;
for (const parameter of Object.keys(jwk))
jwk[parameter] === void 0 && delete jwk[parameter];
return jwk;
}
export {
exportJWK,
exportPKCS8,
exportSPKI
};