Line data Source code
1 : // boost test header
2 : #include <boost/test/unit_test.hpp>
3 :
4 : // the crypto header
5 : #include "utils/Cryptography.h"
6 :
7 : // mock HAL
8 : #include "ModuleFixture.hpp"
9 :
10 : #include <string.h>
11 :
12 : // test message, key and vectors
13 : // from https://www.rfc-editor.org/rfc/rfc4493.html#section-4
14 :
15 : static const unsigned char msg[64] = {
16 : 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
17 : 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a,
18 : 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c,
19 : 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51,
20 : 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11,
21 : 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef,
22 : 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17,
23 : 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10
24 : };
25 :
26 : static unsigned char key[16] = {
27 : 0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6,
28 : 0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c
29 : };
30 :
31 : static const unsigned char testVectEx1[] = {
32 : 0xbb, 0x1d, 0x69, 0x29, 0xe9, 0x59, 0x37, 0x28,
33 : 0x7f, 0xa3, 0x7d, 0x12, 0x9b, 0x75, 0x67, 0x46
34 : };
35 :
36 : static const unsigned char testVectEx2[] = {
37 : 0x07, 0x0a, 0x16, 0xb4, 0x6b, 0x4d, 0x41, 0x44,
38 : 0xf7, 0x9b, 0xdd, 0x9d, 0xd0, 0x4a, 0x28, 0x7c
39 : };
40 :
41 : static const unsigned char testVectEx3[] = {
42 : 0xdf, 0xa6, 0x67, 0x47, 0xde, 0x9a, 0xe6, 0x30,
43 : 0x30, 0xca, 0x32, 0x61, 0x14, 0x97, 0xc8, 0x27
44 : };
45 :
46 : static const unsigned char testVectEx4[] = {
47 : 0x51, 0xf0, 0xbe, 0xbf, 0x7e, 0x3b, 0x9d, 0x92,
48 : 0xfc, 0x49, 0x74, 0x17, 0x79, 0x36, 0x3c, 0xfe
49 : };
50 :
51 : static RadioLibSoftwareAES128 RadioLibAES128Instance;
52 :
53 : BOOST_FIXTURE_TEST_SUITE(suite_Crypto, ModuleFixture)
54 :
55 2 : BOOST_FIXTURE_TEST_CASE(Crypto_CMAC, ModuleFixture) {
56 1 : BOOST_TEST_MESSAGE("--- Test Crypto::CMAC ---");
57 : uint8_t cmac[RADIOLIB_AES128_BLOCK_SIZE];
58 : size_t testLen;
59 :
60 1 : BOOST_TEST_MESSAGE("--- Test Crypto::CMAC RFC 4493 chapter 4 Example 1: len = 0 ---");
61 1 : testLen = 0;
62 1 : hal->aes128 = &RadioLibAES128Instance;
63 1 : hal->aes128->init(key);
64 1 : hal->aes128->generateCMAC(msg, testLen, cmac);
65 1 : BOOST_TEST(memcmp(cmac, testVectEx1, RADIOLIB_AES128_BLOCK_SIZE) == 0);
66 :
67 1 : BOOST_TEST_MESSAGE("--- Test Crypto::CMAC RFC 4493 chapter 4 Example 2: len = 16 ---");
68 1 : testLen = 16;
69 1 : hal->aes128->init(key);
70 1 : hal->aes128->generateCMAC(msg, testLen, cmac);
71 1 : BOOST_TEST(memcmp(cmac, testVectEx2, RADIOLIB_AES128_BLOCK_SIZE) == 0);
72 :
73 :
74 1 : BOOST_TEST_MESSAGE("--- Test Crypto::CMAC RFC 4493 chapter 4 Example 2: len = 40 ---");
75 1 : testLen = 40;
76 1 : hal->aes128->init(key);
77 1 : hal->aes128->generateCMAC(msg, testLen, cmac);
78 1 : BOOST_TEST(memcmp(cmac, testVectEx3, RADIOLIB_AES128_BLOCK_SIZE) == 0);
79 :
80 1 : BOOST_TEST_MESSAGE("--- Test Crypto::CMAC RFC 4493 chapter 4 Example 2: len = 64 ---");
81 1 : testLen = 64;
82 1 : hal->aes128->init(key);
83 1 : hal->aes128->generateCMAC(msg, testLen, cmac);
84 1 : BOOST_TEST(memcmp(cmac, testVectEx4, RADIOLIB_AES128_BLOCK_SIZE) == 0);
85 1 : }
86 :
87 : BOOST_AUTO_TEST_SUITE_END()
|