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