Mercurial > pidgin
diff libpurple/tests/test_cipher.c @ 27308:fc5508709e74
Use glib's SHA1, SHA256, and MD5 implementations when available (glib 2.16)
These SHA1 and SHA256 implementations do not expose any options, which
the built-in ones do (for getting/setting sizeHi, sizeLo, and lenW).
Nothing in Pidgin uses those (and I can't think of a decent use case),
so I think this is OK. Feel free to disagree.
As I mentioned on the mailing list, glib's SHA1 implementation was just
under 3x as fast on my system.
| author | Paul Aurich <paul@darkrain42.org> |
|---|---|
| date | Sat, 04 Jul 2009 23:13:23 +0000 |
| parents | fae699fece1f |
| children | c76eb1c6f6ac |
line wrap: on
line diff
--- a/libpurple/tests/test_cipher.c Sat Jul 04 22:27:37 2009 +0000 +++ b/libpurple/tests/test_cipher.c Sat Jul 04 23:13:23 2009 +0000 @@ -168,6 +168,11 @@ purple_cipher_context_destroy(context); \ } +START_TEST(test_sha1_empty_string) { + SHA1_TEST("", "da39a3ee5e6b4b0d3255bfef95601890afd80709"); +} +END_TEST + START_TEST(test_sha1_a) { SHA1_TEST("a", "86f7e437faa5a7fce15d1ddcb9eaeaea377667b8"); } @@ -190,6 +195,66 @@ END_TEST /****************************************************************************** + * SHA-256 Tests + *****************************************************************************/ +#define SHA256_TEST(data, digest) { \ + PurpleCipher *cipher = NULL; \ + PurpleCipherContext *context = NULL; \ + gchar cdigest[65]; \ + gboolean ret = FALSE; \ + \ + cipher = purple_ciphers_find_cipher("sha256"); \ + context = purple_cipher_context_new(cipher, NULL); \ + \ + if((data)) { \ + purple_cipher_context_append(context, (guchar *)(data), strlen((data))); \ + } else { \ + gint j; \ + guchar buff[1000]; \ + \ + memset(buff, 'a', 1000); \ + \ + for(j = 0; j < 1000; j++) \ + purple_cipher_context_append(context, buff, 1000); \ + } \ + \ + ret = purple_cipher_context_digest_to_str(context, sizeof(cdigest), cdigest, \ + NULL); \ + \ + fail_unless(ret == TRUE, NULL); \ + \ + fail_unless(strcmp((digest), cdigest) == 0, NULL); \ + \ + purple_cipher_context_destroy(context); \ +} + +START_TEST(test_sha256_empty_string) { + SHA256_TEST("", "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"); +} +END_TEST + +START_TEST(test_sha256_a) { + SHA256_TEST("a", "ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb"); +} +END_TEST + +START_TEST(test_sha256_abc) { + SHA256_TEST("abc", "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"); +} +END_TEST + +START_TEST(test_sha256_abcd_gibberish) { + SHA256_TEST("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", + "248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1"); +} +END_TEST + +START_TEST(test_sha256_1000_as_1000_times) { + SHA256_TEST(NULL, "cdc76e5c9914fb9281a1c7e284d73e67f1809a48a497200e046d39ccc7112cd0"); +} +END_TEST + +/****************************************************************************** * DES Tests *****************************************************************************/ #define DES_TEST(in, keyz, out, len) { \ @@ -726,12 +791,22 @@ /* sha1 tests */ tc = tcase_create("SHA1"); + tcase_add_test(tc, test_sha1_empty_string); tcase_add_test(tc, test_sha1_a); tcase_add_test(tc, test_sha1_abc); tcase_add_test(tc, test_sha1_abcd_gibberish); tcase_add_test(tc, test_sha1_1000_as_1000_times); suite_add_tcase(s, tc); + /* sha256 tests */ + tc = tcase_create("SHA256"); + tcase_add_test(tc, test_sha256_empty_string); + tcase_add_test(tc, test_sha256_a); + tcase_add_test(tc, test_sha256_abc); + tcase_add_test(tc, test_sha256_abcd_gibberish); + tcase_add_test(tc, test_sha256_1000_as_1000_times); + suite_add_tcase(s, tc); + /* des tests */ tc = tcase_create("DES"); tcase_add_test(tc, test_des_12345678);
