]> source.dussan.org Git - rspamd.git/commitdiff
[Minor] Use t1ha128 to avoid libsodium version enforcement
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Fri, 12 Jul 2019 17:16:01 +0000 (18:16 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Fri, 12 Jul 2019 17:16:31 +0000 (18:16 +0100)
src/libmime/message.c
test/lua/unit/selectors.lua

index 3efd30da0bc2186b526151dd5cefd275e9d62c95..6483be0d9d54aed70f78228c2f43e59fb69e9456 100644 (file)
@@ -38,6 +38,7 @@
 #include "libserver/cfg_file_private.h"
 #include "lua/lua_common.h"
 #include "contrib/uthash/utlist.h"
+#include "contrib/t1ha/t1ha.h"
 
 #define GTUBE_SYMBOL "GTUBE"
 
@@ -53,7 +54,6 @@ static const gchar gtube_pattern_rewrite_subject[] = "ZJS*C4JDBQADN1.NSBN3*2IDNE
 struct rspamd_multipattern *gtube_matcher = NULL;
 static const guint64 words_hash_seed = 0xdeadbabe;
 
-
 static void
 free_byte_array_callback (void *pointer)
 {
@@ -1163,6 +1163,7 @@ rspamd_message_parse (struct rspamd_task *task)
        gsize len;
        guint i;
        GError *err = NULL;
+       guint64 n[2], seed;
 
        if (RSPAMD_TASK_IS_EMPTY (task)) {
                /* Don't do anything with empty task */
@@ -1362,18 +1363,26 @@ rspamd_message_parse (struct rspamd_task *task)
                        0x30,0x1e,0x70,0x2e,0xb7,0x12,0x09,0xfe,
        };
 
+       memcpy (&seed, hash_key, sizeof (seed));
+
        PTR_ARRAY_FOREACH (MESSAGE_FIELD (task, parts), i, part) {
-               crypto_shorthash_siphashx24 (MESSAGE_FIELD (task, digest),
+               n[0] = t1ha2_atonce128 (&n[1],
                                part->digest, sizeof (part->digest),
-                               i == 0 ? hash_key : MESSAGE_FIELD (task, digest));
+                               seed);
+
+               seed = n[0] ^ n[1];
        }
 
+       memcpy (MESSAGE_FIELD (task, digest), n, sizeof (n));
+
        /* Parse urls inside Subject header */
        if (MESSAGE_FIELD (task, subject)) {
                p = MESSAGE_FIELD (task, subject);
                len = strlen (p);
-               crypto_shorthash_siphashx24 (MESSAGE_FIELD (task, digest), p, len,
-                               MESSAGE_FIELD (task, digest));
+               n[0] = t1ha2_atonce128 (&n[1],
+                               p, len,
+                               seed);
+               memcpy (MESSAGE_FIELD (task, digest), n, sizeof (n));
                rspamd_url_find_multiple (task->task_pool, p, len,
                                RSPAMD_URL_FIND_STRICT, NULL,
                                rspamd_url_task_subject_callback, task);
@@ -1577,13 +1586,11 @@ void rspamd_message_unref (struct rspamd_message *msg)
 void rspamd_message_update_digest (struct rspamd_message *msg,
                                                                   const void *input, gsize len)
 {
-       guchar RSPAMD_ALIGNED(32) ex_key[crypto_shorthash_siphashx24_KEYBYTES];
-
+       guint64 n[2];
        /* Sanity */
-       G_STATIC_ASSERT (sizeof (ex_key) == sizeof (msg->digest));
-       G_STATIC_ASSERT (crypto_shorthash_siphashx24_BYTES == sizeof (msg->digest));
-
-       memcpy (ex_key, msg->digest, sizeof (msg->digest));
+       G_STATIC_ASSERT (sizeof (n) == sizeof (msg->digest));
 
-       crypto_shorthash_siphashx24 (msg->digest, input, len, ex_key);
+       memcpy (n, msg->digest, sizeof (msg->digest));
+       n[0] = t1ha2_atonce128 (&n[1], input, len, n[0]);
+       memcpy (msg->digest, n, sizeof (msg->digest));
 }
\ No newline at end of file
index a9506fa3177d3d390bb36320d0e9f740c0255b4e..d4450707b6bd98788035ba042525229157d739d8 100644 (file)
@@ -62,7 +62,7 @@ context("Selectors test", function()
 
     ["digest"] = {
                 selector = "digest",
-                expect = {"5b756ff185494c36f26c17a70b042f21"}
+                expect = {"1649c0cbbd127660095d4f44e15e8b60"}
     },
 
     ["user"] = {