Mercurial > gnulib
annotate lib/des.c @ 40215:88b18d82fa61
crypto/des: Fix undefined behaviour.
* lib/des.c (READ_64BIT_DATA): Cast bytes to 'unsigned int', to avoid
shift operations on 'int'.
author | Bruno Haible <bruno@clisp.org> |
---|---|
date | Sat, 09 Mar 2019 22:21:25 +0100 |
parents | b06060465f09 |
children |
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 |
40057
b06060465f09
maint: Run 'make update-copyright'
Paul Eggert <eggert@cs.ucla.edu>
parents:
19484
diff
changeset
|
2 * Copyright (C) 1998-1999, 2001-2007, 2009-2019 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 |
19190 | 15 * along with this file; if not, see <https://www.gnu.org/licenses/>. |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
16 * |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
17 */ |
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 /* 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
|
20 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
21 /* |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
22 * 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
|
23 * 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
|
24 * 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
|
25 * 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
|
26 * 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
|
27 * |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
28 * 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
|
29 */ |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
30 |
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 * U S A G E |
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 * |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
35 * 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
|
36 * encryption context with a key. |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
37 * |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
38 * 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
|
39 * 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
|
40 * simply ignored. |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
41 * |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
42 * 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
|
43 * 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
|
44 * |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
45 * 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
|
46 * 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
|
47 * |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
48 * DES Example |
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 * unsigned char key[8]; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
51 * unsigned char plaintext[8]; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
52 * unsigned char ciphertext[8]; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
53 * 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
|
54 * gl_des_ctx context; |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
55 * |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
56 * // 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
|
57 * .... |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
58 * |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
59 * // Set up the DES encryption context |
8441 | 60 * 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
|
61 * |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
62 * // Encrypt the plaintext |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
63 * 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
|
64 * |
16358 | 65 * // 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
|
66 * 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
|
67 * |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
68 * |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
69 * Triple-DES Example |
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 * unsigned char key1[8]; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
72 * unsigned char key2[8]; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
73 * unsigned char key3[8]; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
74 * unsigned char plaintext[8]; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
75 * unsigned char ciphertext[8]; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
76 * 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
|
77 * gl_3des_ctx context; |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
78 * |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
79 * // 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
|
80 * // 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
|
81 * 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
|
82 * |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
83 * // 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
|
84 * 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
|
85 * |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
86 * // 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
|
87 * 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
|
88 * |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
89 * // 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
|
90 * 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
|
91 */ |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
92 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
93 |
7584
a88f85e4728f
* lib/arcfour.c: Assume config.h.
Eric Blake <ebb9@byu.net>
parents:
6782
diff
changeset
|
94 #include <config.h> |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
95 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
96 #include "des.h" |
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 <stdio.h> |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
99 #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
|
100 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
101 /* |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
102 * 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
|
103 * 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
|
104 */ |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
105 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
|
106 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
|
107 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
|
108 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
|
109 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
|
110 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
|
111 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
|
112 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
|
113 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
|
114 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
|
115 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
|
116 0x00010004, 0x00010400, 0x00000000, 0x01010004 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
117 }; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
118 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
119 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
|
120 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
|
121 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
|
122 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
|
123 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
|
124 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
|
125 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
|
126 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
|
127 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
|
128 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
|
129 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
|
130 0x80000000, 0x80100020, 0x80108020, 0x00108000 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
131 }; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
132 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
133 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
|
134 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
|
135 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
|
136 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
|
137 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
|
138 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
|
139 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
|
140 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
|
141 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
|
142 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
|
143 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
|
144 0x00020208, 0x00000008, 0x08020008, 0x00020200 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
145 }; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
146 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
147 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
|
148 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
|
149 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
|
150 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
|
151 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
|
152 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
|
153 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
|
154 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
|
155 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
|
156 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
|
157 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
|
158 0x00000080, 0x00800000, 0x00002000, 0x00802080 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
159 }; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
160 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
161 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
|
162 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
|
163 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
|
164 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
|
165 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
|
166 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
|
167 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
|
168 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
|
169 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
|
170 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
|
171 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
|
172 0x00000000, 0x40080000, 0x02080100, 0x40000100 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
173 }; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
174 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
175 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
|
176 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
|
177 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
|
178 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
|
179 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
|
180 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
|
181 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
|
182 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
|
183 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
|
184 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
|
185 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
|
186 0x20404000, 0x20000000, 0x00400010, 0x20004010 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
187 }; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
188 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
189 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
|
190 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
|
191 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
|
192 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
|
193 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
|
194 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
|
195 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
|
196 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
|
197 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
|
198 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
|
199 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
|
200 0x04000002, 0x04000800, 0x00000800, 0x00200002 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
201 }; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
202 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
203 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
|
204 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
|
205 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
|
206 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
|
207 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
|
208 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
|
209 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
|
210 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
|
211 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
|
212 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
|
213 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
|
214 0x00001040, 0x00040040, 0x10000000, 0x10041000 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
215 }; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
216 |
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 * 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
|
219 * 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
|
220 */ |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
221 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
|
222 0x00000000, 0x00000001, 0x00000100, 0x00000101, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
223 0x00010000, 0x00010001, 0x00010100, 0x00010101, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
224 0x01000000, 0x01000001, 0x01000100, 0x01000101, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
225 0x01010000, 0x01010001, 0x01010100, 0x01010101 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
226 }; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
227 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
228 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
|
229 0x00000000, 0x01000000, 0x00010000, 0x01010000, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
230 0x00000100, 0x01000100, 0x00010100, 0x01010100, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
231 0x00000001, 0x01000001, 0x00010001, 0x01010001, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
232 0x00000101, 0x01000101, 0x00010101, 0x01010101, |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
233 }; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
234 |
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 * 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
|
237 * 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
|
238 * 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
|
239 * decryption rotate tab. |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
240 */ |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
241 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
|
242 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
|
243 }; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
244 |
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 * 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
|
247 * 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
|
248 * 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
|
249 * 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
|
250 * bits cleared. |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
251 */ |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
252 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
|
253 {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
|
254 {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
|
255 {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
|
256 {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
|
257 {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
|
258 {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
|
259 {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
|
260 {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
|
261 {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
|
262 {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
|
263 {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
|
264 {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
|
265 {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
|
266 {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
|
267 {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
|
268 {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
|
269 {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
|
270 {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
|
271 {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
|
272 {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
|
273 {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
|
274 {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
|
275 {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
|
276 {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
|
277 {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
|
278 {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
|
279 {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
|
280 {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
|
281 {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
|
282 {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
|
283 {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
|
284 {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
|
285 {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
|
286 {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
|
287 {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
|
288 {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
|
289 {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
|
290 {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
|
291 {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
|
292 {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
|
293 {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
|
294 {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
|
295 {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
|
296 {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
|
297 {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
|
298 {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
|
299 {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
|
300 {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
|
301 {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
|
302 {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
|
303 {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
|
304 {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
|
305 {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
|
306 {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
|
307 {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
|
308 {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
|
309 {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
|
310 {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
|
311 {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
|
312 {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
|
313 {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
|
314 {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
|
315 {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
|
316 {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
|
317 }; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
318 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
319 bool |
8433
51634bc628de
* lib/quotearg.c: Include <wctype.h> early, before the definition of
Paul Eggert <eggert@cs.ucla.edu>
parents:
7584
diff
changeset
|
320 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
|
321 { |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
322 char work[8]; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
323 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
|
324 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
325 /* clear parity bits */ |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
326 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
|
327 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
|
328 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
329 /* 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
|
330 left = 0; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
331 right = 63; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
332 while (left <= right) |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
333 { |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
334 middle = (left + right) / 2; |
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 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
|
337 return -1; |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
338 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
339 if (cmp_result > 0) |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
340 left = middle + 1; |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
341 else |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
342 right = middle - 1; |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
343 } |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
344 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
345 return 0; |
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 |
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 * 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
|
350 */ |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
351 #define DO_PERMUTATION(a, temp, b, offset, mask) \ |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
352 temp = ((a>>offset) ^ b) & mask; \ |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
353 b ^= temp; \ |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
354 a ^= temp<<offset; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
355 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
356 |
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 * 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
|
359 * 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
|
360 * to the left. |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
361 */ |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
362 #define INITIAL_PERMUTATION(left, temp, right) \ |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
363 DO_PERMUTATION(left, temp, right, 4, 0x0f0f0f0f) \ |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
364 DO_PERMUTATION(left, temp, right, 16, 0x0000ffff) \ |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
365 DO_PERMUTATION(right, temp, left, 2, 0x33333333) \ |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
366 DO_PERMUTATION(right, temp, left, 8, 0x00ff00ff) \ |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
367 right = (right << 1) | (right >> 31); \ |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
368 temp = (left ^ right) & 0xaaaaaaaa; \ |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
369 right ^= temp; \ |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
370 left ^= temp; \ |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
371 left = (left << 1) | (left >> 31); |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
372 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
373 /* |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
374 * The 'inverse initial permutation'. |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
375 */ |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
376 #define FINAL_PERMUTATION(left, temp, right) \ |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
377 left = (left << 31) | (left >> 1); \ |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
378 temp = (left ^ right) & 0xaaaaaaaa; \ |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
379 left ^= temp; \ |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
380 right ^= temp; \ |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
381 right = (right << 31) | (right >> 1); \ |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
382 DO_PERMUTATION(right, temp, left, 8, 0x00ff00ff) \ |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
383 DO_PERMUTATION(right, temp, left, 2, 0x33333333) \ |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
384 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
|
385 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
|
386 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
387 |
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 * 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
|
390 * 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
|
391 * 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
|
392 * 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
|
393 */ |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
394 #define DES_ROUND(from, to, work, subkey) \ |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
395 work = from ^ *subkey++; \ |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
396 to ^= sbox8[ work & 0x3f ]; \ |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
397 to ^= sbox6[ (work>>8) & 0x3f ]; \ |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
398 to ^= sbox4[ (work>>16) & 0x3f ]; \ |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
399 to ^= sbox2[ (work>>24) & 0x3f ]; \ |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
400 work = ((from << 28) | (from >> 4)) ^ *subkey++; \ |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
401 to ^= sbox7[ work & 0x3f ]; \ |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
402 to ^= sbox5[ (work>>8) & 0x3f ]; \ |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
403 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
|
404 to ^= sbox1[ (work>>24) & 0x3f ]; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
405 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
406 /* |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
407 * 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
|
408 */ |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
409 #define READ_64BIT_DATA(data, left, right) \ |
40215
88b18d82fa61
crypto/des: Fix undefined behaviour.
Bruno Haible <bruno@clisp.org>
parents:
40057
diff
changeset
|
410 left = ((uint32_t) data[0] << 24) \ |
88b18d82fa61
crypto/des: Fix undefined behaviour.
Bruno Haible <bruno@clisp.org>
parents:
40057
diff
changeset
|
411 | ((uint32_t) data[1] << 16) \ |
88b18d82fa61
crypto/des: Fix undefined behaviour.
Bruno Haible <bruno@clisp.org>
parents:
40057
diff
changeset
|
412 | ((uint32_t) data[2] << 8) \ |
88b18d82fa61
crypto/des: Fix undefined behaviour.
Bruno Haible <bruno@clisp.org>
parents:
40057
diff
changeset
|
413 | (uint32_t) data[3]; \ |
88b18d82fa61
crypto/des: Fix undefined behaviour.
Bruno Haible <bruno@clisp.org>
parents:
40057
diff
changeset
|
414 right = ((uint32_t) data[4] << 24) \ |
88b18d82fa61
crypto/des: Fix undefined behaviour.
Bruno Haible <bruno@clisp.org>
parents:
40057
diff
changeset
|
415 | ((uint32_t) data[5] << 16) \ |
88b18d82fa61
crypto/des: Fix undefined behaviour.
Bruno Haible <bruno@clisp.org>
parents:
40057
diff
changeset
|
416 | ((uint32_t) data[6] << 8) \ |
88b18d82fa61
crypto/des: Fix undefined behaviour.
Bruno Haible <bruno@clisp.org>
parents:
40057
diff
changeset
|
417 | (uint32_t) data[7]; |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
418 |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
419 #define WRITE_64BIT_DATA(data, left, right) \ |
40215
88b18d82fa61
crypto/des: Fix undefined behaviour.
Bruno Haible <bruno@clisp.org>
parents:
40057
diff
changeset
|
420 data[0] = (left >> 24) &0xff; data[1] = (left >> 16) &0xff; \ |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
421 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
|
422 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
|
423 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
|
424 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
425 /* |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
426 * 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
|
427 * 16 encryption rounds. |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
428 * To calculate subkeys for decryption the caller |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
429 * 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
|
430 * |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
431 * rawkey: 8 Bytes of key data |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
432 * 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
|
433 * with calculated subkeys. |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
434 * |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
435 */ |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
436 static void |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
437 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
|
438 { |
6782
6c08fff6ef83
2006-05-10 Bruno Haible <bruno@clisp.org>
Simon Josefsson <simon@josefsson.org>
parents:
6404
diff
changeset
|
439 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
|
440 uint32_t left, right, work; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
441 int round; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
442 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
443 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
|
444 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
|
445 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
|
446 left = ((leftkey_swap[(left >> 0) & 0xf] << 3) |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
447 | (leftkey_swap[(left >> 8) & 0xf] << 2) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
448 | (leftkey_swap[(left >> 16) & 0xf] << 1) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
449 | (leftkey_swap[(left >> 24) & 0xf]) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
450 | (leftkey_swap[(left >> 5) & 0xf] << 7) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
451 | (leftkey_swap[(left >> 13) & 0xf] << 6) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
452 | (leftkey_swap[(left >> 21) & 0xf] << 5) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
453 | (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
|
454 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
455 left &= 0x0fffffff; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
456 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
457 right = ((rightkey_swap[(right >> 1) & 0xf] << 3) |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
458 | (rightkey_swap[(right >> 9) & 0xf] << 2) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
459 | (rightkey_swap[(right >> 17) & 0xf] << 1) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
460 | (rightkey_swap[(right >> 25) & 0xf]) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
461 | (rightkey_swap[(right >> 4) & 0xf] << 7) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
462 | (rightkey_swap[(right >> 12) & 0xf] << 6) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
463 | (rightkey_swap[(right >> 20) & 0xf] << 5) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
464 | (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
|
465 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
466 right &= 0x0fffffff; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
467 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
468 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
|
469 { |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
470 left = ((left << encrypt_rotate_tab[round]) |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
471 | (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
|
472 right = ((right << encrypt_rotate_tab[round]) |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
473 | (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
|
474 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
475 *subkey++ = (((left << 4) & 0x24000000) |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
476 | ((left << 28) & 0x10000000) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
477 | ((left << 14) & 0x08000000) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
478 | ((left << 18) & 0x02080000) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
479 | ((left << 6) & 0x01000000) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
480 | ((left << 9) & 0x00200000) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
481 | ((left >> 1) & 0x00100000) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
482 | ((left << 10) & 0x00040000) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
483 | ((left << 2) & 0x00020000) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
484 | ((left >> 10) & 0x00010000) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
485 | ((right >> 13) & 0x00002000) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
486 | ((right >> 4) & 0x00001000) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
487 | ((right << 6) & 0x00000800) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
488 | ((right >> 1) & 0x00000400) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
489 | ((right >> 14) & 0x00000200) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
490 | (right & 0x00000100) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
491 | ((right >> 5) & 0x00000020) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
492 | ((right >> 10) & 0x00000010) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
493 | ((right >> 3) & 0x00000008) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
494 | ((right >> 18) & 0x00000004) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
495 | ((right >> 26) & 0x00000002) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
496 | ((right >> 24) & 0x00000001)); |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
497 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
498 *subkey++ = (((left << 15) & 0x20000000) |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
499 | ((left << 17) & 0x10000000) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
500 | ((left << 10) & 0x08000000) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
501 | ((left << 22) & 0x04000000) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
502 | ((left >> 2) & 0x02000000) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
503 | ((left << 1) & 0x01000000) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
504 | ((left << 16) & 0x00200000) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
505 | ((left << 11) & 0x00100000) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
506 | ((left << 3) & 0x00080000) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
507 | ((left >> 6) & 0x00040000) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
508 | ((left << 15) & 0x00020000) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
509 | ((left >> 4) & 0x00010000) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
510 | ((right >> 2) & 0x00002000) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
511 | ((right << 8) & 0x00001000) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
512 | ((right >> 14) & 0x00000808) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
513 | ((right >> 9) & 0x00000400) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
514 | ((right) & 0x00000200) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
515 | ((right << 7) & 0x00000100) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
516 | ((right >> 7) & 0x00000020) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
517 | ((right >> 3) & 0x00000011) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
518 | ((right << 2) & 0x00000004) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
519 | ((right >> 21) & 0x00000002)); |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
520 } |
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 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
523 void |
8433
51634bc628de
* lib/quotearg.c: Include <wctype.h> early, before the definition of
Paul Eggert <eggert@cs.ucla.edu>
parents:
7584
diff
changeset
|
524 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
|
525 { |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
526 int i; |
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 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
|
529 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
530 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
|
531 { |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
532 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
|
533 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
|
534 } |
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 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
537 bool |
8433
51634bc628de
* lib/quotearg.c: Include <wctype.h> early, before the definition of
Paul Eggert <eggert@cs.ucla.edu>
parents:
7584
diff
changeset
|
538 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
|
539 { |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
540 if (keylen != 8) |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
541 return false; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
542 |
8441 | 543 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
|
544 |
8441 | 545 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
|
546 } |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
547 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
548 void |
8433
51634bc628de
* lib/quotearg.c: Include <wctype.h> early, before the definition of
Paul Eggert <eggert@cs.ucla.edu>
parents:
7584
diff
changeset
|
549 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
|
550 { |
6782
6c08fff6ef83
2006-05-10 Bruno Haible <bruno@clisp.org>
Simon Josefsson <simon@josefsson.org>
parents:
6404
diff
changeset
|
551 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
|
552 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
|
553 uint32_t left, right, work; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
554 uint32_t *keys; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
555 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
556 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
|
557 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
558 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
|
559 INITIAL_PERMUTATION (left, work, right) |
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 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
|
565 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
|
566 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
|
567 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
|
568 FINAL_PERMUTATION (right, work, left) |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
569 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
|
570 } |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
571 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
572 void |
8433
51634bc628de
* lib/quotearg.c: Include <wctype.h> early, before the definition of
Paul Eggert <eggert@cs.ucla.edu>
parents:
7584
diff
changeset
|
573 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
|
574 { |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
575 int i; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
576 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
577 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
|
578 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
|
579 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
580 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
|
581 { |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
582 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
|
583 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
|
584 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
585 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
|
586 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
|
587 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
588 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
|
589 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
|
590 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
591 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
|
592 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
|
593 } |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
594 } |
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 void |
8433
51634bc628de
* lib/quotearg.c: Include <wctype.h> early, before the definition of
Paul Eggert <eggert@cs.ucla.edu>
parents:
7584
diff
changeset
|
597 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
|
598 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
|
599 { |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
600 int i; |
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 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
|
603 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
|
604 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
|
605 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
606 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
|
607 { |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
608 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
|
609 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
|
610 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
611 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
|
612 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
|
613 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
614 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
|
615 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
|
616 } |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
617 } |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
618 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
619 void |
8433
51634bc628de
* lib/quotearg.c: Include <wctype.h> early, before the definition of
Paul Eggert <eggert@cs.ucla.edu>
parents:
7584
diff
changeset
|
620 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
|
621 const char * _from, |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
622 char * _to, int mode) |
6404
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
623 { |
6782
6c08fff6ef83
2006-05-10 Bruno Haible <bruno@clisp.org>
Simon Josefsson <simon@josefsson.org>
parents:
6404
diff
changeset
|
624 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
|
625 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
|
626 uint32_t left, right, work; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
627 uint32_t *keys; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
628 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
629 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
|
630 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
631 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
|
632 INITIAL_PERMUTATION (left, work, right) |
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 (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
|
638 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
|
639 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
|
640 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
|
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 (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
|
646 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
|
647 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
|
648 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
|
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 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
|
654 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
|
655 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
|
656 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
|
657 FINAL_PERMUTATION (right, work, left) |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
658 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
|
659 } |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
660 |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
661 bool |
8433
51634bc628de
* lib/quotearg.c: Include <wctype.h> early, before the definition of
Paul Eggert <eggert@cs.ucla.edu>
parents:
7584
diff
changeset
|
662 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
|
663 { |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
664 if (keylen != 24) |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
665 return false; |
d38a727f8479
Add des, des-tests, gc-des, gc-des-tests modules.
Simon Josefsson <simon@josefsson.org>
parents:
diff
changeset
|
666 |
8433
51634bc628de
* lib/quotearg.c: Include <wctype.h> early, before the definition of
Paul Eggert <eggert@cs.ucla.edu>
parents:
7584
diff
changeset
|
667 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
|
668 |
8441 | 669 return !(gl_des_is_weak_key (key) |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
670 || gl_des_is_weak_key (key + 8) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
8473
diff
changeset
|
671 || 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
|
672 } |