/* * Copyright (C) 2012 Tobias Brunner * Copyright (C) 2005-2008 Martin Willi * Copyright (C) 2005 Jan Hutter * HSR 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 . * * 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 mac mac * @{ @ingroup crypto */ #ifndef MAC_H_ #define MAC_H_ typedef struct mac_t mac_t; #include /** * Generic interface for message authentication codes. * * Classes implementing this interface can use the PRF and signer wrappers. */ struct mac_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 appended 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 * @return TRUE if MAC generated successfully */ bool (*get_mac)(mac_t *this, chunk_t data, uint8_t *out) __attribute__((warn_unused_result)); /** * Get the size of the resulting MAC. * * @return block size in bytes */ size_t (*get_mac_size)(mac_t *this); /** * Set the key to be used for the MAC. * * Any key length must be accepted. * * @param key key to set * @return TRUE if key set successfully */ bool (*set_key)(mac_t *this, chunk_t key) __attribute__((warn_unused_result)); /** * Destroys a mac_t object. */ void (*destroy) (mac_t *this); }; #endif /** MAC_H_ @}*/