UNPKG

dkim-verifier

Version:

DKIM Signature Verifier in TypeScript

53 lines 1.81 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getNonSignatureDkim = exports.getSignature = exports.parseDkim = void 0; const canonicalization_1 = require("./canonicalization"); const parseDkim = (headers) => { const dkimParams = dkimKeyAndValue(headers); const dkim = { v: "", a: "", b: "", bh: "", d: "", h: "", s: "", }; for (const [key, value] of dkimParams) { dkim[key] = value; } return dkim; }; exports.parseDkim = parseDkim; const getSignature = (dkim) => { const bufferSignature = Buffer.from(dkim.b, "base64"); return BigInt(`0x${bufferSignature.toString("hex")}`); }; exports.getSignature = getSignature; const getNonSignatureDkim = (headers) => { const dkimParams = dkimKeyAndValue(headers); let nonSignatureDkim = "dkim-signature:"; for (const [key, value] of dkimParams) { nonSignatureDkim += `${key}=${key === "b" ? "" : value}; `; } return nonSignatureDkim.slice(0, -2); }; exports.getNonSignatureDkim = getNonSignatureDkim; const dkimKeyAndValue = (headers) => { const DkimParams = headers.find((header) => header.key.toLowerCase() === "dkim-signature"); if (!DkimParams) { throw new Error("DKIM header not found"); } const dkimParams = DkimParams.value.split(";"); const dkimKeyAndValue = []; for (let dkimParam of dkimParams) { dkimParam = (0, canonicalization_1.relaxedHeader)(dkimParam); const key = dkimParam.split("=")[0]; let value = dkimParam.slice(key.length + 1, dkimParam.length); if (key === "b") value = value.replace(/\s/g, ""); dkimKeyAndValue.push([key, value]); } return dkimKeyAndValue; }; //# sourceMappingURL=header.js.map