1 /*
2 * This file is part of FFmpeg.
3 *
4 * FFmpeg is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * FFmpeg is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with FFmpeg; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17 */
18
19 #include <stdint.h>
20 #include <stdio.h>
21 #include <stdlib.h>
22 #include <string.h>
23
26
27 #define NUM_VARIABLE_KEY_TESTS 34
28
29 /* plaintext bytes -- left halves */
31 0x00000000, 0xFFFFFFFF, 0x10000000, 0x11111111, 0x11111111,
32 0x01234567, 0x00000000, 0x01234567, 0x01A1D6D0, 0x5CD54CA8,
33 0x0248D438, 0x51454B58, 0x42FD4430, 0x059B5E08, 0x0756D8E0,
34 0x762514B8, 0x3BDD1190, 0x26955F68, 0x164D5E40, 0x6B056E18,
35 0x004BD6EF, 0x480D3900, 0x437540C8, 0x072D43A0, 0x02FE5577,
36 0x1D9D5C50, 0x30553228, 0x01234567, 0x01234567, 0x01234567,
37 0xFFFFFFFF, 0x00000000, 0x00000000, 0xFFFFFFFF
38 };
39
40 /* plaintext bytes -- right halves */
42 0x00000000, 0xFFFFFFFF, 0x00000001, 0x11111111, 0x11111111,
43 0x89ABCDEF, 0x00000000, 0x89ABCDEF, 0x39776742, 0x3DEF57DA,
44 0x06F67172, 0x2DDF440A, 0x59577FA2, 0x51CF143A, 0x774761D2,
45 0x29BF486A, 0x49372802, 0x35AF609A, 0x4F275232, 0x759F5CCA,
46 0x09176062, 0x6EE762F2, 0x698F3CFA, 0x77075292, 0x8117F12A,
47 0x18F728C2, 0x6D6F295A, 0x89ABCDEF, 0x89ABCDEF, 0x89ABCDEF,
48 0xFFFFFFFF, 0x00000000, 0x00000000, 0xFFFFFFFF
49 };
50
51 /* key bytes for variable key tests */
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
89 /* ciphertext bytes -- left halves */
91 0x4EF99745, 0x51866FD5, 0x7D856F9A, 0x2466DD87, 0x61F9C380,
92 0x7D0CC630, 0x4EF99745, 0x0ACEAB0F, 0x59C68245, 0xB1B8CC0B,
93 0x1730E577, 0xA25E7856, 0x353882B1, 0x48F4D088, 0x432193B7,
94 0x13F04154, 0x2EEDDA93, 0xD887E039, 0x5F99D04F, 0x4A057A3B,
95 0x452031C1, 0x7555AE39, 0x53C55F9C, 0x7A8E7BFA, 0xCF9C5D7A,
96 0xD1ABB290, 0x55CB3774, 0xFA34EC48, 0xA7907951, 0xC39E072D,
97 0x014933E0, 0xF21E9A77, 0x24594688, 0x6B5C5A9C
98 };
99
100 /* ciphertext bytes -- right halves */
102 0x6198DD78, 0xB85ECB8A, 0x613063F2, 0x8B963C9D, 0x2281B096,
103 0xAFDA1EC7, 0x6198DD78, 0xC6A0A28D, 0xEB05282B, 0x250F09A0,
104 0x8BEA1DA4, 0xCF2651EB, 0x09CE8F1A, 0x4C379918, 0x8951FC98,
105 0xD69D1AE5, 0xFFD39C79, 0x3C2DA6E3, 0x5B163969, 0x24D3977B,
106 0xE4FADA8E, 0xF59B87BD, 0xB49FC019, 0x937E89A3, 0x4986ADB5,
107 0x658BC778, 0xD13EF201, 0x47B268B2, 0x08EA3CAE, 0x9FAC631D,
108 0xCDAFF6E4, 0xB71C49BC, 0x5754369A, 0x5D9E0A5A
109 };
110
111 /* plaintext bytes */
113
115
116 /* ciphertext bytes */
118 0x32, 0x4E, 0xD0, 0xFE, 0xF4, 0x13, 0xA2, 0x03
119 };
120
122 0x53, 0x00, 0x40, 0x06, 0x63, 0xf2, 0x1d, 0x99,
123 0x3b, 0x9b, 0x27, 0x64, 0x46, 0xfd, 0x20, 0xc1,
124 };
125
126 #define IV "blowfish"
127
129 const uint8_t *
ref,
int len, uint8_t *iv,
int dir,
131 {
136 for (
i = 0;
i < 8*
len;
i++)
139 for (
i = 0;
i < 8*
len;
i++)
142 exit(1);
143 }
144 }
145
147 {
150 uint8_t
tmp[16], iv[8];
154 return 1;
155
157
170
173
176
179 printf(
"Test encryption failed.\n");
180 return 2;
181 }
182
185 printf(
"Test decryption failed.\n");
186 return 3;
187 }
188 }
189 printf(
"Test encryption/decryption success.\n");
191
192 return 0;
193 }
194