Forráskód Böngészése

fix: generate standard dkim signatures

Codex 1 hónapja
szülő
commit
a9f6eff06e
2 módosított fájl, 10 hozzáadás és 10 törlés
  1. 5 5
      src/dkim.js
  2. 5 5
      test/dkim.test.js

+ 5 - 5
src/dkim.js

@@ -4,7 +4,7 @@ export function createDkimKeyPair() {
   const { publicKey, privateKey } = crypto.generateKeyPairSync('rsa', {
     modulusLength: 2048,
     publicKeyEncoding: {
-      type: 'pkcs1',
+      type: 'spki',
       format: 'pem'
     },
     privateKeyEncoding: {
@@ -28,7 +28,7 @@ export function pemToDkimPublic(pem) {
 export function dkimPublicFromPrivateKey(privateKey) {
   const publicKey = crypto
     .createPublicKey(privateKey)
-    .export({ type: 'pkcs1', format: 'pem' });
+    .export({ type: 'spki', format: 'pem' });
   return pemToDkimPublic(publicKey);
 }
 
@@ -66,7 +66,7 @@ export function signDkim(rawMessage, options) {
   const dkimValueWithoutSignature = signatureFields.join('; ');
   const signingInput = [
     ...signedHeaderNames.map((name) => canonicalizeHeader(findHeader(headers, name))),
-    canonicalizeHeader({ name: 'DKIM-Signature', value: dkimValueWithoutSignature })
+    canonicalizeHeader({ name: 'DKIM-Signature', value: dkimValueWithoutSignature }, '')
   ].join('');
 
   const signature = crypto
@@ -103,10 +103,10 @@ function findHeader(headers, name) {
   return found;
 }
 
-function canonicalizeHeader(header) {
+function canonicalizeHeader(header, suffix = '\r\n') {
   const name = header.name.toLowerCase();
   const value = header.value.replace(/\s+/g, ' ').trim();
-  return `${name}:${value}\r\n`;
+  return `${name}:${value}${suffix}`;
 }
 
 function canonicalizeBody(body) {

+ 5 - 5
test/dkim.test.js

@@ -39,7 +39,7 @@ function verifyDkimSignature(rawMessage, publicKey) {
   const signedHeaderNames = tags.h.split(':').map((name) => name.trim().toLowerCase()).filter(Boolean);
   const signingInput = [
     ...signedHeaderNames.map((name) => relaxedHeader(findLastHeader(headers, name))),
-    relaxedHeader({ name: 'DKIM-Signature', value: dkimWithoutSignature })
+    relaxedHeader({ name: 'DKIM-Signature', value: dkimWithoutSignature }, '')
   ].join('');
   const signatureValid = crypto
     .createVerify('RSA-SHA256')
@@ -83,8 +83,8 @@ function findLastHeader(headers, name) {
   return found || { name, value: '' };
 }
 
-function relaxedHeader(header) {
-  return `${header.name.toLowerCase()}:${header.value.replace(/\s+/g, ' ').trim()}\r\n`;
+function relaxedHeader(header, suffix = '\r\n') {
+  return `${header.name.toLowerCase()}:${header.value.replace(/\s+/g, ' ').trim()}${suffix}`;
 }
 
 function relaxedBody(body) {
@@ -98,9 +98,9 @@ function relaxedBody(body) {
 
 function dkimPublicPem(publicKey) {
   return [
-    '-----BEGIN RSA PUBLIC KEY-----',
+    '-----BEGIN PUBLIC KEY-----',
     publicKey.match(/.{1,64}/g).join('\n'),
-    '-----END RSA PUBLIC KEY-----',
+    '-----END PUBLIC KEY-----',
     ''
   ].join('\n');
 }