sm: verify LTK before encrypting connection when ENABLE_LE_CENTRAL_AUTO_ENCRYPTION is defined and IRK lookup succeeds

This commit is contained in:
Matthias Ringwald 2019-12-13 12:44:28 +01:00
parent d61023b23c
commit f53ec64947

View File

@ -4102,17 +4102,20 @@ void sm_request_pairing(hci_con_handle_t con_handle){
// used as a trigger to start central/master/initiator security procedures
if (sm_conn->sm_engine_state == SM_INITIATOR_CONNECTED){
uint8_t ltk[16];
bool have_ltk;
switch (sm_conn->sm_irk_lookup_state){
case IRK_LOOKUP_SUCCEEDED:
#ifndef ENABLE_LE_CENTRAL_AUTO_ENCRYPTION
le_device_db_encryption_get(sm_conn->sm_le_db_index, NULL, NULL, ltk, NULL, NULL, NULL, NULL);
log_info("have ltk %u", !sm_is_null_key(ltk));
// trigger 'pairing complete' event on encryption change
sm_conn->sm_pairing_requested = 1;
sm_conn->sm_engine_state = SM_INITIATOR_PH0_HAS_LTK;
break;
have_ltk = !sm_is_null_key(ltk);
log_info("have ltk %u", have_ltk);
if (have_ltk){
sm_conn->sm_pairing_requested = 1;
sm_conn->sm_engine_state = SM_INITIATOR_PH0_HAS_LTK;
break;
}
#endif
/* explicit fall-through */
/* explicit fall-through */
case IRK_LOOKUP_FAILED:
sm_conn->sm_engine_state = SM_INITIATOR_PH1_W2_SEND_PAIRING_REQUEST;