diff libpurple/plugins/ciphertest.c @ 15374:5fe8042783c1

Rename gtk/ and libgaim/ to pidgin/ and libpurple/
author Sean Egan <seanegan@gmail.com>
date Sat, 20 Jan 2007 02:32:10 +0000
parents
children 42961709cb30
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/plugins/ciphertest.c	Sat Jan 20 02:32:10 2007 +0000
@@ -0,0 +1,287 @@
+/*
+ * A plugin to test the ciphers that ship with gaim
+ *
+ * Copyright (C) 2004, Gary Kramlich <amc_grim@users.sf.net>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifndef GAIM_PLUGINS
+#define GAIM_PLUGINS
+#endif
+
+#include "internal.h"
+
+#include <glib.h>
+#include <string.h>
+
+#include "cipher.h"
+#include "debug.h"
+#include "plugin.h"
+#include "version.h"
+
+struct test {
+	const gchar *question;
+	const gchar *answer;
+};
+
+/**************************************************************************
+ * MD5 Stuff
+ **************************************************************************/
+struct test md5_tests[8] = {
+	{							"",	"d41d8cd98f00b204e9800998ecf8427e"},
+	{						   "a",	"0cc175b9c0f1b6a831c399e269772661"},
+	{						 "abc",	"900150983cd24fb0d6963f7d28e17f72"},
+	{			  "message digest",	"f96b697d7cb7938d525a2f31aaf161d0"},
+	{ "abcdefghijklmnopqrstuvwxyz",	"c3fcd3d76192e4007dfb496cca67e13b"},
+	{ "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+	  "abcdefghijklmnopqrstuvwxyz"
+					  "0123456789",	"d174ab98d277d9f5a5611c2c9f419d9f"},
+	{"123456789012345678901234567"
+	 "890123456789012345678901234"
+	  "56789012345678901234567890",	"57edf4a22be3c955ac49da2e2107b67a"},
+	{						  NULL, NULL							  }
+};
+
+static void
+cipher_test_md5() {
+	GaimCipher *cipher;
+	GaimCipherContext *context;
+	gchar digest[33];
+	gboolean ret;
+	gint i = 0;
+
+	cipher = gaim_ciphers_find_cipher("md5");
+	if(!cipher) {
+		gaim_debug_info("cipher-test",
+						"could not find md5 cipher, not testing\n");
+		return;
+	}
+
+	gaim_debug_info("cipher-test", "Running md5 tests\n");
+
+	context = gaim_cipher_context_new(cipher, NULL);
+
+	while(md5_tests[i].answer) {
+		gaim_debug_info("cipher-test", "Test %02d:\n", i);
+		gaim_debug_info("cipher-test", "Testing '%s'\n", md5_tests[i].question);
+
+		gaim_cipher_context_append(context, (guchar *)md5_tests[i].question,
+								   strlen(md5_tests[i].question));
+
+		ret = gaim_cipher_context_digest_to_str(context, sizeof(digest),
+												digest, NULL);
+
+		if(!ret) {
+			gaim_debug_info("cipher-test", "failed\n");
+		} else {
+			gaim_debug_info("cipher-test", "\tGot:    %s\n", digest);
+			gaim_debug_info("cipher-test", "\tWanted: %s\n",
+							md5_tests[i].answer);
+		}
+
+		gaim_cipher_context_reset(context, NULL);
+		i++;
+	}
+
+	gaim_cipher_context_destroy(context);
+
+	gaim_debug_info("cipher-test", "md5 tests completed\n\n");
+}
+
+/**************************************************************************
+ * SHA-1 stuff
+ **************************************************************************/
+struct test sha1_tests[5] = {
+	{"a", "86f7e437faa5a7fce15d1ddcb9eaeaea377667b8"},
+	{"abc", "a9993e364706816aba3e25717850c26c9cd0d89d"} ,
+	{"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", "84983e441c3bd26ebaae4aa1f95129e5e54670f1"} ,
+    {NULL, "34aa973cd4c4daa4f61eeb2bdbad27316534016f"},
+	{NULL, NULL}
+};
+
+static void
+cipher_test_sha1() {
+	GaimCipher *cipher;
+	GaimCipherContext *context;
+	gchar digest[41];
+	gint i = 0;
+	gboolean ret;
+
+	cipher = gaim_ciphers_find_cipher("sha1");
+	if(!cipher) {
+		gaim_debug_info("cipher-test",
+						"could not find sha1 cipher, not testing\n");
+		return;
+	}
+
+	gaim_debug_info("cipher-test", "Running sha1 tests\n");
+
+	context = gaim_cipher_context_new(cipher, NULL);
+
+	while(sha1_tests[i].answer) {
+		gaim_debug_info("cipher-test", "Test %02d:\n", i);
+		gaim_debug_info("cipher-test", "Testing '%s'\n",
+						(sha1_tests[i].question != NULL) ?
+						sha1_tests[i].question : "'a'x1000, 1000 times");
+
+		if(sha1_tests[i].question) {
+			gaim_cipher_context_append(context, (guchar *)sha1_tests[i].question,
+									   strlen(sha1_tests[i].question));
+		} else {
+			gint j;
+			guchar buff[1000];
+
+			memset(buff, 'a', 1000);
+
+			for(j = 0; j < 1000; j++)
+				gaim_cipher_context_append(context, buff, 1000);
+		}
+
+		ret = gaim_cipher_context_digest_to_str(context, sizeof(digest),
+												digest, NULL);
+
+		if(!ret) {
+			gaim_debug_info("cipher-test", "failed\n");
+		} else {
+			gaim_debug_info("cipher-test", "\tGot:    %s\n", digest);
+			gaim_debug_info("cipher-test", "\tWanted: %s\n",
+							sha1_tests[i].answer);
+		}
+
+		gaim_cipher_context_reset(context, NULL);
+		i++;
+	}
+
+	gaim_cipher_context_destroy(context);
+
+	gaim_debug_info("cipher-test", "sha1 tests completed\n\n");
+}
+
+static void
+cipher_test_digest()
+{
+	const gchar *nonce = "dcd98b7102dd2f0e8b11d0f600bfb0c093";
+	const gchar *client_nonce = "0a4f113b";
+	const gchar *username = "Mufasa";
+	const gchar *realm = "testrealm@host.com";
+	const gchar *password = "Circle Of Life";
+	const gchar *algorithm = "md5";
+	const gchar *nonce_count = "00000001";
+	const gchar *method = "GET";
+	const gchar *qop = "auth";
+	const gchar *digest_uri = "/dir/index.html";
+	const gchar *entity = NULL;
+
+	gchar *session_key;
+
+	gaim_debug_info("cipher-test", "Running HTTP Digest tests\n");
+
+	session_key = gaim_cipher_http_digest_calculate_session_key(
+						algorithm, username, realm, password,
+						nonce, client_nonce);
+
+	if (session_key == NULL)
+	{
+		gaim_debug_info("cipher-test",
+						"gaim_cipher_http_digest_calculate_session_key failed.\n");
+	}
+	else
+	{
+		gchar *response;
+
+		gaim_debug_info("cipher-test", "\tsession_key: Got:    %s\n", session_key);
+		gaim_debug_info("cipher-test", "\tsession_key: Wanted: %s\n", "939e7578ed9e3c518a452acee763bce9");
+
+		response = gaim_cipher_http_digest_calculate_response(
+				algorithm, method, digest_uri, qop, entity,
+				nonce, nonce_count, client_nonce, session_key);
+
+		g_free(session_key);
+
+		if (response == NULL)
+		{
+			gaim_debug_info("cipher-test",
+							"gaim_cipher_http_digest_calculate_session_key failed.\n");
+		}
+		else
+		{
+			gaim_debug_info("cipher-test", "\tresponse: Got:    %s\n", response);
+			gaim_debug_info("cipher-test", "\tresponse: Wanted: %s\n", "6629fae49393a05397450978507c4ef1");
+			g_free(response);
+		}
+	}
+
+	gaim_debug_info("cipher-test", "HTTP Digest tests completed\n\n");
+}
+
+/**************************************************************************
+ * Plugin stuff
+ **************************************************************************/
+static gboolean
+plugin_load(GaimPlugin *plugin) {
+	cipher_test_md5();
+	cipher_test_sha1();
+	cipher_test_digest();
+
+	return TRUE;
+}
+
+static gboolean
+plugin_unload(GaimPlugin *plugin) {
+	return TRUE;
+}
+
+static GaimPluginInfo info =
+{
+	GAIM_PLUGIN_MAGIC,
+	GAIM_MAJOR_VERSION,
+	GAIM_MINOR_VERSION,
+	GAIM_PLUGIN_STANDARD,								/**< type           */
+	NULL,												/**< ui_requirement */
+	0,													/**< flags          */
+	NULL,												/**< dependencies   */
+	GAIM_PRIORITY_DEFAULT,								/**< priority       */
+
+	"core-cipher-test",									/**< id             */
+	N_("Cipher Test"),									/**< name           */
+	VERSION,											/**< version        */
+														/**  summary        */
+	N_("Tests the ciphers that ship with gaim."),
+														/**  description    */
+	N_("Tests the ciphers that ship with gaim."),
+	"Gary Kramlich <amc_grim@users.sf.net>",			/**< author         */
+	GAIM_WEBSITE,										/**< homepage       */
+
+	plugin_load,										/**< load           */
+	plugin_unload,										/**< unload         */
+	NULL,												/**< destroy        */
+
+	NULL,												/**< ui_info        */
+	NULL,												/**< extra_info     */
+	NULL,
+	NULL
+};
+
+static void
+init_plugin(GaimPlugin *plugin) {
+}
+
+GAIM_INIT_PLUGIN(cipher_test, init_plugin, info)