mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-02-26 00:40:38 +00:00
Merge branch 'develop'
This commit is contained in:
commit
67a4e08d75
25
src/ble/sm.c
25
src/ble/sm.c
@ -1961,7 +1961,18 @@ static void sm_run(void){
|
|||||||
sm_connection->sm_engine_state = SM_INITIATOR_PH0_SEND_START_ENCRYPTION;
|
sm_connection->sm_engine_state = SM_INITIATOR_PH0_SEND_START_ENCRYPTION;
|
||||||
break;
|
break;
|
||||||
case SM_RESPONDER_PH0_RECEIVED_LTK_REQUEST:
|
case SM_RESPONDER_PH0_RECEIVED_LTK_REQUEST:
|
||||||
|
sm_reset_setup();
|
||||||
|
sm_start_calculating_ltk_from_ediv_and_rand(sm_connection);
|
||||||
|
break;
|
||||||
|
case SM_INITIATOR_PH1_W2_SEND_PAIRING_REQUEST:
|
||||||
|
sm_reset_setup();
|
||||||
|
sm_init_setup(sm_connection);
|
||||||
|
sm_timeout_start(sm_connection);
|
||||||
|
sm_connection->sm_engine_state = SM_INITIATOR_PH1_SEND_PAIRING_REQUEST;
|
||||||
|
break;
|
||||||
|
|
||||||
#ifdef ENABLE_LE_SECURE_CONNECTIONS
|
#ifdef ENABLE_LE_SECURE_CONNECTIONS
|
||||||
|
case SM_SC_RECEIVED_LTK_REQUEST:
|
||||||
switch (sm_connection->sm_irk_lookup_state){
|
switch (sm_connection->sm_irk_lookup_state){
|
||||||
case IRK_LOOKUP_SUCCEEDED:
|
case IRK_LOOKUP_SUCCEEDED:
|
||||||
// assuming Secure Connection, we have a stored LTK and the EDIV/RAND are null
|
// assuming Secure Connection, we have a stored LTK and the EDIV/RAND are null
|
||||||
@ -1989,14 +2000,8 @@ static void sm_run(void){
|
|||||||
done = 0;
|
done = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
#endif
|
#endif
|
||||||
break;
|
|
||||||
case SM_INITIATOR_PH1_W2_SEND_PAIRING_REQUEST:
|
|
||||||
sm_reset_setup();
|
|
||||||
sm_init_setup(sm_connection);
|
|
||||||
sm_timeout_start(sm_connection);
|
|
||||||
sm_connection->sm_engine_state = SM_INITIATOR_PH1_SEND_PAIRING_REQUEST;
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
done = 0;
|
done = 0;
|
||||||
break;
|
break;
|
||||||
@ -2920,17 +2925,17 @@ static void sm_event_packet_handler (uint8_t packet_type, uint16_t channel, uint
|
|||||||
|
|
||||||
// store rand and ediv
|
// store rand and ediv
|
||||||
reverse_64(&packet[5], sm_conn->sm_local_rand);
|
reverse_64(&packet[5], sm_conn->sm_local_rand);
|
||||||
sm_conn->sm_local_ediv = little_endian_read_16(packet, 13);
|
sm_conn->sm_local_ediv = little_endian_read_16(packet, 13);
|
||||||
|
|
||||||
// For Legacy Pairing (<=> EDIV != 0 || RAND != NULL), we need to recalculated our LTK as a
|
// For Legacy Pairing (<=> EDIV != 0 || RAND != NULL), we need to recalculated our LTK as a
|
||||||
// potentially stored LTK is from the master
|
// potentially stored LTK is from the master
|
||||||
if (sm_conn->sm_local_ediv != 0 || !sm_is_null_random(sm_conn->sm_local_rand)){
|
if (sm_conn->sm_local_ediv != 0 || !sm_is_null_random(sm_conn->sm_local_rand)){
|
||||||
sm_start_calculating_ltk_from_ediv_and_rand(sm_conn);
|
sm_conn->sm_engine_state = SM_RESPONDER_PH0_RECEIVED_LTK_REQUEST;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef ENABLE_LE_SECURE_CONNECTIONS
|
#ifdef ENABLE_LE_SECURE_CONNECTIONS
|
||||||
sm_conn->sm_engine_state = SM_RESPONDER_PH0_RECEIVED_LTK_REQUEST;
|
sm_conn->sm_engine_state = SM_SC_RECEIVED_LTK_REQUEST;
|
||||||
#else
|
#else
|
||||||
log_info("LTK Request: ediv & random are empty, but LE Secure Connections not supported");
|
log_info("LTK Request: ediv & random are empty, but LE Secure Connections not supported");
|
||||||
sm_conn->sm_engine_state = SM_RESPONDER_PH0_SEND_LTK_REQUESTED_NEGATIVE_REPLY;
|
sm_conn->sm_engine_state = SM_RESPONDER_PH0_SEND_LTK_REQUESTED_NEGATIVE_REPLY;
|
||||||
|
@ -303,6 +303,7 @@ typedef enum {
|
|||||||
SM_INITIATOR_PH3_SEND_START_ENCRYPTION,
|
SM_INITIATOR_PH3_SEND_START_ENCRYPTION,
|
||||||
|
|
||||||
// LE Secure Connections
|
// LE Secure Connections
|
||||||
|
SM_SC_RECEIVED_LTK_REQUEST,
|
||||||
SM_SC_SEND_PUBLIC_KEY_COMMAND,
|
SM_SC_SEND_PUBLIC_KEY_COMMAND,
|
||||||
SM_SC_W4_PUBLIC_KEY_COMMAND,
|
SM_SC_W4_PUBLIC_KEY_COMMAND,
|
||||||
SM_SC_W2_GET_RANDOM_A,
|
SM_SC_W2_GET_RANDOM_A,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user