1 /* Copyright (c) 2023 Nordic Semiconductor ASA
2  * SPDx-License-Identifier: Apache-2.0
3  */
4 
5 #include <stddef.h>
6 #include <stdint.h>
7 
8 #define NUMBER_OF_TEST 24
9 
10 struct test_data {
11 	const uint8_t *input;
12 	const uint8_t *expected_output;
13 	const uint8_t key[16];
14 	uint8_t nonce[13];
15 
16 	const size_t aad_len; /* Additional Authenticated Data length */
17 	const size_t mic_len; /* MIC length, defined as MAC in the RFC */
18 	const size_t input_len;
19 	size_t expected_output_len;
20 };
21 
22 /* Data from RFC3610 test vectors:
23  * https://www.rfc-editor.org/rfc/rfc3610
24  */
25 
26 const uint8_t packet_vector_1[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A,
27 				   0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15,
28 				   0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E};
29 const uint8_t packet_vector_2[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A,
30 				   0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15,
31 				   0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F};
32 const uint8_t packet_vector_3[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
33 				   0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11,
34 				   0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A,
35 				   0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20};
36 const uint8_t packet_vector_4[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A,
37 				   0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15,
38 				   0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E};
39 const uint8_t packet_vector_5[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A,
40 				   0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15,
41 				   0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F};
42 const uint8_t packet_vector_6[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
43 				   0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11,
44 				   0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A,
45 				   0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20};
46 const uint8_t packet_vector_7[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A,
47 				   0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15,
48 				   0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E};
49 const uint8_t packet_vector_8[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A,
50 				   0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15,
51 				   0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F};
52 const uint8_t packet_vector_9[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
53 				   0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11,
54 				   0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A,
55 				   0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20};
56 const uint8_t packet_vector_10[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
57 				    0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
58 				    0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
59 				    0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E};
60 const uint8_t packet_vector_11[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
61 				    0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
62 				    0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
63 				    0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F};
64 const uint8_t packet_vector_12[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
65 				    0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11,
66 				    0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A,
67 				    0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20};
68 const uint8_t packet_vector_13[] = {0x0B, 0xE1, 0xA8, 0x8B, 0xAC, 0xE0, 0x18, 0xB1,
69 				    0x08, 0xE8, 0xCF, 0x97, 0xD8, 0x20, 0xEA, 0x25,
70 				    0x84, 0x60, 0xE9, 0x6A, 0xD9, 0xCF, 0x52, 0x89,
71 				    0x05, 0x4D, 0x89, 0x5C, 0xEA, 0xC4, 0x7C};
72 const uint8_t packet_vector_14[] = {0x63, 0x01, 0x8F, 0x76, 0xDC, 0x8A, 0x1B, 0xCB,
73 				    0x90, 0x20, 0xEA, 0x6F, 0x91, 0xBD, 0xD8, 0x5A,
74 				    0xFA, 0x00, 0x39, 0xBA, 0x4B, 0xAF, 0xF9, 0xBF,
75 				    0xB7, 0x9C, 0x70, 0x28, 0x94, 0x9C, 0xD0, 0xEC};
76 const uint8_t packet_vector_15[] = {0xAA, 0x6C, 0xFA, 0x36, 0xCA, 0xE8, 0x6B, 0x40, 0xB9,
77 				    0x16, 0xE0, 0xEA, 0xCC, 0x1C, 0x00, 0xD7, 0xDC, 0xEC,
78 				    0x68, 0xEC, 0x0B, 0x3B, 0xBB, 0x1A, 0x02, 0xDE, 0x8A,
79 				    0x2D, 0x1A, 0xA3, 0x46, 0x13, 0x2E};
80 const uint8_t packet_vector_16[] = {0xD0, 0xD0, 0x73, 0x5C, 0x53, 0x1E, 0x1B, 0xEC,
81 				    0xF0, 0x49, 0xC2, 0x44, 0x12, 0xDA, 0xAC, 0x56,
82 				    0x30, 0xEF, 0xA5, 0x39, 0x6F, 0x77, 0x0C, 0xE1,
83 				    0xA6, 0x6B, 0x21, 0xF7, 0xB2, 0x10, 0x1C};
84 const uint8_t packet_vector_17[] = {0x77, 0xB6, 0x0F, 0x01, 0x1C, 0x03, 0xE1, 0x52,
85 				    0x58, 0x99, 0xBC, 0xAE, 0xE8, 0x8B, 0x6A, 0x46,
86 				    0xC7, 0x8D, 0x63, 0xE5, 0x2E, 0xB8, 0xC5, 0x46,
87 				    0xEF, 0xB5, 0xDE, 0x6F, 0x75, 0xE9, 0xCC, 0x0D};
88 const uint8_t packet_vector_18[] = {0xCD, 0x90, 0x44, 0xD2, 0xB7, 0x1F, 0xDB, 0x81, 0x20,
89 				    0xEA, 0x60, 0xC0, 0x64, 0x35, 0xAC, 0xBA, 0xFB, 0x11,
90 				    0xA8, 0x2E, 0x2F, 0x07, 0x1D, 0x7C, 0xA4, 0xA5, 0xEB,
91 				    0xD9, 0x3A, 0x80, 0x3B, 0xA8, 0x7F};
92 const uint8_t packet_vector_19[] = {0xD8, 0x5B, 0xC7, 0xE6, 0x9F, 0x94, 0x4F, 0xB8,
93 				    0x8A, 0x19, 0xB9, 0x50, 0xBC, 0xF7, 0x1A, 0x01,
94 				    0x8E, 0x5E, 0x67, 0x01, 0xC9, 0x17, 0x87, 0x65,
95 				    0x98, 0x09, 0xD6, 0x7D, 0xBE, 0xDD, 0x18};
96 const uint8_t packet_vector_20[] = {0x74, 0xA0, 0xEB, 0xC9, 0x06, 0x9F, 0x5B, 0x37,
97 				    0x17, 0x61, 0x43, 0x3C, 0x37, 0xC5, 0xA3, 0x5F,
98 				    0xC1, 0xF3, 0x9F, 0x40, 0x63, 0x02, 0xEB, 0x90,
99 				    0x7C, 0x61, 0x63, 0xBE, 0x38, 0xC9, 0x84, 0x37};
100 const uint8_t packet_vector_21[] = {0x44, 0xA3, 0xAA, 0x3A, 0xAE, 0x64, 0x75, 0xCA, 0xA4,
101 				    0x34, 0xA8, 0xE5, 0x85, 0x00, 0xC6, 0xE4, 0x15, 0x30,
102 				    0x53, 0x88, 0x62, 0xD6, 0x86, 0xEA, 0x9E, 0x81, 0x30,
103 				    0x1B, 0x5A, 0xE4, 0x22, 0x6B, 0xFA};
104 const uint8_t packet_vector_22[] = {0xEC, 0x46, 0xBB, 0x63, 0xB0, 0x25, 0x20, 0xC3,
105 				    0x3C, 0x49, 0xFD, 0x70, 0xB9, 0x6B, 0x49, 0xE2,
106 				    0x1D, 0x62, 0x17, 0x41, 0x63, 0x28, 0x75, 0xDB,
107 				    0x7F, 0x6C, 0x92, 0x43, 0xD2, 0xD7, 0xC2};
108 const uint8_t packet_vector_23[] = {0x47, 0xA6, 0x5A, 0xC7, 0x8B, 0x3D, 0x59, 0x42,
109 				    0x27, 0xE8, 0x5E, 0x71, 0xE2, 0xFC, 0xFB, 0xB8,
110 				    0x80, 0x44, 0x2C, 0x73, 0x1B, 0xF9, 0x51, 0x67,
111 				    0xC8, 0xFF, 0xD7, 0x89, 0x5E, 0x33, 0x70, 0x76};
112 const uint8_t packet_vector_24[] = {0x6E, 0x37, 0xA6, 0xEF, 0x54, 0x6D, 0x95, 0x5D, 0x34,
113 				    0xAB, 0x60, 0x59, 0xAB, 0xF2, 0x1C, 0x0B, 0x02, 0xFE,
114 				    0xB8, 0x8F, 0x85, 0x6D, 0xF4, 0xA3, 0x73, 0x81, 0xBC,
115 				    0xE3, 0xCC, 0x12, 0x85, 0x17, 0xD4};
116 
117 const uint8_t expected_output_1[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x58, 0x8C,
118 				     0x97, 0x9A, 0x61, 0xC6, 0x63, 0xD2, 0xF0, 0x66, 0xD0, 0xC2,
119 				     0xC0, 0xF9, 0x89, 0x80, 0x6D, 0x5F, 0x6B, 0x61, 0xDA, 0xC3,
120 				     0x84, 0x17, 0xE8, 0xD1, 0x2C, 0xFD, 0xF9, 0x26, 0xE0};
121 const uint8_t expected_output_2[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x72, 0xC9,
122 				     0x1A, 0x36, 0xE1, 0x35, 0xF8, 0xCF, 0x29, 0x1C, 0xA8, 0x94,
123 				     0x08, 0x5C, 0x87, 0xE3, 0xCC, 0x15, 0xC4, 0x39, 0xC9, 0xE4,
124 				     0x3A, 0x3B, 0xA0, 0x91, 0xD5, 0x6E, 0x10, 0x40, 0x09, 0x16};
125 const uint8_t expected_output_3[] = {
126 	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x51, 0xB1, 0xE5, 0xF4, 0x4A, 0x19,
127 	0x7D, 0x1D, 0xA4, 0x6B, 0x0F, 0x8E, 0x2D, 0x28, 0x2A, 0xE8, 0x71, 0xE8, 0x38, 0xBB,
128 	0x64, 0xDA, 0x85, 0x96, 0x57, 0x4A, 0xDA, 0xA7, 0x6F, 0xBD, 0x9F, 0xB0, 0xC5};
129 const uint8_t expected_output_4[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
130 				     0x0A, 0x0B, 0xA2, 0x8C, 0x68, 0x65, 0x93, 0x9A, 0x9A, 0x79,
131 				     0xFA, 0xAA, 0x5C, 0x4C, 0x2A, 0x9D, 0x4A, 0x91, 0xCD, 0xAC,
132 				     0x8C, 0x96, 0xC8, 0x61, 0xB9, 0xC9, 0xE6, 0x1E, 0xF1};
133 const uint8_t expected_output_5[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
134 				     0x0A, 0x0B, 0xDC, 0xF1, 0xFB, 0x7B, 0x5D, 0x9E, 0x23, 0xFB,
135 				     0x9D, 0x4E, 0x13, 0x12, 0x53, 0x65, 0x8A, 0xD8, 0x6E, 0xBD,
136 				     0xCA, 0x3E, 0x51, 0xE8, 0x3F, 0x07, 0x7D, 0x9C, 0x2D, 0x93};
137 const uint8_t expected_output_6[] = {
138 	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x6F, 0xC1,
139 	0xB0, 0x11, 0xF0, 0x06, 0x56, 0x8B, 0x51, 0x71, 0xA4, 0x2D, 0x95, 0x3D, 0x46, 0x9B,
140 	0x25, 0x70, 0xA4, 0xBD, 0x87, 0x40, 0x5A, 0x04, 0x43, 0xAC, 0x91, 0xCB, 0x94};
141 const uint8_t expected_output_7[] = {
142 	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x01, 0x35, 0xD1, 0xB2, 0xC9, 0x5F,
143 	0x41, 0xD5, 0xD1, 0xD4, 0xFE, 0xC1, 0x85, 0xD1, 0x66, 0xB8, 0x09, 0x4E, 0x99, 0x9D,
144 	0xFE, 0xD9, 0x6C, 0x04, 0x8C, 0x56, 0x60, 0x2C, 0x97, 0xAC, 0xBB, 0x74, 0x90};
145 const uint8_t expected_output_8[] = {
146 	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x7B, 0x75, 0x39, 0x9A, 0xC0, 0x83,
147 	0x1D, 0xD2, 0xF0, 0xBB, 0xD7, 0x58, 0x79, 0xA2, 0xFD, 0x8F, 0x6C, 0xAE, 0x6B, 0x6C,
148 	0xD9, 0xB7, 0xDB, 0x24, 0xC1, 0x7B, 0x44, 0x33, 0xF4, 0x34, 0x96, 0x3F, 0x34, 0xB4};
149 const uint8_t expected_output_9[] = {
150 	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x82, 0x53, 0x1A, 0x60, 0xCC, 0x24, 0x94,
151 	0x5A, 0x4B, 0x82, 0x79, 0x18, 0x1A, 0xB5, 0xC8, 0x4D, 0xF2, 0x1C, 0xE7, 0xF9, 0xB7, 0x3F,
152 	0x42, 0xE1, 0x97, 0xEA, 0x9C, 0x07, 0xE5, 0x6B, 0x5E, 0xB1, 0x7E, 0x5F, 0x4E};
153 const uint8_t expected_output_10[] = {
154 	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x07, 0x34,
155 	0x25, 0x94, 0x15, 0x77, 0x85, 0x15, 0x2B, 0x07, 0x40, 0x98, 0x33, 0x0A, 0xBB, 0x14,
156 	0x1B, 0x94, 0x7B, 0x56, 0x6A, 0xA9, 0x40, 0x6B, 0x4D, 0x99, 0x99, 0x88, 0xDD};
157 const uint8_t expected_output_11[] = {
158 	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x67, 0x6B,
159 	0xB2, 0x03, 0x80, 0xB0, 0xE3, 0x01, 0xE8, 0xAB, 0x79, 0x59, 0x0A, 0x39, 0x6D, 0xA7,
160 	0x8B, 0x83, 0x49, 0x34, 0xF5, 0x3A, 0xA2, 0xE9, 0x10, 0x7A, 0x8B, 0x6C, 0x02, 0x2C};
161 const uint8_t expected_output_12[] = {
162 	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0xC0, 0xFF, 0xA0,
163 	0xD6, 0xF0, 0x5B, 0xDB, 0x67, 0xF2, 0x4D, 0x43, 0xA4, 0x33, 0x8D, 0x2A, 0xA4, 0xBE, 0xD7,
164 	0xB2, 0x0E, 0x43, 0xCD, 0x1A, 0xA3, 0x16, 0x62, 0xE7, 0xAD, 0x65, 0xD6, 0xDB};
165 const uint8_t expected_output_13[] = {0x0B, 0xE1, 0xA8, 0x8B, 0xAC, 0xE0, 0x18, 0xB1, 0x4C, 0xB9,
166 				      0x7F, 0x86, 0xA2, 0xA4, 0x68, 0x9A, 0x87, 0x79, 0x47, 0xAB,
167 				      0x80, 0x91, 0xEF, 0x53, 0x86, 0xA6, 0xFF, 0xBD, 0xD0, 0x80,
168 				      0xF8, 0xE7, 0x8C, 0xF7, 0xCB, 0x0C, 0xDD, 0xD7, 0xB3};
169 const uint8_t expected_output_14[] = {0x63, 0x01, 0x8F, 0x76, 0xDC, 0x8A, 0x1B, 0xCB, 0x4C, 0xCB,
170 				      0x1E, 0x7C, 0xA9, 0x81, 0xBE, 0xFA, 0xA0, 0x72, 0x6C, 0x55,
171 				      0xD3, 0x78, 0x06, 0x12, 0x98, 0xC8, 0x5C, 0x92, 0x81, 0x4A,
172 				      0xBC, 0x33, 0xC5, 0x2E, 0xE8, 0x1D, 0x7D, 0x77, 0xC0, 0x8A};
173 const uint8_t expected_output_15[] = {
174 	0xAA, 0x6C, 0xFA, 0x36, 0xCA, 0xE8, 0x6B, 0x40, 0xB1, 0xD2, 0x3A, 0x22, 0x20, 0xDD,
175 	0xC0, 0xAC, 0x90, 0x0D, 0x9A, 0xA0, 0x3C, 0x61, 0xFC, 0xF4, 0xA5, 0x59, 0xA4, 0x41,
176 	0x77, 0x67, 0x08, 0x97, 0x08, 0xA7, 0x76, 0x79, 0x6E, 0xDB, 0x72, 0x35, 0x06};
177 const uint8_t expected_output_16[] = {0xD0, 0xD0, 0x73, 0x5C, 0x53, 0x1E, 0x1B, 0xEC, 0xF0, 0x49,
178 				      0xC2, 0x44, 0x14, 0xD2, 0x53, 0xC3, 0x96, 0x7B, 0x70, 0x60,
179 				      0x9B, 0x7C, 0xBB, 0x7C, 0x49, 0x91, 0x60, 0x28, 0x32, 0x45,
180 				      0x26, 0x9A, 0x6F, 0x49, 0x97, 0x5B, 0xCA, 0xDE, 0xAF};
181 const uint8_t expected_output_17[] = {0x77, 0xB6, 0x0F, 0x01, 0x1C, 0x03, 0xE1, 0x52, 0x58, 0x99,
182 				      0xBC, 0xAE, 0x55, 0x45, 0xFF, 0x1A, 0x08, 0x5E, 0xE2, 0xEF,
183 				      0xBF, 0x52, 0xB2, 0xE0, 0x4B, 0xEE, 0x1E, 0x23, 0x36, 0xC7,
184 				      0x3E, 0x3F, 0x76, 0x2C, 0x0C, 0x77, 0x44, 0xFE, 0x7E, 0x3C};
185 const uint8_t expected_output_18[] = {
186 	0xCD, 0x90, 0x44, 0xD2, 0xB7, 0x1F, 0xDB, 0x81, 0x20, 0xEA, 0x60, 0xC0, 0x00, 0x97,
187 	0x69, 0xEC, 0xAB, 0xDF, 0x48, 0x62, 0x55, 0x94, 0xC5, 0x92, 0x51, 0xE6, 0x03, 0x57,
188 	0x22, 0x67, 0x5E, 0x04, 0xC8, 0x47, 0x09, 0x9E, 0x5A, 0xE0, 0x70, 0x45, 0x51};
189 const uint8_t expected_output_19[] = {
190 	0xD8, 0x5B, 0xC7, 0xE6, 0x9F, 0x94, 0x4F, 0xB8, 0xBC, 0x21, 0x8D, 0xAA, 0x94, 0x74,
191 	0x27, 0xB6, 0xDB, 0x38, 0x6A, 0x99, 0xAC, 0x1A, 0xEF, 0x23, 0xAD, 0xE0, 0xB5, 0x29,
192 	0x39, 0xCB, 0x6A, 0x63, 0x7C, 0xF9, 0xBE, 0xC2, 0x40, 0x88, 0x97, 0xC6, 0xBA};
193 const uint8_t expected_output_20[] = {
194 	0x74, 0xA0, 0xEB, 0xC9, 0x06, 0x9F, 0x5B, 0x37, 0x58, 0x10, 0xE6, 0xFD, 0x25, 0x87,
195 	0x40, 0x22, 0xE8, 0x03, 0x61, 0xA4, 0x78, 0xE3, 0xE9, 0xCF, 0x48, 0x4A, 0xB0, 0x4F,
196 	0x44, 0x7E, 0xFF, 0xF6, 0xF0, 0xA4, 0x77, 0xCC, 0x2F, 0xC9, 0xBF, 0x54, 0x89, 0x44};
197 const uint8_t expected_output_21[] = {
198 	0x44, 0xA3, 0xAA, 0x3A, 0xAE, 0x64, 0x75, 0xCA, 0xF2, 0xBE, 0xED, 0x7B, 0xC5, 0x09, 0x8E,
199 	0x83, 0xFE, 0xB5, 0xB3, 0x16, 0x08, 0xF8, 0xE2, 0x9C, 0x38, 0x81, 0x9A, 0x89, 0xC8, 0xE7,
200 	0x76, 0xF1, 0x54, 0x4D, 0x41, 0x51, 0xA4, 0xED, 0x3A, 0x8B, 0x87, 0xB9, 0xCE};
201 const uint8_t expected_output_22[] = {
202 	0xEC, 0x46, 0xBB, 0x63, 0xB0, 0x25, 0x20, 0xC3, 0x3C, 0x49, 0xFD, 0x70, 0x31, 0xD7,
203 	0x50, 0xA0, 0x9D, 0xA3, 0xED, 0x7F, 0xDD, 0xD4, 0x9A, 0x20, 0x32, 0xAA, 0xBF, 0x17,
204 	0xEC, 0x8E, 0xBF, 0x7D, 0x22, 0xC8, 0x08, 0x8C, 0x66, 0x6B, 0xE5, 0xC1, 0x97};
205 const uint8_t expected_output_23[] = {
206 	0x47, 0xA6, 0x5A, 0xC7, 0x8B, 0x3D, 0x59, 0x42, 0x27, 0xE8, 0x5E, 0x71, 0xE8, 0x82,
207 	0xF1, 0xDB, 0xD3, 0x8C, 0xE3, 0xED, 0xA7, 0xC2, 0x3F, 0x04, 0xDD, 0x65, 0x07, 0x1E,
208 	0xB4, 0x13, 0x42, 0xAC, 0xDF, 0x7E, 0x00, 0xDC, 0xCE, 0xC7, 0xAE, 0x52, 0x98, 0x7D};
209 const uint8_t expected_output_24[] = {
210 	0x6E, 0x37, 0xA6, 0xEF, 0x54, 0x6D, 0x95, 0x5D, 0x34, 0xAB, 0x60, 0x59, 0xF3, 0x29, 0x05,
211 	0xB8, 0x8A, 0x64, 0x1B, 0x04, 0xB9, 0xC9, 0xFF, 0xB5, 0x8C, 0xC3, 0x90, 0x90, 0x0F, 0x3D,
212 	0xA1, 0x2A, 0xB1, 0x6D, 0xCE, 0x9E, 0x82, 0xEF, 0xA1, 0x6D, 0xA6, 0x20, 0x59};
213 
214 struct test_data packet_1 = {
215 	.input = packet_vector_1,
216 	.expected_output = expected_output_1,
217 	.key = {0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD,
218 		0xCE, 0xCF},
219 	.nonce = {0x00, 0x00, 0x00, 0x03, 0x02, 0x01, 0x00, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5},
220 
221 	.input_len = 31,
222 	.aad_len = 8,
223 	.mic_len = 8,
224 };
225 
226 struct test_data packet_2 = {
227 	.input = packet_vector_2,
228 	.expected_output = expected_output_2,
229 	.key = {0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD,
230 		0xCE, 0xCF},
231 	.nonce = {0x00, 0x00, 0x00, 0x04, 0x03, 0x02, 0x01, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5},
232 
233 	.input_len = 32,
234 	.aad_len = 8,
235 	.mic_len = 8,
236 };
237 
238 struct test_data packet_3 = {
239 	.input = packet_vector_3,
240 	.expected_output = expected_output_3,
241 	.key = {0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD,
242 		0xCE, 0xCF},
243 	.nonce = {0x00, 0x00, 0x00, 0x05, 0x04, 0x03, 0x02, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5},
244 
245 	.input_len = 33,
246 	.aad_len = 8,
247 	.mic_len = 8,
248 };
249 
250 struct test_data packet_4 = {
251 	.input = packet_vector_4,
252 	.expected_output = expected_output_4,
253 	.key = {0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD,
254 		0xCE, 0xCF},
255 	.nonce = {0x00, 0x00, 0x00, 0x06, 0x05, 0x04, 0x03, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5},
256 
257 	.input_len = 31,
258 	.aad_len = 12,
259 	.mic_len = 8,
260 };
261 
262 struct test_data packet_5 = {
263 	.input = packet_vector_5,
264 	.expected_output = expected_output_5,
265 	.key = {0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD,
266 		0xCE, 0xCF},
267 	.nonce = {0x00, 0x00, 0x00, 0x07, 0x06, 0x05, 0x04, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5},
268 
269 	.input_len = 32,
270 	.aad_len = 12,
271 	.mic_len = 8,
272 };
273 
274 struct test_data packet_6 = {
275 	.input = packet_vector_6,
276 	.expected_output = expected_output_6,
277 	.key = {0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD,
278 		0xCE, 0xCF},
279 	.nonce = {0x00, 0x00, 0x00, 0x08, 0x07, 0x06, 0x05, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5},
280 
281 	.input_len = 33,
282 	.aad_len = 12,
283 	.mic_len = 8,
284 };
285 
286 struct test_data packet_7 = {
287 	.input = packet_vector_7,
288 	.expected_output = expected_output_7,
289 	.key = {0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD,
290 		0xCE, 0xCF},
291 	.nonce = {0x00, 0x00, 0x00, 0x09, 0x08, 0x07, 0x06, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5},
292 
293 	.input_len = 31,
294 	.aad_len = 8,
295 	.mic_len = 10,
296 };
297 
298 struct test_data packet_8 = {
299 	.input = packet_vector_8,
300 	.expected_output = expected_output_8,
301 	.key = {0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD,
302 		0xCE, 0xCF},
303 	.nonce = {0x00, 0x00, 0x00, 0x0A, 0x09, 0x08, 0x07, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5},
304 
305 	.input_len = 32,
306 	.aad_len = 8,
307 	.mic_len = 10,
308 };
309 
310 struct test_data packet_9 = {
311 	.input = packet_vector_9,
312 	.expected_output = expected_output_9,
313 	.key = {0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD,
314 		0xCE, 0xCF},
315 	.nonce = {0x00, 0x00, 0x00, 0x0B, 0x0A, 0x09, 0x08, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5},
316 
317 	.input_len = 33,
318 	.aad_len = 8,
319 	.mic_len = 10,
320 };
321 
322 struct test_data packet_10 = {
323 	.input = packet_vector_10,
324 	.expected_output = expected_output_10,
325 	.key = {0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD,
326 		0xCE, 0xCF},
327 	.nonce = {0x00, 0x00, 0x00, 0x0C, 0x0B, 0x0A, 0x09, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5},
328 
329 	.input_len = 31,
330 	.aad_len = 12,
331 	.mic_len = 10,
332 };
333 
334 struct test_data packet_11 = {
335 	.input = packet_vector_11,
336 	.expected_output = expected_output_11,
337 	.key = {0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD,
338 		0xCE, 0xCF},
339 	.nonce = {0x00, 0x00, 0x00, 0x0D, 0x0C, 0x0B, 0x0A, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5},
340 
341 	.input_len = 32,
342 	.aad_len = 12,
343 	.mic_len = 10,
344 };
345 
346 struct test_data packet_12 = {
347 	.input = packet_vector_12,
348 	.expected_output = expected_output_12,
349 	.key = {0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD,
350 		0xCE, 0xCF},
351 	.nonce = {0x00, 0x00, 0x00, 0x0E, 0x0D, 0x0C, 0x0B, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5},
352 
353 	.input_len = 33,
354 	.aad_len = 12,
355 	.mic_len = 10,
356 };
357 
358 struct test_data packet_13 = {
359 	.input = packet_vector_13,
360 	.expected_output = expected_output_13,
361 	.key = {0xD7, 0x82, 0x8D, 0x13, 0xB2, 0xB0, 0xBD, 0xC3, 0x25, 0xA7, 0x62, 0x36, 0xDF, 0x93,
362 		0xCC, 0x6B},
363 	.nonce = {0x00, 0x41, 0x2B, 0x4E, 0xA9, 0xCD, 0xBE, 0x3C, 0x96, 0x96, 0x76, 0x6C, 0xFA},
364 
365 	.input_len = 31,
366 	.aad_len = 8,
367 	.mic_len = 8,
368 };
369 
370 struct test_data packet_14 = {
371 	.input = packet_vector_14,
372 	.expected_output = expected_output_14,
373 	.key = {0xD7, 0x82, 0x8D, 0x13, 0xB2, 0xB0, 0xBD, 0xC3, 0x25, 0xA7, 0x62, 0x36, 0xDF, 0x93,
374 		0xCC, 0x6B},
375 	.nonce = {0x00, 0x33, 0x56, 0x8E, 0xF7, 0xB2, 0x63, 0x3C, 0x96, 0x96, 0x76, 0x6C, 0xFA},
376 
377 	.input_len = 32,
378 	.aad_len = 8,
379 	.mic_len = 8,
380 };
381 
382 struct test_data packet_15 = {
383 	.input = packet_vector_15,
384 	.expected_output = expected_output_15,
385 	.key = {0xD7, 0x82, 0x8D, 0x13, 0xB2, 0xB0, 0xBD, 0xC3, 0x25, 0xA7, 0x62, 0x36, 0xDF, 0x93,
386 		0xCC, 0x6B},
387 	.nonce = {0x00, 0x10, 0x3F, 0xE4, 0x13, 0x36, 0x71, 0x3C, 0x96, 0x96, 0x76, 0x6C, 0xFA},
388 
389 	.input_len = 33,
390 	.aad_len = 8,
391 	.mic_len = 8,
392 };
393 
394 struct test_data packet_16 = {
395 	.input = packet_vector_16,
396 	.expected_output = expected_output_16,
397 	.key = {0xD7, 0x82, 0x8D, 0x13, 0xB2, 0xB0, 0xBD, 0xC3, 0x25, 0xA7, 0x62, 0x36, 0xDF, 0x93,
398 		0xCC, 0x6B},
399 	.nonce = {0x00, 0x76, 0x4C, 0x63, 0xB8, 0x05, 0x8E, 0x3C, 0x96, 0x96, 0x76, 0x6C, 0xFA},
400 
401 	.input_len = 31,
402 	.aad_len = 12,
403 	.mic_len = 8,
404 };
405 
406 struct test_data packet_17 = {
407 	.input = packet_vector_17,
408 	.expected_output = expected_output_17,
409 	.key = {0xD7, 0x82, 0x8D, 0x13, 0xB2, 0xB0, 0xBD, 0xC3, 0x25, 0xA7, 0x62, 0x36, 0xDF, 0x93,
410 		0xCC, 0x6B},
411 	.nonce = {0x00, 0xF8, 0xB6, 0x78, 0x09, 0x4E, 0x3B, 0x3C, 0x96, 0x96, 0x76, 0x6C, 0xFA},
412 
413 	.input_len = 32,
414 	.aad_len = 12,
415 	.mic_len = 8,
416 };
417 
418 struct test_data packet_18 = {
419 	.input = packet_vector_18,
420 	.expected_output = expected_output_18,
421 	.key = {0xD7, 0x82, 0x8D, 0x13, 0xB2, 0xB0, 0xBD, 0xC3, 0x25, 0xA7, 0x62, 0x36, 0xDF, 0x93,
422 		0xCC, 0x6B},
423 	.nonce = {0x00, 0xD5, 0x60, 0x91, 0x2D, 0x3F, 0x70, 0x3C, 0x96, 0x96, 0x76, 0x6C, 0xFA},
424 
425 	.input_len = 33,
426 	.aad_len = 12,
427 	.mic_len = 8,
428 };
429 
430 struct test_data packet_19 = {
431 	.input = packet_vector_19,
432 	.expected_output = expected_output_19,
433 	.key = {0xD7, 0x82, 0x8D, 0x13, 0xB2, 0xB0, 0xBD, 0xC3, 0x25, 0xA7, 0x62, 0x36, 0xDF, 0x93,
434 		0xCC, 0x6B},
435 	.nonce = {0x00, 0x42, 0xFF, 0xF8, 0xF1, 0x95, 0x1C, 0x3C, 0x96, 0x96, 0x76, 0x6C, 0xFA},
436 
437 	.input_len = 31,
438 	.aad_len = 8,
439 	.mic_len = 10,
440 };
441 
442 struct test_data packet_20 = {
443 	.input = packet_vector_20,
444 	.expected_output = expected_output_20,
445 	.key = {0xD7, 0x82, 0x8D, 0x13, 0xB2, 0xB0, 0xBD, 0xC3, 0x25, 0xA7, 0x62, 0x36, 0xDF, 0x93,
446 		0xCC, 0x6B},
447 	.nonce = {0x00, 0x92, 0x0F, 0x40, 0xE5, 0x6C, 0xDC, 0x3C, 0x96, 0x96, 0x76, 0x6C, 0xFA},
448 
449 	.input_len = 32,
450 	.aad_len = 8,
451 	.mic_len = 10,
452 };
453 
454 struct test_data packet_21 = {
455 	.input = packet_vector_21,
456 	.expected_output = expected_output_21,
457 	.key = {0xD7, 0x82, 0x8D, 0x13, 0xB2, 0xB0, 0xBD, 0xC3, 0x25, 0xA7, 0x62, 0x36, 0xDF, 0x93,
458 		0xCC, 0x6B},
459 	.nonce = {0x00, 0x27, 0xCA, 0x0C, 0x71, 0x20, 0xBC, 0x3C, 0x96, 0x96, 0x76, 0x6C, 0xFA},
460 
461 	.input_len = 33,
462 	.aad_len = 8,
463 	.mic_len = 10,
464 };
465 
466 struct test_data packet_22 = {
467 	.input = packet_vector_22,
468 	.expected_output = expected_output_22,
469 	.key = {0xD7, 0x82, 0x8D, 0x13, 0xB2, 0xB0, 0xBD, 0xC3, 0x25, 0xA7, 0x62, 0x36, 0xDF, 0x93,
470 		0xCC, 0x6B},
471 	.nonce = {0x00, 0x5B, 0x8C, 0xCB, 0xCD, 0x9A, 0xF8, 0x3C, 0x96, 0x96, 0x76, 0x6C, 0xFA},
472 
473 	.input_len = 31,
474 	.aad_len = 12,
475 	.mic_len = 10,
476 };
477 
478 struct test_data packet_23 = {
479 	.input = packet_vector_23,
480 	.expected_output = expected_output_23,
481 	.key = {0xD7, 0x82, 0x8D, 0x13, 0xB2, 0xB0, 0xBD, 0xC3, 0x25, 0xA7, 0x62, 0x36, 0xDF, 0x93,
482 		0xCC, 0x6B},
483 	.nonce = {0x00, 0x3E, 0xBE, 0x94, 0x04, 0x4B, 0x9A, 0x3C, 0x96, 0x96, 0x76, 0x6C, 0xFA},
484 
485 	.input_len = 32,
486 	.aad_len = 12,
487 	.mic_len = 10,
488 };
489 
490 struct test_data packet_24 = {
491 	.input = packet_vector_24,
492 	.expected_output = expected_output_24,
493 	.key = {0xD7, 0x82, 0x8D, 0x13, 0xB2, 0xB0, 0xBD, 0xC3, 0x25, 0xA7, 0x62, 0x36, 0xDF, 0x93,
494 		0xCC, 0x6B},
495 	.nonce = {0x00, 0x8D, 0x49, 0x3B, 0x30, 0xAE, 0x8B, 0x3C, 0x96, 0x96, 0x76, 0x6C, 0xFA},
496 
497 	.input_len = 33,
498 	.aad_len = 12,
499 	.mic_len = 10,
500 };
501 
502 struct test_data *input_packets[NUMBER_OF_TEST] = {
503 	&packet_1,  &packet_2,	&packet_3,  &packet_4,	&packet_5,  &packet_6,
504 	&packet_7,  &packet_8,	&packet_9,  &packet_10, &packet_11, &packet_12,
505 	&packet_13, &packet_14, &packet_15, &packet_16, &packet_17, &packet_18,
506 	&packet_19, &packet_20, &packet_21, &packet_22, &packet_23, &packet_24,
507 };
508