/[mcrypt]/module-skipjack/doc/README
ViewVC logotype

Contents of /module-skipjack/doc/README

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1.1.1 - (show annotations) (vendor branch)
Sat Sep 16 01:18:19 2000 UTC (23 years, 6 months ago) by nmav
Branch: module-skipjack/, MAIN
CVS Tags: start, libmcrypt_2_4_16, HEAD
Changes since 1.1: +0 -0 lines
changed directories

1 To: cypherpunks@toad.com
2 From: Anonymous <nobody@replay.com>
3 Date: Thu, 14 Oct 1999 21:22:45 +0200 (CEST)
4 (This message did not originate from the Sender address above.It was remailed
5 automatically by anonymizing remailer software.Please report problems
6 or inappropriate use to theremailer administrator at abuse@replay.com.)
7
8 A patch to mcrypt-2.2.4, which is a general purpose encription package
9 written by Nikos Mavroyanopoulos <nmav@hellug.gr>, adding SKIPJACK.
10
11 Could someone forward this to him?
12
13 diff -c -d -N -r mcrypt-2.2.4/README mcrypt-2.2.4-skipjack/README
14 *** mcrypt-2.2.4/README Sat Jun 12 06:39:26 1999
15 --- mcrypt-2.2.4-skipjack/README Wed Oct 13 12:18:24 1999
16 ***************
17 *** 93,99 ****
18 Some details have been cleared up by the paper "Soviet Encryption
19 Algorithm" by Josef Pieprzyk and Leonid Tombak of the University
20 of Wollongong, New South Wales. (josef/leo@cs.adfa.oz.au)
21 !
22
23 When one of these algorithms is specified, The program prompts something like:
24 (for DES) Enter key (8 chars): ...
25 --- 93,103 ----
26 Some details have been cleared up by the paper "Soviet Encryption
27 Algorithm" by Josef Pieprzyk and Leonid Tombak of the University
28 of Wollongong, New South Wales. (josef/leo@cs.adfa.oz.au)
29 !
30 ! SKIPJACK:
31 ! SKIPJACK was designed by the US NSA. It was part of the ill-fated
32 ! "Clipper" Escrowed Encryption Standard (EES) (FIPS 185) proposal. It
33 ! operates on 64bit blocks and uses a key of 80 bits.
34
35 When one of these algorithms is specified, The program prompts something like:
36 (for DES) Enter key (8 chars): ...
37 diff -c -d -N -r mcrypt-2.2.4/doc/magic mcrypt-2.2.4-skipjack/doc/magic
38 *** mcrypt-2.2.4/doc/magic Sun Sep 19 10:12:12 1999
39 --- mcrypt-2.2.4-skipjack/doc/magic Tue Oct 12 01:12:03 1999
40 ***************
41 *** 35,40 ****
42 --- 35,41 ----
43 >3 byte 104 algorithm: MARS-128,
44 >3 byte 105 algorithm: MARS-192,
45 >3 byte 106 algorithm: MARS-256,
46 + >3 byte 107 algorithm: SKIPJACK,
47 >4 byte 0 mode: CBC,
48 >4 byte 1 mode: ECB,
49 >4 byte 2 mode: CFB,
50 diff -c -d -N -r mcrypt-2.2.4/doc/mcrypt.1 mcrypt-2.2.4-skipjack/doc/mcrypt.1
51 *** mcrypt-2.2.4/doc/mcrypt.1 Mon Oct 4 06:25:09 1999
52 --- mcrypt-2.2.4-skipjack/doc/mcrypt.1 Wed Oct 13 12:15:33 1999
53 ***************
54 *** 172,177 ****
55 --- 172,182 ----
56 family of ciphers and provides for a block size of 128bits and 128, 192
57 and 256 bits key length(only 256bits in mcrypt).
58
59 + .B SKIPJACK:
60 + SKIPJACK was designed by the US NSA. It was part of the ill-fated
61 + "Clipper" Escrowed Encryption Standard (EES) (FIPS 185) proposal. It
62 + operates on 64bit blocks and uses a key of 80 bits.
63 +
64 .SH HINTS
65 By default,
66 .I mcrypt
67 diff -c -d -N -r mcrypt-2.2.4/doc/mcrypt.texi mcrypt-2.2.4-skipjack/doc/mcrypt.texi
68 *** mcrypt-2.2.4/doc/mcrypt.texi Mon Jun 28 15:12:18 1999
69 --- mcrypt-2.2.4-skipjack/doc/mcrypt.texi Wed Oct 13 12:16:22 1999
70 ***************
71 *** 247,252 ****
72 --- 247,257 ----
73 family of ciphers and provides for a block size of 128bits and 128, 192
74 and 256 bits key length(only 256bits in mcrypt).
75
76 + @item SKIPJACK:
77 + SKIPJACK was designed by the US NSA. It was part of the ill-fated
78 + "Clipper" Escrowed Encryption Standard (EES) (FIPS 185) proposal. It
79 + operates on 64bit blocks and uses a key of 80 bits.
80 +
81 All the above algorithms support these modes of encryption:
82
83 @item ECB:
84 diff -c -d -N -r mcrypt-2.2.4/libmcrypt/lib/Makefile.am mcrypt-2.2.4-skipjack/libmcrypt/lib/Makefile.am
85 *** mcrypt-2.2.4/libmcrypt/lib/Makefile.am Mon Oct 4 06:18:53 1999
86 --- mcrypt-2.2.4-skipjack/libmcrypt/lib/Makefile.am Tue Oct 12 01:21:20 1999
87 ***************
88 *** 1,8 ****
89 ## Process this file with automake to produce Makefile.in
90
91 include_HEADERS = mcrypt.h
92 ! EXTRA_DIST = rijndael.h debug.h twofish.h loki97.h saferplus.h cast-256.h sha1.h libdefs.h des.h 3-way.h safer.h gost.h blowfish.h mcrypt.h cast-128.h tean.h swap.h bzero.h xmemory.h rc2.h rc6.h idea.h cast-128_sboxes.h
93 lib_LTLIBRARIES = libmcrypt.la
94 ! libmcrypt_la_SOURCES = rijndael.c debug.c loki97.c saferplus.c cast-256.c mcrypt_extra.c des.c 3-way.c safer.c gost.c blowfish.c mcrypt.c cast-128.c sha1.c tean.c swap.c bzero.c twofish.c xmemory.c rc2.c rc6.c idea.c md5.h md5.c
95 libmcrypt_la_LDFLAGS = -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) \
96 -release $(LT_RELEASE)
97 --- 1,8 ----
98 ## Process this file with automake to produce Makefile.in
99
100 include_HEADERS = mcrypt.h
101 ! EXTRA_DIST = rijndael.h debug.h twofish.h loki97.h saferplus.h cast-256.h sha1.h libdefs.h des.h 3-way.h safer.h gost.h blowfish.h mcrypt.h cast-128.h tean.h swap.h bzero.h xmemory.h rc2.h rc6.h idea.h skipjack.h cast-128_sboxes.h
102 lib_LTLIBRARIES = libmcrypt.la
103 ! libmcrypt_la_SOURCES = rijndael.c debug.c loki97.c saferplus.c cast-256.c mcrypt_extra.c des.c 3-way.c safer.c gost.c blowfish.c mcrypt.c cast-128.c sha1.c tean.c swap.c bzero.c twofish.c xmemory.c rc2.c rc6.c idea.c skipjack.c md5.h md5.c
104 libmcrypt_la_LDFLAGS = -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) \
105 -release $(LT_RELEASE)
106 diff -c -d -N -r mcrypt-2.2.4/libmcrypt/lib/Makefile.in mcrypt-2.2.4-skipjack/libmcrypt/lib/Makefile.in
107 *** mcrypt-2.2.4/libmcrypt/lib/Makefile.in Mon Oct 11 13:21:14 1999
108 --- mcrypt-2.2.4-skipjack/libmcrypt/lib/Makefile.in Wed Oct 13 14:51:11 1999
109 ***************
110 *** 81,89 ****
111 VERSION = @VERSION@
112
113 include_HEADERS = mcrypt.h
114 ! EXTRA_DIST = rijndael.h debug.h twofish.h loki97.h saferplus.h cast-256.h sha1.h libdefs.h des.h 3-way.h safer.h gost.h blowfish.h mcrypt.h cast-128.h tean.h swap.h bzero.h xmemory.h rc2.h rc6.h idea.h cast-128_sboxes.h
115 lib_LTLIBRARIES = libmcrypt.la
116 ! libmcrypt_la_SOURCES = rijndael.c debug.c loki97.c saferplus.c cast-256.c mcrypt_extra.c des.c 3-way.c safer.c gost.c blowfish.c mcrypt.c cast-128.c sha1.c tean.c swap.c bzero.c twofish.c xmemory.c rc2.c rc6.c idea.c md5.h md5.c
117 libmcrypt_la_LDFLAGS = -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) -release $(LT_RELEASE)
118
119 mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
120 --- 81,89 ----
121 VERSION = @VERSION@
122
123 include_HEADERS = mcrypt.h
124 ! EXTRA_DIST = rijndael.h debug.h twofish.h loki97.h saferplus.h cast-256.h sha1.h libdefs.h des.h 3-way.h safer.h gost.h blowfish.h mcrypt.h cast-128.h tean.h swap.h bzero.h xmemory.h rc2.h rc6.h idea.h cast-128_sboxes.h skipjack.h
125 lib_LTLIBRARIES = libmcrypt.la
126 ! libmcrypt_la_SOURCES = rijndael.c debug.c loki97.c saferplus.c cast-256.c mcrypt_extra.c des.c 3-way.c safer.c gost.c blowfish.c mcrypt.c cast-128.c sha1.c tean.c swap.c bzero.c twofish.c xmemory.c rc2.c rc6.c idea.c md5.h md5.c skipjack.c
127 libmcrypt_la_LDFLAGS = -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) -release $(LT_RELEASE)
128
129 mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
130 ***************
131 *** 100,106 ****
132 libmcrypt_la_OBJECTS = rijndael.lo debug.lo loki97.lo saferplus.lo \
133 cast-256.lo mcrypt_extra.lo des.lo 3-way.lo safer.lo gost.lo \
134 blowfish.lo mcrypt.lo cast-128.lo sha1.lo tean.lo swap.lo bzero.lo \
135 ! twofish.lo xmemory.lo rc2.lo rc6.lo idea.lo md5.lo
136 CFLAGS = @CFLAGS@
137 COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
138 LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
139 --- 100,106 ----
140 libmcrypt_la_OBJECTS = rijndael.lo debug.lo loki97.lo saferplus.lo \
141 cast-256.lo mcrypt_extra.lo des.lo 3-way.lo safer.lo gost.lo \
142 blowfish.lo mcrypt.lo cast-128.lo sha1.lo tean.lo swap.lo bzero.lo \
143 ! twofish.lo xmemory.lo rc2.lo rc6.lo idea.lo md5.lo skipjack.lo
144 CFLAGS = @CFLAGS@
145 COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
146 LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
147 ***************
148 *** 287,292 ****
149 --- 287,293 ----
150 swap.lo swap.o : swap.c libdefs.h ../config.h bzero.h swap.h xmemory.h
151 tean.lo tean.o : tean.c libdefs.h ../config.h swap.h
152 twofish.lo twofish.o : twofish.c libdefs.h ../config.h swap.h twofish.h
153 + skipjack.lo skipjack.o : skipjack.c skipjack.h ../config.h
154 xmemory.lo xmemory.o : xmemory.c libdefs.h ../config.h bzero.h xmemory.h
155
156 info-am:
157 diff -c -d -N -r mcrypt-2.2.4/libmcrypt/lib/mcrypt.c mcrypt-2.2.4-skipjack/libmcrypt/lib/mcrypt.c
158 *** mcrypt-2.2.4/libmcrypt/lib/mcrypt.c Mon Oct 4 06:56:57 1999
159 --- mcrypt-2.2.4-skipjack/libmcrypt/lib/mcrypt.c Thu Oct 14 11:09:38 1999
160 ***************
161 *** 40,45 ****
162 --- 40,46 ----
163 #include <saferplus.h>
164 #include <loki97.h>
165 #include <rijndael.h>
166 + #include <skipjack.h>
167
168 /* I think now is re-entrant */
169
170 ***************
171 *** 298,303 ****
172 --- 299,305 ----
173
174 case ThreeWAY:
175 case TEAN:
176 + case SKIPJACK:
177 return thread;
178 break;
179
180 ***************
181 *** 425,430 ****
182 --- 427,438 ----
183 return 0;
184 break;
185
186 + case SKIPJACK:
187 + _mcrypt_skipjack_encrypt((unsigned char *) keyword_given[thread],
188 + (unsigned char *) plaintext);
189 + return 0;
190 + break;
191 +
192 default:
193 return 0;
194 }
195 ***************
196 *** 471,477 ****
197 case RC2_128:
198 case RC2_256:
199 case RC2_1024:
200 ! _mcrypt_rc2_decrypt((void *) akey[thread],
201 (void *) plaintext);
202 return 0;
203 break;
204 --- 479,485 ----
205 case RC2_128:
206 case RC2_256:
207 case RC2_1024:
208 ! _mcrypt_rc2_decrypt((void *) akey[thread],
209 (void *) plaintext);
210 return 0;
211 break;
212 ***************
213 *** 545,550 ****
214 --- 553,564 ----
215 return 0;
216 break;
217
218 + case SKIPJACK:
219 + _mcrypt_skipjack_decrypt((unsigned char *) keyword_given[thread],
220 + (unsigned char *) plaintext);
221 + return 0;
222 + break;
223 +
224 default:
225 return 0;
226 }
227 ***************
228 *** 621,626 ****
229 --- 635,641 ----
230 case TEAN:
231 case GOST:
232 case ThreeWAY:
233 + case SKIPJACK:
234 break;
235
236 case CAST128:
237 diff -c -d -N -r mcrypt-2.2.4/libmcrypt/lib/mcrypt.h mcrypt-2.2.4-skipjack/libmcrypt/lib/mcrypt.h
238 *** mcrypt-2.2.4/libmcrypt/lib/mcrypt.h Sun Sep 19 10:02:18 1999
239 --- mcrypt-2.2.4-skipjack/libmcrypt/lib/mcrypt.h Tue Oct 12 01:15:23 1999
240 ***************
241 *** 52,57 ****
242 --- 52,58 ----
243 #define MARS128 104
244 #define MARS192 105
245 #define MARS256 106
246 + #define SKIPJACK 107
247
248 #define CBC 0
249 #define ECB 1
250 diff -c -d -N -r mcrypt-2.2.4/libmcrypt/lib/mcrypt_extra.c mcrypt-2.2.4-skipjack/libmcrypt/lib/mcrypt_extra.c
251 *** mcrypt-2.2.4/libmcrypt/lib/mcrypt_extra.c Wed Oct 6 03:52:20 1999
252 --- mcrypt-2.2.4-skipjack/libmcrypt/lib/mcrypt_extra.c Thu Oct 14 10:31:44 1999
253 ***************
254 *** 55,60 ****
255 --- 55,61 ----
256 case RC2_1024:
257 case RC2_128:
258 case RC2_256:
259 + case SKIPJACK:
260 return 8;
261 break;
262
263 ***************
264 *** 185,190 ****
265 --- 186,195 ----
266 return 16;
267 break;
268
269 + case SKIPJACK:
270 + return 10;
271 + break;
272 +
273 default:
274 return 0;
275 }
276 ***************
277 *** 332,337 ****
278 --- 337,346 ----
279 strcpy(x, "xTEA");
280 return x;
281 break;
282 + case SKIPJACK:
283 + strcpy(x, "SKIPJACK");
284 + return x;
285 + break;
286 }
287 return NULL;
288
289 ***************
290 *** 371,376 ****
291 --- 380,386 ----
292 case RIJNDAEL128:
293 case RIJNDAEL192:
294 case RIJNDAEL256:
295 + case SKIPJACK:
296
297 case LOKI97:
298 return 0;
299 diff -c -d -N -r mcrypt-2.2.4/libmcrypt/lib/skipjack.c mcrypt-2.2.4-skipjack/libmcrypt/lib/skipjack.c
300 *** mcrypt-2.2.4/libmcrypt/lib/skipjack.c Wed Dec 31 16:00:00 1969
301 --- mcrypt-2.2.4-skipjack/libmcrypt/lib/skipjack.c Thu Oct 14 11:30:34 1999
302 ***************
303 *** 0 ****
304 --- 1,160 ----
305 + /* skipjack.c */
306 +
307 + #include <assert.h>
308 + #include <string.h>
309 +
310 + #include "skipjack.h"
311 +
312 + #define BLOCKSIZE 8
313 + #define KEYSIZE 10
314 +
315 + static const unsigned char F[] = {
316 + 0xA3, 0xD7, 0x09, 0x83, 0xF8, 0x48, 0xF6, 0xF4,
317 + 0xB3, 0x21, 0x15, 0x78, 0x99, 0xB1, 0xAF, 0xF9,
318 + 0xE7, 0x2D, 0x4D, 0x8A, 0xCE, 0x4C, 0xCA, 0x2E,
319 + 0x52, 0x95, 0xD9, 0x1E, 0x4E, 0x38, 0x44, 0x28,
320 + 0x0A, 0xDF, 0x02, 0xA0, 0x17, 0xF1, 0x60, 0x68,
321 + 0x12, 0xB7, 0x7A, 0xC3, 0xE9, 0xFA, 0x3D, 0x53,
322 + 0x96, 0x84, 0x6B, 0xBA, 0xF2, 0x63, 0x9A, 0x19,
323 + 0x7C, 0xAE, 0xE5, 0xF5, 0xF7, 0x16, 0x6A, 0xA2,
324 + 0x39, 0xB6, 0x7B, 0x0F, 0xC1, 0x93, 0x81, 0x1B,
325 + 0xEE, 0xB4, 0x1A, 0xEA, 0xD0, 0x91, 0x2F, 0xB8,
326 + 0x55, 0xB9, 0xDA, 0x85, 0x3F, 0x41, 0xBF, 0xE0,
327 + 0x5A, 0x58, 0x80, 0x5F, 0x66, 0x0B, 0xD8, 0x90,
328 + 0x35, 0xD5, 0xC0, 0xA7, 0x33, 0x06, 0x65, 0x69,
329 + 0x45, 0x00, 0x94, 0x56, 0x6D, 0x98, 0x9B, 0x76,
330 + 0x97, 0xFC, 0xB2, 0xC2, 0xB0, 0xFE, 0xDB, 0x20,
331 + 0xE1, 0xEB, 0xD6, 0xE4, 0xDD, 0x47, 0x4A, 0x1D,
332 + 0x42, 0xED, 0x9E, 0x6E, 0x49, 0x3C, 0xCD, 0x43,
333 + 0x27, 0xD2, 0x07, 0xD4, 0xDE, 0xC7, 0x67, 0x18,
334 + 0x89, 0xCB, 0x30, 0x1F, 0x8D, 0xC6, 0x8F, 0xAA,
335 + 0xC8, 0x74, 0xDC, 0xC9, 0x5D, 0x5C, 0x31, 0xA4,
336 + 0x70, 0x88, 0x61, 0x2C, 0x9F, 0x0D, 0x2B, 0x87,
337 + 0x50, 0x82, 0x54, 0x64, 0x26, 0x7D, 0x03, 0x40,
338 + 0x34, 0x4B, 0x1C, 0x73, 0xD1, 0xC4, 0xFD, 0x3B,
339 + 0xCC, 0xFB, 0x7F, 0xAB, 0xE6, 0x3E, 0x5B, 0xA5,
340 + 0xAD, 0x04, 0x23, 0x9C, 0x14, 0x51, 0x22, 0xF0,
341 + 0x29, 0x79, 0x71, 0x7E, 0xFF, 0x8C, 0x0E, 0xE2,
342 + 0x0C, 0xEF, 0xBC, 0x72, 0x75, 0x6F, 0x37, 0xA1,
343 + 0xEC, 0xD3, 0x8E, 0x62, 0x8B, 0x86, 0x10, 0xE8,
344 + 0x08, 0x77, 0x11, 0xBE, 0x92, 0x4F, 0x24, 0xC5,
345 + 0x32, 0x36, 0x9D, 0xCF, 0xF3, 0xA6, 0xBB, 0xAC,
346 + 0x5E, 0x6C, 0xA9, 0x13, 0x57, 0x25, 0xB5, 0xE3,
347 + 0xBD, 0xA8, 0x3A, 0x01, 0x05, 0x59, 0x2A, 0x46
348 + };
349 +
350 + void g (unsigned char *key, int *i,
351 + unsigned char *high, unsigned char *low) {
352 + (*high) ^= F[(*low) ^ key[*i]];
353 + (*i)++; (*i) %= KEYSIZE;
354 + (*low) ^= F[(*high) ^ key[*i]];
355 + (*i)++; (*i) %= KEYSIZE;
356 + (*high) ^= F[(*low) ^ key[*i]];
357 + (*i)++; (*i) %= KEYSIZE;
358 + (*low) ^= F[(*high) ^ key[*i]];
359 + (*i)++; (*i) %= KEYSIZE;
360 + }
361 +
362 + void g_inverse (unsigned char *key, int *i,
363 + unsigned char *high, unsigned char *low) {
364 + (*low) ^= F[(*high) ^ key[(*i)]];
365 + (*i)--; if ((*i) < 0) { (*i) = KEYSIZE - 1; }
366 + (*high) ^= F[(*low) ^ key[(*i)]];
367 + (*i)--; if ((*i) < 0) { (*i) = KEYSIZE - 1; }
368 + (*low) ^= F[(*high) ^ key[(*i)]];
369 + (*i)--; if ((*i) < 0) { (*i) = KEYSIZE - 1; }
370 + (*high) ^= F[(*low) ^ key[(*i)]];
371 + (*i)--; if ((*i) < 0) { (*i) = KEYSIZE - 1; }
372 + }
373 +
374 + void _mcrypt_skipjack_encrypt (unsigned char *key, unsigned char *block) {
375 + int i = 0;
376 + unsigned char c = 0;
377 + unsigned char temp[2];
378 +
379 + while (c < 32) {
380 + while (c % 16 != 8) {
381 + c++;
382 + // Temp := Ciphertext(6 .. 7);
383 + memcpy(&(temp[0]), &(block[6]), 2);
384 + // Ciphertext(2 .. 7) := Ciphertext(0 .. 5);
385 + memmove(&(block[2]), &(block[0]), BLOCKSIZE-2);
386 + // G(Key, I, Ciphertext(2), Ciphertext(3));
387 + g(key, &i, &(block[2]), &(block[3]));
388 + // Ciphertext(0) := Temp(0) xor Ciphertext(2);
389 + block[0] = temp[0] ^ block[2];
390 + // Ciphertext(1) := Temp(1) xor Ciphertext(3) xor Counter;
391 + block[1] = temp[1] ^ block[3] ^ c;
392 + }
393 + while (c % 16 != 0) {
394 + c++;
395 + // Temp := Ciphertext(6 .. 7);
396 + memcpy(&(temp[0]), &(block[6]), 2);
397 + // Ciphertext(2 .. 7) := Ciphertext(0 .. 5);
398 + memmove(&(block[2]), &(block[0]), BLOCKSIZE-2);
399 + // Ciphertext(4) := Ciphertext(4) xor Ciphertext(0);
400 + block[4] ^= block[0];
401 + // Ciphertext(5) := Ciphertext(5) xor Ciphertext(1) xor Counter;
402 + block[5] = block[5] ^ block[1] ^ c;
403 + // G(Key, I, Ciphertext(2), Ciphertext(3));
404 + g(key, &i, &(block[2]), &(block[3]));
405 + // Ciphertext(0 .. 1) := Temp;
406 + memcpy(&(block[0]), &(temp[0]), 2);
407 + }
408 + }
409 + }
410 +
411 + void _mcrypt_skipjack_decrypt (unsigned char *key, unsigned char *block) {
412 + int i = (4 * 4 * 8 - 1) % KEYSIZE;
413 + unsigned char c = 4 * 8;
414 + unsigned char temp[2];
415 +
416 + while (c > 0) {
417 + while (c % 16 != 8) {
418 + // Temp := Plaintext(0 .. 1);
419 + memcpy(&(temp[0]), &(block[0]), 2);
420 + // Plaintext(0 .. 5) := Plaintext(2 .. 7);
421 + memmove(&(block[0]), &(block[2]), BLOCKSIZE-2);
422 + // G_Inverse(Key, I, Plaintext(0), Plaintext(1));
423 + g_inverse(key, &i, &(block[0]), &(block[1]));
424 + // Plaintext(2) := Plaintext(2) xor Plaintext(0);
425 + block[2] = block[2] ^ block[0];
426 + // Plaintext(3) := Plaintext(3) xor Plaintext(1) xor Counter;
427 + block[3] = block[3] ^ block[1] ^ c;
428 + // Plaintext(6 .. 7) := Temp;
429 + memcpy(&(block[6]), &(temp[0]), 2);
430 + c--;
431 + }
432 + while (c % 16 != 0) {
433 + // Temp(0) := Plaintext(0) xor Plaintext(2);
434 + temp[0] = block[0] ^ block[2];
435 + // Temp(1) := Plaintext(1) xor Plaintext(3) xor Counter;
436 + temp[1] = block[1] ^ block[3] ^ c;
437 + // Plaintext(0 .. 5) := Plaintext(2 .. 7);
438 + memmove(&(block[0]), &(block[2]), BLOCKSIZE-2);
439 + // G_Inverse(Key, I, Plaintext(0), Plaintext(1));
440 + g_inverse(key, &i, &(block[0]), &(block[1]));
441 + // Plaintext(6 .. 7) := Temp;
442 + memcpy(&(block[6]), &(temp[0]), 2);
443 + c--;
444 + }
445 + }
446 + }
447 +
448 + void _mcrypt_skipjack_selftest (void) {
449 + unsigned char k[KEYSIZE] = { 0x00, 0x99, 0x88, 0x77, 0x66,
450 + 0x55, 0x44, 0x33, 0x22, 0x11};
451 + unsigned char bcler[BLOCKSIZE] = { 0x33, 0x22, 0x11, 0x00,
452 + 0xDD, 0xCC, 0xBB, 0xAA };
453 + unsigned char bciph[BLOCKSIZE] = { 0x25, 0x87, 0xCA, 0xE2,
454 + 0x7A, 0x12, 0xD3, 0x00 };
455 + unsigned char bwork[BLOCKSIZE];
456 +
457 + memcpy(bwork, bcler, BLOCKSIZE);
458 + _mcrypt_skipjack_encrypt (k, bwork);
459 + assert(memcmp(bciph, bwork, BLOCKSIZE) == 0);
460 + _mcrypt_skipjack_decrypt (k, bwork);
461 + assert(memcmp(bcler, bwork, BLOCKSIZE) == 0);
462 +
463 + return;
464 + }
465 diff -c -d -N -r mcrypt-2.2.4/libmcrypt/lib/skipjack.h mcrypt-2.2.4-skipjack/libmcrypt/lib/skipjack.h
466 *** mcrypt-2.2.4/libmcrypt/lib/skipjack.h Wed Dec 31 16:00:00 1969
467 --- mcrypt-2.2.4-skipjack/libmcrypt/lib/skipjack.h Thu Oct 14 09:06:34 1999
468 ***************
469 *** 0 ****
470 --- 1,3 ----
471 + void _mcrypt_skipjack_encrypt (unsigned char *key, unsigned char *block);
472 + void _mcrypt_skipjack_decrypt (unsigned char *key, unsigned char *block);
473 + void _mcrypt_skipjack_selftest (void);
474 diff -c -d -N -r mcrypt-2.2.4/tests/ciphertest mcrypt-2.2.4-skipjack/tests/ciphertest
475 *** mcrypt-2.2.4/tests/ciphertest Wed Oct 6 03:11:42 1999
476 --- mcrypt-2.2.4-skipjack/tests/ciphertest Thu Oct 14 09:59:44 1999
477 ***************
478 *** 8,13 ****
479 --- 8,16 ----
480 LD_LIBRARY_PATH=../libmcrypt/lib/.libs
481 export LD_LIBRARY_PATH
482
483 + ../src/mcrypt -q -k 1234567890 -a skipjack <TEST | ../src/mcrypt -q -d -k 1234567890 >TEST.skipjack
484 + if (diff TEST TEST.skipjack >/dev/null 2>&1) then (echo "SKIPJACK Ok.") else (echo "SKIPJACK Failed.") fi
485 +
486 ../src/mcrypt -q -k 1234567890 -a blowfish-448 <TEST | ../src/mcrypt -q -d -k 1234567890 >TEST.blowfish448
487 if (diff TEST TEST.blowfish448 >/dev/null 2>&1) then (echo "BLOWFISH-448 Ok.") else (echo "BLOWFISH-448 Failed.") fi
488
489 diff -c -d -N -r mcrypt-2.2.4/tests/ciphertest.new mcrypt-2.2.4-skipjack/tests/ciphertest.new
490 *** mcrypt-2.2.4/tests/ciphertest.new Mon Oct 4 06:16:26 1999
491 --- mcrypt-2.2.4-skipjack/tests/ciphertest.new Thu Oct 14 10:00:12 1999
492 ***************
493 *** 2,7 ****
494 --- 2,8 ----
495 LD_LIBRARY_PATH=../libmcrypt/lib/.libs
496 export LD_LIBRARY_PATH
497
498 + ../src/mcrypt -q -k 1234567890 -m ecb -a skipjack <TEST >test.skipjack
499 ../src/mcrypt -q -k 1234567890 -m ecb -a blowfish-448 <TEST >test.blowfish448
500 ../src/mcrypt -q -k 1234567890 -m ecb -a idea <TEST >test.idea
501 ../src/mcrypt -q -k 1234567890 -m ecb -a rc2-256 <TEST >test.rc2-256
502

webmaster@linux.gr
ViewVC Help
Powered by ViewVC 1.1.26