xref: /netbsd-src/sys/opencrypto/xform.c (revision 5766dd4aa902322536f6f3bcd620196daf5b34cb)
1*5766dd4aSriastradh /*	$NetBSD: xform.c,v 1.31 2020/06/30 04:14:56 riastradh Exp $ */
2cdfce9ceSjonathan /*	$FreeBSD: src/sys/opencrypto/xform.c,v 1.1.2.1 2002/11/21 23:34:23 sam Exp $	*/
3cdfce9ceSjonathan /*	$OpenBSD: xform.c,v 1.19 2002/08/16 22:47:25 dhartmei Exp $	*/
4cdfce9ceSjonathan 
5cdfce9ceSjonathan /*
6cdfce9ceSjonathan  * The authors of this code are John Ioannidis (ji@tla.org),
7cdfce9ceSjonathan  * Angelos D. Keromytis (kermit@csd.uch.gr) and
8cdfce9ceSjonathan  * Niels Provos (provos@physnet.uni-hamburg.de).
9cdfce9ceSjonathan  *
10cdfce9ceSjonathan  * This code was written by John Ioannidis for BSD/OS in Athens, Greece,
11cdfce9ceSjonathan  * in November 1995.
12cdfce9ceSjonathan  *
13cdfce9ceSjonathan  * Ported to OpenBSD and NetBSD, with additional transforms, in December 1996,
14cdfce9ceSjonathan  * by Angelos D. Keromytis.
15cdfce9ceSjonathan  *
16cdfce9ceSjonathan  * Additional transforms and features in 1997 and 1998 by Angelos D. Keromytis
17cdfce9ceSjonathan  * and Niels Provos.
18cdfce9ceSjonathan  *
19cdfce9ceSjonathan  * Additional features in 1999 by Angelos D. Keromytis.
20cdfce9ceSjonathan  *
21cdfce9ceSjonathan  * Copyright (C) 1995, 1996, 1997, 1998, 1999 by John Ioannidis,
22cdfce9ceSjonathan  * Angelos D. Keromytis and Niels Provos.
23cdfce9ceSjonathan  *
24cdfce9ceSjonathan  * Copyright (C) 2001, Angelos D. Keromytis.
25cdfce9ceSjonathan  *
26cdfce9ceSjonathan  * Permission to use, copy, and modify this software with or without fee
27cdfce9ceSjonathan  * is hereby granted, provided that this entire notice is included in
28cdfce9ceSjonathan  * all copies of any software which is or includes a copy or
29cdfce9ceSjonathan  * modification of this software.
30cdfce9ceSjonathan  * You may use this code under the GNU public license if you so wish. Please
31cdfce9ceSjonathan  * contribute changes back to the authors under this freer than GPL license
32cdfce9ceSjonathan  * so that we may further the use of strong encryption without limitations to
33cdfce9ceSjonathan  * all.
34cdfce9ceSjonathan  *
35cdfce9ceSjonathan  * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR
36cdfce9ceSjonathan  * IMPLIED WARRANTY. IN PARTICULAR, NONE OF THE AUTHORS MAKES ANY
37cdfce9ceSjonathan  * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE
38cdfce9ceSjonathan  * MERCHANTABILITY OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR
39cdfce9ceSjonathan  * PURPOSE.
40cdfce9ceSjonathan  */
41cdfce9ceSjonathan 
42cdfce9ceSjonathan #include <sys/cdefs.h>
43*5766dd4aSriastradh __KERNEL_RCSID(0, "$NetBSD: xform.c,v 1.31 2020/06/30 04:14:56 riastradh Exp $");
44cdfce9ceSjonathan 
45cdfce9ceSjonathan #include <sys/param.h>
46cdfce9ceSjonathan #include <sys/malloc.h>
47cdfce9ceSjonathan 
48cdfce9ceSjonathan #include <opencrypto/cryptodev.h>
49cdfce9ceSjonathan #include <opencrypto/xform.h>
50cdfce9ceSjonathan 
51cdfce9ceSjonathan MALLOC_DEFINE(M_XDATA, "xform", "xform data buffers");
52cdfce9ceSjonathan 
53b4da53f1Sdrochner const u_int8_t hmac_ipad_buffer[128] = {
54b4da53f1Sdrochner 	0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
55b4da53f1Sdrochner 	0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
56b4da53f1Sdrochner 	0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
57b4da53f1Sdrochner 	0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
58b4da53f1Sdrochner 	0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
59b4da53f1Sdrochner 	0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
60b4da53f1Sdrochner 	0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
61b4da53f1Sdrochner 	0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
627bc6d90cSthorpej 	0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
637bc6d90cSthorpej 	0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
647bc6d90cSthorpej 	0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
657bc6d90cSthorpej 	0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
667bc6d90cSthorpej 	0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
677bc6d90cSthorpej 	0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
687bc6d90cSthorpej 	0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
697bc6d90cSthorpej 	0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36
707bc6d90cSthorpej };
717bc6d90cSthorpej 
72b4da53f1Sdrochner const u_int8_t hmac_opad_buffer[128] = {
73b4da53f1Sdrochner 	0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C,
74b4da53f1Sdrochner 	0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C,
75b4da53f1Sdrochner 	0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C,
76b4da53f1Sdrochner 	0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C,
77b4da53f1Sdrochner 	0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C,
78b4da53f1Sdrochner 	0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C,
79b4da53f1Sdrochner 	0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C,
80b4da53f1Sdrochner 	0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C,
817bc6d90cSthorpej 	0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C,
827bc6d90cSthorpej 	0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C,
837bc6d90cSthorpej 	0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C,
847bc6d90cSthorpej 	0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C,
857bc6d90cSthorpej 	0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C,
867bc6d90cSthorpej 	0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C,
877bc6d90cSthorpej 	0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C,
887bc6d90cSthorpej 	0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C
897bc6d90cSthorpej };
907bc6d90cSthorpej 
91cdfce9ceSjonathan /* Encryption instances */
925321a735Sdrochner const struct enc_xform enc_xform_null = {
938e371e73Sozaki-r 	.type		= CRYPTO_NULL_CBC,
948e371e73Sozaki-r 	.name		= "NULL",
95cdfce9ceSjonathan 	/* NB: blocksize of 4 is to generate a properly aligned ESP header */
968e371e73Sozaki-r 	.blocksize	= 4,
978e371e73Sozaki-r 	.ivsize		= 0,
988e371e73Sozaki-r 	.minkey		= 0,
998e371e73Sozaki-r 	.maxkey		= 256, /* 2048 bits, max key */
100cdfce9ceSjonathan };
101cdfce9ceSjonathan 
1025321a735Sdrochner const struct enc_xform enc_xform_des = {
1038e371e73Sozaki-r 	.type		= CRYPTO_DES_CBC,
1048e371e73Sozaki-r 	.name		= "DES",
1058e371e73Sozaki-r 	.blocksize	= 8,
1068e371e73Sozaki-r 	.ivsize		= 8,
1078e371e73Sozaki-r 	.minkey		= 8,
1088e371e73Sozaki-r 	.maxkey		= 8,
109cdfce9ceSjonathan };
110cdfce9ceSjonathan 
1115321a735Sdrochner const struct enc_xform enc_xform_3des = {
1128e371e73Sozaki-r 	.type		= CRYPTO_3DES_CBC,
1138e371e73Sozaki-r 	.name		= "3DES",
1148e371e73Sozaki-r 	.blocksize	= 8,
1158e371e73Sozaki-r 	.ivsize		= 8,
1168e371e73Sozaki-r 	.minkey		= 24,
1178e371e73Sozaki-r 	.maxkey		= 24,
118cdfce9ceSjonathan };
119cdfce9ceSjonathan 
1205321a735Sdrochner const struct enc_xform enc_xform_blf = {
1218e371e73Sozaki-r 	.type		= CRYPTO_BLF_CBC,
1228e371e73Sozaki-r 	.name		= "Blowfish",
1238e371e73Sozaki-r 	.blocksize	= 8,
1248e371e73Sozaki-r 	.ivsize		= 8,
1258e371e73Sozaki-r 	.minkey		= 5,
1268e371e73Sozaki-r 	.maxkey		= 56, /* 448 bits, max key */
127cdfce9ceSjonathan };
128cdfce9ceSjonathan 
1295321a735Sdrochner const struct enc_xform enc_xform_cast5 = {
1308e371e73Sozaki-r 	.type		= CRYPTO_CAST_CBC,
1318e371e73Sozaki-r 	.name		= "CAST-128",
1328e371e73Sozaki-r 	.blocksize	= 8,
1338e371e73Sozaki-r 	.ivsize		= 8,
1348e371e73Sozaki-r 	.minkey		= 5,
1358e371e73Sozaki-r 	.maxkey		= 16,
136cdfce9ceSjonathan };
137cdfce9ceSjonathan 
1385321a735Sdrochner const struct enc_xform enc_xform_skipjack = {
1398e371e73Sozaki-r 	.type		= CRYPTO_SKIPJACK_CBC,
1408e371e73Sozaki-r 	.name		= "Skipjack",
1418e371e73Sozaki-r 	.blocksize	= 8,
1428e371e73Sozaki-r 	.ivsize		= 8,
1438e371e73Sozaki-r 	.minkey		= 10,
1448e371e73Sozaki-r 	.maxkey		= 10,
145cdfce9ceSjonathan };
146cdfce9ceSjonathan 
147*5766dd4aSriastradh const struct enc_xform enc_xform_aes = {
1488835ffd0Sriastradh 	.type		= CRYPTO_AES_CBC,
1498835ffd0Sriastradh 	.name		= "AES",
1508e371e73Sozaki-r 	.blocksize	= 16,
1518e371e73Sozaki-r 	.ivsize		= 16,
1528e371e73Sozaki-r 	.minkey		= 16,
1538e371e73Sozaki-r 	.maxkey		= 32,
154cdfce9ceSjonathan };
155cdfce9ceSjonathan 
1565321a735Sdrochner const struct enc_xform enc_xform_arc4 = {
1578e371e73Sozaki-r 	.type		= CRYPTO_ARC4,
1588e371e73Sozaki-r 	.name		= "ARC4",
1598e371e73Sozaki-r 	.blocksize	= 1,
1608e371e73Sozaki-r 	.ivsize		= 0,
1618e371e73Sozaki-r 	.minkey		= 1,
1628e371e73Sozaki-r 	.maxkey		= 32,
163cdfce9ceSjonathan };
164cdfce9ceSjonathan 
165eb321d71Sdrochner const struct enc_xform enc_xform_camellia = {
1668e371e73Sozaki-r 	.type		= CRYPTO_CAMELLIA_CBC,
1678e371e73Sozaki-r 	.name		= "Camellia",
1688e371e73Sozaki-r 	.blocksize	= 16,
1698e371e73Sozaki-r 	.ivsize		= 16,
1708e371e73Sozaki-r 	.minkey		= 8,
1718e371e73Sozaki-r 	.maxkey		= 32,
172eb321d71Sdrochner };
173eb321d71Sdrochner 
1743e66cf48Sdrochner const struct enc_xform enc_xform_aes_ctr = {
1758e371e73Sozaki-r 	.type		= CRYPTO_AES_CTR,
1768e371e73Sozaki-r 	.name		= "AES-CTR",
1778e371e73Sozaki-r 	.blocksize	= 16,
1788e371e73Sozaki-r 	.ivsize		= 8,
1798e371e73Sozaki-r 	.minkey		= 16 + 4,
1808e371e73Sozaki-r 	.maxkey		= 32 + 4,
1813e66cf48Sdrochner };
1823e66cf48Sdrochner 
1830a8dabdaSdrochner const struct enc_xform enc_xform_aes_gcm = {
1848e371e73Sozaki-r 	.type		= CRYPTO_AES_GCM_16,
1858e371e73Sozaki-r 	.name		= "AES-GCM",
1868e371e73Sozaki-r 	.blocksize	= 4, /* ??? */
1878e371e73Sozaki-r 	.ivsize		= 8,
1888e371e73Sozaki-r 	.minkey		= 16 + 4,
1898e371e73Sozaki-r 	.maxkey		= 32 + 4,
1900a8dabdaSdrochner };
1910a8dabdaSdrochner 
1920a8dabdaSdrochner const struct enc_xform enc_xform_aes_gmac = {
1938e371e73Sozaki-r 	.type		= CRYPTO_AES_GMAC,
1948e371e73Sozaki-r 	.name		= "AES-GMAC",
1958e371e73Sozaki-r 	.blocksize	= 4, /* ??? */
1968e371e73Sozaki-r 	.ivsize		= 8,
1978e371e73Sozaki-r 	.minkey		= 16 + 4,
1988e371e73Sozaki-r 	.maxkey		= 32 + 4,
1990a8dabdaSdrochner };
2000a8dabdaSdrochner 
201cdfce9ceSjonathan /* Authentication instances */
2025321a735Sdrochner const struct auth_hash auth_hash_null = {
2038e371e73Sozaki-r 	.type		= CRYPTO_NULL_HMAC,
2048e371e73Sozaki-r 	.name		= "NULL-HMAC",
2058e371e73Sozaki-r 	.keysize	= 0,
2068e371e73Sozaki-r 	.hashsize	= 0,
2078e371e73Sozaki-r 	.authsize	= 12,
2088e371e73Sozaki-r 	.blocksize	= 64,
209cdfce9ceSjonathan };
210cdfce9ceSjonathan 
2115321a735Sdrochner const struct auth_hash auth_hash_hmac_md5 = {
2128e371e73Sozaki-r 	.type		= CRYPTO_MD5_HMAC,
2138e371e73Sozaki-r 	.name		= "HMAC-MD5",
2148e371e73Sozaki-r 	.keysize	= 16,
2158e371e73Sozaki-r 	.hashsize	= 16,
2168e371e73Sozaki-r 	.authsize	= 16,
2178e371e73Sozaki-r 	.blocksize	= 64,
2189b6c682bStls };
2199b6c682bStls 
2205321a735Sdrochner const struct auth_hash auth_hash_hmac_sha1 = {
2218e371e73Sozaki-r 	.type		= CRYPTO_SHA1_HMAC,
2228e371e73Sozaki-r 	.name		= "HMAC-SHA1",
2238e371e73Sozaki-r 	.keysize	= 20,
2248e371e73Sozaki-r 	.hashsize	= 20,
2258e371e73Sozaki-r 	.authsize	= 20,
2268e371e73Sozaki-r 	.blocksize	= 64,
2279b6c682bStls };
2289b6c682bStls 
2295321a735Sdrochner const struct auth_hash auth_hash_hmac_ripemd_160 = {
2308e371e73Sozaki-r 	.type		= CRYPTO_RIPEMD160_HMAC,
2318e371e73Sozaki-r 	.name		= "HMAC-RIPEMD-160",
2328e371e73Sozaki-r 	.keysize	= 20,
2338e371e73Sozaki-r 	.hashsize	= 20,
2348e371e73Sozaki-r 	.authsize	= 20,
2358e371e73Sozaki-r 	.blocksize	= 64,
2369b6c682bStls };
2379b6c682bStls 
2385321a735Sdrochner const struct auth_hash auth_hash_hmac_md5_96 = {
2398e371e73Sozaki-r 	.type		= CRYPTO_MD5_HMAC_96,
2408e371e73Sozaki-r 	.name		= "HMAC-MD5-96",
2418e371e73Sozaki-r 	.keysize	= 16,
2428e371e73Sozaki-r 	.hashsize	= 16,
2438e371e73Sozaki-r 	.authsize	= 12,
2448e371e73Sozaki-r 	.blocksize	= 64,
245cdfce9ceSjonathan };
246cdfce9ceSjonathan 
2475321a735Sdrochner const struct auth_hash auth_hash_hmac_sha1_96 = {
2488e371e73Sozaki-r 	.type		= CRYPTO_SHA1_HMAC_96,
2498e371e73Sozaki-r 	.name		= "HMAC-SHA1-96",
2508e371e73Sozaki-r 	.keysize	= 20,
2518e371e73Sozaki-r 	.hashsize	= 20,
2528e371e73Sozaki-r 	.authsize	= 12,
2538e371e73Sozaki-r 	.blocksize	= 64,
254cdfce9ceSjonathan };
255cdfce9ceSjonathan 
2565321a735Sdrochner const struct auth_hash auth_hash_hmac_ripemd_160_96 = {
2578e371e73Sozaki-r 	.type		= CRYPTO_RIPEMD160_HMAC_96,
2588e371e73Sozaki-r 	.name		= "HMAC-RIPEMD-160",
2598e371e73Sozaki-r 	.keysize	= 20,
2608e371e73Sozaki-r 	.hashsize	= 20,
2618e371e73Sozaki-r 	.authsize	= 12,
2628e371e73Sozaki-r 	.blocksize	= 64,
263cdfce9ceSjonathan };
264cdfce9ceSjonathan 
2655321a735Sdrochner const struct auth_hash auth_hash_key_md5 = {
2668e371e73Sozaki-r 	.type		= CRYPTO_MD5_KPDK,
2678e371e73Sozaki-r 	.name		= "Keyed MD5",
2688e371e73Sozaki-r 	.keysize	= 0,
2698e371e73Sozaki-r 	.hashsize	= 16,
2708e371e73Sozaki-r 	.authsize	= 16,
2718e371e73Sozaki-r 	.blocksize	= 0,
272cdfce9ceSjonathan };
273cdfce9ceSjonathan 
2745321a735Sdrochner const struct auth_hash auth_hash_key_sha1 = {
2758e371e73Sozaki-r 	.type		= CRYPTO_SHA1_KPDK,
2768e371e73Sozaki-r 	.name		= "Keyed SHA1",
2778e371e73Sozaki-r 	.keysize	= 0,
2788e371e73Sozaki-r 	.hashsize	= 20,
2798e371e73Sozaki-r 	.authsize	= 20,
2808e371e73Sozaki-r 	.blocksize	= 0,
281cdfce9ceSjonathan };
282cdfce9ceSjonathan 
2835321a735Sdrochner const struct auth_hash auth_hash_md5 = {
2848e371e73Sozaki-r 	.type		= CRYPTO_MD5,
2858e371e73Sozaki-r 	.name		= "MD5",
2868e371e73Sozaki-r 	.keysize	= 0,
2878e371e73Sozaki-r 	.hashsize	= 16,
2888e371e73Sozaki-r 	.authsize	= 16,
2898e371e73Sozaki-r 	.blocksize	= 0,
290cdfce9ceSjonathan };
291cdfce9ceSjonathan 
2925321a735Sdrochner const struct auth_hash auth_hash_sha1 = {
2938e371e73Sozaki-r 	.type		= CRYPTO_SHA1,
2948e371e73Sozaki-r 	.name		= "SHA1",
2958e371e73Sozaki-r 	.keysize	= 0,
2968e371e73Sozaki-r 	.hashsize	= 20,
2978e371e73Sozaki-r 	.authsize	= 20,
2988e371e73Sozaki-r 	.blocksize	= 0,
299cdfce9ceSjonathan };
300cdfce9ceSjonathan 
3015321a735Sdrochner const struct auth_hash auth_hash_hmac_sha2_256 = {
3028e371e73Sozaki-r 	.type		= CRYPTO_SHA2_256_HMAC,
3038e371e73Sozaki-r 	.name		= "HMAC-SHA2",
3048e371e73Sozaki-r 	.keysize	= 32,
3058e371e73Sozaki-r 	.hashsize	= 32,
3068e371e73Sozaki-r 	.authsize	= 16,
3078e371e73Sozaki-r 	.blocksize	= 64,
308cdfce9ceSjonathan };
309cdfce9ceSjonathan 
3105321a735Sdrochner const struct auth_hash auth_hash_hmac_sha2_384 = {
3118e371e73Sozaki-r 	.type		= CRYPTO_SHA2_384_HMAC,
3128e371e73Sozaki-r 	.name		= "HMAC-SHA2-384",
3138e371e73Sozaki-r 	.keysize	= 48,
3148e371e73Sozaki-r 	.hashsize	= 48,
3158e371e73Sozaki-r 	.authsize	= 24,
3168e371e73Sozaki-r 	.blocksize	= 128,
317cdfce9ceSjonathan };
318cdfce9ceSjonathan 
3195321a735Sdrochner const struct auth_hash auth_hash_hmac_sha2_512 = {
3208e371e73Sozaki-r 	.type		= CRYPTO_SHA2_512_HMAC,
3218e371e73Sozaki-r 	.name		= "HMAC-SHA2-512",
3228e371e73Sozaki-r 	.keysize	= 64,
3238e371e73Sozaki-r 	.hashsize	= 64,
3248e371e73Sozaki-r 	.authsize	= 32,
3258e371e73Sozaki-r 	.blocksize	= 128,
326cdfce9ceSjonathan };
327cdfce9ceSjonathan 
328ebc232a5Sdrochner const struct auth_hash auth_hash_aes_xcbc_mac_96 = {
3298e371e73Sozaki-r 	.type		= CRYPTO_AES_XCBC_MAC_96,
3308e371e73Sozaki-r 	.name		= "AES-XCBC-MAC-96",
3318e371e73Sozaki-r 	.keysize	= 16,
3328e371e73Sozaki-r 	.hashsize	= 16,
3338e371e73Sozaki-r 	.authsize	= 12,
3348e371e73Sozaki-r 	.blocksize	= 0,
335ebc232a5Sdrochner };
336ebc232a5Sdrochner 
3370a8dabdaSdrochner const struct auth_hash auth_hash_gmac_aes_128 = {
3388e371e73Sozaki-r 	.type		= CRYPTO_AES_128_GMAC,
3398e371e73Sozaki-r 	.name		= "GMAC-AES-128",
3408e371e73Sozaki-r 	.keysize	= 16 + 4,
3418e371e73Sozaki-r 	.hashsize	= 16,
3428e371e73Sozaki-r 	.authsize	= 16,
3438e371e73Sozaki-r 	.blocksize	= 16, /* ??? */
3440a8dabdaSdrochner };
3450a8dabdaSdrochner 
3460a8dabdaSdrochner const struct auth_hash auth_hash_gmac_aes_192 = {
3478e371e73Sozaki-r 	.type		= CRYPTO_AES_192_GMAC,
3488e371e73Sozaki-r 	.name		= "GMAC-AES-192",
3498e371e73Sozaki-r 	.keysize	= 24 + 4,
3508e371e73Sozaki-r 	.hashsize	= 16,
3518e371e73Sozaki-r 	.authsize	= 16,
3528e371e73Sozaki-r 	.blocksize	= 16, /* ??? */
3530a8dabdaSdrochner };
3540a8dabdaSdrochner 
3550a8dabdaSdrochner const struct auth_hash auth_hash_gmac_aes_256 = {
3568e371e73Sozaki-r 	.type		= CRYPTO_AES_256_GMAC,
3578e371e73Sozaki-r 	.name		= "GMAC-AES-256",
3588e371e73Sozaki-r 	.keysize	= 32 + 4,
3598e371e73Sozaki-r 	.hashsize	= 16,
3608e371e73Sozaki-r 	.authsize	= 16,
3618e371e73Sozaki-r 	.blocksize	= 16, /* ??? */
3620a8dabdaSdrochner };
3630a8dabdaSdrochner 
364cdfce9ceSjonathan /* Compression instance */
3655321a735Sdrochner const struct comp_algo comp_algo_deflate = {
3668e371e73Sozaki-r 	.type	= CRYPTO_DEFLATE_COMP,
3678e371e73Sozaki-r 	.name	= "Deflate",
3688e371e73Sozaki-r 	.minlen	= 90,
369cdfce9ceSjonathan };
37036ea3668Sdarran 
3715321a735Sdrochner const struct comp_algo comp_algo_deflate_nogrow = {
3728e371e73Sozaki-r 	.type	= CRYPTO_DEFLATE_COMP_NOGROW,
3738e371e73Sozaki-r 	.name	= "Deflate",
3748e371e73Sozaki-r 	.minlen	= 90,
3751caa9a52Sdrochner };
3761caa9a52Sdrochner 
3775321a735Sdrochner const struct comp_algo comp_algo_gzip = {
3788e371e73Sozaki-r 	.type	= CRYPTO_GZIP_COMP,
3798e371e73Sozaki-r 	.name	= "GZIP",
3808e371e73Sozaki-r 	.minlen	= 90,
38136ea3668Sdarran };
382