Annotation of embedaddon/strongswan/src/libstrongswan/plugins/gmp/gmp_plugin.c, revision 1.1.1.1
1.1 misho 1: /*
2: * Copyright (C) 2008-2009 Martin Willi
3: * HSR Hochschule fuer Technik Rapperswil
4: *
5: * This program is free software; you can redistribute it and/or modify it
6: * under the terms of the GNU General Public License as published by the
7: * Free Software Foundation; either version 2 of the License, or (at your
8: * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
9: *
10: * This program is distributed in the hope that it will be useful, but
11: * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
12: * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
13: * for more details.
14: */
15:
16: #include "gmp_plugin.h"
17:
18: #include <library.h>
19: #include "gmp_diffie_hellman.h"
20: #include "gmp_rsa_private_key.h"
21: #include "gmp_rsa_public_key.h"
22:
23: typedef struct private_gmp_plugin_t private_gmp_plugin_t;
24:
25: /**
26: * private data of gmp_plugin
27: */
28: struct private_gmp_plugin_t {
29:
30: /**
31: * public functions
32: */
33: gmp_plugin_t public;
34: };
35:
36: METHOD(plugin_t, get_name, char*,
37: private_gmp_plugin_t *this)
38: {
39: return "gmp";
40: }
41:
42: METHOD(plugin_t, get_features, int,
43: private_gmp_plugin_t *this, plugin_feature_t *features[])
44: {
45: static plugin_feature_t f[] = {
46: /* DH groups */
47: PLUGIN_REGISTER(DH, gmp_diffie_hellman_create),
48: PLUGIN_PROVIDE(DH, MODP_3072_BIT),
49: PLUGIN_DEPENDS(RNG, RNG_STRONG),
50: PLUGIN_PROVIDE(DH, MODP_4096_BIT),
51: PLUGIN_DEPENDS(RNG, RNG_STRONG),
52: PLUGIN_PROVIDE(DH, MODP_6144_BIT),
53: PLUGIN_DEPENDS(RNG, RNG_STRONG),
54: PLUGIN_PROVIDE(DH, MODP_8192_BIT),
55: PLUGIN_DEPENDS(RNG, RNG_STRONG),
56: PLUGIN_PROVIDE(DH, MODP_2048_BIT),
57: PLUGIN_DEPENDS(RNG, RNG_STRONG),
58: PLUGIN_PROVIDE(DH, MODP_2048_224),
59: PLUGIN_DEPENDS(RNG, RNG_STRONG),
60: PLUGIN_PROVIDE(DH, MODP_2048_256),
61: PLUGIN_DEPENDS(RNG, RNG_STRONG),
62: PLUGIN_PROVIDE(DH, MODP_1536_BIT),
63: PLUGIN_DEPENDS(RNG, RNG_STRONG),
64: PLUGIN_PROVIDE(DH, MODP_1024_BIT),
65: PLUGIN_DEPENDS(RNG, RNG_STRONG),
66: PLUGIN_PROVIDE(DH, MODP_1024_160),
67: PLUGIN_DEPENDS(RNG, RNG_STRONG),
68: PLUGIN_PROVIDE(DH, MODP_768_BIT),
69: PLUGIN_DEPENDS(RNG, RNG_STRONG),
70: PLUGIN_REGISTER(DH, gmp_diffie_hellman_create_custom),
71: PLUGIN_PROVIDE(DH, MODP_CUSTOM),
72: PLUGIN_DEPENDS(RNG, RNG_STRONG),
73: /* private/public keys */
74: PLUGIN_REGISTER(PRIVKEY, gmp_rsa_private_key_load, TRUE),
75: PLUGIN_PROVIDE(PRIVKEY, KEY_RSA),
76: PLUGIN_REGISTER(PRIVKEY_GEN, gmp_rsa_private_key_gen, FALSE),
77: PLUGIN_PROVIDE(PRIVKEY_GEN, KEY_RSA),
78: PLUGIN_DEPENDS(RNG, RNG_TRUE),
79: PLUGIN_REGISTER(PUBKEY, gmp_rsa_public_key_load, TRUE),
80: PLUGIN_PROVIDE(PUBKEY, KEY_RSA),
81: /* signature schemes, private */
82: PLUGIN_PROVIDE(PRIVKEY_SIGN, SIGN_RSA_EMSA_PSS),
83: PLUGIN_SDEPEND(HASHER, HASH_SHA1),
84: PLUGIN_SDEPEND(HASHER, HASH_SHA256),
85: PLUGIN_SDEPEND(HASHER, HASH_SHA512),
86: PLUGIN_SDEPEND(RNG, RNG_STRONG),
87: PLUGIN_SDEPEND(XOF, XOF_MGF1_SHA1),
88: PLUGIN_SDEPEND(XOF, XOF_MGF1_SHA256),
89: PLUGIN_SDEPEND(XOF, XOF_MGF1_SHA512),
90: PLUGIN_PROVIDE(PRIVKEY_SIGN, SIGN_RSA_EMSA_PKCS1_NULL),
91: PLUGIN_PROVIDE(PRIVKEY_SIGN, SIGN_RSA_EMSA_PKCS1_SHA2_224),
92: PLUGIN_DEPENDS(HASHER, HASH_SHA224),
93: PLUGIN_PROVIDE(PRIVKEY_SIGN, SIGN_RSA_EMSA_PKCS1_SHA2_256),
94: PLUGIN_DEPENDS(HASHER, HASH_SHA256),
95: PLUGIN_PROVIDE(PRIVKEY_SIGN, SIGN_RSA_EMSA_PKCS1_SHA2_384),
96: PLUGIN_DEPENDS(HASHER, HASH_SHA384),
97: PLUGIN_PROVIDE(PRIVKEY_SIGN, SIGN_RSA_EMSA_PKCS1_SHA2_512),
98: PLUGIN_DEPENDS(HASHER, HASH_SHA512),
99: PLUGIN_PROVIDE(PRIVKEY_SIGN, SIGN_RSA_EMSA_PKCS1_SHA3_224),
100: PLUGIN_DEPENDS(HASHER, HASH_SHA3_224),
101: PLUGIN_PROVIDE(PRIVKEY_SIGN, SIGN_RSA_EMSA_PKCS1_SHA3_256),
102: PLUGIN_DEPENDS(HASHER, HASH_SHA3_256),
103: PLUGIN_PROVIDE(PRIVKEY_SIGN, SIGN_RSA_EMSA_PKCS1_SHA3_384),
104: PLUGIN_DEPENDS(HASHER, HASH_SHA3_384),
105: PLUGIN_PROVIDE(PRIVKEY_SIGN, SIGN_RSA_EMSA_PKCS1_SHA3_512),
106: PLUGIN_DEPENDS(HASHER, HASH_SHA3_512),
107: PLUGIN_PROVIDE(PRIVKEY_SIGN, SIGN_RSA_EMSA_PKCS1_SHA1),
108: PLUGIN_DEPENDS(HASHER, HASH_SHA1),
109: PLUGIN_PROVIDE(PRIVKEY_SIGN, SIGN_RSA_EMSA_PKCS1_MD5),
110: PLUGIN_DEPENDS(HASHER, HASH_MD5),
111: /* signature verification schemes */
112: PLUGIN_PROVIDE(PUBKEY_VERIFY, SIGN_RSA_EMSA_PSS),
113: PLUGIN_SDEPEND(HASHER, HASH_SHA1),
114: PLUGIN_SDEPEND(HASHER, HASH_SHA256),
115: PLUGIN_SDEPEND(HASHER, HASH_SHA512),
116: PLUGIN_SDEPEND(XOF, XOF_MGF1_SHA1),
117: PLUGIN_SDEPEND(XOF, XOF_MGF1_SHA256),
118: PLUGIN_SDEPEND(XOF, XOF_MGF1_SHA512),
119: PLUGIN_PROVIDE(PUBKEY_VERIFY, SIGN_RSA_EMSA_PKCS1_NULL),
120: PLUGIN_PROVIDE(PUBKEY_VERIFY, SIGN_RSA_EMSA_PKCS1_SHA2_224),
121: PLUGIN_DEPENDS(HASHER, HASH_SHA224),
122: PLUGIN_PROVIDE(PUBKEY_VERIFY, SIGN_RSA_EMSA_PKCS1_SHA2_256),
123: PLUGIN_DEPENDS(HASHER, HASH_SHA256),
124: PLUGIN_PROVIDE(PUBKEY_VERIFY, SIGN_RSA_EMSA_PKCS1_SHA2_384),
125: PLUGIN_DEPENDS(HASHER, HASH_SHA384),
126: PLUGIN_PROVIDE(PUBKEY_VERIFY, SIGN_RSA_EMSA_PKCS1_SHA2_512),
127: PLUGIN_DEPENDS(HASHER, HASH_SHA512),
128: PLUGIN_PROVIDE(PUBKEY_VERIFY, SIGN_RSA_EMSA_PKCS1_SHA3_224),
129: PLUGIN_DEPENDS(HASHER, HASH_SHA3_224),
130: PLUGIN_PROVIDE(PUBKEY_VERIFY, SIGN_RSA_EMSA_PKCS1_SHA3_256),
131: PLUGIN_DEPENDS(HASHER, HASH_SHA3_256),
132: PLUGIN_PROVIDE(PUBKEY_VERIFY, SIGN_RSA_EMSA_PKCS1_SHA3_384),
133: PLUGIN_DEPENDS(HASHER, HASH_SHA3_384),
134: PLUGIN_PROVIDE(PUBKEY_VERIFY, SIGN_RSA_EMSA_PKCS1_SHA3_512),
135: PLUGIN_DEPENDS(HASHER, HASH_SHA3_512),
136: PLUGIN_PROVIDE(PUBKEY_VERIFY, SIGN_RSA_EMSA_PKCS1_SHA1),
137: PLUGIN_DEPENDS(HASHER, HASH_SHA1),
138: PLUGIN_PROVIDE(PUBKEY_VERIFY, SIGN_RSA_EMSA_PKCS1_MD5),
139: PLUGIN_DEPENDS(HASHER, HASH_MD5),
140: /* en-/decryption schemes */
141: PLUGIN_PROVIDE(PRIVKEY_DECRYPT, ENCRYPT_RSA_PKCS1),
142: PLUGIN_PROVIDE(PUBKEY_ENCRYPT, ENCRYPT_RSA_PKCS1),
143: PLUGIN_DEPENDS(RNG, RNG_WEAK),
144: };
145: *features = f;
146: return countof(f);
147: }
148:
149: METHOD(plugin_t, destroy, void,
150: private_gmp_plugin_t *this)
151: {
152: free(this);
153: }
154:
155: /*
156: * see header file
157: */
158: plugin_t *gmp_plugin_create()
159: {
160: private_gmp_plugin_t *this;
161:
162: INIT(this,
163: .public = {
164: .plugin = {
165: .get_name = _get_name,
166: .get_features = _get_features,
167: .destroy = _destroy,
168: },
169: },
170: );
171:
172: return &this->public.plugin;
173: }
174:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>