Tue, 28 Jun 2005 06:13:07 +0000
[gaim-migrate @ 12919]
Ok, this is debug window filtering. Sadrul was going to do this with a text entry, but I like this better, feel free to disagree with me. It's not the prettiest in a couple places, most notable gtkmain.c where a bunch of categories that don't currently have a home get registered. I added some plugin_(un)load functions to some plugins to place the (un)register functions. Though I didn't do that for the prpls. Comments and cleanups welcome. (Oh, I've been seeing some crashes on quit, but I haven't been able to get it to happen reliably so I'm not sure if it's my code or some transient HEAD oscar/other crash.)
| 10684 | 1 | /* |
| 2 | * A plugin to test the ciphers that ship with gaim | |
| 3 | * | |
| 4 | * Copyright (C) 2004, Gary Kramlich <amc_grim@users.sf.net> | |
| 5 | * | |
| 6 | * This program is free software; you can redistribute it and/or | |
| 7 | * modify it under the terms of the GNU General Public License as | |
| 8 | * published by the Free Software Foundation; either version 2 of the | |
| 9 | * License, or (at your option) any later version. | |
| 10 | * | |
| 11 | * This program is distributed in the hope that it will be useful, but | |
| 12 | * WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| 14 | * General Public License for more details. | |
| 15 | * | |
| 16 | * You should have received a copy of the GNU General Public License | |
| 17 | * along with this program; if not, write to the Free Software | |
| 18 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA | |
| 19 | * 02111-1307, USA. | |
| 20 | */ | |
| 21 | ||
| 22 | #ifdef HAVE_CONFIG_H | |
| 23 | #include <config.h> | |
| 24 | #endif | |
| 25 | ||
| 26 | #ifndef GAIM_PLUGINS | |
| 27 | #define GAIM_PLUGINS | |
| 28 | #endif | |
| 29 | ||
| 30 | #include "internal.h" | |
| 31 | ||
| 32 | #include <glib.h> | |
| 33 | #include <string.h> | |
| 34 | ||
| 35 | #include "cipher.h" | |
| 36 | #include "debug.h" | |
| 37 | #include "plugin.h" | |
| 38 | #include "version.h" | |
| 39 | ||
| 40 | struct test { | |
| 41 | const guint8 *question; | |
| 42 | const guint8 *answer; | |
| 43 | }; | |
| 44 | ||
| 45 | /************************************************************************** | |
| 46 | * MD5 Stuff | |
| 47 | **************************************************************************/ | |
| 48 | struct test md5_tests[8] = { | |
| 49 | { "", "d41d8cd98f00b204e9800998ecf8427e"}, | |
| 50 | { "a", "0cc175b9c0f1b6a831c399e269772661"}, | |
| 51 | { "abc", "900150983cd24fb0d6963f7d28e17f72"}, | |
| 52 | { "message digest", "f96b697d7cb7938d525a2f31aaf161d0"}, | |
| 53 | { "abcdefghijklmnopqrstuvwxyz", "c3fcd3d76192e4007dfb496cca67e13b"}, | |
| 54 | { "ABCDEFGHIJKLMNOPQRSTUVWXYZ" | |
| 55 | "abcdefghijklmnopqrstuvwxyz" | |
| 56 | "0123456789", "d174ab98d277d9f5a5611c2c9f419d9f"}, | |
| 57 | {"123456789012345678901234567" | |
| 58 | "890123456789012345678901234" | |
| 59 | "56789012345678901234567890", "57edf4a22be3c955ac49da2e2107b67a"}, | |
| 60 | { NULL, NULL } | |
| 61 | }; | |
| 62 | ||
| 63 | static void | |
| 64 | cipher_test_md5() { | |
| 65 | GaimCipher *cipher; | |
| 66 | GaimCipherContext *context; | |
| 67 | gchar digest[32]; | |
| 10687 | 68 | gboolean ret; |
| 10684 | 69 | gint i = 0; |
| 70 | ||
| 71 | cipher = gaim_ciphers_find_cipher("md5"); | |
| 72 | if(!cipher) { | |
| 73 | gaim_debug_info("cipher-test", | |
| 74 | "could not find md5 cipher, not testing\n"); | |
| 75 | return; | |
| 76 | } | |
| 77 | ||
| 78 | gaim_debug_info("cipher-test", "Running md5 tests\n"); | |
| 79 | ||
| 80 | context = gaim_cipher_context_new(cipher, NULL); | |
| 81 | ||
| 82 | while(md5_tests[i].answer) { | |
| 83 | gaim_debug_info("cipher-test", "Test %02d:\n", i); | |
| 84 | gaim_debug_info("cipher-test", "Testing '%s'\n", md5_tests[i].question); | |
| 85 | ||
| 86 | gaim_cipher_context_append(context, md5_tests[i].question, | |
| 87 | strlen(md5_tests[i].question)); | |
| 88 | ||
| 10687 | 89 | ret = gaim_cipher_context_digest_to_str(context, sizeof(digest), |
| 90 | digest, NULL); | |
| 10684 | 91 | |
| 10687 | 92 | if(!ret) { |
| 93 | gaim_debug_info("cipher-test", "failed\n"); | |
| 94 | } else { | |
| 95 | gaim_debug_info("cipher-test", "\tGot: %s\n", digest); | |
| 96 | gaim_debug_info("cipher-test", "\tWanted: %s\n", | |
| 97 | md5_tests[i].answer); | |
| 98 | } | |
| 10684 | 99 | |
| 100 | gaim_cipher_context_reset(context, NULL); | |
| 101 | i++; | |
| 102 | } | |
| 103 | ||
| 104 | gaim_cipher_context_destroy(context); | |
| 105 | ||
| 106 | gaim_debug_info("cipher-test", "md5 tests completed\n\n"); | |
| 107 | } | |
| 108 | ||
| 109 | /************************************************************************** | |
| 110 | * SHA-1 stuff | |
| 111 | **************************************************************************/ | |
| 112 | struct test sha1_tests[5] = { | |
| 113 | {"a", "86f7e437faa5a7fce15d1ddcb9eaeaea377667b8"}, | |
| 114 | {"abc", "a9993e364706816aba3e25717850c26c9cd0d89d"} , | |
| 115 | {"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", "84983e441c3bd26ebaae4aa1f95129e5e54670f1"} , | |
| 116 | {NULL, "34aa973cd4c4daa4f61eeb2bdbad27316534016f"}, | |
| 117 | {NULL, NULL} | |
| 118 | }; | |
| 119 | ||
| 120 | static void | |
| 121 | cipher_test_sha1() { | |
| 122 | GaimCipher *cipher; | |
| 123 | GaimCipherContext *context; | |
| 124 | gchar digest[40]; | |
| 125 | gint i = 0; | |
| 10687 | 126 | gboolean ret; |
| 10684 | 127 | |
| 128 | cipher = gaim_ciphers_find_cipher("sha1"); | |
| 129 | if(!cipher) { | |
| 130 | gaim_debug_info("cipher-test", | |
| 131 | "could not find sha1 cipher, not testing\n"); | |
| 132 | return; | |
| 133 | } | |
| 134 | ||
| 135 | gaim_debug_info("cipher-test", "Running sha1 tests\n"); | |
| 136 | ||
| 137 | context = gaim_cipher_context_new(cipher, NULL); | |
| 138 | ||
| 139 | while(sha1_tests[i].answer) { | |
| 140 | gaim_debug_info("cipher-test", "Test %02d:\n", i); | |
| 141 | gaim_debug_info("cipher-test", "Testing '%s'\n", | |
| 142 | (sha1_tests[i].question != NULL) ? | |
| 143 | sha1_tests[i].question : "'a'x1000, 1000 times"); | |
| 144 | ||
| 145 | if(sha1_tests[i].question) { | |
| 146 | gaim_cipher_context_append(context, sha1_tests[i].question, | |
| 147 | strlen(sha1_tests[i].question)); | |
| 148 | } else { | |
| 149 | gint j; | |
| 150 | guint8 buff[1000]; | |
| 151 | ||
| 152 | memset(buff, 'a', 1000); | |
| 153 | ||
| 154 | for(j = 0; j < 1000; j++) | |
| 155 | gaim_cipher_context_append(context, buff, 1000); | |
| 156 | } | |
| 157 | ||
| 10687 | 158 | ret = gaim_cipher_context_digest_to_str(context, sizeof(digest), |
| 159 | digest, NULL); | |
| 10684 | 160 | |
| 10687 | 161 | if(!ret) { |
| 162 | gaim_debug_info("cipher-test", "failed\n"); | |
| 163 | } else { | |
| 164 | gaim_debug_info("cipher-test", "\tGot: %s\n", digest); | |
| 165 | gaim_debug_info("cipher-test", "\tWanted: %s\n", | |
| 166 | sha1_tests[i].answer); | |
| 167 | } | |
| 10684 | 168 | |
| 169 | gaim_cipher_context_reset(context, NULL); | |
| 170 | i++; | |
| 171 | } | |
| 172 | ||
| 173 | gaim_cipher_context_destroy(context); | |
| 174 | ||
| 175 | gaim_debug_info("cipher-test", "sha1 tests completed\n\n"); | |
| 176 | } | |
| 177 | /************************************************************************** | |
| 178 | * Plugin stuff | |
| 179 | **************************************************************************/ | |
| 180 | static gboolean | |
| 181 | plugin_load(GaimPlugin *plugin) { | |
| 11033 | 182 | gaim_debug_register_category("cipher-test"); |
| 183 | ||
| 10684 | 184 | cipher_test_md5(); |
| 185 | cipher_test_sha1(); | |
| 186 | ||
| 187 | return TRUE; | |
| 188 | } | |
| 189 | ||
| 11033 | 190 | static gboolean |
| 191 | plugin_unload(GaimPlugin *plugin) { | |
| 192 | gaim_debug_unregister_category("cipher-test"); | |
| 193 | ||
| 194 | return TRUE; | |
| 195 | } | |
| 196 | ||
| 10684 | 197 | static GaimPluginInfo info = |
| 198 | { | |
| 199 | GAIM_PLUGIN_MAGIC, | |
| 200 | GAIM_MAJOR_VERSION, | |
| 201 | GAIM_MINOR_VERSION, | |
| 202 | GAIM_PLUGIN_STANDARD, /**< type */ | |
| 203 | NULL, /**< ui_requirement */ | |
| 204 | 0, /**< flags */ | |
| 205 | NULL, /**< dependencies */ | |
| 206 | GAIM_PRIORITY_DEFAULT, /**< priority */ | |
| 207 | ||
| 208 | "core-cipher-test", /**< id */ | |
| 209 | N_("Cipher Test"), /**< name */ | |
| 210 | VERSION, /**< version */ | |
| 211 | /** summary */ | |
| 212 | N_("Tests the ciphers that ship with gaim."), | |
| 213 | /** description */ | |
| 214 | N_("Tests the ciphers that ship with gaim."), | |
| 215 | "Gary Kramlich <amc_grim@users.sf.net>", /**< author */ | |
| 216 | GAIM_WEBSITE, /**< homepage */ | |
| 217 | ||
| 218 | plugin_load, /**< load */ | |
| 11033 | 219 | plugin_unload, /**< unload */ |
| 10684 | 220 | NULL, /**< destroy */ |
| 221 | ||
| 222 | NULL, /**< ui_info */ | |
| 223 | NULL, /**< extra_info */ | |
| 224 | NULL, | |
| 225 | NULL | |
| 226 | }; | |
| 227 | ||
| 228 | static void | |
| 229 | init_plugin(GaimPlugin *plugin) { | |
| 230 | } | |
| 231 | ||
| 232 | GAIM_INIT_PLUGIN(ciper_test, init_plugin, info) |