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/rngs/rng.h>
32 #include <crypto/diffie_hellman.h>
35 * Constructor function for crypters
37 typedef crypter_t
* (*crypter_constructor_t
)(encryption_algorithm_t algo
,
40 * Constructor function for signers
42 typedef signer_t
* (*signer_constructor_t
)(integrity_algorithm_t algo
);
45 * Constructor function for hashers
47 typedef hasher_t
* (*hasher_constructor_t
)(hash_algorithm_t algo
);
50 * Constructor function for pseudo random functions
52 typedef prf_t
* (*prf_constructor_t
)(pseudo_random_function_t algo
);
55 * Constructor function for source of randomness
57 typedef rng_t
* (*rng_constructor_t
)(rng_quality_t quality
);
60 * Constructor function for diffie hellman
62 typedef diffie_hellman_t
* (*dh_constructor_t
)(diffie_hellman_group_t group
);
65 * Handles crypto modules and creates instances.
67 struct crypto_factory_t
{
70 * Create a crypter instance.
72 * @param algo encryption algorithm
73 * @param key_size length of the key in bytes
74 * @return crypter_t instance, NULL if not supported
76 crypter_t
* (*create_crypter
)(crypto_factory_t
*this,
77 encryption_algorithm_t algo
, size_t key_size
);
80 * Create a symmetric signer instance.
82 * @param algo MAC algorithm to use
83 * @return signer_t instance, NULL if not supported
85 signer_t
* (*create_signer
)(crypto_factory_t
*this,
86 integrity_algorithm_t algo
);
89 * Create a hasher instance.
91 * @param algo hash algorithm
92 * @return hasher_t instance, NULL if not supported
94 hasher_t
* (*create_hasher
)(crypto_factory_t
*this, hash_algorithm_t algo
);
97 * Create a pseudo random function instance.
99 * @param algo PRF algorithm to use
100 * @return prf_t instance, NULL if not supported
102 prf_t
* (*create_prf
)(crypto_factory_t
*this, pseudo_random_function_t algo
);
105 * Create a source of randomness.
107 * @param quality required randomness quality
108 * @return rng_t instance, NULL if no RNG with such a quality
110 rng_t
* (*create_rng
)(crypto_factory_t
*this, rng_quality_t quality
);
113 * Create a diffie hellman instance.
115 * @param group diffie hellman group
116 * @return diffie_hellman_t instance, NULL if not supported
118 diffie_hellman_t
* (*create_dh
)(crypto_factory_t
*this,
119 diffie_hellman_group_t group
);
122 * Register a crypter constructor.
124 * @param algo algorithm to constructor
125 * @param create constructor function for that algorithm
128 void (*add_crypter
)(crypto_factory_t
*this, encryption_algorithm_t algo
,
129 crypter_constructor_t create
);
132 * Unregister a crypter constructor.
134 * @param create constructor function to unregister
136 void (*remove_crypter
)(crypto_factory_t
*this, crypter_constructor_t create
);
139 * Register a signer constructor.
141 * @param algo algorithm to constructor
142 * @param create constructor function for that algorithm
145 void (*add_signer
)(crypto_factory_t
*this, integrity_algorithm_t algo
,
146 signer_constructor_t create
);
149 * Unregister a signer constructor.
151 * @param create constructor function to unregister
153 void (*remove_signer
)(crypto_factory_t
*this, signer_constructor_t create
);
156 * Register a hasher constructor.
158 * The first added hasher is the preferred hasher returned on
159 * create_hasher(HASH_PREFERRED).
161 * @param algo algorithm to constructor
162 * @param create constructor function for that algorithm
165 void (*add_hasher
)(crypto_factory_t
*this, hash_algorithm_t algo
,
166 hasher_constructor_t create
);
169 * Unregister a hasher constructor.
171 * @param create constructor function to unregister
173 void (*remove_hasher
)(crypto_factory_t
*this, hasher_constructor_t create
);
176 * Register a prf constructor.
178 * @param algo algorithm to constructor
179 * @param create constructor function for that algorithm
182 void (*add_prf
)(crypto_factory_t
*this, pseudo_random_function_t algo
,
183 prf_constructor_t create
);
186 * Unregister a prf constructor.
188 * @param create constructor function to unregister
190 void (*remove_prf
)(crypto_factory_t
*this, prf_constructor_t create
);
193 * Register a source of randomness.
195 * @param quality quality of randomness this RNG serves
196 * @param create constructor function for such a quality
198 void (*add_rng
)(crypto_factory_t
*this, rng_quality_t quality
, rng_constructor_t create
);
201 * Unregister a source of randomness.
203 * @param create constructor function to unregister
205 void (*remove_rng
)(crypto_factory_t
*this, rng_constructor_t create
);
208 * Register a diffie hellman constructor.
210 * @param group dh group to constructor
211 * @param create constructor function for that algorithm
214 void (*add_dh
)(crypto_factory_t
*this, diffie_hellman_group_t group
,
215 dh_constructor_t create
);
218 * Unregister a diffie hellman constructor.
220 * @param create constructor function to unregister
222 void (*remove_dh
)(crypto_factory_t
*this, dh_constructor_t create
);
225 * Destroy a crypto_factory instance.
227 void (*destroy
)(crypto_factory_t
*this);
231 * Create a crypto_factory instance.
233 crypto_factory_t
*crypto_factory_create();
235 #endif /* CRYPTO_FACTORY_H_ @}*/