diff --git a/features/FEATURE_BLE/ble/SecurityManager.h b/features/FEATURE_BLE/ble/SecurityManager.h index e0c09ff178..136daf2d7a 100644 --- a/features/FEATURE_BLE/ble/SecurityManager.h +++ b/features/FEATURE_BLE/ble/SecurityManager.h @@ -480,6 +480,9 @@ public: virtual void confirmationRequest(Gap::Handle_t handle) { (void)handle; }; + virtual void acceptPairingRequest(Gap::Handle_t handle) { + (void)handle; + }; }; /* legacy compatibility with old callbacks (from both sides, so combination of new and old works) */ diff --git a/features/FEATURE_BLE/ble/pal/PalSm.h b/features/FEATURE_BLE/ble/pal/PalSm.h index 435b36546a..9d26a3e789 100644 --- a/features/FEATURE_BLE/ble/pal/PalSm.h +++ b/features/FEATURE_BLE/ble/pal/PalSm.h @@ -47,6 +47,7 @@ struct bonded_list_entry_t { ediv_t ediv; rand_t rand; ltk_t ltk; + csrk_t csrk; }; struct resolving_list_entry_t { @@ -104,11 +105,13 @@ public: /* feature support */ + /* do we need this? virtual ble_error_t get_simple_pairing_mode(bool *enabled) = 0; virtual ble_error_t set_simple_pairing_mode(bool enabled) = 0; + */ - virtual ble_error_t set_secure_connections_support(bool enabled) = 0; - virtual ble_error_t get_secure_connections_support(bool *enabled) = 0; + virtual ble_error_t set_secure_connections_support(bool enabled, bool secure_connections_only = false) = 0; + virtual ble_error_t get_secure_connections_support(bool *enabled, bool *secure_connections_only) = 0; virtual ble_error_t get_encryption_key_size(connection_handle_t, uint8_t *size) = 0; @@ -116,7 +119,9 @@ public: virtual ble_error_t set_security_settings(bool bondable = true, SecurityIOCapabilities_t iocaps = IO_CAPS_NONE, - bool send_keypresses = false) = 0; + bool authentication_required = true, + bool send_keypresses = false, + bool pairing_authorisation_required = false) = 0; virtual ble_error_t set_oob_data_usage(Gap::Handle_t connectionHandle, bool useOOB, bool OOBProvidesMITM) = 0; @@ -127,16 +132,22 @@ public: virtual ble_error_t get_encryption_status(connection_handle_t handle, LinkSecurityStatus_t *mode) = 0; + virtual ble_error_t request_pairing(bool authentication_required = true) = 0; + virtual ble_error_t accept_pairing_request(bool accept = true, bool authentication_required = true) = 0; + + virtual ble_error_t request_authorisation() = 0; + virtual ble_error_t accept_authorisation_request(bool accept = true) = 0; + /* MITM */ virtual ble_error_t confirmation_entered(connection_handle_t address, bool confirmation) = 0; - virtual ble_error_t passkey_entered(connection_handle_t, PasskeyNum_t passkey) = 0; + virtual ble_error_t passkey_entered(connection_handle_t, Passkey_t passkey) = 0; virtual ble_error_t send_keypress_notification(connection_handle_t, Keypress_t keypress) = 0; virtual ble_error_t set_oob(connection_handle_t handle, c192_t*, r192_t*) = 0; - virtual ble_error_t set_extended_oob(connection_handle_t handle, c192_t*, r192_t*,c256_t*, r256_t*) = 0; + virtual ble_error_t set_extended_oob(connection_handle_t handle, c192_t*, r192_t*, c256_t*, r256_t*) = 0; virtual ble_error_t get_local_oob_data(connection_handle_t handle, c192_t*, r192_t*) = 0; - virtual ble_error_t get_local_extended_oob_data(connection_handle_t handle, c192_t*, r192_t*,c256_t*, r256_t*) = 0; + virtual ble_error_t get_local_extended_oob_data(connection_handle_t handle, c192_t*, r192_t*, c256_t*, r256_t*) = 0; /* Entry points for the underlying stack to report events back to the user. */ public: diff --git a/features/FEATURE_BLE/source/generic/GenericSecurityManager.cpp b/features/FEATURE_BLE/source/generic/GenericSecurityManager.cpp index d11c31ad57..88e31af399 100644 --- a/features/FEATURE_BLE/source/generic/GenericSecurityManager.cpp +++ b/features/FEATURE_BLE/source/generic/GenericSecurityManager.cpp @@ -34,7 +34,7 @@ public: (void)requireMITM; loadState(); pal.set_security_settings(enableBonding, iocaps); - pal.set_passkey(passkey, true); + pal.set_passkey(passkey); return BLE_ERROR_NONE; }