did-jwt
Version:
Library for Signing and Verifying JWTs that use DIDs as issuers and JWEs that use DIDs as recipients
62 lines • 2.28 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const util_js_1 = require("./util.js");
// eslint-disable-next-line @typescript-eslint/no-explicit-any
function instanceOfEcdsaSignature(object) {
return typeof object === 'object' && 'r' in object && 's' in object;
}
function ES256SignerAlg() {
return async function sign(payload, signer) {
const signature = await signer(payload);
if (instanceOfEcdsaSignature(signature)) {
return (0, util_js_1.toJose)(signature);
}
else {
return signature;
}
};
}
function ES256KSignerAlg(recoverable) {
return async function sign(payload, signer) {
const signature = await signer(payload);
if (instanceOfEcdsaSignature(signature)) {
return (0, util_js_1.toJose)(signature, recoverable);
}
else {
if (recoverable && typeof (0, util_js_1.fromJose)(signature).recoveryParam === 'undefined') {
throw new Error(`not_supported: ES256K-R not supported when signer doesn't provide a recovery param`);
}
return signature;
}
};
}
function Ed25519SignerAlg() {
return async function sign(payload, signer) {
const signature = await signer(payload);
if (!instanceOfEcdsaSignature(signature)) {
return signature;
}
else {
throw new Error('invalid_config: expected a signer function that returns a string instead of signature object');
}
};
}
const algorithms = {
ES256: ES256SignerAlg(),
ES256K: ES256KSignerAlg(),
// This is a non-standard algorithm but retained for backwards compatibility
// see https://github.com/decentralized-identity/did-jwt/issues/146
'ES256K-R': ES256KSignerAlg(true),
// This is actually incorrect but retained for backwards compatibility
// see https://github.com/decentralized-identity/did-jwt/issues/130
Ed25519: Ed25519SignerAlg(),
EdDSA: Ed25519SignerAlg(),
};
function SignerAlg(alg) {
const impl = algorithms[alg];
if (!impl)
throw new Error(`not_supported: Unsupported algorithm ${alg}`);
return impl;
}
exports.default = SignerAlg;
//# sourceMappingURL=SignerAlgorithm.js.map