Hi,

A patch to get away from SHA1 in spamd


Index: sync.c
===================================================================
RCS file: /cvs/src/libexec/spamd/sync.c,v
retrieving revision 1.12
diff -u -p -r1.12 sync.c
--- sync.c      20 Oct 2016 21:09:46 -0000      1.12
+++ sync.c      25 Feb 2017 14:18:17 -0000
@@ -30,7 +30,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
-#include <sha1.h>
+#include <sha2.h>
 #include <syslog.h>
 #include <stdint.h>
 
@@ -142,7 +142,7 @@ sync_init(const char *iface, const char 
                }
        }
 
-       sync_key = SHA1File(SPAM_SYNC_KEY, NULL);
+       sync_key = SHA256File(SPAM_SYNC_KEY, NULL);
        if (sync_key == NULL) {
                if (errno != ENOENT) {
                        fprintf(stderr, "failed to open sync key: %s\n",
@@ -276,7 +276,7 @@ sync_recv(void)
        /* Compute and validate HMAC */
        memcpy(hmac[0], hdr->sh_hmac, SPAM_SYNC_HMAC_LEN);
        explicit_bzero(hdr->sh_hmac, SPAM_SYNC_HMAC_LEN);
-       HMAC(EVP_sha1(), sync_key, strlen(sync_key), buf, len,
+       HMAC(EVP_sha256(), sync_key, strlen(sync_key), buf, len,
            hmac[1], &hmac_len);
        if (bcmp(hmac[0], hmac[1], SPAM_SYNC_HMAC_LEN) != 0)
                goto trunc;
@@ -441,7 +441,7 @@ sync_update(time_t now, char *helo, char
        helolen = strlen(helo) + 1;
 
        HMAC_CTX_init(&ctx);
-       HMAC_Init(&ctx, sync_key, strlen(sync_key), EVP_sha1());
+       HMAC_Init(&ctx, sync_key, strlen(sync_key), EVP_sha256());
 
        sglen = sizeof(sg) + fromlen + tolen + helolen;
        padlen = SPAM_ALIGN(sglen) - sglen;
@@ -523,7 +523,7 @@ sync_addr(time_t now, time_t expire, cha
        memset(&sd, 0, sizeof(sd));
 
        HMAC_CTX_init(&ctx);
-       HMAC_Init(&ctx, sync_key, strlen(sync_key), EVP_sha1());
+       HMAC_Init(&ctx, sync_key, strlen(sync_key), EVP_sha256());
 
        /* Add SPAM sync packet header */
        hdr.sh_version = SPAM_SYNC_VERSION;
Index: sync.h
===================================================================
RCS file: /cvs/src/libexec/spamd/sync.h,v
retrieving revision 1.3
diff -u -p -r1.3 sync.h
--- sync.h      22 May 2008 19:54:11 -0000      1.3
+++ sync.h      25 Feb 2017 14:18:17 -0000
@@ -19,6 +19,8 @@
 #ifndef _SPAMD_SYNC
 #define _SPAMD_SYNC
 
+#include <sha2.h>
+
 /*
  * spamd(8) synchronisation protocol.
  *
@@ -27,7 +29,7 @@
  * It is a simple Type-Length-Value based protocol, it allows easy
  * extension with future subtypes and bulk transfers by sending multiple
  * entries at once. The unencrypted messages will be authenticated using
- * HMAC-SHA1.
+ * HMAC-SHA256.
  *
  * the spamd(8) synchronisation protocol is not intended to be used as
  * a public SPAM sender database or distribution between vendors.
@@ -36,7 +38,7 @@
 #define SPAM_SYNC_VERSION      2
 #define SPAM_SYNC_MCASTADDR    "224.0.1.240"   /* XXX choose valid address */
 #define SPAM_SYNC_MCASTTTL     IP_DEFAULT_MULTICAST_TTL
-#define SPAM_SYNC_HMAC_LEN     20      /* SHA1 */
+#define SPAM_SYNC_HMAC_LEN     SHA256_DIGEST_LENGTH
 #define SPAM_SYNC_MAXSIZE      1408
 #define SPAM_SYNC_KEY          "/etc/mail/spamd.key"

Reply via email to