xform.c revision 1.13.4.6 1 1.13.4.6 christos /* $NetBSD: xform.c,v 1.13.4.6 2005/12/11 10:29:36 christos Exp $ */
2 1.13.4.2 skrll /* $FreeBSD: src/sys/opencrypto/xform.c,v 1.1.2.1 2002/11/21 23:34:23 sam Exp $ */
3 1.13.4.2 skrll /* $OpenBSD: xform.c,v 1.19 2002/08/16 22:47:25 dhartmei Exp $ */
4 1.13.4.2 skrll
5 1.13.4.2 skrll /*
6 1.13.4.2 skrll * The authors of this code are John Ioannidis (ji (at) tla.org),
7 1.13.4.2 skrll * Angelos D. Keromytis (kermit (at) csd.uch.gr) and
8 1.13.4.2 skrll * Niels Provos (provos (at) physnet.uni-hamburg.de).
9 1.13.4.2 skrll *
10 1.13.4.2 skrll * This code was written by John Ioannidis for BSD/OS in Athens, Greece,
11 1.13.4.2 skrll * in November 1995.
12 1.13.4.2 skrll *
13 1.13.4.2 skrll * Ported to OpenBSD and NetBSD, with additional transforms, in December 1996,
14 1.13.4.2 skrll * by Angelos D. Keromytis.
15 1.13.4.2 skrll *
16 1.13.4.2 skrll * Additional transforms and features in 1997 and 1998 by Angelos D. Keromytis
17 1.13.4.2 skrll * and Niels Provos.
18 1.13.4.2 skrll *
19 1.13.4.2 skrll * Additional features in 1999 by Angelos D. Keromytis.
20 1.13.4.2 skrll *
21 1.13.4.2 skrll * Copyright (C) 1995, 1996, 1997, 1998, 1999 by John Ioannidis,
22 1.13.4.2 skrll * Angelos D. Keromytis and Niels Provos.
23 1.13.4.2 skrll *
24 1.13.4.2 skrll * Copyright (C) 2001, Angelos D. Keromytis.
25 1.13.4.2 skrll *
26 1.13.4.2 skrll * Permission to use, copy, and modify this software with or without fee
27 1.13.4.2 skrll * is hereby granted, provided that this entire notice is included in
28 1.13.4.2 skrll * all copies of any software which is or includes a copy or
29 1.13.4.2 skrll * modification of this software.
30 1.13.4.2 skrll * You may use this code under the GNU public license if you so wish. Please
31 1.13.4.2 skrll * contribute changes back to the authors under this freer than GPL license
32 1.13.4.2 skrll * so that we may further the use of strong encryption without limitations to
33 1.13.4.2 skrll * all.
34 1.13.4.2 skrll *
35 1.13.4.2 skrll * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR
36 1.13.4.2 skrll * IMPLIED WARRANTY. IN PARTICULAR, NONE OF THE AUTHORS MAKES ANY
37 1.13.4.2 skrll * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE
38 1.13.4.2 skrll * MERCHANTABILITY OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR
39 1.13.4.2 skrll * PURPOSE.
40 1.13.4.2 skrll */
41 1.13.4.2 skrll
42 1.13.4.2 skrll #include <sys/cdefs.h>
43 1.13.4.6 christos __KERNEL_RCSID(0, "$NetBSD: xform.c,v 1.13.4.6 2005/12/11 10:29:36 christos Exp $");
44 1.13.4.2 skrll
45 1.13.4.2 skrll #include <sys/param.h>
46 1.13.4.2 skrll #include <sys/malloc.h>
47 1.13.4.2 skrll
48 1.13.4.2 skrll #include <opencrypto/cryptodev.h>
49 1.13.4.2 skrll #include <opencrypto/xform.h>
50 1.13.4.2 skrll
51 1.13.4.2 skrll MALLOC_DEFINE(M_XDATA, "xform", "xform data buffers");
52 1.13.4.2 skrll
53 1.13.4.6 christos const u_int8_t hmac_ipad_buffer[64] = {
54 1.13.4.6 christos 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
55 1.13.4.6 christos 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
56 1.13.4.6 christos 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
57 1.13.4.6 christos 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
58 1.13.4.6 christos 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
59 1.13.4.6 christos 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
60 1.13.4.6 christos 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
61 1.13.4.6 christos 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36
62 1.13.4.6 christos };
63 1.13.4.6 christos
64 1.13.4.6 christos const u_int8_t hmac_opad_buffer[64] = {
65 1.13.4.6 christos 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C,
66 1.13.4.6 christos 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C,
67 1.13.4.6 christos 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C,
68 1.13.4.6 christos 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C,
69 1.13.4.6 christos 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C,
70 1.13.4.6 christos 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C,
71 1.13.4.6 christos 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C,
72 1.13.4.6 christos 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C
73 1.13.4.6 christos };
74 1.13.4.6 christos
75 1.13.4.2 skrll /* Encryption instances */
76 1.13.4.2 skrll struct enc_xform enc_xform_null = {
77 1.13.4.2 skrll CRYPTO_NULL_CBC, "NULL",
78 1.13.4.2 skrll /* NB: blocksize of 4 is to generate a properly aligned ESP header */
79 1.13.4.6 christos 4, 0, 256 /* 2048 bits, max key */
80 1.13.4.2 skrll };
81 1.13.4.2 skrll
82 1.13.4.2 skrll struct enc_xform enc_xform_des = {
83 1.13.4.2 skrll CRYPTO_DES_CBC, "DES",
84 1.13.4.6 christos 8, 8, 8
85 1.13.4.2 skrll };
86 1.13.4.2 skrll
87 1.13.4.2 skrll struct enc_xform enc_xform_3des = {
88 1.13.4.2 skrll CRYPTO_3DES_CBC, "3DES",
89 1.13.4.6 christos 8, 24, 24
90 1.13.4.2 skrll };
91 1.13.4.2 skrll
92 1.13.4.2 skrll struct enc_xform enc_xform_blf = {
93 1.13.4.2 skrll CRYPTO_BLF_CBC, "Blowfish",
94 1.13.4.6 christos 8, 5, 56 /* 448 bits, max key */
95 1.13.4.2 skrll };
96 1.13.4.2 skrll
97 1.13.4.2 skrll struct enc_xform enc_xform_cast5 = {
98 1.13.4.2 skrll CRYPTO_CAST_CBC, "CAST-128",
99 1.13.4.6 christos 8, 5, 16
100 1.13.4.2 skrll };
101 1.13.4.2 skrll
102 1.13.4.2 skrll struct enc_xform enc_xform_skipjack = {
103 1.13.4.2 skrll CRYPTO_SKIPJACK_CBC, "Skipjack",
104 1.13.4.6 christos 8, 10, 10
105 1.13.4.2 skrll };
106 1.13.4.2 skrll
107 1.13.4.2 skrll struct enc_xform enc_xform_rijndael128 = {
108 1.13.4.2 skrll CRYPTO_RIJNDAEL128_CBC, "Rijndael-128/AES",
109 1.13.4.6 christos 16, 8, 32
110 1.13.4.2 skrll };
111 1.13.4.2 skrll
112 1.13.4.2 skrll struct enc_xform enc_xform_arc4 = {
113 1.13.4.2 skrll CRYPTO_ARC4, "ARC4",
114 1.13.4.6 christos 1, 1, 32
115 1.13.4.2 skrll };
116 1.13.4.2 skrll
117 1.13.4.2 skrll /* Authentication instances */
118 1.13.4.2 skrll struct auth_hash auth_hash_null = {
119 1.13.4.2 skrll CRYPTO_NULL_HMAC, "NULL-HMAC",
120 1.13.4.6 christos 0, 0, 12, sizeof(int) /* NB: context isn't used */
121 1.13.4.2 skrll };
122 1.13.4.2 skrll
123 1.13.4.2 skrll struct auth_hash auth_hash_hmac_md5_96 = {
124 1.13.4.2 skrll CRYPTO_MD5_HMAC, "HMAC-MD5",
125 1.13.4.6 christos 16, 16, 12, sizeof(MD5_CTX)
126 1.13.4.2 skrll };
127 1.13.4.2 skrll
128 1.13.4.2 skrll struct auth_hash auth_hash_hmac_sha1_96 = {
129 1.13.4.2 skrll CRYPTO_SHA1_HMAC, "HMAC-SHA1",
130 1.13.4.6 christos 20, 20, 12, sizeof(SHA1_CTX)
131 1.13.4.2 skrll };
132 1.13.4.2 skrll
133 1.13.4.2 skrll struct auth_hash auth_hash_hmac_ripemd_160_96 = {
134 1.13.4.2 skrll CRYPTO_RIPEMD160_HMAC, "HMAC-RIPEMD-160",
135 1.13.4.6 christos 20, 20, 12, sizeof(RMD160_CTX)
136 1.13.4.2 skrll };
137 1.13.4.2 skrll
138 1.13.4.2 skrll struct auth_hash auth_hash_key_md5 = {
139 1.13.4.2 skrll CRYPTO_MD5_KPDK, "Keyed MD5",
140 1.13.4.6 christos 0, 16, 16, sizeof(MD5_CTX)
141 1.13.4.2 skrll };
142 1.13.4.2 skrll
143 1.13.4.2 skrll struct auth_hash auth_hash_key_sha1 = {
144 1.13.4.2 skrll CRYPTO_SHA1_KPDK, "Keyed SHA1",
145 1.13.4.6 christos 0, 20, 20, sizeof(SHA1_CTX)
146 1.13.4.2 skrll };
147 1.13.4.2 skrll
148 1.13.4.2 skrll struct auth_hash auth_hash_md5 = {
149 1.13.4.2 skrll CRYPTO_MD5, "MD5",
150 1.13.4.6 christos 0, 16, 16, sizeof(MD5_CTX)
151 1.13.4.2 skrll };
152 1.13.4.2 skrll
153 1.13.4.2 skrll struct auth_hash auth_hash_sha1 = {
154 1.13.4.2 skrll CRYPTO_SHA1, "SHA1",
155 1.13.4.6 christos 0, 20, 20, sizeof(SHA1_CTX)
156 1.13.4.2 skrll };
157 1.13.4.2 skrll
158 1.13.4.2 skrll struct auth_hash auth_hash_hmac_sha2_256 = {
159 1.13.4.2 skrll CRYPTO_SHA2_HMAC, "HMAC-SHA2",
160 1.13.4.6 christos 32, 32, 12, sizeof(SHA256_CTX)
161 1.13.4.2 skrll };
162 1.13.4.2 skrll
163 1.13.4.2 skrll struct auth_hash auth_hash_hmac_sha2_384 = {
164 1.13.4.2 skrll CRYPTO_SHA2_HMAC, "HMAC-SHA2-384",
165 1.13.4.6 christos 48, 48, 12, sizeof(SHA384_CTX)
166 1.13.4.2 skrll };
167 1.13.4.2 skrll
168 1.13.4.2 skrll struct auth_hash auth_hash_hmac_sha2_512 = {
169 1.13.4.2 skrll CRYPTO_SHA2_HMAC, "HMAC-SHA2-512",
170 1.13.4.6 christos 64, 64, 12, sizeof(SHA512_CTX)
171 1.13.4.2 skrll };
172 1.13.4.2 skrll
173 1.13.4.2 skrll /* Compression instance */
174 1.13.4.2 skrll struct comp_algo comp_algo_deflate = {
175 1.13.4.2 skrll CRYPTO_DEFLATE_COMP, "Deflate",
176 1.13.4.6 christos 90
177 1.13.4.2 skrll };
178