- startet importing pluto ASN1 stuff
[strongswan.git] / Source / lib / crypto / hmac.h
1 /**
2 * @file hmac.h
3 *
4 * @brief Interface of hmac_t.
5 */
6
7 /*
8 * Copyright (C) 2005 Jan Hutter, Martin Willi
9 * Hochschule fuer Technik Rapperswil
10 *
11 * This program is free software; you can redistribute it and/or modify it
12 * under the terms of the GNU General Public License as published by the
13 * Free Software Foundation; either version 2 of the License, or (at your
14 * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
15 *
16 * This program is distributed in the hope that it will be useful, but
17 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
18 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
19 * for more details.
20 */
21
22 #ifndef HMAC_H_
23 #define HMAC_H_
24
25 #include <crypto/hashers/hasher.h>
26 #include <definitions.h>
27
28
29 typedef struct hmac_t hmac_t;
30
31 /**
32 * @brief Message authentication using hash functions.
33 *
34 * This class implements the message authenticaion algorithm
35 * described in RFC2104. It uses a hash function, wich must
36 * be implemented as a hasher_t class.
37 *
38 * See http://www.faqs.org/rfcs/rfc2104.html for RFC.
39 * @see
40 * - hasher_t
41 * - prf_hmac_t
42 *
43 * @b Constructors:
44 * - hmac_create()
45 *
46 * @ingroup transforms
47 */
48 struct hmac_t {
49 /**
50 * @brief Generate message authentication code.
51 *
52 * If buffer is NULL, no result is given back. A next call will
53 * append the data to already supplied data. If buffer is not NULL,
54 * the mac of all apended data is calculated, returned and the
55 * state of the hmac_t is reseted.
56 *
57 * @param this calling object
58 * @param data chunk of data to authenticate
59 * @param[out] buffer pointer where the generated bytes will be written
60 */
61 void (*get_mac) (hmac_t *this, chunk_t data, u_int8_t *buffer);
62
63 /**
64 * @brief Generates message authentication code and
65 * allocate space for them.
66 *
67 * If chunk is NULL, no result is given back. A next call will
68 * append the data to already supplied. If chunk is not NULL,
69 * the mac of all apended data is calculated, returned and the
70 * state of the hmac_t reset;
71 *
72 * @param this calling object
73 * @param data chunk of data to authenticate
74 * @param[out] chunk chunk which will hold generated bytes
75 */
76 void (*allocate_mac) (hmac_t *this, chunk_t data, chunk_t *chunk);
77
78 /**
79 * @brief Get the block size of this hmac_t object.
80 *
81 * @param this calling object
82 * @return block size in bytes
83 */
84 size_t (*get_block_size) (hmac_t *this);
85
86 /**
87 * @brief Set the key for this hmac_t object.
88 *
89 * Any key length is accepted.
90 *
91 * @param this calling object
92 * @param key key to set
93 */
94 void (*set_key) (hmac_t *this, chunk_t key);
95
96 /**
97 * @brief Destroys a hmac_t object.
98 *
99 * @param this calling object
100 */
101 void (*destroy) (hmac_t *this);
102 };
103
104 /**
105 * @brief Creates a new hmac_t object.
106 *
107 * Creates a hasher_t object internally.
108 *
109 * @param hash_algorithm hash algorithm to use
110 * @return
111 * - hmac_t object
112 * - NULL if hash algorithm is not supported
113 *
114 * @ingroup transforms
115 */
116 hmac_t *hmac_create(hash_algorithm_t hash_algorithm);
117
118 #endif /*HMAC_H_*/