libpurple/tests/test_des.c

changeset 37597
c92c6f818320
child 38057
41f47eb1aa19
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/tests/test_des.c	Thu Mar 10 20:54:09 2016 -0600
@@ -0,0 +1,69 @@
+#include <glib.h>
+
+#include <purple.h>
+
+#include "ciphers/descipher.h"
+
+static void
+test_des_cipher(const gchar *in, const gchar *key, const gchar *out, size_t len) {
+	PurpleCipher *cipher = NULL;
+	guchar *decrypt = NULL, *encrypt = NULL, *answer = NULL;
+	size_t ret = 0;
+
+	decrypt = g_memdup(in, len + 1);
+	encrypt = g_memdup(out, len + 1);
+
+	cipher = purple_des_cipher_new();
+
+	purple_cipher_set_key(cipher, (const guchar *)key, 8);
+
+	answer = g_new0(guchar, len + 1);
+	ret = purple_cipher_encrypt(cipher, decrypt, len, answer, len);
+	g_assert(ret == len);
+	g_assert_cmpmem(encrypt, len, answer, len);
+	g_free(answer);
+
+	answer = g_new0(guchar, len + 1);
+	ret = purple_cipher_decrypt(cipher, encrypt, len, answer, len);
+	g_assert(ret == len);
+	g_assert_cmpmem(decrypt, len, answer, len);
+	g_free(answer);
+
+	g_free(encrypt);
+	g_free(decrypt);
+
+	g_object_unref(G_OBJECT(cipher));
+}
+
+static void
+test_des_cipher_12345678(void) {
+	test_des_cipher(
+		"12345678",
+		"\x3b\x38\x98\x37\x15\x20\xf7\x5e",
+		"\x06\x22\x05\xac\x6a\x0d\x55\xdd",
+		8
+	);
+}
+
+static void
+test_des_cipher_abcdefgh(void) {
+	test_des_cipher(
+		"abcdefgh",
+		"\x3b\x38\x98\x37\x15\x20\xf7\x5e",
+		"\x62\xe0\xc6\x8c\x48\xe4\x75\xed",
+		8
+	);
+}
+
+gint
+main(gint argc, gchar **argv) {
+	g_test_init(&argc, &argv, NULL);
+
+	g_test_add_func("/cipher/des/12345678",
+	                test_des_cipher_12345678);
+
+	g_test_add_func("/cipher/des/abcdefgh",
+	                test_des_cipher_abcdefgh);
+
+	return g_test_run();
+}

mercurial