diff --git a/services/ble/Gap.cpp b/services/ble/Gap.cpp index 9e9501f9d..483048324 100644 --- a/services/ble/Gap.cpp +++ b/services/ble/Gap.cpp @@ -54,9 +54,9 @@ namespace services GapPairingObserver::Subject().AllowPairing(allow); } - void GapPairingDecorator::SetSecurityMode(SecurityMode mode, SecurityLevel level) + void GapPairingDecorator::SetSecurityMode(services::GapPairing::SecureConnectionMode secureConnectionMode, services::GapPairing::ManInTheMiddleMode mitmMode) { - GapPairingObserver::Subject().SetSecurityMode(mode, level); + GapPairingObserver::Subject().SetSecurityMode(secureConnectionMode, mitmMode); } void GapPairingDecorator::SetIoCapabilities(IoCapabilities caps) diff --git a/services/ble/Gap.hpp b/services/ble/Gap.hpp index cd26fc40f..1be97369f 100644 --- a/services/ble/Gap.hpp +++ b/services/ble/Gap.hpp @@ -128,13 +128,24 @@ namespace services level4, }; - virtual void Pair() = 0; + enum class SecureConnectionMode : uint8_t + { + notSupported, + supported, + enforced, + }; - virtual void AllowPairing(bool allow) = 0; + enum class ManInTheMiddleMode : uint8_t + { + disabled, + enforced, + notSupported + }; - virtual void SetSecurityMode(SecurityMode mode, SecurityLevel level) = 0; + virtual void Pair() = 0; + virtual void AllowPairing(bool allow) = 0; + virtual void SetSecurityMode(SecureConnectionMode secureConnectionMode, ManInTheMiddleMode mitmMode) = 0; virtual void SetIoCapabilities(IoCapabilities caps) = 0; - virtual void AuthenticateWithPasskey(uint32_t passkey) = 0; virtual void NumericComparisonConfirm(bool accept) = 0; }; @@ -154,7 +165,7 @@ namespace services // Implementation of GapPairing void Pair() override; void AllowPairing(bool allow) override; - void SetSecurityMode(SecurityMode mode, SecurityLevel level) override; + void SetSecurityMode(services::GapPairing::SecureConnectionMode secureConnectionMode, services::GapPairing::ManInTheMiddleMode mitmMode) override; void SetIoCapabilities(IoCapabilities caps) override; void AuthenticateWithPasskey(uint32_t passkey) override; void NumericComparisonConfirm(bool accept) override; diff --git a/services/ble/Gap.proto b/services/ble/Gap.proto index e98f3dd1c..a4b6f7719 100644 --- a/services/ble/Gap.proto +++ b/services/ble/Gap.proto @@ -70,24 +70,23 @@ message AdvertisementType AdvertisementTypeEnum type = 1; } -message SecurityModeAndLevel +message SecureConnectionAndManInTheMiddleMode { - enum SecurityLevelEnum + enum SecureConnectionModeEnum { - none = 0; - unauthenticatedPairing = 1; - authenticatedPairing = 2; - authenticatedPairingWithLE = 3; + notSupported = 0; + supported = 1; + enforced = 2; } - - enum SecurityModeEnum + enum ManInTheMiddleModeEnum { - mode1 = 0; - mode2 = 1; + disabledMode = 0; + enforcedMode = 1; + notSupportedMode = 2; } - SecurityModeEnum mode = 1; - SecurityLevelEnum level = 2; + SecureConnectionModeEnum secureConnectionMode = 1; + ManInTheMiddleModeEnum mitmMode = 2; } message AddressType @@ -192,9 +191,9 @@ service GapPeripheral rpc SetAdvertisementData(AdvertisementData) returns (Nothing) { option (method_id) = 3; } rpc SetScanResponseData(AdvertisementData) returns (Nothing) { option (method_id) = 4; } rpc SetAllowPairing(BoolValue) returns (Nothing) { option (method_id) = 5; } - rpc SetSecurityMode(SecurityModeAndLevel) returns (Nothing) { option (method_id) = 6; } rpc SetIoCapabilities(IoCapabilities) returns (Nothing) { option (method_id) = 7; } rpc RemoveAllBonds(Nothing) returns (Nothing) { option (method_id) = 8; } + rpc SetSecurityMode(SecureConnectionAndManInTheMiddleMode) returns (Nothing) { option (method_id) = 11; } // Allowed states: advertising rpc GetResolvableAddress(Nothing) returns (Nothing) { option (method_id) = 9; } @@ -225,7 +224,6 @@ service GapCentral // Allowed states: connected rpc Pair(Nothing) returns (Nothing) { option (method_id) = 6; } - rpc SetSecurityMode(SecurityModeAndLevel) returns (Nothing) { option (method_id) = 7; } rpc SetIoCapabilities(IoCapabilities) returns (Nothing) { option (method_id) = 8; } rpc AuthenticateWithPasskey(UInt32Value) returns (Nothing) { option (method_id) = 9; } rpc NumericComparisonConfirm(BoolValue) returns (Nothing) { option (method_id) = 10; } @@ -233,6 +231,7 @@ service GapCentral rpc SetDeviceDiscoveryFilter(DeviceDiscoveryFilter) returns (Nothing) { option (method_id) = 12; } rpc ResolvePrivateAddress(Address) returns (Nothing) { option (method_id) = 13; } rpc IsDeviceBonded(PeerNodeParameters) returns (Nothing) { option (method_id) = 14; } + rpc SetSecurityMode(SecureConnectionAndManInTheMiddleMode) returns (Nothing) { option (method_id) = 15; } } service GapPeripheralResponse diff --git a/services/ble/test_doubles/GapPairingMock.hpp b/services/ble/test_doubles/GapPairingMock.hpp index efd0f9a9b..17b7de84d 100644 --- a/services/ble/test_doubles/GapPairingMock.hpp +++ b/services/ble/test_doubles/GapPairingMock.hpp @@ -12,7 +12,7 @@ namespace services public: MOCK_METHOD(void, Pair, ()); MOCK_METHOD(void, AllowPairing, (bool allow)); - MOCK_METHOD(void, SetSecurityMode, (SecurityMode mode, SecurityLevel level)); + MOCK_METHOD(void, SetSecurityMode, (SecureConnectionMode secureConnectionMode, ManInTheMiddleMode mitmMode)); MOCK_METHOD(void, SetIoCapabilities, (IoCapabilities caps)); MOCK_METHOD(void, AuthenticateWithPasskey, (uint32_t passkey)); MOCK_METHOD(void, NumericComparisonConfirm, (bool accept));