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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
9759915b2aca all: prefer https: URLs
Paul Eggert <eggert@cs.ucla.edu>
parents: 18626
diff changeset
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
b396ac3f1039 Use new namespace.
Simon Josefsson <simon@josefsson.org>
parents: 8433
diff changeset
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
a712776b11ce maint: spelling fixes
Paul Eggert <eggert@cs.ucla.edu>
parents: 16201
diff changeset
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
b396ac3f1039 Use new namespace.
Simon Josefsson <simon@josefsson.org>
parents: 8433
diff changeset
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
b396ac3f1039 Use new namespace.
Simon Josefsson <simon@josefsson.org>
parents: 8433
diff changeset
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
b396ac3f1039 Use new namespace.
Simon Josefsson <simon@josefsson.org>
parents: 8433
diff changeset
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 }