sm: generate random number to display for SC with PK_RESP_INPUT generation mode

This commit is contained in:
Matthias Ringwald 2016-06-09 23:19:11 +02:00
parent 2e6217a04c
commit b41539d54f

View File

@ -2675,11 +2675,15 @@ static void sm_handle_random_result(uint8_t * data){
if (connection->sm_role){ if (connection->sm_role){
connection->sm_engine_state = SM_RESPONDER_PH1_SEND_PAIRING_RESPONSE; connection->sm_engine_state = SM_RESPONDER_PH1_SEND_PAIRING_RESPONSE;
} else { } else {
connection->sm_engine_state = SM_PH1_W4_USER_RESPONSE; if (setup->sm_use_secure_connections){
sm_trigger_user_response(connection); connection->sm_engine_state = SM_SC_SEND_PUBLIC_KEY_COMMAND;
// response_idle == nothing <--> sm_trigger_user_response() did not require response } else {
if (setup->sm_user_response == SM_USER_RESPONSE_IDLE){ connection->sm_engine_state = SM_PH1_W4_USER_RESPONSE;
connection->sm_engine_state = SM_PH2_C1_GET_RANDOM_A; sm_trigger_user_response(connection);
// response_idle == nothing <--> sm_trigger_user_response() did not require response
if (setup->sm_user_response == SM_USER_RESPONSE_IDLE){
connection->sm_engine_state = SM_PH2_C1_GET_RANDOM_A;
}
} }
} }
return; return;
@ -3031,6 +3035,13 @@ static void sm_pdu_handler(uint8_t packet_type, hci_con_handle_t con_handle, uin
sm_conn->sm_engine_state = SM_GENERAL_SEND_PAIRING_FAILED; sm_conn->sm_engine_state = SM_GENERAL_SEND_PAIRING_FAILED;
break; break;
} }
// generate random number first, if we need to show passkey
if (setup->sm_stk_generation_method == PK_RESP_INPUT){
sm_conn->sm_engine_state = SM_PH2_GET_RANDOM_TK;
break;
}
#ifdef ENABLE_LE_SECURE_CONNECTIONS #ifdef ENABLE_LE_SECURE_CONNECTIONS
if (setup->sm_use_secure_connections){ if (setup->sm_use_secure_connections){
// SC Numeric Comparison will trigger user response after public keys & nonces have been exchanged // SC Numeric Comparison will trigger user response after public keys & nonces have been exchanged
@ -3046,11 +3057,6 @@ static void sm_pdu_handler(uint8_t packet_type, hci_con_handle_t con_handle, uin
break; break;
} }
#endif #endif
// generate random number first, if we need to show passkey
if (setup->sm_stk_generation_method == PK_RESP_INPUT){
sm_conn->sm_engine_state = SM_PH2_GET_RANDOM_TK;
break;
}
sm_conn->sm_engine_state = SM_PH1_W4_USER_RESPONSE; sm_conn->sm_engine_state = SM_PH1_W4_USER_RESPONSE;
sm_trigger_user_response(sm_conn); sm_trigger_user_response(sm_conn);
// response_idle == nothing <--> sm_trigger_user_response() did not require response // response_idle == nothing <--> sm_trigger_user_response() did not require response