diff options
Diffstat (limited to 'src/libstrongswan/plugins/openssl/openssl_hmac.h')
-rw-r--r-- | src/libstrongswan/plugins/openssl/openssl_hmac.h | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/src/libstrongswan/plugins/openssl/openssl_hmac.h b/src/libstrongswan/plugins/openssl/openssl_hmac.h new file mode 100644 index 000000000..175513c2f --- /dev/null +++ b/src/libstrongswan/plugins/openssl/openssl_hmac.h @@ -0,0 +1,90 @@ +/* + * Copyright (C) 2012 Tobias Brunner + * Hochschule fuer Technik Rapperswil + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + */ + +/** + * @defgroup openssl_hmac openssl_hmac + * @{ @ingroup openssl_p + */ + +#ifndef OPENSSL_HMAC_H_ +#define OPENSSL_HMAC_H_ + +typedef struct openssl_hmac_t openssl_hmac_t; + +#include <crypto/hashers/hasher.h> + +/** + * Simple wrapper around OpenSSL's functions to calculate HMAC message + * authentication codes + */ +struct openssl_hmac_t { + + /** + * Generate message authentication code. + * + * If out is NULL, no result is given back. A next call will + * append the data to already supplied data. If out is not NULL, + * the mac of all apended data is calculated, written to out and the + * internal state is reset. + * + * @param data chunk of data to authenticate + * @param out pointer where the generated bytes will be written + */ + void (*get_mac)(openssl_hmac_t *this, chunk_t data, u_int8_t *out); + + /** + * Generates message authentication code and allocates memory for it. + * + * If out is NULL, no result is given back. A next call will + * append the data to already supplied data. If out is not NULL, + * the mac of all apended data is calculated, returned in out and the + * internal state is reset; + * + * @param data chunk of data to authenticate + * @param out chunk which will hold generated bytes + */ + void (*allocate_mac)(openssl_hmac_t *this, chunk_t data, chunk_t *out); + + /** + * Get the size of the resulting MAC. + * + * @return block size in bytes + */ + size_t (*get_block_size)(openssl_hmac_t *this); + + /** + * Set the key to be used for the HMAC. + * + * Any key length is accepted. + * + * @param key key to set + */ + void (*set_key)(openssl_hmac_t *this, chunk_t key); + + /** + * Destroys an openssl_hmac_t object. + */ + void (*destroy)(openssl_hmac_t *this); +}; + +/** + * Creates a new openssl_hmac_t object. + * + * @param algo hash algorithm to use + * @return openssl_hmac_t object, NULL if not supported + */ +openssl_hmac_t *openssl_hmac_create(hash_algorithm_t algo); + +#endif /** OPENSSL_HMAC_H_ @}*/ |