2 * Copyright (C) 2008 Martin Willi
3 * Hochschule fuer Technik Rapperswil
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>.
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
17 * @defgroup crypto_factory crypto_factory
21 #ifndef CRYPTO_FACTORY_H_
22 #define CRYPTO_FACTORY_H_
24 typedef struct crypto_factory_t crypto_factory_t
;
27 #include <crypto/crypters/crypter.h>
28 #include <crypto/signers/signer.h>
29 #include <crypto/hashers/hasher.h>
30 #include <crypto/prfs/prf.h>
31 #include <crypto/diffie_hellman.h>
34 * Constructor function for crypters
36 typedef crypter_t
* (*crypter_constructor_t
)(encryption_algorithm_t algo
,
39 * Constructor function for signers
41 typedef signer_t
* (*signer_constructor_t
)(integrity_algorithm_t algo
);
44 * Constructor function for hashers
46 typedef hasher_t
* (*hasher_constructor_t
)(hash_algorithm_t algo
);
49 * Constructor function for pseudo random fucntions
51 typedef prf_t
* (*prf_constructor_t
)(pseudo_random_function_t algo
);
54 * Constructor function for diffie hellman
56 typedef diffie_hellman_t
* (*dh_constructor_t
)(diffie_hellman_group_t group
);
59 * Handles crypto modules and creates instances.
61 struct crypto_factory_t
{
64 * Create a crypter instance.
66 * @param algo encryption algorithm
67 * @param key_size length of the key in bytes
68 * @return crypter_t instance, NULL if not supported
70 crypter_t
* (*create_crypter
)(crypto_factory_t
*this,
71 encryption_algorithm_t algo
, size_t key_size
);
74 * Create a symmetric signer instance.
76 * @param algo MAC algorithm to use
77 * @return signer_t instance, NULL if not supported
79 signer_t
* (*create_signer
)(crypto_factory_t
*this,
80 integrity_algorithm_t algo
);
83 * Create a hasher instance.
85 * @param algo hash algorithm
86 * @return hasher_t instance, NULL if not supported
88 hasher_t
* (*create_hasher
)(crypto_factory_t
*this, hash_algorithm_t algo
);
91 * Create a pseudo random function instance.
93 * @param algo PRF algorithm to use
94 * @return prf_t instance, NULL if not supported
96 prf_t
* (*create_prf
)(crypto_factory_t
*this, pseudo_random_function_t algo
);
99 * Create a diffie hellman instance.
101 * @param group diffie hellman group
102 * @return diffie_hellman_t instance, NULL if not supported
104 diffie_hellman_t
* (*create_dh
)(crypto_factory_t
*this,
105 diffie_hellman_group_t group
);
108 * Register a crypter constructor.
110 * @param algo algorithm to constructor
111 * @param create constructor function for that algorithm
114 void (*add_crypter
)(crypto_factory_t
*this, encryption_algorithm_t algo
,
115 crypter_constructor_t create
);
118 * Unregister a crypter constructor.
120 * @param create constructor function to unregister
122 void (*remove_crypter
)(crypto_factory_t
*this, crypter_constructor_t create
);
125 * Register a signer constructor.
127 * @param algo algorithm to constructor
128 * @param create constructor function for that algorithm
131 void (*add_signer
)(crypto_factory_t
*this, integrity_algorithm_t algo
,
132 signer_constructor_t create
);
135 * Unregister a signer constructor.
137 * @param create constructor function to unregister
139 void (*remove_signer
)(crypto_factory_t
*this, signer_constructor_t create
);
142 * Register a hasher constructor.
144 * The first added hasher is the preferred hasher returned on
145 * create_hasher(HASH_PREFERRED).
147 * @param algo algorithm to constructor
148 * @param create constructor function for that algorithm
151 void (*add_hasher
)(crypto_factory_t
*this, hash_algorithm_t algo
,
152 hasher_constructor_t create
);
155 * Unregister a hasher constructor.
157 * @param create constructor function to unregister
159 void (*remove_hasher
)(crypto_factory_t
*this, hasher_constructor_t create
);
162 * Register a prf constructor.
164 * @param algo algorithm to constructor
165 * @param create constructor function for that algorithm
168 void (*add_prf
)(crypto_factory_t
*this, pseudo_random_function_t algo
,
169 prf_constructor_t create
);
172 * Unregister a prf constructor.
174 * @param create constructor function to unregister
176 void (*remove_prf
)(crypto_factory_t
*this, prf_constructor_t create
);
179 * Register a diffie hellman constructor.
181 * @param group dh group to constructor
182 * @param create constructor function for that algorithm
185 void (*add_dh
)(crypto_factory_t
*this, diffie_hellman_group_t group
,
186 dh_constructor_t create
);
189 * Unregister a diffie hellman constructor.
191 * @param create constructor function to unregister
193 void (*remove_dh
)(crypto_factory_t
*this, dh_constructor_t create
);
196 * Destroy a crypto_factory instance.
198 void (*destroy
)(crypto_factory_t
*this);
202 * Create a crypto_factory instance.
204 crypto_factory_t
*crypto_factory_create();
206 #endif /* CRYPTO_FACTORY_H_ @}*/