libpurple/cipher.c

Mon, 14 Feb 2011 06:20:59 +0000

author
Gary Kramlich <grim@reaperworld.com>
date
Mon, 14 Feb 2011 06:20:59 +0000
branch
cipher_breakout
changeset 31426
290d182e7bf9
parent 31425
e8113737ec1a
child 31427
898d3736ee40
permissions
-rw-r--r--

Moved sha256 to the sub library

10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1 /*
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
2 * purple
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
3 *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
4 * Purple is the legal property of its developers, whose names are too numerous
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
5 * to list here. Please refer to the COPYRIGHT file distributed with this
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
6 * source distribution.
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
7 *
11335
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
8 * Original des taken from gpg
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
9 *
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
10 * des.c - DES and Triple-DES encryption/decryption Algorithm
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
11 * Copyright (C) 1998 Free Software Foundation, Inc.
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 13760
diff changeset
12 *
11335
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
13 * Please see below for more legal information!
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 13760
diff changeset
14 *
11335
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
15 * According to the definition of DES in FIPS PUB 46-2 from December 1993.
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
16 * For a description of triple encryption, see:
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
17 * Bruce Schneier: Applied Cryptography. Second Edition.
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
18 * John Wiley & Sons, 1996. ISBN 0-471-12845-7. Pages 358 ff.
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 13760
diff changeset
19 *
11335
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
20 * This file is part of GnuPG.
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 13760
diff changeset
21 *
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
22 * This program is free software; you can redistribute it and/or modify
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
23 * it under the terms of the GNU General Public License as published by
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
24 * the Free Software Foundation; either version 2 of the License, or
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
25 * (at your option) any later version.
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
26 *
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
27 * This program is distributed in the hope that it will be useful,
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
28 * but WITHOUT ANY WARRANTY; without even the implied warranty of
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
29 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
30 * GNU General Public License for more details.
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
31 *
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
32 * You should have received a copy of the GNU General Public License
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
33 * along with this program; if not, write to the Free Software
19859
71d37b57eff2 The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 19832
diff changeset
34 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
35 */
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
36 #include "internal.h"
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
37 #include "cipher.h"
13760
09669e542e2f [gaim-migrate @ 16169]
Mark Doliner <markdoliner@pidgin.im>
parents: 13699
diff changeset
38 #include "dbus-maybe.h"
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
39 #include "debug.h"
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
40 #include "signals.h"
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
41 #include "value.h"
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
42
27539
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
43 #if GLIB_CHECK_VERSION(2,16,0)
31421
713fb035d563 Created a new branch to break the ciphers out to their own files. Also I've now exposed purple_g_checksum_* if we're on glib >= 2.16.0
Gary Kramlich <grim@reaperworld.com>
parents: 31407
diff changeset
44 void
27539
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
45 purple_g_checksum_init(PurpleCipherContext *context, GChecksumType type)
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
46 {
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
47 GChecksum *checksum;
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
48
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
49 checksum = g_checksum_new(type);
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
50 purple_cipher_context_set_data(context, checksum);
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
51 }
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
52
31421
713fb035d563 Created a new branch to break the ciphers out to their own files. Also I've now exposed purple_g_checksum_* if we're on glib >= 2.16.0
Gary Kramlich <grim@reaperworld.com>
parents: 31407
diff changeset
53 void
27539
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
54 purple_g_checksum_reset(PurpleCipherContext *context, GChecksumType type)
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
55 {
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
56 GChecksum *checksum;
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
57
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
58 checksum = purple_cipher_context_get_data(context);
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
59 g_return_if_fail(checksum != NULL);
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
60
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
61 #if GLIB_CHECK_VERSION(2,18,0)
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
62 g_checksum_reset(checksum);
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
63 #else
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
64 g_checksum_free(checksum);
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
65 checksum = g_checksum_new(type);
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
66 purple_cipher_context_set_data(context, checksum);
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
67 #endif
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
68 }
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
69
31421
713fb035d563 Created a new branch to break the ciphers out to their own files. Also I've now exposed purple_g_checksum_* if we're on glib >= 2.16.0
Gary Kramlich <grim@reaperworld.com>
parents: 31407
diff changeset
70 void
27539
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
71 purple_g_checksum_uninit(PurpleCipherContext *context)
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
72 {
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
73 GChecksum *checksum;
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
74
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
75 checksum = purple_cipher_context_get_data(context);
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
76 g_return_if_fail(checksum != NULL);
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
77
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
78 g_checksum_free(checksum);
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
79 }
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
80
31421
713fb035d563 Created a new branch to break the ciphers out to their own files. Also I've now exposed purple_g_checksum_* if we're on glib >= 2.16.0
Gary Kramlich <grim@reaperworld.com>
parents: 31407
diff changeset
81 void
27539
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
82 purple_g_checksum_append(PurpleCipherContext *context, const guchar *data,
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
83 gsize len)
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
84 {
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
85 GChecksum *checksum;
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
86
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
87 checksum = purple_cipher_context_get_data(context);
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
88 g_return_if_fail(checksum != NULL);
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
89
27541
98dad20a0da7 Elliott's code looks nicer.
Paul Aurich <darkrain42@pidgin.im>
parents: 27539
diff changeset
90 while (len >= G_MAXSSIZE) {
98dad20a0da7 Elliott's code looks nicer.
Paul Aurich <darkrain42@pidgin.im>
parents: 27539
diff changeset
91 g_checksum_update(checksum, data, G_MAXSSIZE);
98dad20a0da7 Elliott's code looks nicer.
Paul Aurich <darkrain42@pidgin.im>
parents: 27539
diff changeset
92 len -= G_MAXSSIZE;
98dad20a0da7 Elliott's code looks nicer.
Paul Aurich <darkrain42@pidgin.im>
parents: 27539
diff changeset
93 data += G_MAXSSIZE;
98dad20a0da7 Elliott's code looks nicer.
Paul Aurich <darkrain42@pidgin.im>
parents: 27539
diff changeset
94 }
98dad20a0da7 Elliott's code looks nicer.
Paul Aurich <darkrain42@pidgin.im>
parents: 27539
diff changeset
95
98dad20a0da7 Elliott's code looks nicer.
Paul Aurich <darkrain42@pidgin.im>
parents: 27539
diff changeset
96 if (len)
27539
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
97 g_checksum_update(checksum, data, len);
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
98 }
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
99
31421
713fb035d563 Created a new branch to break the ciphers out to their own files. Also I've now exposed purple_g_checksum_* if we're on glib >= 2.16.0
Gary Kramlich <grim@reaperworld.com>
parents: 31407
diff changeset
100 gboolean
27539
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
101 purple_g_checksum_digest(PurpleCipherContext *context, GChecksumType type,
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
102 gsize len, guchar *digest, gsize *out_len)
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
103 {
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
104 GChecksum *checksum;
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
105 const gssize required_length = g_checksum_type_get_length(type);
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
106
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
107 checksum = purple_cipher_context_get_data(context);
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
108
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
109 g_return_val_if_fail(len >= required_length, FALSE);
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
110 g_return_val_if_fail(checksum != NULL, FALSE);
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
111
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
112 g_checksum_get_digest(checksum, digest, &len);
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
113
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
114 purple_cipher_context_reset(context, NULL);
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
115
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
116 if (out_len)
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
117 *out_len = len;
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
118
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
119 return TRUE;
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
120 }
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
121 #endif
e94b84b12eb6 Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
Paul Aurich <darkrain42@pidgin.im>
parents: 27497
diff changeset
122
11335
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
123 /******************************************************************************
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
124 * DES
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
125 *****************************************************************************/
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
126
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
127 typedef struct _des_ctx
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
128 {
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
129 guint32 encrypt_subkeys[32];
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
130 guint32 decrypt_subkeys[32];
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
131 } des_ctx[1];
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
132
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
133 /*
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
134 * The s-box values are permuted according to the 'primitive function P'
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
135 */
21091
07fe1a99c47b Patch from Andrew Gaul to constify a bunch of static variables to reduce
Ka-Hing Cheung <khc@pidgin.im>
parents: 19859
diff changeset
136 static const guint32 sbox1[64] =
11335
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
137 {
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
138 0x00808200, 0x00000000, 0x00008000, 0x00808202, 0x00808002, 0x00008202, 0x00000002, 0x00008000,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
139 0x00000200, 0x00808200, 0x00808202, 0x00000200, 0x00800202, 0x00808002, 0x00800000, 0x00000002,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
140 0x00000202, 0x00800200, 0x00800200, 0x00008200, 0x00008200, 0x00808000, 0x00808000, 0x00800202,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
141 0x00008002, 0x00800002, 0x00800002, 0x00008002, 0x00000000, 0x00000202, 0x00008202, 0x00800000,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
142 0x00008000, 0x00808202, 0x00000002, 0x00808000, 0x00808200, 0x00800000, 0x00800000, 0x00000200,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
143 0x00808002, 0x00008000, 0x00008200, 0x00800002, 0x00000200, 0x00000002, 0x00800202, 0x00008202,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
144 0x00808202, 0x00008002, 0x00808000, 0x00800202, 0x00800002, 0x00000202, 0x00008202, 0x00808200,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
145 0x00000202, 0x00800200, 0x00800200, 0x00000000, 0x00008002, 0x00008200, 0x00000000, 0x00808002
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
146 };
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
147
21091
07fe1a99c47b Patch from Andrew Gaul to constify a bunch of static variables to reduce
Ka-Hing Cheung <khc@pidgin.im>
parents: 19859
diff changeset
148 static const guint32 sbox2[64] =
11335
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
149 {
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
150 0x40084010, 0x40004000, 0x00004000, 0x00084010, 0x00080000, 0x00000010, 0x40080010, 0x40004010,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
151 0x40000010, 0x40084010, 0x40084000, 0x40000000, 0x40004000, 0x00080000, 0x00000010, 0x40080010,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
152 0x00084000, 0x00080010, 0x40004010, 0x00000000, 0x40000000, 0x00004000, 0x00084010, 0x40080000,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
153 0x00080010, 0x40000010, 0x00000000, 0x00084000, 0x00004010, 0x40084000, 0x40080000, 0x00004010,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
154 0x00000000, 0x00084010, 0x40080010, 0x00080000, 0x40004010, 0x40080000, 0x40084000, 0x00004000,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
155 0x40080000, 0x40004000, 0x00000010, 0x40084010, 0x00084010, 0x00000010, 0x00004000, 0x40000000,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
156 0x00004010, 0x40084000, 0x00080000, 0x40000010, 0x00080010, 0x40004010, 0x40000010, 0x00080010,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
157 0x00084000, 0x00000000, 0x40004000, 0x00004010, 0x40000000, 0x40080010, 0x40084010, 0x00084000
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
158 };
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
159
21091
07fe1a99c47b Patch from Andrew Gaul to constify a bunch of static variables to reduce
Ka-Hing Cheung <khc@pidgin.im>
parents: 19859
diff changeset
160 static const guint32 sbox3[64] =
11335
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
161 {
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
162 0x00000104, 0x04010100, 0x00000000, 0x04010004, 0x04000100, 0x00000000, 0x00010104, 0x04000100,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
163 0x00010004, 0x04000004, 0x04000004, 0x00010000, 0x04010104, 0x00010004, 0x04010000, 0x00000104,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
164 0x04000000, 0x00000004, 0x04010100, 0x00000100, 0x00010100, 0x04010000, 0x04010004, 0x00010104,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
165 0x04000104, 0x00010100, 0x00010000, 0x04000104, 0x00000004, 0x04010104, 0x00000100, 0x04000000,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
166 0x04010100, 0x04000000, 0x00010004, 0x00000104, 0x00010000, 0x04010100, 0x04000100, 0x00000000,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
167 0x00000100, 0x00010004, 0x04010104, 0x04000100, 0x04000004, 0x00000100, 0x00000000, 0x04010004,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
168 0x04000104, 0x00010000, 0x04000000, 0x04010104, 0x00000004, 0x00010104, 0x00010100, 0x04000004,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
169 0x04010000, 0x04000104, 0x00000104, 0x04010000, 0x00010104, 0x00000004, 0x04010004, 0x00010100
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
170 };
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
171
21091
07fe1a99c47b Patch from Andrew Gaul to constify a bunch of static variables to reduce
Ka-Hing Cheung <khc@pidgin.im>
parents: 19859
diff changeset
172 static const guint32 sbox4[64] =
11335
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
173 {
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
174 0x80401000, 0x80001040, 0x80001040, 0x00000040, 0x00401040, 0x80400040, 0x80400000, 0x80001000,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
175 0x00000000, 0x00401000, 0x00401000, 0x80401040, 0x80000040, 0x00000000, 0x00400040, 0x80400000,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
176 0x80000000, 0x00001000, 0x00400000, 0x80401000, 0x00000040, 0x00400000, 0x80001000, 0x00001040,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
177 0x80400040, 0x80000000, 0x00001040, 0x00400040, 0x00001000, 0x00401040, 0x80401040, 0x80000040,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
178 0x00400040, 0x80400000, 0x00401000, 0x80401040, 0x80000040, 0x00000000, 0x00000000, 0x00401000,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
179 0x00001040, 0x00400040, 0x80400040, 0x80000000, 0x80401000, 0x80001040, 0x80001040, 0x00000040,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
180 0x80401040, 0x80000040, 0x80000000, 0x00001000, 0x80400000, 0x80001000, 0x00401040, 0x80400040,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
181 0x80001000, 0x00001040, 0x00400000, 0x80401000, 0x00000040, 0x00400000, 0x00001000, 0x00401040
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
182 };
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
183
21091
07fe1a99c47b Patch from Andrew Gaul to constify a bunch of static variables to reduce
Ka-Hing Cheung <khc@pidgin.im>
parents: 19859
diff changeset
184 static const guint32 sbox5[64] =
11335
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
185 {
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
186 0x00000080, 0x01040080, 0x01040000, 0x21000080, 0x00040000, 0x00000080, 0x20000000, 0x01040000,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
187 0x20040080, 0x00040000, 0x01000080, 0x20040080, 0x21000080, 0x21040000, 0x00040080, 0x20000000,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
188 0x01000000, 0x20040000, 0x20040000, 0x00000000, 0x20000080, 0x21040080, 0x21040080, 0x01000080,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
189 0x21040000, 0x20000080, 0x00000000, 0x21000000, 0x01040080, 0x01000000, 0x21000000, 0x00040080,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
190 0x00040000, 0x21000080, 0x00000080, 0x01000000, 0x20000000, 0x01040000, 0x21000080, 0x20040080,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
191 0x01000080, 0x20000000, 0x21040000, 0x01040080, 0x20040080, 0x00000080, 0x01000000, 0x21040000,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
192 0x21040080, 0x00040080, 0x21000000, 0x21040080, 0x01040000, 0x00000000, 0x20040000, 0x21000000,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
193 0x00040080, 0x01000080, 0x20000080, 0x00040000, 0x00000000, 0x20040000, 0x01040080, 0x20000080
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
194 };
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
195
21091
07fe1a99c47b Patch from Andrew Gaul to constify a bunch of static variables to reduce
Ka-Hing Cheung <khc@pidgin.im>
parents: 19859
diff changeset
196 static const guint32 sbox6[64] =
11335
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
197 {
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
198 0x10000008, 0x10200000, 0x00002000, 0x10202008, 0x10200000, 0x00000008, 0x10202008, 0x00200000,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
199 0x10002000, 0x00202008, 0x00200000, 0x10000008, 0x00200008, 0x10002000, 0x10000000, 0x00002008,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
200 0x00000000, 0x00200008, 0x10002008, 0x00002000, 0x00202000, 0x10002008, 0x00000008, 0x10200008,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
201 0x10200008, 0x00000000, 0x00202008, 0x10202000, 0x00002008, 0x00202000, 0x10202000, 0x10000000,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
202 0x10002000, 0x00000008, 0x10200008, 0x00202000, 0x10202008, 0x00200000, 0x00002008, 0x10000008,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
203 0x00200000, 0x10002000, 0x10000000, 0x00002008, 0x10000008, 0x10202008, 0x00202000, 0x10200000,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
204 0x00202008, 0x10202000, 0x00000000, 0x10200008, 0x00000008, 0x00002000, 0x10200000, 0x00202008,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
205 0x00002000, 0x00200008, 0x10002008, 0x00000000, 0x10202000, 0x10000000, 0x00200008, 0x10002008
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
206 };
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
207
21091
07fe1a99c47b Patch from Andrew Gaul to constify a bunch of static variables to reduce
Ka-Hing Cheung <khc@pidgin.im>
parents: 19859
diff changeset
208 static const guint32 sbox7[64] =
11335
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
209 {
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
210 0x00100000, 0x02100001, 0x02000401, 0x00000000, 0x00000400, 0x02000401, 0x00100401, 0x02100400,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
211 0x02100401, 0x00100000, 0x00000000, 0x02000001, 0x00000001, 0x02000000, 0x02100001, 0x00000401,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
212 0x02000400, 0x00100401, 0x00100001, 0x02000400, 0x02000001, 0x02100000, 0x02100400, 0x00100001,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
213 0x02100000, 0x00000400, 0x00000401, 0x02100401, 0x00100400, 0x00000001, 0x02000000, 0x00100400,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
214 0x02000000, 0x00100400, 0x00100000, 0x02000401, 0x02000401, 0x02100001, 0x02100001, 0x00000001,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
215 0x00100001, 0x02000000, 0x02000400, 0x00100000, 0x02100400, 0x00000401, 0x00100401, 0x02100400,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
216 0x00000401, 0x02000001, 0x02100401, 0x02100000, 0x00100400, 0x00000000, 0x00000001, 0x02100401,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
217 0x00000000, 0x00100401, 0x02100000, 0x00000400, 0x02000001, 0x02000400, 0x00000400, 0x00100001
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
218 };
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
219
21091
07fe1a99c47b Patch from Andrew Gaul to constify a bunch of static variables to reduce
Ka-Hing Cheung <khc@pidgin.im>
parents: 19859
diff changeset
220 static const guint32 sbox8[64] =
11335
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
221 {
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
222 0x08000820, 0x00000800, 0x00020000, 0x08020820, 0x08000000, 0x08000820, 0x00000020, 0x08000000,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
223 0x00020020, 0x08020000, 0x08020820, 0x00020800, 0x08020800, 0x00020820, 0x00000800, 0x00000020,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
224 0x08020000, 0x08000020, 0x08000800, 0x00000820, 0x00020800, 0x00020020, 0x08020020, 0x08020800,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
225 0x00000820, 0x00000000, 0x00000000, 0x08020020, 0x08000020, 0x08000800, 0x00020820, 0x00020000,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
226 0x00020820, 0x00020000, 0x08020800, 0x00000800, 0x00000020, 0x08020020, 0x00000800, 0x00020820,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
227 0x08000800, 0x00000020, 0x08000020, 0x08020000, 0x08020020, 0x08000000, 0x00020000, 0x08000820,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
228 0x00000000, 0x08020820, 0x00020020, 0x08000020, 0x08020000, 0x08000800, 0x08000820, 0x00000000,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
229 0x08020820, 0x00020800, 0x00020800, 0x00000820, 0x00000820, 0x00020020, 0x08000000, 0x08020800
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
230 };
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
231
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
232
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
233
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
234 /*
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
235 * * These two tables are part of the 'permuted choice 1' function.
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
236 * * In this implementation several speed improvements are done.
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
237 * */
21091
07fe1a99c47b Patch from Andrew Gaul to constify a bunch of static variables to reduce
Ka-Hing Cheung <khc@pidgin.im>
parents: 19859
diff changeset
238 static const guint32 leftkey_swap[16] =
11335
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
239 {
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
240 0x00000000, 0x00000001, 0x00000100, 0x00000101,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
241 0x00010000, 0x00010001, 0x00010100, 0x00010101,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
242 0x01000000, 0x01000001, 0x01000100, 0x01000101,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
243 0x01010000, 0x01010001, 0x01010100, 0x01010101
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
244 };
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
245
21091
07fe1a99c47b Patch from Andrew Gaul to constify a bunch of static variables to reduce
Ka-Hing Cheung <khc@pidgin.im>
parents: 19859
diff changeset
246 static const guint32 rightkey_swap[16] =
11335
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
247 {
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
248 0x00000000, 0x01000000, 0x00010000, 0x01010000,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
249 0x00000100, 0x01000100, 0x00010100, 0x01010100,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
250 0x00000001, 0x01000001, 0x00010001, 0x01010001,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
251 0x00000101, 0x01000101, 0x00010101, 0x01010101,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
252 };
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
253
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
254
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
255
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
256 /*
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
257 * Numbers of left shifts per round for encryption subkey schedule
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
258 * To calculate the decryption key scheduling we just reverse the
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
259 * ordering of the subkeys so we can omit the table for decryption
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
260 * subkey schedule.
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
261 */
21091
07fe1a99c47b Patch from Andrew Gaul to constify a bunch of static variables to reduce
Ka-Hing Cheung <khc@pidgin.im>
parents: 19859
diff changeset
262 static const guint8 encrypt_rotate_tab[16] =
11335
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
263 {
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
264 1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
265 };
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
266
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
267 /*
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
268 * Macro to swap bits across two words
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
269 **/
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
270 #define DO_PERMUTATION(a, temp, b, offset, mask) \
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
271 temp = ((a>>offset) ^ b) & mask; \
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
272 b ^= temp; \
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
273 a ^= temp<<offset;
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
274
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
275
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
276 /*
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
277 * This performs the 'initial permutation' for the data to be encrypted or decrypted
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
278 **/
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
279 #define INITIAL_PERMUTATION(left, temp, right) \
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
280 DO_PERMUTATION(left, temp, right, 4, 0x0f0f0f0f) \
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
281 DO_PERMUTATION(left, temp, right, 16, 0x0000ffff) \
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
282 DO_PERMUTATION(right, temp, left, 2, 0x33333333) \
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
283 DO_PERMUTATION(right, temp, left, 8, 0x00ff00ff) \
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
284 DO_PERMUTATION(left, temp, right, 1, 0x55555555)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
285
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
286
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
287 /*
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
288 * The 'inverse initial permutation'
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
289 **/
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
290 #define FINAL_PERMUTATION(left, temp, right) \
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
291 DO_PERMUTATION(left, temp, right, 1, 0x55555555) \
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
292 DO_PERMUTATION(right, temp, left, 8, 0x00ff00ff) \
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
293 DO_PERMUTATION(right, temp, left, 2, 0x33333333) \
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
294 DO_PERMUTATION(left, temp, right, 16, 0x0000ffff) \
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
295 DO_PERMUTATION(left, temp, right, 4, 0x0f0f0f0f)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
296
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
297
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
298 /*
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
299 * A full DES round including 'expansion function', 'sbox substitution'
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
300 * and 'primitive function P' but without swapping the left and right word.
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
301 **/
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
302 #define DES_ROUND(from, to, work, subkey) \
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
303 work = ((from<<1) | (from>>31)) ^ *subkey++; \
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
304 to ^= sbox8[ work & 0x3f ]; \
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
305 to ^= sbox6[ (work>>8) & 0x3f ]; \
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
306 to ^= sbox4[ (work>>16) & 0x3f ]; \
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
307 to ^= sbox2[ (work>>24) & 0x3f ]; \
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
308 work = ((from>>3) | (from<<29)) ^ *subkey++; \
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
309 to ^= sbox7[ work & 0x3f ]; \
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
310 to ^= sbox5[ (work>>8) & 0x3f ]; \
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
311 to ^= sbox3[ (work>>16) & 0x3f ]; \
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
312 to ^= sbox1[ (work>>24) & 0x3f ];
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
313
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
314
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
315 /*
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
316 * Macros to convert 8 bytes from/to 32bit words
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
317 **/
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
318 #define READ_64BIT_DATA(data, left, right) \
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
319 left = (data[0] << 24) | (data[1] << 16) | (data[2] << 8) | data[3]; \
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
320 right = (data[4] << 24) | (data[5] << 16) | (data[6] << 8) | data[7];
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
321
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
322 #define WRITE_64BIT_DATA(data, left, right) \
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
323 data[0] = (left >> 24) &0xff; data[1] = (left >> 16) &0xff; \
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
324 data[2] = (left >> 8) &0xff; data[3] = left &0xff; \
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
325 data[4] = (right >> 24) &0xff; data[5] = (right >> 16) &0xff; \
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
326 data[6] = (right >> 8) &0xff; data[7] = right &0xff;
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
327
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
328
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
329
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
330
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
331
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
332
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
333 /*
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
334 * des_key_schedule(): Calculate 16 subkeys pairs (even/odd) for
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
335 * 16 encryption rounds.
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
336 * To calculate subkeys for decryption the caller
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
337 * have to reorder the generated subkeys.
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
338 *
11335
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
339 * rawkey: 8 Bytes of key data
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
340 * subkey: Array of at least 32 guint32s. Will be filled
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
341 * with calculated subkeys.
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
342 *
11335
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
343 **/
11597
f56c92bee122 [gaim-migrate @ 13867]
Ethan Blanton <elb@pidgin.im>
parents: 11335
diff changeset
344 static void
11335
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
345 des_key_schedule (const guint8 * rawkey, guint32 * subkey)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
346 {
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
347 guint32 left, right, work;
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
348 int round;
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
349
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
350 READ_64BIT_DATA (rawkey, left, right)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
351
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
352 DO_PERMUTATION (right, work, left, 4, 0x0f0f0f0f)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
353 DO_PERMUTATION (right, work, left, 0, 0x10101010)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
354
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
355 left = (leftkey_swap[(left >> 0) & 0xf] << 3) | (leftkey_swap[(left >> 8) & 0xf] << 2)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
356 | (leftkey_swap[(left >> 16) & 0xf] << 1) | (leftkey_swap[(left >> 24) & 0xf])
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
357 | (leftkey_swap[(left >> 5) & 0xf] << 7) | (leftkey_swap[(left >> 13) & 0xf] << 6)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
358 | (leftkey_swap[(left >> 21) & 0xf] << 5) | (leftkey_swap[(left >> 29) & 0xf] << 4);
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
359
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
360 left &= 0x0fffffff;
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
361
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
362 right = (rightkey_swap[(right >> 1) & 0xf] << 3) | (rightkey_swap[(right >> 9) & 0xf] << 2)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
363 | (rightkey_swap[(right >> 17) & 0xf] << 1) | (rightkey_swap[(right >> 25) & 0xf])
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
364 | (rightkey_swap[(right >> 4) & 0xf] << 7) | (rightkey_swap[(right >> 12) & 0xf] << 6)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
365 | (rightkey_swap[(right >> 20) & 0xf] << 5) | (rightkey_swap[(right >> 28) & 0xf] << 4);
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
366
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
367 right &= 0x0fffffff;
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
368
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
369 for (round = 0; round < 16; ++round)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
370 {
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
371 left = ((left << encrypt_rotate_tab[round]) | (left >> (28 - encrypt_rotate_tab[round]))) & 0x0fffffff;
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
372 right = ((right << encrypt_rotate_tab[round]) | (right >> (28 - encrypt_rotate_tab[round]))) & 0x0fffffff;
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
373
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
374 *subkey++ = ((left << 4) & 0x24000000)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
375 | ((left << 28) & 0x10000000)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
376 | ((left << 14) & 0x08000000)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
377 | ((left << 18) & 0x02080000)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
378 | ((left << 6) & 0x01000000)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
379 | ((left << 9) & 0x00200000)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
380 | ((left >> 1) & 0x00100000)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
381 | ((left << 10) & 0x00040000)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
382 | ((left << 2) & 0x00020000)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
383 | ((left >> 10) & 0x00010000)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
384 | ((right >> 13) & 0x00002000)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
385 | ((right >> 4) & 0x00001000)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
386 | ((right << 6) & 0x00000800)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
387 | ((right >> 1) & 0x00000400)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
388 | ((right >> 14) & 0x00000200)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
389 | (right & 0x00000100)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
390 | ((right >> 5) & 0x00000020)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
391 | ((right >> 10) & 0x00000010)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
392 | ((right >> 3) & 0x00000008)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
393 | ((right >> 18) & 0x00000004)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
394 | ((right >> 26) & 0x00000002)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
395 | ((right >> 24) & 0x00000001);
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
396
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
397 *subkey++ = ((left << 15) & 0x20000000)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
398 | ((left << 17) & 0x10000000)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
399 | ((left << 10) & 0x08000000)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
400 | ((left << 22) & 0x04000000)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
401 | ((left >> 2) & 0x02000000)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
402 | ((left << 1) & 0x01000000)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
403 | ((left << 16) & 0x00200000)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
404 | ((left << 11) & 0x00100000)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
405 | ((left << 3) & 0x00080000)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
406 | ((left >> 6) & 0x00040000)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
407 | ((left << 15) & 0x00020000)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
408 | ((left >> 4) & 0x00010000)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
409 | ((right >> 2) & 0x00002000)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
410 | ((right << 8) & 0x00001000)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
411 | ((right >> 14) & 0x00000808)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
412 | ((right >> 9) & 0x00000400)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
413 | ((right) & 0x00000200)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
414 | ((right << 7) & 0x00000100)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
415 | ((right >> 7) & 0x00000020)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
416 | ((right >> 3) & 0x00000011)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
417 | ((right << 2) & 0x00000004)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
418 | ((right >> 21) & 0x00000002);
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
419 }
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
420 }
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
421
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
422
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
423
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
424 /*
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
425 * Fill a DES context with subkeys calculated from a 64bit key.
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
426 * Does not check parity bits, but simply ignore them.
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
427 * Does not check for weak keys.
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
428 **/
11597
f56c92bee122 [gaim-migrate @ 13867]
Ethan Blanton <elb@pidgin.im>
parents: 11335
diff changeset
429 static void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
430 des_set_key (PurpleCipherContext *context, const guchar * key)
11335
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
431 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
432 struct _des_ctx *ctx = purple_cipher_context_get_data(context);
11335
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
433 int i;
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
434
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
435 des_key_schedule (key, ctx->encrypt_subkeys);
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
436
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
437 for(i=0; i<32; i+=2)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
438 {
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
439 ctx->decrypt_subkeys[i] = ctx->encrypt_subkeys[30-i];
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
440 ctx->decrypt_subkeys[i+1] = ctx->encrypt_subkeys[31-i];
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
441 }
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
442 }
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
443
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
444
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
445
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
446 /*
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
447 * Electronic Codebook Mode DES encryption/decryption of data according
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
448 * to 'mode'.
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
449 **/
11597
f56c92bee122 [gaim-migrate @ 13867]
Ethan Blanton <elb@pidgin.im>
parents: 11335
diff changeset
450 static int
11335
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
451 des_ecb_crypt (struct _des_ctx *ctx, const guint8 * from, guint8 * to, int mode)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
452 {
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
453 guint32 left, right, work;
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
454 guint32 *keys;
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
455
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
456 keys = mode ? ctx->decrypt_subkeys : ctx->encrypt_subkeys;
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
457
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
458 READ_64BIT_DATA (from, left, right)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
459 INITIAL_PERMUTATION (left, work, right)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
460
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
461 DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
462 DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
463 DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
464 DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
465 DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
466 DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
467 DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
468 DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
469
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
470 FINAL_PERMUTATION (right, work, left)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
471 WRITE_64BIT_DATA (to, right, left)
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
472
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
473 return 0;
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
474 }
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
475
11597
f56c92bee122 [gaim-migrate @ 13867]
Ethan Blanton <elb@pidgin.im>
parents: 11335
diff changeset
476 static gint
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
477 des_encrypt(PurpleCipherContext *context, const guchar data[],
11597
f56c92bee122 [gaim-migrate @ 13867]
Ethan Blanton <elb@pidgin.im>
parents: 11335
diff changeset
478 size_t len, guchar output[], size_t *outlen) {
11335
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
479 int offset = 0;
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
480 int i = 0;
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
481 int tmp;
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
482 guint8 buf[8] = {0,0,0,0,0,0,0,0};
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
483 while(offset+8<=len) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
484 des_ecb_crypt(purple_cipher_context_get_data(context),
11335
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
485 data+offset,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
486 output+offset,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
487 0);
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
488 offset+=8;
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
489 }
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
490 *outlen = len;
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
491 if(offset<len) {
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
492 *outlen += len - offset;
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
493 tmp = offset;
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
494 while(tmp<len) {
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
495 buf[i++] = data[tmp];
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
496 tmp++;
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
497 }
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
498 des_ecb_crypt(purple_cipher_context_get_data(context),
11335
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
499 buf,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
500 output+offset,
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
501 0);
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
502 }
11335
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
503 return 0;
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
504 }
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
505
22024
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
506 static gint
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
507 des_decrypt(PurpleCipherContext *context, const guchar data[],
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
508 size_t len, guchar output[], size_t *outlen) {
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
509 int offset = 0;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
510 int i = 0;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
511 int tmp;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
512 guint8 buf[8] = {0,0,0,0,0,0,0,0};
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
513 while(offset+8<=len) {
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
514 des_ecb_crypt(purple_cipher_context_get_data(context),
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
515 data+offset,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
516 output+offset,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
517 1);
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
518 offset+=8;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
519 }
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
520 *outlen = len;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
521 if(offset<len) {
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
522 *outlen += len - offset;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
523 tmp = offset;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
524 while(tmp<len) {
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
525 buf[i++] = data[tmp];
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
526 tmp++;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
527 }
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
528 des_ecb_crypt(purple_cipher_context_get_data(context),
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
529 buf,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
530 output+offset,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
531 1);
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
532 }
22024
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
533 return 0;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
534 }
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
535
11335
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
536 static void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
537 des_init(PurpleCipherContext *context, gpointer extra) {
11335
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
538 struct _des_ctx *mctx;
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
539 mctx = g_new0(struct _des_ctx, 1);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
540 purple_cipher_context_set_data(context, mctx);
11335
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
541 }
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
542
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
543 static void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
544 des_uninit(PurpleCipherContext *context) {
11335
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
545 struct _des_ctx *des_context;
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
546
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
547 des_context = purple_cipher_context_get_data(context);
31407
8c850977cb42 Fix a potential information leak in cipher.c.
Julia Lawall <julia@diku.dk>
parents: 28762
diff changeset
548 memset(des_context, 0, sizeof(*des_context));
11335
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
549
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
550 g_free(des_context);
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
551 des_context = NULL;
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
552 }
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
553
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
554 static PurpleCipherOps DESOps = {
22024
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
555 NULL, /* Set option */
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
556 NULL, /* Get option */
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
557 des_init, /* init */
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
558 NULL, /* reset */
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
559 des_uninit, /* uninit */
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
560 NULL, /* set iv */
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
561 NULL, /* append */
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
562 NULL, /* digest */
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
563 des_encrypt, /* encrypt */
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
564 des_decrypt, /* decrypt */
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
565 NULL, /* set salt */
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
566 NULL, /* get salt size */
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
567 des_set_key, /* set key */
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
568 NULL, /* get key size */
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
569 NULL, /* set batch mode */
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
570 NULL, /* get batch mode */
22025
23756775175d HMAC digest support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 22024
diff changeset
571 NULL, /* get block size */
23756775175d HMAC digest support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 22024
diff changeset
572 NULL /* set key with len */
22024
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
573 };
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
574
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
575 /******************************************************************************
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
576 * Triple-DES
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
577 *****************************************************************************/
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
578
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
579 typedef struct _des3_ctx
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
580 {
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
581 PurpleCipherBatchMode mode;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
582 guchar iv[8];
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
583 /* First key for encryption */
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
584 struct _des_ctx key1;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
585 /* Second key for decryption */
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
586 struct _des_ctx key2;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
587 /* Third key for encryption */
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
588 struct _des_ctx key3;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
589 } des3_ctx[1];
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
590
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
591 /*
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
592 * Fill a DES3 context with subkeys calculated from 3 64bit key.
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
593 * Does not check parity bits, but simply ignore them.
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
594 * Does not check for weak keys.
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
595 **/
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
596 static void
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
597 des3_set_key(PurpleCipherContext *context, const guchar * key)
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
598 {
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
599 struct _des3_ctx *ctx = purple_cipher_context_get_data(context);
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
600 int i;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
601
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
602 des_key_schedule (key + 0, ctx->key1.encrypt_subkeys);
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
603 des_key_schedule (key + 8, ctx->key2.encrypt_subkeys);
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
604 des_key_schedule (key + 16, ctx->key3.encrypt_subkeys);
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
605
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
606 for (i = 0; i < 32; i += 2)
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
607 {
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
608 ctx->key1.decrypt_subkeys[i] = ctx->key1.encrypt_subkeys[30-i];
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
609 ctx->key1.decrypt_subkeys[i+1] = ctx->key1.encrypt_subkeys[31-i];
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
610 ctx->key2.decrypt_subkeys[i] = ctx->key2.encrypt_subkeys[30-i];
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
611 ctx->key2.decrypt_subkeys[i+1] = ctx->key2.encrypt_subkeys[31-i];
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
612 ctx->key3.decrypt_subkeys[i] = ctx->key3.encrypt_subkeys[30-i];
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
613 ctx->key3.decrypt_subkeys[i+1] = ctx->key3.encrypt_subkeys[31-i];
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
614 }
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
615 }
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
616
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
617 static gint
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
618 des3_ecb_encrypt(struct _des3_ctx *ctx, const guchar data[],
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
619 size_t len, guchar output[], size_t *outlen)
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
620 {
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
621 int offset = 0;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
622 int i = 0;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
623 int tmp;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
624 guint8 buf[8] = {0,0,0,0,0,0,0,0};
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
625 while (offset + 8 <= len) {
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
626 des_ecb_crypt(&ctx->key1,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
627 data+offset,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
628 output+offset,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
629 0);
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
630 des_ecb_crypt(&ctx->key2,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
631 output+offset,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
632 buf,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
633 1);
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
634 des_ecb_crypt(&ctx->key3,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
635 buf,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
636 output+offset,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
637 0);
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
638 offset += 8;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
639 }
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
640 *outlen = len;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
641 if (offset < len) {
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
642 *outlen += len - offset;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
643 tmp = offset;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
644 memset(buf, 0, 8);
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
645 while (tmp < len) {
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
646 buf[i++] = data[tmp];
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
647 tmp++;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
648 }
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
649 des_ecb_crypt(&ctx->key1,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
650 buf,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
651 output+offset,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
652 0);
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
653 des_ecb_crypt(&ctx->key2,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
654 output+offset,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
655 buf,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
656 1);
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
657 des_ecb_crypt(&ctx->key3,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
658 buf,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
659 output+offset,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
660 0);
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
661 }
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
662 return 0;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
663 }
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
664
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
665 static gint
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
666 des3_cbc_encrypt(struct _des3_ctx *ctx, const guchar data[],
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
667 size_t len, guchar output[], size_t *outlen)
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
668 {
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
669 int offset = 0;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
670 int i = 0;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
671 int tmp;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
672 guint8 buf[8];
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
673 memcpy(buf, ctx->iv, 8);
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
674 while (offset + 8 <= len) {
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
675 for (i = 0; i < 8; i++)
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
676 buf[i] ^= data[offset + i];
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
677 des_ecb_crypt(&ctx->key1,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
678 buf,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
679 output+offset,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
680 0);
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
681 des_ecb_crypt(&ctx->key2,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
682 output+offset,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
683 buf,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
684 1);
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
685 des_ecb_crypt(&ctx->key3,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
686 buf,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
687 output+offset,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
688 0);
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
689 memcpy(buf, output+offset, 8);
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
690 offset += 8;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
691 }
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
692 *outlen = len;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
693 if (offset < len) {
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
694 *outlen += len - offset;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
695 tmp = offset;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
696 i = 0;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
697 while (tmp < len) {
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
698 buf[i++] ^= data[tmp];
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
699 tmp++;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
700 }
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
701 des_ecb_crypt(&ctx->key1,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
702 buf,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
703 output+offset,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
704 0);
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
705 des_ecb_crypt(&ctx->key2,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
706 output+offset,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
707 buf,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
708 1);
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
709 des_ecb_crypt(&ctx->key3,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
710 buf,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
711 output+offset,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
712 0);
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
713 }
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
714 return 0;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
715 }
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
716
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
717 static gint
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
718 des3_encrypt(PurpleCipherContext *context, const guchar data[],
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
719 size_t len, guchar output[], size_t *outlen)
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
720 {
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
721 struct _des3_ctx *ctx = purple_cipher_context_get_data(context);
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
722
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
723 if (ctx->mode == PURPLE_CIPHER_BATCH_MODE_ECB) {
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
724 return des3_ecb_encrypt(ctx, data, len, output, outlen);
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
725 } else if (ctx->mode == PURPLE_CIPHER_BATCH_MODE_CBC) {
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
726 return des3_cbc_encrypt(ctx, data, len, output, outlen);
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
727 } else {
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
728 g_return_val_if_reached(0);
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
729 }
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
730
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
731 return 0;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
732 }
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
733
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
734 static gint
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
735 des3_ecb_decrypt(struct _des3_ctx *ctx, const guchar data[],
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
736 size_t len, guchar output[], size_t *outlen)
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
737 {
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
738 int offset = 0;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
739 int i = 0;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
740 int tmp;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
741 guint8 buf[8] = {0,0,0,0,0,0,0,0};
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
742 while (offset + 8 <= len) {
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
743 /* NOTE: Apply key in reverse */
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
744 des_ecb_crypt(&ctx->key3,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
745 data+offset,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
746 output+offset,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
747 1);
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
748 des_ecb_crypt(&ctx->key2,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
749 output+offset,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
750 buf,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
751 0);
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
752 des_ecb_crypt(&ctx->key1,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
753 buf,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
754 output+offset,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
755 1);
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
756 offset+=8;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
757 }
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
758 *outlen = len;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
759 if (offset < len) {
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
760 *outlen += len - offset;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
761 tmp = offset;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
762 memset(buf, 0, 8);
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
763 while (tmp < len) {
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
764 buf[i++] = data[tmp];
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
765 tmp++;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
766 }
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
767 des_ecb_crypt(&ctx->key3,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
768 buf,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
769 output+offset,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
770 1);
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
771 des_ecb_crypt(&ctx->key2,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
772 output+offset,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
773 buf,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
774 0);
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
775 des_ecb_crypt(&ctx->key1,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
776 buf,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
777 output+offset,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
778 1);
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
779 }
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
780 return 0;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
781 }
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
782
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
783 static gint
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
784 des3_cbc_decrypt(struct _des3_ctx *ctx, const guchar data[],
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
785 size_t len, guchar output[], size_t *outlen)
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
786 {
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
787 int offset = 0;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
788 int i = 0;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
789 int tmp;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
790 guint8 buf[8] = {0,0,0,0,0,0,0,0};
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
791 guint8 link[8];
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
792 memcpy(link, ctx->iv, 8);
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
793 while (offset + 8 <= len) {
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
794 des_ecb_crypt(&ctx->key3,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
795 data+offset,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
796 output+offset,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
797 1);
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
798 des_ecb_crypt(&ctx->key2,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
799 output+offset,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
800 buf,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
801 0);
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
802 des_ecb_crypt(&ctx->key1,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
803 buf,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
804 output+offset,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
805 1);
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
806 for (i = 0; i < 8; i++)
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
807 output[offset + i] ^= link[i];
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
808 memcpy(link, data + offset, 8);
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
809 offset+=8;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
810 }
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
811 *outlen = len;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
812 if(offset<len) {
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
813 *outlen += len - offset;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
814 tmp = offset;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
815 memset(buf, 0, 8);
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
816 i = 0;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
817 while(tmp<len) {
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
818 buf[i++] = data[tmp];
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
819 tmp++;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
820 }
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
821 des_ecb_crypt(&ctx->key3,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
822 buf,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
823 output+offset,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
824 1);
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
825 des_ecb_crypt(&ctx->key2,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
826 output+offset,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
827 buf,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
828 0);
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
829 des_ecb_crypt(&ctx->key1,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
830 buf,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
831 output+offset,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
832 1);
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
833 for (i = 0; i < 8; i++)
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
834 output[offset + i] ^= link[i];
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
835 }
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
836 return 0;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
837 }
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
838
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
839 static gint
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
840 des3_decrypt(PurpleCipherContext *context, const guchar data[],
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
841 size_t len, guchar output[], size_t *outlen)
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
842 {
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
843 struct _des3_ctx *ctx = purple_cipher_context_get_data(context);
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
844
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
845 if (ctx->mode == PURPLE_CIPHER_BATCH_MODE_ECB) {
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
846 return des3_ecb_decrypt(ctx, data, len, output, outlen);
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
847 } else if (ctx->mode == PURPLE_CIPHER_BATCH_MODE_CBC) {
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
848 return des3_cbc_decrypt(ctx, data, len, output, outlen);
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
849 } else {
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
850 g_return_val_if_reached(0);
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
851 }
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
852
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
853 return 0;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
854 }
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
855
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
856 static void
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
857 des3_set_batch(PurpleCipherContext *context, PurpleCipherBatchMode mode)
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
858 {
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
859 struct _des3_ctx *ctx = purple_cipher_context_get_data(context);
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
860
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
861 ctx->mode = mode;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
862 }
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
863
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
864 static PurpleCipherBatchMode
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
865 des3_get_batch(PurpleCipherContext *context)
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
866 {
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
867 struct _des3_ctx *ctx = purple_cipher_context_get_data(context);
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
868
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
869 return ctx->mode;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
870 }
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
871
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
872 static void
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
873 des3_set_iv(PurpleCipherContext *context, guchar *iv, size_t len)
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
874 {
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
875 struct _des3_ctx *ctx;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
876
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
877 g_return_if_fail(len == 8);
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
878
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
879 ctx = purple_cipher_context_get_data(context);
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
880
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
881 memcpy(ctx->iv, iv, len);
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
882 }
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
883
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
884 static void
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
885 des3_init(PurpleCipherContext *context, gpointer extra)
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
886 {
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
887 struct _des3_ctx *mctx;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
888 mctx = g_new0(struct _des3_ctx, 1);
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
889 purple_cipher_context_set_data(context, mctx);
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
890 }
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
891
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
892 static void
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
893 des3_uninit(PurpleCipherContext *context)
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
894 {
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
895 struct _des3_ctx *des3_context;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
896
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
897 des3_context = purple_cipher_context_get_data(context);
31407
8c850977cb42 Fix a potential information leak in cipher.c.
Julia Lawall <julia@diku.dk>
parents: 28762
diff changeset
898 memset(des3_context, 0, sizeof(*des3_context));
22024
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
899
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
900 g_free(des3_context);
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
901 des3_context = NULL;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
902 }
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
903
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
904 static PurpleCipherOps DES3Ops = {
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
905 NULL, /* Set option */
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
906 NULL, /* Get option */
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
907 des3_init, /* init */
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
908 NULL, /* reset */
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
909 des3_uninit, /* uninit */
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
910 des3_set_iv, /* set iv */
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
911 NULL, /* append */
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
912 NULL, /* digest */
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
913 des3_encrypt, /* encrypt */
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
914 des3_decrypt, /* decrypt */
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
915 NULL, /* set salt */
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
916 NULL, /* get salt size */
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
917 des3_set_key, /* set key */
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
918 NULL, /* get key size */
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
919 des3_set_batch, /* set batch mode */
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
920 des3_get_batch, /* get batch mode */
22025
23756775175d HMAC digest support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 22024
diff changeset
921 NULL, /* get block size */
23756775175d HMAC digest support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 22024
diff changeset
922 NULL /* set key with len */
11335
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
923 };
8e8d266179bb [gaim-migrate @ 13548]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11333
diff changeset
924
11329
5ca3cf4e502e [gaim-migrate @ 13541]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11183
diff changeset
925 /*******************************************************************************
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
926 * Structs
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
927 ******************************************************************************/
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
928 struct _PurpleCipher {
17435
a42f7e095cfd - Add documentation for the internal CipherContext struct
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17155
diff changeset
929 gchar *name; /**< Internal name - used for searching */
a42f7e095cfd - Add documentation for the internal CipherContext struct
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17155
diff changeset
930 PurpleCipherOps *ops; /**< Operations supported by this cipher */
a42f7e095cfd - Add documentation for the internal CipherContext struct
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17155
diff changeset
931 guint ref; /**< Reference count */
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
932 };
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
933
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
934 struct _PurpleCipherContext {
17435
a42f7e095cfd - Add documentation for the internal CipherContext struct
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17155
diff changeset
935 PurpleCipher *cipher; /**< Cipher this context is under */
a42f7e095cfd - Add documentation for the internal CipherContext struct
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17155
diff changeset
936 gpointer data; /**< Internal cipher state data */
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
937 };
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
938
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
939 /******************************************************************************
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
940 * Globals
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
941 *****************************************************************************/
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
942 static GList *ciphers = NULL;
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
943
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
944 /******************************************************************************
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
945 * PurpleCipher API
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
946 *****************************************************************************/
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
947 const gchar *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
948 purple_cipher_get_name(PurpleCipher *cipher) {
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
949 g_return_val_if_fail(cipher, NULL);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
950
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
951 return cipher->name;
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
952 }
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
953
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
954 guint
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
955 purple_cipher_get_capabilities(PurpleCipher *cipher) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
956 PurpleCipherOps *ops = NULL;
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
957 guint caps = 0;
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
958
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
959 g_return_val_if_fail(cipher, 0);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
960
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
961 ops = cipher->ops;
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
962 g_return_val_if_fail(ops, 0);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
963
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
964 if(ops->set_option)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
965 caps |= PURPLE_CIPHER_CAPS_SET_OPT;
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
966 if(ops->get_option)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
967 caps |= PURPLE_CIPHER_CAPS_GET_OPT;
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
968 if(ops->init)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
969 caps |= PURPLE_CIPHER_CAPS_INIT;
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
970 if(ops->reset)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
971 caps |= PURPLE_CIPHER_CAPS_RESET;
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
972 if(ops->uninit)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
973 caps |= PURPLE_CIPHER_CAPS_UNINIT;
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
974 if(ops->set_iv)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
975 caps |= PURPLE_CIPHER_CAPS_SET_IV;
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
976 if(ops->append)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
977 caps |= PURPLE_CIPHER_CAPS_APPEND;
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
978 if(ops->digest)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
979 caps |= PURPLE_CIPHER_CAPS_DIGEST;
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
980 if(ops->encrypt)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
981 caps |= PURPLE_CIPHER_CAPS_ENCRYPT;
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
982 if(ops->decrypt)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
983 caps |= PURPLE_CIPHER_CAPS_DECRYPT;
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
984 if(ops->set_salt)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
985 caps |= PURPLE_CIPHER_CAPS_SET_SALT;
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
986 if(ops->get_salt_size)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
987 caps |= PURPLE_CIPHER_CAPS_GET_SALT_SIZE;
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
988 if(ops->set_key)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
989 caps |= PURPLE_CIPHER_CAPS_SET_KEY;
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
990 if(ops->get_key_size)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
991 caps |= PURPLE_CIPHER_CAPS_GET_KEY_SIZE;
22024
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
992 if(ops->set_batch_mode)
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
993 caps |= PURPLE_CIPHER_CAPS_SET_BATCH_MODE;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
994 if(ops->get_batch_mode)
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
995 caps |= PURPLE_CIPHER_CAPS_GET_BATCH_MODE;
22025
23756775175d HMAC digest support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 22024
diff changeset
996 if(ops->get_block_size)
23756775175d HMAC digest support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 22024
diff changeset
997 caps |= PURPLE_CIPHER_CAPS_GET_BLOCK_SIZE;
23756775175d HMAC digest support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 22024
diff changeset
998 if(ops->set_key_with_len)
23756775175d HMAC digest support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 22024
diff changeset
999 caps |= PURPLE_CIPHER_CAPS_SET_KEY_WITH_LEN;
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1000
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1001 return caps;
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1002 }
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1003
10687
5ac4b470bee8 [gaim-migrate @ 12235]
Etan Reisner <deryni@pidgin.im>
parents: 10684
diff changeset
1004 gboolean
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1005 purple_cipher_digest_region(const gchar *name, const guchar *data,
10687
5ac4b470bee8 [gaim-migrate @ 12235]
Etan Reisner <deryni@pidgin.im>
parents: 10684
diff changeset
1006 size_t data_len, size_t in_len,
11183
be87fe695c93 [gaim-migrate @ 13295]
Mark Doliner <markdoliner@pidgin.im>
parents: 11143
diff changeset
1007 guchar digest[], size_t *out_len)
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1008 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1009 PurpleCipher *cipher;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1010 PurpleCipherContext *context;
10687
5ac4b470bee8 [gaim-migrate @ 12235]
Etan Reisner <deryni@pidgin.im>
parents: 10684
diff changeset
1011 gboolean ret = FALSE;
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1012
10687
5ac4b470bee8 [gaim-migrate @ 12235]
Etan Reisner <deryni@pidgin.im>
parents: 10684
diff changeset
1013 g_return_val_if_fail(name, FALSE);
5ac4b470bee8 [gaim-migrate @ 12235]
Etan Reisner <deryni@pidgin.im>
parents: 10684
diff changeset
1014 g_return_val_if_fail(data, FALSE);
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1015
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1016 cipher = purple_ciphers_find_cipher(name);
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1017
10687
5ac4b470bee8 [gaim-migrate @ 12235]
Etan Reisner <deryni@pidgin.im>
parents: 10684
diff changeset
1018 g_return_val_if_fail(cipher, FALSE);
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1019
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1020 if(!cipher->ops->append || !cipher->ops->digest) {
27497
2dc5a0e0c4c2 Increase the logging level of some debugging messages that seemed to be a
Mauro Brasil <mauro.brasil@tqi.com.br>
parents: 27383
diff changeset
1021 purple_debug_warning("cipher", "purple_cipher_region failed: "
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1022 "the %s cipher does not support appending and or "
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1023 "digesting.", cipher->name);
10687
5ac4b470bee8 [gaim-migrate @ 12235]
Etan Reisner <deryni@pidgin.im>
parents: 10684
diff changeset
1024 return FALSE;
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1025 }
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1026
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1027 context = purple_cipher_context_new(cipher, NULL);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1028 purple_cipher_context_append(context, data, data_len);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1029 ret = purple_cipher_context_digest(context, in_len, digest, out_len);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1030 purple_cipher_context_destroy(context);
10687
5ac4b470bee8 [gaim-migrate @ 12235]
Etan Reisner <deryni@pidgin.im>
parents: 10684
diff changeset
1031
5ac4b470bee8 [gaim-migrate @ 12235]
Etan Reisner <deryni@pidgin.im>
parents: 10684
diff changeset
1032 return ret;
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1033 }
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1034
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1035 /******************************************************************************
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1036 * PurpleCiphers API
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1037 *****************************************************************************/
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1038 PurpleCipher *
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1039 purple_ciphers_find_cipher(const gchar *name) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1040 PurpleCipher *cipher;
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1041 GList *l;
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1042
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1043 g_return_val_if_fail(name, NULL);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1044
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1045 for(l = ciphers; l; l = l->next) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1046 cipher = PURPLE_CIPHER(l->data);
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1047
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1048 if(!g_ascii_strcasecmp(cipher->name, name))
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1049 return cipher;
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1050 }
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1051
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1052 return NULL;
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1053 }
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1054
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1055 PurpleCipher *
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1056 purple_ciphers_register_cipher(const gchar *name, PurpleCipherOps *ops) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1057 PurpleCipher *cipher = NULL;
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1058
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1059 g_return_val_if_fail(name, NULL);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1060 g_return_val_if_fail(ops, NULL);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1061 g_return_val_if_fail(!purple_ciphers_find_cipher(name), NULL);
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1062
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1063 cipher = g_new0(PurpleCipher, 1);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1064 PURPLE_DBUS_REGISTER_POINTER(cipher, PurpleCipher);
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1065
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1066 cipher->name = g_strdup(name);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1067 cipher->ops = ops;
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1068
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1069 ciphers = g_list_append(ciphers, cipher);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1070
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1071 purple_signal_emit(purple_ciphers_get_handle(), "cipher-added", cipher);
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1072
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1073 return cipher;
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1074 }
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1075
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1076 gboolean
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1077 purple_ciphers_unregister_cipher(PurpleCipher *cipher) {
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1078 g_return_val_if_fail(cipher, FALSE);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1079 g_return_val_if_fail(cipher->ref == 0, FALSE);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1080
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1081 purple_signal_emit(purple_ciphers_get_handle(), "cipher-removed", cipher);
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1082
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1083 ciphers = g_list_remove(ciphers, cipher);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1084
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1085 g_free(cipher->name);
13760
09669e542e2f [gaim-migrate @ 16169]
Mark Doliner <markdoliner@pidgin.im>
parents: 13699
diff changeset
1086
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1087 PURPLE_DBUS_UNREGISTER_POINTER(cipher);
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1088 g_free(cipher);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1089
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1090 return TRUE;
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1091 }
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1092
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1093 GList *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1094 purple_ciphers_get_ciphers() {
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1095 return ciphers;
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1096 }
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1097
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1098 /******************************************************************************
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1099 * PurpleCipher Subsystem API
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1100 *****************************************************************************/
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1101 gpointer
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1102 purple_ciphers_get_handle() {
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1103 static gint handle;
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1104
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1105 return &handle;
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1106 }
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1107
31426
290d182e7bf9 Moved sha256 to the sub library
Gary Kramlich <grim@reaperworld.com>
parents: 31425
diff changeset
1108 /* This are implemented in the purple-ciphers sublibrary built in the ciphers
290d182e7bf9 Moved sha256 to the sub library
Gary Kramlich <grim@reaperworld.com>
parents: 31425
diff changeset
1109 * directory. We could put a header file in there, but it's less hassle for
290d182e7bf9 Moved sha256 to the sub library
Gary Kramlich <grim@reaperworld.com>
parents: 31425
diff changeset
1110 * the developer to just add it here since they have to register it here as
290d182e7bf9 Moved sha256 to the sub library
Gary Kramlich <grim@reaperworld.com>
parents: 31425
diff changeset
1111 * well.
290d182e7bf9 Moved sha256 to the sub library
Gary Kramlich <grim@reaperworld.com>
parents: 31425
diff changeset
1112 */
31423
8483c092dbc4 Broke out the hmac cipher to it's own file. Removed already transitioned info in the fileheader of cipher.c
Gary Kramlich <grim@reaperworld.com>
parents: 31421
diff changeset
1113 PurpleCipherOps *purple_hmac_cipher_get_ops();
31421
713fb035d563 Created a new branch to break the ciphers out to their own files. Also I've now exposed purple_g_checksum_* if we're on glib >= 2.16.0
Gary Kramlich <grim@reaperworld.com>
parents: 31407
diff changeset
1114 PurpleCipherOps *purple_md4_cipher_get_ops();
713fb035d563 Created a new branch to break the ciphers out to their own files. Also I've now exposed purple_g_checksum_* if we're on glib >= 2.16.0
Gary Kramlich <grim@reaperworld.com>
parents: 31407
diff changeset
1115 PurpleCipherOps *purple_md5_cipher_get_ops();
31425
e8113737ec1a Moved rc4 to the ciphers sublibrary
Gary Kramlich <grim@reaperworld.com>
parents: 31424
diff changeset
1116 PurpleCipherOps *purple_rc4_cipher_get_ops();
31424
567533f9b8f7 Broke sha1 out
Gary Kramlich <grim@reaperworld.com>
parents: 31423
diff changeset
1117 PurpleCipherOps *purple_sha1_cipher_get_ops();
31426
290d182e7bf9 Moved sha256 to the sub library
Gary Kramlich <grim@reaperworld.com>
parents: 31425
diff changeset
1118 PurpleCipherOps *purple_sha256_cipher_get_ops();
31421
713fb035d563 Created a new branch to break the ciphers out to their own files. Also I've now exposed purple_g_checksum_* if we're on glib >= 2.16.0
Gary Kramlich <grim@reaperworld.com>
parents: 31407
diff changeset
1119
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1120 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1121 purple_ciphers_init() {
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1122 gpointer handle;
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1123
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1124 handle = purple_ciphers_get_handle();
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1125
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1126 purple_signal_register(handle, "cipher-added",
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1127 purple_marshal_VOID__POINTER, NULL, 1,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1128 purple_value_new(PURPLE_TYPE_SUBTYPE,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1129 PURPLE_SUBTYPE_CIPHER));
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1130 purple_signal_register(handle, "cipher-removed",
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1131 purple_marshal_VOID__POINTER, NULL, 1,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1132 purple_value_new(PURPLE_TYPE_SUBTYPE,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1133 PURPLE_SUBTYPE_CIPHER));
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1134
31421
713fb035d563 Created a new branch to break the ciphers out to their own files. Also I've now exposed purple_g_checksum_* if we're on glib >= 2.16.0
Gary Kramlich <grim@reaperworld.com>
parents: 31407
diff changeset
1135 purple_ciphers_register_cipher("md5", purple_md5_cipher_get_ops());
31424
567533f9b8f7 Broke sha1 out
Gary Kramlich <grim@reaperworld.com>
parents: 31423
diff changeset
1136 purple_ciphers_register_cipher("sha1", purple_sha1_cipher_get_ops());
31426
290d182e7bf9 Moved sha256 to the sub library
Gary Kramlich <grim@reaperworld.com>
parents: 31425
diff changeset
1137 purple_ciphers_register_cipher("sha256", purple_sha256_cipher_get_ops());
31421
713fb035d563 Created a new branch to break the ciphers out to their own files. Also I've now exposed purple_g_checksum_* if we're on glib >= 2.16.0
Gary Kramlich <grim@reaperworld.com>
parents: 31407
diff changeset
1138 purple_ciphers_register_cipher("md4", purple_md4_cipher_get_ops());
31423
8483c092dbc4 Broke out the hmac cipher to it's own file. Removed already transitioned info in the fileheader of cipher.c
Gary Kramlich <grim@reaperworld.com>
parents: 31421
diff changeset
1139 purple_ciphers_register_cipher("hmac", purple_hmac_cipher_get_ops());
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1140 purple_ciphers_register_cipher("des", &DESOps);
22024
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
1141 purple_ciphers_register_cipher("des3", &DES3Ops);
31425
e8113737ec1a Moved rc4 to the ciphers sublibrary
Gary Kramlich <grim@reaperworld.com>
parents: 31424
diff changeset
1142 purple_ciphers_register_cipher("rc4", purple_rc4_cipher_get_ops());
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1143 }
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1144
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1145 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1146 purple_ciphers_uninit() {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1147 PurpleCipher *cipher;
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1148 GList *l, *ll;
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1149
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1150 for(l = ciphers; l; l = ll) {
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1151 ll = l->next;
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1152
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1153 cipher = PURPLE_CIPHER(l->data);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1154 purple_ciphers_unregister_cipher(cipher);
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1155 }
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1156
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1157 g_list_free(ciphers);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1158
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1159 purple_signals_unregister_by_instance(purple_ciphers_get_handle());
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1160 }
31426
290d182e7bf9 Moved sha256 to the sub library
Gary Kramlich <grim@reaperworld.com>
parents: 31425
diff changeset
1161
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1162 /******************************************************************************
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1163 * PurpleCipherContext API
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1164 *****************************************************************************/
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1165 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1166 purple_cipher_context_set_option(PurpleCipherContext *context, const gchar *name,
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1167 gpointer value)
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1168 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1169 PurpleCipher *cipher = NULL;
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1170
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1171 g_return_if_fail(context);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1172 g_return_if_fail(name);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1173
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1174 cipher = context->cipher;
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1175 g_return_if_fail(cipher);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1176
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1177 if(cipher->ops && cipher->ops->set_option)
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1178 cipher->ops->set_option(context, name, value);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1179 else
27497
2dc5a0e0c4c2 Increase the logging level of some debugging messages that seemed to be a
Mauro Brasil <mauro.brasil@tqi.com.br>
parents: 27383
diff changeset
1180 purple_debug_warning("cipher", "the %s cipher does not support the "
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1181 "set_option operation\n", cipher->name);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1182 }
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1183
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1184 gpointer
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1185 purple_cipher_context_get_option(PurpleCipherContext *context, const gchar *name) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1186 PurpleCipher *cipher = NULL;
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1187
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1188 g_return_val_if_fail(context, NULL);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1189 g_return_val_if_fail(name, NULL);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1190
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1191 cipher = context->cipher;
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1192 g_return_val_if_fail(cipher, NULL);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1193
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1194 if(cipher->ops && cipher->ops->get_option)
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1195 return cipher->ops->get_option(context, name);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1196 else {
27497
2dc5a0e0c4c2 Increase the logging level of some debugging messages that seemed to be a
Mauro Brasil <mauro.brasil@tqi.com.br>
parents: 27383
diff changeset
1197 purple_debug_warning("cipher", "the %s cipher does not support the "
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1198 "get_option operation\n", cipher->name);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1199
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1200 return NULL;
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1201 }
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1202 }
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1203
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1204 PurpleCipherContext *
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1205 purple_cipher_context_new(PurpleCipher *cipher, void *extra) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1206 PurpleCipherContext *context = NULL;
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1207
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1208 g_return_val_if_fail(cipher, NULL);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1209
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1210 cipher->ref++;
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1211
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1212 context = g_new0(PurpleCipherContext, 1);
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1213 context->cipher = cipher;
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1214
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1215 if(cipher->ops->init)
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1216 cipher->ops->init(context, extra);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1217
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1218 return context;
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1219 }
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1220
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1221 PurpleCipherContext *
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1222 purple_cipher_context_new_by_name(const gchar *name, void *extra) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1223 PurpleCipher *cipher;
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1224
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1225 g_return_val_if_fail(name, NULL);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1226
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1227 cipher = purple_ciphers_find_cipher(name);
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1228
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1229 g_return_val_if_fail(cipher, NULL);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1230
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1231 return purple_cipher_context_new(cipher, extra);
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1232 }
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1233
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1234 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1235 purple_cipher_context_reset(PurpleCipherContext *context, void *extra) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1236 PurpleCipher *cipher = NULL;
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1237
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1238 g_return_if_fail(context);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1239
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1240 cipher = context->cipher;
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1241 g_return_if_fail(cipher);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1242
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1243 if(cipher->ops && cipher->ops->reset)
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1244 context->cipher->ops->reset(context, extra);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1245 }
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1246
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1247 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1248 purple_cipher_context_destroy(PurpleCipherContext *context) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1249 PurpleCipher *cipher = NULL;
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1250
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1251 g_return_if_fail(context);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1252
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1253 cipher = context->cipher;
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1254 g_return_if_fail(cipher);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1255
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1256 cipher->ref--;
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1257
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1258 if(cipher->ops && cipher->ops->uninit)
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1259 cipher->ops->uninit(context);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1260
31407
8c850977cb42 Fix a potential information leak in cipher.c.
Julia Lawall <julia@diku.dk>
parents: 28762
diff changeset
1261 memset(context, 0, sizeof(*context));
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1262 g_free(context);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1263 context = NULL;
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1264 }
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1265
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1266 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1267 purple_cipher_context_set_iv(PurpleCipherContext *context, guchar *iv, size_t len)
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1268 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1269 PurpleCipher *cipher = NULL;
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1270
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1271 g_return_if_fail(context);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1272 g_return_if_fail(iv);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1273
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1274 cipher = context->cipher;
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1275 g_return_if_fail(cipher);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1276
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1277 if(cipher->ops && cipher->ops->set_iv)
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1278 cipher->ops->set_iv(context, iv, len);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1279 else
27497
2dc5a0e0c4c2 Increase the logging level of some debugging messages that seemed to be a
Mauro Brasil <mauro.brasil@tqi.com.br>
parents: 27383
diff changeset
1280 purple_debug_warning("cipher", "the %s cipher does not support the set"
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1281 "initialization vector operation\n", cipher->name);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1282 }
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1283
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1284 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1285 purple_cipher_context_append(PurpleCipherContext *context, const guchar *data,
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1286 size_t len)
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1287 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1288 PurpleCipher *cipher = NULL;
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1289
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1290 g_return_if_fail(context);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1291
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1292 cipher = context->cipher;
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1293 g_return_if_fail(cipher);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1294
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1295 if(cipher->ops && cipher->ops->append)
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1296 cipher->ops->append(context, data, len);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1297 else
27497
2dc5a0e0c4c2 Increase the logging level of some debugging messages that seemed to be a
Mauro Brasil <mauro.brasil@tqi.com.br>
parents: 27383
diff changeset
1298 purple_debug_warning("cipher", "the %s cipher does not support the append "
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1299 "operation\n", cipher->name);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1300 }
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1301
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1302 gboolean
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1303 purple_cipher_context_digest(PurpleCipherContext *context, size_t in_len,
11183
be87fe695c93 [gaim-migrate @ 13295]
Mark Doliner <markdoliner@pidgin.im>
parents: 11143
diff changeset
1304 guchar digest[], size_t *out_len)
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1305 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1306 PurpleCipher *cipher = NULL;
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1307
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1308 g_return_val_if_fail(context, FALSE);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1309
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1310 cipher = context->cipher;
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1311
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1312 if(cipher->ops && cipher->ops->digest)
10687
5ac4b470bee8 [gaim-migrate @ 12235]
Etan Reisner <deryni@pidgin.im>
parents: 10684
diff changeset
1313 return cipher->ops->digest(context, in_len, digest, out_len);
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1314 else {
27497
2dc5a0e0c4c2 Increase the logging level of some debugging messages that seemed to be a
Mauro Brasil <mauro.brasil@tqi.com.br>
parents: 27383
diff changeset
1315 purple_debug_warning("cipher", "the %s cipher does not support the digest "
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1316 "operation\n", cipher->name);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1317 return FALSE;
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1318 }
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1319 }
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1320
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1321 gboolean
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1322 purple_cipher_context_digest_to_str(PurpleCipherContext *context, size_t in_len,
10687
5ac4b470bee8 [gaim-migrate @ 12235]
Etan Reisner <deryni@pidgin.im>
parents: 10684
diff changeset
1323 gchar digest_s[], size_t *out_len)
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1324 {
10687
5ac4b470bee8 [gaim-migrate @ 12235]
Etan Reisner <deryni@pidgin.im>
parents: 10684
diff changeset
1325 /* 8k is a bit excessive, will tweak later. */
11183
be87fe695c93 [gaim-migrate @ 13295]
Mark Doliner <markdoliner@pidgin.im>
parents: 11143
diff changeset
1326 guchar digest[BUF_LEN * 4];
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1327 gint n = 0;
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1328 size_t dlen = 0;
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1329
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1330 g_return_val_if_fail(context, FALSE);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1331 g_return_val_if_fail(digest_s, FALSE);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1332
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1333 if(!purple_cipher_context_digest(context, sizeof(digest), digest, &dlen))
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1334 return FALSE;
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1335
12388
3a25d96abdaf [gaim-migrate @ 14694]
Richard Laager <rlaager@pidgin.im>
parents: 12382
diff changeset
1336 /* in_len must be greater than dlen * 2 so we have room for the NUL. */
3a25d96abdaf [gaim-migrate @ 14694]
Richard Laager <rlaager@pidgin.im>
parents: 12382
diff changeset
1337 if(in_len <= dlen * 2)
10687
5ac4b470bee8 [gaim-migrate @ 12235]
Etan Reisner <deryni@pidgin.im>
parents: 10684
diff changeset
1338 return FALSE;
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1339
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1340 for(n = 0; n < dlen; n++)
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1341 sprintf(digest_s + (n * 2), "%02x", digest[n]);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1342
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1343 digest_s[n * 2] = '\0';
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1344
10687
5ac4b470bee8 [gaim-migrate @ 12235]
Etan Reisner <deryni@pidgin.im>
parents: 10684
diff changeset
1345 if(out_len)
5ac4b470bee8 [gaim-migrate @ 12235]
Etan Reisner <deryni@pidgin.im>
parents: 10684
diff changeset
1346 *out_len = dlen * 2;
5ac4b470bee8 [gaim-migrate @ 12235]
Etan Reisner <deryni@pidgin.im>
parents: 10684
diff changeset
1347
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1348 return TRUE;
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1349 }
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1350
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1351 gint
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1352 purple_cipher_context_encrypt(PurpleCipherContext *context, const guchar data[],
11183
be87fe695c93 [gaim-migrate @ 13295]
Mark Doliner <markdoliner@pidgin.im>
parents: 11143
diff changeset
1353 size_t len, guchar output[], size_t *outlen)
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1354 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1355 PurpleCipher *cipher = NULL;
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1356
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1357 g_return_val_if_fail(context, -1);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1358
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1359 cipher = context->cipher;
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1360 g_return_val_if_fail(cipher, -1);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1361
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1362 if(cipher->ops && cipher->ops->encrypt)
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1363 return cipher->ops->encrypt(context, data, len, output, outlen);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1364 else {
27497
2dc5a0e0c4c2 Increase the logging level of some debugging messages that seemed to be a
Mauro Brasil <mauro.brasil@tqi.com.br>
parents: 27383
diff changeset
1365 purple_debug_warning("cipher", "the %s cipher does not support the encrypt"
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1366 "operation\n", cipher->name);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1367
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1368 if(outlen)
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1369 *outlen = -1;
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1370
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1371 return -1;
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1372 }
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1373 }
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1374
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1375 gint
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1376 purple_cipher_context_decrypt(PurpleCipherContext *context, const guchar data[],
11183
be87fe695c93 [gaim-migrate @ 13295]
Mark Doliner <markdoliner@pidgin.im>
parents: 11143
diff changeset
1377 size_t len, guchar output[], size_t *outlen)
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1378 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1379 PurpleCipher *cipher = NULL;
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1380
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1381 g_return_val_if_fail(context, -1);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1382
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1383 cipher = context->cipher;
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1384 g_return_val_if_fail(cipher, -1);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1385
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1386 if(cipher->ops && cipher->ops->decrypt)
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1387 return cipher->ops->decrypt(context, data, len, output, outlen);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1388 else {
27497
2dc5a0e0c4c2 Increase the logging level of some debugging messages that seemed to be a
Mauro Brasil <mauro.brasil@tqi.com.br>
parents: 27383
diff changeset
1389 purple_debug_warning("cipher", "the %s cipher does not support the decrypt"
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1390 "operation\n", cipher->name);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1391
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1392 if(outlen)
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1393 *outlen = -1;
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1394
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1395 return -1;
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1396 }
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1397 }
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1398
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1399 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1400 purple_cipher_context_set_salt(PurpleCipherContext *context, guchar *salt) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1401 PurpleCipher *cipher = NULL;
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1402
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1403 g_return_if_fail(context);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1404
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1405 cipher = context->cipher;
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1406 g_return_if_fail(cipher);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1407
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1408 if(cipher->ops && cipher->ops->set_salt)
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1409 cipher->ops->set_salt(context, salt);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1410 else
27497
2dc5a0e0c4c2 Increase the logging level of some debugging messages that seemed to be a
Mauro Brasil <mauro.brasil@tqi.com.br>
parents: 27383
diff changeset
1411 purple_debug_warning("cipher", "the %s cipher does not support the "
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1412 "set_salt operation\n", cipher->name);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1413 }
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1414
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1415 size_t
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1416 purple_cipher_context_get_salt_size(PurpleCipherContext *context) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1417 PurpleCipher *cipher = NULL;
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1418
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1419 g_return_val_if_fail(context, -1);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1420
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1421 cipher = context->cipher;
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1422 g_return_val_if_fail(cipher, -1);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1423
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1424 if(cipher->ops && cipher->ops->get_salt_size)
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1425 return cipher->ops->get_salt_size(context);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1426 else {
27497
2dc5a0e0c4c2 Increase the logging level of some debugging messages that seemed to be a
Mauro Brasil <mauro.brasil@tqi.com.br>
parents: 27383
diff changeset
1427 purple_debug_warning("cipher", "the %s cipher does not support the "
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1428 "get_salt_size operation\n", cipher->name);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1429
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1430 return -1;
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1431 }
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1432 }
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1433
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1434 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1435 purple_cipher_context_set_key(PurpleCipherContext *context, const guchar *key) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1436 PurpleCipher *cipher = NULL;
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1437
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1438 g_return_if_fail(context);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1439
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1440 cipher = context->cipher;
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1441 g_return_if_fail(cipher);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1442
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1443 if(cipher->ops && cipher->ops->set_key)
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1444 cipher->ops->set_key(context, key);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1445 else
27497
2dc5a0e0c4c2 Increase the logging level of some debugging messages that seemed to be a
Mauro Brasil <mauro.brasil@tqi.com.br>
parents: 27383
diff changeset
1446 purple_debug_warning("cipher", "the %s cipher does not support the "
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1447 "set_key operation\n", cipher->name);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1448 }
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1449
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1450 size_t
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1451 purple_cipher_context_get_key_size(PurpleCipherContext *context) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1452 PurpleCipher *cipher = NULL;
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1453
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1454 g_return_val_if_fail(context, -1);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1455
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1456 cipher = context->cipher;
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1457 g_return_val_if_fail(cipher, -1);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1458
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1459 if(cipher->ops && cipher->ops->get_key_size)
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1460 return cipher->ops->get_key_size(context);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1461 else {
27497
2dc5a0e0c4c2 Increase the logging level of some debugging messages that seemed to be a
Mauro Brasil <mauro.brasil@tqi.com.br>
parents: 27383
diff changeset
1462 purple_debug_warning("cipher", "the %s cipher does not support the "
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1463 "get_key_size operation\n", cipher->name);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1464
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1465 return -1;
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1466 }
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1467 }
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1468
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1469 void
22024
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
1470 purple_cipher_context_set_batch_mode(PurpleCipherContext *context,
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
1471 PurpleCipherBatchMode mode)
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
1472 {
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
1473 PurpleCipher *cipher = NULL;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
1474
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
1475 g_return_if_fail(context);
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
1476
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
1477 cipher = context->cipher;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
1478 g_return_if_fail(cipher);
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
1479
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
1480 if(cipher->ops && cipher->ops->set_batch_mode)
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
1481 cipher->ops->set_batch_mode(context, mode);
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
1482 else
27497
2dc5a0e0c4c2 Increase the logging level of some debugging messages that seemed to be a
Mauro Brasil <mauro.brasil@tqi.com.br>
parents: 27383
diff changeset
1483 purple_debug_warning("cipher", "The %s cipher does not support the "
22024
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
1484 "set_batch_mode operation\n", cipher->name);
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
1485 }
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
1486
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
1487 PurpleCipherBatchMode
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
1488 purple_cipher_context_get_batch_mode(PurpleCipherContext *context)
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
1489 {
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
1490 PurpleCipher *cipher = NULL;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
1491
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
1492 g_return_val_if_fail(context, -1);
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
1493
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
1494 cipher = context->cipher;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
1495 g_return_val_if_fail(cipher, -1);
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
1496
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
1497 if(cipher->ops && cipher->ops->get_batch_mode)
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
1498 return cipher->ops->get_batch_mode(context);
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
1499 else {
27497
2dc5a0e0c4c2 Increase the logging level of some debugging messages that seemed to be a
Mauro Brasil <mauro.brasil@tqi.com.br>
parents: 27383
diff changeset
1500 purple_debug_warning("cipher", "The %s cipher does not support the "
22024
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
1501 "get_batch_mode operation\n", cipher->name);
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
1502 return -1;
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
1503 }
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
1504 }
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
1505
22025
23756775175d HMAC digest support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 22024
diff changeset
1506 size_t
23756775175d HMAC digest support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 22024
diff changeset
1507 purple_cipher_context_get_block_size(PurpleCipherContext *context)
23756775175d HMAC digest support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 22024
diff changeset
1508 {
23756775175d HMAC digest support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 22024
diff changeset
1509 PurpleCipher *cipher = NULL;
23756775175d HMAC digest support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 22024
diff changeset
1510
23756775175d HMAC digest support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 22024
diff changeset
1511 g_return_val_if_fail(context, -1);
23756775175d HMAC digest support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 22024
diff changeset
1512
23756775175d HMAC digest support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 22024
diff changeset
1513 cipher = context->cipher;
23756775175d HMAC digest support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 22024
diff changeset
1514 g_return_val_if_fail(cipher, -1);
23756775175d HMAC digest support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 22024
diff changeset
1515
23756775175d HMAC digest support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 22024
diff changeset
1516 if(cipher->ops && cipher->ops->get_block_size)
23756775175d HMAC digest support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 22024
diff changeset
1517 return cipher->ops->get_block_size(context);
23756775175d HMAC digest support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 22024
diff changeset
1518 else {
27497
2dc5a0e0c4c2 Increase the logging level of some debugging messages that seemed to be a
Mauro Brasil <mauro.brasil@tqi.com.br>
parents: 27383
diff changeset
1519 purple_debug_warning("cipher", "The %s cipher does not support the "
22025
23756775175d HMAC digest support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 22024
diff changeset
1520 "get_block_size operation\n", cipher->name);
23756775175d HMAC digest support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 22024
diff changeset
1521 return -1;
23756775175d HMAC digest support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 22024
diff changeset
1522 }
23756775175d HMAC digest support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 22024
diff changeset
1523 }
23756775175d HMAC digest support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 22024
diff changeset
1524
23756775175d HMAC digest support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 22024
diff changeset
1525 void
23756775175d HMAC digest support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 22024
diff changeset
1526 purple_cipher_context_set_key_with_len(PurpleCipherContext *context,
23756775175d HMAC digest support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 22024
diff changeset
1527 const guchar *key, size_t len)
23756775175d HMAC digest support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 22024
diff changeset
1528 {
23756775175d HMAC digest support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 22024
diff changeset
1529 PurpleCipher *cipher = NULL;
23756775175d HMAC digest support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 22024
diff changeset
1530
23756775175d HMAC digest support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 22024
diff changeset
1531 g_return_if_fail(context);
23756775175d HMAC digest support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 22024
diff changeset
1532
23756775175d HMAC digest support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 22024
diff changeset
1533 cipher = context->cipher;
23756775175d HMAC digest support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 22024
diff changeset
1534 g_return_if_fail(cipher);
23756775175d HMAC digest support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 22024
diff changeset
1535
23756775175d HMAC digest support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 22024
diff changeset
1536 if(cipher->ops && cipher->ops->set_key_with_len)
23756775175d HMAC digest support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 22024
diff changeset
1537 cipher->ops->set_key_with_len(context, key, len);
23756775175d HMAC digest support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 22024
diff changeset
1538 else
27497
2dc5a0e0c4c2 Increase the logging level of some debugging messages that seemed to be a
Mauro Brasil <mauro.brasil@tqi.com.br>
parents: 27383
diff changeset
1539 purple_debug_warning("cipher", "The %s cipher does not support the "
22025
23756775175d HMAC digest support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 22024
diff changeset
1540 "set_key_with_len operation\n", cipher->name);
23756775175d HMAC digest support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 22024
diff changeset
1541 }
23756775175d HMAC digest support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 22024
diff changeset
1542
22024
3fd5e4fff1be Triple DES cipher support from Elliott Sales de Andrade
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21091
diff changeset
1543 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1544 purple_cipher_context_set_data(PurpleCipherContext *context, gpointer data) {
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1545 g_return_if_fail(context);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1546
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1547 context->data = data;
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1548 }
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1549
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1550 gpointer
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1551 purple_cipher_context_get_data(PurpleCipherContext *context) {
10684
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1552 g_return_val_if_fail(context, NULL);
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1553
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1554 return context->data;
0325b164a7eb [gaim-migrate @ 12231]
Luke Schierer <lschiere@pidgin.im>
parents:
diff changeset
1555 }
12382
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1556
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1557 gchar *purple_cipher_http_digest_calculate_session_key(
12382
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1558 const gchar *algorithm,
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1559 const gchar *username,
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1560 const gchar *realm,
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1561 const gchar *password,
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1562 const gchar *nonce,
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1563 const gchar *client_nonce)
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1564 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1565 PurpleCipher *cipher;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1566 PurpleCipherContext *context;
12388
3a25d96abdaf [gaim-migrate @ 14694]
Richard Laager <rlaager@pidgin.im>
parents: 12382
diff changeset
1567 gchar hash[33]; /* We only support MD5. */
12382
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1568
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1569 g_return_val_if_fail(username != NULL, NULL);
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1570 g_return_val_if_fail(realm != NULL, NULL);
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1571 g_return_val_if_fail(password != NULL, NULL);
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1572 g_return_val_if_fail(nonce != NULL, NULL);
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1573
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1574 /* Check for a supported algorithm. */
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1575 g_return_val_if_fail(algorithm == NULL ||
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1576 *algorithm == '\0' ||
17155
143ff2796376 Replace strcasecmp() calls with glib equivalents.
Richard Laager <rlaager@pidgin.im>
parents: 17065
diff changeset
1577 g_ascii_strcasecmp(algorithm, "MD5") ||
143ff2796376 Replace strcasecmp() calls with glib equivalents.
Richard Laager <rlaager@pidgin.im>
parents: 17065
diff changeset
1578 g_ascii_strcasecmp(algorithm, "MD5-sess"), NULL);
12382
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1579
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1580 cipher = purple_ciphers_find_cipher("md5");
12382
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1581 g_return_val_if_fail(cipher != NULL, NULL);
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1582
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1583 context = purple_cipher_context_new(cipher, NULL);
12382
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1584
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1585 purple_cipher_context_append(context, (guchar *)username, strlen(username));
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1586 purple_cipher_context_append(context, (guchar *)":", 1);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1587 purple_cipher_context_append(context, (guchar *)realm, strlen(realm));
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1588 purple_cipher_context_append(context, (guchar *)":", 1);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1589 purple_cipher_context_append(context, (guchar *)password, strlen(password));
12382
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1590
17155
143ff2796376 Replace strcasecmp() calls with glib equivalents.
Richard Laager <rlaager@pidgin.im>
parents: 17065
diff changeset
1591 if (algorithm != NULL && !g_ascii_strcasecmp(algorithm, "MD5-sess"))
12382
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1592 {
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1593 guchar digest[16];
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1594
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1595 if (client_nonce == NULL)
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1596 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1597 purple_cipher_context_destroy(context);
19832
84b69b21672b Patch from QuLogic. Fixes #2903 ('Missing newlines in debug messages.')
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17435
diff changeset
1598 purple_debug_error("cipher", "Required client_nonce missing for MD5-sess digest calculation.\n");
12382
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1599 return NULL;
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1600 }
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1601
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1602 purple_cipher_context_digest(context, sizeof(digest), digest, NULL);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1603 purple_cipher_context_destroy(context);
12382
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1604
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1605 context = purple_cipher_context_new(cipher, NULL);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1606 purple_cipher_context_append(context, digest, sizeof(digest));
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1607 purple_cipher_context_append(context, (guchar *)":", 1);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1608 purple_cipher_context_append(context, (guchar *)nonce, strlen(nonce));
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1609 purple_cipher_context_append(context, (guchar *)":", 1);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1610 purple_cipher_context_append(context, (guchar *)client_nonce, strlen(client_nonce));
12382
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1611 }
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1612
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1613 purple_cipher_context_digest_to_str(context, sizeof(hash), hash, NULL);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1614 purple_cipher_context_destroy(context);
12382
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1615
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1616 return g_strdup(hash);
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1617 }
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1618
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1619 gchar *purple_cipher_http_digest_calculate_response(
12382
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1620 const gchar *algorithm,
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1621 const gchar *method,
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1622 const gchar *digest_uri,
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1623 const gchar *qop,
12389
7196ba664097 [gaim-migrate @ 14695]
Richard Laager <rlaager@pidgin.im>
parents: 12388
diff changeset
1624 const gchar *entity,
12382
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1625 const gchar *nonce,
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1626 const gchar *nonce_count,
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1627 const gchar *client_nonce,
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1628 const gchar *session_key)
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1629 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1630 PurpleCipher *cipher;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1631 PurpleCipherContext *context;
12388
3a25d96abdaf [gaim-migrate @ 14694]
Richard Laager <rlaager@pidgin.im>
parents: 12382
diff changeset
1632 static gchar hash2[33]; /* We only support MD5. */
12382
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1633
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1634 g_return_val_if_fail(method != NULL, NULL);
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1635 g_return_val_if_fail(digest_uri != NULL, NULL);
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1636 g_return_val_if_fail(nonce != NULL, NULL);
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1637 g_return_val_if_fail(session_key != NULL, NULL);
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1638
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1639 /* Check for a supported algorithm. */
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1640 g_return_val_if_fail(algorithm == NULL ||
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1641 *algorithm == '\0' ||
17155
143ff2796376 Replace strcasecmp() calls with glib equivalents.
Richard Laager <rlaager@pidgin.im>
parents: 17065
diff changeset
1642 g_ascii_strcasecmp(algorithm, "MD5") ||
143ff2796376 Replace strcasecmp() calls with glib equivalents.
Richard Laager <rlaager@pidgin.im>
parents: 17065
diff changeset
1643 g_ascii_strcasecmp(algorithm, "MD5-sess"), NULL);
12382
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1644
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1645 /* Check for a supported "quality of protection". */
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1646 g_return_val_if_fail(qop == NULL ||
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1647 *qop == '\0' ||
17155
143ff2796376 Replace strcasecmp() calls with glib equivalents.
Richard Laager <rlaager@pidgin.im>
parents: 17065
diff changeset
1648 g_ascii_strcasecmp(qop, "auth") ||
143ff2796376 Replace strcasecmp() calls with glib equivalents.
Richard Laager <rlaager@pidgin.im>
parents: 17065
diff changeset
1649 g_ascii_strcasecmp(qop, "auth-int"), NULL);
12382
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1650
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1651 cipher = purple_ciphers_find_cipher("md5");
12382
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1652 g_return_val_if_fail(cipher != NULL, NULL);
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1653
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1654 context = purple_cipher_context_new(cipher, NULL);
12382
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1655
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1656 purple_cipher_context_append(context, (guchar *)method, strlen(method));
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1657 purple_cipher_context_append(context, (guchar *)":", 1);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1658 purple_cipher_context_append(context, (guchar *)digest_uri, strlen(digest_uri));
12382
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1659
17155
143ff2796376 Replace strcasecmp() calls with glib equivalents.
Richard Laager <rlaager@pidgin.im>
parents: 17065
diff changeset
1660 if (qop != NULL && !g_ascii_strcasecmp(qop, "auth-int"))
12382
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1661 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1662 PurpleCipherContext *context2;
12389
7196ba664097 [gaim-migrate @ 14695]
Richard Laager <rlaager@pidgin.im>
parents: 12388
diff changeset
1663 gchar entity_hash[33];
7196ba664097 [gaim-migrate @ 14695]
Richard Laager <rlaager@pidgin.im>
parents: 12388
diff changeset
1664
7196ba664097 [gaim-migrate @ 14695]
Richard Laager <rlaager@pidgin.im>
parents: 12388
diff changeset
1665 if (entity == NULL)
12382
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1666 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1667 purple_cipher_context_destroy(context);
19832
84b69b21672b Patch from QuLogic. Fixes #2903 ('Missing newlines in debug messages.')
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17435
diff changeset
1668 purple_debug_error("cipher", "Required entity missing for auth-int digest calculation.\n");
12382
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1669 return NULL;
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1670 }
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1671
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1672 context2 = purple_cipher_context_new(cipher, NULL);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1673 purple_cipher_context_append(context2, (guchar *)entity, strlen(entity));
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1674 purple_cipher_context_digest_to_str(context2, sizeof(entity_hash), entity_hash, NULL);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1675 purple_cipher_context_destroy(context2);
12389
7196ba664097 [gaim-migrate @ 14695]
Richard Laager <rlaager@pidgin.im>
parents: 12388
diff changeset
1676
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1677 purple_cipher_context_append(context, (guchar *)":", 1);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1678 purple_cipher_context_append(context, (guchar *)entity_hash, strlen(entity_hash));
12382
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1679 }
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1680
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1681 purple_cipher_context_digest_to_str(context, sizeof(hash2), hash2, NULL);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1682 purple_cipher_context_destroy(context);
12382
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1683
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1684 context = purple_cipher_context_new(cipher, NULL);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1685 purple_cipher_context_append(context, (guchar *)session_key, strlen(session_key));
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1686 purple_cipher_context_append(context, (guchar *)":", 1);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1687 purple_cipher_context_append(context, (guchar *)nonce, strlen(nonce));
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1688 purple_cipher_context_append(context, (guchar *)":", 1);
12382
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1689
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1690 if (qop != NULL && *qop != '\0')
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1691 {
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1692 if (nonce_count == NULL)
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1693 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1694 purple_cipher_context_destroy(context);
19832
84b69b21672b Patch from QuLogic. Fixes #2903 ('Missing newlines in debug messages.')
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17435
diff changeset
1695 purple_debug_error("cipher", "Required nonce_count missing for digest calculation.\n");
12382
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1696 return NULL;
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1697 }
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1698
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1699 if (client_nonce == NULL)
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1700 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1701 purple_cipher_context_destroy(context);
19832
84b69b21672b Patch from QuLogic. Fixes #2903 ('Missing newlines in debug messages.')
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17435
diff changeset
1702 purple_debug_error("cipher", "Required client_nonce missing for digest calculation.\n");
12382
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1703 return NULL;
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1704 }
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1705
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1706 purple_cipher_context_append(context, (guchar *)nonce_count, strlen(nonce_count));
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1707 purple_cipher_context_append(context, (guchar *)":", 1);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1708 purple_cipher_context_append(context, (guchar *)client_nonce, strlen(client_nonce));
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1709 purple_cipher_context_append(context, (guchar *)":", 1);
12382
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1710
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1711 purple_cipher_context_append(context, (guchar *)qop, strlen(qop));
12382
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1712
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1713 purple_cipher_context_append(context, (guchar *)":", 1);
12382
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1714 }
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1715
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1716 purple_cipher_context_append(context, (guchar *)hash2, strlen(hash2));
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1717 purple_cipher_context_digest_to_str(context, sizeof(hash2), hash2, NULL);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1718 purple_cipher_context_destroy(context);
12382
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1719
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1720 return g_strdup(hash2);
5ef67596b420 [gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents: 11677
diff changeset
1721 }

mercurial