jose
Version:
JWA, JWS, JWE, JWT, JWK, JWKS for Node.js, Browser, Cloudflare Workers, Deno, Bun, and other Web-interoperable runtimes
75 lines (74 loc) • 1.76 kB
JavaScript
import { JOSENotSupported } from "../util/errors.js";
import { table } from "./key_descriptor.js";
const sig = [["verify"], ["sign"]];
function hmac(bits) {
const subtle = { name: "HMAC", hash: `SHA-${bits}` };
return { kty: ["oct"], secret: !0, subtle, signing: subtle, usages: sig };
}
function rsa(bits, saltLength) {
const subtle = { name: saltLength ? "RSA-PSS" : "RSASSA-PKCS1-v1_5", hash: `SHA-${bits}` };
return {
kty: ["RSA"],
subtle,
signing: saltLength ? { ...subtle, saltLength } : subtle,
usages: sig,
minRsaBits: 2048
};
}
function ecdsa(crv, bits) {
return {
kty: ["EC"],
crv,
subtle: { name: "ECDSA", namedCurve: crv },
signing: { name: "ECDSA", hash: `SHA-${bits}` },
usages: sig
};
}
function eddsa() {
const subtle = { name: "Ed25519" };
return {
kty: ["OKP"],
crv: "Ed25519",
subtle,
signing: subtle,
usages: sig
};
}
function mldsa(parameterSet) {
const subtle = { name: `ML-DSA-${parameterSet}` };
return {
kty: ["AKP"],
subtle,
signing: subtle,
usages: sig
};
}
const JWS = table({
HS256: hmac(256),
HS384: hmac(384),
HS512: hmac(512),
RS256: rsa(256),
RS384: rsa(384),
RS512: rsa(512),
PS256: rsa(256, 32),
PS384: rsa(384, 48),
PS512: rsa(512, 64),
ES256: ecdsa("P-256", 256),
ES384: ecdsa("P-384", 384),
ES512: ecdsa("P-521", 512),
EdDSA: eddsa(),
Ed25519: eddsa(),
"ML-DSA-44": mldsa(44),
"ML-DSA-65": mldsa(65),
"ML-DSA-87": mldsa(87)
});
function jwsAlgorithm(alg) {
const entry = typeof alg == "string" ? JWS[alg] : void 0;
if (!entry)
throw new JOSENotSupported(`alg ${alg} is not supported either by JOSE or your javascript runtime`);
return entry;
}
export {
JWS,
jwsAlgorithm
};