Mercurial > gnulib
annotate lib/des.c @ 16358:a712776b11ce
maint: spelling fixes
author | Paul Eggert <eggert@cs.ucla.edu> |
---|---|
date | Sun, 05 Feb 2012 13:42:03 -0800 |
parents | 8250f2777afc |
children | bb182ee4a09d |
rev | line source |
---|---|
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
1 /* des.c --- DES and Triple-DES encryption/decryption Algorithm |
16201
8250f2777afc
maint: update all copyright year number ranges
Jim Meyering <meyering@redhat.com>
parents:
14079
diff
changeset
|
2 * Copyright (C) 1998-1999, 2001-2007, 2009-2012 Free Software Foundation, Inc. |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
3 * |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
4 * This file is free software; you can redistribute it and/or modify |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
5 * it under the terms of the GNU General Public License as published |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
6 * by the Free Software Foundation; either version 2, or (at your |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
7 * option) any later version. |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
8 * |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
9 * This file is distributed in the hope that it will be useful, but |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
10 * WITHOUT ANY WARRANTY; without even the implied warranty of |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
12 * General Public License for more details. |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
13 * |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
14 * You should have received a copy of the GNU General Public License |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
15 * along with this file; if not, write to the Free Software |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
17 * 02110-1301, USA. |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
18 * |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
19 */ |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
20 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
21 /* Adapted for gnulib by Simon Josefsson, based on Libgcrypt. */ |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
22 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
23 /* |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
24 * For a description of triple encryption, see: |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
25 * Bruce Schneier: Applied Cryptography. Second Edition. |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
26 * John Wiley & Sons, 1996. ISBN 0-471-12845-7. Pages 358 ff. |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
27 * This implementation is according to the definition of DES in FIPS |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
28 * PUB 46-2 from December 1993. |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
29 * |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
30 * Written by Michael Roth <mroth@nessie.de>, September 1998 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
31 */ |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
32 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
33 /* |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
34 * U S A G E |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
35 * =========== |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
36 * |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
37 * For DES or Triple-DES encryption/decryption you must initialize a proper |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
38 * encryption context with a key. |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
39 * |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
40 * A DES key is 64bit wide but only 56bits of the key are used. The remaining |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
41 * bits are parity bits and they will _not_ checked in this implementation, but |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
42 * simply ignored. |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
43 * |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
44 * For Triple-DES you could use either two 64bit keys or three 64bit keys. |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
45 * The parity bits will _not_ checked, too. |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
46 * |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
47 * After initializing a context with a key you could use this context to |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
48 * encrypt or decrypt data in 64bit blocks in Electronic Codebook Mode. |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
49 * |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
50 * DES Example |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
51 * ----------- |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
52 * unsigned char key[8]; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
53 * unsigned char plaintext[8]; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
54 * unsigned char ciphertext[8]; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
55 * unsigned char recoverd[8]; |
8433
51634bc628de
* lib/quotearg.c: Include <wctype.h> early, before the definition of
Paul Eggert <eggert@cs.ucla.edu>
parents:
7584
diff
changeset
|
56 * gl_des_ctx context; |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
57 * |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
58 * // Fill 'key' and 'plaintext' with some data |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
59 * .... |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
60 * |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
61 * // Set up the DES encryption context |
8441 | 62 * gl_des_setkey(&context, key); |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
63 * |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
64 * // Encrypt the plaintext |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
65 * des_ecb_encrypt(&context, plaintext, ciphertext); |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
66 * |
16358 | 67 * // To recover the original plaintext from ciphertext use: |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
68 * des_ecb_decrypt(&context, ciphertext, recoverd); |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
69 * |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
70 * |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
71 * Triple-DES Example |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
72 * ------------------ |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
73 * unsigned char key1[8]; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
74 * unsigned char key2[8]; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
75 * unsigned char key3[8]; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
76 * unsigned char plaintext[8]; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
77 * unsigned char ciphertext[8]; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
78 * unsigned char recoverd[8]; |
8433
51634bc628de
* lib/quotearg.c: Include <wctype.h> early, before the definition of
Paul Eggert <eggert@cs.ucla.edu>
parents:
7584
diff
changeset
|
79 * gl_3des_ctx context; |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
80 * |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
81 * // If you would like to use two 64bit keys, fill 'key1' and'key2' |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
82 * // then setup the encryption context: |
8433
51634bc628de
* lib/quotearg.c: Include <wctype.h> early, before the definition of
Paul Eggert <eggert@cs.ucla.edu>
parents:
7584
diff
changeset
|
83 * gl_3des_set2keys(&context, key1, key2); |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
84 * |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
85 * // To use three 64bit keys with Triple-DES use: |
8433
51634bc628de
* lib/quotearg.c: Include <wctype.h> early, before the definition of
Paul Eggert <eggert@cs.ucla.edu>
parents:
7584
diff
changeset
|
86 * gl_3des_set3keys(&context, key1, key2, key3); |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
87 * |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
88 * // Encrypting plaintext with Triple-DES |
8433
51634bc628de
* lib/quotearg.c: Include <wctype.h> early, before the definition of
Paul Eggert <eggert@cs.ucla.edu>
parents:
7584
diff
changeset
|
89 * gl_3des_ecb_encrypt(&context, plaintext, ciphertext); |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
90 * |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
91 * // Decrypting ciphertext to recover the plaintext with Triple-DES |
8433
51634bc628de
* lib/quotearg.c: Include <wctype.h> early, before the definition of
Paul Eggert <eggert@cs.ucla.edu>
parents:
7584
diff
changeset
|
92 * gl_3des_ecb_decrypt(&context, ciphertext, recoverd); |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
93 */ |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
94 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
95 |
7584
a88f85e4728f
* lib/arcfour.c: Assume config.h.
Eric Blake <ebb9@byu.net>
parents:
6782
diff
changeset
|
96 #include <config.h> |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
97 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
98 #include "des.h" |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
99 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
100 #include <stdio.h> |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
101 #include <string.h> /* memcpy, memcmp */ |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
102 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
103 /* |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
104 * The s-box values are permuted according to the 'primitive function P' |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
105 * and are rotated one bit to the left. |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
106 */ |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
107 static const uint32_t sbox1[64] = { |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
108 0x01010400, 0x00000000, 0x00010000, 0x01010404, 0x01010004, 0x00010404, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
109 0x00000004, 0x00010000, 0x00000400, 0x01010400, 0x01010404, 0x00000400, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
110 0x01000404, 0x01010004, 0x01000000, 0x00000004, 0x00000404, 0x01000400, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
111 0x01000400, 0x00010400, 0x00010400, 0x01010000, 0x01010000, 0x01000404, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
112 0x00010004, 0x01000004, 0x01000004, 0x00010004, 0x00000000, 0x00000404, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
113 0x00010404, 0x01000000, 0x00010000, 0x01010404, 0x00000004, 0x01010000, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
114 0x01010400, 0x01000000, 0x01000000, 0x00000400, 0x01010004, 0x00010000, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
115 0x00010400, 0x01000004, 0x00000400, 0x00000004, 0x01000404, 0x00010404, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
116 0x01010404, 0x00010004, 0x01010000, 0x01000404, 0x01000004, 0x00000404, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
117 0x00010404, 0x01010400, 0x00000404, 0x01000400, 0x01000400, 0x00000000, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
118 0x00010004, 0x00010400, 0x00000000, 0x01010004 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
119 }; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
120 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
121 static const uint32_t sbox2[64] = { |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
122 0x80108020, 0x80008000, 0x00008000, 0x00108020, 0x00100000, 0x00000020, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
123 0x80100020, 0x80008020, 0x80000020, 0x80108020, 0x80108000, 0x80000000, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
124 0x80008000, 0x00100000, 0x00000020, 0x80100020, 0x00108000, 0x00100020, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
125 0x80008020, 0x00000000, 0x80000000, 0x00008000, 0x00108020, 0x80100000, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
126 0x00100020, 0x80000020, 0x00000000, 0x00108000, 0x00008020, 0x80108000, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
127 0x80100000, 0x00008020, 0x00000000, 0x00108020, 0x80100020, 0x00100000, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
128 0x80008020, 0x80100000, 0x80108000, 0x00008000, 0x80100000, 0x80008000, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
129 0x00000020, 0x80108020, 0x00108020, 0x00000020, 0x00008000, 0x80000000, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
130 0x00008020, 0x80108000, 0x00100000, 0x80000020, 0x00100020, 0x80008020, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
131 0x80000020, 0x00100020, 0x00108000, 0x00000000, 0x80008000, 0x00008020, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
132 0x80000000, 0x80100020, 0x80108020, 0x00108000 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
133 }; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
134 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
135 static const uint32_t sbox3[64] = { |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
136 0x00000208, 0x08020200, 0x00000000, 0x08020008, 0x08000200, 0x00000000, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
137 0x00020208, 0x08000200, 0x00020008, 0x08000008, 0x08000008, 0x00020000, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
138 0x08020208, 0x00020008, 0x08020000, 0x00000208, 0x08000000, 0x00000008, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
139 0x08020200, 0x00000200, 0x00020200, 0x08020000, 0x08020008, 0x00020208, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
140 0x08000208, 0x00020200, 0x00020000, 0x08000208, 0x00000008, 0x08020208, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
141 0x00000200, 0x08000000, 0x08020200, 0x08000000, 0x00020008, 0x00000208, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
142 0x00020000, 0x08020200, 0x08000200, 0x00000000, 0x00000200, 0x00020008, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
143 0x08020208, 0x08000200, 0x08000008, 0x00000200, 0x00000000, 0x08020008, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
144 0x08000208, 0x00020000, 0x08000000, 0x08020208, 0x00000008, 0x00020208, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
145 0x00020200, 0x08000008, 0x08020000, 0x08000208, 0x00000208, 0x08020000, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
146 0x00020208, 0x00000008, 0x08020008, 0x00020200 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
147 }; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
148 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
149 static const uint32_t sbox4[64] = { |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
150 0x00802001, 0x00002081, 0x00002081, 0x00000080, 0x00802080, 0x00800081, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
151 0x00800001, 0x00002001, 0x00000000, 0x00802000, 0x00802000, 0x00802081, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
152 0x00000081, 0x00000000, 0x00800080, 0x00800001, 0x00000001, 0x00002000, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
153 0x00800000, 0x00802001, 0x00000080, 0x00800000, 0x00002001, 0x00002080, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
154 0x00800081, 0x00000001, 0x00002080, 0x00800080, 0x00002000, 0x00802080, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
155 0x00802081, 0x00000081, 0x00800080, 0x00800001, 0x00802000, 0x00802081, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
156 0x00000081, 0x00000000, 0x00000000, 0x00802000, 0x00002080, 0x00800080, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
157 0x00800081, 0x00000001, 0x00802001, 0x00002081, 0x00002081, 0x00000080, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
158 0x00802081, 0x00000081, 0x00000001, 0x00002000, 0x00800001, 0x00002001, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
159 0x00802080, 0x00800081, 0x00002001, 0x00002080, 0x00800000, 0x00802001, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
160 0x00000080, 0x00800000, 0x00002000, 0x00802080 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
161 }; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
162 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
163 static const uint32_t sbox5[64] = { |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
164 0x00000100, 0x02080100, 0x02080000, 0x42000100, 0x00080000, 0x00000100, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
165 0x40000000, 0x02080000, 0x40080100, 0x00080000, 0x02000100, 0x40080100, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
166 0x42000100, 0x42080000, 0x00080100, 0x40000000, 0x02000000, 0x40080000, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
167 0x40080000, 0x00000000, 0x40000100, 0x42080100, 0x42080100, 0x02000100, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
168 0x42080000, 0x40000100, 0x00000000, 0x42000000, 0x02080100, 0x02000000, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
169 0x42000000, 0x00080100, 0x00080000, 0x42000100, 0x00000100, 0x02000000, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
170 0x40000000, 0x02080000, 0x42000100, 0x40080100, 0x02000100, 0x40000000, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
171 0x42080000, 0x02080100, 0x40080100, 0x00000100, 0x02000000, 0x42080000, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
172 0x42080100, 0x00080100, 0x42000000, 0x42080100, 0x02080000, 0x00000000, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
173 0x40080000, 0x42000000, 0x00080100, 0x02000100, 0x40000100, 0x00080000, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
174 0x00000000, 0x40080000, 0x02080100, 0x40000100 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
175 }; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
176 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
177 static const uint32_t sbox6[64] = { |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
178 0x20000010, 0x20400000, 0x00004000, 0x20404010, 0x20400000, 0x00000010, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
179 0x20404010, 0x00400000, 0x20004000, 0x00404010, 0x00400000, 0x20000010, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
180 0x00400010, 0x20004000, 0x20000000, 0x00004010, 0x00000000, 0x00400010, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
181 0x20004010, 0x00004000, 0x00404000, 0x20004010, 0x00000010, 0x20400010, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
182 0x20400010, 0x00000000, 0x00404010, 0x20404000, 0x00004010, 0x00404000, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
183 0x20404000, 0x20000000, 0x20004000, 0x00000010, 0x20400010, 0x00404000, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
184 0x20404010, 0x00400000, 0x00004010, 0x20000010, 0x00400000, 0x20004000, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
185 0x20000000, 0x00004010, 0x20000010, 0x20404010, 0x00404000, 0x20400000, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
186 0x00404010, 0x20404000, 0x00000000, 0x20400010, 0x00000010, 0x00004000, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
187 0x20400000, 0x00404010, 0x00004000, 0x00400010, 0x20004010, 0x00000000, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
188 0x20404000, 0x20000000, 0x00400010, 0x20004010 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
189 }; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
190 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
191 static const uint32_t sbox7[64] = { |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
192 0x00200000, 0x04200002, 0x04000802, 0x00000000, 0x00000800, 0x04000802, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
193 0x00200802, 0x04200800, 0x04200802, 0x00200000, 0x00000000, 0x04000002, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
194 0x00000002, 0x04000000, 0x04200002, 0x00000802, 0x04000800, 0x00200802, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
195 0x00200002, 0x04000800, 0x04000002, 0x04200000, 0x04200800, 0x00200002, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
196 0x04200000, 0x00000800, 0x00000802, 0x04200802, 0x00200800, 0x00000002, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
197 0x04000000, 0x00200800, 0x04000000, 0x00200800, 0x00200000, 0x04000802, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
198 0x04000802, 0x04200002, 0x04200002, 0x00000002, 0x00200002, 0x04000000, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
199 0x04000800, 0x00200000, 0x04200800, 0x00000802, 0x00200802, 0x04200800, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
200 0x00000802, 0x04000002, 0x04200802, 0x04200000, 0x00200800, 0x00000000, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
201 0x00000002, 0x04200802, 0x00000000, 0x00200802, 0x04200000, 0x00000800, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
202 0x04000002, 0x04000800, 0x00000800, 0x00200002 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
203 }; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
204 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
205 static const uint32_t sbox8[64] = { |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
206 0x10001040, 0x00001000, 0x00040000, 0x10041040, 0x10000000, 0x10001040, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
207 0x00000040, 0x10000000, 0x00040040, 0x10040000, 0x10041040, 0x00041000, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
208 0x10041000, 0x00041040, 0x00001000, 0x00000040, 0x10040000, 0x10000040, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
209 0x10001000, 0x00001040, 0x00041000, 0x00040040, 0x10040040, 0x10041000, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
210 0x00001040, 0x00000000, 0x00000000, 0x10040040, 0x10000040, 0x10001000, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
211 0x00041040, 0x00040000, 0x00041040, 0x00040000, 0x10041000, 0x00001000, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
212 0x00000040, 0x10040040, 0x00001000, 0x00041040, 0x10001000, 0x00000040, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
213 0x10000040, 0x10040000, 0x10040040, 0x10000000, 0x00040000, 0x10001040, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
214 0x00000000, 0x10041040, 0x00040040, 0x10000040, 0x10040000, 0x10001000, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
215 0x10001040, 0x00000000, 0x10041040, 0x00041000, 0x00041000, 0x00001040, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
216 0x00001040, 0x00040040, 0x10000000, 0x10041000 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
217 }; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
218 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
219 /* |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
220 * These two tables are part of the 'permuted choice 1' function. |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
221 * In this implementation several speed improvements are done. |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
222 */ |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
223 static const uint32_t leftkey_swap[16] = { |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
224 0x00000000, 0x00000001, 0x00000100, 0x00000101, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
225 0x00010000, 0x00010001, 0x00010100, 0x00010101, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
226 0x01000000, 0x01000001, 0x01000100, 0x01000101, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
227 0x01010000, 0x01010001, 0x01010100, 0x01010101 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
228 }; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
229 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
230 static const uint32_t rightkey_swap[16] = { |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
231 0x00000000, 0x01000000, 0x00010000, 0x01010000, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
232 0x00000100, 0x01000100, 0x00010100, 0x01010100, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
233 0x00000001, 0x01000001, 0x00010001, 0x01010001, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
234 0x00000101, 0x01000101, 0x00010101, 0x01010101, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
235 }; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
236 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
237 /* |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
238 * Numbers of left shifts per round for encryption subkeys. To |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
239 * calculate the decryption subkeys we just reverse the ordering of |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
240 * the calculated encryption subkeys, so there is no need for a |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
241 * decryption rotate tab. |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
242 */ |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
243 static const unsigned char encrypt_rotate_tab[16] = { |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
244 1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
245 }; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
246 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
247 /* |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
248 * Table with weak DES keys sorted in ascending order. In DES there |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
249 * are 64 known keys which are weak. They are weak because they |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
250 * produce only one, two or four different subkeys in the subkey |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
251 * scheduling process. The keys in this table have all their parity |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
252 * bits cleared. |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
253 */ |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
254 static const unsigned char weak_keys[64][8] = { |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
255 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*w */ |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
256 {0x00, 0x00, 0x1e, 0x1e, 0x00, 0x00, 0x0e, 0x0e}, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
257 {0x00, 0x00, 0xe0, 0xe0, 0x00, 0x00, 0xf0, 0xf0}, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
258 {0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00, 0xfe, 0xfe}, |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
259 {0x00, 0x1e, 0x00, 0x1e, 0x00, 0x0e, 0x00, 0x0e}, /*sw */ |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
260 {0x00, 0x1e, 0x1e, 0x00, 0x00, 0x0e, 0x0e, 0x00}, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
261 {0x00, 0x1e, 0xe0, 0xfe, 0x00, 0x0e, 0xf0, 0xfe}, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
262 {0x00, 0x1e, 0xfe, 0xe0, 0x00, 0x0e, 0xfe, 0xf0}, |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
263 {0x00, 0xe0, 0x00, 0xe0, 0x00, 0xf0, 0x00, 0xf0}, /*sw */ |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
264 {0x00, 0xe0, 0x1e, 0xfe, 0x00, 0xf0, 0x0e, 0xfe}, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
265 {0x00, 0xe0, 0xe0, 0x00, 0x00, 0xf0, 0xf0, 0x00}, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
266 {0x00, 0xe0, 0xfe, 0x1e, 0x00, 0xf0, 0xfe, 0x0e}, |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
267 {0x00, 0xfe, 0x00, 0xfe, 0x00, 0xfe, 0x00, 0xfe}, /*sw */ |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
268 {0x00, 0xfe, 0x1e, 0xe0, 0x00, 0xfe, 0x0e, 0xf0}, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
269 {0x00, 0xfe, 0xe0, 0x1e, 0x00, 0xfe, 0xf0, 0x0e}, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
270 {0x00, 0xfe, 0xfe, 0x00, 0x00, 0xfe, 0xfe, 0x00}, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
271 {0x1e, 0x00, 0x00, 0x1e, 0x0e, 0x00, 0x00, 0x0e}, |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
272 {0x1e, 0x00, 0x1e, 0x00, 0x0e, 0x00, 0x0e, 0x00}, /*sw */ |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
273 {0x1e, 0x00, 0xe0, 0xfe, 0x0e, 0x00, 0xf0, 0xfe}, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
274 {0x1e, 0x00, 0xfe, 0xe0, 0x0e, 0x00, 0xfe, 0xf0}, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
275 {0x1e, 0x1e, 0x00, 0x00, 0x0e, 0x0e, 0x00, 0x00}, |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
276 {0x1e, 0x1e, 0x1e, 0x1e, 0x0e, 0x0e, 0x0e, 0x0e}, /*w */ |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
277 {0x1e, 0x1e, 0xe0, 0xe0, 0x0e, 0x0e, 0xf0, 0xf0}, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
278 {0x1e, 0x1e, 0xfe, 0xfe, 0x0e, 0x0e, 0xfe, 0xfe}, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
279 {0x1e, 0xe0, 0x00, 0xfe, 0x0e, 0xf0, 0x00, 0xfe}, |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
280 {0x1e, 0xe0, 0x1e, 0xe0, 0x0e, 0xf0, 0x0e, 0xf0}, /*sw */ |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
281 {0x1e, 0xe0, 0xe0, 0x1e, 0x0e, 0xf0, 0xf0, 0x0e}, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
282 {0x1e, 0xe0, 0xfe, 0x00, 0x0e, 0xf0, 0xfe, 0x00}, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
283 {0x1e, 0xfe, 0x00, 0xe0, 0x0e, 0xfe, 0x00, 0xf0}, |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
284 {0x1e, 0xfe, 0x1e, 0xfe, 0x0e, 0xfe, 0x0e, 0xfe}, /*sw */ |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
285 {0x1e, 0xfe, 0xe0, 0x00, 0x0e, 0xfe, 0xf0, 0x00}, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
286 {0x1e, 0xfe, 0xfe, 0x1e, 0x0e, 0xfe, 0xfe, 0x0e}, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
287 {0xe0, 0x00, 0x00, 0xe0, 0xf0, 0x00, 0x00, 0xf0}, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
288 {0xe0, 0x00, 0x1e, 0xfe, 0xf0, 0x00, 0x0e, 0xfe}, |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
289 {0xe0, 0x00, 0xe0, 0x00, 0xf0, 0x00, 0xf0, 0x00}, /*sw */ |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
290 {0xe0, 0x00, 0xfe, 0x1e, 0xf0, 0x00, 0xfe, 0x0e}, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
291 {0xe0, 0x1e, 0x00, 0xfe, 0xf0, 0x0e, 0x00, 0xfe}, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
292 {0xe0, 0x1e, 0x1e, 0xe0, 0xf0, 0x0e, 0x0e, 0xf0}, |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
293 {0xe0, 0x1e, 0xe0, 0x1e, 0xf0, 0x0e, 0xf0, 0x0e}, /*sw */ |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
294 {0xe0, 0x1e, 0xfe, 0x00, 0xf0, 0x0e, 0xfe, 0x00}, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
295 {0xe0, 0xe0, 0x00, 0x00, 0xf0, 0xf0, 0x00, 0x00}, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
296 {0xe0, 0xe0, 0x1e, 0x1e, 0xf0, 0xf0, 0x0e, 0x0e}, |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
297 {0xe0, 0xe0, 0xe0, 0xe0, 0xf0, 0xf0, 0xf0, 0xf0}, /*w */ |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
298 {0xe0, 0xe0, 0xfe, 0xfe, 0xf0, 0xf0, 0xfe, 0xfe}, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
299 {0xe0, 0xfe, 0x00, 0x1e, 0xf0, 0xfe, 0x00, 0x0e}, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
300 {0xe0, 0xfe, 0x1e, 0x00, 0xf0, 0xfe, 0x0e, 0x00}, |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
301 {0xe0, 0xfe, 0xe0, 0xfe, 0xf0, 0xfe, 0xf0, 0xfe}, /*sw */ |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
302 {0xe0, 0xfe, 0xfe, 0xe0, 0xf0, 0xfe, 0xfe, 0xf0}, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
303 {0xfe, 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00, 0xfe}, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
304 {0xfe, 0x00, 0x1e, 0xe0, 0xfe, 0x00, 0x0e, 0xf0}, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
305 {0xfe, 0x00, 0xe0, 0x1e, 0xfe, 0x00, 0xf0, 0x0e}, |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
306 {0xfe, 0x00, 0xfe, 0x00, 0xfe, 0x00, 0xfe, 0x00}, /*sw */ |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
307 {0xfe, 0x1e, 0x00, 0xe0, 0xfe, 0x0e, 0x00, 0xf0}, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
308 {0xfe, 0x1e, 0x1e, 0xfe, 0xfe, 0x0e, 0x0e, 0xfe}, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
309 {0xfe, 0x1e, 0xe0, 0x00, 0xfe, 0x0e, 0xf0, 0x00}, |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
310 {0xfe, 0x1e, 0xfe, 0x1e, 0xfe, 0x0e, 0xfe, 0x0e}, /*sw */ |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
311 {0xfe, 0xe0, 0x00, 0x1e, 0xfe, 0xf0, 0x00, 0x0e}, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
312 {0xfe, 0xe0, 0x1e, 0x00, 0xfe, 0xf0, 0x0e, 0x00}, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
313 {0xfe, 0xe0, 0xe0, 0xfe, 0xfe, 0xf0, 0xf0, 0xfe}, |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
314 {0xfe, 0xe0, 0xfe, 0xe0, 0xfe, 0xf0, 0xfe, 0xf0}, /*sw */ |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
315 {0xfe, 0xfe, 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00}, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
316 {0xfe, 0xfe, 0x1e, 0x1e, 0xfe, 0xfe, 0x0e, 0x0e}, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
317 {0xfe, 0xfe, 0xe0, 0xe0, 0xfe, 0xfe, 0xf0, 0xf0}, |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
318 {0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe} /*w */ |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
319 }; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
320 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
321 bool |
8433
51634bc628de
* lib/quotearg.c: Include <wctype.h> early, before the definition of
Paul Eggert <eggert@cs.ucla.edu>
parents:
7584
diff
changeset
|
322 gl_des_is_weak_key (const char * key) |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
323 { |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
324 char work[8]; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
325 int i, left, right, middle, cmp_result; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
326 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
327 /* clear parity bits */ |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
328 for (i = 0; i < 8; ++i) |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
329 work[i] = ((unsigned char)key[i]) & 0xfe; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
330 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
331 /* binary search in the weak key table */ |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
332 left = 0; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
333 right = 63; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
334 while (left <= right) |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
335 { |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
336 middle = (left + right) / 2; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
337 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
338 if (!(cmp_result = memcmp (work, weak_keys[middle], 8))) |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
339 return -1; |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
340 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
341 if (cmp_result > 0) |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
342 left = middle + 1; |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
343 else |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
344 right = middle - 1; |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
345 } |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
346 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
347 return 0; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
348 } |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
349 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
350 /* |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
351 * Macro to swap bits across two words. |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
352 */ |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
353 #define DO_PERMUTATION(a, temp, b, offset, mask) \ |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
354 temp = ((a>>offset) ^ b) & mask; \ |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
355 b ^= temp; \ |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
356 a ^= temp<<offset; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
357 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
358 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
359 /* |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
360 * This performs the 'initial permutation' of the data to be encrypted |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
361 * or decrypted. Additionally the resulting two words are rotated one bit |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
362 * to the left. |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
363 */ |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
364 #define INITIAL_PERMUTATION(left, temp, right) \ |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
365 DO_PERMUTATION(left, temp, right, 4, 0x0f0f0f0f) \ |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
366 DO_PERMUTATION(left, temp, right, 16, 0x0000ffff) \ |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
367 DO_PERMUTATION(right, temp, left, 2, 0x33333333) \ |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
368 DO_PERMUTATION(right, temp, left, 8, 0x00ff00ff) \ |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
369 right = (right << 1) | (right >> 31); \ |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
370 temp = (left ^ right) & 0xaaaaaaaa; \ |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
371 right ^= temp; \ |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
372 left ^= temp; \ |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
373 left = (left << 1) | (left >> 31); |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
374 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
375 /* |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
376 * The 'inverse initial permutation'. |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
377 */ |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
378 #define FINAL_PERMUTATION(left, temp, right) \ |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
379 left = (left << 31) | (left >> 1); \ |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
380 temp = (left ^ right) & 0xaaaaaaaa; \ |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
381 left ^= temp; \ |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
382 right ^= temp; \ |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
383 right = (right << 31) | (right >> 1); \ |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
384 DO_PERMUTATION(right, temp, left, 8, 0x00ff00ff) \ |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
385 DO_PERMUTATION(right, temp, left, 2, 0x33333333) \ |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
386 DO_PERMUTATION(left, temp, right, 16, 0x0000ffff) \ |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
387 DO_PERMUTATION(left, temp, right, 4, 0x0f0f0f0f) |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
388 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
389 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
390 /* |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
391 * A full DES round including 'expansion function', 'sbox substitution' |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
392 * and 'primitive function P' but without swapping the left and right word. |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
393 * Please note: The data in 'from' and 'to' is already rotated one bit to |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
394 * the left, done in the initial permutation. |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
395 */ |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
396 #define DES_ROUND(from, to, work, subkey) \ |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
397 work = from ^ *subkey++; \ |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
398 to ^= sbox8[ work & 0x3f ]; \ |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
399 to ^= sbox6[ (work>>8) & 0x3f ]; \ |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
400 to ^= sbox4[ (work>>16) & 0x3f ]; \ |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
401 to ^= sbox2[ (work>>24) & 0x3f ]; \ |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
402 work = ((from << 28) | (from >> 4)) ^ *subkey++; \ |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
403 to ^= sbox7[ work & 0x3f ]; \ |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
404 to ^= sbox5[ (work>>8) & 0x3f ]; \ |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
405 to ^= sbox3[ (work>>16) & 0x3f ]; \ |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
406 to ^= sbox1[ (work>>24) & 0x3f ]; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
407 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
408 /* |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
409 * Macros to convert 8 bytes from/to 32bit words. |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
410 */ |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
411 #define READ_64BIT_DATA(data, left, right) \ |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
412 left = (data[0] << 24) | (data[1] << 16) | (data[2] << 8) | data[3]; \ |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
413 right = (data[4] << 24) | (data[5] << 16) | (data[6] << 8) | data[7]; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
414 |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
415 #define WRITE_64BIT_DATA(data, left, right) \ |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
416 data[0] = (left >> 24) &0xff; data[1] = (left >> 16) &0xff; \ |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
417 data[2] = (left >> 8) &0xff; data[3] = left &0xff; \ |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
418 data[4] = (right >> 24) &0xff; data[5] = (right >> 16) &0xff; \ |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
419 data[6] = (right >> 8) &0xff; data[7] = right &0xff; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
420 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
421 /* |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
422 * des_key_schedule(): Calculate 16 subkeys pairs (even/odd) for |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
423 * 16 encryption rounds. |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
424 * To calculate subkeys for decryption the caller |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
425 * have to reorder the generated subkeys. |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
426 * |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
427 * rawkey: 8 Bytes of key data |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
428 * subkey: Array of at least 32 uint32_ts. Will be filled |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
429 * with calculated subkeys. |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
430 * |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
431 */ |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
432 static void |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
433 des_key_schedule (const char * _rawkey, uint32_t * subkey) |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
434 { |
6782
6c08fff6ef83
2006-05-10 Bruno Haible <bruno@clisp.org>
Simon Josefsson <simon@josefsson.org>
parents:
6404
diff
changeset
|
435 const unsigned char *rawkey = (const unsigned char *) _rawkey; |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
436 uint32_t left, right, work; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
437 int round; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
438 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
439 READ_64BIT_DATA (rawkey, left, right) |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
440 DO_PERMUTATION (right, work, left, 4, 0x0f0f0f0f) |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
441 DO_PERMUTATION (right, work, left, 0, 0x10101010) |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
442 left = ((leftkey_swap[(left >> 0) & 0xf] << 3) |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
443 | (leftkey_swap[(left >> 8) & 0xf] << 2) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
444 | (leftkey_swap[(left >> 16) & 0xf] << 1) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
445 | (leftkey_swap[(left >> 24) & 0xf]) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
446 | (leftkey_swap[(left >> 5) & 0xf] << 7) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
447 | (leftkey_swap[(left >> 13) & 0xf] << 6) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
448 | (leftkey_swap[(left >> 21) & 0xf] << 5) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
449 | (leftkey_swap[(left >> 29) & 0xf] << 4)); |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
450 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
451 left &= 0x0fffffff; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
452 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
453 right = ((rightkey_swap[(right >> 1) & 0xf] << 3) |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
454 | (rightkey_swap[(right >> 9) & 0xf] << 2) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
455 | (rightkey_swap[(right >> 17) & 0xf] << 1) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
456 | (rightkey_swap[(right >> 25) & 0xf]) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
457 | (rightkey_swap[(right >> 4) & 0xf] << 7) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
458 | (rightkey_swap[(right >> 12) & 0xf] << 6) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
459 | (rightkey_swap[(right >> 20) & 0xf] << 5) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
460 | (rightkey_swap[(right >> 28) & 0xf] << 4)); |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
461 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
462 right &= 0x0fffffff; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
463 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
464 for (round = 0; round < 16; ++round) |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
465 { |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
466 left = ((left << encrypt_rotate_tab[round]) |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
467 | (left >> (28 - encrypt_rotate_tab[round]))) & 0x0fffffff; |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
468 right = ((right << encrypt_rotate_tab[round]) |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
469 | (right >> (28 - encrypt_rotate_tab[round]))) & 0x0fffffff; |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
470 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
471 *subkey++ = (((left << 4) & 0x24000000) |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
472 | ((left << 28) & 0x10000000) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
473 | ((left << 14) & 0x08000000) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
474 | ((left << 18) & 0x02080000) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
475 | ((left << 6) & 0x01000000) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
476 | ((left << 9) & 0x00200000) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
477 | ((left >> 1) & 0x00100000) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
478 | ((left << 10) & 0x00040000) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
479 | ((left << 2) & 0x00020000) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
480 | ((left >> 10) & 0x00010000) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
481 | ((right >> 13) & 0x00002000) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
482 | ((right >> 4) & 0x00001000) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
483 | ((right << 6) & 0x00000800) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
484 | ((right >> 1) & 0x00000400) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
485 | ((right >> 14) & 0x00000200) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
486 | (right & 0x00000100) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
487 | ((right >> 5) & 0x00000020) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
488 | ((right >> 10) & 0x00000010) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
489 | ((right >> 3) & 0x00000008) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
490 | ((right >> 18) & 0x00000004) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
491 | ((right >> 26) & 0x00000002) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
492 | ((right >> 24) & 0x00000001)); |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
493 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
494 *subkey++ = (((left << 15) & 0x20000000) |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
495 | ((left << 17) & 0x10000000) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
496 | ((left << 10) & 0x08000000) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
497 | ((left << 22) & 0x04000000) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
498 | ((left >> 2) & 0x02000000) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
499 | ((left << 1) & 0x01000000) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
500 | ((left << 16) & 0x00200000) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
501 | ((left << 11) & 0x00100000) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
502 | ((left << 3) & 0x00080000) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
503 | ((left >> 6) & 0x00040000) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
504 | ((left << 15) & 0x00020000) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
505 | ((left >> 4) & 0x00010000) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
506 | ((right >> 2) & 0x00002000) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
507 | ((right << 8) & 0x00001000) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
508 | ((right >> 14) & 0x00000808) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
509 | ((right >> 9) & 0x00000400) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
510 | ((right) & 0x00000200) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
511 | ((right << 7) & 0x00000100) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
512 | ((right >> 7) & 0x00000020) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
513 | ((right >> 3) & 0x00000011) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
514 | ((right << 2) & 0x00000004) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
515 | ((right >> 21) & 0x00000002)); |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
516 } |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
517 } |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
518 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
519 void |
8433
51634bc628de
* lib/quotearg.c: Include <wctype.h> early, before the definition of
Paul Eggert <eggert@cs.ucla.edu>
parents:
7584
diff
changeset
|
520 gl_des_setkey (gl_des_ctx *ctx, const char * key) |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
521 { |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
522 int i; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
523 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
524 des_key_schedule (key, ctx->encrypt_subkeys); |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
525 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
526 for (i = 0; i < 32; i += 2) |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
527 { |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
528 ctx->decrypt_subkeys[i] = ctx->encrypt_subkeys[30 - i]; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
529 ctx->decrypt_subkeys[i + 1] = ctx->encrypt_subkeys[31 - i]; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
530 } |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
531 } |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
532 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
533 bool |
8433
51634bc628de
* lib/quotearg.c: Include <wctype.h> early, before the definition of
Paul Eggert <eggert@cs.ucla.edu>
parents:
7584
diff
changeset
|
534 gl_des_makekey (gl_des_ctx *ctx, const char * key, size_t keylen) |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
535 { |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
536 if (keylen != 8) |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
537 return false; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
538 |
8441 | 539 gl_des_setkey (ctx, key); |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
540 |
8441 | 541 return !gl_des_is_weak_key (key); |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
542 } |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
543 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
544 void |
8433
51634bc628de
* lib/quotearg.c: Include <wctype.h> early, before the definition of
Paul Eggert <eggert@cs.ucla.edu>
parents:
7584
diff
changeset
|
545 gl_des_ecb_crypt (gl_des_ctx *ctx, const char * _from, char * _to, int mode) |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
546 { |
6782
6c08fff6ef83
2006-05-10 Bruno Haible <bruno@clisp.org>
Simon Josefsson <simon@josefsson.org>
parents:
6404
diff
changeset
|
547 const unsigned char *from = (const unsigned char *) _from; |
6c08fff6ef83
2006-05-10 Bruno Haible <bruno@clisp.org>
Simon Josefsson <simon@josefsson.org>
parents:
6404
diff
changeset
|
548 unsigned char *to = (unsigned char *) _to; |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
549 uint32_t left, right, work; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
550 uint32_t *keys; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
551 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
552 keys = mode ? ctx->decrypt_subkeys : ctx->encrypt_subkeys; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
553 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
554 READ_64BIT_DATA (from, left, right) |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
555 INITIAL_PERMUTATION (left, work, right) |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
556 DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
557 DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
558 DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
559 DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
560 DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
561 DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
562 DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
563 DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
564 FINAL_PERMUTATION (right, work, left) |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
565 WRITE_64BIT_DATA (to, right, left) |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
566 } |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
567 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
568 void |
8433
51634bc628de
* lib/quotearg.c: Include <wctype.h> early, before the definition of
Paul Eggert <eggert@cs.ucla.edu>
parents:
7584
diff
changeset
|
569 gl_3des_set2keys (gl_3des_ctx *ctx, const char * key1, const char * key2) |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
570 { |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
571 int i; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
572 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
573 des_key_schedule (key1, ctx->encrypt_subkeys); |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
574 des_key_schedule (key2, &(ctx->decrypt_subkeys[32])); |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
575 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
576 for (i = 0; i < 32; i += 2) |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
577 { |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
578 ctx->decrypt_subkeys[i] = ctx->encrypt_subkeys[30 - i]; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
579 ctx->decrypt_subkeys[i + 1] = ctx->encrypt_subkeys[31 - i]; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
580 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
581 ctx->encrypt_subkeys[i + 32] = ctx->decrypt_subkeys[62 - i]; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
582 ctx->encrypt_subkeys[i + 33] = ctx->decrypt_subkeys[63 - i]; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
583 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
584 ctx->encrypt_subkeys[i + 64] = ctx->encrypt_subkeys[i]; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
585 ctx->encrypt_subkeys[i + 65] = ctx->encrypt_subkeys[i + 1]; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
586 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
587 ctx->decrypt_subkeys[i + 64] = ctx->decrypt_subkeys[i]; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
588 ctx->decrypt_subkeys[i + 65] = ctx->decrypt_subkeys[i + 1]; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
589 } |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
590 } |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
591 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
592 void |
8433
51634bc628de
* lib/quotearg.c: Include <wctype.h> early, before the definition of
Paul Eggert <eggert@cs.ucla.edu>
parents:
7584
diff
changeset
|
593 gl_3des_set3keys (gl_3des_ctx *ctx, const char * key1, |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
594 const char * key2, const char * key3) |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
595 { |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
596 int i; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
597 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
598 des_key_schedule (key1, ctx->encrypt_subkeys); |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
599 des_key_schedule (key2, &(ctx->decrypt_subkeys[32])); |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
600 des_key_schedule (key3, &(ctx->encrypt_subkeys[64])); |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
601 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
602 for (i = 0; i < 32; i += 2) |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
603 { |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
604 ctx->decrypt_subkeys[i] = ctx->encrypt_subkeys[94 - i]; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
605 ctx->decrypt_subkeys[i + 1] = ctx->encrypt_subkeys[95 - i]; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
606 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
607 ctx->encrypt_subkeys[i + 32] = ctx->decrypt_subkeys[62 - i]; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
608 ctx->encrypt_subkeys[i + 33] = ctx->decrypt_subkeys[63 - i]; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
609 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
610 ctx->decrypt_subkeys[i + 64] = ctx->encrypt_subkeys[30 - i]; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
611 ctx->decrypt_subkeys[i + 65] = ctx->encrypt_subkeys[31 - i]; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
612 } |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
613 } |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
614 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
615 void |
8433
51634bc628de
* lib/quotearg.c: Include <wctype.h> early, before the definition of
Paul Eggert <eggert@cs.ucla.edu>
parents:
7584
diff
changeset
|
616 gl_3des_ecb_crypt (gl_3des_ctx *ctx, |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
617 const char * _from, |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
618 char * _to, int mode) |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
619 { |
6782
6c08fff6ef83
2006-05-10 Bruno Haible <bruno@clisp.org>
Simon Josefsson <simon@josefsson.org>
parents:
6404
diff
changeset
|
620 const unsigned char *from = (const unsigned char *) _from; |
6c08fff6ef83
2006-05-10 Bruno Haible <bruno@clisp.org>
Simon Josefsson <simon@josefsson.org>
parents:
6404
diff
changeset
|
621 unsigned char *to = (unsigned char *) _to; |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
622 uint32_t left, right, work; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
623 uint32_t *keys; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
624 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
625 keys = mode ? ctx->decrypt_subkeys : ctx->encrypt_subkeys; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
626 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
627 READ_64BIT_DATA (from, left, right) |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
628 INITIAL_PERMUTATION (left, work, right) |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
629 DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
630 DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
631 DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
632 DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
633 DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
634 DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
635 DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
636 DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
637 DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
638 DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
639 DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
640 DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
641 DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
642 DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
643 DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
644 DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
645 DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
646 DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
647 DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
648 DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
649 DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
650 DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
651 DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
652 DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
653 FINAL_PERMUTATION (right, work, left) |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
654 WRITE_64BIT_DATA (to, right, left) |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
655 } |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
656 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
657 bool |
8433
51634bc628de
* lib/quotearg.c: Include <wctype.h> early, before the definition of
Paul Eggert <eggert@cs.ucla.edu>
parents:
7584
diff
changeset
|
658 gl_3des_makekey (gl_3des_ctx *ctx, const char * key, size_t keylen) |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
659 { |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
660 if (keylen != 24) |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
661 return false; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
662 |
8433
51634bc628de
* lib/quotearg.c: Include <wctype.h> early, before the definition of
Paul Eggert <eggert@cs.ucla.edu>
parents:
7584
diff
changeset
|
663 gl_3des_set3keys (ctx, key, key + 8, key + 16); |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
664 |
8441 | 665 return !(gl_des_is_weak_key (key) |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
666 || gl_des_is_weak_key (key + 8) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
667 || gl_des_is_weak_key (key + 16)); |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
668 } |