1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements. See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership. The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License. You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing,
13 * software distributed under the License is distributed on an
14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 * KIND, either express or implied. See the License for the
16 * specific language governing permissions and limitations
17 * under the License.
18 */
19
20 #include <stddef.h>
21 #include <string.h>
22 #include <errno.h>
23 #include "testutil/testutil.h"
24 #include "nimble/hci_common.h"
25 #include "nimble/nimble_opt.h"
26 #include "host/ble_sm.h"
27 #include "host/ble_hs_test.h"
28 #include "ble_hs_test_util.h"
29 #include "ble_sm_test_util.h"
30
31 #if NIMBLE_BLE_SM
32
33 /**
34 * Legacy pairing
35 * Master: peer
36 * Pair algorithm: just works
37 * Initiator IO capabilities: 4
38 * Responder IO capabilities: 3
39 * Bonding: true
40 * Initiator address type: BLE_ADDR_PUBLIC
41 * Responder address type: BLE_ADDR_PUBLIC
42 * Initiator key distribution: 7
43 * Responder key distribution: 7
44 */
TEST_CASE(ble_sm_lgcy_peer_jw_iio4_rio3_b1_iat0_rat0_ik7_rk7)45 TEST_CASE(ble_sm_lgcy_peer_jw_iio4_rio3_b1_iat0_rat0_ik7_rk7)
46 {
47 struct ble_sm_test_params params;
48
49 params = (struct ble_sm_test_params) {
50 .init_id_addr = {
51 0xe1, 0xfc, 0xda, 0xf4, 0xb7, 0x6c,
52 },
53 .resp_id_addr = {
54 0x33, 0x22, 0x11, 0x00, 0x45, 0x0a,
55 },
56 .pair_req = {
57 .io_cap = 0x04,
58 .oob_data_flag = 0x00,
59 .authreq = 0x05,
60 .max_enc_key_size = 0x10,
61 .init_key_dist = 0x07,
62 .resp_key_dist = 0x07,
63 },
64 .pair_rsp = {
65 .io_cap = 0x03,
66 .oob_data_flag = 0x00,
67 .authreq = 0x09,
68 .max_enc_key_size = 0x10,
69 .init_key_dist = 0x07,
70 .resp_key_dist = 0x07,
71 },
72 .confirm_req[0] = {
73 .value = {
74 0xcd, 0x5b, 0x79, 0x29, 0x53, 0x31, 0x56, 0x23,
75 0x2c, 0x08, 0xed, 0x81, 0x16, 0x55, 0x8e, 0x01,
76 },
77 },
78 .confirm_rsp[0] = {
79 .value = {
80 0x49, 0x39, 0x22, 0x0f, 0x7b, 0x1b, 0x80, 0xcd,
81 0xbe, 0x89, 0xd1, 0x4c, 0xbd, 0x6f, 0xda, 0x2c,
82 },
83 },
84 .random_req[0] = {
85 .value = {
86 0x7f, 0x42, 0xc0, 0x2f, 0x1d, 0x07, 0x37, 0xfc,
87 0x04, 0x5b, 0x05, 0x9a, 0xed, 0x67, 0xa5, 0x68,
88 },
89 },
90 .random_rsp[0] = {
91 .value = {
92 0x42, 0x1a, 0x58, 0xa2, 0x3b, 0x80, 0xde, 0xef,
93 0x95, 0x0d, 0xf7, 0xca, 0x06, 0x05, 0x01, 0x3c,
94 },
95 },
96 .enc_info_req = {
97 .ltk = {
98 0x2f, 0x9b, 0x16, 0xff, 0xf3, 0x73, 0x30, 0x08,
99 0xa8, 0xe5, 0x01, 0xb1, 0x3b, 0xe1, 0x87, 0x00,
100 },
101 },
102 .master_id_req = {
103 .ediv = 0xf8e0,
104 .rand_val = 0xef7c818b00000000,
105 },
106 .id_info_req = {
107 .irk = {
108 0xef, 0x8d, 0xe2, 0x16, 0x4f, 0xec, 0x43, 0x0d,
109 0xbf, 0x5b, 0xdd, 0x34, 0xc0, 0x53, 0x1e, 0xb8,
110 },
111 },
112 .id_addr_info_req = {
113 .addr_type = 0,
114 .bd_addr = {
115 0x33, 0x22, 0x11, 0x00, 0x45, 0x0a,
116 },
117 },
118 .sign_info_req = {
119 .sig_key = {
120 0xc6, 0x17, 0xc0, 0x02, 0x40, 0x0d, 0x27, 0x51,
121 0x8a, 0x77, 0xb5, 0xae, 0xd8, 0xa9, 0x7a, 0x7a,
122 },
123 },
124 .enc_info_rsp = {
125 .ltk = {
126 0xd7, 0x07, 0x22, 0x79, 0x24, 0xc6, 0xcb, 0x4d,
127 0xa3, 0xdd, 0x01, 0xfb, 0x48, 0x87, 0xd4, 0xcf,
128 },
129 },
130 .master_id_rsp = {
131 .ediv = 0x9a39,
132 .rand_val = 0x8e76d9b00000000,
133 },
134 .id_info_rsp = {
135 .irk = {
136 0xeb, 0x8a, 0x06, 0xc4, 0x93, 0x51, 0x04, 0xb3,
137 0x8b, 0xbf, 0xe8, 0x1f, 0x0e, 0x96, 0x2a, 0x54,
138 },
139 },
140 .id_addr_info_rsp = {
141 .addr_type = 0,
142 .bd_addr = {
143 0xe1, 0xfc, 0xda, 0xf4, 0xb7, 0x6c,
144 },
145 },
146 .sign_info_rsp = {
147 .sig_key = {
148 0x14, 0x55, 0x93, 0xe1, 0xd1, 0xe7, 0xc4, 0x5d,
149 0x35, 0x97, 0xd3, 0x05, 0x30, 0xc8, 0x9d, 0x83,
150 },
151 },
152 .stk = {
153 0x1c, 0xd7, 0xb6, 0x35, 0x48, 0xfc, 0x9f, 0xef,
154 0x0e, 0x2f, 0x51, 0x77, 0xed, 0xdd, 0xbc, 0xaf,
155 },
156 .pair_alg = 0,
157 .authenticated = false,
158 .passkey_info = {
159 .passkey = {
160 .action = BLE_SM_IOACT_NONE,
161 },
162 },
163 };
164 ble_sm_test_util_peer_lgcy_good(¶ms);
165 }
166
167 /**
168 * Legacy pairing
169 * Master: peer
170 * Pair algorithm: passkey entry
171 * Initiator IO capabilities: 4
172 * Responder IO capabilities: 0
173 * Bonding: true
174 * Initiator address type: BLE_ADDR_PUBLIC
175 * Responder address type: BLE_ADDR_PUBLIC
176 * Initiator key distribution: 7
177 * Responder key distribution: 7
178 */
TEST_CASE(ble_sm_lgcy_peer_pk_iio4_rio0_b1_iat0_rat0_ik7_rk7)179 TEST_CASE(ble_sm_lgcy_peer_pk_iio4_rio0_b1_iat0_rat0_ik7_rk7)
180 {
181 struct ble_sm_test_params params;
182
183 params = (struct ble_sm_test_params) {
184 .init_id_addr = {
185 0xe1, 0xfc, 0xda, 0xf4, 0xb7, 0x6c,
186 },
187 .resp_id_addr = {
188 0x33, 0x22, 0x11, 0x00, 0x45, 0x0a,
189 },
190 .pair_req = {
191 .io_cap = 0x04,
192 .oob_data_flag = 0x00,
193 .authreq = 0x05,
194 .max_enc_key_size = 0x10,
195 .init_key_dist = 0x07,
196 .resp_key_dist = 0x07,
197 },
198 .pair_rsp = {
199 .io_cap = 0x00,
200 .oob_data_flag = 0x00,
201 .authreq = 0x09,
202 .max_enc_key_size = 0x10,
203 .init_key_dist = 0x07,
204 .resp_key_dist = 0x07,
205 },
206 .confirm_req[0] = {
207 .value = {
208 0xa0, 0x10, 0x4a, 0xaa, 0x8b, 0x53, 0x78, 0xbb,
209 0xd2, 0xae, 0x71, 0x1f, 0x4e, 0x00, 0x70, 0x8b,
210 },
211 },
212 .confirm_rsp[0] = {
213 .value = {
214 0x62, 0xf3, 0xba, 0x0e, 0xe5, 0xbe, 0x2e, 0xd8,
215 0x25, 0xb2, 0xec, 0x4c, 0x28, 0x77, 0x28, 0x60,
216 },
217 },
218 .random_req[0] = {
219 .value = {
220 0x84, 0xcf, 0xe4, 0x04, 0x7d, 0xf3, 0xfc, 0xa1,
221 0x3f, 0x75, 0xd6, 0x5a, 0x7c, 0xb7, 0xa4, 0x39,
222 },
223 },
224 .random_rsp[0] = {
225 .value = {
226 0xef, 0x6a, 0x61, 0x6e, 0x02, 0x60, 0x7f, 0x5d,
227 0x7f, 0x0d, 0xa6, 0x3c, 0x06, 0x1a, 0x5d, 0xd6,
228 },
229 },
230 .enc_info_req = {
231 .ltk = {
232 0xad, 0x01, 0x6d, 0x76, 0xa9, 0xd0, 0x23, 0xc9,
233 0x40, 0x0c, 0xbf, 0x2a, 0x4c, 0x23, 0x31, 0xc5,
234 },
235 },
236 .master_id_req = {
237 .ediv = 0xa74f,
238 .rand_val = 0x81cab3fd00000000,
239 },
240 .id_info_req = {
241 .irk = {
242 0xef, 0x8d, 0xe2, 0x16, 0x4f, 0xec, 0x43, 0x0d,
243 0xbf, 0x5b, 0xdd, 0x34, 0xc0, 0x53, 0x1e, 0xb8,
244 },
245 },
246 .id_addr_info_req = {
247 .addr_type = 0,
248 .bd_addr = {
249 0x33, 0x22, 0x11, 0x00, 0x45, 0x0a,
250 },
251 },
252 .sign_info_req = {
253 .sig_key = {
254 0x60, 0x08, 0x49, 0x00, 0x6d, 0x76, 0x98, 0x73,
255 0x9c, 0x95, 0xc4, 0xd9, 0xe8, 0x3a, 0x69, 0xbb,
256 },
257 },
258 .enc_info_rsp = {
259 .ltk = {
260 0x5b, 0x73, 0x39, 0xd9, 0x51, 0x3d, 0x92, 0xa4,
261 0x34, 0x65, 0xa5, 0x70, 0x49, 0xbe, 0x11, 0x28,
262 },
263 },
264 .master_id_rsp = {
265 .ediv = 0x9705,
266 .rand_val = 0x592f1e8d00000000,
267 },
268 .id_info_rsp = {
269 .irk = {
270 0xeb, 0x8a, 0x06, 0xc4, 0x93, 0x51, 0x04, 0xb3,
271 0x8b, 0xbf, 0xe8, 0x1f, 0x0e, 0x96, 0x2a, 0x54,
272 },
273 },
274 .id_addr_info_rsp = {
275 .addr_type = 0,
276 .bd_addr = {
277 0xe1, 0xfc, 0xda, 0xf4, 0xb7, 0x6c,
278 },
279 },
280 .sign_info_rsp = {
281 .sig_key = {
282 0xc9, 0x9b, 0xf2, 0x75, 0xb7, 0x0d, 0xe8, 0x60,
283 0x3d, 0xf0, 0xd6, 0xa8, 0x16, 0xc5, 0x6c, 0x2a,
284 },
285 },
286 .stk = {
287 0xf2, 0x3c, 0x36, 0xc4, 0xa1, 0xfb, 0x5a, 0xa7,
288 0x96, 0x20, 0xe4, 0x29, 0xb7, 0x58, 0x22, 0x7a,
289 },
290 .pair_alg = 1,
291 .authenticated = true,
292 .passkey_info = {
293 .passkey = {
294 .action = BLE_SM_IOACT_DISP,
295 .passkey = 46128,
296 },
297 },
298 };
299 ble_sm_test_util_peer_lgcy_good(¶ms);
300 }
301
302 /**
303 * Legacy pairing
304 * Master: us
305 * Pair algorithm: just works
306 * Initiator IO capabilities: 3
307 * Responder IO capabilities: 3
308 * Bonding: true
309 * Initiator address type: BLE_ADDR_PUBLIC
310 * Responder address type: BLE_ADDR_RANDOM
311 * Initiator key distribution: 7
312 * Responder key distribution: 5
313 */
TEST_CASE(ble_sm_lgcy_us_jw_iio3_rio3_b1_iat0_rat1_ik7_rk5)314 TEST_CASE(ble_sm_lgcy_us_jw_iio3_rio3_b1_iat0_rat1_ik7_rk5)
315 {
316 struct ble_sm_test_params params;
317
318 params = (struct ble_sm_test_params) {
319 .init_id_addr = {
320 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a,
321 },
322 .resp_addr_type = BLE_ADDR_RANDOM,
323 .resp_id_addr = {
324 0x11, 0x22, 0x11, 0x22, 0x11, 0xcc,
325 },
326 .pair_req = {
327 .io_cap = 0x03,
328 .oob_data_flag = 0x00,
329 .authreq = 0x01,
330 .max_enc_key_size = 0x10,
331 .init_key_dist = 0x07,
332 .resp_key_dist = 0x07,
333 },
334 .pair_rsp = {
335 .io_cap = 0x03,
336 .oob_data_flag = 0x00,
337 .authreq = 0x01,
338 .max_enc_key_size = 0x10,
339 .init_key_dist = 0x07,
340 .resp_key_dist = 0x05,
341 },
342 .confirm_req[0] = {
343 .value = {
344 0x1c, 0xb6, 0x10, 0xea, 0x02, 0x08, 0x90, 0x64,
345 0xc7, 0xf8, 0xe5, 0x9c, 0xb4, 0x3a, 0x18, 0xca,
346 },
347 },
348 .confirm_rsp[0] = {
349 .value = {
350 0xb8, 0x6f, 0xd1, 0xc6, 0x74, 0x35, 0xa3, 0x94,
351 0x68, 0x2f, 0xf1, 0x4c, 0x78, 0x44, 0xe8, 0x0d,
352 },
353 },
354 .random_req[0] = {
355 .value = {
356 0x40, 0x48, 0x17, 0x4d, 0x42, 0xa0, 0xf8, 0xd5,
357 0xbf, 0x65, 0x67, 0xb8, 0x5e, 0x57, 0x38, 0xac,
358 },
359 },
360 .random_rsp[0] = {
361 .value = {
362 0x2c, 0xa1, 0xb1, 0xf5, 0x54, 0x9b, 0x43, 0xe9,
363 0xb0, 0x62, 0x6a, 0xb0, 0x02, 0xb8, 0x6c, 0xca,
364 },
365 },
366 .enc_info_req = {
367 .ltk = {
368 0x01, 0x15, 0xb6, 0x93, 0xc9, 0xff, 0xfe, 0x27,
369 0x02, 0x41, 0xfd, 0x7b, 0x0e, 0x31, 0xd4, 0xa6,
370 },
371 },
372 .master_id_req = {
373 .ediv = 0xe4fb,
374 .rand_val = 0x8eee76b100000000,
375 },
376 .sign_info_req = {
377 .sig_key = {
378 0x00, 0x2d, 0xf6, 0x3e, 0x5e, 0x0f, 0xd1, 0xe8,
379 0x4e, 0x5f, 0x61, 0x1c, 0x2c, 0x0b, 0xa5, 0x51,
380 },
381 },
382 .enc_info_rsp = {
383 .ltk = {
384 0x88, 0xbc, 0x95, 0x8d, 0xaa, 0x26, 0x8d, 0xd5,
385 0x18, 0xc9, 0x06, 0x70, 0xc2, 0x30, 0x56, 0x4c,
386 },
387 },
388 .master_id_rsp = {
389 .ediv = 0x4413,
390 .rand_val = 0xfad1c27300000000,
391 },
392 .id_info_rsp = {
393 .irk = {
394 0xef, 0x8d, 0xe2, 0x16, 0x4f, 0xec, 0x43, 0x0d,
395 0xbf, 0x5b, 0xdd, 0x34, 0xc0, 0x53, 0x1e, 0xb8,
396 },
397 },
398 .id_addr_info_rsp = {
399 .addr_type = 0,
400 .bd_addr = {
401 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a,
402 },
403 },
404 .sign_info_rsp = {
405 .sig_key = {
406 0x03, 0xad, 0xa4, 0xe1, 0x34, 0x76, 0x95, 0x54,
407 0xe5, 0x8f, 0xa4, 0x06, 0x72, 0xe6, 0xfc, 0x65,
408 },
409 },
410 .stk = {
411 0x31, 0x54, 0x42, 0x6c, 0x1c, 0x03, 0x36, 0x44,
412 0x0b, 0x72, 0x90, 0xa5, 0x1f, 0x79, 0x5b, 0xe9,
413 },
414 .pair_alg = 0,
415 .authenticated = false,
416 .passkey_info = {
417 .passkey = {
418 .action = BLE_SM_IOACT_NONE,
419 },
420 },
421 };
422 ble_sm_test_util_us_lgcy_good(¶ms);
423 }
424
425 /**
426 * Legacy pairing
427 * Master: us
428 * Pair algorithm: passkey entry
429 * Initiator IO capabilities: 4
430 * Responder IO capabilities: 2
431 * Bonding: true
432 * Initiator address type: BLE_ADDR_PUBLIC
433 * Responder address type: BLE_ADDR_RANDOM
434 * Initiator key distribution: 7
435 * Responder key distribution: 5
436 */
TEST_CASE(ble_sm_lgcy_us_pk_iio4_rio2_b1_iat0_rat1_ik7_rk5)437 TEST_CASE(ble_sm_lgcy_us_pk_iio4_rio2_b1_iat0_rat1_ik7_rk5)
438 {
439 struct ble_sm_test_params params;
440
441 params = (struct ble_sm_test_params) {
442 .init_id_addr = {
443 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a,
444 },
445 .resp_addr_type = BLE_ADDR_RANDOM,
446 .resp_id_addr = {
447 0x11, 0x22, 0x11, 0x22, 0x11, 0xcc,
448 },
449 .pair_req = {
450 .io_cap = 0x04,
451 .oob_data_flag = 0x00,
452 .authreq = 0x0d,
453 .max_enc_key_size = 0x10,
454 .init_key_dist = 0x07,
455 .resp_key_dist = 0x07,
456 },
457 .pair_rsp = {
458 .io_cap = 0x02,
459 .oob_data_flag = 0x00,
460 .authreq = 0x05,
461 .max_enc_key_size = 0x10,
462 .init_key_dist = 0x07,
463 .resp_key_dist = 0x05,
464 },
465 .confirm_req[0] = {
466 .value = {
467 0xb5, 0xd4, 0xc5, 0xe8, 0xef, 0xef, 0xd8, 0xd7,
468 0x2b, 0x14, 0x34, 0x35, 0x29, 0x18, 0xda, 0x12,
469 },
470 },
471 .confirm_rsp[0] = {
472 .value = {
473 0x1a, 0x03, 0x20, 0xda, 0x60, 0x21, 0x9b, 0x4b,
474 0x5d, 0x45, 0x90, 0x64, 0xe1, 0x24, 0x2c, 0xb6,
475 },
476 },
477 .random_req[0] = {
478 .value = {
479 0x45, 0xa3, 0x1a, 0x0b, 0xf6, 0x0f, 0x7c, 0xcf,
480 0x1a, 0xfb, 0xfc, 0x1a, 0xad, 0x62, 0x0e, 0x76,
481 },
482 },
483 .random_rsp[0] = {
484 .value = {
485 0x82, 0xbb, 0x9f, 0x67, 0xc4, 0x88, 0xcb, 0x58,
486 0xee, 0xf9, 0x34, 0x35, 0x23, 0xa3, 0xd0, 0x22,
487 },
488 },
489 .enc_info_req = {
490 .ltk = {
491 0xfa, 0x43, 0x8f, 0x1f, 0xe6, 0x2a, 0x94, 0x5b,
492 0x54, 0x89, 0x2b, 0x0f, 0xd7, 0x23, 0x77, 0x9e,
493 },
494 },
495 .master_id_req = {
496 .ediv = 0x88b3,
497 .rand_val = 0x7c970e18dec74560,
498 },
499 .sign_info_req = {
500 .sig_key = {
501 0x2e, 0x70, 0x3c, 0xbf, 0x20, 0xbe, 0x7d, 0x2d,
502 0xb3, 0x50, 0x46, 0x33, 0x4c, 0x20, 0x0e, 0xc8,
503 },
504 },
505 .enc_info_rsp = {
506 .ltk = {
507 0xc1, 0x64, 0x33, 0x10, 0x0f, 0x70, 0x2f, 0x9c,
508 0xe7, 0x31, 0xc5, 0x32, 0xdd, 0x98, 0x16, 0x75,
509 },
510 },
511 .master_id_rsp = {
512 .ediv = 0x1c19,
513 .rand_val = 0xef308872dc2a4cc2,
514 },
515 .id_info_rsp = {
516 .irk = {
517 0xef, 0x8d, 0xe2, 0x16, 0x4f, 0xec, 0x43, 0x0d,
518 0xbf, 0x5b, 0xdd, 0x34, 0xc0, 0x53, 0x1e, 0xb8,
519 },
520 },
521 .id_addr_info_rsp = {
522 .addr_type = 0,
523 .bd_addr = {
524 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a,
525 },
526 },
527 .sign_info_rsp = {
528 .sig_key = {
529 0xd7, 0x75, 0xfa, 0xed, 0xd7, 0xdd, 0x7b, 0xb3,
530 0xa4, 0x20, 0xea, 0x2f, 0x75, 0x60, 0xb1, 0x84,
531 },
532 },
533 .stk = {
534 0x9e, 0xe8, 0x35, 0x22, 0xb6, 0xbb, 0x54, 0x0d,
535 0x48, 0x1b, 0x25, 0xa0, 0xd8, 0xe2, 0xa5, 0x08,
536 },
537 .pair_alg = 1,
538 .authenticated = true,
539 .passkey_info = {
540 .passkey = {
541 .action = BLE_SM_IOACT_DISP,
542 .passkey = 46128,
543 },
544 },
545 };
546 ble_sm_test_util_us_lgcy_good(¶ms);
547 }
548
549 /**
550 * Legacy pairing
551 * Master: us
552 * Pair algorithm: out of band
553 * Initiator IO capabilities: 3
554 * Responder IO capabilities: 3
555 * Bonding: true
556 * Initiator address type: BLE_ADDR_PUBLIC
557 * Responder address type: BLE_ADDR_PUBLIC
558 * Initiator key distribution: 7
559 * Responder key distribution: 7
560 */
TEST_CASE(ble_sm_lgcy_us_ob_iio3_rio3_b1_iat0_rat0_ik7_rk7)561 TEST_CASE(ble_sm_lgcy_us_ob_iio3_rio3_b1_iat0_rat0_ik7_rk7)
562 {
563 struct ble_sm_test_params params;
564
565 params = (struct ble_sm_test_params) {
566 .init_id_addr = {
567 0x01, 0x01, 0x01, 0x07, 0x08, 0x01,
568 },
569 .resp_id_addr = {
570 0x66, 0x33, 0x22, 0x66, 0x55, 0x11,
571 },
572 .pair_req = {
573 .io_cap = 0x03,
574 .oob_data_flag = 0x01,
575 .authreq = 0x05,
576 .max_enc_key_size = 0x10,
577 .init_key_dist = 0x07,
578 .resp_key_dist = 0x07,
579 },
580 .pair_rsp = {
581 .io_cap = 0x03,
582 .oob_data_flag = 0x01,
583 .authreq = 0x05,
584 .max_enc_key_size = 0x10,
585 .init_key_dist = 0x07,
586 .resp_key_dist = 0x07,
587 },
588 .confirm_req[0] = {
589 .value = {
590 0x2c, 0x3f, 0x3e, 0xf5, 0x39, 0x50, 0x78, 0x4a,
591 0x3e, 0x14, 0x1a, 0x51, 0xfb, 0x8d, 0x6c, 0x10,
592 },
593 },
594 .confirm_rsp[0] = {
595 .value = {
596 0xa9, 0x5c, 0x18, 0xb1, 0xdb, 0x51, 0x53, 0xa5,
597 0xd3, 0xe7, 0x72, 0x17, 0xfb, 0xa8, 0xfb, 0xeb,
598 },
599 },
600 .random_req[0] = {
601 .value = {
602 0x40, 0x2f, 0x42, 0xba, 0x10, 0x7b, 0x22, 0x65,
603 0x84, 0xef, 0x63, 0xdf, 0x84, 0x7b, 0x04, 0xef,
604 },
605 },
606 .random_rsp[0] = {
607 .value = {
608 0x94, 0xdc, 0x3c, 0xef, 0x65, 0xf7, 0x99, 0x2e,
609 0x50, 0x29, 0x97, 0x2a, 0x57, 0xfd, 0xe6, 0x6a,
610 },
611 },
612 .enc_info_req = {
613 .ltk = {
614 0x8c, 0x8e, 0x57, 0xba, 0x17, 0xbb, 0x04, 0xb5,
615 0x16, 0xad, 0x31, 0x37, 0xf8, 0x3e, 0x4f, 0x21,
616 },
617 },
618 .master_id_req = {
619 .ediv = 0xaaa4,
620 .rand_val = 0xc0c830e300000000,
621 },
622 .id_info_req = {
623 .irk = {
624 0xef, 0x8d, 0xe2, 0x16, 0x4f, 0xec, 0x43, 0x0d,
625 0xbf, 0x5b, 0xdd, 0x34, 0xc0, 0x53, 0x1e, 0xb8,
626 },
627 },
628 .id_addr_info_req = {
629 .addr_type = 0,
630 .bd_addr = {
631 0x66, 0x33, 0x22, 0x66, 0x55, 0x11,
632 },
633 },
634 .sign_info_req = {
635 .sig_key = {
636 0x5a, 0xe4, 0x2b, 0x40, 0x3a, 0x34, 0x1d, 0x94,
637 0x56, 0x7d, 0xf4, 0x41, 0x23, 0x81, 0xc4, 0x11,
638 },
639 },
640 .enc_info_rsp = {
641 .ltk = {
642 0xa6, 0x8e, 0xa0, 0xa4, 0x02, 0x64, 0x4c, 0x09,
643 0x31, 0x25, 0x8a, 0x4f, 0x49, 0x35, 0xb0, 0x1f,
644 },
645 },
646 .master_id_rsp = {
647 .ediv = 0x57a3,
648 .rand_val = 0x8276af9000000000,
649 },
650 .id_info_rsp = {
651 .irk = {
652 0xef, 0x8d, 0xe2, 0x16, 0x4f, 0xec, 0x43, 0x0d,
653 0xbf, 0x5b, 0xdd, 0x34, 0xc0, 0x53, 0x1e, 0xb8,
654 },
655 },
656 .id_addr_info_rsp = {
657 .addr_type = 0,
658 .bd_addr = {
659 0x01, 0x01, 0x01, 0x07, 0x08, 0x01,
660 },
661 },
662 .sign_info_rsp = {
663 .sig_key = {
664 0x8e, 0xef, 0x53, 0x5c, 0x1b, 0x21, 0x67, 0x8d,
665 0x07, 0x5e, 0xaa, 0xe8, 0x41, 0xa9, 0x36, 0xcf,
666 },
667 },
668 .stk = {
669 0x4c, 0xd4, 0xa7, 0xee, 0x83, 0xcd, 0xd1, 0x9e,
670 0x84, 0xeb, 0xb8, 0xd2, 0xaf, 0x4a, 0x71, 0x2e,
671 },
672 .pair_alg = 2,
673 .authenticated = 1,
674 .passkey_info = {
675 .passkey = {
676 .action = BLE_SM_IOACT_OOB,
677 .oob = {
678 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
679 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16,
680 },
681 },
682 },
683 };
684 ble_sm_test_util_us_lgcy_good(¶ms);
685 }
686
687 /**
688 * Legacy pairing
689 * Master: peer
690 * Pair algorithm: passkey entry
691 * Initiator IO capabilities: 4
692 * Responder IO capabilities: 4
693 * Bonding: true
694 * Initiator address type: BLE_ADDR_PUBLIC
695 * Responder address type: BLE_ADDR_PUBLIC
696 * Initiator key distribution: 7
697 * Responder key distribution: 7
698 */
TEST_CASE(ble_sm_lgcy_peer_pk_iio4_rio4_b1_iat0_rat0_ik7_rk7)699 TEST_CASE(ble_sm_lgcy_peer_pk_iio4_rio4_b1_iat0_rat0_ik7_rk7)
700 {
701 struct ble_sm_test_params params;
702
703 params = (struct ble_sm_test_params) {
704 .init_id_addr = {
705 0xe1, 0xfc, 0xda, 0xf4, 0xb7, 0x6c,
706 },
707 .resp_id_addr = {
708 0x33, 0x22, 0x11, 0x00, 0x45, 0x0a,
709 },
710 .pair_req = {
711 .io_cap = 0x04,
712 .oob_data_flag = 0x00,
713 .authreq = 0x05,
714 .max_enc_key_size = 0x10,
715 .init_key_dist = 0x07,
716 .resp_key_dist = 0x07,
717 },
718 .pair_rsp = {
719 .io_cap = 0x04,
720 .oob_data_flag = 0x00,
721 .authreq = 0x0d,
722 .max_enc_key_size = 0x10,
723 .init_key_dist = 0x07,
724 .resp_key_dist = 0x07,
725 },
726 .confirm_req[0] = {
727 .value = {
728 0x93, 0x64, 0xb1, 0xb0, 0x07, 0x41, 0x22, 0xe7,
729 0x3e, 0x5a, 0x87, 0xf5, 0x1f, 0x25, 0x79, 0x11,
730 },
731 },
732 .confirm_rsp[0] = {
733 .value = {
734 0x2d, 0x40, 0x15, 0xc4, 0x21, 0xeb, 0xd5, 0x73,
735 0xc8, 0x5d, 0xb8, 0xb9, 0x45, 0x31, 0xd5, 0x58,
736 },
737 },
738 .random_req[0] = {
739 .value = {
740 0x8c, 0x2c, 0x3b, 0xf3, 0x90, 0xaa, 0x2e, 0xcf,
741 0xc7, 0x5b, 0xf6, 0xae, 0xb6, 0x4c, 0xc3, 0x61,
742 },
743 },
744 .random_rsp[0] = {
745 .value = {
746 0x7a, 0x94, 0x97, 0x0a, 0xbe, 0xaf, 0xc0, 0x6b,
747 0xd4, 0xf4, 0x04, 0xd1, 0x21, 0x46, 0x34, 0xf3,
748 },
749 },
750 .enc_info_req = {
751 .ltk = {
752 0x3a, 0x10, 0xd1, 0xab, 0x13, 0xee, 0x16, 0xee,
753 0xcf, 0xae, 0xf1, 0x63, 0xf0, 0x6f, 0xb0, 0x89,
754 },
755 },
756 .master_id_req = {
757 .ediv = 0xb634,
758 .rand_val = 0xa99ac2007b4278a8,
759 },
760 .id_info_req = {
761 .irk = {
762 0xef, 0x8d, 0xe2, 0x16, 0x4f, 0xec, 0x43, 0x0d,
763 0xbf, 0x5b, 0xdd, 0x34, 0xc0, 0x53, 0x1e, 0xb8,
764 },
765 },
766 .id_addr_info_req = {
767 .addr_type = 0,
768 .bd_addr = {
769 0x33, 0x22, 0x11, 0x00, 0x45, 0x0a,
770 },
771 },
772 .sign_info_req = {
773 .sig_key = {
774 0x51, 0x4b, 0x7b, 0x31, 0xf7, 0xa6, 0x8a, 0x60,
775 0x4f, 0x10, 0x04, 0x5f, 0xb8, 0xee, 0xf6, 0xb3,
776 },
777 },
778 .enc_info_rsp = {
779 .ltk = {
780 0xa1, 0x1d, 0xdd, 0xee, 0x85, 0xcb, 0xe0, 0x48,
781 0x1e, 0xdd, 0xa4, 0x9d, 0xed, 0x3f, 0x15, 0x17,
782 },
783 },
784 .master_id_rsp = {
785 .ediv = 0x7e06,
786 .rand_val = 0xe6077f688c5ca67,
787 },
788 .id_info_rsp = {
789 .irk = {
790 0xeb, 0x8a, 0x06, 0xc4, 0x93, 0x51, 0x04, 0xb3,
791 0x8b, 0xbf, 0xe8, 0x1f, 0x0e, 0x96, 0x2a, 0x54,
792 },
793 },
794 .id_addr_info_rsp = {
795 .addr_type = 0,
796 .bd_addr = {
797 0xe1, 0xfc, 0xda, 0xf4, 0xb7, 0x6c,
798 },
799 },
800 .sign_info_rsp = {
801 .sig_key = {
802 0x16, 0x7a, 0x2e, 0x9d, 0x43, 0x4d, 0x7b, 0x0b,
803 0x88, 0xe2, 0x11, 0xb0, 0x4d, 0xa1, 0xed, 0x08,
804 },
805 },
806 .stk = {
807 0x6c, 0x3e, 0x78, 0x47, 0xe8, 0x57, 0x9f, 0xe9,
808 0x3a, 0x8f, 0x0a, 0xbb, 0xd4, 0x60, 0xf6, 0x0d,
809 },
810 .pair_alg = 1,
811 .authenticated = true,
812 .passkey_info = {
813 .passkey = {
814 .action = BLE_SM_IOACT_INPUT,
815 .passkey = 449182,
816 },
817 },
818 };
819 ble_sm_test_util_peer_lgcy_good(¶ms);
820 }
821
TEST_SUITE(ble_sm_lgcy_test_suite)822 TEST_SUITE(ble_sm_lgcy_test_suite)
823 {
824 tu_suite_set_post_test_cb(ble_hs_test_util_post_test, NULL);
825
826 /*** No privacy. */
827
828 /* Peer as initiator. */
829 ble_sm_lgcy_peer_jw_iio4_rio3_b1_iat0_rat0_ik7_rk7();
830 ble_sm_lgcy_peer_pk_iio4_rio0_b1_iat0_rat0_ik7_rk7();
831 ble_sm_lgcy_peer_pk_iio4_rio4_b1_iat0_rat0_ik7_rk7();
832
833 /* Us as initiator. */
834 ble_sm_lgcy_us_jw_iio3_rio3_b1_iat0_rat1_ik7_rk5();
835 ble_sm_lgcy_us_pk_iio4_rio2_b1_iat0_rat1_ik7_rk5();
836 ble_sm_lgcy_us_ob_iio3_rio3_b1_iat0_rat0_ik7_rk7();
837 }
838
839 #endif
840