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