Wed, 11 Nov 2009 20:32:09 +0000
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 | } |