A dkim signature implementation with imap example and circom circuit.
Use at your own risk.
$ npm i dkim-verifier
import { readFileSync } from "fs";
import {
parseEmailToCanonicalized,
verifyBody,
verifyDkimSignature,
getDkimPublicKey,
} from "dkim-verifier";
const emailRaw = fs.readFileSync("tests/example.eml", "utf8");
const { canonicalizedHeaders, canonicalizedBody, dkim } =
parseEmailToCanonicalized(emailRaw);
const isBodyVerified = verifyBody(canonicalizedBody, dkim);
const publicKey = await getDkimPublicKey(dkim);
const isDkimVerified = verifyDkimSignature(
dkim,
canonicalizedHeaders,
publicKey,
);
expect(isBodyVerified).toBe(true);
expect(isDkimVerified).toBe(true);
$ yarn test
Please set your gmail account info.
$ cp .env.example .env
$ ts-node example/imap.ts