⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 des.txt

📁 des writen in c
💻 TXT
📖 第 1 页 / 共 4 页
字号:


  1 /* 
  2  * Cryptographic API.
  3  *
  4  * DES & Triple DES EDE Cipher Algorithms.
  5  *
  6  * Originally released as descore by Dana L. How <how@isl.stanford.edu>.
  7  * Modified by Raimar Falke <rf13@inf.tu-dresden.de> for the Linux-Kernel.
  8  * Derived from Cryptoapi and Nettle implementations, adapted for in-place
  9  * scatterlist interface.  Changed LGPL to GPL per section 3 of the LGPL.
 10  *
 11  * Copyright (c) 1992 Dana L. How.
 12  * Copyright (c) Raimar Falke <rf13@inf.tu-dresden.de> 
 13  * Copyright (c) Gisle S鎙ensminde <gisle@ii.uib.no>
 14  * Copyright (C) 2001 Niels M鰈ler.
 15  * Copyright (c) 2002 James Morris <jmorris@intercode.com.au>
 16  *
 17  * This program is free software; you can redistribute it and/or modify
 18  * it under the terms of the GNU General Public License as published by
 19  * the Free Software Foundation; either version 2 of the License, or
 20  * (at your option) any later version.
 21  *
 22  */
 23 #include <linux/init.h>
 24 #include <linux/module.h>
 25 #include <linux/mm.h>
 26 #include <linux/errno.h>
 27 #include <asm/scatterlist.h>
 28 #include <linux/crypto.h>
 29 
 30 #define DES_KEY_SIZE            8
 31 #define DES_EXPKEY_WORDS        32
 32 #define DES_BLOCK_SIZE          8
 33 
 34 #define DES3_EDE_KEY_SIZE       (3 * DES_KEY_SIZE)
 35 #define DES3_EDE_EXPKEY_WORDS   (3 * DES_EXPKEY_WORDS)
 36 #define DES3_EDE_BLOCK_SIZE     DES_BLOCK_SIZE
 37 
 38 #define ROR(d,c,o)      ((d) = (d) >> (c) | (d) << (o))
 39 
 40 struct des_ctx {
 41         u8 iv[DES_BLOCK_SIZE];
 42         u32 expkey[DES_EXPKEY_WORDS];
 43 };
 44 
 45 struct des3_ede_ctx {
 46         u8 iv[DES_BLOCK_SIZE];
 47         u32 expkey[DES3_EDE_EXPKEY_WORDS];
 48 };
 49 
 50 static const u32 des_keymap[] = {
 51         0x02080008, 0x02082000, 0x00002008, 0x00000000,
 52         0x02002000, 0x00080008, 0x02080000, 0x02082008,
 53         0x00000008, 0x02000000, 0x00082000, 0x00002008,
 54         0x00082008, 0x02002008, 0x02000008, 0x02080000,
 55         0x00002000, 0x00082008, 0x00080008, 0x02002000,
 56         0x02082008, 0x02000008, 0x00000000, 0x00082000,
 57         0x02000000, 0x00080000, 0x02002008, 0x02080008,
 58         0x00080000, 0x00002000, 0x02082000, 0x00000008,
 59         0x00080000, 0x00002000, 0x02000008, 0x02082008,
 60         0x00002008, 0x02000000, 0x00000000, 0x00082000,
 61         0x02080008, 0x02002008, 0x02002000, 0x00080008,
 62         0x02082000, 0x00000008, 0x00080008, 0x02002000,
 63         0x02082008, 0x00080000, 0x02080000, 0x02000008,
 64         0x00082000, 0x00002008, 0x02002008, 0x02080000,
 65         0x00000008, 0x02082000, 0x00082008, 0x00000000,
 66         0x02000000, 0x02080008, 0x00002000, 0x00082008,
 67 
 68         0x08000004, 0x00020004, 0x00000000, 0x08020200,
 69         0x00020004, 0x00000200, 0x08000204, 0x00020000,
 70         0x00000204, 0x08020204, 0x00020200, 0x08000000,
 71         0x08000200, 0x08000004, 0x08020000, 0x00020204,
 72         0x00020000, 0x08000204, 0x08020004, 0x00000000,
 73         0x00000200, 0x00000004, 0x08020200, 0x08020004,
 74         0x08020204, 0x08020000, 0x08000000, 0x00000204,
 75         0x00000004, 0x00020200, 0x00020204, 0x08000200,
 76         0x00000204, 0x08000000, 0x08000200, 0x00020204,
 77         0x08020200, 0x00020004, 0x00000000, 0x08000200,
 78         0x08000000, 0x00000200, 0x08020004, 0x00020000,
 79         0x00020004, 0x08020204, 0x00020200, 0x00000004,
 80         0x08020204, 0x00020200, 0x00020000, 0x08000204,
 81         0x08000004, 0x08020000, 0x00020204, 0x00000000,
 82         0x00000200, 0x08000004, 0x08000204, 0x08020200,
 83         0x08020000, 0x00000204, 0x00000004, 0x08020004,
 84 
 85         0x80040100, 0x01000100, 0x80000000, 0x81040100,
 86         0x00000000, 0x01040000, 0x81000100, 0x80040000,
 87         0x01040100, 0x81000000, 0x01000000, 0x80000100,
 88         0x81000000, 0x80040100, 0x00040000, 0x01000000,
 89         0x81040000, 0x00040100, 0x00000100, 0x80000000,
 90         0x00040100, 0x81000100, 0x01040000, 0x00000100,
 91         0x80000100, 0x00000000, 0x80040000, 0x01040100,
 92         0x01000100, 0x81040000, 0x81040100, 0x00040000,
 93         0x81040000, 0x80000100, 0x00040000, 0x81000000,
 94         0x00040100, 0x01000100, 0x80000000, 0x01040000,
 95         0x81000100, 0x00000000, 0x00000100, 0x80040000,
 96         0x00000000, 0x81040000, 0x01040100, 0x00000100,
 97         0x01000000, 0x81040100, 0x80040100, 0x00040000,
 98         0x81040100, 0x80000000, 0x01000100, 0x80040100,
 99         0x80040000, 0x00040100, 0x01040000, 0x81000100,
100         0x80000100, 0x01000000, 0x81000000, 0x01040100,
101 
102         0x04010801, 0x00000000, 0x00010800, 0x04010000,
103         0x04000001, 0x00000801, 0x04000800, 0x00010800,
104         0x00000800, 0x04010001, 0x00000001, 0x04000800,
105         0x00010001, 0x04010800, 0x04010000, 0x00000001,
106         0x00010000, 0x04000801, 0x04010001, 0x00000800,
107         0x00010801, 0x04000000, 0x00000000, 0x00010001,
108         0x04000801, 0x00010801, 0x04010800, 0x04000001,
109         0x04000000, 0x00010000, 0x00000801, 0x04010801,
110         0x00010001, 0x04010800, 0x04000800, 0x00010801,
111         0x04010801, 0x00010001, 0x04000001, 0x00000000,
112         0x04000000, 0x00000801, 0x00010000, 0x04010001,
113         0x00000800, 0x04000000, 0x00010801, 0x04000801,
114         0x04010800, 0x00000800, 0x00000000, 0x04000001,
115         0x00000001, 0x04010801, 0x00010800, 0x04010000,
116         0x04010001, 0x00010000, 0x00000801, 0x04000800,
117         0x04000801, 0x00000001, 0x04010000, 0x00010800,
118 
119         0x00000400, 0x00000020, 0x00100020, 0x40100000,
120         0x40100420, 0x40000400, 0x00000420, 0x00000000,
121         0x00100000, 0x40100020, 0x40000020, 0x00100400,
122         0x40000000, 0x00100420, 0x00100400, 0x40000020,
123         0x40100020, 0x00000400, 0x40000400, 0x40100420,
124         0x00000000, 0x00100020, 0x40100000, 0x00000420,
125         0x40100400, 0x40000420, 0x00100420, 0x40000000,
126         0x40000420, 0x40100400, 0x00000020, 0x00100000,
127         0x40000420, 0x00100400, 0x40100400, 0x40000020,
128         0x00000400, 0x00000020, 0x00100000, 0x40100400,
129         0x40100020, 0x40000420, 0x00000420, 0x00000000,
130         0x00000020, 0x40100000, 0x40000000, 0x00100020,
131         0x00000000, 0x40100020, 0x00100020, 0x00000420,
132         0x40000020, 0x00000400, 0x40100420, 0x00100000,
133         0x00100420, 0x40000000, 0x40000400, 0x40100420,
134         0x40100000, 0x00100420, 0x00100400, 0x40000400,
135 
136         0x00800000, 0x00001000, 0x00000040, 0x00801042,
137         0x00801002, 0x00800040, 0x00001042, 0x00801000,
138         0x00001000, 0x00000002, 0x00800002, 0x00001040,
139         0x00800042, 0x00801002, 0x00801040, 0x00000000,
140         0x00001040, 0x00800000, 0x00001002, 0x00000042,
141         0x00800040, 0x00001042, 0x00000000, 0x00800002,
142         0x00000002, 0x00800042, 0x00801042, 0x00001002,
143         0x00801000, 0x00000040, 0x00000042, 0x00801040,
144         0x00801040, 0x00800042, 0x00001002, 0x00801000,
145         0x00001000, 0x00000002, 0x00800002, 0x00800040,
146         0x00800000, 0x00001040, 0x00801042, 0x00000000,
147         0x00001042, 0x00800000, 0x00000040, 0x00001002,
148         0x00800042, 0x00000040, 0x00000000, 0x00801042,
149         0x00801002, 0x00801040, 0x00000042, 0x00001000,
150         0x00001040, 0x00801002, 0x00800040, 0x00000042,
151         0x00000002, 0x00001042, 0x00801000, 0x00800002,
152 
153         0x10400000, 0x00404010, 0x00000010, 0x10400010,
154         0x10004000, 0x00400000, 0x10400010, 0x00004010,
155         0x00400010, 0x00004000, 0x00404000, 0x10000000,
156         0x10404010, 0x10000010, 0x10000000, 0x10404000,
157         0x00000000, 0x10004000, 0x00404010, 0x00000010,
158         0x10000010, 0x10404010, 0x00004000, 0x10400000,
159         0x10404000, 0x00400010, 0x10004010, 0x00404000,
160         0x00004010, 0x00000000, 0x00400000, 0x10004010,
161         0x00404010, 0x00000010, 0x10000000, 0x00004000,
162         0x10000010, 0x10004000, 0x00404000, 0x10400010,
163         0x00000000, 0x00404010, 0x00004010, 0x10404000,
164         0x10004000, 0x00400000, 0x10404010, 0x10000000,
165         0x10004010, 0x10400000, 0x00400000, 0x10404010,
166         0x00004000, 0x00400010, 0x10400010, 0x00004010,
167         0x00400010, 0x00000000, 0x10404000, 0x10000010,
168         0x10400000, 0x10004010, 0x00000010, 0x00404000,
169 
170         0x00208080, 0x00008000, 0x20200000, 0x20208080,
171         0x00200000, 0x20008080, 0x20008000, 0x20200000,
172         0x20008080, 0x00208080, 0x00208000, 0x20000080,
173         0x20200080, 0x00200000, 0x00000000, 0x20008000,
174         0x00008000, 0x20000000, 0x00200080, 0x00008080,
175         0x20208080, 0x00208000, 0x20000080, 0x00200080,
176         0x20000000, 0x00000080, 0x00008080, 0x20208000,
177         0x00000080, 0x20200080, 0x20208000, 0x00000000,
178         0x00000000, 0x20208080, 0x00200080, 0x20008000,
179         0x00208080, 0x00008000, 0x20000080, 0x00200080,
180         0x20208000, 0x00000080, 0x00008080, 0x20200000,
181         0x20008080, 0x20000000, 0x20200000, 0x00208000,
182         0x20208080, 0x00008080, 0x00208000, 0x20200080,
183         0x00200000, 0x20000080, 0x20008000, 0x00000000,
184         0x00008000, 0x00200000, 0x20200080, 0x00208080,
185         0x20000000, 0x20208000, 0x00000080, 0x20008080,
186 };
187 
188 static const u8 rotors[] = {
189         34, 13,  5, 46, 47, 18, 32, 41, 11, 53, 33, 20,
190         14, 36, 30, 24, 49,  2, 15, 37, 42, 50,  0, 21,
191         38, 48,  6, 26, 39,  4, 52, 25, 12, 27, 31, 40,
192         1, 17, 28, 29, 23, 51, 35,  7,  3, 22,  9, 43,
193 
194         41, 20, 12, 53, 54, 25, 39, 48, 18, 31, 40, 27,
195         21, 43, 37,  0,  1,  9, 22, 44, 49,  2,  7, 28,
196         45, 55, 13, 33, 46, 11,  6, 32, 19, 34, 38, 47,
197         8, 24, 35, 36, 30,  3, 42, 14, 10, 29, 16, 50,
198 
199         55, 34, 26, 38, 11, 39, 53,  5, 32, 45, 54, 41,
200         35,  2, 51, 14, 15, 23, 36,  3,  8, 16, 21, 42,
201         6, 12, 27, 47, 31, 25, 20, 46, 33, 48, 52,  4,
202         22,  7, 49, 50, 44, 17,  1, 28, 24, 43, 30,  9,
203 
204         12, 48, 40, 52, 25, 53, 38, 19, 46,  6, 11, 55,
205         49, 16, 10, 28, 29, 37, 50, 17, 22, 30, 35,  1,
206         20, 26, 41,  4, 45, 39, 34, 31, 47,  5, 13, 18,
207         36, 21,  8,  9,  3,  0, 15, 42,  7,  2, 44, 23,
208 
209         26,  5, 54, 13, 39, 38, 52, 33, 31, 20, 25, 12,
210         8, 30, 24, 42, 43, 51,  9,  0, 36, 44, 49, 15,
211         34, 40, 55, 18,  6, 53, 48, 45,  4, 19, 27, 32,
212         50, 35, 22, 23, 17, 14, 29,  1, 21, 16,  3, 37,
213 
214         40, 19, 11, 27, 53, 52, 13, 47, 45, 34, 39, 26,
215         22, 44,  7,  1,  2, 10, 23, 14, 50,  3,  8, 29,
216         48, 54, 12, 32, 20, 38,  5,  6, 18, 33, 41, 46,
217         9, 49, 36, 37,  0, 28, 43, 15, 35, 30, 17, 51,
218 
219         54, 33, 25, 41, 38, 13, 27,  4,  6, 48, 53, 40,
220         36,  3, 21, 15, 16, 24, 37, 28,  9, 17, 22, 43,
221         5, 11, 26, 46, 34, 52, 19, 20, 32, 47, 55, 31,
222         23,  8, 50, 51, 14, 42,  2, 29, 49, 44,  0, 10,
223 
224         11, 47, 39, 55, 52, 27, 41, 18, 20,  5, 38, 54,
225         50, 17, 35, 29, 30,  7, 51, 42, 23,  0, 36,  2,
226         19, 25, 40, 31, 48, 13, 33, 34, 46,  4, 12, 45,
227         37, 22,  9, 10, 28,  1, 16, 43,  8,  3, 14, 24,
228 
229         18, 54, 46,  5,  6, 34, 48, 25, 27, 12, 45,  4,
230         2, 24, 42, 36, 37, 14,  3, 49, 30,  7, 43,  9,
231         26, 32, 47, 38, 55, 20, 40, 41, 53, 11, 19, 52,
232         44, 29, 16, 17, 35,  8, 23, 50, 15, 10, 21,  0,
233 
234         32, 11, 31, 19, 20, 48,  5, 39, 41, 26,  6, 18,
235         16,  7,  1, 50, 51, 28, 17,  8, 44, 21,  2, 23,
236         40, 46,  4, 52, 12, 34, 54, 55, 38, 25, 33, 13,
237         3, 43, 30,  0, 49, 22, 37,  9, 29, 24, 35, 14,
238 
239         46, 25, 45, 33, 34,  5, 19, 53, 55, 40, 20, 32,
240         30, 21, 15,  9, 10, 42,  0, 22,  3, 35, 16, 37,
241         54, 31, 18, 13, 26, 48, 11, 12, 52, 39, 47, 27,
242         17,  2, 44, 14,  8, 36, 51, 23, 43,  7, 49, 28,
243 
244         31, 39,  6, 47, 48, 19, 33, 38, 12, 54, 34, 46,
245         44, 35, 29, 23, 24,  1, 14, 36, 17, 49, 30, 51,
246         11, 45, 32, 27, 40,  5, 25, 26, 13, 53,  4, 41,
247         0, 16,  3, 28, 22, 50, 10, 37,  2, 21,  8, 42,
248 
249         45, 53, 20,  4,  5, 33, 47, 52, 26, 11, 48, 31,
250         3, 49, 43, 37,  7, 15, 28, 50,  0,  8, 44, 10,
251         25,  6, 46, 41, 54, 19, 39, 40, 27, 38, 18, 55,
252         14, 30, 17, 42, 36,  9, 24, 51, 16, 35, 22,  1,
253 
254         6, 38, 34, 18, 19, 47,  4, 13, 40, 25,  5, 45,
255         17,  8,  2, 51, 21, 29, 42,  9, 14, 22,  3, 24,
256         39, 20, 31, 55, 11, 33, 53, 54, 41, 52, 32, 12,
257         28, 44,  0,  1, 50, 23,  7, 10, 30, 49, 36, 15,
258 
259         20, 52, 48, 32, 33,  4, 18, 27, 54, 39, 19,  6,
260         0, 22, 16, 10, 35, 43,  1, 23, 28, 36, 17,  7,
261         53, 34, 45, 12, 25, 47, 38, 11, 55, 13, 46, 26,
262         42,  3, 14, 15,  9, 37, 21, 24, 44,  8, 50, 29,
263 
264         27,  6, 55, 39, 40, 11, 25, 34,  4, 46, 26, 13,
265         7, 29, 23, 17, 42, 50,  8, 30, 35, 43, 24, 14,
266         31, 41, 52, 19, 32, 54, 45, 18,  5, 20, 53, 33,
267         49, 10, 21, 22, 16, 44, 28,  0, 51, 15,  2, 36,
268 };
269 
270 static const u8 parity[] = {
271         8,1,0,8,0,8,8,0,0,8,8,0,8,0,2,8,0,8,8,0,8,0,0,8,8,0,0,8,0,8,8,3,
272         0,8,8,0,8,0,0,8,8,0,0,8,0,8,8,0,8,0,0,8,0,8,8,0,0,8,8,0,8,0,0,8,
273         0,8,8,0,8,0,0,8,8,0,0,8,0,8,8,0,8,0,0,8,0,8,8,0,0,8,8,0,8,0,0,8,
274         8,0,0,8,0,8,8,0,0,8,8,0,8,0,0,8,0,8,8,0,8,0,0,8,8,0,0,8,0,8,8,0,
275         0,8,8,0,8,0,0,8,8,0,0,8,0,8,8,0,8,0,0,8,0,8,8,0,0,8,8,0,8,0,0,8,
276         8,0,0,8,0,8,8,0,0,8,8,0,8,0,0,8,0,8,8,0,8,0,0,8,8,0,0,8,0,8,8,0,
277         8,0,0,8,0,8,8,0,0,8,8,0,8,0,0,8,0,8,8,0,8,0,0,8,8,0,0,8,0,8,8,0,
278         4,8,8,0,8,0,0,8,8,0,0,8,0,8,8,0,8,5,0,8,0,8,8,0,0,8,8,0,8,0,6,8,
279 };
280 
281 
282 static void des_small_fips_encrypt(u32 *expkey, u8 *dst, const u8 *src)
283 {
284         u32 x, y, z;
285         
286         x  = src[7];
287         x <<= 8;
288         x |= src[6];
289         x <<= 8;
290         x |= src[5];
291         x <<= 8;
292         x |= src[4];
293         y  = src[3];
294         y <<= 8;
295         y |= src[2];
296         y <<= 8;
297         y |= src[1];
298         y <<= 8;
299         y |= src[0];
300         z  = ((x >> 004) ^ y) & 0x0F0F0F0FL;
301         x ^= z << 004;
302         y ^= z;
303         z  = ((y >> 020) ^ x) & 0x0000FFFFL;
304         y ^= z << 020;
305         x ^= z;
306         z  = ((x >> 002) ^ y) & 0x33333333L;
307         x ^= z << 002;
308         y ^= z;
309         z  = ((y >> 010) ^ x) & 0x00FF00FFL;
310         y ^= z << 010;
311         x ^= z;
312         x  = x >> 1 | x << 31;
313         z  = (x ^ y) & 0x55555555L;
314         y ^= z;
315         x ^= z;
316         y  = y >> 1 | y << 31;
317         z  = expkey[0];
318         z ^= y;
319         x ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0xFC & z));
320         z >>= 8;
321         x ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0xFC & z));
322         z >>= 8;
323         x ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0xFC & z));
324         z >>= 8;
325         x ^= * (u32 *) ((u8 *) des_keymap + (0xFC & z));
326         z  = expkey[1];

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -