LCOV - code coverage report
Current view: top level - mptcp/crypto_test.c (source / functions) Coverage Total Hit
Test: export Lines: 100.0 % 19 19
Test Date: 2024-11-27 06:46:12 Functions: 100.0 % 1 1
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 75.0 % 8 6

             Branch data     Line data    Source code
       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                 :           2 : static void mptcp_crypto_test_basic(struct kunit *test)
      34                 :             : {
      35                 :           2 :         char hmac[32], hmac_hex[65];
      36                 :           2 :         u32 nonce1, nonce2;
      37                 :           2 :         u64 key1, key2;
      38                 :           2 :         u8 msg[8];
      39                 :           2 :         int i, j;
      40                 :             : 
      41         [ +  + ]:           8 :         for (i = 0; i < ARRAY_SIZE(tests); ++i) {
      42                 :             :                 /* mptcp hmap will convert to be before computing the hmac */
      43                 :           6 :                 key1 = be64_to_cpu(*((__be64 *)&tests[i].key[0]));
      44                 :           6 :                 key2 = be64_to_cpu(*((__be64 *)&tests[i].key[8]));
      45                 :           6 :                 nonce1 = be32_to_cpu(*((__be32 *)&tests[i].msg[0]));
      46                 :           6 :                 nonce2 = be32_to_cpu(*((__be32 *)&tests[i].msg[4]));
      47                 :             : 
      48                 :           6 :                 put_unaligned_be32(nonce1, &msg[0]);
      49                 :           6 :                 put_unaligned_be32(nonce2, &msg[4]);
      50                 :             : 
      51                 :           6 :                 mptcp_crypto_hmac_sha(key1, key2, msg, 8, hmac);
      52         [ +  + ]:         204 :                 for (j = 0; j < 32; ++j)
      53                 :         192 :                         sprintf(&hmac_hex[j << 1], "%02x", hmac[j] & 0xff);
      54                 :           6 :                 hmac_hex[64] = 0;
      55                 :             : 
      56   [ +  -  -  + ]:           6 :                 KUNIT_EXPECT_STREQ(test, &hmac_hex[0], tests[i].result);
      57                 :             :         }
      58                 :           2 : }
      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");
      73                 :             : MODULE_DESCRIPTION("KUnit tests for MPTCP Crypto");
        

Generated by: LCOV version 2.0-1