aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src/crypto/zinc/curve25519/curve25519.c
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2018-09-17 20:41:20 +0200
committerJason A. Donenfeld <Jason@zx2c4.com>2018-09-18 04:21:16 +0200
commitfd24e1905b479dcdea58b9445fc4c837df908df7 (patch)
treef9a675256d7a02b1edd1b65b2be44f7263cc1d55 /src/crypto/zinc/curve25519/curve25519.c
parentcrypto: do not use -include trick (diff)
downloadwireguard-monolithic-historical-fd24e1905b479dcdea58b9445fc4c837df908df7.tar.xz
wireguard-monolithic-historical-fd24e1905b479dcdea58b9445fc4c837df908df7.zip
crypto: turn Zinc into individual modules
Diffstat (limited to 'src/crypto/zinc/curve25519/curve25519.c')
-rw-r--r--src/crypto/zinc/curve25519/curve25519.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/crypto/zinc/curve25519/curve25519.c b/src/crypto/zinc/curve25519/curve25519.c
index 7d19fb9..fca327f 100644
--- a/src/crypto/zinc/curve25519/curve25519.c
+++ b/src/crypto/zinc/curve25519/curve25519.c
@@ -15,6 +15,8 @@
#include <linux/version.h>
#include <linux/string.h>
#include <linux/random.h>
+#include <linux/module.h>
+#include <linux/init.h>
#include <crypto/algapi.h>
#if defined(CONFIG_ZINC_ARCH_X86_64)
@@ -85,3 +87,29 @@ void curve25519_generate_secret(u8 secret[CURVE25519_POINT_SIZE])
EXPORT_SYMBOL(curve25519_generate_secret);
#include "../selftest/curve25519.h"
+
+#ifndef COMPAT_ZINC_IS_A_MODULE
+int __init curve25519_mod_init(void)
+#else
+static int __init mod_init(void)
+#endif
+{
+ curve25519_fpu_init();
+#ifdef DEBUG
+ if (!curve25519_selftest())
+ return -ENOTRECOVERABLE;
+#endif
+ return 0;
+}
+
+#ifdef COMPAT_ZINC_IS_A_MODULE
+static void __exit mod_exit(void)
+{
+}
+
+module_init(mod_init);
+module_exit(mod_exit);
+MODULE_LICENSE("GPL v2");
+MODULE_DESCRIPTION("Curve25519 scalar multiplication");
+MODULE_AUTHOR("Jason A. Donenfeld <Jason@zx2c4.com>");
+#endif