OSDN Git Service

Let ACL Manager load IRK for now
authorHansong Zhang <hsz@google.com>
Thu, 28 Jan 2021 21:39:11 +0000 (13:39 -0800)
committerHansong Zhang <hsz@google.com>
Sat, 30 Jan 2021 23:46:53 +0000 (23:46 +0000)
Instead of letting users of ACL manager loading IRK, we can let ACL
manager load it, until GD security is ready.

Tag: #gd-refactor
Bug: 141555841
Test: cert/run
Change-Id: I9dc66a9787b0117261ee7bcd61ff74b873be0482

gd/hci/acl_manager.cc
gd/hci/acl_manager.h
gd/hci/acl_manager_mock.h
gd/hci/acl_manager_test.cc
gd/hci/facade/le_initiator_address_facade.cc
gd/security/internal/security_manager_impl.cc
main/shim/acl.cc

index 10dd1bd..19e7c78 100644 (file)
@@ -29,6 +29,7 @@
 #include "hci/hci_layer.h"
 #include "hci_acl_manager_generated.h"
 #include "security/security_module.h"
+#include "storage/storage_module.h"
 
 namespace bluetooth {
 namespace hci {
@@ -154,9 +155,13 @@ void AclManager::SetLeSuggestedDefaultDataParameters(uint16_t octets, uint16_t t
 void AclManager::SetPrivacyPolicyForInitiatorAddress(
     LeAddressManager::AddressPolicy address_policy,
     AddressWithType fixed_address,
-    crypto_toolbox::Octet16 rotation_irk,
     std::chrono::milliseconds minimum_rotation_time,
     std::chrono::milliseconds maximum_rotation_time) {
+  crypto_toolbox::Octet16 rotation_irk{};
+  auto irk = GetDependency<storage::StorageModule>()->GetAdapterConfig().GetLeIdentityResolvingKey();
+  if (irk.has_value()) {
+    rotation_irk = irk->bytes;
+  }
   CallOn(
       pimpl_->le_impl_,
       &le_impl::set_privacy_policy_for_initiator_address,
@@ -262,6 +267,7 @@ void AclManager::HACK_SetAclTxPriority(uint8_t handle, bool high_priority) {
 void AclManager::ListDependencies(ModuleList* list) {
   list->add<HciLayer>();
   list->add<Controller>();
+  list->add<storage::StorageModule>();
 }
 
 void AclManager::Start() {
index 8a00d4e..26b7491 100644 (file)
@@ -76,7 +76,6 @@ public:
  virtual void SetPrivacyPolicyForInitiatorAddress(
      LeAddressManager::AddressPolicy address_policy,
      AddressWithType fixed_address,
-     crypto_toolbox::Octet16 rotation_irk,
      std::chrono::milliseconds minimum_rotation_time,
      std::chrono::milliseconds maximum_rotation_time);
 
index 32e0f03..bcab7d7 100644 (file)
@@ -79,7 +79,6 @@ class MockAclManager : public AclManager {
       SetPrivacyPolicyForInitiatorAddress,
       (LeAddressManager::AddressPolicy address_policy,
        AddressWithType fixed_address,
-       crypto_toolbox::Octet16 rotation_irk,
        std::chrono::milliseconds minimum_rotation_time,
        std::chrono::milliseconds maximum_rotation_time),
       (override));
index bbb7d5a..1159192 100644 (file)
@@ -324,13 +324,11 @@ class AclManagerNoCallbacksTest : public ::testing::Test {
     hci::Address address;
     Address::FromString("D0:05:04:03:02:01", address);
     hci::AddressWithType address_with_type(address, hci::AddressType::RANDOM_DEVICE_ADDRESS);
-    crypto_toolbox::Octet16 irk = {};
     auto minimum_rotation_time = std::chrono::milliseconds(7 * 60 * 1000);
     auto maximum_rotation_time = std::chrono::milliseconds(15 * 60 * 1000);
     acl_manager_->SetPrivacyPolicyForInitiatorAddress(
         LeAddressManager::AddressPolicy::USE_STATIC_ADDRESS,
         address_with_type,
-        irk,
         minimum_rotation_time,
         maximum_rotation_time);
 
@@ -1247,7 +1245,6 @@ class AclManagerWithResolvableAddressTest : public AclManagerNoCallbacksTest {
     hci::Address address;
     Address::FromString("D0:05:04:03:02:01", address);
     hci::AddressWithType address_with_type(address, hci::AddressType::RANDOM_DEVICE_ADDRESS);
-    crypto_toolbox::Octet16 irk = {};
     acl_manager_->RegisterCallbacks(&mock_connection_callback_, client_handler_);
     acl_manager_->RegisterLeCallbacks(&mock_le_connection_callbacks_, client_handler_);
     auto minimum_rotation_time = std::chrono::milliseconds(7 * 60 * 1000);
@@ -1255,7 +1252,6 @@ class AclManagerWithResolvableAddressTest : public AclManagerNoCallbacksTest {
     acl_manager_->SetPrivacyPolicyForInitiatorAddress(
         LeAddressManager::AddressPolicy::USE_RESOLVABLE_ADDRESS,
         address_with_type,
-        irk,
         minimum_rotation_time,
         maximum_rotation_time);
 
index 4b82e42..d2f7bce 100644 (file)
@@ -67,7 +67,7 @@ class LeInitiatorAddressFacadeService : public LeInitiatorAddressFacade::Service
     auto minimum_rotation_time = std::chrono::milliseconds(request->minimum_rotation_time());
     auto maximum_rotation_time = std::chrono::milliseconds(request->maximum_rotation_time());
     acl_manager_->SetPrivacyPolicyForInitiatorAddress(
-        address_policy, address_with_type, irk, minimum_rotation_time, maximum_rotation_time);
+        address_policy, address_with_type, minimum_rotation_time, maximum_rotation_time);
     return ::grpc::Status::OK;
   }
 
index cbcb90e..46d2e22 100644 (file)
@@ -106,7 +106,7 @@ void SecurityManagerImpl::Init() {
   auto maximum_rotation_time = std::chrono::minutes(15);
 
   acl_manager_->SetPrivacyPolicyForInitiatorAddress(
-      address_policy, address_with_type, local_identity_resolving_key_, minimum_rotation_time, maximum_rotation_time);
+      address_policy, address_with_type, minimum_rotation_time, maximum_rotation_time);
 }
 
 void SecurityManagerImpl::CreateBond(hci::AddressWithType device) {
index e62a20a..24650a1 100644 (file)
@@ -1063,16 +1063,13 @@ void bluetooth::shim::legacy::Acl::ConfigureLePrivacy(
       hci::LeAddressManager::AddressPolicy::USE_RESOLVABLE_ADDRESS;
   hci::AddressWithType empty_address_with_type(
       hci::Address{}, hci::AddressType::RANDOM_DEVICE_ADDRESS);
-  crypto_toolbox::Octet16 rotation_irk = {0x44, 0xfb, 0x4b, 0x8d, 0x6c, 0x58,
-                                          0x21, 0x0c, 0xf9, 0x3d, 0xda, 0xf1,
-                                          0x64, 0xa3, 0xbb, 0x7f};
   /* 7 minutes minimum, 15 minutes maximum for random address refreshing */
   auto minimum_rotation_time = std::chrono::minutes(7);
   auto maximum_rotation_time = std::chrono::minutes(15);
 
   GetAclManager()->SetPrivacyPolicyForInitiatorAddress(
-      address_policy, empty_address_with_type, rotation_irk,
-      minimum_rotation_time, maximum_rotation_time);
+      address_policy, empty_address_with_type, minimum_rotation_time,
+      maximum_rotation_time);
 }
 
 void bluetooth::shim::legacy::Acl::DisconnectClassic(uint16_t handle,