]> git.ipfire.org Git - thirdparty/openssl.git/blob - crypto/des/destest.c
"#if 0" removal: header files
[thirdparty/openssl.git] / crypto / des / destest.c
1 /* crypto/des/destest.c */
2 /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved.
4 *
5 * This package is an SSL implementation written
6 * by Eric Young (eay@cryptsoft.com).
7 * The implementation was written so as to conform with Netscapes SSL.
8 *
9 * This library is free for commercial and non-commercial use as long as
10 * the following conditions are aheared to. The following conditions
11 * apply to all code found in this distribution, be it the RC4, RSA,
12 * lhash, DES, etc., code; not just the SSL code. The SSL documentation
13 * included with this distribution is covered by the same copyright terms
14 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15 *
16 * Copyright remains Eric Young's, and as such any Copyright notices in
17 * the code are not to be removed.
18 * If this package is used in a product, Eric Young should be given attribution
19 * as the author of the parts of the library used.
20 * This can be in the form of a textual message at program startup or
21 * in documentation (online or textual) provided with the package.
22 *
23 * Redistribution and use in source and binary forms, with or without
24 * modification, are permitted provided that the following conditions
25 * are met:
26 * 1. Redistributions of source code must retain the copyright
27 * notice, this list of conditions and the following disclaimer.
28 * 2. Redistributions in binary form must reproduce the above copyright
29 * notice, this list of conditions and the following disclaimer in the
30 * documentation and/or other materials provided with the distribution.
31 * 3. All advertising materials mentioning features or use of this software
32 * must display the following acknowledgement:
33 * "This product includes cryptographic software written by
34 * Eric Young (eay@cryptsoft.com)"
35 * The word 'cryptographic' can be left out if the rouines from the library
36 * being used are not cryptographic related :-).
37 * 4. If you include any Windows specific code (or a derivative thereof) from
38 * the apps directory (application code) you must include an acknowledgement:
39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40 *
41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
45 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
47 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51 * SUCH DAMAGE.
52 *
53 * The licence and distribution terms for any publically available version or
54 * derivative of this code cannot be changed. i.e. this code cannot simply be
55 * copied and put under another distribution licence
56 * [including the GNU Public Licence.]
57 */
58
59 #include <stdio.h>
60 #include <stdlib.h>
61
62 #include <openssl/e_os2.h>
63 #if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_WINDOWS)
64 # ifndef OPENSSL_SYS_MSDOS
65 # define OPENSSL_SYS_MSDOS
66 # endif
67 #endif
68
69 #ifndef OPENSSL_SYS_MSDOS
70 # if !defined(OPENSSL_SYS_VMS) || defined(OPENSSL_SYS_VMS_DECC)
71 # include OPENSSL_UNISTD
72 # endif
73 #else
74 # include <io.h>
75 #endif
76 #include <string.h>
77
78 #ifdef OPENSSL_NO_DES
79 int main(int argc, char *argv[])
80 {
81 printf("No DES support\n");
82 return (0);
83 }
84 #else
85 # include <openssl/des.h>
86
87 # define crypt(c,s) (DES_crypt((c),(s)))
88
89 /* tisk tisk - the test keys don't all have odd parity :-( */
90 /* test data */
91 # define NUM_TESTS 34
92 static unsigned char key_data[NUM_TESTS][8] = {
93 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
94 {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
95 {0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
96 {0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11},
97 {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF},
98 {0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11},
99 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
100 {0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10},
101 {0x7C, 0xA1, 0x10, 0x45, 0x4A, 0x1A, 0x6E, 0x57},
102 {0x01, 0x31, 0xD9, 0x61, 0x9D, 0xC1, 0x37, 0x6E},
103 {0x07, 0xA1, 0x13, 0x3E, 0x4A, 0x0B, 0x26, 0x86},
104 {0x38, 0x49, 0x67, 0x4C, 0x26, 0x02, 0x31, 0x9E},
105 {0x04, 0xB9, 0x15, 0xBA, 0x43, 0xFE, 0xB5, 0xB6},
106 {0x01, 0x13, 0xB9, 0x70, 0xFD, 0x34, 0xF2, 0xCE},
107 {0x01, 0x70, 0xF1, 0x75, 0x46, 0x8F, 0xB5, 0xE6},
108 {0x43, 0x29, 0x7F, 0xAD, 0x38, 0xE3, 0x73, 0xFE},
109 {0x07, 0xA7, 0x13, 0x70, 0x45, 0xDA, 0x2A, 0x16},
110 {0x04, 0x68, 0x91, 0x04, 0xC2, 0xFD, 0x3B, 0x2F},
111 {0x37, 0xD0, 0x6B, 0xB5, 0x16, 0xCB, 0x75, 0x46},
112 {0x1F, 0x08, 0x26, 0x0D, 0x1A, 0xC2, 0x46, 0x5E},
113 {0x58, 0x40, 0x23, 0x64, 0x1A, 0xBA, 0x61, 0x76},
114 {0x02, 0x58, 0x16, 0x16, 0x46, 0x29, 0xB0, 0x07},
115 {0x49, 0x79, 0x3E, 0xBC, 0x79, 0xB3, 0x25, 0x8F},
116 {0x4F, 0xB0, 0x5E, 0x15, 0x15, 0xAB, 0x73, 0xA7},
117 {0x49, 0xE9, 0x5D, 0x6D, 0x4C, 0xA2, 0x29, 0xBF},
118 {0x01, 0x83, 0x10, 0xDC, 0x40, 0x9B, 0x26, 0xD6},
119 {0x1C, 0x58, 0x7F, 0x1C, 0x13, 0x92, 0x4F, 0xEF},
120 {0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01},
121 {0x1F, 0x1F, 0x1F, 0x1F, 0x0E, 0x0E, 0x0E, 0x0E},
122 {0xE0, 0xFE, 0xE0, 0xFE, 0xF1, 0xFE, 0xF1, 0xFE},
123 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
124 {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
125 {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF},
126 {0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10}
127 };
128
129 static unsigned char plain_data[NUM_TESTS][8] = {
130 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
131 {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
132 {0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01},
133 {0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11},
134 {0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11},
135 {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF},
136 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
137 {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF},
138 {0x01, 0xA1, 0xD6, 0xD0, 0x39, 0x77, 0x67, 0x42},
139 {0x5C, 0xD5, 0x4C, 0xA8, 0x3D, 0xEF, 0x57, 0xDA},
140 {0x02, 0x48, 0xD4, 0x38, 0x06, 0xF6, 0x71, 0x72},
141 {0x51, 0x45, 0x4B, 0x58, 0x2D, 0xDF, 0x44, 0x0A},
142 {0x42, 0xFD, 0x44, 0x30, 0x59, 0x57, 0x7F, 0xA2},
143 {0x05, 0x9B, 0x5E, 0x08, 0x51, 0xCF, 0x14, 0x3A},
144 {0x07, 0x56, 0xD8, 0xE0, 0x77, 0x47, 0x61, 0xD2},
145 {0x76, 0x25, 0x14, 0xB8, 0x29, 0xBF, 0x48, 0x6A},
146 {0x3B, 0xDD, 0x11, 0x90, 0x49, 0x37, 0x28, 0x02},
147 {0x26, 0x95, 0x5F, 0x68, 0x35, 0xAF, 0x60, 0x9A},
148 {0x16, 0x4D, 0x5E, 0x40, 0x4F, 0x27, 0x52, 0x32},
149 {0x6B, 0x05, 0x6E, 0x18, 0x75, 0x9F, 0x5C, 0xCA},
150 {0x00, 0x4B, 0xD6, 0xEF, 0x09, 0x17, 0x60, 0x62},
151 {0x48, 0x0D, 0x39, 0x00, 0x6E, 0xE7, 0x62, 0xF2},
152 {0x43, 0x75, 0x40, 0xC8, 0x69, 0x8F, 0x3C, 0xFA},
153 {0x07, 0x2D, 0x43, 0xA0, 0x77, 0x07, 0x52, 0x92},
154 {0x02, 0xFE, 0x55, 0x77, 0x81, 0x17, 0xF1, 0x2A},
155 {0x1D, 0x9D, 0x5C, 0x50, 0x18, 0xF7, 0x28, 0xC2},
156 {0x30, 0x55, 0x32, 0x28, 0x6D, 0x6F, 0x29, 0x5A},
157 {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF},
158 {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF},
159 {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF},
160 {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
161 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
162 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
163 {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}
164 };
165
166 static unsigned char cipher_data[NUM_TESTS][8] = {
167 {0x8C, 0xA6, 0x4D, 0xE9, 0xC1, 0xB1, 0x23, 0xA7},
168 {0x73, 0x59, 0xB2, 0x16, 0x3E, 0x4E, 0xDC, 0x58},
169 {0x95, 0x8E, 0x6E, 0x62, 0x7A, 0x05, 0x55, 0x7B},
170 {0xF4, 0x03, 0x79, 0xAB, 0x9E, 0x0E, 0xC5, 0x33},
171 {0x17, 0x66, 0x8D, 0xFC, 0x72, 0x92, 0x53, 0x2D},
172 {0x8A, 0x5A, 0xE1, 0xF8, 0x1A, 0xB8, 0xF2, 0xDD},
173 {0x8C, 0xA6, 0x4D, 0xE9, 0xC1, 0xB1, 0x23, 0xA7},
174 {0xED, 0x39, 0xD9, 0x50, 0xFA, 0x74, 0xBC, 0xC4},
175 {0x69, 0x0F, 0x5B, 0x0D, 0x9A, 0x26, 0x93, 0x9B},
176 {0x7A, 0x38, 0x9D, 0x10, 0x35, 0x4B, 0xD2, 0x71},
177 {0x86, 0x8E, 0xBB, 0x51, 0xCA, 0xB4, 0x59, 0x9A},
178 {0x71, 0x78, 0x87, 0x6E, 0x01, 0xF1, 0x9B, 0x2A},
179 {0xAF, 0x37, 0xFB, 0x42, 0x1F, 0x8C, 0x40, 0x95},
180 {0x86, 0xA5, 0x60, 0xF1, 0x0E, 0xC6, 0xD8, 0x5B},
181 {0x0C, 0xD3, 0xDA, 0x02, 0x00, 0x21, 0xDC, 0x09},
182 {0xEA, 0x67, 0x6B, 0x2C, 0xB7, 0xDB, 0x2B, 0x7A},
183 {0xDF, 0xD6, 0x4A, 0x81, 0x5C, 0xAF, 0x1A, 0x0F},
184 {0x5C, 0x51, 0x3C, 0x9C, 0x48, 0x86, 0xC0, 0x88},
185 {0x0A, 0x2A, 0xEE, 0xAE, 0x3F, 0xF4, 0xAB, 0x77},
186 {0xEF, 0x1B, 0xF0, 0x3E, 0x5D, 0xFA, 0x57, 0x5A},
187 {0x88, 0xBF, 0x0D, 0xB6, 0xD7, 0x0D, 0xEE, 0x56},
188 {0xA1, 0xF9, 0x91, 0x55, 0x41, 0x02, 0x0B, 0x56},
189 {0x6F, 0xBF, 0x1C, 0xAF, 0xCF, 0xFD, 0x05, 0x56},
190 {0x2F, 0x22, 0xE4, 0x9B, 0xAB, 0x7C, 0xA1, 0xAC},
191 {0x5A, 0x6B, 0x61, 0x2C, 0xC2, 0x6C, 0xCE, 0x4A},
192 {0x5F, 0x4C, 0x03, 0x8E, 0xD1, 0x2B, 0x2E, 0x41},
193 {0x63, 0xFA, 0xC0, 0xD0, 0x34, 0xD9, 0xF7, 0x93},
194 {0x61, 0x7B, 0x3A, 0x0C, 0xE8, 0xF0, 0x71, 0x00},
195 {0xDB, 0x95, 0x86, 0x05, 0xF8, 0xC8, 0xC6, 0x06},
196 {0xED, 0xBF, 0xD1, 0xC6, 0x6C, 0x29, 0xCC, 0xC7},
197 {0x35, 0x55, 0x50, 0xB2, 0x15, 0x0E, 0x24, 0x51},
198 {0xCA, 0xAA, 0xAF, 0x4D, 0xEA, 0xF1, 0xDB, 0xAE},
199 {0xD5, 0xD4, 0x4F, 0xF7, 0x20, 0x68, 0x3D, 0x0D},
200 {0x2A, 0x2B, 0xB0, 0x08, 0xDF, 0x97, 0xC2, 0xF2}
201 };
202
203 static unsigned char cipher_ecb2[NUM_TESTS - 1][8] = {
204 {0x92, 0x95, 0xB5, 0x9B, 0xB3, 0x84, 0x73, 0x6E},
205 {0x19, 0x9E, 0x9D, 0x6D, 0xF3, 0x9A, 0xA8, 0x16},
206 {0x2A, 0x4B, 0x4D, 0x24, 0x52, 0x43, 0x84, 0x27},
207 {0x35, 0x84, 0x3C, 0x01, 0x9D, 0x18, 0xC5, 0xB6},
208 {0x4A, 0x5B, 0x2F, 0x42, 0xAA, 0x77, 0x19, 0x25},
209 {0xA0, 0x6B, 0xA9, 0xB8, 0xCA, 0x5B, 0x17, 0x8A},
210 {0xAB, 0x9D, 0xB7, 0xFB, 0xED, 0x95, 0xF2, 0x74},
211 {0x3D, 0x25, 0x6C, 0x23, 0xA7, 0x25, 0x2F, 0xD6},
212 {0xB7, 0x6F, 0xAB, 0x4F, 0xBD, 0xBD, 0xB7, 0x67},
213 {0x8F, 0x68, 0x27, 0xD6, 0x9C, 0xF4, 0x1A, 0x10},
214 {0x82, 0x57, 0xA1, 0xD6, 0x50, 0x5E, 0x81, 0x85},
215 {0xA2, 0x0F, 0x0A, 0xCD, 0x80, 0x89, 0x7D, 0xFA},
216 {0xCD, 0x2A, 0x53, 0x3A, 0xDB, 0x0D, 0x7E, 0xF3},
217 {0xD2, 0xC2, 0xBE, 0x27, 0xE8, 0x1B, 0x68, 0xE3},
218 {0xE9, 0x24, 0xCF, 0x4F, 0x89, 0x3C, 0x5B, 0x0A},
219 {0xA7, 0x18, 0xC3, 0x9F, 0xFA, 0x9F, 0xD7, 0x69},
220 {0x77, 0x2C, 0x79, 0xB1, 0xD2, 0x31, 0x7E, 0xB1},
221 {0x49, 0xAB, 0x92, 0x7F, 0xD0, 0x22, 0x00, 0xB7},
222 {0xCE, 0x1C, 0x6C, 0x7D, 0x85, 0xE3, 0x4A, 0x6F},
223 {0xBE, 0x91, 0xD6, 0xE1, 0x27, 0xB2, 0xE9, 0x87},
224 {0x70, 0x28, 0xAE, 0x8F, 0xD1, 0xF5, 0x74, 0x1A},
225 {0xAA, 0x37, 0x80, 0xBB, 0xF3, 0x22, 0x1D, 0xDE},
226 {0xA6, 0xC4, 0xD2, 0x5E, 0x28, 0x93, 0xAC, 0xB3},
227 {0x22, 0x07, 0x81, 0x5A, 0xE4, 0xB7, 0x1A, 0xAD},
228 {0xDC, 0xCE, 0x05, 0xE7, 0x07, 0xBD, 0xF5, 0x84},
229 {0x26, 0x1D, 0x39, 0x2C, 0xB3, 0xBA, 0xA5, 0x85},
230 {0xB4, 0xF7, 0x0F, 0x72, 0xFB, 0x04, 0xF0, 0xDC},
231 {0x95, 0xBA, 0xA9, 0x4E, 0x87, 0x36, 0xF2, 0x89},
232 {0xD4, 0x07, 0x3A, 0xF1, 0x5A, 0x17, 0x82, 0x0E},
233 {0xEF, 0x6F, 0xAF, 0xA7, 0x66, 0x1A, 0x7E, 0x89},
234 {0xC1, 0x97, 0xF5, 0x58, 0x74, 0x8A, 0x20, 0xE7},
235 {0x43, 0x34, 0xCF, 0xDA, 0x22, 0xC4, 0x86, 0xC8},
236 {0x08, 0xD7, 0xB4, 0xFB, 0x62, 0x9D, 0x08, 0x85}
237 };
238
239 static unsigned char cbc_key[8] =
240 { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef };
241 static unsigned char cbc2_key[8] =
242 { 0xf1, 0xe0, 0xd3, 0xc2, 0xb5, 0xa4, 0x97, 0x86 };
243 static unsigned char cbc3_key[8] =
244 { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 };
245 static unsigned char cbc_iv[8] =
246 { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 };
247 /*
248 * Changed the following text constant to binary so it will work on ebcdic
249 * machines :-)
250 */
251 /* static char cbc_data[40]="7654321 Now is the time for \0001"; */
252 static unsigned char cbc_data[40] = {
253 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x20,
254 0x4E, 0x6F, 0x77, 0x20, 0x69, 0x73, 0x20, 0x74,
255 0x68, 0x65, 0x20, 0x74, 0x69, 0x6D, 0x65, 0x20,
256 0x66, 0x6F, 0x72, 0x20, 0x00, 0x31, 0x00, 0x00,
257 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
258 };
259
260 static unsigned char cbc_ok[32] = {
261 0xcc, 0xd1, 0x73, 0xff, 0xab, 0x20, 0x39, 0xf4,
262 0xac, 0xd8, 0xae, 0xfd, 0xdf, 0xd8, 0xa1, 0xeb,
263 0x46, 0x8e, 0x91, 0x15, 0x78, 0x88, 0xba, 0x68,
264 0x1d, 0x26, 0x93, 0x97, 0xf7, 0xfe, 0x62, 0xb4
265 };
266
267 # ifdef SCREW_THE_PARITY
268 # error "SCREW_THE_PARITY is not ment to be defined."
269 # error "Original vectors are preserved for reference only."
270 static unsigned char cbc2_key[8] =
271 { 0xf0, 0xe1, 0xd2, 0xc3, 0xb4, 0xa5, 0x96, 0x87 };
272 static unsigned char xcbc_ok[32] = {
273 0x86, 0x74, 0x81, 0x0D, 0x61, 0xA4, 0xA5, 0x48,
274 0xB9, 0x93, 0x03, 0xE1, 0xB8, 0xBB, 0xBD, 0xBD,
275 0x64, 0x30, 0x0B, 0xB9, 0x06, 0x65, 0x81, 0x76,
276 0x04, 0x1D, 0x77, 0x62, 0x17, 0xCA, 0x2B, 0xD2,
277 };
278 # else
279 static unsigned char xcbc_ok[32] = {
280 0x84, 0x6B, 0x29, 0x14, 0x85, 0x1E, 0x9A, 0x29,
281 0x54, 0x73, 0x2F, 0x8A, 0xA0, 0xA6, 0x11, 0xC1,
282 0x15, 0xCD, 0xC2, 0xD7, 0x95, 0x1B, 0x10, 0x53,
283 0xA6, 0x3C, 0x5E, 0x03, 0xB2, 0x1A, 0xA3, 0xC4,
284 };
285 # endif
286
287 static unsigned char cbc3_ok[32] = {
288 0x3F, 0xE3, 0x01, 0xC9, 0x62, 0xAC, 0x01, 0xD0,
289 0x22, 0x13, 0x76, 0x3C, 0x1C, 0xBD, 0x4C, 0xDC,
290 0x79, 0x96, 0x57, 0xC0, 0x64, 0xEC, 0xF5, 0xD4,
291 0x1C, 0x67, 0x38, 0x12, 0xCF, 0xDE, 0x96, 0x75
292 };
293
294 static unsigned char pcbc_ok[32] = {
295 0xcc, 0xd1, 0x73, 0xff, 0xab, 0x20, 0x39, 0xf4,
296 0x6d, 0xec, 0xb4, 0x70, 0xa0, 0xe5, 0x6b, 0x15,
297 0xae, 0xa6, 0xbf, 0x61, 0xed, 0x7d, 0x9c, 0x9f,
298 0xf7, 0x17, 0x46, 0x3b, 0x8a, 0xb3, 0xcc, 0x88
299 };
300
301 static unsigned char cfb_key[8] =
302 { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef };
303 static unsigned char cfb_iv[8] =
304 { 0x12, 0x34, 0x56, 0x78, 0x90, 0xab, 0xcd, 0xef };
305 static unsigned char cfb_buf1[40], cfb_buf2[40], cfb_tmp[8];
306 static unsigned char plain[24] = {
307 0x4e, 0x6f, 0x77, 0x20, 0x69, 0x73,
308 0x20, 0x74, 0x68, 0x65, 0x20, 0x74,
309 0x69, 0x6d, 0x65, 0x20, 0x66, 0x6f,
310 0x72, 0x20, 0x61, 0x6c, 0x6c, 0x20
311 };
312
313 static unsigned char cfb_cipher8[24] = {
314 0xf3, 0x1f, 0xda, 0x07, 0x01, 0x14, 0x62, 0xee, 0x18, 0x7f, 0x43, 0xd8,
315 0x0a, 0x7c, 0xd9, 0xb5, 0xb0, 0xd2, 0x90, 0xda, 0x6e, 0x5b, 0x9a, 0x87
316 };
317
318 static unsigned char cfb_cipher16[24] = {
319 0xF3, 0x09, 0x87, 0x87, 0x7F, 0x57, 0xF7, 0x3C, 0x36, 0xB6, 0xDB, 0x70,
320 0xD8, 0xD5, 0x34, 0x19, 0xD3, 0x86, 0xB2, 0x23, 0xB7, 0xB2, 0xAD, 0x1B
321 };
322
323 static unsigned char cfb_cipher32[24] = {
324 0xF3, 0x09, 0x62, 0x49, 0xA4, 0xDF, 0xA4, 0x9F, 0x33, 0xDC, 0x7B, 0xAD,
325 0x4C, 0xC8, 0x9F, 0x64, 0xE4, 0x53, 0xE5, 0xEC, 0x67, 0x20, 0xDA, 0xB6
326 };
327
328 static unsigned char cfb_cipher48[24] = {
329 0xF3, 0x09, 0x62, 0x49, 0xC7, 0xF4, 0x30, 0xB5, 0x15, 0xEC, 0xBB, 0x85,
330 0x97, 0x5A, 0x13, 0x8C, 0x68, 0x60, 0xE2, 0x38, 0x34, 0x3C, 0xDC, 0x1F
331 };
332
333 static unsigned char cfb_cipher64[24] = {
334 0xF3, 0x09, 0x62, 0x49, 0xC7, 0xF4, 0x6E, 0x51, 0xA6, 0x9E, 0x83, 0x9B,
335 0x1A, 0x92, 0xF7, 0x84, 0x03, 0x46, 0x71, 0x33, 0x89, 0x8E, 0xA6, 0x22
336 };
337
338 static unsigned char ofb_key[8] =
339 { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef };
340 static unsigned char ofb_iv[8] =
341 { 0x12, 0x34, 0x56, 0x78, 0x90, 0xab, 0xcd, 0xef };
342 static unsigned char ofb_buf1[24], ofb_buf2[24], ofb_tmp[8];
343 static unsigned char ofb_cipher[24] = {
344 0xf3, 0x09, 0x62, 0x49, 0xc7, 0xf4, 0x6e, 0x51,
345 0x35, 0xf2, 0x4a, 0x24, 0x2e, 0xeb, 0x3d, 0x3f,
346 0x3d, 0x6d, 0x5b, 0xe3, 0x25, 0x5a, 0xf8, 0xc3
347 };
348
349 # if 0
350 static DES_LONG cbc_cksum_ret = 0xB462FEF7L;
351 # else
352 static DES_LONG cbc_cksum_ret = 0xF7FE62B4L;
353 # endif
354 static unsigned char cbc_cksum_data[8] =
355 { 0x1D, 0x26, 0x93, 0x97, 0xf7, 0xfe, 0x62, 0xb4 };
356
357 static char *pt(unsigned char *p);
358 static int cfb_test(int bits, unsigned char *cfb_cipher);
359 static int cfb64_test(unsigned char *cfb_cipher);
360 static int ede_cfb64_test(unsigned char *cfb_cipher);
361 int main(int argc, char *argv[])
362 {
363 int j, err = 0;
364 unsigned int i;
365 des_cblock in, out, outin, iv3;
366 des_key_schedule ks, ks2, ks3;
367 unsigned char cbc_in[40];
368 unsigned char cbc_out[40];
369 DES_LONG cs;
370 unsigned char cret[8];
371 DES_LONG lqret[4];
372 int num;
373 char *str;
374
375 printf("Doing ecb\n");
376 for (i = 0; i < NUM_TESTS; i++) {
377 DES_set_key_unchecked(&key_data[i], &ks);
378 memcpy(in, plain_data[i], 8);
379 memset(out, 0, 8);
380 memset(outin, 0, 8);
381 des_ecb_encrypt(&in, &out, ks, DES_ENCRYPT);
382 des_ecb_encrypt(&out, &outin, ks, DES_DECRYPT);
383
384 if (memcmp(out, cipher_data[i], 8) != 0) {
385 printf("Encryption error %2d\nk=%s p=%s o=%s act=%s\n",
386 i + 1, pt(key_data[i]), pt(in), pt(cipher_data[i]),
387 pt(out));
388 err = 1;
389 }
390 if (memcmp(in, outin, 8) != 0) {
391 printf("Decryption error %2d\nk=%s p=%s o=%s act=%s\n",
392 i + 1, pt(key_data[i]), pt(out), pt(in), pt(outin));
393 err = 1;
394 }
395 }
396
397 # ifndef LIBDES_LIT
398 printf("Doing ede ecb\n");
399 for (i = 0; i < (NUM_TESTS - 2); i++) {
400 DES_set_key_unchecked(&key_data[i], &ks);
401 DES_set_key_unchecked(&key_data[i + 1], &ks2);
402 DES_set_key_unchecked(&key_data[i + 2], &ks3);
403 memcpy(in, plain_data[i], 8);
404 memset(out, 0, 8);
405 memset(outin, 0, 8);
406 des_ecb2_encrypt(&in, &out, ks, ks2, DES_ENCRYPT);
407 des_ecb2_encrypt(&out, &outin, ks, ks2, DES_DECRYPT);
408
409 if (memcmp(out, cipher_ecb2[i], 8) != 0) {
410 printf("Encryption error %2d\nk=%s p=%s o=%s act=%s\n",
411 i + 1, pt(key_data[i]), pt(in), pt(cipher_ecb2[i]),
412 pt(out));
413 err = 1;
414 }
415 if (memcmp(in, outin, 8) != 0) {
416 printf("Decryption error %2d\nk=%s p=%s o=%s act=%s\n",
417 i + 1, pt(key_data[i]), pt(out), pt(in), pt(outin));
418 err = 1;
419 }
420 }
421 # endif
422
423 printf("Doing cbc\n");
424 if ((j = DES_set_key_checked(&cbc_key, &ks)) != 0) {
425 printf("Key error %d\n", j);
426 err = 1;
427 }
428 memset(cbc_out, 0, 40);
429 memset(cbc_in, 0, 40);
430 memcpy(iv3, cbc_iv, sizeof(cbc_iv));
431 des_ncbc_encrypt(cbc_data, cbc_out, strlen((char *)cbc_data) + 1, ks,
432 &iv3, DES_ENCRYPT);
433 if (memcmp(cbc_out, cbc_ok, 32) != 0) {
434 printf("cbc_encrypt encrypt error\n");
435 err = 1;
436 }
437
438 memcpy(iv3, cbc_iv, sizeof(cbc_iv));
439 des_ncbc_encrypt(cbc_out, cbc_in, strlen((char *)cbc_data) + 1, ks,
440 &iv3, DES_DECRYPT);
441 if (memcmp(cbc_in, cbc_data, strlen((char *)cbc_data)) != 0) {
442 printf("cbc_encrypt decrypt error\n");
443 err = 1;
444 }
445 # ifndef LIBDES_LIT
446 printf("Doing desx cbc\n");
447 if ((j = DES_set_key_checked(&cbc_key, &ks)) != 0) {
448 printf("Key error %d\n", j);
449 err = 1;
450 }
451 memset(cbc_out, 0, 40);
452 memset(cbc_in, 0, 40);
453 memcpy(iv3, cbc_iv, sizeof(cbc_iv));
454 des_xcbc_encrypt(cbc_data, cbc_out, strlen((char *)cbc_data) + 1, ks,
455 &iv3, &cbc2_key, &cbc3_key, DES_ENCRYPT);
456 if (memcmp(cbc_out, xcbc_ok, 32) != 0) {
457 printf("des_xcbc_encrypt encrypt error\n");
458 err = 1;
459 }
460 memcpy(iv3, cbc_iv, sizeof(cbc_iv));
461 des_xcbc_encrypt(cbc_out, cbc_in, strlen((char *)cbc_data) + 1, ks,
462 &iv3, &cbc2_key, &cbc3_key, DES_DECRYPT);
463 if (memcmp(cbc_in, cbc_data, strlen((char *)cbc_data) + 1) != 0) {
464 printf("des_xcbc_encrypt decrypt error\n");
465 err = 1;
466 }
467 # endif
468
469 printf("Doing ede cbc\n");
470 if ((j = DES_set_key_checked(&cbc_key, &ks)) != 0) {
471 printf("Key error %d\n", j);
472 err = 1;
473 }
474 if ((j = DES_set_key_checked(&cbc2_key, &ks2)) != 0) {
475 printf("Key error %d\n", j);
476 err = 1;
477 }
478 if ((j = DES_set_key_checked(&cbc3_key, &ks3)) != 0) {
479 printf("Key error %d\n", j);
480 err = 1;
481 }
482 memset(cbc_out, 0, 40);
483 memset(cbc_in, 0, 40);
484 i = strlen((char *)cbc_data) + 1;
485 /* i=((i+7)/8)*8; */
486 memcpy(iv3, cbc_iv, sizeof(cbc_iv));
487
488 des_ede3_cbc_encrypt(cbc_data, cbc_out, 16L, ks, ks2, ks3, &iv3,
489 DES_ENCRYPT);
490 des_ede3_cbc_encrypt(&(cbc_data[16]), &(cbc_out[16]), i - 16, ks, ks2,
491 ks3, &iv3, DES_ENCRYPT);
492 if (memcmp
493 (cbc_out, cbc3_ok,
494 (unsigned int)(strlen((char *)cbc_data) + 1 + 7) / 8 * 8) != 0) {
495 unsigned int n;
496
497 printf("des_ede3_cbc_encrypt encrypt error\n");
498 for (n = 0; n < i; ++n)
499 printf(" %02x", cbc_out[n]);
500 printf("\n");
501 for (n = 0; n < i; ++n)
502 printf(" %02x", cbc3_ok[n]);
503 printf("\n");
504 err = 1;
505 }
506
507 memcpy(iv3, cbc_iv, sizeof(cbc_iv));
508 des_ede3_cbc_encrypt(cbc_out, cbc_in, i, ks, ks2, ks3, &iv3, DES_DECRYPT);
509 if (memcmp(cbc_in, cbc_data, strlen((char *)cbc_data) + 1) != 0) {
510 unsigned int n;
511
512 printf("des_ede3_cbc_encrypt decrypt error\n");
513 for (n = 0; n < i; ++n)
514 printf(" %02x", cbc_data[n]);
515 printf("\n");
516 for (n = 0; n < i; ++n)
517 printf(" %02x", cbc_in[n]);
518 printf("\n");
519 err = 1;
520 }
521 # ifndef LIBDES_LIT
522 printf("Doing pcbc\n");
523 if ((j = DES_set_key_checked(&cbc_key, &ks)) != 0) {
524 printf("Key error %d\n", j);
525 err = 1;
526 }
527 memset(cbc_out, 0, 40);
528 memset(cbc_in, 0, 40);
529 des_pcbc_encrypt(cbc_data, cbc_out, strlen((char *)cbc_data) + 1, ks,
530 &cbc_iv, DES_ENCRYPT);
531 if (memcmp(cbc_out, pcbc_ok, 32) != 0) {
532 printf("pcbc_encrypt encrypt error\n");
533 err = 1;
534 }
535 des_pcbc_encrypt(cbc_out, cbc_in, strlen((char *)cbc_data) + 1, ks,
536 &cbc_iv, DES_DECRYPT);
537 if (memcmp(cbc_in, cbc_data, strlen((char *)cbc_data) + 1) != 0) {
538 printf("pcbc_encrypt decrypt error\n");
539 err = 1;
540 }
541
542 printf("Doing ");
543 printf("cfb8 ");
544 err += cfb_test(8, cfb_cipher8);
545 printf("cfb16 ");
546 err += cfb_test(16, cfb_cipher16);
547 printf("cfb32 ");
548 err += cfb_test(32, cfb_cipher32);
549 printf("cfb48 ");
550 err += cfb_test(48, cfb_cipher48);
551 printf("cfb64 ");
552 err += cfb_test(64, cfb_cipher64);
553
554 printf("cfb64() ");
555 err += cfb64_test(cfb_cipher64);
556
557 memcpy(cfb_tmp, cfb_iv, sizeof(cfb_iv));
558 for (i = 0; i < sizeof(plain); i++)
559 des_cfb_encrypt(&(plain[i]), &(cfb_buf1[i]),
560 8, 1, ks, &cfb_tmp, DES_ENCRYPT);
561 if (memcmp(cfb_cipher8, cfb_buf1, sizeof(plain)) != 0) {
562 printf("cfb_encrypt small encrypt error\n");
563 err = 1;
564 }
565
566 memcpy(cfb_tmp, cfb_iv, sizeof(cfb_iv));
567 for (i = 0; i < sizeof(plain); i++)
568 des_cfb_encrypt(&(cfb_buf1[i]), &(cfb_buf2[i]),
569 8, 1, ks, &cfb_tmp, DES_DECRYPT);
570 if (memcmp(plain, cfb_buf2, sizeof(plain)) != 0) {
571 printf("cfb_encrypt small decrypt error\n");
572 err = 1;
573 }
574
575 printf("ede_cfb64() ");
576 err += ede_cfb64_test(cfb_cipher64);
577
578 printf("done\n");
579
580 printf("Doing ofb\n");
581 DES_set_key_checked(&ofb_key, &ks);
582 memcpy(ofb_tmp, ofb_iv, sizeof(ofb_iv));
583 des_ofb_encrypt(plain, ofb_buf1, 64, sizeof(plain) / 8, ks, &ofb_tmp);
584 if (memcmp(ofb_cipher, ofb_buf1, sizeof(ofb_buf1)) != 0) {
585 printf("ofb_encrypt encrypt error\n");
586 printf("%02X %02X %02X %02X %02X %02X %02X %02X\n",
587 ofb_buf1[8 + 0], ofb_buf1[8 + 1], ofb_buf1[8 + 2],
588 ofb_buf1[8 + 3], ofb_buf1[8 + 4], ofb_buf1[8 + 5],
589 ofb_buf1[8 + 6], ofb_buf1[8 + 7]);
590 printf("%02X %02X %02X %02X %02X %02X %02X %02X\n", ofb_buf1[8 + 0],
591 ofb_cipher[8 + 1], ofb_cipher[8 + 2], ofb_cipher[8 + 3],
592 ofb_buf1[8 + 4], ofb_cipher[8 + 5], ofb_cipher[8 + 6],
593 ofb_cipher[8 + 7]);
594 err = 1;
595 }
596 memcpy(ofb_tmp, ofb_iv, sizeof(ofb_iv));
597 des_ofb_encrypt(ofb_buf1, ofb_buf2, 64, sizeof(ofb_buf1) / 8, ks,
598 &ofb_tmp);
599 if (memcmp(plain, ofb_buf2, sizeof(ofb_buf2)) != 0) {
600 printf("ofb_encrypt decrypt error\n");
601 printf("%02X %02X %02X %02X %02X %02X %02X %02X\n",
602 ofb_buf2[8 + 0], ofb_buf2[8 + 1], ofb_buf2[8 + 2],
603 ofb_buf2[8 + 3], ofb_buf2[8 + 4], ofb_buf2[8 + 5],
604 ofb_buf2[8 + 6], ofb_buf2[8 + 7]);
605 printf("%02X %02X %02X %02X %02X %02X %02X %02X\n", plain[8 + 0],
606 plain[8 + 1], plain[8 + 2], plain[8 + 3], plain[8 + 4],
607 plain[8 + 5], plain[8 + 6], plain[8 + 7]);
608 err = 1;
609 }
610
611 printf("Doing ofb64\n");
612 DES_set_key_checked(&ofb_key, &ks);
613 memcpy(ofb_tmp, ofb_iv, sizeof(ofb_iv));
614 memset(ofb_buf1, 0, sizeof(ofb_buf1));
615 memset(ofb_buf2, 0, sizeof(ofb_buf1));
616 num = 0;
617 for (i = 0; i < sizeof(plain); i++) {
618 des_ofb64_encrypt(&(plain[i]), &(ofb_buf1[i]), 1, ks, &ofb_tmp, &num);
619 }
620 if (memcmp(ofb_cipher, ofb_buf1, sizeof(ofb_buf1)) != 0) {
621 printf("ofb64_encrypt encrypt error\n");
622 err = 1;
623 }
624 memcpy(ofb_tmp, ofb_iv, sizeof(ofb_iv));
625 num = 0;
626 des_ofb64_encrypt(ofb_buf1, ofb_buf2, sizeof(ofb_buf1), ks, &ofb_tmp,
627 &num);
628 if (memcmp(plain, ofb_buf2, sizeof(ofb_buf2)) != 0) {
629 printf("ofb64_encrypt decrypt error\n");
630 err = 1;
631 }
632
633 printf("Doing ede_ofb64\n");
634 DES_set_key_checked(&ofb_key, &ks);
635 memcpy(ofb_tmp, ofb_iv, sizeof(ofb_iv));
636 memset(ofb_buf1, 0, sizeof(ofb_buf1));
637 memset(ofb_buf2, 0, sizeof(ofb_buf1));
638 num = 0;
639 for (i = 0; i < sizeof(plain); i++) {
640 des_ede3_ofb64_encrypt(&(plain[i]), &(ofb_buf1[i]), 1, ks, ks,
641 ks, &ofb_tmp, &num);
642 }
643 if (memcmp(ofb_cipher, ofb_buf1, sizeof(ofb_buf1)) != 0) {
644 printf("ede_ofb64_encrypt encrypt error\n");
645 err = 1;
646 }
647 memcpy(ofb_tmp, ofb_iv, sizeof(ofb_iv));
648 num = 0;
649 des_ede3_ofb64_encrypt(ofb_buf1, ofb_buf2, sizeof(ofb_buf1), ks, ks, ks,
650 &ofb_tmp, &num);
651 if (memcmp(plain, ofb_buf2, sizeof(ofb_buf2)) != 0) {
652 printf("ede_ofb64_encrypt decrypt error\n");
653 err = 1;
654 }
655
656 printf("Doing cbc_cksum\n");
657 DES_set_key_checked(&cbc_key, &ks);
658 cs = des_cbc_cksum(cbc_data, &cret, strlen((char *)cbc_data), ks,
659 &cbc_iv);
660 if (cs != cbc_cksum_ret) {
661 printf("bad return value (%08lX), should be %08lX\n",
662 (unsigned long)cs, (unsigned long)cbc_cksum_ret);
663 err = 1;
664 }
665 if (memcmp(cret, cbc_cksum_data, 8) != 0) {
666 printf("bad cbc_cksum block returned\n");
667 err = 1;
668 }
669
670 printf("Doing quad_cksum\n");
671 cs = des_quad_cksum(cbc_data, (des_cblock *)lqret,
672 (long)strlen((char *)cbc_data), 2,
673 (des_cblock *)cbc_iv);
674 if (cs != 0x70d7a63aL) {
675 printf("quad_cksum error, ret %08lx should be 70d7a63a\n",
676 (unsigned long)cs);
677 err = 1;
678 }
679 if (lqret[0] != 0x327eba8dL) {
680 printf("quad_cksum error, out[0] %08lx is not %08lx\n",
681 (unsigned long)lqret[0], 0x327eba8dUL);
682 err = 1;
683 }
684 if (lqret[1] != 0x201a49ccL) {
685 printf("quad_cksum error, out[1] %08lx is not %08lx\n",
686 (unsigned long)lqret[1], 0x201a49ccUL);
687 err = 1;
688 }
689 if (lqret[2] != 0x70d7a63aL) {
690 printf("quad_cksum error, out[2] %08lx is not %08lx\n",
691 (unsigned long)lqret[2], 0x70d7a63aUL);
692 err = 1;
693 }
694 if (lqret[3] != 0x501c2c26L) {
695 printf("quad_cksum error, out[3] %08lx is not %08lx\n",
696 (unsigned long)lqret[3], 0x501c2c26UL);
697 err = 1;
698 }
699 # endif
700
701 printf("input word alignment test");
702 for (i = 0; i < 4; i++) {
703 printf(" %d", i);
704 des_ncbc_encrypt(&(cbc_out[i]), cbc_in,
705 strlen((char *)cbc_data) + 1, ks,
706 &cbc_iv, DES_ENCRYPT);
707 }
708 printf("\noutput word alignment test");
709 for (i = 0; i < 4; i++) {
710 printf(" %d", i);
711 des_ncbc_encrypt(cbc_out, &(cbc_in[i]),
712 strlen((char *)cbc_data) + 1, ks,
713 &cbc_iv, DES_ENCRYPT);
714 }
715 printf("\n");
716 printf("fast crypt test ");
717 str = crypt("testing", "ef");
718 if (strcmp("efGnQx2725bI2", str) != 0) {
719 printf("fast crypt error, %s should be efGnQx2725bI2\n", str);
720 err = 1;
721 }
722 str = crypt("bca76;23", "yA");
723 if (strcmp("yA1Rp/1hZXIJk", str) != 0) {
724 printf("fast crypt error, %s should be yA1Rp/1hZXIJk\n", str);
725 err = 1;
726 }
727 # ifdef OPENSSL_SYS_NETWARE
728 if (err)
729 printf("ERROR: %d\n", err);
730 # endif
731 printf("\n");
732 return (err);
733 }
734
735 static char *pt(unsigned char *p)
736 {
737 static char bufs[10][20];
738 static int bnum = 0;
739 char *ret;
740 int i;
741 static char *f = "0123456789ABCDEF";
742
743 ret = &(bufs[bnum++][0]);
744 bnum %= 10;
745 for (i = 0; i < 8; i++) {
746 ret[i * 2] = f[(p[i] >> 4) & 0xf];
747 ret[i * 2 + 1] = f[p[i] & 0xf];
748 }
749 ret[16] = '\0';
750 return (ret);
751 }
752
753 # ifndef LIBDES_LIT
754
755 static int cfb_test(int bits, unsigned char *cfb_cipher)
756 {
757 des_key_schedule ks;
758 int i, err = 0;
759
760 DES_set_key_checked(&cfb_key, &ks);
761 memcpy(cfb_tmp, cfb_iv, sizeof(cfb_iv));
762 des_cfb_encrypt(plain, cfb_buf1, bits, sizeof(plain), ks, &cfb_tmp,
763 DES_ENCRYPT);
764 if (memcmp(cfb_cipher, cfb_buf1, sizeof(plain)) != 0) {
765 err = 1;
766 printf("cfb_encrypt encrypt error\n");
767 for (i = 0; i < 24; i += 8)
768 printf("%s\n", pt(&(cfb_buf1[i])));
769 }
770 memcpy(cfb_tmp, cfb_iv, sizeof(cfb_iv));
771 des_cfb_encrypt(cfb_buf1, cfb_buf2, bits, sizeof(plain), ks, &cfb_tmp,
772 DES_DECRYPT);
773 if (memcmp(plain, cfb_buf2, sizeof(plain)) != 0) {
774 err = 1;
775 printf("cfb_encrypt decrypt error\n");
776 for (i = 0; i < 24; i += 8)
777 printf("%s\n", pt(&(cfb_buf1[i])));
778 }
779 return (err);
780 }
781
782 static int cfb64_test(unsigned char *cfb_cipher)
783 {
784 des_key_schedule ks;
785 int err = 0, i, n;
786
787 DES_set_key_checked(&cfb_key, &ks);
788 memcpy(cfb_tmp, cfb_iv, sizeof(cfb_iv));
789 n = 0;
790 des_cfb64_encrypt(plain, cfb_buf1, 12, ks, &cfb_tmp, &n, DES_ENCRYPT);
791 des_cfb64_encrypt(&(plain[12]), &(cfb_buf1[12]), sizeof(plain) - 12, ks,
792 &cfb_tmp, &n, DES_ENCRYPT);
793 if (memcmp(cfb_cipher, cfb_buf1, sizeof(plain)) != 0) {
794 err = 1;
795 printf("cfb_encrypt encrypt error\n");
796 for (i = 0; i < 24; i += 8)
797 printf("%s\n", pt(&(cfb_buf1[i])));
798 }
799 memcpy(cfb_tmp, cfb_iv, sizeof(cfb_iv));
800 n = 0;
801 des_cfb64_encrypt(cfb_buf1, cfb_buf2, 17, ks, &cfb_tmp, &n, DES_DECRYPT);
802 des_cfb64_encrypt(&(cfb_buf1[17]), &(cfb_buf2[17]),
803 sizeof(plain) - 17, ks, &cfb_tmp, &n, DES_DECRYPT);
804 if (memcmp(plain, cfb_buf2, sizeof(plain)) != 0) {
805 err = 1;
806 printf("cfb_encrypt decrypt error\n");
807 for (i = 0; i < 24; i += 8)
808 printf("%s\n", pt(&(cfb_buf2[i])));
809 }
810 return (err);
811 }
812
813 static int ede_cfb64_test(unsigned char *cfb_cipher)
814 {
815 des_key_schedule ks;
816 int err = 0, i, n;
817
818 DES_set_key_checked(&cfb_key, &ks);
819 memcpy(cfb_tmp, cfb_iv, sizeof(cfb_iv));
820 n = 0;
821 des_ede3_cfb64_encrypt(plain, cfb_buf1, 12, ks, ks, ks, &cfb_tmp, &n,
822 DES_ENCRYPT);
823 des_ede3_cfb64_encrypt(&(plain[12]), &(cfb_buf1[12]),
824 sizeof(plain) - 12, ks, ks, ks,
825 &cfb_tmp, &n, DES_ENCRYPT);
826 if (memcmp(cfb_cipher, cfb_buf1, sizeof(plain)) != 0) {
827 err = 1;
828 printf("ede_cfb_encrypt encrypt error\n");
829 for (i = 0; i < 24; i += 8)
830 printf("%s\n", pt(&(cfb_buf1[i])));
831 }
832 memcpy(cfb_tmp, cfb_iv, sizeof(cfb_iv));
833 n = 0;
834 des_ede3_cfb64_encrypt(cfb_buf1, cfb_buf2, (long)17, ks, ks, ks,
835 &cfb_tmp, &n, DES_DECRYPT);
836 des_ede3_cfb64_encrypt(&(cfb_buf1[17]), &(cfb_buf2[17]),
837 sizeof(plain) - 17, ks, ks, ks,
838 &cfb_tmp, &n, DES_DECRYPT);
839 if (memcmp(plain, cfb_buf2, sizeof(plain)) != 0) {
840 err = 1;
841 printf("ede_cfb_encrypt decrypt error\n");
842 for (i = 0; i < 24; i += 8)
843 printf("%s\n", pt(&(cfb_buf2[i])));
844 }
845 return (err);
846 }
847
848 # endif
849 #endif