Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4cfbc6e0 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "Cert: Add enforce_security_policy API to facade_configuration_api"

parents 9a2d1a7a 5d78348f
Loading
Loading
Loading
Loading
+19 −0
Original line number Diff line number Diff line
@@ -168,6 +168,13 @@ class SecurityModuleFacadeService : public SecurityModuleFacade::Service, public
    return ::grpc::Status::OK;
  }

  ::grpc::Status FetchEnforceSecurityPolicyEvents(
      ::grpc::ServerContext* context,
      const ::google::protobuf::Empty* request,
      ::grpc::ServerWriter<EnforceSecurityPolicyMsg>* writer) override {
    return enforce_security_policy_events_.RunLoop(context, writer);
  }

  ::grpc::Status EnforceSecurityPolicy(
      ::grpc::ServerContext* context,
      const SecurityPolicyMessage* request,
@@ -176,6 +183,10 @@ class SecurityModuleFacadeService : public SecurityModuleFacade::Service, public
    ASSERT(hci::Address::FromString(request->address().address().address(), peer));
    hci::AddressType peer_type = static_cast<hci::AddressType>(request->address().type());
    hci::AddressWithType peer_with_type(peer, peer_type);
    l2cap::classic::SecurityEnforcementInterface::ResultCallback callback =
        security_handler_->BindOnceOn(this, &SecurityModuleFacadeService::EnforceSecurityPolicyEvent);
    security_module_->GetFacadeConfigurationApi()->EnforceSecurityPolicy(
        peer_with_type, static_cast<l2cap::classic::SecurityPolicy>(request->policy()), std::move(callback));
    return ::grpc::Status::OK;
  }

@@ -272,11 +283,19 @@ class SecurityModuleFacadeService : public SecurityModuleFacade::Service, public
    bond_events_.OnIncomingEvent(bond_failed);
  }

  void EnforceSecurityPolicyEvent(bool result) {
    EnforceSecurityPolicyMsg msg;
    msg.set_result(result);
    enforce_security_policy_events_.OnIncomingEvent(msg);
  }

 private:
  SecurityModule* security_module_;
  ::bluetooth::os::Handler* security_handler_;
  ::bluetooth::grpc::GrpcEventQueue<UiMsg> ui_events_{"UI events"};
  ::bluetooth::grpc::GrpcEventQueue<BondMsg> bond_events_{"Bond events"};
  ::bluetooth::grpc::GrpcEventQueue<EnforceSecurityPolicyMsg> enforce_security_policy_events_{
      "Enforce Security Policy Events"};
  uint32_t unique_id{1};
  std::map<uint32_t, common::OnceCallback<void(bool)>> user_yes_no_callbacks_;
  std::map<uint32_t, common::OnceCallback<void(uint32_t)>> user_passkey_callbacks_;
+5 −0
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ service SecurityModuleFacade {
  rpc FetchUiEvents(google.protobuf.Empty) returns (stream UiMsg) {}
  rpc FetchBondEvents(google.protobuf.Empty) returns (stream BondMsg) {}
  rpc EnforceSecurityPolicy(SecurityPolicyMessage) returns (google.protobuf.Empty) {}
  rpc FetchEnforceSecurityPolicyEvents(google.protobuf.Empty) returns (stream EnforceSecurityPolicyMsg) {}
}

enum UiMsgType {
@@ -119,3 +120,7 @@ message SecurityPolicyMessage {
  facade.BluetoothAddressWithType address = 1;
  l2cap.classic.ClassicSecurityPolicy policy = 2;
}

message EnforceSecurityPolicyMsg {
  bool result = 1;
}
+15 −0
Original line number Diff line number Diff line
@@ -17,6 +17,8 @@
 */
#include "facade_configuration_api.h"

#include "common/bind.h"
#include "l2cap/classic/security_enforcement_interface.h"
#include "os/log.h"

namespace bluetooth {
@@ -44,5 +46,18 @@ void FacadeConfigurationApi::SetLeIoCapability(security::IoCapability io_capabil
void FacadeConfigurationApi::SetLeAuthReq(uint8_t auth_req) {
  security_handler_->CallOn(security_manager_impl_, &internal::SecurityManagerImpl::SetLeAuthReq, auth_req);
}

void FacadeConfigurationApi::EnforceSecurityPolicy(
    hci::AddressWithType remote,
    l2cap::classic::SecurityPolicy policy,
    l2cap::classic::SecurityEnforcementInterface::ResultCallback callback) {
  security_handler_->CallOn(
      security_manager_impl_,
      &internal::SecurityManagerImpl::EnforceSecurityPolicy,
      remote,
      policy,
      std::move(callback));
}

}  // namespace security
}  // namespace bluetooth
+4 −0
Original line number Diff line number Diff line
@@ -41,6 +41,10 @@ class FacadeConfigurationApi {
  void SetIoCapability(hci::IoCapability io_capability);
  void SetAuthenticationRequirements(hci::AuthenticationRequirements authentication_requirement);
  void SetOobData(hci::OobDataPresent oob_present);
  void EnforceSecurityPolicy(
      hci::AddressWithType remote,
      l2cap::classic::SecurityPolicy policy,
      l2cap::classic::SecurityEnforcementInterface::ResultCallback callback);

  void SetLeIoCapability(security::IoCapability io_capability);
  void SetLeAuthReq(uint8_t auth_req);