pkgconfig: Fix libgcrypt.pc.
[libgcrypt.git] / cipher / mac-internal.h
1 /* mac-internal.h  -  Internal defs for mac.c
2  * Copyright (C) 2013 Jussi Kivilinna <jussi.kivilinna@iki.fi>
3  *
4  * This file is part of Libgcrypt.
5  *
6  * Libgcrypt is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU Lesser general Public License as
8  * published by the Free Software Foundation; either version 2.1 of
9  * the License, or (at your option) any later version.
10  *
11  * Libgcrypt is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this program; if not, see <http://www.gnu.org/licenses/>.
18  */
19
20 #include <config.h>
21
22 #include "g10lib.h"
23
24
25 /* The data object used to hold a handle to an encryption object.  */
26 struct gcry_mac_handle;
27
28 /* The data object used to hold poly1305-mac context.  */
29 struct poly1305mac_context_s;
30
31 \f
32 /*
33  *
34  * Message authentication code related definitions.
35  *
36  */
37
38
39 /* Magic values for the context structure.  */
40 #define CTX_MAGIC_NORMAL 0x59d9b8af
41 #define CTX_MAGIC_SECURE 0x12c27cd0
42
43
44 /* MAC module functions. */
45 typedef gcry_err_code_t (*gcry_mac_open_func_t)(gcry_mac_hd_t h);
46 typedef void (*gcry_mac_close_func_t)(gcry_mac_hd_t h);
47 typedef gcry_err_code_t (*gcry_mac_setkey_func_t)(gcry_mac_hd_t h,
48                                                   const unsigned char *key,
49                                                   size_t keylen);
50 typedef gcry_err_code_t (*gcry_mac_setiv_func_t)(gcry_mac_hd_t h,
51                                                  const unsigned char *iv,
52                                                  size_t ivlen);
53 typedef gcry_err_code_t (*gcry_mac_reset_func_t)(gcry_mac_hd_t h);
54 typedef gcry_err_code_t (*gcry_mac_write_func_t)(gcry_mac_hd_t h,
55                                                  const unsigned char *inbuf,
56                                                  size_t inlen);
57 typedef gcry_err_code_t (*gcry_mac_read_func_t)(gcry_mac_hd_t h,
58                                                 unsigned char *outbuf,
59                                                 size_t *outlen);
60 typedef gcry_err_code_t (*gcry_mac_verify_func_t)(gcry_mac_hd_t h,
61                                                   const unsigned char *inbuf,
62                                                   size_t inlen);
63 typedef unsigned int (*gcry_mac_get_maclen_func_t)(int algo);
64 typedef unsigned int (*gcry_mac_get_keylen_func_t)(int algo);
65
66
67 typedef struct gcry_mac_spec_ops
68 {
69   gcry_mac_open_func_t open;
70   gcry_mac_close_func_t close;
71   gcry_mac_setkey_func_t setkey;
72   gcry_mac_setiv_func_t setiv;
73   gcry_mac_reset_func_t reset;
74   gcry_mac_write_func_t write;
75   gcry_mac_read_func_t read;
76   gcry_mac_verify_func_t verify;
77   gcry_mac_get_maclen_func_t get_maclen;
78   gcry_mac_get_keylen_func_t get_keylen;
79 } gcry_mac_spec_ops_t;
80
81
82 /* Module specification structure for message authentication codes.  */
83 typedef struct gcry_mac_spec
84 {
85   int algo;
86   struct {
87     unsigned int disabled:1;
88     unsigned int fips:1;
89   } flags;
90   const char *name;
91   const gcry_mac_spec_ops_t *ops;
92 } gcry_mac_spec_t;
93
94
95 /* The handle structure.  */
96 struct gcry_mac_handle
97 {
98   int magic;
99   int algo;
100   const gcry_mac_spec_t *spec;
101   gcry_ctx_t gcry_ctx;
102   union {
103     struct {
104       gcry_md_hd_t md_ctx;
105       int md_algo;
106     } hmac;
107     struct {
108       gcry_cipher_hd_t ctx;
109       int cipher_algo;
110       unsigned int blklen;
111     } cmac;
112     struct {
113       gcry_cipher_hd_t ctx;
114       int cipher_algo;
115     } gmac;
116     struct {
117       struct poly1305mac_context_s *ctx;
118     } poly1305mac;
119   } u;
120 };
121
122
123 /*
124  * The HMAC algorithm specifications (mac-hmac.c).
125  */
126 #if USE_SHA1
127 extern gcry_mac_spec_t _gcry_mac_type_spec_hmac_sha1;
128 #endif
129 #if USE_SHA256
130 extern gcry_mac_spec_t _gcry_mac_type_spec_hmac_sha256;
131 extern gcry_mac_spec_t _gcry_mac_type_spec_hmac_sha224;
132 #endif
133 #if USE_SHA512
134 extern gcry_mac_spec_t _gcry_mac_type_spec_hmac_sha512;
135 extern gcry_mac_spec_t _gcry_mac_type_spec_hmac_sha384;
136 extern gcry_mac_spec_t _gcry_mac_type_spec_hmac_sha512_224;
137 extern gcry_mac_spec_t _gcry_mac_type_spec_hmac_sha512_256;
138 #endif
139 #if USE_SHA3
140 extern gcry_mac_spec_t _gcry_mac_type_spec_hmac_sha3_224;
141 extern gcry_mac_spec_t _gcry_mac_type_spec_hmac_sha3_256;
142 extern gcry_mac_spec_t _gcry_mac_type_spec_hmac_sha3_384;
143 extern gcry_mac_spec_t _gcry_mac_type_spec_hmac_sha3_512;
144 #endif
145 #ifdef USE_GOST_R_3411_94
146 extern gcry_mac_spec_t _gcry_mac_type_spec_hmac_gost3411_94;
147 extern gcry_mac_spec_t _gcry_mac_type_spec_hmac_gost3411_cp;
148 #endif
149 #ifdef USE_GOST_R_3411_12
150 extern gcry_mac_spec_t _gcry_mac_type_spec_hmac_stribog256;
151 extern gcry_mac_spec_t _gcry_mac_type_spec_hmac_stribog512;
152 #endif
153 #if USE_WHIRLPOOL
154 extern gcry_mac_spec_t _gcry_mac_type_spec_hmac_whirlpool;
155 #endif
156 #if USE_RMD160
157 extern gcry_mac_spec_t _gcry_mac_type_spec_hmac_rmd160;
158 #endif
159 #if USE_TIGER
160 extern gcry_mac_spec_t _gcry_mac_type_spec_hmac_tiger1;
161 #endif
162 #if USE_MD5
163 extern gcry_mac_spec_t _gcry_mac_type_spec_hmac_md5;
164 #endif
165 #if USE_MD4
166 extern gcry_mac_spec_t _gcry_mac_type_spec_hmac_md4;
167 #endif
168 #if USE_BLAKE2
169 extern gcry_mac_spec_t _gcry_mac_type_spec_hmac_blake2b_512;
170 extern gcry_mac_spec_t _gcry_mac_type_spec_hmac_blake2b_384;
171 extern gcry_mac_spec_t _gcry_mac_type_spec_hmac_blake2b_256;
172 extern gcry_mac_spec_t _gcry_mac_type_spec_hmac_blake2b_160;
173 extern gcry_mac_spec_t _gcry_mac_type_spec_hmac_blake2s_256;
174 extern gcry_mac_spec_t _gcry_mac_type_spec_hmac_blake2s_224;
175 extern gcry_mac_spec_t _gcry_mac_type_spec_hmac_blake2s_160;
176 extern gcry_mac_spec_t _gcry_mac_type_spec_hmac_blake2s_128;
177 #endif
178 #if USE_SM3
179 extern gcry_mac_spec_t _gcry_mac_type_spec_hmac_sm3;
180 #endif
181
182 /*
183  * The CMAC algorithm specifications (mac-cmac.c).
184  */
185 #if USE_BLOWFISH
186 extern gcry_mac_spec_t _gcry_mac_type_spec_cmac_blowfish;
187 #endif
188 #if USE_DES
189 extern gcry_mac_spec_t _gcry_mac_type_spec_cmac_tripledes;
190 #endif
191 #if USE_CAST5
192 extern gcry_mac_spec_t _gcry_mac_type_spec_cmac_cast5;
193 #endif
194 #if USE_AES
195 extern gcry_mac_spec_t _gcry_mac_type_spec_cmac_aes;
196 #endif
197 #if USE_TWOFISH
198 extern gcry_mac_spec_t _gcry_mac_type_spec_cmac_twofish;
199 #endif
200 #if USE_SERPENT
201 extern gcry_mac_spec_t _gcry_mac_type_spec_cmac_serpent;
202 #endif
203 #if USE_RFC2268
204 extern gcry_mac_spec_t _gcry_mac_type_spec_cmac_rfc2268;
205 #endif
206 #if USE_SEED
207 extern gcry_mac_spec_t _gcry_mac_type_spec_cmac_seed;
208 #endif
209 #if USE_CAMELLIA
210 extern gcry_mac_spec_t _gcry_mac_type_spec_cmac_camellia;
211 #endif
212 #ifdef USE_IDEA
213 extern gcry_mac_spec_t _gcry_mac_type_spec_cmac_idea;
214 #endif
215 #if USE_GOST28147
216 extern gcry_mac_spec_t _gcry_mac_type_spec_cmac_gost28147;
217 #endif
218
219 /*
220  * The GMAC algorithm specifications (mac-gmac.c).
221  */
222 #if USE_AES
223 extern gcry_mac_spec_t _gcry_mac_type_spec_gmac_aes;
224 #endif
225 #if USE_TWOFISH
226 extern gcry_mac_spec_t _gcry_mac_type_spec_gmac_twofish;
227 #endif
228 #if USE_SERPENT
229 extern gcry_mac_spec_t _gcry_mac_type_spec_gmac_serpent;
230 #endif
231 #if USE_SEED
232 extern gcry_mac_spec_t _gcry_mac_type_spec_gmac_seed;
233 #endif
234 #if USE_CAMELLIA
235 extern gcry_mac_spec_t _gcry_mac_type_spec_gmac_camellia;
236 #endif
237
238 /*
239  * The Poly1305 MAC algorithm specifications (mac-poly1305.c).
240  */
241 extern gcry_mac_spec_t _gcry_mac_type_spec_poly1305mac;
242 #if USE_AES
243 extern gcry_mac_spec_t _gcry_mac_type_spec_poly1305mac_aes;
244 #endif
245 #if USE_CAMELLIA
246 extern gcry_mac_spec_t _gcry_mac_type_spec_poly1305mac_camellia;
247 #endif
248 #if USE_TWOFISH
249 extern gcry_mac_spec_t _gcry_mac_type_spec_poly1305mac_twofish;
250 #endif
251 #if USE_SERPENT
252 extern gcry_mac_spec_t _gcry_mac_type_spec_poly1305mac_serpent;
253 #endif
254 #if USE_SEED
255 extern gcry_mac_spec_t _gcry_mac_type_spec_poly1305mac_seed;
256 #endif