]> source.dussan.org Git - rspamd.git/commitdiff
Output configuration of libcryptobox
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Fri, 29 Jan 2016 09:53:19 +0000 (09:53 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Fri, 29 Jan 2016 09:53:19 +0000 (09:53 +0000)
12 files changed:
src/libcryptobox/blake2/blake2.c
src/libcryptobox/blake2/blake2.h
src/libcryptobox/chacha20/chacha.c
src/libcryptobox/chacha20/chacha.h
src/libcryptobox/cryptobox.c
src/libcryptobox/cryptobox.h
src/libcryptobox/curve25519/curve25519.c
src/libcryptobox/curve25519/curve25519.h
src/libcryptobox/poly1305/poly1305.c
src/libcryptobox/poly1305/poly1305.h
src/libcryptobox/siphash/siphash.c
src/libcryptobox/siphash/siphash.h

index addaf61f5ec45889695359e06dd09b541ce866b2..ecc465b3581a27f0e83d1ef201b92c393a83373d 100644 (file)
@@ -278,7 +278,7 @@ blake2b_keyed (unsigned char *hash,
        blake2b_final (&S, hash);
 }
 
-void
+const char*
 blake2b_load (void)
 {
        guint i;
@@ -291,4 +291,6 @@ blake2b_load (void)
                        }
                }
        }
+
+       return blake2b_opt->desc;
 }
index 37f1dbb4b6f5f5462ebf086d7c37f72c1b3e24f8..903a6ed0e2225e00665bae9ecb138a11993b647b 100644 (file)
@@ -65,7 +65,7 @@ void blake2b_keyed (unsigned char *hash,
                const unsigned char *key,
                size_t keylen);
 
-void blake2b_load (void);
+const char* blake2b_load (void);
 
 #if defined(__cplusplus)
 }
index b349d9ff9386b95fe442a5370f0a126b24382d3a..4bb2098a3c8411f8466a9895dfde4b444b4f4c6a 100644 (file)
@@ -89,7 +89,7 @@ chacha_is_aligned (const void *p)
        return ((size_t) p & (sizeof(size_t) - 1)) == 0;
 }
 
-void
+const char *
 chacha_load (void)
 {
        guint i;
@@ -102,6 +102,8 @@ chacha_load (void)
                        }
                }
        }
+
+       return chacha_impl->desc;
 }
 
 void chacha_init (chacha_state *S, const chacha_key *key,
index cd2a63bd9108e744aab5319e26cc82f7a058a320..f69a63db980a6e90c9d1236092538f9b10f24c47 100644 (file)
@@ -74,6 +74,6 @@ void xchacha (const chacha_key *key, const chacha_iv24 *iv,
                const unsigned char *in, unsigned char *out, size_t inlen,
                size_t rounds);
 
-void chacha_load (void);
+const char* chacha_load (void);
 
 #endif /* CHACHA_H_ */
index 37b8704df5b3e421397c7804bfcd43b0d7379779..3739097fdf8695f2e63037054d49cc3b4545314a 100644 (file)
@@ -36,6 +36,7 @@
 #include "blake2/blake2.h"
 #include "siphash/siphash.h"
 #include "ottery.h"
+#include "printf.h"
 
 #ifdef HAVE_CPUID_H
 #include <cpuid.h>
@@ -182,17 +183,22 @@ rspamd_cryptobox_test_instr (gint instr)
        return ok == 1;
 }
 
-void
+struct rspamd_cryptobox_library_ctx*
 rspamd_cryptobox_init (void)
 {
        gint cpu[4], nid;
+       gulong bit;
+       static struct rspamd_cryptobox_library_ctx *ctx;
+       GString *buf;
 
        if (cryptobox_loaded) {
                /* Ignore reload attempts */
-               return;
+               return ctx;
        }
 
        cryptobox_loaded = TRUE;
+       ctx = g_malloc0 (sizeof (*ctx));
+
        rspamd_cryptobox_cpuid (cpu, 0);
        nid = cpu[0];
        rspamd_cryptobox_cpuid (cpu, 1);
@@ -238,12 +244,48 @@ rspamd_cryptobox_init (void)
                }
        }
 
+       buf = g_string_new ("");
+
+       for (bit = 0x1; bit != 0; bit <<= 1) {
+               if (cpu_config & bit) {
+                       switch (bit) {
+                       case CPUID_SSE2:
+                               rspamd_printf_gstring (buf, "sse2, ");
+                               break;
+                       case CPUID_SSE3:
+                               rspamd_printf_gstring (buf, "sse3, ");
+                               break;
+                       case CPUID_SSSE3:
+                               rspamd_printf_gstring (buf, "ssse3, ");
+                               break;
+                       case CPUID_SSE41:
+                               rspamd_printf_gstring (buf, "sse4.1, ");
+                               break;
+                       case CPUID_AVX:
+                               rspamd_printf_gstring (buf, "avx, ");
+                               break;
+                       case CPUID_AVX2:
+                               rspamd_printf_gstring (buf, "avx2, ");
+                               break;
+                       }
+               }
+       }
+
+       if (buf->len > 2) {
+               /* Trim last chars */
+               g_string_erase (buf, buf->len - 2, 2);
+       }
+
+       ctx->cpu_extensions = buf->str;
+       g_string_free (buf, FALSE);
+
+       ctx->chacha20_impl = chacha_load ();
+       ctx->poly1305_impl = poly1305_load ();
+       ctx->siphash_impl = siphash_load ();
+       ctx->curve25519_impl = curve25519_load ();
+       ctx->blake2_impl = blake2b_load ();
 
