You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
128 lines
5.8 KiB
128 lines
5.8 KiB
/*
|
|
*
|
|
* Copyright 2019 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at:
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*
|
|
*/
|
|
#include "security_manager.h"
|
|
|
|
#include "os/log.h"
|
|
|
|
namespace bluetooth {
|
|
namespace security {
|
|
|
|
// Definition of Pure Virtual Destructor
|
|
ISecurityManagerListener::~ISecurityManagerListener() {}
|
|
|
|
void SecurityManager::Init() {
|
|
security_handler_->Post(
|
|
common::BindOnce(&internal::SecurityManagerImpl::Init, common::Unretained(security_manager_impl_)));
|
|
}
|
|
|
|
void SecurityManager::CreateBond(hci::AddressWithType device) {
|
|
security_handler_->Post(common::BindOnce(&internal::SecurityManagerImpl::CreateBond,
|
|
common::Unretained(security_manager_impl_),
|
|
std::forward<hci::AddressWithType>(device)));
|
|
}
|
|
|
|
void SecurityManager::CreateBondOutOfBand(
|
|
hci::AddressWithType device, pairing::OobData remote_p192_oob_data, pairing::OobData remote_p256_oob_data) {
|
|
security_handler_->Post(common::BindOnce(
|
|
&internal::SecurityManagerImpl::CreateBondOutOfBand,
|
|
common::Unretained(security_manager_impl_),
|
|
std::forward<hci::AddressWithType>(device),
|
|
remote_p192_oob_data,
|
|
remote_p256_oob_data));
|
|
}
|
|
|
|
void SecurityManager::GetOutOfBandData(channel::SecurityCommandStatusCallback callback) {
|
|
security_handler_->Post(common::BindOnce(
|
|
&internal::SecurityManagerImpl::GetOutOfBandData,
|
|
common::Unretained(security_manager_impl_),
|
|
std::forward<channel::SecurityCommandStatusCallback>(callback)));
|
|
}
|
|
|
|
void SecurityManager::CreateBondLe(hci::AddressWithType device) {
|
|
security_handler_->Post(common::BindOnce(&internal::SecurityManagerImpl::CreateBondLe,
|
|
common::Unretained(security_manager_impl_),
|
|
std::forward<hci::AddressWithType>(device)));
|
|
}
|
|
|
|
void SecurityManager::CancelBond(hci::AddressWithType device) {
|
|
security_handler_->Post(common::BindOnce(&internal::SecurityManagerImpl::CancelBond,
|
|
common::Unretained(security_manager_impl_),
|
|
std::forward<hci::AddressWithType>(device)));
|
|
}
|
|
|
|
void SecurityManager::RemoveBond(hci::AddressWithType device) {
|
|
security_handler_->Post(common::BindOnce(&internal::SecurityManagerImpl::RemoveBond,
|
|
common::Unretained(security_manager_impl_),
|
|
std::forward<hci::AddressWithType>(device)));
|
|
}
|
|
|
|
void SecurityManager::SetUserInterfaceHandler(UI* user_interface, os::Handler* handler) {
|
|
security_handler_->Post(common::BindOnce(&internal::SecurityManagerImpl::SetUserInterfaceHandler,
|
|
common::Unretained(security_manager_impl_), user_interface, handler));
|
|
}
|
|
|
|
// TODO(jpawlowski): remove once we have config file abstraction in cert tests
|
|
void SecurityManager::SetLeInitiatorAddressPolicyForTest(
|
|
hci::LeAddressManager::AddressPolicy address_policy,
|
|
hci::AddressWithType fixed_address,
|
|
crypto_toolbox::Octet16 rotation_irk,
|
|
std::chrono::milliseconds minimum_rotation_time,
|
|
std::chrono::milliseconds maximum_rotation_time) {
|
|
security_handler_->Post(common::BindOnce(
|
|
&internal::SecurityManagerImpl::SetLeInitiatorAddressPolicyForTest,
|
|
common::Unretained(security_manager_impl_),
|
|
address_policy,
|
|
fixed_address,
|
|
rotation_irk,
|
|
minimum_rotation_time,
|
|
maximum_rotation_time));
|
|
}
|
|
|
|
void SecurityManager::RegisterCallbackListener(ISecurityManagerListener* listener, os::Handler* handler) {
|
|
security_handler_->Post(common::BindOnce(&internal::SecurityManagerImpl::RegisterCallbackListener,
|
|
common::Unretained(security_manager_impl_), listener, handler));
|
|
}
|
|
|
|
void SecurityManager::UnregisterCallbackListener(ISecurityManagerListener* listener) {
|
|
security_handler_->Post(common::BindOnce(&internal::SecurityManagerImpl::UnregisterCallbackListener,
|
|
common::Unretained(security_manager_impl_), listener));
|
|
}
|
|
|
|
void SecurityManager::OnPairingPromptAccepted(const bluetooth::hci::AddressWithType& address, bool confirmed) {
|
|
security_handler_->Post(common::BindOnce(&internal::SecurityManagerImpl::OnPairingPromptAccepted,
|
|
common::Unretained(security_manager_impl_), address, confirmed));
|
|
}
|
|
|
|
void SecurityManager::OnConfirmYesNo(const bluetooth::hci::AddressWithType& address, bool confirmed) {
|
|
security_handler_->Post(common::BindOnce(&internal::SecurityManagerImpl::OnConfirmYesNo,
|
|
common::Unretained(security_manager_impl_), address, confirmed));
|
|
}
|
|
|
|
void SecurityManager::OnPasskeyEntry(const bluetooth::hci::AddressWithType& address, uint32_t passkey) {
|
|
security_handler_->Post(common::BindOnce(&internal::SecurityManagerImpl::OnPasskeyEntry,
|
|
common::Unretained(security_manager_impl_), address, passkey));
|
|
}
|
|
|
|
void SecurityManager::OnPinEntry(const bluetooth::hci::AddressWithType& address, std::vector<uint8_t> pin) {
|
|
security_handler_->Post(common::BindOnce(
|
|
&internal::SecurityManagerImpl::OnPinEntry, common::Unretained(security_manager_impl_), address, std::move(pin)));
|
|
}
|
|
|
|
} // namespace security
|
|
} // namespace bluetooth
|