Commit 1710f5ad authored by Jun Choi's avatar Jun Choi Committed by Commit Bot

Rename prefix for BLE related classes to FIDO

U2F and CTAP share same BLE GATT service UUID and service
characteristics. Furthermore, BLE transport specification for CTAP is a
strict superset of U2F BLE transport specifications. All transport
specifications including fragmentation, request, and response
structure are the same. CTAP protocol simply  adds cancel command to the
list of commands. Rename all Ble related objects to have Fido as prefix.

Bug: 814474
Change-Id: I1978e4b536337e97311cb8c651a8d95256a75c6e
Reviewed-on: https://chromium-review.googlesource.com/929805
Commit-Queue: Jun Choi <hongjunchoi@chromium.org>
Reviewed-by: default avatarJan Wilken Dörrie <jdoerrie@chromium.org>
Cr-Commit-Position: refs/heads/master@{#543829}
parent 1963d5c6
...@@ -67,12 +67,12 @@ test("device_unittests") { ...@@ -67,12 +67,12 @@ test("device_unittests") {
"fido/ctap_request_unittest.cc", "fido/ctap_request_unittest.cc",
"fido/ctap_response_unittest.cc", "fido/ctap_response_unittest.cc",
"fido/fake_fido_discovery_unittest.cc", "fido/fake_fido_discovery_unittest.cc",
"fido/fido_ble_connection_unittest.cc",
"fido/fido_ble_device_unittest.cc",
"fido/fido_ble_frames_unittest.cc",
"fido/fido_discovery_unittest.cc", "fido/fido_discovery_unittest.cc",
"fido/fido_hid_message_unittest.cc", "fido/fido_hid_message_unittest.cc",
"fido/test_callback_receiver_unittest.cc", "fido/test_callback_receiver_unittest.cc",
"fido/u2f_ble_connection_unittest.cc",
"fido/u2f_ble_device_unittest.cc",
"fido/u2f_ble_frames_unittest.cc",
"fido/u2f_register_unittest.cc", "fido/u2f_register_unittest.cc",
"fido/u2f_request_unittest.cc", "fido/u2f_request_unittest.cc",
"fido/u2f_sign_unittest.cc", "fido/u2f_sign_unittest.cc",
...@@ -218,7 +218,7 @@ test("device_unittests") { ...@@ -218,7 +218,7 @@ test("device_unittests") {
# BLE discovery: works on Linux. # BLE discovery: works on Linux.
if (is_linux) { if (is_linux) {
sources += [ "fido/u2f_ble_discovery_unittest.cc" ] sources += [ "fido/fido_ble_discovery_unittest.cc" ]
} }
if (is_mac) { if (is_mac) {
......
...@@ -35,6 +35,16 @@ component("fido") { ...@@ -35,6 +35,16 @@ component("fido") {
"ec_public_key.h", "ec_public_key.h",
"fido_attestation_statement.cc", "fido_attestation_statement.cc",
"fido_attestation_statement.h", "fido_attestation_statement.h",
"fido_ble_connection.cc",
"fido_ble_connection.h",
"fido_ble_device.cc",
"fido_ble_device.h",
"fido_ble_discovery.cc",
"fido_ble_discovery.h",
"fido_ble_frames.cc",
"fido_ble_frames.h",
"fido_ble_transaction.cc",
"fido_ble_transaction.h",
"fido_ble_uuids.cc", "fido_ble_uuids.cc",
"fido_ble_uuids.h", "fido_ble_uuids.h",
"fido_constants.cc", "fido_constants.cc",
...@@ -63,16 +73,6 @@ component("fido") { ...@@ -63,16 +73,6 @@ component("fido") {
"response_data.h", "response_data.h",
"sign_response_data.cc", "sign_response_data.cc",
"sign_response_data.h", "sign_response_data.h",
"u2f_ble_connection.cc",
"u2f_ble_connection.h",
"u2f_ble_device.cc",
"u2f_ble_device.h",
"u2f_ble_discovery.cc",
"u2f_ble_discovery.h",
"u2f_ble_frames.cc",
"u2f_ble_frames.h",
"u2f_ble_transaction.cc",
"u2f_ble_transaction.h",
"u2f_parsing_utils.cc", "u2f_parsing_utils.cc",
"u2f_parsing_utils.h", "u2f_parsing_utils.h",
"u2f_register.cc", "u2f_register.cc",
...@@ -125,12 +125,12 @@ source_set("mocks") { ...@@ -125,12 +125,12 @@ source_set("mocks") {
testonly = true testonly = true
sources = [ sources = [
"mock_fido_ble_connection.cc",
"mock_fido_ble_connection.h",
"mock_fido_device.cc", "mock_fido_device.cc",
"mock_fido_device.h", "mock_fido_device.h",
"mock_fido_discovery_observer.cc", "mock_fido_discovery_observer.cc",
"mock_fido_discovery_observer.h", "mock_fido_discovery_observer.h",
"mock_u2f_ble_connection.cc",
"mock_u2f_ble_connection.h",
] ]
deps = [ deps = [
...@@ -152,9 +152,9 @@ fuzzer_test("fido_hid_message_fuzzer") { ...@@ -152,9 +152,9 @@ fuzzer_test("fido_hid_message_fuzzer") {
libfuzzer_options = [ "max_len=2048" ] libfuzzer_options = [ "max_len=2048" ]
} }
fuzzer_test("u2f_ble_frames_fuzzer") { fuzzer_test("fido_ble_frames_fuzzer") {
sources = [ sources = [
"u2f_ble_frames_fuzzer.cc", "fido_ble_frames_fuzzer.cc",
] ]
deps = [ deps = [
":fido", ":fido",
......
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#ifndef DEVICE_FIDO_U2F_BLE_CONNECTION_H_ #ifndef DEVICE_FIDO_FIDO_BLE_CONNECTION_H_
#define DEVICE_FIDO_U2F_BLE_CONNECTION_H_ #define DEVICE_FIDO_FIDO_BLE_CONNECTION_H_
#include <stdint.h> #include <stdint.h>
...@@ -41,7 +41,7 @@ class BluetoothRemoteGattService; ...@@ -41,7 +41,7 @@ class BluetoothRemoteGattService;
// //
// TODO(crbug.com/763303): Add support for pairing from within this class and // TODO(crbug.com/763303): Add support for pairing from within this class and
// provide users with an option to manually specify a PIN code. // provide users with an option to manually specify a PIN code.
class COMPONENT_EXPORT(DEVICE_FIDO) U2fBleConnection class COMPONENT_EXPORT(DEVICE_FIDO) FidoBleConnection
: public BluetoothAdapter::Observer { : public BluetoothAdapter::Observer {
public: public:
enum class ServiceRevision { enum class ServiceRevision {
...@@ -62,10 +62,10 @@ class COMPONENT_EXPORT(DEVICE_FIDO) U2fBleConnection ...@@ -62,10 +62,10 @@ class COMPONENT_EXPORT(DEVICE_FIDO) U2fBleConnection
using ServiceRevisionsCallback = using ServiceRevisionsCallback =
base::OnceCallback<void(std::set<ServiceRevision>)>; base::OnceCallback<void(std::set<ServiceRevision>)>;
U2fBleConnection(std::string device_address, FidoBleConnection(std::string device_address,
ConnectionStatusCallback connection_status_callback, ConnectionStatusCallback connection_status_callback,
ReadCallback read_callback); ReadCallback read_callback);
~U2fBleConnection() override; ~FidoBleConnection() override;
const std::string& address() const { return address_; } const std::string& address() const { return address_; }
...@@ -78,7 +78,7 @@ class COMPONENT_EXPORT(DEVICE_FIDO) U2fBleConnection ...@@ -78,7 +78,7 @@ class COMPONENT_EXPORT(DEVICE_FIDO) U2fBleConnection
WriteCallback callback); WriteCallback callback);
protected: protected:
explicit U2fBleConnection(std::string device_address); explicit FidoBleConnection(std::string device_address);
private: private:
// BluetoothAdapter::Observer: // BluetoothAdapter::Observer:
...@@ -112,7 +112,7 @@ class COMPONENT_EXPORT(DEVICE_FIDO) U2fBleConnection ...@@ -112,7 +112,7 @@ class COMPONENT_EXPORT(DEVICE_FIDO) U2fBleConnection
void OnConnectionError(); void OnConnectionError();
const BluetoothRemoteGattService* GetU2fService() const; const BluetoothRemoteGattService* GetFidoService() const;
static void OnReadControlPointLength(ControlPointLengthCallback callback, static void OnReadControlPointLength(ControlPointLengthCallback callback,
const std::vector<uint8_t>& value); const std::vector<uint8_t>& value);
...@@ -154,11 +154,11 @@ class COMPONENT_EXPORT(DEVICE_FIDO) U2fBleConnection ...@@ -154,11 +154,11 @@ class COMPONENT_EXPORT(DEVICE_FIDO) U2fBleConnection
std::set<ServiceRevision> service_revisions_; std::set<ServiceRevision> service_revisions_;
base::WeakPtrFactory<U2fBleConnection> weak_factory_; base::WeakPtrFactory<FidoBleConnection> weak_factory_;
DISALLOW_COPY_AND_ASSIGN(U2fBleConnection); DISALLOW_COPY_AND_ASSIGN(FidoBleConnection);
}; };
} // namespace device } // namespace device
#endif // DEVICE_FIDO_U2F_BLE_CONNECTION_H_ #endif // DEVICE_FIDO_FIDO_BLE_CONNECTION_H_
...@@ -2,32 +2,31 @@ ...@@ -2,32 +2,31 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#include "device/fido/u2f_ble_device.h" #include "device/fido/fido_ble_device.h"
#include "base/bind.h" #include "base/bind.h"
#include "base/strings/string_piece.h" #include "base/strings/string_piece.h"
#include "components/apdu/apdu_response.h" #include "components/apdu/apdu_response.h"
#include "device/fido/fido_ble_frames.h"
#include "device/fido/fido_constants.h" #include "device/fido/fido_constants.h"
#include "device/fido/u2f_ble_frames.h"
#include "device/fido/u2f_ble_transaction.h"
namespace device { namespace device {
U2fBleDevice::U2fBleDevice(std::string address) : weak_factory_(this) { FidoBleDevice::FidoBleDevice(std::string address) : weak_factory_(this) {
connection_ = std::make_unique<U2fBleConnection>( connection_ = std::make_unique<FidoBleConnection>(
std::move(address), std::move(address),
base::BindRepeating(&U2fBleDevice::OnConnectionStatus, base::BindRepeating(&FidoBleDevice::OnConnectionStatus,
base::Unretained(this)), base::Unretained(this)),
base::BindRepeating(&U2fBleDevice::OnStatusMessage, base::BindRepeating(&FidoBleDevice::OnStatusMessage,
base::Unretained(this))); base::Unretained(this)));
} }
U2fBleDevice::U2fBleDevice(std::unique_ptr<U2fBleConnection> connection) FidoBleDevice::FidoBleDevice(std::unique_ptr<FidoBleConnection> connection)
: connection_(std::move(connection)), weak_factory_(this) {} : connection_(std::move(connection)), weak_factory_(this) {}
U2fBleDevice::~U2fBleDevice() = default; FidoBleDevice::~FidoBleDevice() = default;
void U2fBleDevice::Connect() { void FidoBleDevice::Connect() {
if (state_ != State::kInit) if (state_ != State::kInit)
return; return;
...@@ -36,12 +35,12 @@ void U2fBleDevice::Connect() { ...@@ -36,12 +35,12 @@ void U2fBleDevice::Connect() {
connection_->Connect(); connection_->Connect();
} }
void U2fBleDevice::SendPing(std::vector<uint8_t> data, void FidoBleDevice::SendPing(std::vector<uint8_t> data,
DeviceCallback callback) { DeviceCallback callback) {
pending_frames_.emplace( pending_frames_.emplace(
U2fBleFrame(FidoBleDeviceCommand::kPing, std::move(data)), FidoBleFrame(FidoBleDeviceCommand::kPing, std::move(data)),
base::BindOnce( base::BindOnce(
[](DeviceCallback callback, base::Optional<U2fBleFrame> frame) { [](DeviceCallback callback, base::Optional<FidoBleFrame> frame) {
std::move(callback).Run(frame ? base::make_optional(frame->data()) std::move(callback).Run(frame ? base::make_optional(frame->data())
: base::nullopt); : base::nullopt);
}, },
...@@ -50,36 +49,36 @@ void U2fBleDevice::SendPing(std::vector<uint8_t> data, ...@@ -50,36 +49,36 @@ void U2fBleDevice::SendPing(std::vector<uint8_t> data,
} }
// static // static
std::string U2fBleDevice::GetId(base::StringPiece address) { std::string FidoBleDevice::GetId(base::StringPiece address) {
return std::string("ble:").append(address.begin(), address.end()); return std::string("ble:").append(address.begin(), address.end());
} }
void U2fBleDevice::TryWink(WinkCallback callback) { void FidoBleDevice::TryWink(WinkCallback callback) {
// U2F over BLE does not support winking. // U2F over BLE does not support winking.
std::move(callback).Run(); std::move(callback).Run();
} }
std::string U2fBleDevice::GetId() const { std::string FidoBleDevice::GetId() const {
return GetId(connection_->address()); return GetId(connection_->address());
} }
U2fBleConnection::ConnectionStatusCallback FidoBleConnection::ConnectionStatusCallback
U2fBleDevice::GetConnectionStatusCallbackForTesting() { FidoBleDevice::GetConnectionStatusCallbackForTesting() {
return base::BindRepeating(&U2fBleDevice::OnConnectionStatus, return base::BindRepeating(&FidoBleDevice::OnConnectionStatus,
base::Unretained(this)); base::Unretained(this));
} }
U2fBleConnection::ReadCallback U2fBleDevice::GetReadCallbackForTesting() { FidoBleConnection::ReadCallback FidoBleDevice::GetReadCallbackForTesting() {
return base::BindRepeating(&U2fBleDevice::OnStatusMessage, return base::BindRepeating(&FidoBleDevice::OnStatusMessage,
base::Unretained(this)); base::Unretained(this));
} }
void U2fBleDevice::DeviceTransact(std::vector<uint8_t> command, void FidoBleDevice::DeviceTransact(std::vector<uint8_t> command,
DeviceCallback callback) { DeviceCallback callback) {
pending_frames_.emplace( pending_frames_.emplace(
U2fBleFrame(FidoBleDeviceCommand::kMsg, std::move(command)), FidoBleFrame(FidoBleDeviceCommand::kMsg, std::move(command)),
base::BindOnce( base::BindOnce(
[](DeviceCallback callback, base::Optional<U2fBleFrame> frame) { [](DeviceCallback callback, base::Optional<FidoBleFrame> frame) {
std::move(callback).Run(frame ? base::make_optional(frame->data()) std::move(callback).Run(frame ? base::make_optional(frame->data())
: base::nullopt); : base::nullopt);
}, },
...@@ -87,11 +86,11 @@ void U2fBleDevice::DeviceTransact(std::vector<uint8_t> command, ...@@ -87,11 +86,11 @@ void U2fBleDevice::DeviceTransact(std::vector<uint8_t> command,
Transition(); Transition();
} }
base::WeakPtr<FidoDevice> U2fBleDevice::GetWeakPtr() { base::WeakPtr<FidoDevice> FidoBleDevice::GetWeakPtr() {
return weak_factory_.GetWeakPtr(); return weak_factory_.GetWeakPtr();
} }
void U2fBleDevice::Transition() { void FidoBleDevice::Transition() {
switch (state_) { switch (state_) {
case State::kInit: case State::kInit:
Connect(); Connect();
...@@ -100,11 +99,11 @@ void U2fBleDevice::Transition() { ...@@ -100,11 +99,11 @@ void U2fBleDevice::Transition() {
StartTimeout(); StartTimeout();
state_ = State::kBusy; state_ = State::kBusy;
connection_->ReadControlPointLength(base::BindOnce( connection_->ReadControlPointLength(base::BindOnce(
&U2fBleDevice::OnReadControlPointLength, base::Unretained(this))); &FidoBleDevice::OnReadControlPointLength, base::Unretained(this)));
break; break;
case State::kReady: case State::kReady:
if (!pending_frames_.empty()) { if (!pending_frames_.empty()) {
U2fBleFrame frame; FidoBleFrame frame;
FrameCallback callback; FrameCallback callback;
std::tie(frame, callback) = std::move(pending_frames_.front()); std::tie(frame, callback) = std::move(pending_frames_.front());
pending_frames_.pop(); pending_frames_.pop();
...@@ -126,13 +125,13 @@ void U2fBleDevice::Transition() { ...@@ -126,13 +125,13 @@ void U2fBleDevice::Transition() {
} }
} }
void U2fBleDevice::OnConnectionStatus(bool success) { void FidoBleDevice::OnConnectionStatus(bool success) {
StopTimeout(); StopTimeout();
state_ = success ? State::kConnected : State::kDeviceError; state_ = success ? State::kConnected : State::kDeviceError;
Transition(); Transition();
} }
void U2fBleDevice::OnReadControlPointLength(base::Optional<uint16_t> length) { void FidoBleDevice::OnReadControlPointLength(base::Optional<uint16_t> length) {
StopTimeout(); StopTimeout();
if (length) { if (length) {
transaction_.emplace(connection_.get(), *length); transaction_.emplace(connection_.get(), *length);
...@@ -143,21 +142,22 @@ void U2fBleDevice::OnReadControlPointLength(base::Optional<uint16_t> length) { ...@@ -143,21 +142,22 @@ void U2fBleDevice::OnReadControlPointLength(base::Optional<uint16_t> length) {
Transition(); Transition();
} }
void U2fBleDevice::OnStatusMessage(std::vector<uint8_t> data) { void FidoBleDevice::OnStatusMessage(std::vector<uint8_t> data) {
if (transaction_) if (transaction_)
transaction_->OnResponseFragment(std::move(data)); transaction_->OnResponseFragment(std::move(data));
} }
void U2fBleDevice::SendRequestFrame(U2fBleFrame frame, FrameCallback callback) { void FidoBleDevice::SendRequestFrame(FidoBleFrame frame,
FrameCallback callback) {
state_ = State::kBusy; state_ = State::kBusy;
transaction_->WriteRequestFrame( transaction_->WriteRequestFrame(
std::move(frame), std::move(frame),
base::BindOnce(&U2fBleDevice::OnResponseFrame, base::Unretained(this), base::BindOnce(&FidoBleDevice::OnResponseFrame, base::Unretained(this),
std::move(callback))); std::move(callback)));
} }
void U2fBleDevice::OnResponseFrame(FrameCallback callback, void FidoBleDevice::OnResponseFrame(FrameCallback callback,
base::Optional<U2fBleFrame> frame) { base::Optional<FidoBleFrame> frame) {
state_ = frame ? State::kReady : State::kDeviceError; state_ = frame ? State::kReady : State::kDeviceError;
auto self = GetWeakPtr(); auto self = GetWeakPtr();
std::move(callback).Run(std::move(frame)); std::move(callback).Run(std::move(frame));
...@@ -166,15 +166,15 @@ void U2fBleDevice::OnResponseFrame(FrameCallback callback, ...@@ -166,15 +166,15 @@ void U2fBleDevice::OnResponseFrame(FrameCallback callback,
Transition(); Transition();
} }
void U2fBleDevice::StartTimeout() { void FidoBleDevice::StartTimeout() {
timer_.Start(FROM_HERE, kDeviceTimeout, this, &U2fBleDevice::OnTimeout); timer_.Start(FROM_HERE, kDeviceTimeout, this, &FidoBleDevice::OnTimeout);
} }
void U2fBleDevice::StopTimeout() { void FidoBleDevice::StopTimeout() {
timer_.Stop(); timer_.Stop();
} }
void U2fBleDevice::OnTimeout() { void FidoBleDevice::OnTimeout() {
state_ = State::kDeviceError; state_ = State::kDeviceError;
} }
......
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#ifndef DEVICE_FIDO_U2F_BLE_DEVICE_H_ #ifndef DEVICE_FIDO_FIDO_BLE_DEVICE_H_
#define DEVICE_FIDO_U2F_BLE_DEVICE_H_ #define DEVICE_FIDO_FIDO_BLE_DEVICE_H_
#include <memory> #include <memory>
#include <string> #include <string>
...@@ -17,21 +17,21 @@ ...@@ -17,21 +17,21 @@
#include "base/optional.h" #include "base/optional.h"
#include "base/strings/string_piece.h" #include "base/strings/string_piece.h"
#include "base/timer/timer.h" #include "base/timer/timer.h"
#include "device/fido/fido_ble_connection.h"
#include "device/fido/fido_ble_transaction.h"
#include "device/fido/fido_constants.h" #include "device/fido/fido_constants.h"
#include "device/fido/fido_device.h" #include "device/fido/fido_device.h"
#include "device/fido/u2f_ble_connection.h"
#include "device/fido/u2f_ble_transaction.h"
namespace device { namespace device {
class U2fBleFrame; class FidoBleFrame;
class COMPONENT_EXPORT(DEVICE_FIDO) U2fBleDevice : public FidoDevice { class COMPONENT_EXPORT(DEVICE_FIDO) FidoBleDevice : public FidoDevice {
public: public:
using FrameCallback = U2fBleTransaction::FrameCallback; using FrameCallback = FidoBleTransaction::FrameCallback;
explicit U2fBleDevice(std::string address); explicit FidoBleDevice(std::string address);
explicit U2fBleDevice(std::unique_ptr<U2fBleConnection> connection); explicit FidoBleDevice(std::unique_ptr<FidoBleConnection> connection);
~U2fBleDevice() override; ~FidoBleDevice() override;
void Connect(); void Connect();
void SendPing(std::vector<uint8_t> data, DeviceCallback callback); void SendPing(std::vector<uint8_t> data, DeviceCallback callback);
...@@ -41,9 +41,9 @@ class COMPONENT_EXPORT(DEVICE_FIDO) U2fBleDevice : public FidoDevice { ...@@ -41,9 +41,9 @@ class COMPONENT_EXPORT(DEVICE_FIDO) U2fBleDevice : public FidoDevice {
void TryWink(WinkCallback callback) override; void TryWink(WinkCallback callback) override;
std::string GetId() const override; std::string GetId() const override;
U2fBleConnection::ConnectionStatusCallback FidoBleConnection::ConnectionStatusCallback
GetConnectionStatusCallbackForTesting(); GetConnectionStatusCallbackForTesting();
U2fBleConnection::ReadCallback GetReadCallbackForTesting(); FidoBleConnection::ReadCallback GetReadCallbackForTesting();
protected: protected:
// FidoDevice: // FidoDevice:
...@@ -61,9 +61,9 @@ class COMPONENT_EXPORT(DEVICE_FIDO) U2fBleDevice : public FidoDevice { ...@@ -61,9 +61,9 @@ class COMPONENT_EXPORT(DEVICE_FIDO) U2fBleDevice : public FidoDevice {
void OnReadControlPointLength(base::Optional<uint16_t> length); void OnReadControlPointLength(base::Optional<uint16_t> length);
void SendPendingRequestFrame(); void SendPendingRequestFrame();
void SendRequestFrame(U2fBleFrame frame, FrameCallback callback); void SendRequestFrame(FidoBleFrame frame, FrameCallback callback);
void OnResponseFrame(FrameCallback callback, void OnResponseFrame(FrameCallback callback,
base::Optional<U2fBleFrame> frame); base::Optional<FidoBleFrame> frame);
void StartTimeout(); void StartTimeout();
void StopTimeout(); void StopTimeout();
...@@ -72,17 +72,17 @@ class COMPONENT_EXPORT(DEVICE_FIDO) U2fBleDevice : public FidoDevice { ...@@ -72,17 +72,17 @@ class COMPONENT_EXPORT(DEVICE_FIDO) U2fBleDevice : public FidoDevice {
State state_ = State::kInit; State state_ = State::kInit;
base::OneShotTimer timer_; base::OneShotTimer timer_;
std::unique_ptr<U2fBleConnection> connection_; std::unique_ptr<FidoBleConnection> connection_;
uint16_t control_point_length_ = 0; uint16_t control_point_length_ = 0;
base::queue<std::pair<U2fBleFrame, FrameCallback>> pending_frames_; base::queue<std::pair<FidoBleFrame, FrameCallback>> pending_frames_;
base::Optional<U2fBleTransaction> transaction_; base::Optional<FidoBleTransaction> transaction_;
base::WeakPtrFactory<U2fBleDevice> weak_factory_; base::WeakPtrFactory<FidoBleDevice> weak_factory_;
DISALLOW_COPY_AND_ASSIGN(U2fBleDevice); DISALLOW_COPY_AND_ASSIGN(FidoBleDevice);
}; };
} // namespace device } // namespace device
#endif // DEVICE_FIDO_U2F_BLE_DEVICE_H_ #endif // DEVICE_FIDO_FIDO_BLE_DEVICE_H_
...@@ -2,13 +2,13 @@ ...@@ -2,13 +2,13 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#include "device/fido/u2f_ble_device.h" #include "device/fido/fido_ble_device.h"
#include "base/optional.h" #include "base/optional.h"
#include "base/test/scoped_task_environment.h" #include "base/test/scoped_task_environment.h"
#include "device/bluetooth/test/bluetooth_test.h" #include "device/bluetooth/test/bluetooth_test.h"
#include "device/fido/fido_constants.h" #include "device/fido/fido_constants.h"
#include "device/fido/mock_u2f_ble_connection.h" #include "device/fido/mock_fido_ble_connection.h"
#include "device/fido/test_callback_receiver.h" #include "device/fido/test_callback_receiver.h"
#include "testing/gmock/include/gmock/gmock.h" #include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
...@@ -24,20 +24,20 @@ using TestDeviceCallbackReceiver = ...@@ -24,20 +24,20 @@ using TestDeviceCallbackReceiver =
} // namespace } // namespace
class U2fBleDeviceTest : public Test { class FidoBleDeviceTest : public Test {
public: public:
U2fBleDeviceTest() { FidoBleDeviceTest() {
auto connection = std::make_unique<MockU2fBleConnection>( auto connection = std::make_unique<MockFidoBleConnection>(
BluetoothTestBase::kTestDeviceAddress1); BluetoothTestBase::kTestDeviceAddress1);
connection_ = connection.get(); connection_ = connection.get();
device_ = std::make_unique<U2fBleDevice>(std::move(connection)); device_ = std::make_unique<FidoBleDevice>(std::move(connection));
connection_->connection_status_callback() = connection_->connection_status_callback() =
device_->GetConnectionStatusCallbackForTesting(); device_->GetConnectionStatusCallbackForTesting();
connection_->read_callback() = device_->GetReadCallbackForTesting(); connection_->read_callback() = device_->GetReadCallbackForTesting();
} }
U2fBleDevice* device() { return device_.get(); } FidoBleDevice* device() { return device_.get(); }
MockU2fBleConnection* connection() { return connection_; } MockFidoBleConnection* connection() { return connection_; }
void ConnectWithLength(uint16_t length) { void ConnectWithLength(uint16_t length) {
EXPECT_CALL(*connection(), Connect()).WillOnce(Invoke([this] { EXPECT_CALL(*connection(), Connect()).WillOnce(Invoke([this] {
...@@ -55,18 +55,18 @@ class U2fBleDeviceTest : public Test { ...@@ -55,18 +55,18 @@ class U2fBleDeviceTest : public Test {
base::test::ScopedTaskEnvironment::MainThreadType::MOCK_TIME}; base::test::ScopedTaskEnvironment::MainThreadType::MOCK_TIME};
private: private:
MockU2fBleConnection* connection_; MockFidoBleConnection* connection_;
std::unique_ptr<U2fBleDevice> device_; std::unique_ptr<FidoBleDevice> device_;
}; };
TEST_F(U2fBleDeviceTest, ConnectionFailureTest) { TEST_F(FidoBleDeviceTest, ConnectionFailureTest) {
EXPECT_CALL(*connection(), Connect()).WillOnce(Invoke([this] { EXPECT_CALL(*connection(), Connect()).WillOnce(Invoke([this] {
connection()->connection_status_callback().Run(false); connection()->connection_status_callback().Run(false);
})); }));
device()->Connect(); device()->Connect();
} }
TEST_F(U2fBleDeviceTest, SendPingTest_Failure_Callback) { TEST_F(FidoBleDeviceTest, SendPingTest_Failure_Callback) {
ConnectWithLength(20); ConnectWithLength(20);
EXPECT_CALL(*connection(), WriteControlPointPtr(_, _)) EXPECT_CALL(*connection(), WriteControlPointPtr(_, _))
...@@ -80,7 +80,7 @@ TEST_F(U2fBleDeviceTest, SendPingTest_Failure_Callback) { ...@@ -80,7 +80,7 @@ TEST_F(U2fBleDeviceTest, SendPingTest_Failure_Callback) {
EXPECT_FALSE(std::get<0>(*callback_receiver.result())); EXPECT_FALSE(std::get<0>(*callback_receiver.result()));
} }
TEST_F(U2fBleDeviceTest, SendPingTest_Failure_Timeout) { TEST_F(FidoBleDeviceTest, SendPingTest_Failure_Timeout) {
ConnectWithLength(20); ConnectWithLength(20);
EXPECT_CALL(*connection(), WriteControlPointPtr(_, _)) EXPECT_CALL(*connection(), WriteControlPointPtr(_, _))
...@@ -95,7 +95,7 @@ TEST_F(U2fBleDeviceTest, SendPingTest_Failure_Timeout) { ...@@ -95,7 +95,7 @@ TEST_F(U2fBleDeviceTest, SendPingTest_Failure_Timeout) {
EXPECT_FALSE(std::get<0>(*callback_receiver.result())); EXPECT_FALSE(std::get<0>(*callback_receiver.result()));
} }
TEST_F(U2fBleDeviceTest, SendPingTest) { TEST_F(FidoBleDeviceTest, SendPingTest) {
ConnectWithLength(20); ConnectWithLength(20);
const std::vector<uint8_t> ping_data = {'T', 'E', 'S', 'T'}; const std::vector<uint8_t> ping_data = {'T', 'E', 'S', 'T'};
...@@ -117,18 +117,18 @@ TEST_F(U2fBleDeviceTest, SendPingTest) { ...@@ -117,18 +117,18 @@ TEST_F(U2fBleDeviceTest, SendPingTest) {
EXPECT_EQ(ping_data, *result); EXPECT_EQ(ping_data, *result);
} }
TEST_F(U2fBleDeviceTest, StaticGetIdTest) { TEST_F(FidoBleDeviceTest, StaticGetIdTest) {
std::string address = BluetoothTestBase::kTestDeviceAddress1; std::string address = BluetoothTestBase::kTestDeviceAddress1;
EXPECT_EQ("ble:" + address, U2fBleDevice::GetId(address)); EXPECT_EQ("ble:" + address, FidoBleDevice::GetId(address));
} }
TEST_F(U2fBleDeviceTest, TryWinkTest) { TEST_F(FidoBleDeviceTest, TryWinkTest) {
test::TestCallbackReceiver<> closure_receiver; test::TestCallbackReceiver<> closure_receiver;
device()->TryWink(closure_receiver.callback()); device()->TryWink(closure_receiver.callback());
closure_receiver.WaitForCallback(); closure_receiver.WaitForCallback();
} }
TEST_F(U2fBleDeviceTest, GetIdTest) { TEST_F(FidoBleDeviceTest, GetIdTest) {
EXPECT_EQ(std::string("ble:") + BluetoothTestBase::kTestDeviceAddress1, EXPECT_EQ(std::string("ble:") + BluetoothTestBase::kTestDeviceAddress1,
device()->GetId()); device()->GetId());
} }
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#include "device/fido/u2f_ble_discovery.h" #include "device/fido/fido_ble_discovery.h"
#include <string> #include <string>
#include <utility> #include <utility>
...@@ -15,14 +15,14 @@ ...@@ -15,14 +15,14 @@
#include "device/bluetooth/bluetooth_discovery_filter.h" #include "device/bluetooth/bluetooth_discovery_filter.h"
#include "device/bluetooth/bluetooth_discovery_session.h" #include "device/bluetooth/bluetooth_discovery_session.h"
#include "device/bluetooth/bluetooth_uuid.h" #include "device/bluetooth/bluetooth_uuid.h"
#include "device/fido/fido_ble_device.h"
#include "device/fido/fido_ble_uuids.h" #include "device/fido/fido_ble_uuids.h"
#include "device/fido/u2f_ble_device.h"
namespace device { namespace device {
U2fBleDiscovery::U2fBleDiscovery() : weak_factory_(this) {} FidoBleDiscovery::FidoBleDiscovery() : weak_factory_(this) {}
U2fBleDiscovery::~U2fBleDiscovery() { FidoBleDiscovery::~FidoBleDiscovery() {
if (adapter_) if (adapter_)
adapter_->RemoveObserver(this); adapter_->RemoveObserver(this);
...@@ -32,34 +32,34 @@ U2fBleDiscovery::~U2fBleDiscovery() { ...@@ -32,34 +32,34 @@ U2fBleDiscovery::~U2fBleDiscovery() {
OnStopped(true); OnStopped(true);
} }
U2fTransportProtocol U2fBleDiscovery::GetTransportProtocol() const { U2fTransportProtocol FidoBleDiscovery::GetTransportProtocol() const {
return U2fTransportProtocol::kBluetoothLowEnergy; return U2fTransportProtocol::kBluetoothLowEnergy;
} }
void U2fBleDiscovery::Start() { void FidoBleDiscovery::Start() {
auto& factory = BluetoothAdapterFactory::Get(); auto& factory = BluetoothAdapterFactory::Get();
factory.GetAdapter( factory.GetAdapter(
base::Bind(&U2fBleDiscovery::OnGetAdapter, weak_factory_.GetWeakPtr())); base::Bind(&FidoBleDiscovery::OnGetAdapter, weak_factory_.GetWeakPtr()));
} }
void U2fBleDiscovery::Stop() { void FidoBleDiscovery::Stop() {
DCHECK(adapter_); DCHECK(adapter_);
adapter_->RemoveObserver(this); adapter_->RemoveObserver(this);
DCHECK(discovery_session_); DCHECK(discovery_session_);
discovery_session_->Stop( discovery_session_->Stop(base::Bind(&FidoBleDiscovery::OnStopped,
base::Bind(&U2fBleDiscovery::OnStopped, weak_factory_.GetWeakPtr(), true), weak_factory_.GetWeakPtr(), true),
base::Bind(&U2fBleDiscovery::OnStopped, weak_factory_.GetWeakPtr(), base::Bind(&FidoBleDiscovery::OnStopped,
false)); weak_factory_.GetWeakPtr(), false));
} }
// static // static
const BluetoothUUID& U2fBleDiscovery::U2fServiceUUID() { const BluetoothUUID& FidoBleDiscovery::FidoServiceUUID() {
static const BluetoothUUID service_uuid(kFidoServiceUUID); static const BluetoothUUID service_uuid(kFidoServiceUUID);
return service_uuid; return service_uuid;
} }
void U2fBleDiscovery::OnGetAdapter(scoped_refptr<BluetoothAdapter> adapter) { void FidoBleDiscovery::OnGetAdapter(scoped_refptr<BluetoothAdapter> adapter) {
DCHECK(!adapter_); DCHECK(!adapter_);
adapter_ = std::move(adapter); adapter_ = std::move(adapter);
DCHECK(adapter_); DCHECK(adapter_);
...@@ -71,79 +71,79 @@ void U2fBleDiscovery::OnGetAdapter(scoped_refptr<BluetoothAdapter> adapter) { ...@@ -71,79 +71,79 @@ void U2fBleDiscovery::OnGetAdapter(scoped_refptr<BluetoothAdapter> adapter) {
} else { } else {
adapter_->SetPowered( adapter_->SetPowered(
true, true,
base::Bind(&U2fBleDiscovery::OnSetPowered, weak_factory_.GetWeakPtr()), base::Bind(&FidoBleDiscovery::OnSetPowered, weak_factory_.GetWeakPtr()),
base::Bind(&U2fBleDiscovery::OnSetPoweredError, base::Bind(&FidoBleDiscovery::OnSetPoweredError,
weak_factory_.GetWeakPtr())); weak_factory_.GetWeakPtr()));
} }
} }
void U2fBleDiscovery::OnSetPowered() { void FidoBleDiscovery::OnSetPowered() {
DCHECK(adapter_); DCHECK(adapter_);
VLOG(2) << "Adapter " << adapter_->GetAddress() << " is powered on."; VLOG(2) << "Adapter " << adapter_->GetAddress() << " is powered on.";
for (BluetoothDevice* device : adapter_->GetDevices()) { for (BluetoothDevice* device : adapter_->GetDevices()) {
if (base::ContainsKey(device->GetUUIDs(), U2fServiceUUID())) { if (base::ContainsKey(device->GetUUIDs(), FidoServiceUUID())) {
VLOG(2) << "U2F BLE device: " << device->GetAddress(); VLOG(2) << "U2F BLE device: " << device->GetAddress();
AddDevice(std::make_unique<U2fBleDevice>(device->GetAddress())); AddDevice(std::make_unique<FidoBleDevice>(device->GetAddress()));
} }
} }
auto filter = std::make_unique<BluetoothDiscoveryFilter>( auto filter = std::make_unique<BluetoothDiscoveryFilter>(
BluetoothTransport::BLUETOOTH_TRANSPORT_LE); BluetoothTransport::BLUETOOTH_TRANSPORT_LE);
filter->AddUUID(U2fServiceUUID()); filter->AddUUID(FidoServiceUUID());
adapter_->StartDiscoverySessionWithFilter( adapter_->StartDiscoverySessionWithFilter(
std::move(filter), std::move(filter),
base::Bind(&U2fBleDiscovery::OnStartDiscoverySessionWithFilter, base::Bind(&FidoBleDiscovery::OnStartDiscoverySessionWithFilter,
weak_factory_.GetWeakPtr()), weak_factory_.GetWeakPtr()),
base::Bind(&U2fBleDiscovery::OnStartDiscoverySessionWithFilterError, base::Bind(&FidoBleDiscovery::OnStartDiscoverySessionWithFilterError,
weak_factory_.GetWeakPtr())); weak_factory_.GetWeakPtr()));
} }
void U2fBleDiscovery::OnSetPoweredError() { void FidoBleDiscovery::OnSetPoweredError() {
DLOG(ERROR) << "Failed to power on the adapter."; DLOG(ERROR) << "Failed to power on the adapter.";
NotifyDiscoveryStarted(false); NotifyDiscoveryStarted(false);
} }
void U2fBleDiscovery::OnStartDiscoverySessionWithFilter( void FidoBleDiscovery::OnStartDiscoverySessionWithFilter(
std::unique_ptr<BluetoothDiscoverySession> session) { std::unique_ptr<BluetoothDiscoverySession> session) {
discovery_session_ = std::move(session); discovery_session_ = std::move(session);
DVLOG(2) << "Discovery session started."; DVLOG(2) << "Discovery session started.";
NotifyDiscoveryStarted(true); NotifyDiscoveryStarted(true);
} }
void U2fBleDiscovery::OnStartDiscoverySessionWithFilterError() { void FidoBleDiscovery::OnStartDiscoverySessionWithFilterError() {
DLOG(ERROR) << "Discovery session not started."; DLOG(ERROR) << "Discovery session not started.";
NotifyDiscoveryStarted(false); NotifyDiscoveryStarted(false);
} }
void U2fBleDiscovery::DeviceAdded(BluetoothAdapter* adapter, void FidoBleDiscovery::DeviceAdded(BluetoothAdapter* adapter,
BluetoothDevice* device) { BluetoothDevice* device) {
if (base::ContainsKey(device->GetUUIDs(), U2fServiceUUID())) { if (base::ContainsKey(device->GetUUIDs(), FidoServiceUUID())) {
VLOG(2) << "Discovered U2F BLE device: " << device->GetAddress(); VLOG(2) << "Discovered U2F BLE device: " << device->GetAddress();
AddDevice(std::make_unique<U2fBleDevice>(device->GetAddress())); AddDevice(std::make_unique<FidoBleDevice>(device->GetAddress()));
} }
} }
void U2fBleDiscovery::DeviceChanged(BluetoothAdapter* adapter, void FidoBleDiscovery::DeviceChanged(BluetoothAdapter* adapter,
BluetoothDevice* device) { BluetoothDevice* device) {
if (base::ContainsKey(device->GetUUIDs(), U2fServiceUUID()) && if (base::ContainsKey(device->GetUUIDs(), FidoServiceUUID()) &&
!GetDevice(U2fBleDevice::GetId(device->GetAddress()))) { !GetDevice(FidoBleDevice::GetId(device->GetAddress()))) {
VLOG(2) << "Discovered U2F service on existing BLE device: " VLOG(2) << "Discovered U2F service on existing BLE device: "
<< device->GetAddress(); << device->GetAddress();
AddDevice(std::make_unique<U2fBleDevice>(device->GetAddress())); AddDevice(std::make_unique<FidoBleDevice>(device->GetAddress()));
} }
} }
void U2fBleDiscovery::DeviceRemoved(BluetoothAdapter* adapter, void FidoBleDiscovery::DeviceRemoved(BluetoothAdapter* adapter,
BluetoothDevice* device) { BluetoothDevice* device) {
if (base::ContainsKey(device->GetUUIDs(), U2fServiceUUID())) { if (base::ContainsKey(device->GetUUIDs(), FidoServiceUUID())) {
VLOG(2) << "U2F BLE device removed: " << device->GetAddress(); VLOG(2) << "U2F BLE device removed: " << device->GetAddress();
RemoveDevice(U2fBleDevice::GetId(device->GetAddress())); RemoveDevice(FidoBleDevice::GetId(device->GetAddress()));
} }
} }
void U2fBleDiscovery::OnStopped(bool success) { void FidoBleDiscovery::OnStopped(bool success) {
discovery_session_.reset(); discovery_session_.reset();
NotifyDiscoveryStopped(success); NotifyDiscoveryStopped(success);
} }
......
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#ifndef DEVICE_FIDO_U2F_BLE_DISCOVERY_H_ #ifndef DEVICE_FIDO_FIDO_BLE_DISCOVERY_H_
#define DEVICE_FIDO_U2F_BLE_DISCOVERY_H_ #define DEVICE_FIDO_FIDO_BLE_DISCOVERY_H_
#include <memory> #include <memory>
...@@ -20,12 +20,12 @@ class BluetoothDevice; ...@@ -20,12 +20,12 @@ class BluetoothDevice;
class BluetoothDiscoverySession; class BluetoothDiscoverySession;
class BluetoothUUID; class BluetoothUUID;
class COMPONENT_EXPORT(DEVICE_FIDO) U2fBleDiscovery class COMPONENT_EXPORT(DEVICE_FIDO) FidoBleDiscovery
: public FidoDiscovery, : public FidoDiscovery,
BluetoothAdapter::Observer { BluetoothAdapter::Observer {
public: public:
U2fBleDiscovery(); FidoBleDiscovery();
~U2fBleDiscovery() override; ~FidoBleDiscovery() override;
// FidoDiscovery: // FidoDiscovery:
U2fTransportProtocol GetTransportProtocol() const override; U2fTransportProtocol GetTransportProtocol() const override;
...@@ -33,7 +33,7 @@ class COMPONENT_EXPORT(DEVICE_FIDO) U2fBleDiscovery ...@@ -33,7 +33,7 @@ class COMPONENT_EXPORT(DEVICE_FIDO) U2fBleDiscovery
void Stop() override; void Stop() override;
private: private:
static const BluetoothUUID& U2fServiceUUID(); static const BluetoothUUID& FidoServiceUUID();
void OnGetAdapter(scoped_refptr<BluetoothAdapter> adapter); void OnGetAdapter(scoped_refptr<BluetoothAdapter> adapter);
void OnSetPowered(); void OnSetPowered();
...@@ -53,11 +53,11 @@ class COMPONENT_EXPORT(DEVICE_FIDO) U2fBleDiscovery ...@@ -53,11 +53,11 @@ class COMPONENT_EXPORT(DEVICE_FIDO) U2fBleDiscovery
scoped_refptr<BluetoothAdapter> adapter_; scoped_refptr<BluetoothAdapter> adapter_;
std::unique_ptr<BluetoothDiscoverySession> discovery_session_; std::unique_ptr<BluetoothDiscoverySession> discovery_session_;
base::WeakPtrFactory<U2fBleDiscovery> weak_factory_; base::WeakPtrFactory<FidoBleDiscovery> weak_factory_;
DISALLOW_COPY_AND_ASSIGN(U2fBleDiscovery); DISALLOW_COPY_AND_ASSIGN(FidoBleDiscovery);
}; };
} // namespace device } // namespace device
#endif // DEVICE_FIDO_U2F_BLE_DISCOVERY_H_ #endif // DEVICE_FIDO_FIDO_BLE_DISCOVERY_H_
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#include "device/fido/u2f_ble_discovery.h" #include "device/fido/fido_ble_discovery.h"
#include <string> #include <string>
...@@ -10,8 +10,8 @@ ...@@ -10,8 +10,8 @@
#include "base/run_loop.h" #include "base/run_loop.h"
#include "build/build_config.h" #include "build/build_config.h"
#include "device/bluetooth/test/bluetooth_test.h" #include "device/bluetooth/test/bluetooth_test.h"
#include "device/fido/fido_ble_device.h"
#include "device/fido/mock_fido_discovery_observer.h" #include "device/fido/mock_fido_discovery_observer.h"
#include "device/fido/u2f_ble_device.h"
#include "testing/gmock/include/gmock/gmock.h" #include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
...@@ -37,11 +37,11 @@ MATCHER_P(IdMatches, id, "") { ...@@ -37,11 +37,11 @@ MATCHER_P(IdMatches, id, "") {
return arg->GetId() == std::string("ble:") + id; return arg->GetId() == std::string("ble:") + id;
} }
TEST_F(BluetoothTest, U2fBleDiscoveryNoAdapter) { TEST_F(BluetoothTest, FidoBleDiscoveryNoAdapter) {
// We purposefully construct a temporary and provide no fake adapter, // We purposefully construct a temporary and provide no fake adapter,
// simulating cases where the discovery is destroyed before obtaining a handle // simulating cases where the discovery is destroyed before obtaining a handle
// to an adapter. This should be handled gracefully and not result in a crash. // to an adapter. This should be handled gracefully and not result in a crash.
U2fBleDiscovery discovery; FidoBleDiscovery discovery;
// We don't expect any calls to the notification methods. // We don't expect any calls to the notification methods.
MockFidoDiscoveryObserver observer; MockFidoDiscoveryObserver observer;
...@@ -52,7 +52,7 @@ TEST_F(BluetoothTest, U2fBleDiscoveryNoAdapter) { ...@@ -52,7 +52,7 @@ TEST_F(BluetoothTest, U2fBleDiscoveryNoAdapter) {
EXPECT_CALL(observer, DeviceRemoved(&discovery, _)).Times(0); EXPECT_CALL(observer, DeviceRemoved(&discovery, _)).Times(0);
} }
TEST_F(BluetoothTest, U2fBleDiscoveryFindsKnownDevice) { TEST_F(BluetoothTest, FidoBleDiscoveryFindsKnownDevice) {
if (!PlatformSupportsLowEnergy()) { if (!PlatformSupportsLowEnergy()) {
LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test."; LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test.";
return; return;
...@@ -62,7 +62,7 @@ TEST_F(BluetoothTest, U2fBleDiscoveryFindsKnownDevice) { ...@@ -62,7 +62,7 @@ TEST_F(BluetoothTest, U2fBleDiscoveryFindsKnownDevice) {
SimulateLowEnergyDevice(4); // This device should be ignored. SimulateLowEnergyDevice(4); // This device should be ignored.
SimulateLowEnergyDevice(7); SimulateLowEnergyDevice(7);
U2fBleDiscovery discovery; FidoBleDiscovery discovery;
MockFidoDiscoveryObserver observer; MockFidoDiscoveryObserver observer;
discovery.AddObserver(&observer); discovery.AddObserver(&observer);
...@@ -93,14 +93,14 @@ TEST_F(BluetoothTest, U2fBleDiscoveryFindsKnownDevice) { ...@@ -93,14 +93,14 @@ TEST_F(BluetoothTest, U2fBleDiscoveryFindsKnownDevice) {
} }
} }
TEST_F(BluetoothTest, U2fBleDiscoveryFindsNewDevice) { TEST_F(BluetoothTest, FidoBleDiscoveryFindsNewDevice) {
if (!PlatformSupportsLowEnergy()) { if (!PlatformSupportsLowEnergy()) {
LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test."; LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test.";
return; return;
} }
InitWithFakeAdapter(); InitWithFakeAdapter();
U2fBleDiscovery discovery; FidoBleDiscovery discovery;
MockFidoDiscoveryObserver observer; MockFidoDiscoveryObserver observer;
discovery.AddObserver(&observer); discovery.AddObserver(&observer);
...@@ -142,10 +142,10 @@ TEST_F(BluetoothTest, U2fBleDiscoveryFindsNewDevice) { ...@@ -142,10 +142,10 @@ TEST_F(BluetoothTest, U2fBleDiscoveryFindsNewDevice) {
// Simulate the scenario where the BLE device is already known at start-up time, // Simulate the scenario where the BLE device is already known at start-up time,
// but no service advertisements have been received from the device yet, so we // but no service advertisements have been received from the device yet, so we
// do not know if it is a U2F device or not. As soon as it is discovered that // do not know if it is a CTAP2/U2F device or not. As soon as it is discovered
// the device supports the U2F service, the observer should be notified of a new // that the device supports the FIDO service, the observer should be notified of
// U2fBleDevice. // a new FidoBleDevice.
TEST_F(BluetoothTest, U2fBleDiscoveryFindsUpdatedDevice) { TEST_F(BluetoothTest, FidoBleDiscoveryFindsUpdatedDevice) {
if (!PlatformSupportsLowEnergy()) { if (!PlatformSupportsLowEnergy()) {
LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test."; LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test.";
return; return;
...@@ -154,7 +154,7 @@ TEST_F(BluetoothTest, U2fBleDiscoveryFindsUpdatedDevice) { ...@@ -154,7 +154,7 @@ TEST_F(BluetoothTest, U2fBleDiscoveryFindsUpdatedDevice) {
SimulateLowEnergyDevice(3); SimulateLowEnergyDevice(3);
U2fBleDiscovery discovery; FidoBleDiscovery discovery;
MockFidoDiscoveryObserver observer; MockFidoDiscoveryObserver observer;
discovery.AddObserver(&observer); discovery.AddObserver(&observer);
...@@ -185,7 +185,7 @@ TEST_F(BluetoothTest, U2fBleDiscoveryFindsUpdatedDevice) { ...@@ -185,7 +185,7 @@ TEST_F(BluetoothTest, U2fBleDiscoveryFindsUpdatedDevice) {
const auto devices = discovery.GetDevices(); const auto devices = discovery.GetDevices();
ASSERT_THAT(devices, ::testing::SizeIs(1u)); ASSERT_THAT(devices, ::testing::SizeIs(1u));
EXPECT_EQ(U2fBleDevice::GetId(BluetoothTestBase::kTestDeviceAddress1), EXPECT_EQ(FidoBleDevice::GetId(BluetoothTestBase::kTestDeviceAddress1),
devices[0]->GetId()); devices[0]->GetId());
} }
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#include "device/fido/u2f_ble_frames.h" #include "device/fido/fido_ble_frames.h"
#include <algorithm> #include <algorithm>
#include <limits> #include <limits>
...@@ -13,18 +13,18 @@ ...@@ -13,18 +13,18 @@
namespace device { namespace device {
U2fBleFrame::U2fBleFrame() = default; FidoBleFrame::FidoBleFrame() = default;
U2fBleFrame::U2fBleFrame(FidoBleDeviceCommand command, FidoBleFrame::FidoBleFrame(FidoBleDeviceCommand command,
std::vector<uint8_t> data) std::vector<uint8_t> data)
: command_(command), data_(std::move(data)) {} : command_(command), data_(std::move(data)) {}
U2fBleFrame::U2fBleFrame(U2fBleFrame&&) = default; FidoBleFrame::FidoBleFrame(FidoBleFrame&&) = default;
U2fBleFrame& U2fBleFrame::operator=(U2fBleFrame&&) = default; FidoBleFrame& FidoBleFrame::operator=(FidoBleFrame&&) = default;
U2fBleFrame::~U2fBleFrame() = default; FidoBleFrame::~FidoBleFrame() = default;
bool U2fBleFrame::IsValid() const { bool FidoBleFrame::IsValid() const {
switch (command_) { switch (command_) {
case FidoBleDeviceCommand::kPing: case FidoBleDeviceCommand::kPing:
case FidoBleDeviceCommand::kMsg: case FidoBleDeviceCommand::kMsg:
...@@ -38,21 +38,21 @@ bool U2fBleFrame::IsValid() const { ...@@ -38,21 +38,21 @@ bool U2fBleFrame::IsValid() const {
return false; return false;
} }
U2fBleFrame::KeepaliveCode U2fBleFrame::GetKeepaliveCode() const { FidoBleFrame::KeepaliveCode FidoBleFrame::GetKeepaliveCode() const {
DCHECK_EQ(command_, FidoBleDeviceCommand::kKeepAlive); DCHECK_EQ(command_, FidoBleDeviceCommand::kKeepAlive);
DCHECK_EQ(data_.size(), 1u); DCHECK_EQ(data_.size(), 1u);
return static_cast<KeepaliveCode>(data_[0]); return static_cast<KeepaliveCode>(data_[0]);
} }
U2fBleFrame::ErrorCode U2fBleFrame::GetErrorCode() const { FidoBleFrame::ErrorCode FidoBleFrame::GetErrorCode() const {
DCHECK_EQ(command_, FidoBleDeviceCommand::kError); DCHECK_EQ(command_, FidoBleDeviceCommand::kError);
DCHECK_EQ(data_.size(), 1u); DCHECK_EQ(data_.size(), 1u);
return static_cast<ErrorCode>(data_[0]); return static_cast<ErrorCode>(data_[0]);
} }
std::pair<U2fBleFrameInitializationFragment, std::pair<FidoBleFrameInitializationFragment,
base::queue<U2fBleFrameContinuationFragment>> base::queue<FidoBleFrameContinuationFragment>>
U2fBleFrame::ToFragments(size_t max_fragment_size) const { FidoBleFrame::ToFragments(size_t max_fragment_size) const {
DCHECK_LE(data_.size(), std::numeric_limits<uint16_t>::max()); DCHECK_LE(data_.size(), std::numeric_limits<uint16_t>::max());
DCHECK_GE(max_fragment_size, 3u); DCHECK_GE(max_fragment_size, 3u);
...@@ -64,10 +64,10 @@ U2fBleFrame::ToFragments(size_t max_fragment_size) const { ...@@ -64,10 +64,10 @@ U2fBleFrame::ToFragments(size_t max_fragment_size) const {
const size_t init_fragment_size = const size_t init_fragment_size =
std::min(max_fragment_size - 3, data_view.size()); std::min(max_fragment_size - 3, data_view.size());
U2fBleFrameInitializationFragment initial_fragment( FidoBleFrameInitializationFragment initial_fragment(
command_, data_view.size(), data_view.first(init_fragment_size)); command_, data_view.size(), data_view.first(init_fragment_size));
base::queue<U2fBleFrameContinuationFragment> other_fragments; base::queue<FidoBleFrameContinuationFragment> other_fragments;
data_view = data_view.subspan(init_fragment_size); data_view = data_view.subspan(init_fragment_size);
while (!data_view.empty()) { while (!data_view.empty()) {
...@@ -84,18 +84,18 @@ U2fBleFrame::ToFragments(size_t max_fragment_size) const { ...@@ -84,18 +84,18 @@ U2fBleFrame::ToFragments(size_t max_fragment_size) const {
return {initial_fragment, std::move(other_fragments)}; return {initial_fragment, std::move(other_fragments)};
} }
U2fBleFrameFragment::U2fBleFrameFragment() = default; FidoBleFrameFragment::FidoBleFrameFragment() = default;
U2fBleFrameFragment::U2fBleFrameFragment(const U2fBleFrameFragment& frame) = FidoBleFrameFragment::FidoBleFrameFragment(const FidoBleFrameFragment& frame) =
default; default;
U2fBleFrameFragment::~U2fBleFrameFragment() = default; FidoBleFrameFragment::~FidoBleFrameFragment() = default;
U2fBleFrameFragment::U2fBleFrameFragment(base::span<const uint8_t> fragment) FidoBleFrameFragment::FidoBleFrameFragment(base::span<const uint8_t> fragment)
: fragment_(fragment) {} : fragment_(fragment) {}
bool U2fBleFrameInitializationFragment::Parse( bool FidoBleFrameInitializationFragment::Parse(
base::span<const uint8_t> data, base::span<const uint8_t> data,
U2fBleFrameInitializationFragment* fragment) { FidoBleFrameInitializationFragment* fragment) {
if (data.size() < 3) if (data.size() < 3)
return false; return false;
...@@ -105,11 +105,11 @@ bool U2fBleFrameInitializationFragment::Parse( ...@@ -105,11 +105,11 @@ bool U2fBleFrameInitializationFragment::Parse(
return false; return false;
*fragment = *fragment =
U2fBleFrameInitializationFragment(command, data_length, data.subspan(3)); FidoBleFrameInitializationFragment(command, data_length, data.subspan(3));
return true; return true;
} }
size_t U2fBleFrameInitializationFragment::Serialize( size_t FidoBleFrameInitializationFragment::Serialize(
std::vector<uint8_t>* buffer) const { std::vector<uint8_t>* buffer) const {
buffer->push_back(static_cast<uint8_t>(command_)); buffer->push_back(static_cast<uint8_t>(command_));
buffer->push_back((data_length_ >> 8) & 0xFF); buffer->push_back((data_length_ >> 8) & 0xFF);
...@@ -118,32 +118,32 @@ size_t U2fBleFrameInitializationFragment::Serialize( ...@@ -118,32 +118,32 @@ size_t U2fBleFrameInitializationFragment::Serialize(
return fragment().size() + 3; return fragment().size() + 3;
} }
bool U2fBleFrameContinuationFragment::Parse( bool FidoBleFrameContinuationFragment::Parse(
base::span<const uint8_t> data, base::span<const uint8_t> data,
U2fBleFrameContinuationFragment* fragment) { FidoBleFrameContinuationFragment* fragment) {
if (data.empty()) if (data.empty())
return false; return false;
const uint8_t sequence = data[0]; const uint8_t sequence = data[0];
*fragment = U2fBleFrameContinuationFragment(data.subspan(1), sequence); *fragment = FidoBleFrameContinuationFragment(data.subspan(1), sequence);
return true; return true;
} }
size_t U2fBleFrameContinuationFragment::Serialize( size_t FidoBleFrameContinuationFragment::Serialize(
std::vector<uint8_t>* buffer) const { std::vector<uint8_t>* buffer) const {
buffer->push_back(sequence_); buffer->push_back(sequence_);
buffer->insert(buffer->end(), fragment().begin(), fragment().end()); buffer->insert(buffer->end(), fragment().begin(), fragment().end());
return fragment().size() + 1; return fragment().size() + 1;
} }
U2fBleFrameAssembler::U2fBleFrameAssembler( FidoBleFrameAssembler::FidoBleFrameAssembler(
const U2fBleFrameInitializationFragment& fragment) const FidoBleFrameInitializationFragment& fragment)
: data_length_(fragment.data_length()), : data_length_(fragment.data_length()),
frame_(fragment.command(), frame_(fragment.command(),
std::vector<uint8_t>(fragment.fragment().begin(), std::vector<uint8_t>(fragment.fragment().begin(),
fragment.fragment().end())) {} fragment.fragment().end())) {}
bool U2fBleFrameAssembler::AddFragment( bool FidoBleFrameAssembler::AddFragment(
const U2fBleFrameContinuationFragment& fragment) { const FidoBleFrameContinuationFragment& fragment) {
if (fragment.sequence() != sequence_number_) if (fragment.sequence() != sequence_number_)
return false; return false;
sequence_number_ = (sequence_number_ + 1) & 0x7F; sequence_number_ = (sequence_number_ + 1) & 0x7F;
...@@ -158,14 +158,14 @@ bool U2fBleFrameAssembler::AddFragment( ...@@ -158,14 +158,14 @@ bool U2fBleFrameAssembler::AddFragment(
return true; return true;
} }
bool U2fBleFrameAssembler::IsDone() const { bool FidoBleFrameAssembler::IsDone() const {
return frame_.data().size() == data_length_; return frame_.data().size() == data_length_;
} }
U2fBleFrame* U2fBleFrameAssembler::GetFrame() { FidoBleFrame* FidoBleFrameAssembler::GetFrame() {
return IsDone() ? &frame_ : nullptr; return IsDone() ? &frame_ : nullptr;
} }
U2fBleFrameAssembler::~U2fBleFrameAssembler() = default; FidoBleFrameAssembler::~FidoBleFrameAssembler() = default;
} // namespace device } // namespace device
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#ifndef DEVICE_FIDO_U2F_BLE_FRAMES_H_ #ifndef DEVICE_FIDO_FIDO_BLE_FRAMES_H_
#define DEVICE_FIDO_U2F_BLE_FRAMES_H_ #define DEVICE_FIDO_FIDO_BLE_FRAMES_H_
#include <stdint.h> #include <stdint.h>
...@@ -18,18 +18,18 @@ ...@@ -18,18 +18,18 @@
namespace device { namespace device {
class U2fBleFrameInitializationFragment; class FidoBleFrameInitializationFragment;
class U2fBleFrameContinuationFragment; class FidoBleFrameContinuationFragment;
// Encapsulates a frame, i.e., a single request to or response from a U2F // Encapsulates a frame, i.e., a single request to or response from a FIDO
// authenticator, designed to be transported via BLE. The frame is further split // compliant authenticator, designed to be transported via BLE. The frame is
// into fragments (see U2fBleFrameFragment class). // further split into fragments (see FidoBleFrameFragment class).
// //
// The specification of what constitues a frame can be found here: // The specification of what constitues a frame can be found here:
// https://fidoalliance.org/specs/fido-u2f-v1.2-ps-20170411/fido-u2f-bt-protocol-v1.2-ps-20170411.html#h2_framing // https://fidoalliance.org/specs/fido-u2f-v1.2-ps-20170411/fido-u2f-bt-protocol-v1.2-ps-20170411.html#h2_framing
// //
// TODO(crbug/763303): Consider refactoring U2fMessage to support BLE frames. // TODO(crbug/763303): Consider refactoring U2fMessage to support BLE frames.
class COMPONENT_EXPORT(DEVICE_FIDO) U2fBleFrame { class COMPONENT_EXPORT(DEVICE_FIDO) FidoBleFrame {
public: public:
// The values which can be carried in the |data| section of a KEEPALIVE // The values which can be carried in the |data| section of a KEEPALIVE
// message sent from an authenticator. // message sent from an authenticator.
...@@ -55,13 +55,13 @@ class COMPONENT_EXPORT(DEVICE_FIDO) U2fBleFrame { ...@@ -55,13 +55,13 @@ class COMPONENT_EXPORT(DEVICE_FIDO) U2fBleFrame {
OTHER = 0x7F, // Other, unspecified error. OTHER = 0x7F, // Other, unspecified error.
}; };
U2fBleFrame(); FidoBleFrame();
U2fBleFrame(FidoBleDeviceCommand command, std::vector<uint8_t> data); FidoBleFrame(FidoBleDeviceCommand command, std::vector<uint8_t> data);
U2fBleFrame(U2fBleFrame&&); FidoBleFrame(FidoBleFrame&&);
U2fBleFrame& operator=(U2fBleFrame&&); FidoBleFrame& operator=(FidoBleFrame&&);
~U2fBleFrame(); ~FidoBleFrame();
FidoBleDeviceCommand command() const { return command_; } FidoBleDeviceCommand command() const { return command_; }
...@@ -78,15 +78,15 @@ class COMPONENT_EXPORT(DEVICE_FIDO) U2fBleFrame { ...@@ -78,15 +78,15 @@ class COMPONENT_EXPORT(DEVICE_FIDO) U2fBleFrame {
// //
// The |max_fragment_size| parameter ought to be at least 3. The resulting // The |max_fragment_size| parameter ought to be at least 3. The resulting
// fragments' binary sizes will not exceed this value. // fragments' binary sizes will not exceed this value.
std::pair<U2fBleFrameInitializationFragment, std::pair<FidoBleFrameInitializationFragment,
base::queue<U2fBleFrameContinuationFragment>> base::queue<FidoBleFrameContinuationFragment>>
ToFragments(size_t max_fragment_size) const; ToFragments(size_t max_fragment_size) const;
private: private:
FidoBleDeviceCommand command_ = FidoBleDeviceCommand::kMsg; FidoBleDeviceCommand command_ = FidoBleDeviceCommand::kMsg;
std::vector<uint8_t> data_; std::vector<uint8_t> data_;
DISALLOW_COPY_AND_ASSIGN(U2fBleFrame); DISALLOW_COPY_AND_ASSIGN(FidoBleFrame);
}; };
// A single frame sent over BLE may be split over multiple writes and // A single frame sent over BLE may be split over multiple writes and
...@@ -98,33 +98,33 @@ class COMPONENT_EXPORT(DEVICE_FIDO) U2fBleFrame { ...@@ -98,33 +98,33 @@ class COMPONENT_EXPORT(DEVICE_FIDO) U2fBleFrame {
// https://fidoalliance.org/specs/fido-u2f-v1.2-ps-20170411/fido-u2f-bt-protocol-v1.2-ps-20170411.html#h2_framing-fragmentation // https://fidoalliance.org/specs/fido-u2f-v1.2-ps-20170411/fido-u2f-bt-protocol-v1.2-ps-20170411.html#h2_framing-fragmentation
// //
// Note: This class and its subclasses don't own the |data|. // Note: This class and its subclasses don't own the |data|.
class COMPONENT_EXPORT(DEVICE_FIDO) U2fBleFrameFragment { class COMPONENT_EXPORT(DEVICE_FIDO) FidoBleFrameFragment {
public: public:
base::span<const uint8_t> fragment() const { return fragment_; } base::span<const uint8_t> fragment() const { return fragment_; }
virtual size_t Serialize(std::vector<uint8_t>* buffer) const = 0; virtual size_t Serialize(std::vector<uint8_t>* buffer) const = 0;
protected: protected:
U2fBleFrameFragment(); FidoBleFrameFragment();
explicit U2fBleFrameFragment(base::span<const uint8_t> fragment); explicit FidoBleFrameFragment(base::span<const uint8_t> fragment);
U2fBleFrameFragment(const U2fBleFrameFragment& frame); FidoBleFrameFragment(const FidoBleFrameFragment& frame);
virtual ~U2fBleFrameFragment(); virtual ~FidoBleFrameFragment();
private: private:
base::span<const uint8_t> fragment_; base::span<const uint8_t> fragment_;
}; };
// An initialization fragment of a frame. // An initialization fragment of a frame.
class COMPONENT_EXPORT(DEVICE_FIDO) U2fBleFrameInitializationFragment class COMPONENT_EXPORT(DEVICE_FIDO) FidoBleFrameInitializationFragment
: public U2fBleFrameFragment { : public FidoBleFrameFragment {
public: public:
static bool Parse(base::span<const uint8_t> data, static bool Parse(base::span<const uint8_t> data,
U2fBleFrameInitializationFragment* fragment); FidoBleFrameInitializationFragment* fragment);
U2fBleFrameInitializationFragment() = default; FidoBleFrameInitializationFragment() = default;
U2fBleFrameInitializationFragment(FidoBleDeviceCommand command, FidoBleFrameInitializationFragment(FidoBleDeviceCommand command,
uint16_t data_length, uint16_t data_length,
base::span<const uint8_t> fragment) base::span<const uint8_t> fragment)
: U2fBleFrameFragment(fragment), : FidoBleFrameFragment(fragment),
command_(command), command_(command),
data_length_(data_length) {} data_length_(data_length) {}
...@@ -139,16 +139,16 @@ class COMPONENT_EXPORT(DEVICE_FIDO) U2fBleFrameInitializationFragment ...@@ -139,16 +139,16 @@ class COMPONENT_EXPORT(DEVICE_FIDO) U2fBleFrameInitializationFragment
}; };
// A continuation fragment of a frame. // A continuation fragment of a frame.
class COMPONENT_EXPORT(DEVICE_FIDO) U2fBleFrameContinuationFragment class COMPONENT_EXPORT(DEVICE_FIDO) FidoBleFrameContinuationFragment
: public U2fBleFrameFragment { : public FidoBleFrameFragment {
public: public:
static bool Parse(base::span<const uint8_t> data, static bool Parse(base::span<const uint8_t> data,
U2fBleFrameContinuationFragment* fragment); FidoBleFrameContinuationFragment* fragment);
U2fBleFrameContinuationFragment() = default; FidoBleFrameContinuationFragment() = default;
U2fBleFrameContinuationFragment(base::span<const uint8_t> fragment, FidoBleFrameContinuationFragment(base::span<const uint8_t> fragment,
uint8_t sequence) uint8_t sequence)
: U2fBleFrameFragment(fragment), sequence_(sequence) {} : FidoBleFrameFragment(fragment), sequence_(sequence) {}
uint8_t sequence() const { return sequence_; } uint8_t sequence() const { return sequence_; }
...@@ -158,26 +158,26 @@ class COMPONENT_EXPORT(DEVICE_FIDO) U2fBleFrameContinuationFragment ...@@ -158,26 +158,26 @@ class COMPONENT_EXPORT(DEVICE_FIDO) U2fBleFrameContinuationFragment
uint8_t sequence_ = 0; uint8_t sequence_ = 0;
}; };
// The helper used to construct a U2fBleFrame from a sequence of its fragments. // The helper used to construct a FidoBleFrame from a sequence of its fragments.
class COMPONENT_EXPORT(DEVICE_FIDO) U2fBleFrameAssembler { class COMPONENT_EXPORT(DEVICE_FIDO) FidoBleFrameAssembler {
public: public:
explicit U2fBleFrameAssembler( explicit FidoBleFrameAssembler(
const U2fBleFrameInitializationFragment& fragment); const FidoBleFrameInitializationFragment& fragment);
~U2fBleFrameAssembler(); ~FidoBleFrameAssembler();
bool IsDone() const; bool IsDone() const;
bool AddFragment(const U2fBleFrameContinuationFragment& fragment); bool AddFragment(const FidoBleFrameContinuationFragment& fragment);
U2fBleFrame* GetFrame(); FidoBleFrame* GetFrame();
private: private:
uint16_t data_length_ = 0; uint16_t data_length_ = 0;
uint8_t sequence_number_ = 0; uint8_t sequence_number_ = 0;
U2fBleFrame frame_; FidoBleFrame frame_;
DISALLOW_COPY_AND_ASSIGN(U2fBleFrameAssembler); DISALLOW_COPY_AND_ASSIGN(FidoBleFrameAssembler);
}; };
} // namespace device } // namespace device
#endif // DEVICE_FIDO_U2F_BLE_FRAMES_H_ #endif // DEVICE_FIDO_FIDO_BLE_FRAMES_H_
...@@ -7,45 +7,45 @@ ...@@ -7,45 +7,45 @@
#include <vector> #include <vector>
#include "device/fido/fido_ble_frames.h"
#include "device/fido/fido_constants.h" #include "device/fido/fido_constants.h"
#include "device/fido/u2f_ble_frames.h"
extern "C" int LLVMFuzzerTestOneInput(const uint8_t* raw_data, size_t size) { extern "C" int LLVMFuzzerTestOneInput(const uint8_t* raw_data, size_t size) {
auto data_span = base::make_span(raw_data, size); auto data_span = base::make_span(raw_data, size);
std::vector<uint8_t> data(data_span.begin(), data_span.end()); std::vector<uint8_t> data(data_span.begin(), data_span.end());
{ {
device::U2fBleFrameInitializationFragment fragment( device::FidoBleFrameInitializationFragment fragment(
device::FidoBleDeviceCommand::kMsg, 21123, data_span); device::FidoBleDeviceCommand::kMsg, 21123, data_span);
std::vector<uint8_t> buffer; std::vector<uint8_t> buffer;
fragment.Serialize(&buffer); fragment.Serialize(&buffer);
device::U2fBleFrameInitializationFragment parsed_fragment; device::FidoBleFrameInitializationFragment parsed_fragment;
device::U2fBleFrameInitializationFragment::Parse(data, &parsed_fragment); device::FidoBleFrameInitializationFragment::Parse(data, &parsed_fragment);
device::U2fBleFrameInitializationFragment::Parse(buffer, &parsed_fragment); device::FidoBleFrameInitializationFragment::Parse(buffer, &parsed_fragment);
buffer.clear(); buffer.clear();
parsed_fragment.Serialize(&buffer); parsed_fragment.Serialize(&buffer);
} }
{ {
device::U2fBleFrameContinuationFragment fragment(data_span, 61); device::FidoBleFrameContinuationFragment fragment(data_span, 61);
std::vector<uint8_t> buffer; std::vector<uint8_t> buffer;
fragment.Serialize(&buffer); fragment.Serialize(&buffer);
device::U2fBleFrameContinuationFragment parsed_fragment; device::FidoBleFrameContinuationFragment parsed_fragment;
device::U2fBleFrameContinuationFragment::Parse(data, &parsed_fragment); device::FidoBleFrameContinuationFragment::Parse(data, &parsed_fragment);
device::U2fBleFrameContinuationFragment::Parse(buffer, &parsed_fragment); device::FidoBleFrameContinuationFragment::Parse(buffer, &parsed_fragment);
buffer.clear(); buffer.clear();
parsed_fragment.Serialize(&buffer); parsed_fragment.Serialize(&buffer);
} }
{ {
device::U2fBleFrame frame(device::FidoBleDeviceCommand::kPing, data); device::FidoBleFrame frame(device::FidoBleDeviceCommand::kPing, data);
auto fragments = frame.ToFragments(20); auto fragments = frame.ToFragments(20);
device::U2fBleFrameAssembler assembler(fragments.first); device::FidoBleFrameAssembler assembler(fragments.first);
while (!fragments.second.empty()) { while (!fragments.second.empty()) {
assembler.AddFragment(fragments.second.front()); assembler.AddFragment(fragments.second.front());
fragments.second.pop(); fragments.second.pop();
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#include "device/fido/u2f_ble_frames.h" #include "device/fido/fido_ble_frames.h"
#include <vector> #include <vector>
...@@ -21,33 +21,32 @@ std::vector<uint8_t> GetSomeData(size_t size) { ...@@ -21,33 +21,32 @@ std::vector<uint8_t> GetSomeData(size_t size) {
namespace device { namespace device {
TEST(U2fBleFramesTest, InitializationFragment) { TEST(FidoBleFramesTest, InitializationFragment) {
const std::vector<uint8_t> data = GetSomeData(25); const std::vector<uint8_t> data = GetSomeData(25);
constexpr uint16_t kDataLength = 21123; constexpr uint16_t kDataLength = 21123;
U2fBleFrameInitializationFragment fragment( FidoBleFrameInitializationFragment fragment(
FidoBleDeviceCommand::kMsg, kDataLength, base::make_span(data)); FidoBleDeviceCommand::kMsg, kDataLength, base::make_span(data));
std::vector<uint8_t> buffer; std::vector<uint8_t> buffer;
const size_t binary_size = fragment.Serialize(&buffer); const size_t binary_size = fragment.Serialize(&buffer);
EXPECT_EQ(buffer.size(), binary_size); EXPECT_EQ(buffer.size(), binary_size);
EXPECT_EQ(data.size() + 3, binary_size); EXPECT_EQ(data.size() + 3, binary_size);
U2fBleFrameInitializationFragment parsed_fragment; FidoBleFrameInitializationFragment parsed_fragment;
ASSERT_TRUE( ASSERT_TRUE(
U2fBleFrameInitializationFragment::Parse(buffer, &parsed_fragment)); FidoBleFrameInitializationFragment::Parse(buffer, &parsed_fragment));
EXPECT_EQ(kDataLength, parsed_fragment.data_length()); EXPECT_EQ(kDataLength, parsed_fragment.data_length());
EXPECT_EQ(base::make_span(data), parsed_fragment.fragment()); EXPECT_EQ(base::make_span(data), parsed_fragment.fragment());
EXPECT_EQ(FidoBleDeviceCommand::kMsg, parsed_fragment.command()); EXPECT_EQ(FidoBleDeviceCommand::kMsg, parsed_fragment.command());
} }
TEST(U2fBleFramesTest, ContinuationFragment) { TEST(FidoBleFramesTest, ContinuationFragment) {
const auto data = GetSomeData(25); const auto data = GetSomeData(25);
constexpr uint8_t kSequence = 61; constexpr uint8_t kSequence = 61;
U2fBleFrameContinuationFragment fragment(base::make_span(data), kSequence); FidoBleFrameContinuationFragment fragment(base::make_span(data), kSequence);
std::vector<uint8_t> buffer; std::vector<uint8_t> buffer;
const size_t binary_size = fragment.Serialize(&buffer); const size_t binary_size = fragment.Serialize(&buffer);
...@@ -55,19 +54,20 @@ TEST(U2fBleFramesTest, ContinuationFragment) { ...@@ -55,19 +54,20 @@ TEST(U2fBleFramesTest, ContinuationFragment) {
EXPECT_EQ(data.size() + 1, binary_size); EXPECT_EQ(data.size() + 1, binary_size);
U2fBleFrameContinuationFragment parsed_fragment; FidoBleFrameContinuationFragment parsed_fragment;
ASSERT_TRUE(U2fBleFrameContinuationFragment::Parse(buffer, &parsed_fragment)); ASSERT_TRUE(
FidoBleFrameContinuationFragment::Parse(buffer, &parsed_fragment));
EXPECT_EQ(base::make_span(data), parsed_fragment.fragment()); EXPECT_EQ(base::make_span(data), parsed_fragment.fragment());
EXPECT_EQ(kSequence, parsed_fragment.sequence()); EXPECT_EQ(kSequence, parsed_fragment.sequence());
} }
TEST(U2fBleFramesTest, SplitAndAssemble) { TEST(FidoBleFramesTest, SplitAndAssemble) {
for (size_t size : {0, 1, 16, 17, 18, 20, 21, 22, 35, 36, for (size_t size : {0, 1, 16, 17, 18, 20, 21, 22, 35, 36,
37, 39, 40, 41, 54, 55, 56, 60, 100, 65535}) { 37, 39, 40, 41, 54, 55, 56, 60, 100, 65535}) {
SCOPED_TRACE(size); SCOPED_TRACE(size);
U2fBleFrame frame(FidoBleDeviceCommand::kPing, GetSomeData(size)); FidoBleFrame frame(FidoBleDeviceCommand::kPing, GetSomeData(size));
auto fragments = frame.ToFragments(20); auto fragments = frame.ToFragments(20);
...@@ -75,7 +75,7 @@ TEST(U2fBleFramesTest, SplitAndAssemble) { ...@@ -75,7 +75,7 @@ TEST(U2fBleFramesTest, SplitAndAssemble) {
EXPECT_EQ(frame.data().size(), EXPECT_EQ(frame.data().size(),
static_cast<size_t>(fragments.first.data_length())); static_cast<size_t>(fragments.first.data_length()));
U2fBleFrameAssembler assembler(fragments.first); FidoBleFrameAssembler assembler(fragments.first);
while (!fragments.second.empty()) { while (!fragments.second.empty()) {
ASSERT_TRUE(assembler.AddFragment(fragments.second.front())); ASSERT_TRUE(assembler.AddFragment(fragments.second.front()));
fragments.second.pop(); fragments.second.pop();
...@@ -90,16 +90,16 @@ TEST(U2fBleFramesTest, SplitAndAssemble) { ...@@ -90,16 +90,16 @@ TEST(U2fBleFramesTest, SplitAndAssemble) {
} }
} }
TEST(U2fBleFramesTest, FrameAssemblerError) { TEST(FidoBleFramesTest, FrameAssemblerError) {
U2fBleFrame frame(FidoBleDeviceCommand::kPing, GetSomeData(30)); FidoBleFrame frame(FidoBleDeviceCommand::kPing, GetSomeData(30));
auto fragments = frame.ToFragments(20); auto fragments = frame.ToFragments(20);
ASSERT_EQ(1u, fragments.second.size()); ASSERT_EQ(1u, fragments.second.size());
fragments.second.front() = fragments.second.front() =
U2fBleFrameContinuationFragment(fragments.second.front().fragment(), 51); FidoBleFrameContinuationFragment(fragments.second.front().fragment(), 51);
U2fBleFrameAssembler assembler(fragments.first); FidoBleFrameAssembler assembler(fragments.first);
EXPECT_FALSE(assembler.IsDone()); EXPECT_FALSE(assembler.IsDone());
EXPECT_FALSE(assembler.GetFrame()); EXPECT_FALSE(assembler.GetFrame());
EXPECT_FALSE(assembler.AddFragment(fragments.second.front())); EXPECT_FALSE(assembler.AddFragment(fragments.second.front()));
...@@ -107,35 +107,35 @@ TEST(U2fBleFramesTest, FrameAssemblerError) { ...@@ -107,35 +107,35 @@ TEST(U2fBleFramesTest, FrameAssemblerError) {
EXPECT_FALSE(assembler.GetFrame()); EXPECT_FALSE(assembler.GetFrame());
} }
TEST(U2fBleFramesTest, FrameGettersAndValidity) { TEST(FidoBleFramesTest, FrameGettersAndValidity) {
{ {
U2fBleFrame frame(FidoBleDeviceCommand::kKeepAlive, FidoBleFrame frame(FidoBleDeviceCommand::kKeepAlive,
std::vector<uint8_t>(2)); std::vector<uint8_t>(2));
EXPECT_FALSE(frame.IsValid()); EXPECT_FALSE(frame.IsValid());
} }
{ {
U2fBleFrame frame(FidoBleDeviceCommand::kError, {}); FidoBleFrame frame(FidoBleDeviceCommand::kError, {});
EXPECT_FALSE(frame.IsValid()); EXPECT_FALSE(frame.IsValid());
} }
for (auto code : {U2fBleFrame::KeepaliveCode::TUP_NEEDED, for (auto code : {FidoBleFrame::KeepaliveCode::TUP_NEEDED,
U2fBleFrame::KeepaliveCode::PROCESSING}) { FidoBleFrame::KeepaliveCode::PROCESSING}) {
U2fBleFrame frame(FidoBleDeviceCommand::kKeepAlive, FidoBleFrame frame(FidoBleDeviceCommand::kKeepAlive,
std::vector<uint8_t>(1, static_cast<uint8_t>(code))); std::vector<uint8_t>(1, static_cast<uint8_t>(code)));
EXPECT_TRUE(frame.IsValid()); EXPECT_TRUE(frame.IsValid());
EXPECT_EQ(code, frame.GetKeepaliveCode()); EXPECT_EQ(code, frame.GetKeepaliveCode());
} }
for (auto code : { for (auto code : {
U2fBleFrame::ErrorCode::INVALID_CMD, FidoBleFrame::ErrorCode::INVALID_CMD,
U2fBleFrame::ErrorCode::INVALID_PAR, FidoBleFrame::ErrorCode::INVALID_PAR,
U2fBleFrame::ErrorCode::INVALID_SEQ, FidoBleFrame::ErrorCode::INVALID_SEQ,
U2fBleFrame::ErrorCode::INVALID_LEN, FidoBleFrame::ErrorCode::INVALID_LEN,
U2fBleFrame::ErrorCode::REQ_TIMEOUT, U2fBleFrame::ErrorCode::NA_1, FidoBleFrame::ErrorCode::REQ_TIMEOUT, FidoBleFrame::ErrorCode::NA_1,
U2fBleFrame::ErrorCode::NA_2, U2fBleFrame::ErrorCode::NA_3, FidoBleFrame::ErrorCode::NA_2, FidoBleFrame::ErrorCode::NA_3,
}) { }) {
U2fBleFrame frame(FidoBleDeviceCommand::kError, FidoBleFrame frame(FidoBleDeviceCommand::kError,
{static_cast<uint8_t>(code)}); {static_cast<uint8_t>(code)});
EXPECT_TRUE(frame.IsValid()); EXPECT_TRUE(frame.IsValid());
EXPECT_EQ(code, frame.GetErrorCode()); EXPECT_EQ(code, frame.GetErrorCode());
} }
......
...@@ -2,52 +2,52 @@ ...@@ -2,52 +2,52 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#include "device/fido/u2f_ble_transaction.h" #include "device/fido/fido_ble_transaction.h"
#include <utility> #include <utility>
#include "device/fido/fido_ble_connection.h"
#include "device/fido/fido_constants.h" #include "device/fido/fido_constants.h"
#include "device/fido/u2f_ble_connection.h"
namespace device { namespace device {
U2fBleTransaction::U2fBleTransaction(U2fBleConnection* connection, FidoBleTransaction::FidoBleTransaction(FidoBleConnection* connection,
uint16_t control_point_length) uint16_t control_point_length)
: connection_(connection), : connection_(connection),
control_point_length_(control_point_length), control_point_length_(control_point_length),
weak_factory_(this) { weak_factory_(this) {
buffer_.reserve(control_point_length_); buffer_.reserve(control_point_length_);
} }
U2fBleTransaction::~U2fBleTransaction() = default; FidoBleTransaction::~FidoBleTransaction() = default;
void U2fBleTransaction::WriteRequestFrame(U2fBleFrame request_frame, void FidoBleTransaction::WriteRequestFrame(FidoBleFrame request_frame,
FrameCallback callback) { FrameCallback callback) {
DCHECK(!request_frame_ && callback_.is_null()); DCHECK(!request_frame_ && callback_.is_null());
request_frame_ = std::move(request_frame); request_frame_ = std::move(request_frame);
callback_ = std::move(callback); callback_ = std::move(callback);
U2fBleFrameInitializationFragment request_init_fragment; FidoBleFrameInitializationFragment request_init_fragment;
std::tie(request_init_fragment, request_cont_fragments_) = std::tie(request_init_fragment, request_cont_fragments_) =
request_frame_->ToFragments(control_point_length_); request_frame_->ToFragments(control_point_length_);
WriteRequestFragment(request_init_fragment); WriteRequestFragment(request_init_fragment);
} }
void U2fBleTransaction::WriteRequestFragment( void FidoBleTransaction::WriteRequestFragment(
const U2fBleFrameFragment& fragment) { const FidoBleFrameFragment& fragment) {
buffer_.clear(); buffer_.clear();
fragment.Serialize(&buffer_); fragment.Serialize(&buffer_);
// A weak pointer is required, since this call might time out. If that // A weak pointer is required, since this call might time out. If that
// happens, the current U2fBleTransaction could be destroyed. // happens, the current FidoBleTransaction could be destroyed.
connection_->WriteControlPoint( connection_->WriteControlPoint(
buffer_, base::BindOnce(&U2fBleTransaction::OnRequestFragmentWritten, buffer_, base::BindOnce(&FidoBleTransaction::OnRequestFragmentWritten,
weak_factory_.GetWeakPtr())); weak_factory_.GetWeakPtr()));
// WriteRequestFragment() expects an invocation of OnRequestFragmentWritten() // WriteRequestFragment() expects an invocation of OnRequestFragmentWritten()
// soon after. // soon after.
StartTimeout(); StartTimeout();
} }
void U2fBleTransaction::OnRequestFragmentWritten(bool success) { void FidoBleTransaction::OnRequestFragmentWritten(bool success) {
StopTimeout(); StopTimeout();
if (!success) { if (!success) {
OnError(); OnError();
...@@ -66,11 +66,11 @@ void U2fBleTransaction::OnRequestFragmentWritten(bool success) { ...@@ -66,11 +66,11 @@ void U2fBleTransaction::OnRequestFragmentWritten(bool success) {
WriteRequestFragment(next_request_fragment); WriteRequestFragment(next_request_fragment);
} }
void U2fBleTransaction::OnResponseFragment(std::vector<uint8_t> data) { void FidoBleTransaction::OnResponseFragment(std::vector<uint8_t> data) {
StopTimeout(); StopTimeout();
if (!response_frame_assembler_) { if (!response_frame_assembler_) {
U2fBleFrameInitializationFragment fragment; FidoBleFrameInitializationFragment fragment;
if (!U2fBleFrameInitializationFragment::Parse(data, &fragment)) { if (!FidoBleFrameInitializationFragment::Parse(data, &fragment)) {
DLOG(ERROR) << "Malformed Frame Initialization Fragment"; DLOG(ERROR) << "Malformed Frame Initialization Fragment";
OnError(); OnError();
return; return;
...@@ -78,8 +78,8 @@ void U2fBleTransaction::OnResponseFragment(std::vector<uint8_t> data) { ...@@ -78,8 +78,8 @@ void U2fBleTransaction::OnResponseFragment(std::vector<uint8_t> data) {
response_frame_assembler_.emplace(fragment); response_frame_assembler_.emplace(fragment);
} else { } else {
U2fBleFrameContinuationFragment fragment; FidoBleFrameContinuationFragment fragment;
if (!U2fBleFrameContinuationFragment::Parse(data, &fragment)) { if (!FidoBleFrameContinuationFragment::Parse(data, &fragment)) {
DLOG(ERROR) << "Malformed Frame Continuation Fragment"; DLOG(ERROR) << "Malformed Frame Continuation Fragment";
OnError(); OnError();
return; return;
...@@ -94,12 +94,12 @@ void U2fBleTransaction::OnResponseFragment(std::vector<uint8_t> data) { ...@@ -94,12 +94,12 @@ void U2fBleTransaction::OnResponseFragment(std::vector<uint8_t> data) {
return; return;
} }
U2fBleFrame frame = std::move(*response_frame_assembler_->GetFrame()); FidoBleFrame frame = std::move(*response_frame_assembler_->GetFrame());
response_frame_assembler_.reset(); response_frame_assembler_.reset();
ProcessResponseFrame(std::move(frame)); ProcessResponseFrame(std::move(frame));
} }
void U2fBleTransaction::ProcessResponseFrame(U2fBleFrame response_frame) { void FidoBleTransaction::ProcessResponseFrame(FidoBleFrame response_frame) {
if (response_frame.command() == request_frame_->command()) { if (response_frame.command() == request_frame_->command()) {
request_frame_.reset(); request_frame_.reset();
std::move(callback_).Run(std::move(response_frame)); std::move(callback_).Run(std::move(response_frame));
...@@ -120,15 +120,15 @@ void U2fBleTransaction::ProcessResponseFrame(U2fBleFrame response_frame) { ...@@ -120,15 +120,15 @@ void U2fBleTransaction::ProcessResponseFrame(U2fBleFrame response_frame) {
OnError(); OnError();
} }
void U2fBleTransaction::StartTimeout() { void FidoBleTransaction::StartTimeout() {
timer_.Start(FROM_HERE, kDeviceTimeout, this, &U2fBleTransaction::OnError); timer_.Start(FROM_HERE, kDeviceTimeout, this, &FidoBleTransaction::OnError);
} }
void U2fBleTransaction::StopTimeout() { void FidoBleTransaction::StopTimeout() {
timer_.Stop(); timer_.Stop();
} }
void U2fBleTransaction::OnError() { void FidoBleTransaction::OnError() {
request_frame_.reset(); request_frame_.reset();
request_cont_fragments_ = {}; request_cont_fragments_ = {};
response_frame_assembler_.reset(); response_frame_assembler_.reset();
......
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#ifndef DEVICE_FIDO_U2F_BLE_TRANSACTION_H_ #ifndef DEVICE_FIDO_FIDO_BLE_TRANSACTION_H_
#define DEVICE_FIDO_U2F_BLE_TRANSACTION_H_ #define DEVICE_FIDO_FIDO_BLE_TRANSACTION_H_
#include <memory> #include <memory>
#include <vector> #include <vector>
...@@ -13,52 +13,52 @@ ...@@ -13,52 +13,52 @@
#include "base/memory/weak_ptr.h" #include "base/memory/weak_ptr.h"
#include "base/optional.h" #include "base/optional.h"
#include "base/timer/timer.h" #include "base/timer/timer.h"
#include "device/fido/u2f_ble_frames.h" #include "device/fido/fido_ble_frames.h"
namespace device { namespace device {
class U2fBleConnection; class FidoBleConnection;
// This class encapsulates logic related to a single U2F BLE request and // This class encapsulates logic related to a single U2F BLE request and
// response. U2fBleTransaction is owned by U2fBleDevice, which is the only class // response. FidoBleTransaction is owned by FidoBleDevice, which is the only
// that should make use of this class. // class that should make use of this class.
class U2fBleTransaction { class FidoBleTransaction {
public: public:
using FrameCallback = base::OnceCallback<void(base::Optional<U2fBleFrame>)>; using FrameCallback = base::OnceCallback<void(base::Optional<FidoBleFrame>)>;
U2fBleTransaction(U2fBleConnection* connection, FidoBleTransaction(FidoBleConnection* connection,
uint16_t control_point_length); uint16_t control_point_length);
~U2fBleTransaction(); ~FidoBleTransaction();
void WriteRequestFrame(U2fBleFrame request_frame, FrameCallback callback); void WriteRequestFrame(FidoBleFrame request_frame, FrameCallback callback);
void OnResponseFragment(std::vector<uint8_t> data); void OnResponseFragment(std::vector<uint8_t> data);
private: private:
void WriteRequestFragment(const U2fBleFrameFragment& fragment); void WriteRequestFragment(const FidoBleFrameFragment& fragment);
void OnRequestFragmentWritten(bool success); void OnRequestFragmentWritten(bool success);
void ProcessResponseFrame(U2fBleFrame response_frame); void ProcessResponseFrame(FidoBleFrame response_frame);
void StartTimeout(); void StartTimeout();
void StopTimeout(); void StopTimeout();
void OnError(); void OnError();
U2fBleConnection* connection_; FidoBleConnection* connection_;
uint16_t control_point_length_; uint16_t control_point_length_;
base::Optional<U2fBleFrame> request_frame_; base::Optional<FidoBleFrame> request_frame_;
FrameCallback callback_; FrameCallback callback_;
base::queue<U2fBleFrameContinuationFragment> request_cont_fragments_; base::queue<FidoBleFrameContinuationFragment> request_cont_fragments_;
base::Optional<U2fBleFrameAssembler> response_frame_assembler_; base::Optional<FidoBleFrameAssembler> response_frame_assembler_;
std::vector<uint8_t> buffer_; std::vector<uint8_t> buffer_;
base::OneShotTimer timer_; base::OneShotTimer timer_;
base::WeakPtrFactory<U2fBleTransaction> weak_factory_; base::WeakPtrFactory<FidoBleTransaction> weak_factory_;
DISALLOW_COPY_AND_ASSIGN(U2fBleTransaction); DISALLOW_COPY_AND_ASSIGN(FidoBleTransaction);
}; };
} // namespace device } // namespace device
#endif // DEVICE_FIDO_U2F_BLE_TRANSACTION_H_ #endif // DEVICE_FIDO_FIDO_BLE_TRANSACTION_H_
...@@ -8,8 +8,8 @@ ...@@ -8,8 +8,8 @@
#include "base/logging.h" #include "base/logging.h"
#include "build/build_config.h" #include "build/build_config.h"
#include "device/fido/fido_ble_discovery.h"
#include "device/fido/fido_device.h" #include "device/fido/fido_device.h"
#include "device/fido/u2f_ble_discovery.h"
// HID is not supported on Android. // HID is not supported on Android.
#if !defined(OS_ANDROID) #if !defined(OS_ANDROID)
...@@ -34,7 +34,7 @@ std::unique_ptr<FidoDiscovery> CreateFidoDiscoveryImpl( ...@@ -34,7 +34,7 @@ std::unique_ptr<FidoDiscovery> CreateFidoDiscoveryImpl(
#endif // !defined(OS_ANDROID) #endif // !defined(OS_ANDROID)
break; break;
case U2fTransportProtocol::kBluetoothLowEnergy: case U2fTransportProtocol::kBluetoothLowEnergy:
discovery = std::make_unique<U2fBleDiscovery>(); discovery = std::make_unique<FidoBleDiscovery>();
break; break;
} }
......
...@@ -2,33 +2,33 @@ ...@@ -2,33 +2,33 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#include "device/fido/mock_u2f_ble_connection.h" #include "device/fido/mock_fido_ble_connection.h"
#include <utility> #include <utility>
namespace device { namespace device {
MockU2fBleConnection::MockU2fBleConnection(std::string device_address) MockFidoBleConnection::MockFidoBleConnection(std::string device_address)
: U2fBleConnection(std::move(device_address)) {} : FidoBleConnection(std::move(device_address)) {}
MockU2fBleConnection::~MockU2fBleConnection() = default; MockFidoBleConnection::~MockFidoBleConnection() = default;
void MockU2fBleConnection::ReadControlPointLength( void MockFidoBleConnection::ReadControlPointLength(
ControlPointLengthCallback callback) { ControlPointLengthCallback callback) {
ReadControlPointLengthPtr(&callback); ReadControlPointLengthPtr(&callback);
} }
void MockU2fBleConnection::ReadServiceRevisions( void MockFidoBleConnection::ReadServiceRevisions(
ServiceRevisionsCallback callback) { ServiceRevisionsCallback callback) {
ReadServiceRevisionsPtr(&callback); ReadServiceRevisionsPtr(&callback);
} }
void MockU2fBleConnection::WriteControlPoint(const std::vector<uint8_t>& data, void MockFidoBleConnection::WriteControlPoint(const std::vector<uint8_t>& data,
WriteCallback callback) { WriteCallback callback) {
WriteControlPointPtr(data, &callback); WriteControlPointPtr(data, &callback);
} }
void MockU2fBleConnection::WriteServiceRevision( void MockFidoBleConnection::WriteServiceRevision(
ServiceRevision service_revision, ServiceRevision service_revision,
WriteCallback callback) { WriteCallback callback) {
WriteServiceRevisionPtr(service_revision, &callback); WriteServiceRevisionPtr(service_revision, &callback);
......
...@@ -2,23 +2,23 @@ ...@@ -2,23 +2,23 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#ifndef DEVICE_FIDO_MOCK_U2F_BLE_CONNECTION_H_ #ifndef DEVICE_FIDO_MOCK_FIDO_BLE_CONNECTION_H_
#define DEVICE_FIDO_MOCK_U2F_BLE_CONNECTION_H_ #define DEVICE_FIDO_MOCK_FIDO_BLE_CONNECTION_H_
#include <string> #include <string>
#include <vector> #include <vector>
#include "base/component_export.h" #include "base/component_export.h"
#include "base/macros.h" #include "base/macros.h"
#include "device/fido/u2f_ble_connection.h" #include "device/fido/fido_ble_connection.h"
#include "testing/gmock/include/gmock/gmock.h" #include "testing/gmock/include/gmock/gmock.h"
namespace device { namespace device {
class MockU2fBleConnection : public U2fBleConnection { class MockFidoBleConnection : public FidoBleConnection {
public: public:
explicit MockU2fBleConnection(std::string device_address); explicit MockFidoBleConnection(std::string device_address);
~MockU2fBleConnection() override; ~MockFidoBleConnection() override;
MOCK_METHOD0(Connect, void()); MOCK_METHOD0(Connect, void());
// GMock cannot mock a method taking a move-only type. // GMock cannot mock a method taking a move-only type.
...@@ -48,9 +48,9 @@ class MockU2fBleConnection : public U2fBleConnection { ...@@ -48,9 +48,9 @@ class MockU2fBleConnection : public U2fBleConnection {
ConnectionStatusCallback connection_status_callback_; ConnectionStatusCallback connection_status_callback_;
ReadCallback read_callback_; ReadCallback read_callback_;
DISALLOW_COPY_AND_ASSIGN(MockU2fBleConnection); DISALLOW_COPY_AND_ASSIGN(MockFidoBleConnection);
}; };
} // namespace device } // namespace device
#endif // DEVICE_FIDO_MOCK_U2F_BLE_CONNECTION_H_ #endif // DEVICE_FIDO_MOCK_FIDO_BLE_CONNECTION_H_
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment