|
@@ -0,0 +1,221 @@
|
|
1
|
+--- a/configure.ac
|
|
2
|
++++ b/configure.ac
|
|
3
|
+@@ -135,6 +135,7 @@ ARG_DISBL_SET([fips-prf], [disable
|
|
4
|
+ ARG_ENABL_SET([gcm], [enables the GCM AEAD wrapper crypto plugin.])
|
|
5
|
+ ARG_ENABL_SET([gcrypt], [enables the libgcrypt plugin.])
|
|
6
|
+ ARG_DISBL_SET([gmp], [disable GNU MP (libgmp) based crypto implementation plugin.])
|
|
7
|
++ARG_DISBL_SET([gmpdh], [disable GNU MP (libgmp) based static-linked crypto DH minimal implementation plugin.])
|
|
8
|
+ ARG_DISBL_SET([hmac], [disable HMAC crypto implementation plugin.])
|
|
9
|
+ ARG_ENABL_SET([md4], [enable MD4 software implementation plugin.])
|
|
10
|
+ ARG_DISBL_SET([md5], [disable MD5 software implementation plugin.])
|
|
11
|
+@@ -1310,6 +1311,7 @@ ADD_PLUGIN([gcrypt], [s ch
|
|
12
|
+ ADD_PLUGIN([af-alg], [s charon scepclient pki scripts medsrv attest nm cmd aikgen])
|
|
13
|
+ ADD_PLUGIN([fips-prf], [s charon nm cmd])
|
|
14
|
+ ADD_PLUGIN([gmp], [s charon scepclient pki scripts manager medsrv attest nm cmd aikgen])
|
|
15
|
++ADD_PLUGIN([gmpdh], [s charon scepclient pki scripts manager medsrv attest nm cmd aikgen])
|
|
16
|
+ ADD_PLUGIN([agent], [s charon nm cmd])
|
|
17
|
+ ADD_PLUGIN([keychain], [s charon cmd])
|
|
18
|
+ ADD_PLUGIN([chapoly], [s charon scripts nm cmd])
|
|
19
|
+@@ -1441,6 +1443,7 @@ AM_CONDITIONAL(USE_SHA1, test x$sha1 = x
|
|
20
|
+ AM_CONDITIONAL(USE_SHA2, test x$sha2 = xtrue)
|
|
21
|
+ AM_CONDITIONAL(USE_FIPS_PRF, test x$fips_prf = xtrue)
|
|
22
|
+ AM_CONDITIONAL(USE_GMP, test x$gmp = xtrue)
|
|
23
|
++AM_CONDITIONAL(USE_GMPDH, test x$gmpdh = xtrue)
|
|
24
|
+ AM_CONDITIONAL(USE_RDRAND, test x$rdrand = xtrue)
|
|
25
|
+ AM_CONDITIONAL(USE_AESNI, test x$aesni = xtrue)
|
|
26
|
+ AM_CONDITIONAL(USE_RANDOM, test x$random = xtrue)
|
|
27
|
+@@ -1688,6 +1691,7 @@ AC_CONFIG_FILES([
|
|
28
|
+ src/libstrongswan/plugins/sha2/Makefile
|
|
29
|
+ src/libstrongswan/plugins/fips_prf/Makefile
|
|
30
|
+ src/libstrongswan/plugins/gmp/Makefile
|
|
31
|
++ src/libstrongswan/plugins/gmpdh/Makefile
|
|
32
|
+ src/libstrongswan/plugins/rdrand/Makefile
|
|
33
|
+ src/libstrongswan/plugins/aesni/Makefile
|
|
34
|
+ src/libstrongswan/plugins/random/Makefile
|
|
35
|
+--- a/src/libstrongswan/Makefile.am
|
|
36
|
++++ b/src/libstrongswan/Makefile.am
|
|
37
|
+@@ -295,6 +295,13 @@ if MONOLITHIC
|
|
38
|
+ endif
|
|
39
|
+ endif
|
|
40
|
+
|
|
41
|
++if USE_GMPDH
|
|
42
|
++ SUBDIRS += plugins/gmpdh
|
|
43
|
++if MONOLITHIC
|
|
44
|
++ libstrongswan_la_LIBADD += plugins/gmpdh/libstrongswan-gmpdh.la
|
|
45
|
++endif
|
|
46
|
++endif
|
|
47
|
++
|
|
48
|
+ if USE_RDRAND
|
|
49
|
+ SUBDIRS += plugins/rdrand
|
|
50
|
+ if MONOLITHIC
|
|
51
|
+--- /dev/null
|
|
52
|
++++ b/src/libstrongswan/plugins/gmpdh/Makefile.am
|
|
53
|
+@@ -0,0 +1,19 @@
|
|
54
|
++AM_CPPFLAGS = \
|
|
55
|
++ -I$(top_srcdir)/src/libstrongswan
|
|
56
|
++
|
|
57
|
++AM_CFLAGS = \
|
|
58
|
++ $(PLUGIN_CFLAGS)
|
|
59
|
++
|
|
60
|
++if MONOLITHIC
|
|
61
|
++noinst_LTLIBRARIES = libstrongswan-gmpdh.la
|
|
62
|
++else
|
|
63
|
++plugin_LTLIBRARIES = libstrongswan-gmpdh.la
|
|
64
|
++endif
|
|
65
|
++
|
|
66
|
++libstrongswan_gmpdh_la_SOURCES = \
|
|
67
|
++ gmpdh_plugin.h gmpdh_plugin.c \
|
|
68
|
++ ../gmp/gmp_diffie_hellman.c ../gmp/gmp_diffie_hellman.h
|
|
69
|
++
|
|
70
|
++
|
|
71
|
++libstrongswan_gmpdh_la_LDFLAGS = -module -avoid-version -Wl,-Bstatic -Wl,-lgmp -Wl,-Bdynamic -Wl,--as-needed
|
|
72
|
++libstrongswan_gmpdh_la_LIBADD =
|
|
73
|
+--- /dev/null
|
|
74
|
++++ b/src/libstrongswan/plugins/gmpdh/gmpdh_plugin.c
|
|
75
|
+@@ -0,0 +1,101 @@
|
|
76
|
++/*
|
|
77
|
++ * Copyright (C) 2008-2009 Martin Willi
|
|
78
|
++ * Hochschule fuer Technik Rapperswil
|
|
79
|
++ *
|
|
80
|
++ * This program is free software; you can redistribute it and/or modify it
|
|
81
|
++ * under the terms of the GNU General Public License as published by the
|
|
82
|
++ * Free Software Foundation; either version 2 of the License, or (at your
|
|
83
|
++ * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
|
|
84
|
++ *
|
|
85
|
++ * This program is distributed in the hope that it will be useful, but
|
|
86
|
++ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
|
87
|
++ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
88
|
++ * for more details.
|
|
89
|
++ */
|
|
90
|
++
|
|
91
|
++#include "gmpdh_plugin.h"
|
|
92
|
++
|
|
93
|
++#include <library.h>
|
|
94
|
++#include "../gmp/gmp_diffie_hellman.h"
|
|
95
|
++
|
|
96
|
++typedef struct private_gmpdh_plugin_t private_gmpdh_plugin_t;
|
|
97
|
++
|
|
98
|
++/**
|
|
99
|
++ * private data of gmp_plugin
|
|
100
|
++ */
|
|
101
|
++struct private_gmpdh_plugin_t {
|
|
102
|
++
|
|
103
|
++ /**
|
|
104
|
++ * public functions
|
|
105
|
++ */
|
|
106
|
++ gmpdh_plugin_t public;
|
|
107
|
++};
|
|
108
|
++
|
|
109
|
++METHOD(plugin_t, get_name, char*,
|
|
110
|
++ private_gmpdh_plugin_t *this)
|
|
111
|
++{
|
|
112
|
++ return "gmpdh";
|
|
113
|
++}
|
|
114
|
++
|
|
115
|
++METHOD(plugin_t, get_features, int,
|
|
116
|
++ private_gmpdh_plugin_t *this, plugin_feature_t *features[])
|
|
117
|
++{
|
|
118
|
++ static plugin_feature_t f[] = {
|
|
119
|
++ /* DH groups */
|
|
120
|
++ PLUGIN_REGISTER(DH, gmp_diffie_hellman_create),
|
|
121
|
++ PLUGIN_PROVIDE(DH, MODP_2048_BIT),
|
|
122
|
++ PLUGIN_DEPENDS(RNG, RNG_STRONG),
|
|
123
|
++ PLUGIN_PROVIDE(DH, MODP_2048_224),
|
|
124
|
++ PLUGIN_DEPENDS(RNG, RNG_STRONG),
|
|
125
|
++ PLUGIN_PROVIDE(DH, MODP_2048_256),
|
|
126
|
++ PLUGIN_DEPENDS(RNG, RNG_STRONG),
|
|
127
|
++ PLUGIN_PROVIDE(DH, MODP_1536_BIT),
|
|
128
|
++ PLUGIN_DEPENDS(RNG, RNG_STRONG),
|
|
129
|
++ PLUGIN_PROVIDE(DH, MODP_3072_BIT),
|
|
130
|
++ PLUGIN_DEPENDS(RNG, RNG_STRONG),
|
|
131
|
++ PLUGIN_PROVIDE(DH, MODP_4096_BIT),
|
|
132
|
++ PLUGIN_DEPENDS(RNG, RNG_STRONG),
|
|
133
|
++ PLUGIN_PROVIDE(DH, MODP_6144_BIT),
|
|
134
|
++ PLUGIN_DEPENDS(RNG, RNG_STRONG),
|
|
135
|
++ PLUGIN_PROVIDE(DH, MODP_8192_BIT),
|
|
136
|
++ PLUGIN_DEPENDS(RNG, RNG_STRONG),
|
|
137
|
++ PLUGIN_PROVIDE(DH, MODP_1024_BIT),
|
|
138
|
++ PLUGIN_DEPENDS(RNG, RNG_STRONG),
|
|
139
|
++ PLUGIN_PROVIDE(DH, MODP_1024_160),
|
|
140
|
++ PLUGIN_DEPENDS(RNG, RNG_STRONG),
|
|
141
|
++ PLUGIN_PROVIDE(DH, MODP_768_BIT),
|
|
142
|
++ PLUGIN_DEPENDS(RNG, RNG_STRONG),
|
|
143
|
++ PLUGIN_REGISTER(DH, gmp_diffie_hellman_create_custom),
|
|
144
|
++ PLUGIN_PROVIDE(DH, MODP_CUSTOM),
|
|
145
|
++ PLUGIN_DEPENDS(RNG, RNG_STRONG),
|
|
146
|
++ };
|
|
147
|
++ *features = f;
|
|
148
|
++ return countof(f);
|
|
149
|
++}
|
|
150
|
++
|
|
151
|
++METHOD(plugin_t, destroy, void,
|
|
152
|
++ private_gmpdh_plugin_t *this)
|
|
153
|
++{
|
|
154
|
++ free(this);
|
|
155
|
++}
|
|
156
|
++
|
|
157
|
++/*
|
|
158
|
++ * see header file
|
|
159
|
++ */
|
|
160
|
++plugin_t *gmpdh_plugin_create()
|
|
161
|
++{
|
|
162
|
++ private_gmpdh_plugin_t *this;
|
|
163
|
++
|
|
164
|
++ INIT(this,
|
|
165
|
++ .public = {
|
|
166
|
++ .plugin = {
|
|
167
|
++ .get_name = _get_name,
|
|
168
|
++ .get_features = _get_features,
|
|
169
|
++ .destroy = _destroy,
|
|
170
|
++ },
|
|
171
|
++ },
|
|
172
|
++ );
|
|
173
|
++
|
|
174
|
++ return &this->public.plugin;
|
|
175
|
++}
|
|
176
|
++
|
|
177
|
+--- /dev/null
|
|
178
|
++++ b/src/libstrongswan/plugins/gmpdh/gmpdh_plugin.h
|
|
179
|
+@@ -0,0 +1,42 @@
|
|
180
|
++/*
|
|
181
|
++ * Copyright (C) 2008 Martin Willi
|
|
182
|
++ * Hochschule fuer Technik Rapperswil
|
|
183
|
++ *
|
|
184
|
++ * This program is free software; you can redistribute it and/or modify it
|
|
185
|
++ * under the terms of the GNU General Public License as published by the
|
|
186
|
++ * Free Software Foundation; either version 2 of the License, or (at your
|
|
187
|
++ * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
|
|
188
|
++ *
|
|
189
|
++ * This program is distributed in the hope that it will be useful, but
|
|
190
|
++ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
|
191
|
++ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
192
|
++ * for more details.
|
|
193
|
++ */
|
|
194
|
++
|
|
195
|
++/**
|
|
196
|
++ * @defgroup gmpdh_p gmpdh
|
|
197
|
++ * @ingroup plugins
|
|
198
|
++ *
|
|
199
|
++ * @defgroup gmpdh_plugin gmpdh_plugin
|
|
200
|
++ * @{ @ingroup gmpdh_p
|
|
201
|
++ */
|
|
202
|
++
|
|
203
|
++#ifndef GMPDH_PLUGIN_H_
|
|
204
|
++#define GMPDH_PLUGIN_H_
|
|
205
|
++
|
|
206
|
++#include <plugins/plugin.h>
|
|
207
|
++
|
|
208
|
++typedef struct gmpdh_plugin_t gmpdh_plugin_t;
|
|
209
|
++
|
|
210
|
++/**
|
|
211
|
++ * Plugin implementing asymmetric crypto algorithms using the GNU MP library.
|
|
212
|
++ */
|
|
213
|
++struct gmpdh_plugin_t {
|
|
214
|
++
|
|
215
|
++ /**
|
|
216
|
++ * implements plugin interface
|
|
217
|
++ */
|
|
218
|
++ plugin_t plugin;
|
|
219
|
++};
|
|
220
|
++
|
|
221
|
++#endif /** GMPDH_PLUGIN_H_ @}*/
|