pubkey: Re-map all depreccated RSA algo numbers.
[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 /* The data object used to hold a handle to an encryption object.  */
21 struct gcry_mac_handle;
22
23 \f
24 /*
25  *
26  * Message authentication code related definitions.
27  *
28  */
29
30
31 /* Magic values for the context structure.  */
32 #define CTX_MAGIC_NORMAL 0x59d9b8af
33 #define CTX_MAGIC_SECURE 0x12c27cd0
34
35
36 /* MAC module functions. */
37 typedef gcry_err_code_t (*gcry_mac_open_func_t)(gcry_mac_hd_t h);
38 typedef void (*gcry_mac_close_func_t)(gcry_mac_hd_t h);
39 typedef gcry_err_code_t (*gcry_mac_setkey_func_t)(gcry_mac_hd_t h,
40                                                   const unsigned char *key,
41                                                   size_t keylen);
42 typedef gcry_err_code_t (*gcry_mac_setiv_func_t)(gcry_mac_hd_t h,
43                                                  const unsigned char *iv,
44                                                  size_t ivlen);
45 typedef gcry_err_code_t (*gcry_mac_reset_func_t)(gcry_mac_hd_t h);
46 typedef gcry_err_code_t (*gcry_mac_write_func_t)(gcry_mac_hd_t h,
47                                                  const unsigned char *inbuf,
48                                                  size_t inlen);
49 typedef gcry_err_code_t (*gcry_mac_read_func_t)(gcry_mac_hd_t h,
50                                                 unsigned char *outbuf,
51                                                 size_t *outlen);
52 typedef gcry_err_code_t (*gcry_mac_verify_func_t)(gcry_mac_hd_t h,
53                                                   const unsigned char *inbuf,
54                                                   size_t inlen);
55 typedef unsigned int (*gcry_mac_get_maclen_func_t)(int algo);
56 typedef unsigned int (*gcry_mac_get_keylen_func_t)(int algo);
57
58
59 typedef struct gcry_mac_spec_ops
60 {
61   gcry_mac_open_func_t open;
62   gcry_mac_close_func_t close;
63   gcry_mac_setkey_func_t setkey;
64   gcry_mac_setiv_func_t setiv;
65   gcry_mac_reset_func_t reset;
66   gcry_mac_write_func_t write;
67   gcry_mac_read_func_t read;
68   gcry_mac_verify_func_t verify;
69   gcry_mac_get_maclen_func_t get_maclen;
70   gcry_mac_get_keylen_func_t get_keylen;
71 } gcry_mac_spec_ops_t;
72
73
74 /* Module specification structure for message authentication codes.  */
75 typedef struct gcry_mac_spec
76 {
77   int algo;
78   struct {
79     unsigned int disabled:1;
80     unsigned int fips:1;
81   } flags;
82   const char *name;
83   const gcry_mac_spec_ops_t *ops;
84 } gcry_mac_spec_t;
85
86
87
88 /* The handle structure.  */
89 struct gcry_mac_handle
90 {
91   int magic;
92   int algo;
93   const gcry_mac_spec_t *spec;
94   gcry_ctx_t gcry_ctx;
95   union {
96     struct {
97       gcry_md_hd_t md_ctx;
98       int md_algo;
99     } hmac;
100     struct {
101       gcry_cipher_hd_t ctx;
102       int cipher_algo;
103       unsigned int blklen;
104     } cmac;
105     struct {
106       gcry_cipher_hd_t ctx;
107       int cipher_algo;
108     } gmac;
109   } u;
110 };
111
112
113 /*
114  * The HMAC algorithm specifications (mac-hmac.c).
115  */
116 #if USE_SHA1
117 extern gcry_mac_spec_t _gcry_mac_type_spec_hmac_sha1;
118 #endif
119 #if USE_SHA256
120 extern gcry_mac_spec_t _gcry_mac_type_spec_hmac_sha256;
121 extern gcry_mac_spec_t _gcry_mac_type_spec_hmac_sha224;
122 #endif
123 #if USE_SHA512
124 extern gcry_mac_spec_t _gcry_mac_type_spec_hmac_sha512;
125 extern gcry_mac_spec_t _gcry_mac_type_spec_hmac_sha384;
126 #endif
127 #ifdef USE_GOST_R_3411_94
128 extern gcry_mac_spec_t _gcry_mac_type_spec_hmac_gost3411_94;
129 #endif
130 #ifdef USE_GOST_R_3411_12
131 extern gcry_mac_spec_t _gcry_mac_type_spec_hmac_stribog256;
132 extern gcry_mac_spec_t _gcry_mac_type_spec_hmac_stribog512;
133 #endif
134 #if USE_WHIRLPOOL
135 extern gcry_mac_spec_t _gcry_mac_type_spec_hmac_whirlpool;
136 #endif
137 #if USE_RMD160
138 extern gcry_mac_spec_t _gcry_mac_type_spec_hmac_rmd160;
139 #endif
140 #if USE_TIGER
141 extern gcry_mac_spec_t _gcry_mac_type_spec_hmac_tiger1;
142 #endif
143 #if USE_MD5
144 extern gcry_mac_spec_t _gcry_mac_type_spec_hmac_md5;
145 #endif
146 #if USE_MD4
147 extern gcry_mac_spec_t _gcry_mac_type_spec_hmac_md4;
148 #endif
149
150 /*
151  * The CMAC algorithm specifications (mac-cmac.c).
152  */
153 #if USE_BLOWFISH
154 extern gcry_mac_spec_t _gcry_mac_type_spec_cmac_blowfish;
155 #endif
156 #if USE_DES
157 extern gcry_mac_spec_t _gcry_mac_type_spec_cmac_tripledes;
158 #endif
159 #if USE_CAST5
160 extern gcry_mac_spec_t _gcry_mac_type_spec_cmac_cast5;
161 #endif
162 #if USE_AES
163 extern gcry_mac_spec_t _gcry_mac_type_spec_cmac_aes;
164 #endif
165 #if USE_TWOFISH
166 extern gcry_mac_spec_t _gcry_mac_type_spec_cmac_twofish;
167 #endif
168 #if USE_SERPENT
169 extern gcry_mac_spec_t _gcry_mac_type_spec_cmac_serpent;
170 #endif
171 #if USE_RFC2268
172 extern gcry_mac_spec_t _gcry_mac_type_spec_cmac_rfc2268;
173 #endif
174 #if USE_SEED
175 extern gcry_mac_spec_t _gcry_mac_type_spec_cmac_seed;
176 #endif
177 #if USE_CAMELLIA
178 extern gcry_mac_spec_t _gcry_mac_type_spec_cmac_camellia;
179 #endif
180 #ifdef USE_IDEA
181 extern gcry_mac_spec_t _gcry_mac_type_spec_cmac_idea;
182 #endif
183 #if USE_GOST28147
184 extern gcry_mac_spec_t _gcry_mac_type_spec_cmac_gost28147;
185 #endif
186
187 /*
188  * The GMAC algorithm specifications (mac-gmac.c).
189  */
190 #if USE_AES
191 extern gcry_mac_spec_t _gcry_mac_type_spec_gmac_aes;
192 #endif
193 #if USE_TWOFISH
194 extern gcry_mac_spec_t _gcry_mac_type_spec_gmac_twofish;
195 #endif
196 #if USE_SERPENT
197 extern gcry_mac_spec_t _gcry_mac_type_spec_gmac_serpent;
198 #endif
199 #if USE_SEED
200 extern gcry_mac_spec_t _gcry_mac_type_spec_gmac_seed;
201 #endif
202 #if USE_CAMELLIA
203 extern gcry_mac_spec_t _gcry_mac_type_spec_gmac_camellia;
204 #endif