From 8980298abd5f3615ed3d33eb0574b5490c556f19 Mon Sep 17 00:00:00 2001 From: Matthias Ringwald Date: Wed, 5 Oct 2022 14:20:57 +0200 Subject: [PATCH] sm: add distributed key validation ability --- src/ble/sm.c | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/src/ble/sm.c b/src/ble/sm.c index db0e03b80..d2d6ed25e 100644 --- a/src/ble/sm.c +++ b/src/ble/sm.c @@ -1530,8 +1530,24 @@ static void sm_store_bonding_information(sm_connection_t * sm_conn){ } } +static void sm_pairing_error(sm_connection_t * sm_conn, uint8_t reason){ + sm_conn->sm_pairing_failed_reason = reason; + sm_conn->sm_engine_state = SM_GENERAL_SEND_PAIRING_FAILED; +} + +static uint8_t sm_key_distribution_validate_received(sm_connection_t * sm_conn){ + return 0; +} + static void sm_key_distribution_handle_all_received(sm_connection_t * sm_conn){ + // abort pairing if received keys are not valid + uint8_t reason = sm_key_distribution_validate_received(sm_conn); + if (reason != 0){ + sm_pairing_error(sm_conn, reason); + return; + } + // only store pairing information if both sides are bondable, i.e., the bonadble flag is set bool bonding_enabled = (sm_pairing_packet_get_auth_req(setup->sm_m_preq) & sm_pairing_packet_get_auth_req(setup->sm_s_pres) @@ -1544,11 +1560,6 @@ static void sm_key_distribution_handle_all_received(sm_connection_t * sm_conn){ } } -static void sm_pairing_error(sm_connection_t * sm_conn, uint8_t reason){ - sm_conn->sm_pairing_failed_reason = reason; - sm_conn->sm_engine_state = SM_GENERAL_SEND_PAIRING_FAILED; -} - static inline void sm_pdu_received_in_wrong_state(sm_connection_t * sm_conn){ sm_pairing_error(sm_conn, SM_REASON_UNSPECIFIED_REASON); }