annotate lib/des.c @ 8473:dba8f47ea9b8

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