-       chacha_load ();
-       poly1305_load ();
-       siphash_load ();
-       curve25519_load ();
-       blake2b_load ();
+       return ctx;
 }
 
 void
index 7977bd0e601022968d40d0c7cfe564a15f6173c3..5dd3b9d60a61d5e2bca24ef306b15759660af69a 100644 (file)
@@ -47,10 +47,19 @@ typedef guchar rspamd_nm_t[rspamd_cryptobox_MAX_NMBYTES];
 typedef guchar rspamd_nonce_t[rspamd_cryptobox_MAX_NONCEBYTES];
 typedef guchar rspamd_sipkey_t[rspamd_cryptobox_SIPKEYBYTES];
 
+struct rspamd_cryptobox_library_ctx {
+       gchar *cpu_extensions;
+       const gchar *curve25519_impl;
+       const gchar *chacha20_impl;
+       const gchar *poly1305_impl;
+       const gchar *siphash_impl;
+       const gchar *blake2_impl;
+};
+
 /**
  * Init cryptobox library
  */
-void rspamd_cryptobox_init (void);
+struct rspamd_cryptobox_library_ctx* rspamd_cryptobox_init (void);
 
 /**
  * Generate new keypair
index 220a1da13cc215998ec00889eae467856e1fce85..62a2530691376704c8e4018c7c867a38ddf3d493 100644 (file)
@@ -119,7 +119,7 @@ curve25519_test_impl (const curve25519_impl_t *impl)
        return TRUE;
 }
 
-void
+const char*
 curve25519_load (void)
 {
        guint i;
@@ -132,7 +132,10 @@ curve25519_load (void)
                        }
                }
        }
+
        g_assert (curve25519_test_impl (curve25519_opt));
+
+       return curve25519_opt->desc;
 }
 
 int
index 8ea440b40ca5d7b9c3b084848248f13137161636..8b404f5c613f5b53a2a31ab3f7482e3f7be5bd28 100644 (file)
@@ -8,6 +8,6 @@ static const guchar curve25519_basepoint[32] = {9};
 int curve25519 (guchar *mypublic, const guchar *secret, const guchar *basepoint);
 /* Call for optimized implementation of scalarmult if needed */
 int curve25519_base (guchar *mypublic, const guchar *secret);
-void curve25519_load (void);
+const char* curve25519_load (void);
 
 #endif
index c98b28017bcc14be5b7e7a94486ad73e96cf1ed6..9e1eed04e64e3b710082bfc026c713675758ccc7 100644 (file)
@@ -101,7 +101,8 @@ static int poly1305_is_aligned(const void *p)
        return ((size_t) p & (sizeof(size_t) - 1)) == 0;
 }
 
-void poly1305_load(void)
+const char*
+poly1305_load(void)
 {
        guint i;
 
@@ -113,6 +114,8 @@ void poly1305_load(void)
                        }
                }
        }
+
+       return poly1305_opt->desc;
 }
 
 /* processes inlen bytes (full blocks only), handling input alignment */
index 8eae97c88499e0462f49f8d097bafb14a165a326..902a9c288c78ae5502d904a4afca8e25094e651f 100644 (file)
@@ -28,7 +28,7 @@ void poly1305_auth(unsigned char *mac, const unsigned char *in, size_t inlen,
                const poly1305_key *key);
 int poly1305_verify(const unsigned char mac1[16], const unsigned char mac2[16]);
 
-void poly1305_load(void);
+const char* poly1305_load(void);
 
 #if defined(__cplusplus)
 }
index 32907292a4de49a5f20ba57e885eda7ea91f14ef..43effe4094ec607b7e48641d4c3462e312ced451 100644 (file)
@@ -61,7 +61,7 @@ static const siphash_impl_t siphash_list[] = {
 
 static const siphash_impl_t *siphash_opt = &siphash_list[0];
 
-void
+const char *
 siphash_load(void)
 {
        guint i;
@@ -74,6 +74,8 @@ siphash_load(void)
                        }
                }
        }
+
+       return siphash_opt->desc;
 }
 
 void siphash24 (unsigned char *out, const unsigned char *in,
index 667f3919f1ee9593e3c18bdc07924429fb616c3e..d4ec5af4a093e3feb3e95b397678c16ec46d1b80 100644 (file)
@@ -29,7 +29,7 @@
 extern "C"
 {
 #endif
-void siphash_load (void);
+const char* siphash_load (void);
 void siphash24 (unsigned char *out,
                const unsigned char *in,
                unsigned long long inlen,