Mercurial > pidgin.yaz
annotate libpurple/ciphers/des.c @ 31682:58d9bcd75866
jabber: Compatibility with older servers
Per xnyhps, the pidgin.im ejabberd needs this. Refs #7501.
author | Paul Aurich <paul@darkrain42.org> |
---|---|
date | Sun, 20 Feb 2011 18:21:47 +0000 |
parents | 2d3c1197f930 |
children | ca94413ccd0e |
rev | line source |
---|---|
31667
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
1 /* |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
2 * purple |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
3 * |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
4 * Purple is the legal property of its developers, whose names are too numerous |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
5 * to list here. Please refer to the COPYRIGHT file distributed with this |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
6 * source distribution. |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
7 * |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
8 * Original des taken from gpg |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
9 * |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
10 * des.c - DES and Triple-DES encryption/decryption Algorithm |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
11 * Copyright (C) 1998 Free Software Foundation, Inc. |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
12 * |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
13 * Please see below for more legal information! |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
14 * |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
15 * According to the definition of DES in FIPS PUB 46-2 from December 1993. |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
16 * For a description of triple encryption, see: |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
17 * Bruce Schneier: Applied Cryptography. Second Edition. |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
18 * John Wiley & Sons, 1996. ISBN 0-471-12845-7. Pages 358 ff. |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
19 * |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
20 * This file is part of GnuPG. |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
21 * |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
22 * This program is free software; you can redistribute it and/or modify |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
23 * it under the terms of the GNU General Public License as published by |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
24 * the Free Software Foundation; either version 2 of the License, or |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
25 * (at your option) any later version. |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
26 * |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
27 * This program is distributed in the hope that it will be useful, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
28 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
29 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
30 * GNU General Public License for more details. |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
31 * |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
32 * You should have received a copy of the GNU General Public License |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
33 * along with this program; if not, write to the Free Software |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
34 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
35 */ |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
36 #include <cipher.h> |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
37 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
38 /****************************************************************************** |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
39 * DES |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
40 *****************************************************************************/ |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
41 typedef struct _des_ctx |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
42 { |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
43 guint32 encrypt_subkeys[32]; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
44 guint32 decrypt_subkeys[32]; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
45 } des_ctx[1]; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
46 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
47 /* |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
48 * The s-box values are permuted according to the 'primitive function P' |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
49 */ |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
50 static const guint32 sbox1[64] = |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
51 { |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
52 0x00808200, 0x00000000, 0x00008000, 0x00808202, 0x00808002, 0x00008202, 0x00000002, 0x00008000, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
53 0x00000200, 0x00808200, 0x00808202, 0x00000200, 0x00800202, 0x00808002, 0x00800000, 0x00000002, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
54 0x00000202, 0x00800200, 0x00800200, 0x00008200, 0x00008200, 0x00808000, 0x00808000, 0x00800202, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
55 0x00008002, 0x00800002, 0x00800002, 0x00008002, 0x00000000, 0x00000202, 0x00008202, 0x00800000, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
56 0x00008000, 0x00808202, 0x00000002, 0x00808000, 0x00808200, 0x00800000, 0x00800000, 0x00000200, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
57 0x00808002, 0x00008000, 0x00008200, 0x00800002, 0x00000200, 0x00000002, 0x00800202, 0x00008202, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
58 0x00808202, 0x00008002, 0x00808000, 0x00800202, 0x00800002, 0x00000202, 0x00008202, 0x00808200, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
59 0x00000202, 0x00800200, 0x00800200, 0x00000000, 0x00008002, 0x00008200, 0x00000000, 0x00808002 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
60 }; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
61 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
62 static const guint32 sbox2[64] = |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
63 { |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
64 0x40084010, 0x40004000, 0x00004000, 0x00084010, 0x00080000, 0x00000010, 0x40080010, 0x40004010, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
65 0x40000010, 0x40084010, 0x40084000, 0x40000000, 0x40004000, 0x00080000, 0x00000010, 0x40080010, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
66 0x00084000, 0x00080010, 0x40004010, 0x00000000, 0x40000000, 0x00004000, 0x00084010, 0x40080000, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
67 0x00080010, 0x40000010, 0x00000000, 0x00084000, 0x00004010, 0x40084000, 0x40080000, 0x00004010, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
68 0x00000000, 0x00084010, 0x40080010, 0x00080000, 0x40004010, 0x40080000, 0x40084000, 0x00004000, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
69 0x40080000, 0x40004000, 0x00000010, 0x40084010, 0x00084010, 0x00000010, 0x00004000, 0x40000000, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
70 0x00004010, 0x40084000, 0x00080000, 0x40000010, 0x00080010, 0x40004010, 0x40000010, 0x00080010, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
71 0x00084000, 0x00000000, 0x40004000, 0x00004010, 0x40000000, 0x40080010, 0x40084010, 0x00084000 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
72 }; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
73 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
74 static const guint32 sbox3[64] = |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
75 { |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
76 0x00000104, 0x04010100, 0x00000000, 0x04010004, 0x04000100, 0x00000000, 0x00010104, 0x04000100, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
77 0x00010004, 0x04000004, 0x04000004, 0x00010000, 0x04010104, 0x00010004, 0x04010000, 0x00000104, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
78 0x04000000, 0x00000004, 0x04010100, 0x00000100, 0x00010100, 0x04010000, 0x04010004, 0x00010104, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
79 0x04000104, 0x00010100, 0x00010000, 0x04000104, 0x00000004, 0x04010104, 0x00000100, 0x04000000, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
80 0x04010100, 0x04000000, 0x00010004, 0x00000104, 0x00010000, 0x04010100, 0x04000100, 0x00000000, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
81 0x00000100, 0x00010004, 0x04010104, 0x04000100, 0x04000004, 0x00000100, 0x00000000, 0x04010004, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
82 0x04000104, 0x00010000, 0x04000000, 0x04010104, 0x00000004, 0x00010104, 0x00010100, 0x04000004, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
83 0x04010000, 0x04000104, 0x00000104, 0x04010000, 0x00010104, 0x00000004, 0x04010004, 0x00010100 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
84 }; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
85 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
86 static const guint32 sbox4[64] = |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
87 { |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
88 0x80401000, 0x80001040, 0x80001040, 0x00000040, 0x00401040, 0x80400040, 0x80400000, 0x80001000, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
89 0x00000000, 0x00401000, 0x00401000, 0x80401040, 0x80000040, 0x00000000, 0x00400040, 0x80400000, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
90 0x80000000, 0x00001000, 0x00400000, 0x80401000, 0x00000040, 0x00400000, 0x80001000, 0x00001040, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
91 0x80400040, 0x80000000, 0x00001040, 0x00400040, 0x00001000, 0x00401040, 0x80401040, 0x80000040, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
92 0x00400040, 0x80400000, 0x00401000, 0x80401040, 0x80000040, 0x00000000, 0x00000000, 0x00401000, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
93 0x00001040, 0x00400040, 0x80400040, 0x80000000, 0x80401000, 0x80001040, 0x80001040, 0x00000040, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
94 0x80401040, 0x80000040, 0x80000000, 0x00001000, 0x80400000, 0x80001000, 0x00401040, 0x80400040, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
95 0x80001000, 0x00001040, 0x00400000, 0x80401000, 0x00000040, 0x00400000, 0x00001000, 0x00401040 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
96 }; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
97 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
98 static const guint32 sbox5[64] = |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
99 { |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
100 0x00000080, 0x01040080, 0x01040000, 0x21000080, 0x00040000, 0x00000080, 0x20000000, 0x01040000, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
101 0x20040080, 0x00040000, 0x01000080, 0x20040080, 0x21000080, 0x21040000, 0x00040080, 0x20000000, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
102 0x01000000, 0x20040000, 0x20040000, 0x00000000, 0x20000080, 0x21040080, 0x21040080, 0x01000080, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
103 0x21040000, 0x20000080, 0x00000000, 0x21000000, 0x01040080, 0x01000000, 0x21000000, 0x00040080, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
104 0x00040000, 0x21000080, 0x00000080, 0x01000000, 0x20000000, 0x01040000, 0x21000080, 0x20040080, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
105 0x01000080, 0x20000000, 0x21040000, 0x01040080, 0x20040080, 0x00000080, 0x01000000, 0x21040000, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
106 0x21040080, 0x00040080, 0x21000000, 0x21040080, 0x01040000, 0x00000000, 0x20040000, 0x21000000, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
107 0x00040080, 0x01000080, 0x20000080, 0x00040000, 0x00000000, 0x20040000, 0x01040080, 0x20000080 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
108 }; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
109 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
110 static const guint32 sbox6[64] = |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
111 { |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
112 0x10000008, 0x10200000, 0x00002000, 0x10202008, 0x10200000, 0x00000008, 0x10202008, 0x00200000, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
113 0x10002000, 0x00202008, 0x00200000, 0x10000008, 0x00200008, 0x10002000, 0x10000000, 0x00002008, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
114 0x00000000, 0x00200008, 0x10002008, 0x00002000, 0x00202000, 0x10002008, 0x00000008, 0x10200008, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
115 0x10200008, 0x00000000, 0x00202008, 0x10202000, 0x00002008, 0x00202000, 0x10202000, 0x10000000, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
116 0x10002000, 0x00000008, 0x10200008, 0x00202000, 0x10202008, 0x00200000, 0x00002008, 0x10000008, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
117 0x00200000, 0x10002000, 0x10000000, 0x00002008, 0x10000008, 0x10202008, 0x00202000, 0x10200000, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
118 0x00202008, 0x10202000, 0x00000000, 0x10200008, 0x00000008, 0x00002000, 0x10200000, 0x00202008, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
119 0x00002000, 0x00200008, 0x10002008, 0x00000000, 0x10202000, 0x10000000, 0x00200008, 0x10002008 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
120 }; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
121 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
122 static const guint32 sbox7[64] = |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
123 { |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
124 0x00100000, 0x02100001, 0x02000401, 0x00000000, 0x00000400, 0x02000401, 0x00100401, 0x02100400, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
125 0x02100401, 0x00100000, 0x00000000, 0x02000001, 0x00000001, 0x02000000, 0x02100001, 0x00000401, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
126 0x02000400, 0x00100401, 0x00100001, 0x02000400, 0x02000001, 0x02100000, 0x02100400, 0x00100001, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
127 0x02100000, 0x00000400, 0x00000401, 0x02100401, 0x00100400, 0x00000001, 0x02000000, 0x00100400, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
128 0x02000000, 0x00100400, 0x00100000, 0x02000401, 0x02000401, 0x02100001, 0x02100001, 0x00000001, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
129 0x00100001, 0x02000000, 0x02000400, 0x00100000, 0x02100400, 0x00000401, 0x00100401, 0x02100400, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
130 0x00000401, 0x02000001, 0x02100401, 0x02100000, 0x00100400, 0x00000000, 0x00000001, 0x02100401, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
131 0x00000000, 0x00100401, 0x02100000, 0x00000400, 0x02000001, 0x02000400, 0x00000400, 0x00100001 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
132 }; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
133 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
134 static const guint32 sbox8[64] = |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
135 { |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
136 0x08000820, 0x00000800, 0x00020000, 0x08020820, 0x08000000, 0x08000820, 0x00000020, 0x08000000, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
137 0x00020020, 0x08020000, 0x08020820, 0x00020800, 0x08020800, 0x00020820, 0x00000800, 0x00000020, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
138 0x08020000, 0x08000020, 0x08000800, 0x00000820, 0x00020800, 0x00020020, 0x08020020, 0x08020800, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
139 0x00000820, 0x00000000, 0x00000000, 0x08020020, 0x08000020, 0x08000800, 0x00020820, 0x00020000, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
140 0x00020820, 0x00020000, 0x08020800, 0x00000800, 0x00000020, 0x08020020, 0x00000800, 0x00020820, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
141 0x08000800, 0x00000020, 0x08000020, 0x08020000, 0x08020020, 0x08000000, 0x00020000, 0x08000820, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
142 0x00000000, 0x08020820, 0x00020020, 0x08000020, 0x08020000, 0x08000800, 0x08000820, 0x00000000, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
143 0x08020820, 0x00020800, 0x00020800, 0x00000820, 0x00000820, 0x00020020, 0x08000000, 0x08020800 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
144 }; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
145 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
146 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
147 /* |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
148 * * These two tables are part of the 'permuted choice 1' function. |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
149 * * In this implementation several speed improvements are done. |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
150 * */ |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
151 static const guint32 leftkey_swap[16] = |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
152 { |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
153 0x00000000, 0x00000001, 0x00000100, 0x00000101, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
154 0x00010000, 0x00010001, 0x00010100, 0x00010101, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
155 0x01000000, 0x01000001, 0x01000100, 0x01000101, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
156 0x01010000, 0x01010001, 0x01010100, 0x01010101 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
157 }; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
158 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
159 static const guint32 rightkey_swap[16] = |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
160 { |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
161 0x00000000, 0x01000000, 0x00010000, 0x01010000, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
162 0x00000100, 0x01000100, 0x00010100, 0x01010100, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
163 0x00000001, 0x01000001, 0x00010001, 0x01010001, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
164 0x00000101, 0x01000101, 0x00010101, 0x01010101, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
165 }; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
166 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
167 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
168 /* |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
169 * Numbers of left shifts per round for encryption subkey schedule |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
170 * To calculate the decryption key scheduling we just reverse the |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
171 * ordering of the subkeys so we can omit the table for decryption |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
172 * subkey schedule. |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
173 */ |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
174 static const guint8 encrypt_rotate_tab[16] = |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
175 { |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
176 1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
177 }; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
178 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
179 /* |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
180 * Macro to swap bits across two words |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
181 **/ |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
182 #define DO_PERMUTATION(a, temp, b, offset, mask) \ |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
183 temp = ((a>>offset) ^ b) & mask; \ |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
184 b ^= temp; \ |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
185 a ^= temp<<offset; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
186 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
187 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
188 /* |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
189 * This performs the 'initial permutation' for the data to be encrypted or decrypted |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
190 **/ |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
191 #define INITIAL_PERMUTATION(left, temp, right) \ |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
192 DO_PERMUTATION(left, temp, right, 4, 0x0f0f0f0f) \ |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
193 DO_PERMUTATION(left, temp, right, 16, 0x0000ffff) \ |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
194 DO_PERMUTATION(right, temp, left, 2, 0x33333333) \ |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
195 DO_PERMUTATION(right, temp, left, 8, 0x00ff00ff) \ |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
196 DO_PERMUTATION(left, temp, right, 1, 0x55555555) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
197 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
198 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
199 /* |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
200 * The 'inverse initial permutation' |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
201 **/ |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
202 #define FINAL_PERMUTATION(left, temp, right) \ |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
203 DO_PERMUTATION(left, temp, right, 1, 0x55555555) \ |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
204 DO_PERMUTATION(right, temp, left, 8, 0x00ff00ff) \ |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
205 DO_PERMUTATION(right, temp, left, 2, 0x33333333) \ |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
206 DO_PERMUTATION(left, temp, right, 16, 0x0000ffff) \ |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
207 DO_PERMUTATION(left, temp, right, 4, 0x0f0f0f0f) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
208 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
209 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
210 /* |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
211 * A full DES round including 'expansion function', 'sbox substitution' |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
212 * and 'primitive function P' but without swapping the left and right word. |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
213 **/ |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
214 #define DES_ROUND(from, to, work, subkey) \ |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
215 work = ((from<<1) | (from>>31)) ^ *subkey++; \ |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
216 to ^= sbox8[ work & 0x3f ]; \ |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
217 to ^= sbox6[ (work>>8) & 0x3f ]; \ |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
218 to ^= sbox4[ (work>>16) & 0x3f ]; \ |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
219 to ^= sbox2[ (work>>24) & 0x3f ]; \ |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
220 work = ((from>>3) | (from<<29)) ^ *subkey++; \ |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
221 to ^= sbox7[ work & 0x3f ]; \ |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
222 to ^= sbox5[ (work>>8) & 0x3f ]; \ |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
223 to ^= sbox3[ (work>>16) & 0x3f ]; \ |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
224 to ^= sbox1[ (work>>24) & 0x3f ]; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
225 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
226 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
227 /* |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
228 * Macros to convert 8 bytes from/to 32bit words |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
229 **/ |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
230 #define READ_64BIT_DATA(data, left, right) \ |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
231 left = (data[0] << 24) | (data[1] << 16) | (data[2] << 8) | data[3]; \ |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
232 right = (data[4] << 24) | (data[5] << 16) | (data[6] << 8) | data[7]; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
233 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
234 #define WRITE_64BIT_DATA(data, left, right) \ |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
235 data[0] = (left >> 24) &0xff; data[1] = (left >> 16) &0xff; \ |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
236 data[2] = (left >> 8) &0xff; data[3] = left &0xff; \ |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
237 data[4] = (right >> 24) &0xff; data[5] = (right >> 16) &0xff; \ |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
238 data[6] = (right >> 8) &0xff; data[7] = right &0xff; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
239 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
240 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
241 /* |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
242 * des_key_schedule(): Calculate 16 subkeys pairs (even/odd) for |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
243 * 16 encryption rounds. |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
244 * To calculate subkeys for decryption the caller |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
245 * have to reorder the generated subkeys. |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
246 * |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
247 * rawkey: 8 Bytes of key data |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
248 * subkey: Array of at least 32 guint32s. Will be filled |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
249 * with calculated subkeys. |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
250 * |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
251 **/ |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
252 static void |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
253 des_key_schedule (const guint8 * rawkey, guint32 * subkey) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
254 { |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
255 guint32 left, right, work; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
256 int round; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
257 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
258 READ_64BIT_DATA (rawkey, left, right) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
259 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
260 DO_PERMUTATION (right, work, left, 4, 0x0f0f0f0f) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
261 DO_PERMUTATION (right, work, left, 0, 0x10101010) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
262 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
263 left = (leftkey_swap[(left >> 0) & 0xf] << 3) | (leftkey_swap[(left >> 8) & 0xf] << 2) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
264 | (leftkey_swap[(left >> 16) & 0xf] << 1) | (leftkey_swap[(left >> 24) & 0xf]) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
265 | (leftkey_swap[(left >> 5) & 0xf] << 7) | (leftkey_swap[(left >> 13) & 0xf] << 6) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
266 | (leftkey_swap[(left >> 21) & 0xf] << 5) | (leftkey_swap[(left >> 29) & 0xf] << 4); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
267 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
268 left &= 0x0fffffff; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
269 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
270 right = (rightkey_swap[(right >> 1) & 0xf] << 3) | (rightkey_swap[(right >> 9) & 0xf] << 2) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
271 | (rightkey_swap[(right >> 17) & 0xf] << 1) | (rightkey_swap[(right >> 25) & 0xf]) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
272 | (rightkey_swap[(right >> 4) & 0xf] << 7) | (rightkey_swap[(right >> 12) & 0xf] << 6) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
273 | (rightkey_swap[(right >> 20) & 0xf] << 5) | (rightkey_swap[(right >> 28) & 0xf] << 4); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
274 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
275 right &= 0x0fffffff; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
276 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
277 for (round = 0; round < 16; ++round) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
278 { |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
279 left = ((left << encrypt_rotate_tab[round]) | (left >> (28 - encrypt_rotate_tab[round]))) & 0x0fffffff; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
280 right = ((right << encrypt_rotate_tab[round]) | (right >> (28 - encrypt_rotate_tab[round]))) & 0x0fffffff; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
281 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
282 *subkey++ = ((left << 4) & 0x24000000) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
283 | ((left << 28) & 0x10000000) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
284 | ((left << 14) & 0x08000000) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
285 | ((left << 18) & 0x02080000) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
286 | ((left << 6) & 0x01000000) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
287 | ((left << 9) & 0x00200000) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
288 | ((left >> 1) & 0x00100000) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
289 | ((left << 10) & 0x00040000) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
290 | ((left << 2) & 0x00020000) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
291 | ((left >> 10) & 0x00010000) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
292 | ((right >> 13) & 0x00002000) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
293 | ((right >> 4) & 0x00001000) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
294 | ((right << 6) & 0x00000800) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
295 | ((right >> 1) & 0x00000400) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
296 | ((right >> 14) & 0x00000200) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
297 | (right & 0x00000100) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
298 | ((right >> 5) & 0x00000020) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
299 | ((right >> 10) & 0x00000010) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
300 | ((right >> 3) & 0x00000008) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
301 | ((right >> 18) & 0x00000004) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
302 | ((right >> 26) & 0x00000002) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
303 | ((right >> 24) & 0x00000001); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
304 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
305 *subkey++ = ((left << 15) & 0x20000000) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
306 | ((left << 17) & 0x10000000) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
307 | ((left << 10) & 0x08000000) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
308 | ((left << 22) & 0x04000000) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
309 | ((left >> 2) & 0x02000000) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
310 | ((left << 1) & 0x01000000) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
311 | ((left << 16) & 0x00200000) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
312 | ((left << 11) & 0x00100000) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
313 | ((left << 3) & 0x00080000) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
314 | ((left >> 6) & 0x00040000) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
315 | ((left << 15) & 0x00020000) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
316 | ((left >> 4) & 0x00010000) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
317 | ((right >> 2) & 0x00002000) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
318 | ((right << 8) & 0x00001000) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
319 | ((right >> 14) & 0x00000808) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
320 | ((right >> 9) & 0x00000400) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
321 | ((right) & 0x00000200) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
322 | ((right << 7) & 0x00000100) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
323 | ((right >> 7) & 0x00000020) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
324 | ((right >> 3) & 0x00000011) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
325 | ((right << 2) & 0x00000004) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
326 | ((right >> 21) & 0x00000002); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
327 } |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
328 } |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
329 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
330 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
331 /* |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
332 * Fill a DES context with subkeys calculated from a 64bit key. |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
333 * Does not check parity bits, but simply ignore them. |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
334 * Does not check for weak keys. |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
335 **/ |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
336 static void |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
337 des_set_key (PurpleCipherContext *context, const guchar * key) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
338 { |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
339 struct _des_ctx *ctx = purple_cipher_context_get_data(context); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
340 int i; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
341 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
342 des_key_schedule (key, ctx->encrypt_subkeys); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
343 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
344 for(i=0; i<32; i+=2) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
345 { |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
346 ctx->decrypt_subkeys[i] = ctx->encrypt_subkeys[30-i]; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
347 ctx->decrypt_subkeys[i+1] = ctx->encrypt_subkeys[31-i]; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
348 } |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
349 } |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
350 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
351 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
352 /* |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
353 * Electronic Codebook Mode DES encryption/decryption of data according |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
354 * to 'mode'. |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
355 **/ |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
356 static int |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
357 des_ecb_crypt (struct _des_ctx *ctx, const guint8 * from, guint8 * to, int mode) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
358 { |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
359 guint32 left, right, work; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
360 guint32 *keys; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
361 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
362 keys = mode ? ctx->decrypt_subkeys : ctx->encrypt_subkeys; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
363 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
364 READ_64BIT_DATA (from, left, right) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
365 INITIAL_PERMUTATION (left, work, right) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
366 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
367 DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
368 DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
369 DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
370 DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
371 DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
372 DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
373 DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
374 DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
375 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
376 FINAL_PERMUTATION (right, work, left) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
377 WRITE_64BIT_DATA (to, right, left) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
378 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
379 return 0; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
380 } |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
381 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
382 static gint |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
383 des_encrypt(PurpleCipherContext *context, const guchar data[], |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
384 size_t len, guchar output[], size_t *outlen) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
385 { |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
386 int offset = 0; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
387 int i = 0; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
388 int tmp; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
389 guint8 buf[8] = {0,0,0,0,0,0,0,0}; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
390 while(offset+8<=len) { |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
391 des_ecb_crypt(purple_cipher_context_get_data(context), |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
392 data+offset, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
393 output+offset, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
394 0); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
395 offset+=8; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
396 } |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
397 *outlen = len; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
398 if(offset<len) { |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
399 *outlen += len - offset; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
400 tmp = offset; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
401 while(tmp<len) { |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
402 buf[i++] = data[tmp]; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
403 tmp++; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
404 } |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
405 des_ecb_crypt(purple_cipher_context_get_data(context), |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
406 buf, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
407 output+offset, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
408 0); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
409 } |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
410 return 0; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
411 } |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
412 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
413 static gint |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
414 des_decrypt(PurpleCipherContext *context, const guchar data[], |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
415 size_t len, guchar output[], size_t *outlen) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
416 { |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
417 int offset = 0; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
418 int i = 0; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
419 int tmp; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
420 guint8 buf[8] = {0,0,0,0,0,0,0,0}; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
421 while(offset+8<=len) { |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
422 des_ecb_crypt(purple_cipher_context_get_data(context), |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
423 data+offset, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
424 output+offset, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
425 1); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
426 offset+=8; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
427 } |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
428 *outlen = len; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
429 if(offset<len) { |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
430 *outlen += len - offset; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
431 tmp = offset; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
432 while(tmp<len) { |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
433 buf[i++] = data[tmp]; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
434 tmp++; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
435 } |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
436 des_ecb_crypt(purple_cipher_context_get_data(context), |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
437 buf, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
438 output+offset, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
439 1); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
440 } |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
441 return 0; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
442 } |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
443 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
444 static void |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
445 des_init(PurpleCipherContext *context, gpointer extra) { |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
446 struct _des_ctx *mctx; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
447 mctx = g_new0(struct _des_ctx, 1); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
448 purple_cipher_context_set_data(context, mctx); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
449 } |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
450 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
451 static void |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
452 des_uninit(PurpleCipherContext *context) { |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
453 struct _des_ctx *des_context; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
454 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
455 des_context = purple_cipher_context_get_data(context); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
456 memset(des_context, 0, sizeof(*des_context)); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
457 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
458 g_free(des_context); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
459 des_context = NULL; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
460 } |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
461 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
462 static PurpleCipherOps DESOps = { |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
463 .init = des_init, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
464 .uninit = des_uninit, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
465 .encrypt = des_encrypt, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
466 .decrypt = des_decrypt, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
467 .set_key = des_set_key, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
468 }; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
469 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
470 /****************************************************************************** |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
471 * Triple-DES |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
472 *****************************************************************************/ |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
473 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
474 typedef struct _des3_ctx |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
475 { |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
476 PurpleCipherBatchMode mode; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
477 guchar iv[8]; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
478 /* First key for encryption */ |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
479 struct _des_ctx key1; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
480 /* Second key for decryption */ |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
481 struct _des_ctx key2; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
482 /* Third key for encryption */ |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
483 struct _des_ctx key3; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
484 } des3_ctx[1]; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
485 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
486 /* |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
487 * Fill a DES3 context with subkeys calculated from 3 64bit key. |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
488 * Does not check parity bits, but simply ignore them. |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
489 * Does not check for weak keys. |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
490 **/ |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
491 static void |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
492 des3_set_key(PurpleCipherContext *context, const guchar * key) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
493 { |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
494 struct _des3_ctx *ctx = purple_cipher_context_get_data(context); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
495 int i; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
496 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
497 des_key_schedule (key + 0, ctx->key1.encrypt_subkeys); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
498 des_key_schedule (key + 8, ctx->key2.encrypt_subkeys); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
499 des_key_schedule (key + 16, ctx->key3.encrypt_subkeys); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
500 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
501 for (i = 0; i < 32; i += 2) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
502 { |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
503 ctx->key1.decrypt_subkeys[i] = ctx->key1.encrypt_subkeys[30-i]; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
504 ctx->key1.decrypt_subkeys[i+1] = ctx->key1.encrypt_subkeys[31-i]; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
505 ctx->key2.decrypt_subkeys[i] = ctx->key2.encrypt_subkeys[30-i]; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
506 ctx->key2.decrypt_subkeys[i+1] = ctx->key2.encrypt_subkeys[31-i]; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
507 ctx->key3.decrypt_subkeys[i] = ctx->key3.encrypt_subkeys[30-i]; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
508 ctx->key3.decrypt_subkeys[i+1] = ctx->key3.encrypt_subkeys[31-i]; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
509 } |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
510 } |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
511 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
512 static gint |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
513 des3_ecb_encrypt(struct _des3_ctx *ctx, const guchar data[], |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
514 size_t len, guchar output[], size_t *outlen) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
515 { |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
516 int offset = 0; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
517 int i = 0; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
518 int tmp; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
519 guint8 buf[8] = {0,0,0,0,0,0,0,0}; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
520 while (offset + 8 <= len) { |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
521 des_ecb_crypt(&ctx->key1, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
522 data+offset, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
523 output+offset, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
524 0); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
525 des_ecb_crypt(&ctx->key2, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
526 output+offset, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
527 buf, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
528 1); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
529 des_ecb_crypt(&ctx->key3, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
530 buf, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
531 output+offset, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
532 0); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
533 offset += 8; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
534 } |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
535 *outlen = len; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
536 if (offset < len) { |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
537 *outlen += len - offset; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
538 tmp = offset; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
539 memset(buf, 0, 8); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
540 while (tmp < len) { |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
541 buf[i++] = data[tmp]; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
542 tmp++; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
543 } |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
544 des_ecb_crypt(&ctx->key1, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
545 buf, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
546 output+offset, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
547 0); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
548 des_ecb_crypt(&ctx->key2, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
549 output+offset, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
550 buf, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
551 1); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
552 des_ecb_crypt(&ctx->key3, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
553 buf, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
554 output+offset, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
555 0); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
556 } |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
557 return 0; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
558 } |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
559 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
560 static gint |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
561 des3_cbc_encrypt(struct _des3_ctx *ctx, const guchar data[], |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
562 size_t len, guchar output[], size_t *outlen) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
563 { |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
564 int offset = 0; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
565 int i = 0; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
566 int tmp; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
567 guint8 buf[8]; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
568 memcpy(buf, ctx->iv, 8); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
569 while (offset + 8 <= len) { |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
570 for (i = 0; i < 8; i++) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
571 buf[i] ^= data[offset + i]; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
572 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
573 des_ecb_crypt(&ctx->key1, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
574 buf, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
575 output+offset, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
576 0); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
577 des_ecb_crypt(&ctx->key2, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
578 output+offset, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
579 buf, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
580 1); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
581 des_ecb_crypt(&ctx->key3, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
582 buf, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
583 output+offset, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
584 0); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
585 memcpy(buf, output+offset, 8); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
586 offset += 8; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
587 } |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
588 *outlen = len; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
589 if (offset < len) { |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
590 *outlen += len - offset; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
591 tmp = offset; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
592 i = 0; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
593 while (tmp < len) { |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
594 buf[i++] ^= data[tmp]; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
595 tmp++; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
596 } |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
597 des_ecb_crypt(&ctx->key1, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
598 buf, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
599 output+offset, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
600 0); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
601 des_ecb_crypt(&ctx->key2, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
602 output+offset, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
603 buf, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
604 1); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
605 des_ecb_crypt(&ctx->key3, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
606 buf, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
607 output+offset, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
608 0); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
609 } |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
610 return 0; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
611 } |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
612 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
613 static gint |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
614 des3_encrypt(PurpleCipherContext *context, const guchar data[], |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
615 size_t len, guchar output[], size_t *outlen) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
616 { |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
617 struct _des3_ctx *ctx = purple_cipher_context_get_data(context); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
618 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
619 if (ctx->mode == PURPLE_CIPHER_BATCH_MODE_ECB) { |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
620 return des3_ecb_encrypt(ctx, data, len, output, outlen); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
621 } else if (ctx->mode == PURPLE_CIPHER_BATCH_MODE_CBC) { |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
622 return des3_cbc_encrypt(ctx, data, len, output, outlen); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
623 } else { |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
624 g_return_val_if_reached(0); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
625 } |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
626 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
627 return 0; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
628 } |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
629 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
630 static gint |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
631 des3_ecb_decrypt(struct _des3_ctx *ctx, const guchar data[], |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
632 size_t len, guchar output[], size_t *outlen) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
633 { |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
634 int offset = 0; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
635 int i = 0; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
636 int tmp; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
637 guint8 buf[8] = {0,0,0,0,0,0,0,0}; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
638 while (offset + 8 <= len) { |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
639 /* NOTE: Apply key in reverse */ |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
640 des_ecb_crypt(&ctx->key3, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
641 data+offset, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
642 output+offset, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
643 1); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
644 des_ecb_crypt(&ctx->key2, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
645 output+offset, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
646 buf, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
647 0); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
648 des_ecb_crypt(&ctx->key1, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
649 buf, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
650 output+offset, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
651 1); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
652 offset+=8; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
653 } |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
654 *outlen = len; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
655 if (offset < len) { |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
656 *outlen += len - offset; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
657 tmp = offset; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
658 memset(buf, 0, 8); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
659 while (tmp < len) { |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
660 buf[i++] = data[tmp]; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
661 tmp++; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
662 } |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
663 des_ecb_crypt(&ctx->key3, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
664 buf, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
665 output+offset, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
666 1); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
667 des_ecb_crypt(&ctx->key2, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
668 output+offset, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
669 buf, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
670 0); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
671 des_ecb_crypt(&ctx->key1, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
672 buf, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
673 output+offset, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
674 1); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
675 } |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
676 return 0; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
677 } |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
678 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
679 static gint |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
680 des3_cbc_decrypt(struct _des3_ctx *ctx, const guchar data[], |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
681 size_t len, guchar output[], size_t *outlen) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
682 { |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
683 int offset = 0; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
684 int i = 0; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
685 int tmp; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
686 guint8 buf[8] = {0,0,0,0,0,0,0,0}; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
687 guint8 link[8]; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
688 memcpy(link, ctx->iv, 8); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
689 while (offset + 8 <= len) { |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
690 des_ecb_crypt(&ctx->key3, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
691 data+offset, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
692 output+offset, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
693 1); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
694 des_ecb_crypt(&ctx->key2, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
695 output+offset, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
696 buf, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
697 0); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
698 des_ecb_crypt(&ctx->key1, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
699 buf, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
700 output+offset, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
701 1); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
702 for (i = 0; i < 8; i++) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
703 output[offset + i] ^= link[i]; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
704 memcpy(link, data + offset, 8); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
705 offset+=8; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
706 } |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
707 *outlen = len; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
708 if(offset<len) { |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
709 *outlen += len - offset; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
710 tmp = offset; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
711 memset(buf, 0, 8); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
712 i = 0; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
713 while(tmp<len) { |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
714 buf[i++] = data[tmp]; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
715 tmp++; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
716 } |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
717 des_ecb_crypt(&ctx->key3, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
718 buf, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
719 output+offset, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
720 1); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
721 des_ecb_crypt(&ctx->key2, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
722 output+offset, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
723 buf, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
724 0); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
725 des_ecb_crypt(&ctx->key1, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
726 buf, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
727 output+offset, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
728 1); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
729 for (i = 0; i < 8; i++) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
730 output[offset + i] ^= link[i]; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
731 } |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
732 return 0; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
733 } |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
734 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
735 static gint |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
736 des3_decrypt(PurpleCipherContext *context, const guchar data[], |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
737 size_t len, guchar output[], size_t *outlen) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
738 { |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
739 struct _des3_ctx *ctx = purple_cipher_context_get_data(context); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
740 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
741 if (ctx->mode == PURPLE_CIPHER_BATCH_MODE_ECB) { |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
742 return des3_ecb_decrypt(ctx, data, len, output, outlen); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
743 } else if (ctx->mode == PURPLE_CIPHER_BATCH_MODE_CBC) { |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
744 return des3_cbc_decrypt(ctx, data, len, output, outlen); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
745 } else { |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
746 g_return_val_if_reached(0); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
747 } |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
748 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
749 return 0; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
750 } |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
751 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
752 static void |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
753 des3_set_batch(PurpleCipherContext *context, PurpleCipherBatchMode mode) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
754 { |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
755 struct _des3_ctx *ctx = purple_cipher_context_get_data(context); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
756 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
757 ctx->mode = mode; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
758 } |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
759 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
760 static PurpleCipherBatchMode |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
761 des3_get_batch(PurpleCipherContext *context) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
762 { |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
763 struct _des3_ctx *ctx = purple_cipher_context_get_data(context); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
764 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
765 return ctx->mode; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
766 } |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
767 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
768 static void |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
769 des3_set_iv(PurpleCipherContext *context, guchar *iv, size_t len) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
770 { |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
771 struct _des3_ctx *ctx; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
772 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
773 g_return_if_fail(len == 8); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
774 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
775 ctx = purple_cipher_context_get_data(context); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
776 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
777 memcpy(ctx->iv, iv, len); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
778 } |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
779 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
780 static void |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
781 des3_init(PurpleCipherContext *context, gpointer extra) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
782 { |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
783 struct _des3_ctx *mctx; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
784 mctx = g_new0(struct _des3_ctx, 1); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
785 purple_cipher_context_set_data(context, mctx); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
786 } |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
787 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
788 static void |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
789 des3_uninit(PurpleCipherContext *context) |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
790 { |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
791 struct _des3_ctx *des3_context; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
792 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
793 des3_context = purple_cipher_context_get_data(context); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
794 memset(des3_context, 0, sizeof(*des3_context)); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
795 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
796 g_free(des3_context); |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
797 des3_context = NULL; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
798 } |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
799 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
800 static PurpleCipherOps DES3Ops = { |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
801 .init = des3_init, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
802 .uninit = des3_uninit, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
803 .set_iv = des3_set_iv, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
804 .encrypt = des3_encrypt, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
805 .decrypt = des3_decrypt, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
806 .set_key = des3_set_key, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
807 .set_batch_mode = des3_set_batch, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
808 .get_batch_mode = des3_get_batch, |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
809 }; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
810 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
811 /****************************************************************************** |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
812 * Registration |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
813 *****************************************************************************/ |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
814 PurpleCipherOps * |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
815 purple_des_cipher_get_ops(void) { |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
816 return &DESOps; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
817 } |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
818 |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
819 PurpleCipherOps * |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
820 purple_des3_cipher_get_ops(void) { |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
821 return &DES3Ops; |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
822 } |
076d62344ede
broke des and des3 out to ciphers/des.c
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
823 |