UltraGrid
UltraGrid Low-Latency High-Resolution Transmission System
Loading...
Searching...
No Matches
test_des.c
Go to the documentation of this file.
1/*
2 * FILE: test_des.c
3 * AUTHORS: Colin Perkins
4 *
5 * The test vectors and outline structure of this are taken from Eric
6 * Young's destest.c from libdes, version 3.00 (7 October 1993).
7 *
8 * Copyright (c) 2003-2004 University of Southern California
9 * Copyright (c) 1999-2000 University College London
10 * Copyright (c) 1993 Eric Young
11 * All rights reserved.
12 *
13 * Redistribution and use in source and binary forms, with or without
14 * modification, is permitted provided that the following conditions
15 * are met:
16 * 1. Redistributions of source code must retain the above copyright
17 * notice, this list of conditions and the following disclaimer.
18 * 2. Redistributions in binary form must reproduce the above copyright
19 * notice, this list of conditions and the following disclaimer in the
20 * documentation and/or other materials provided with the distribution.
21 * 3. All advertising materials mentioning features or use of this software
22 * must display the following acknowledgement:
23 * This product includes software developed by the Computer Science
24 * Department at University College London
25 * 4. Neither the name of the University nor of the Department may be used
26 * to endorse or promote products derived from this software without
27 * specific prior written permission.
28 * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND
29 * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
30 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
31 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE
32 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
33 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
34 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
35 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
36 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
37 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
38 * SUCH DAMAGE.
39 */
40
41#include "config.h"
42#include "config_unix.h"
43#include "config_win32.h"
44#include "debug.h"
45#include "crypto/crypt_des.h"
46#include "test_des.h"
47
48#define NUM_TESTS 36
49
50static unsigned char key_data[NUM_TESTS][8] = {
51 {0x12, 0x34, 0x57, 0x79, 0x9b, 0xbc, 0xdf, 0xf1},
52 {0x0e, 0x32, 0x92, 0x32, 0xea, 0x6d, 0x0d, 0x72},
53 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
54 {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
55 {0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
56 {0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11},
57 {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF},
58 {0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11},
59 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
60 {0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10},
61 {0x7C, 0xA1, 0x10, 0x45, 0x4A, 0x1A, 0x6E, 0x57},
62 {0x01, 0x31, 0xD9, 0x61, 0x9D, 0xC1, 0x37, 0x6E},
63 {0x07, 0xA1, 0x13, 0x3E, 0x4A, 0x0B, 0x26, 0x86},
64 {0x38, 0x49, 0x67, 0x4C, 0x26, 0x02, 0x31, 0x9E},
65 {0x04, 0xB9, 0x15, 0xBA, 0x43, 0xFE, 0xB5, 0xB6},
66 {0x01, 0x13, 0xB9, 0x70, 0xFD, 0x34, 0xF2, 0xCE},
67 {0x01, 0x70, 0xF1, 0x75, 0x46, 0x8F, 0xB5, 0xE6},
68 {0x43, 0x29, 0x7F, 0xAD, 0x38, 0xE3, 0x73, 0xFE},
69 {0x07, 0xA7, 0x13, 0x70, 0x45, 0xDA, 0x2A, 0x16},
70 {0x04, 0x68, 0x91, 0x04, 0xC2, 0xFD, 0x3B, 0x2F},
71 {0x37, 0xD0, 0x6B, 0xB5, 0x16, 0xCB, 0x75, 0x46},
72 {0x1F, 0x08, 0x26, 0x0D, 0x1A, 0xC2, 0x46, 0x5E},
73 {0x58, 0x40, 0x23, 0x64, 0x1A, 0xBA, 0x61, 0x76},
74 {0x02, 0x58, 0x16, 0x16, 0x46, 0x29, 0xB0, 0x07},
75 {0x49, 0x79, 0x3E, 0xBC, 0x79, 0xB3, 0x25, 0x8F},
76 {0x4F, 0xB0, 0x5E, 0x15, 0x15, 0xAB, 0x73, 0xA7},
77 {0x49, 0xE9, 0x5D, 0x6D, 0x4C, 0xA2, 0x29, 0xBF},
78 {0x01, 0x83, 0x10, 0xDC, 0x40, 0x9B, 0x26, 0xD6},
79 {0x1C, 0x58, 0x7F, 0x1C, 0x13, 0x92, 0x4F, 0xEF},
80 {0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01},
81 {0x1F, 0x1F, 0x1F, 0x1F, 0x0E, 0x0E, 0x0E, 0x0E},
82 {0xE0, 0xFE, 0xE0, 0xFE, 0xF1, 0xFE, 0xF1, 0xFE},
83 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
84 {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
85 {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF},
86 {0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10}
87};
88
89static unsigned char plain_data[NUM_TESTS][8] = {
90 {0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef},
91 {0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87},
92 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
93 {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
94 {0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01},
95 {0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11},
96 {0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11},
97 {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF},
98 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
99 {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF},
100 {0x01, 0xA1, 0xD6, 0xD0, 0x39, 0x77, 0x67, 0x42},
101 {0x5C, 0xD5, 0x4C, 0xA8, 0x3D, 0xEF, 0x57, 0xDA},
102 {0x02, 0x48, 0xD4, 0x38, 0x06, 0xF6, 0x71, 0x72},
103 {0x51, 0x45, 0x4B, 0x58, 0x2D, 0xDF, 0x44, 0x0A},
104 {0x42, 0xFD, 0x44, 0x30, 0x59, 0x57, 0x7F, 0xA2},
105 {0x05, 0x9B, 0x5E, 0x08, 0x51, 0xCF, 0x14, 0x3A},
106 {0x07, 0x56, 0xD8, 0xE0, 0x77, 0x47, 0x61, 0xD2},
107 {0x76, 0x25, 0x14, 0xB8, 0x29, 0xBF, 0x48, 0x6A},
108 {0x3B, 0xDD, 0x11, 0x90, 0x49, 0x37, 0x28, 0x02},
109 {0x26, 0x95, 0x5F, 0x68, 0x35, 0xAF, 0x60, 0x9A},
110 {0x16, 0x4D, 0x5E, 0x40, 0x4F, 0x27, 0x52, 0x32},
111 {0x6B, 0x05, 0x6E, 0x18, 0x75, 0x9F, 0x5C, 0xCA},
112 {0x00, 0x4B, 0xD6, 0xEF, 0x09, 0x17, 0x60, 0x62},
113 {0x48, 0x0D, 0x39, 0x00, 0x6E, 0xE7, 0x62, 0xF2},
114 {0x43, 0x75, 0x40, 0xC8, 0x69, 0x8F, 0x3C, 0xFA},
115 {0x07, 0x2D, 0x43, 0xA0, 0x77, 0x07, 0x52, 0x92},
116 {0x02, 0xFE, 0x55, 0x77, 0x81, 0x17, 0xF1, 0x2A},
117 {0x1D, 0x9D, 0x5C, 0x50, 0x18, 0xF7, 0x28, 0xC2},
118 {0x30, 0x55, 0x32, 0x28, 0x6D, 0x6F, 0x29, 0x5A},
119 {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF},
120 {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF},
121 {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF},
122 {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
123 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
124 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
125 {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}
126};
127
128static unsigned char crypt_data[NUM_TESTS][8] = {
129 {0x85, 0xe8, 0x13, 0x54, 0x0f, 0x0a, 0xb4, 0x05},
130 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
131 {0x8C, 0xA6, 0x4D, 0xE9, 0xC1, 0xB1, 0x23, 0xA7},
132 {0x73, 0x59, 0xB2, 0x16, 0x3E, 0x4E, 0xDC, 0x58},
133 {0x95, 0x8E, 0x6E, 0x62, 0x7A, 0x05, 0x55, 0x7B},
134 {0xF4, 0x03, 0x79, 0xAB, 0x9E, 0x0E, 0xC5, 0x33},
135 {0x17, 0x66, 0x8D, 0xFC, 0x72, 0x92, 0x53, 0x2D},
136 {0x8A, 0x5A, 0xE1, 0xF8, 0x1A, 0xB8, 0xF2, 0xDD},
137 {0x8C, 0xA6, 0x4D, 0xE9, 0xC1, 0xB1, 0x23, 0xA7},
138 {0xED, 0x39, 0xD9, 0x50, 0xFA, 0x74, 0xBC, 0xC4},
139 {0x69, 0x0F, 0x5B, 0x0D, 0x9A, 0x26, 0x93, 0x9B},
140 {0x7A, 0x38, 0x9D, 0x10, 0x35, 0x4B, 0xD2, 0x71},
141 {0x86, 0x8E, 0xBB, 0x51, 0xCA, 0xB4, 0x59, 0x9A},
142 {0x71, 0x78, 0x87, 0x6E, 0x01, 0xF1, 0x9B, 0x2A},
143 {0xAF, 0x37, 0xFB, 0x42, 0x1F, 0x8C, 0x40, 0x95},
144 {0x86, 0xA5, 0x60, 0xF1, 0x0E, 0xC6, 0xD8, 0x5B},
145 {0x0C, 0xD3, 0xDA, 0x02, 0x00, 0x21, 0xDC, 0x09},
146 {0xEA, 0x67, 0x6B, 0x2C, 0xB7, 0xDB, 0x2B, 0x7A},
147 {0xDF, 0xD6, 0x4A, 0x81, 0x5C, 0xAF, 0x1A, 0x0F},
148 {0x5C, 0x51, 0x3C, 0x9C, 0x48, 0x86, 0xC0, 0x88},
149 {0x0A, 0x2A, 0xEE, 0xAE, 0x3F, 0xF4, 0xAB, 0x77},
150 {0xEF, 0x1B, 0xF0, 0x3E, 0x5D, 0xFA, 0x57, 0x5A},
151 {0x88, 0xBF, 0x0D, 0xB6, 0xD7, 0x0D, 0xEE, 0x56},
152 {0xA1, 0xF9, 0x91, 0x55, 0x41, 0x02, 0x0B, 0x56},
153 {0x6F, 0xBF, 0x1C, 0xAF, 0xCF, 0xFD, 0x05, 0x56},
154 {0x2F, 0x22, 0xE4, 0x9B, 0xAB, 0x7C, 0xA1, 0xAC},
155 {0x5A, 0x6B, 0x61, 0x2C, 0xC2, 0x6C, 0xCE, 0x4A},
156 {0x5F, 0x4C, 0x03, 0x8E, 0xD1, 0x2B, 0x2E, 0x41},
157 {0x63, 0xFA, 0xC0, 0xD0, 0x34, 0xD9, 0xF7, 0x93},
158 {0x61, 0x7B, 0x3A, 0x0C, 0xE8, 0xF0, 0x71, 0x00},
159 {0xDB, 0x95, 0x86, 0x05, 0xF8, 0xC8, 0xC6, 0x06},
160 {0xED, 0xBF, 0xD1, 0xC6, 0x6C, 0x29, 0xCC, 0xC7},
161 {0x35, 0x55, 0x50, 0xB2, 0x15, 0x0E, 0x24, 0x51},
162 {0xCA, 0xAA, 0xAF, 0x4D, 0xEA, 0xF1, 0xDB, 0xAE},
163 {0xD5, 0xD4, 0x4F, 0xF7, 0x20, 0x68, 0x3D, 0x0D},
164 {0x2A, 0x2B, 0xB0, 0x08, 0xDF, 0x97, 0xC2, 0xF2}
165};
166
167static unsigned char cbc_key[8] =
168 { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef };
169static unsigned char cbc_iv[8] =
170 { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 };
171static unsigned char cbc_data[32] = "7654321 Now is the time for ";
172
173static unsigned char cbc_ok[32] = {
174 0xcc, 0xd1, 0x73, 0xff, 0xab, 0x20, 0x39, 0xf4,
175 0xac, 0xd8, 0xae, 0xfd, 0xdf, 0xd8, 0xa1, 0xeb,
176 0x46, 0x8e, 0x91, 0x15, 0x78, 0x88, 0xba, 0x68,
177 0x1d, 0x26, 0x93, 0x97, 0xf7, 0xfe, 0x62, 0xb4
178};
179
180int test_des(void)
181{
182 int i, j;
183 unsigned char key[8], plain[8], crypt[8], buffer[8];
184 unsigned char cbc_buffer[32], cbc_iv_buf[8];
185
186 printf
187 ("Testing DES in ECB mode .................................................. ");
188 fflush(stdout);
189 for (i = 0; i < NUM_TESTS; i++) {
190 for (j = 0; j < 8; j++) {
191 key[j] = key_data[i][j];
192 plain[j] = plain_data[i][j];
193 crypt[j] = crypt_data[i][j];
194 }
195 memcpy(buffer, crypt, 8);
196 qfDES_ECB_d(key, buffer, 8);
197 if (memcmp(buffer, plain, 8) != 0) {
198 printf("FAIL\n");
199 goto abort_ecb;
200 }
201 memcpy(buffer, plain, 8);
202 qfDES_ECB_e(key, buffer, 8);
203 if (memcmp(buffer, crypt, 8) != 0) {
204 printf("FAIL\n");
205 goto abort_ecb;
206 }
207 qfDES_ECB_d(key, buffer, 8);
208 if (memcmp(buffer, plain, 8) != 0) {
209 printf("FAIL\n");
210 goto abort_ecb;
211 }
212 }
213 printf("Ok\n");
214 abort_ecb:
215
216 printf
217 ("Testing DES in CBC mode .................................................. ");
218 fflush(stdout);
219 memcpy(cbc_buffer, cbc_data, 32);
220 memcpy(cbc_iv_buf, cbc_iv, 8);
221 qfDES_CBC_e(cbc_key, cbc_buffer, 32, cbc_iv_buf);
222 if (memcmp(cbc_buffer, cbc_ok, 32) != 0) {
223 printf("FAIL\n");
224 return -1;
225 }
226 memcpy(cbc_iv_buf, cbc_iv, 8);
227 qfDES_CBC_d(cbc_key, cbc_buffer, 32, cbc_iv_buf);
228 if (memcmp(cbc_buffer, cbc_data, 32) != 0) {
229 printf("FAIL\n");
230 return -1;
231 }
232 printf("Ok\n");
233 return 0;
234}
#define qfDES_ECB_e(_key, _data, _size)
Definition crypt_des.h:34
#define qfDES_ECB_d(_key, _data, _size)
Definition crypt_des.h:35
#define qfDES_CBC_e(_key, _data, _size, _initVec)
Definition crypt_des.h:37
#define qfDES_CBC_d(_key, _data, _size, _initVec)
Definition crypt_des.h:38
#define NUM_TESTS
Definition test_des.c:48
static unsigned char cbc_ok[32]
Definition test_des.c:173
static unsigned char cbc_iv[8]
Definition test_des.c:169
static unsigned char cbc_key[8]
Definition test_des.c:167
static unsigned char crypt_data[NUM_TESTS][8]
Definition test_des.c:128
static unsigned char key_data[NUM_TESTS][8]
Definition test_des.c:50
static unsigned char cbc_data[32]
Definition test_des.c:171
int test_des(void)
Definition test_des.c:180
static unsigned char plain_data[NUM_TESTS][8]
Definition test_des.c:89
const char * key
Definition cineform.cpp:125