mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-01-26 21:35:16 +00:00
sm: use LE Random for initiator/jw_nk
This commit is contained in:
parent
945888f5ea
commit
f1c1783e41
36
src/ble/sm.c
36
src/ble/sm.c
@ -1317,6 +1317,7 @@ static inline void sm_pdu_received_in_wrong_state(sm_connection_t * sm_conn){
|
|||||||
|
|
||||||
static void sm_sc_prepare_dhkey_check(sm_connection_t * sm_conn);
|
static void sm_sc_prepare_dhkey_check(sm_connection_t * sm_conn);
|
||||||
static int sm_passkey_used(stk_generation_method_t method);
|
static int sm_passkey_used(stk_generation_method_t method);
|
||||||
|
static int sm_just_works_or_numeric_comparison(stk_generation_method_t method);
|
||||||
|
|
||||||
static void sm_sc_state_after_receiving_random(sm_connection_t * sm_conn){
|
static void sm_sc_state_after_receiving_random(sm_connection_t * sm_conn){
|
||||||
if (sm_conn->sm_role){
|
if (sm_conn->sm_role){
|
||||||
@ -1937,6 +1938,16 @@ static void sm_run(void){
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef ENABLE_LE_SECURE_CONNECTIONS
|
#ifdef ENABLE_LE_SECURE_CONNECTIONS
|
||||||
|
case SM_SC_W2_GET_RANDOM_A:
|
||||||
|
sm_random_start(connection);
|
||||||
|
connection->sm_engine_state = SM_SC_W4_GET_RANDOM_A;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SM_SC_W2_GET_RANDOM_B:
|
||||||
|
sm_random_start(connection);
|
||||||
|
connection->sm_engine_state = SM_SC_W4_GET_RANDOM_B;
|
||||||
|
break;
|
||||||
|
|
||||||
case SM_SC_W2_CMAC_FOR_CONFIRMATION:
|
case SM_SC_W2_CMAC_FOR_CONFIRMATION:
|
||||||
if (!sm_cmac_ready()) break;
|
if (!sm_cmac_ready()) break;
|
||||||
|
|
||||||
@ -2604,6 +2615,24 @@ static void sm_handle_random_result(uint8_t * data){
|
|||||||
sm_connection_t * connection = (sm_connection_t *) sm_random_context;
|
sm_connection_t * connection = (sm_connection_t *) sm_random_context;
|
||||||
if (!connection) return;
|
if (!connection) return;
|
||||||
switch (connection->sm_engine_state){
|
switch (connection->sm_engine_state){
|
||||||
|
#ifdef ENABLE_LE_SECURE_CONNECTIONS
|
||||||
|
case SM_SC_W4_GET_RANDOM_A:
|
||||||
|
memcpy(&setup->sm_local_nonce[0], data, 8);
|
||||||
|
connection->sm_engine_state = SM_SC_W2_GET_RANDOM_B;
|
||||||
|
break;
|
||||||
|
case SM_SC_W4_GET_RANDOM_B:
|
||||||
|
memcpy(&setup->sm_local_nonce[8], data, 8);
|
||||||
|
// TODO: next state
|
||||||
|
|
||||||
|
// initiator & jw/nc -> send pairing random
|
||||||
|
if (connection->sm_role == 0 && sm_just_works_or_numeric_comparison(setup->sm_stk_generation_method)){
|
||||||
|
connection->sm_engine_state = SM_SC_SEND_PAIRING_RANDOM;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
log_error("SM_SC_W4_GET_RANDOM_B: next state not defined");
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
case SM_PH2_W4_RANDOM_TK:
|
case SM_PH2_W4_RANDOM_TK:
|
||||||
{
|
{
|
||||||
// map random to 0-999999 without speding much cycles on a modulus operation
|
// map random to 0-999999 without speding much cycles on a modulus operation
|
||||||
@ -3107,12 +3136,11 @@ static void sm_pdu_handler(uint8_t packet_type, hci_con_handle_t con_handle, uin
|
|||||||
sm_conn->sm_engine_state = SM_SC_W2_CMAC_FOR_CONFIRMATION;
|
sm_conn->sm_engine_state = SM_SC_W2_CMAC_FOR_CONFIRMATION;
|
||||||
} else {
|
} else {
|
||||||
// initiator
|
// initiator
|
||||||
|
|
||||||
if (sm_just_works_or_numeric_comparison(setup->sm_stk_generation_method)){
|
if (sm_just_works_or_numeric_comparison(setup->sm_stk_generation_method)){
|
||||||
sm_sc_generate_local_nonce(sm_conn);
|
sm_conn->sm_engine_state = SM_SC_W2_GET_RANDOM_A;
|
||||||
|
} else {
|
||||||
|
sm_conn->sm_engine_state = SM_SC_SEND_PAIRING_RANDOM;
|
||||||
}
|
}
|
||||||
|
|
||||||
sm_conn->sm_engine_state = SM_SC_SEND_PAIRING_RANDOM;
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -305,6 +305,10 @@ typedef enum {
|
|||||||
// LE Secure Connections
|
// LE Secure Connections
|
||||||
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_W4_GET_RANDOM_A,
|
||||||
|
SM_SC_W2_GET_RANDOM_B,
|
||||||
|
SM_SC_W4_GET_RANDOM_B,
|
||||||
SM_SC_W2_CMAC_FOR_CONFIRMATION,
|
SM_SC_W2_CMAC_FOR_CONFIRMATION,
|
||||||
SM_SC_W4_CMAC_FOR_CONFIRMATION,
|
SM_SC_W4_CMAC_FOR_CONFIRMATION,
|
||||||
SM_SC_SEND_CONFIRMATION,
|
SM_SC_SEND_CONFIRMATION,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user