dkim-verifier
Version:
DKIM Signature Verifier in TypeScript
53 lines • 1.81 kB
JavaScript
;
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