libpurple/tests/test_jabber_scram.c

Wed, 11 Nov 2009 20:32:09 +0000

author
Paul Aurich <darkrain42@pidgin.im>
date
Wed, 11 Nov 2009 20:32:09 +0000
branch
cpw.darkrain42.xmpp.scram
changeset 28868
7415cb6c4587
parent 28866
e3d867ce000b
child 28926
a737800d1445
permissions
-rw-r--r--

jabber: Handle the case where the server success-with-data is sent as a challenge/response pair.

This should also make it easier to feed C/R pairs via the tester.

28863
b4e8c372e06b Fix the Hi() function and actually 'mtn add' the test file.
Paul Aurich <darkrain42@pidgin.im>
parents:
diff changeset
1 #include <string.h>
b4e8c372e06b Fix the Hi() function and actually 'mtn add' the test file.
Paul Aurich <darkrain42@pidgin.im>
parents:
diff changeset
2
b4e8c372e06b Fix the Hi() function and actually 'mtn add' the test file.
Paul Aurich <darkrain42@pidgin.im>
parents:
diff changeset
3 #include "tests.h"
b4e8c372e06b Fix the Hi() function and actually 'mtn add' the test file.
Paul Aurich <darkrain42@pidgin.im>
parents:
diff changeset
4 #include "../util.h"
b4e8c372e06b Fix the Hi() function and actually 'mtn add' the test file.
Paul Aurich <darkrain42@pidgin.im>
parents:
diff changeset
5 #include "../protocols/jabber/auth_scram.h"
b4e8c372e06b Fix the Hi() function and actually 'mtn add' the test file.
Paul Aurich <darkrain42@pidgin.im>
parents:
diff changeset
6
28866
e3d867ce000b jabber: Complete (though untested) SCRAM implementation.
Paul Aurich <darkrain42@pidgin.im>
parents: 28863
diff changeset
7 static JabberSaslMech *scram_sha1_mech = NULL;
e3d867ce000b jabber: Complete (though untested) SCRAM implementation.
Paul Aurich <darkrain42@pidgin.im>
parents: 28863
diff changeset
8
28863
b4e8c372e06b Fix the Hi() function and actually 'mtn add' the test file.
Paul Aurich <darkrain42@pidgin.im>
parents:
diff changeset
9 #define assert_pbkdf2_equal(password, salt, count, expected) { \
b4e8c372e06b Fix the Hi() function and actually 'mtn add' the test file.
Paul Aurich <darkrain42@pidgin.im>
parents:
diff changeset
10 GString *p = g_string_new(password); \
b4e8c372e06b Fix the Hi() function and actually 'mtn add' the test file.
Paul Aurich <darkrain42@pidgin.im>
parents:
diff changeset
11 GString *s = g_string_new(salt); \
28866
e3d867ce000b jabber: Complete (though untested) SCRAM implementation.
Paul Aurich <darkrain42@pidgin.im>
parents: 28863
diff changeset
12 guchar *result = jabber_scram_hi("sha1", p, s, count); \
28863
b4e8c372e06b Fix the Hi() function and actually 'mtn add' the test file.
Paul Aurich <darkrain42@pidgin.im>
parents:
diff changeset
13 fail_if(result == NULL, "Hi() returned NULL"); \
28866
e3d867ce000b jabber: Complete (though untested) SCRAM implementation.
Paul Aurich <darkrain42@pidgin.im>
parents: 28863
diff changeset
14 fail_if(0 != memcmp(result, expected, 20), "Hi() returned invalid result"); \
28863
b4e8c372e06b Fix the Hi() function and actually 'mtn add' the test file.
Paul Aurich <darkrain42@pidgin.im>
parents:
diff changeset
15 g_string_free(s, TRUE); \
b4e8c372e06b Fix the Hi() function and actually 'mtn add' the test file.
Paul Aurich <darkrain42@pidgin.im>
parents:
diff changeset
16 g_string_free(p, TRUE); \
b4e8c372e06b Fix the Hi() function and actually 'mtn add' the test file.
Paul Aurich <darkrain42@pidgin.im>
parents:
diff changeset
17 }
b4e8c372e06b Fix the Hi() function and actually 'mtn add' the test file.
Paul Aurich <darkrain42@pidgin.im>
parents:
diff changeset
18
b4e8c372e06b Fix the Hi() function and actually 'mtn add' the test file.
Paul Aurich <darkrain42@pidgin.im>
parents:
diff changeset
19 START_TEST(test_pbkdf2)
b4e8c372e06b Fix the Hi() function and actually 'mtn add' the test file.
Paul Aurich <darkrain42@pidgin.im>
parents:
diff changeset
20 {
b4e8c372e06b Fix the Hi() function and actually 'mtn add' the test file.
Paul Aurich <darkrain42@pidgin.im>
parents:
diff changeset
21 assert_pbkdf2_equal("password", "salt", 1, "\x0c\x60\xc8\x0f\x96\x1f\x0e\x71\xf3\xa9\xb5\x24\xaf\x60\x12\x06\x2f\xe0\x37\xa6");
b4e8c372e06b Fix the Hi() function and actually 'mtn add' the test file.
Paul Aurich <darkrain42@pidgin.im>
parents:
diff changeset
22 assert_pbkdf2_equal("password", "salt", 2, "\xea\x6c\x01\x4d\xc7\x2d\x6f\x8c\xcd\x1e\xd9\x2a\xce\x1d\x41\xf0\xd8\xde\x89\x57");
b4e8c372e06b Fix the Hi() function and actually 'mtn add' the test file.
Paul Aurich <darkrain42@pidgin.im>
parents:
diff changeset
23 assert_pbkdf2_equal("password", "salt", 4096, "\x4b\x00\x79\x01\xb7\x65\x48\x9a\xbe\xad\x49\xd9\x26\xf7\x21\xd0\x65\xa4\x29\xc1");
b4e8c372e06b Fix the Hi() function and actually 'mtn add' the test file.
Paul Aurich <darkrain42@pidgin.im>
parents:
diff changeset
24
b4e8c372e06b Fix the Hi() function and actually 'mtn add' the test file.
Paul Aurich <darkrain42@pidgin.im>
parents:
diff changeset
25 #if 0
b4e8c372e06b Fix the Hi() function and actually 'mtn add' the test file.
Paul Aurich <darkrain42@pidgin.im>
parents:
diff changeset
26 /* This causes libcheck to time out :-D */
b4e8c372e06b Fix the Hi() function and actually 'mtn add' the test file.
Paul Aurich <darkrain42@pidgin.im>
parents:
diff changeset
27 assert_pbkdf2_equal("password", "salt", 16777216, "\xee\xfe\x3d\x61\xcd\x4d\xa4\xe4\xe9\x94\x5b\x3d\x6b\xa2\x15\x8c\x26\x34\xe9\x84");
b4e8c372e06b Fix the Hi() function and actually 'mtn add' the test file.
Paul Aurich <darkrain42@pidgin.im>
parents:
diff changeset
28 #endif
b4e8c372e06b Fix the Hi() function and actually 'mtn add' the test file.
Paul Aurich <darkrain42@pidgin.im>
parents:
diff changeset
29 }
b4e8c372e06b Fix the Hi() function and actually 'mtn add' the test file.
Paul Aurich <darkrain42@pidgin.im>
parents:
diff changeset
30 END_TEST
b4e8c372e06b Fix the Hi() function and actually 'mtn add' the test file.
Paul Aurich <darkrain42@pidgin.im>
parents:
diff changeset
31
28866
e3d867ce000b jabber: Complete (though untested) SCRAM implementation.
Paul Aurich <darkrain42@pidgin.im>
parents: 28863
diff changeset
32 START_TEST(test_proofs)
e3d867ce000b jabber: Complete (though untested) SCRAM implementation.
Paul Aurich <darkrain42@pidgin.im>
parents: 28863
diff changeset
33 {
e3d867ce000b jabber: Complete (though untested) SCRAM implementation.
Paul Aurich <darkrain42@pidgin.im>
parents: 28863
diff changeset
34 JabberScramData *data = g_new0(JabberScramData, 1);
e3d867ce000b jabber: Complete (though untested) SCRAM implementation.
Paul Aurich <darkrain42@pidgin.im>
parents: 28863
diff changeset
35 gboolean ret;
e3d867ce000b jabber: Complete (though untested) SCRAM implementation.
Paul Aurich <darkrain42@pidgin.im>
parents: 28863
diff changeset
36 GString *salt;
e3d867ce000b jabber: Complete (though untested) SCRAM implementation.
Paul Aurich <darkrain42@pidgin.im>
parents: 28863
diff changeset
37 const char *client_proof;
e3d867ce000b jabber: Complete (though untested) SCRAM implementation.
Paul Aurich <darkrain42@pidgin.im>
parents: 28863
diff changeset
38 /* const char *server_signature; */
e3d867ce000b jabber: Complete (though untested) SCRAM implementation.
Paul Aurich <darkrain42@pidgin.im>
parents: 28863
diff changeset
39
e3d867ce000b jabber: Complete (though untested) SCRAM implementation.
Paul Aurich <darkrain42@pidgin.im>
parents: 28863
diff changeset
40 data->hash = "sha1";
28868
7415cb6c4587 jabber: Handle the case where the server success-with-data is sent as a challenge/response pair.
Paul Aurich <darkrain42@pidgin.im>
parents: 28866
diff changeset
41 data->password = "password";
28866
e3d867ce000b jabber: Complete (though untested) SCRAM implementation.
Paul Aurich <darkrain42@pidgin.im>
parents: 28863
diff changeset
42 data->auth_message = g_string_new("n=username@jabber.org,r=8jLxB5515dhFxBil5A0xSXMH,"
e3d867ce000b jabber: Complete (though untested) SCRAM implementation.
Paul Aurich <darkrain42@pidgin.im>
parents: 28863
diff changeset
43 "r=8jLxB5515dhFxBil5A0xSXMHabc,s=c2FsdA==,i=1,"
e3d867ce000b jabber: Complete (though untested) SCRAM implementation.
Paul Aurich <darkrain42@pidgin.im>
parents: 28863
diff changeset
44 "c=biws,r=8jLxB5515dhFxBil5A0xSXMHabc");
e3d867ce000b jabber: Complete (though untested) SCRAM implementation.
Paul Aurich <darkrain42@pidgin.im>
parents: 28863
diff changeset
45 client_proof = "\x48\x61\x30\xa5\x61\x0b\xae\xb9\xe4\x11\xa8\xfd\xa5\xcd\x34\x1d\x8a\x3c\x28\x17";
e3d867ce000b jabber: Complete (though untested) SCRAM implementation.
Paul Aurich <darkrain42@pidgin.im>
parents: 28863
diff changeset
46
e3d867ce000b jabber: Complete (though untested) SCRAM implementation.
Paul Aurich <darkrain42@pidgin.im>
parents: 28863
diff changeset
47 salt = g_string_new("salt");
28868
7415cb6c4587 jabber: Handle the case where the server success-with-data is sent as a challenge/response pair.
Paul Aurich <darkrain42@pidgin.im>
parents: 28866
diff changeset
48 ret = jabber_scram_calc_proofs(data, salt, 1);
28866
e3d867ce000b jabber: Complete (though untested) SCRAM implementation.
Paul Aurich <darkrain42@pidgin.im>
parents: 28863
diff changeset
49 fail_if(ret == FALSE, "Failed to calculate SCRAM proofs!");
e3d867ce000b jabber: Complete (though untested) SCRAM implementation.
Paul Aurich <darkrain42@pidgin.im>
parents: 28863
diff changeset
50
e3d867ce000b jabber: Complete (though untested) SCRAM implementation.
Paul Aurich <darkrain42@pidgin.im>
parents: 28863
diff changeset
51 fail_unless(0 == memcmp(client_proof, data->client_proof->str, 20));
e3d867ce000b jabber: Complete (though untested) SCRAM implementation.
Paul Aurich <darkrain42@pidgin.im>
parents: 28863
diff changeset
52 g_string_free(salt, TRUE);
e3d867ce000b jabber: Complete (though untested) SCRAM implementation.
Paul Aurich <darkrain42@pidgin.im>
parents: 28863
diff changeset
53 g_string_free(data->auth_message, TRUE);
e3d867ce000b jabber: Complete (though untested) SCRAM implementation.
Paul Aurich <darkrain42@pidgin.im>
parents: 28863
diff changeset
54 g_free(data);
e3d867ce000b jabber: Complete (though untested) SCRAM implementation.
Paul Aurich <darkrain42@pidgin.im>
parents: 28863
diff changeset
55 }
e3d867ce000b jabber: Complete (though untested) SCRAM implementation.
Paul Aurich <darkrain42@pidgin.im>
parents: 28863
diff changeset
56 END_TEST
e3d867ce000b jabber: Complete (though untested) SCRAM implementation.
Paul Aurich <darkrain42@pidgin.im>
parents: 28863
diff changeset
57
e3d867ce000b jabber: Complete (though untested) SCRAM implementation.
Paul Aurich <darkrain42@pidgin.im>
parents: 28863
diff changeset
58 #if 0
e3d867ce000b jabber: Complete (though untested) SCRAM implementation.
Paul Aurich <darkrain42@pidgin.im>
parents: 28863
diff changeset
59 START_TEST(test_mech)
e3d867ce000b jabber: Complete (though untested) SCRAM implementation.
Paul Aurich <darkrain42@pidgin.im>
parents: 28863
diff changeset
60 {
e3d867ce000b jabber: Complete (though untested) SCRAM implementation.
Paul Aurich <darkrain42@pidgin.im>
parents: 28863
diff changeset
61 scram_sha1_mech = jabber_scram_get_sha1();
e3d867ce000b jabber: Complete (though untested) SCRAM implementation.
Paul Aurich <darkrain42@pidgin.im>
parents: 28863
diff changeset
62
e3d867ce000b jabber: Complete (though untested) SCRAM implementation.
Paul Aurich <darkrain42@pidgin.im>
parents: 28863
diff changeset
63 }
e3d867ce000b jabber: Complete (though untested) SCRAM implementation.
Paul Aurich <darkrain42@pidgin.im>
parents: 28863
diff changeset
64 END_TEST
e3d867ce000b jabber: Complete (though untested) SCRAM implementation.
Paul Aurich <darkrain42@pidgin.im>
parents: 28863
diff changeset
65 #endif
e3d867ce000b jabber: Complete (though untested) SCRAM implementation.
Paul Aurich <darkrain42@pidgin.im>
parents: 28863
diff changeset
66
28863
b4e8c372e06b Fix the Hi() function and actually 'mtn add' the test file.
Paul Aurich <darkrain42@pidgin.im>
parents:
diff changeset
67 Suite *
b4e8c372e06b Fix the Hi() function and actually 'mtn add' the test file.
Paul Aurich <darkrain42@pidgin.im>
parents:
diff changeset
68 jabber_scram_suite(void)
b4e8c372e06b Fix the Hi() function and actually 'mtn add' the test file.
Paul Aurich <darkrain42@pidgin.im>
parents:
diff changeset
69 {
b4e8c372e06b Fix the Hi() function and actually 'mtn add' the test file.
Paul Aurich <darkrain42@pidgin.im>
parents:
diff changeset
70 Suite *s = suite_create("Jabber SASL SCRAM functions");
b4e8c372e06b Fix the Hi() function and actually 'mtn add' the test file.
Paul Aurich <darkrain42@pidgin.im>
parents:
diff changeset
71
b4e8c372e06b Fix the Hi() function and actually 'mtn add' the test file.
Paul Aurich <darkrain42@pidgin.im>
parents:
diff changeset
72 TCase *tc = tcase_create("PBKDF2 Functionality");
b4e8c372e06b Fix the Hi() function and actually 'mtn add' the test file.
Paul Aurich <darkrain42@pidgin.im>
parents:
diff changeset
73 tcase_add_test(tc, test_pbkdf2);
b4e8c372e06b Fix the Hi() function and actually 'mtn add' the test file.
Paul Aurich <darkrain42@pidgin.im>
parents:
diff changeset
74 suite_add_tcase(s, tc);
b4e8c372e06b Fix the Hi() function and actually 'mtn add' the test file.
Paul Aurich <darkrain42@pidgin.im>
parents:
diff changeset
75
28866
e3d867ce000b jabber: Complete (though untested) SCRAM implementation.
Paul Aurich <darkrain42@pidgin.im>
parents: 28863
diff changeset
76 tc = tcase_create("SCRAM Proofs");
e3d867ce000b jabber: Complete (though untested) SCRAM implementation.
Paul Aurich <darkrain42@pidgin.im>
parents: 28863
diff changeset
77 tcase_add_test(tc, test_proofs);
e3d867ce000b jabber: Complete (though untested) SCRAM implementation.
Paul Aurich <darkrain42@pidgin.im>
parents: 28863
diff changeset
78 suite_add_tcase(s, tc);
e3d867ce000b jabber: Complete (though untested) SCRAM implementation.
Paul Aurich <darkrain42@pidgin.im>
parents: 28863
diff changeset
79
28863
b4e8c372e06b Fix the Hi() function and actually 'mtn add' the test file.
Paul Aurich <darkrain42@pidgin.im>
parents:
diff changeset
80 return s;
b4e8c372e06b Fix the Hi() function and actually 'mtn add' the test file.
Paul Aurich <darkrain42@pidgin.im>
parents:
diff changeset
81 }

mercurial