sm: skip calculation of h6 without classic

This commit is contained in:
Matthias Ringwald 2020-10-08 14:07:03 +02:00
parent 1159d23955
commit a756d52b32

View File

@ -1520,12 +1520,12 @@ static void sm_sc_cmac_done(uint8_t * hash){
sm_conn->sm_engine_state = SM_INITIATOR_PH3_SEND_START_ENCRYPTION; sm_conn->sm_engine_state = SM_INITIATOR_PH3_SEND_START_ENCRYPTION;
} }
break; break;
#ifdef ENABLE_CLASSIC
case SM_SC_W4_CALCULATE_H6_ILK: case SM_SC_W4_CALCULATE_H6_ILK:
(void)memcpy(setup->sm_t, hash, 16); (void)memcpy(setup->sm_t, hash, 16);
sm_conn->sm_engine_state = SM_SC_W2_CALCULATE_H6_BR_EDR_LINK_KEY; sm_conn->sm_engine_state = SM_SC_W2_CALCULATE_H6_BR_EDR_LINK_KEY;
break; break;
case SM_SC_W4_CALCULATE_H6_BR_EDR_LINK_KEY: case SM_SC_W4_CALCULATE_H6_BR_EDR_LINK_KEY:
#ifdef ENABLE_CLASSIC
reverse_128(hash, setup->sm_t); reverse_128(hash, setup->sm_t);
link_key_type = sm_conn->sm_connection_authenticated ? link_key_type = sm_conn->sm_connection_authenticated ?
AUTHENTICATED_COMBINATION_KEY_GENERATED_FROM_P256 : UNAUTHENTICATED_COMBINATION_KEY_GENERATED_FROM_P256; AUTHENTICATED_COMBINATION_KEY_GENERATED_FROM_P256 : UNAUTHENTICATED_COMBINATION_KEY_GENERATED_FROM_P256;
@ -2345,6 +2345,7 @@ static void sm_run(void){
connection->sm_engine_state = SM_SC_W4_CALCULATE_G2; connection->sm_engine_state = SM_SC_W4_CALCULATE_G2;
g2_calculate(connection); g2_calculate(connection);
break; break;
#ifdef ENABLE_CLASSIC
case SM_SC_W2_CALCULATE_H6_ILK: case SM_SC_W2_CALCULATE_H6_ILK:
if (!sm_cmac_ready()) break; if (!sm_cmac_ready()) break;
connection->sm_engine_state = SM_SC_W4_CALCULATE_H6_ILK; connection->sm_engine_state = SM_SC_W4_CALCULATE_H6_ILK;
@ -2356,6 +2357,7 @@ static void sm_run(void){
h6_calculate_br_edr_link_key(connection); h6_calculate_br_edr_link_key(connection);
break; break;
#endif #endif
#endif
#ifdef ENABLE_LE_CENTRAL #ifdef ENABLE_LE_CENTRAL
// initiator side // initiator side
@ -2933,9 +2935,12 @@ static void sm_handle_encryption_result_enc_csrk(void *arg){
// slave -> receive master keys // slave -> receive master keys
connection->sm_engine_state = SM_PH3_RECEIVE_KEYS; connection->sm_engine_state = SM_PH3_RECEIVE_KEYS;
} else { } else {
if (setup->sm_use_secure_connections && (setup->sm_key_distribution_received_set & SM_KEYDIST_FLAG_IDENTITY_ADDRESS_INFORMATION)){ #ifdef ENABLE_CLASSIC
if (setup->sm_use_secure_connections && (setup->sm_key_distribution_received_set & SM_KEYDIST_FLAG_IDENTITY_ADDRESS_INFORMATION)){
connection->sm_engine_state = SM_SC_W2_CALCULATE_H6_ILK; connection->sm_engine_state = SM_SC_W2_CALCULATE_H6_ILK;
} else { } else
#endif
{
sm_master_pairing_success(connection); sm_master_pairing_success(connection);
} }
} }
@ -3986,9 +3991,12 @@ static void sm_pdu_handler(uint8_t packet_type, hci_con_handle_t con_handle, uin
sm_key_distribution_handle_all_received(sm_conn); sm_key_distribution_handle_all_received(sm_conn);
if (IS_RESPONDER(sm_conn->sm_role)){ if (IS_RESPONDER(sm_conn->sm_role)){
#ifdef ENABLE_CLASSIC
if (setup->sm_use_secure_connections && (setup->sm_key_distribution_received_set & SM_KEYDIST_FLAG_IDENTITY_ADDRESS_INFORMATION)){ if (setup->sm_use_secure_connections && (setup->sm_key_distribution_received_set & SM_KEYDIST_FLAG_IDENTITY_ADDRESS_INFORMATION)){
sm_conn->sm_engine_state = SM_SC_W2_CALCULATE_H6_ILK; sm_conn->sm_engine_state = SM_SC_W2_CALCULATE_H6_ILK;
} else { } else
#endif
{
sm_conn->sm_engine_state = SM_RESPONDER_IDLE; sm_conn->sm_engine_state = SM_RESPONDER_IDLE;
sm_notify_client_status_reason(sm_conn, ERROR_CODE_SUCCESS, 0); sm_notify_client_status_reason(sm_conn, ERROR_CODE_SUCCESS, 0);
sm_done_for_handle(sm_conn->sm_handle); sm_done_for_handle(sm_conn->sm_handle);