Annotation of embedaddon/strongswan/src/libstrongswan/plugins/padlock/padlock_plugin.c, revision 1.1.1.1
1.1 misho 1: /*
2: * Copyright (C) 2013 Tobias Brunner
3: * Copyright (C) 2008 Martin Willi
4: * HSR Hochschule fuer Technik Rapperswil
5: *
6: * This program is free software; you can redistribute it and/or modify it
7: * under the terms of the GNU General Public License as published by the
8: * Free Software Foundation; either version 2 of the License, or (at your
9: * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
10: *
11: * This program is distributed in the hope that it will be useful, but
12: * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13: * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14: * for more details.
15: */
16:
17: #include "padlock_plugin.h"
18: #include "padlock_aes_crypter.h"
19: #include "padlock_sha1_hasher.h"
20: #include "padlock_rng.h"
21:
22: #include <stdio.h>
23:
24: #include <library.h>
25: #include <plugins/plugin_feature.h>
26: #include <utils/cpu_feature.h>
27: #include <utils/debug.h>
28:
29: typedef struct private_padlock_plugin_t private_padlock_plugin_t;
30: typedef enum padlock_feature_t padlock_feature_t;
31:
32: /**
33: * private data of aes_plugin
34: */
35: struct private_padlock_plugin_t {
36:
37: /**
38: * public functions
39: */
40: padlock_plugin_t public;
41:
42: /**
43: * features supported by Padlock
44: */
45: cpu_feature_t features;
46: };
47:
48: METHOD(plugin_t, get_name, char*,
49: private_padlock_plugin_t *this)
50: {
51: return "padlock";
52: }
53:
54: METHOD(plugin_t, get_features, int,
55: private_padlock_plugin_t *this, plugin_feature_t *features[])
56: {
57: static plugin_feature_t f_rng[] = {
58: PLUGIN_REGISTER(RNG, padlock_rng_create),
59: PLUGIN_PROVIDE(RNG, RNG_WEAK),
60: PLUGIN_PROVIDE(RNG, RNG_STRONG),
61: PLUGIN_PROVIDE(RNG, RNG_TRUE),
62: };
63: static plugin_feature_t f_aes[] = {
64: PLUGIN_REGISTER(CRYPTER, padlock_aes_crypter_create),
65: PLUGIN_PROVIDE(CRYPTER, ENCR_AES_CBC, 16),
66: };
67: static plugin_feature_t f_sha1[] = {
68: PLUGIN_REGISTER(HASHER, padlock_sha1_hasher_create),
69: PLUGIN_PROVIDE(HASHER, HASH_SHA1),
70: };
71: static plugin_feature_t f[countof(f_rng) + countof(f_aes) +
72: countof(f_sha1)] = {};
73: static int count = 0;
74:
75: if (!count)
76: { /* initialize only once */
77: if (this->features & CPU_FEATURE_PADLOCK_RNG_ENABLED)
78: {
79: plugin_features_add(f, f_rng, countof(f_rng), &count);
80: }
81: if (this->features & CPU_FEATURE_PADLOCK_ACE2_ENABLED)
82: {
83: plugin_features_add(f, f_aes, countof(f_aes), &count);
84: }
85: if (this->features & CPU_FEATURE_PADLOCK_PHE_ENABLED)
86: {
87: plugin_features_add(f, f_sha1, countof(f_sha1), &count);
88: }
89: }
90: *features = f;
91: return count;
92: }
93:
94: METHOD(plugin_t, destroy, void,
95: private_padlock_plugin_t *this)
96: {
97: free(this);
98: }
99:
100: /*
101: * see header file
102: */
103: plugin_t *padlock_plugin_create()
104: {
105: private_padlock_plugin_t *this;
106:
107: INIT(this,
108: .public = {
109: .plugin = {
110: .get_name = _get_name,
111: .get_features = _get_features,
112: .destroy = _destroy,
113: },
114: },
115: .features = cpu_feature_get_all(),
116: );
117:
118: DBG1(DBG_LIB, "Padlock features supported:%s%s%s%s%s, enabled:%s%s%s%s%s",
119: this->features & CPU_FEATURE_PADLOCK_RNG_AVAILABLE ? " RNG" : "",
120: this->features & CPU_FEATURE_PADLOCK_ACE_AVAILABLE ? " ACE" : "",
121: this->features & CPU_FEATURE_PADLOCK_ACE2_AVAILABLE ? " ACE2" : "",
122: this->features & CPU_FEATURE_PADLOCK_PHE_AVAILABLE ? " PHE" : "",
123: this->features & CPU_FEATURE_PADLOCK_PMM_AVAILABLE ? " PMM" : "",
124: this->features & CPU_FEATURE_PADLOCK_RNG_ENABLED ? " RNG" : "",
125: this->features & CPU_FEATURE_PADLOCK_ACE_ENABLED ? " ACE" : "",
126: this->features & CPU_FEATURE_PADLOCK_ACE2_ENABLED ? " ACE2" : "",
127: this->features & CPU_FEATURE_PADLOCK_PHE_ENABLED ? " PHE" : "",
128: this->features & CPU_FEATURE_PADLOCK_PMM_ENABLED ? " PMM" : "");
129:
130: return &this->public.plugin;
131: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>