3 * Information about algorithms.
6 /* nettle, low-level cryptographics library
8 * Copyright (C) 2002 Niels Möller
10 * The nettle library is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU Lesser General Public License as published by
12 * the Free Software Foundation; either version 2.1 of the License, or (at your
13 * option) any later version.
15 * The nettle library is distributed in the hope that it will be useful, but
16 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
17 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
18 * License for more details.
20 * You should have received a copy of the GNU Lesser General Public License
21 * along with the nettle library; see the file COPYING.LIB. If not, write to
22 * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
26 #ifndef NETTLE_META_H_INCLUDED
27 #define NETTLE_META_H_INCLUDED
29 #include "nettle-types.h"
40 unsigned context_size;
42 /* Zero for stream ciphers */
45 /* Suggested key size; other sizes are sometimes possible. */
48 nettle_set_key_func *set_encrypt_key;
49 nettle_set_key_func *set_decrypt_key;
51 nettle_crypt_func *encrypt;
52 nettle_crypt_func *decrypt;
55 #define _NETTLE_CIPHER(name, NAME, keysize) { \
57 sizeof(struct name##_ctx), \
60 (nettle_set_key_func *) name##_set_key, \
61 (nettle_set_key_func *) name##_set_key, \
62 (nettle_crypt_func *) name##_encrypt, \
63 (nettle_crypt_func *) name##_decrypt, \
66 #define _NETTLE_CIPHER_SEP(name, NAME, keysize) { \
68 sizeof(struct name##_ctx), \
71 (nettle_set_key_func *) name##_set_encrypt_key, \
72 (nettle_set_key_func *) name##_set_decrypt_key, \
73 (nettle_crypt_func *) name##_encrypt, \
74 (nettle_crypt_func *) name##_decrypt, \
77 #define _NETTLE_CIPHER_SEP_SET_KEY(name, NAME, keysize) {\
79 sizeof(struct name##_ctx), \
82 (nettle_set_key_func *) name##_set_encrypt_key, \
83 (nettle_set_key_func *) name##_set_decrypt_key, \
84 (nettle_crypt_func *) name##_crypt, \
85 (nettle_crypt_func *) name##_crypt, \
88 #define _NETTLE_CIPHER_FIX(name, NAME, keysize) { \
90 sizeof(struct name##_ctx), \
93 (nettle_set_key_func *) name##_set_key, \
94 (nettle_set_key_func *) name##_set_key, \
95 (nettle_crypt_func *) name##_encrypt, \
96 (nettle_crypt_func *) name##_decrypt, \
99 extern const struct nettle_cipher nettle_aes128;
100 extern const struct nettle_cipher nettle_aes192;
101 extern const struct nettle_cipher nettle_aes256;
103 extern const struct nettle_cipher nettle_arcfour128;
105 extern const struct nettle_cipher nettle_camellia128;
106 extern const struct nettle_cipher nettle_camellia192;
107 extern const struct nettle_cipher nettle_camellia256;
109 extern const struct nettle_cipher nettle_cast128;
111 extern const struct nettle_cipher nettle_serpent128;
112 extern const struct nettle_cipher nettle_serpent192;
113 extern const struct nettle_cipher nettle_serpent256;
115 extern const struct nettle_cipher nettle_twofish128;
116 extern const struct nettle_cipher nettle_twofish192;
117 extern const struct nettle_cipher nettle_twofish256;
119 extern const struct nettle_cipher nettle_arctwo40;
120 extern const struct nettle_cipher nettle_arctwo64;
121 extern const struct nettle_cipher nettle_arctwo128;
122 extern const struct nettle_cipher nettle_arctwo_gutmann128;
128 /* Size of the context struct */
129 unsigned context_size;
131 /* Size of digests */
132 unsigned digest_size;
134 /* Internal block size */
137 nettle_hash_init_func *init;
138 nettle_hash_update_func *update;
139 nettle_hash_digest_func *digest;
142 #define _NETTLE_HASH(name, NAME) { \
144 sizeof(struct name##_ctx), \
145 NAME##_DIGEST_SIZE, \
147 (nettle_hash_init_func *) name##_init, \
148 (nettle_hash_update_func *) name##_update, \
149 (nettle_hash_digest_func *) name##_digest \
152 extern const struct nettle_hash nettle_md2;
153 extern const struct nettle_hash nettle_md4;
154 extern const struct nettle_hash nettle_md5;
155 extern const struct nettle_hash nettle_sha1;
156 extern const struct nettle_hash nettle_sha224;
157 extern const struct nettle_hash nettle_sha256;
158 extern const struct nettle_hash nettle_sha384;
159 extern const struct nettle_hash nettle_sha512;
164 unsigned encode_context_size;
165 unsigned decode_context_size;
167 unsigned encode_final_length;
169 nettle_armor_init_func *encode_init;
170 nettle_armor_length_func *encode_length;
171 nettle_armor_encode_update_func *encode_update;
172 nettle_armor_encode_final_func *encode_final;
174 nettle_armor_init_func *decode_init;
175 nettle_armor_length_func *decode_length;
176 nettle_armor_decode_update_func *decode_update;
177 nettle_armor_decode_final_func *decode_final;
180 #define _NETTLE_ARMOR(name, NAME) { \
182 sizeof(struct name##_encode_ctx), \
183 sizeof(struct name##_decode_ctx), \
184 NAME##_ENCODE_FINAL_LENGTH, \
185 (nettle_armor_init_func *) name##_encode_init, \
186 (nettle_armor_length_func *) name##_encode_length, \
187 (nettle_armor_encode_update_func *) name##_encode_update, \
188 (nettle_armor_encode_final_func *) name##_encode_final, \
189 (nettle_armor_init_func *) name##_decode_init, \
190 (nettle_armor_length_func *) name##_decode_length, \
191 (nettle_armor_decode_update_func *) name##_decode_update, \
192 (nettle_armor_decode_final_func *) name##_decode_final, \
195 #define _NETTLE_ARMOR_0(name, NAME) { \
198 sizeof(struct name##_decode_ctx), \
199 NAME##_ENCODE_FINAL_LENGTH, \
200 (nettle_armor_init_func *) name##_encode_init, \
201 (nettle_armor_length_func *) name##_encode_length, \
202 (nettle_armor_encode_update_func *) name##_encode_update, \
203 (nettle_armor_encode_final_func *) name##_encode_final, \
204 (nettle_armor_init_func *) name##_decode_init, \
205 (nettle_armor_length_func *) name##_decode_length, \
206 (nettle_armor_decode_update_func *) name##_decode_update, \
207 (nettle_armor_decode_final_func *) name##_decode_final, \
210 extern const struct nettle_armor nettle_base64;
211 extern const struct nettle_armor nettle_base16;
217 #endif /* NETTLE_META_H_INCLUDED */