Commit | Line | Data |
---|---|---|
a00a5822 PA |
1 | // SPDX-License-Identifier: GPL-2.0 |
2 | #include <kunit/test.h> | |
3 | ||
4 | #include "protocol.h" | |
5 | ||
6 | struct test_case { | |
7 | char *key; | |
8 | char *msg; | |
9 | char *result; | |
10 | }; | |
11 | ||
12 | /* we can't reuse RFC 4231 test vectors, as we have constraint on the | |
13 | * input and key size. | |
14 | */ | |
15 | static struct test_case tests[] = { | |
16 | { | |
17 | .key = "0b0b0b0b0b0b0b0b", | |
18 | .msg = "48692054", | |
19 | .result = "8385e24fb4235ac37556b6b886db106284a1da671699f46db1f235ec622dcafa", | |
20 | }, | |
21 | { | |
22 | .key = "aaaaaaaaaaaaaaaa", | |
23 | .msg = "dddddddd", | |
24 | .result = "2c5e219164ff1dca1c4a92318d847bb6b9d44492984e1eb71aff9022f71046e9", | |
25 | }, | |
26 | { | |
27 | .key = "0102030405060708", | |
28 | .msg = "cdcdcdcd", | |
29 | .result = "e73b9ba9969969cefb04aa0d6df18ec2fcc075b6f23b4d8c4da736a5dbbc6e7d", | |
30 | }, | |
31 | }; | |
32 | ||
33 | static void mptcp_crypto_test_basic(struct kunit *test) | |
34 | { | |
35 | char hmac[32], hmac_hex[65]; | |
36 | u32 nonce1, nonce2; | |
37 | u64 key1, key2; | |
38 | u8 msg[8]; | |
39 | int i, j; | |
40 | ||
41 | for (i = 0; i < ARRAY_SIZE(tests); ++i) { | |
42 | /* mptcp hmap will convert to be before computing the hmac */ | |
43 | key1 = be64_to_cpu(*((__be64 *)&tests[i].key[0])); | |
44 | key2 = be64_to_cpu(*((__be64 *)&tests[i].key[8])); | |
45 | nonce1 = be32_to_cpu(*((__be32 *)&tests[i].msg[0])); | |
46 | nonce2 = be32_to_cpu(*((__be32 *)&tests[i].msg[4])); | |
47 | ||
48 | put_unaligned_be32(nonce1, &msg[0]); | |
49 | put_unaligned_be32(nonce2, &msg[4]); | |
50 | ||
51 | mptcp_crypto_hmac_sha(key1, key2, msg, 8, hmac); | |
52 | for (j = 0; j < 32; ++j) | |
53 | sprintf(&hmac_hex[j << 1], "%02x", hmac[j] & 0xff); | |
54 | hmac_hex[64] = 0; | |
55 | ||
56 | KUNIT_EXPECT_STREQ(test, &hmac_hex[0], tests[i].result); | |
57 | } | |
58 | } | |
59 | ||
60 | static struct kunit_case mptcp_crypto_test_cases[] = { | |
61 | KUNIT_CASE(mptcp_crypto_test_basic), | |
62 | {} | |
63 | }; | |
64 | ||
65 | static struct kunit_suite mptcp_crypto_suite = { | |
66 | .name = "mptcp-crypto", | |
67 | .test_cases = mptcp_crypto_test_cases, | |
68 | }; | |
69 | ||
70 | kunit_test_suite(mptcp_crypto_suite); | |
71 | ||
72 | MODULE_LICENSE("GPL"); | |
a8f570b2 | 73 | MODULE_DESCRIPTION("KUnit tests for MPTCP Crypto"); |