| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "components/proximity_auth/ble/proximity_auth_ble_system.h" | 5 #include "components/proximity_auth/ble/proximity_auth_ble_system.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| 11 #include "base/location.h" | 11 #include "base/location.h" |
| 12 #include "base/logging.h" | 12 #include "base/logging.h" |
| 13 #include "base/thread_task_runner_handle.h" | 13 #include "base/thread_task_runner_handle.h" |
| 14 #include "base/time/default_tick_clock.h" | 14 #include "base/time/default_tick_clock.h" |
| 15 #include "components/proximity_auth/ble/bluetooth_low_energy_connection.h" | 15 #include "components/proximity_auth/ble/bluetooth_low_energy_connection.h" |
| 16 #include "components/proximity_auth/ble/bluetooth_low_energy_connection_finder.h
" | 16 #include "components/proximity_auth/ble/bluetooth_low_energy_connection_finder.h
" |
| 17 #include "components/proximity_auth/ble/bluetooth_low_energy_device_whitelist.h" | 17 #include "components/proximity_auth/ble/bluetooth_low_energy_device_whitelist.h" |
| 18 #include "components/proximity_auth/ble/fake_wire_message.h" | 18 #include "components/proximity_auth/ble/fake_wire_message.h" |
| 19 #include "components/proximity_auth/bluetooth_throttler_impl.h" | 19 #include "components/proximity_auth/bluetooth_throttler_impl.h" |
| 20 #include "components/proximity_auth/connection.h" | 20 #include "components/proximity_auth/connection.h" |
| 21 #include "components/proximity_auth/cryptauth/base64url.h" | 21 #include "components/proximity_auth/cryptauth/base64url.h" |
| 22 #include "components/proximity_auth/cryptauth/cryptauth_client.h" | 22 #include "components/proximity_auth/cryptauth/cryptauth_client.h" |
| 23 #include "components/proximity_auth/cryptauth/proto/cryptauth_api.pb.h" | 23 #include "components/proximity_auth/cryptauth/proto/cryptauth_api.pb.h" |
| 24 #include "components/proximity_auth/logging/logging.h" | 24 #include "components/proximity_auth/logging/logging.h" |
| 25 #include "components/proximity_auth/proximity_auth_client.h" | 25 #include "components/proximity_auth/proximity_auth_client.h" |
| 26 #include "components/proximity_auth/remote_device.h" | 26 #include "components/proximity_auth/remote_device.h" |
| 27 #include "components/proximity_auth/wire_message.h" |
| 27 #include "device/bluetooth/bluetooth_device.h" | 28 #include "device/bluetooth/bluetooth_device.h" |
| 28 #include "device/bluetooth/bluetooth_gatt_connection.h" | 29 #include "device/bluetooth/bluetooth_gatt_connection.h" |
| 29 | 30 |
| 30 namespace proximity_auth { | 31 namespace proximity_auth { |
| 31 | 32 |
| 32 namespace { | 33 namespace { |
| 33 | 34 |
| 34 // The UUID of the Bluetooth Low Energy service. | 35 // The UUID of the Bluetooth Low Energy service. |
| 35 const char kSmartLockServiceUUID[] = "b3b7e28e-a000-3e17-bd86-6e97b9e28c11"; | 36 const char kSmartLockServiceUUID[] = "b3b7e28e-a000-3e17-bd86-6e97b9e28c11"; |
| 36 | 37 |
| (...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 235 connection_.reset(); | 236 connection_.reset(); |
| 236 connection_finder_.reset(); | 237 connection_finder_.reset(); |
| 237 } | 238 } |
| 238 | 239 |
| 239 void ProximityAuthBleSystem::OnFocusedUserChanged(const std::string& user_id) { | 240 void ProximityAuthBleSystem::OnFocusedUserChanged(const std::string& user_id) { |
| 240 PA_LOG(INFO) << "OnFocusedUserChanged: " << user_id; | 241 PA_LOG(INFO) << "OnFocusedUserChanged: " << user_id; |
| 241 } | 242 } |
| 242 | 243 |
| 243 void ProximityAuthBleSystem::OnMessageReceived(const Connection& connection, | 244 void ProximityAuthBleSystem::OnMessageReceived(const Connection& connection, |
| 244 const WireMessage& message) { | 245 const WireMessage& message) { |
| 245 // TODO(sacomoto): change this when WireMessage is fully implemented. | 246 PA_LOG(INFO) << "Message with " << message.payload().size() |
| 246 PA_LOG(INFO) << "Message received: " << message.payload(); | 247 << " bytes received."; |
| 247 | 248 |
| 248 // The first message should contain a public key registered in |unlock_keys_| | 249 // The first message should contain a public key registered in |unlock_keys_| |
| 249 // to authenticate the device. | 250 // to authenticate the device. |
| 250 if (!device_authenticated_) { | 251 if (!device_authenticated_) { |
| 251 std::string out_public_key; | 252 std::string out_public_key; |
| 252 if (HasUnlockKey(message.payload(), &out_public_key)) { | 253 if (HasUnlockKey(message.payload(), &out_public_key)) { |
| 253 PA_LOG(INFO) << "Device authenticated. Adding " | 254 PA_LOG(INFO) << "Device authenticated. Adding " |
| 254 << connection_->remote_device().bluetooth_address << ", " | 255 << connection_->remote_device().bluetooth_address << ", " |
| 255 << out_public_key << " to whitelist."; | 256 << out_public_key << " to whitelist."; |
| 256 device_whitelist_->AddOrUpdateDevice( | 257 device_whitelist_->AddOrUpdateDevice( |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 336 void ProximityAuthBleSystem::StartPollingScreenState() { | 337 void ProximityAuthBleSystem::StartPollingScreenState() { |
| 337 PA_LOG(INFO) << "Polling screen state."; | 338 PA_LOG(INFO) << "Polling screen state."; |
| 338 if (is_polling_screen_state_) { | 339 if (is_polling_screen_state_) { |
| 339 if (!connection_ || !connection_->IsConnected()) { | 340 if (!connection_ || !connection_->IsConnected()) { |
| 340 PA_LOG(INFO) << "Polling stopped."; | 341 PA_LOG(INFO) << "Polling stopped."; |
| 341 is_polling_screen_state_ = false; | 342 is_polling_screen_state_ = false; |
| 342 return; | 343 return; |
| 343 } | 344 } |
| 344 // Sends message requesting screen state. | 345 // Sends message requesting screen state. |
| 345 connection_->SendMessage( | 346 connection_->SendMessage( |
| 346 make_scoped_ptr(new FakeWireMessage(kPollScreenState))); | 347 make_scoped_ptr(new WireMessage(kPollScreenState))); |
| 347 | 348 |
| 348 // Schedules the next message in |kPollingIntervalSeconds| s. | 349 // Schedules the next message in |kPollingIntervalSeconds| s. |
| 349 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( | 350 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( |
| 350 FROM_HERE, base::Bind(&ProximityAuthBleSystem::StartPollingScreenState, | 351 FROM_HERE, base::Bind(&ProximityAuthBleSystem::StartPollingScreenState, |
| 351 weak_ptr_factory_.GetWeakPtr()), | 352 weak_ptr_factory_.GetWeakPtr()), |
| 352 base::TimeDelta::FromSeconds(kPollingIntervalSeconds)); | 353 base::TimeDelta::FromSeconds(kPollingIntervalSeconds)); |
| 353 | 354 |
| 354 PA_LOG(INFO) << "Next poll iteration posted."; | 355 PA_LOG(INFO) << "Next poll iteration posted."; |
| 355 } | 356 } |
| 356 } | 357 } |
| 357 | 358 |
| 358 void ProximityAuthBleSystem::StopPollingScreenState() { | 359 void ProximityAuthBleSystem::StopPollingScreenState() { |
| 359 is_polling_screen_state_ = false; | 360 is_polling_screen_state_ = false; |
| 360 } | 361 } |
| 361 | 362 |
| 362 bool ProximityAuthBleSystem::HasUnlockKey(const std::string& message, | 363 bool ProximityAuthBleSystem::HasUnlockKey(const std::string& message, |
| 363 std::string* out_public_key) { | 364 std::string* out_public_key) { |
| 364 std::string message_prefix(kPublicKeyMessagePrefix); | 365 std::string message_prefix(kPublicKeyMessagePrefix); |
| 365 if (message.substr(0, message_prefix.size()) != message_prefix) | 366 if (message.substr(0, message_prefix.size()) != message_prefix) |
| 366 return false; | 367 return false; |
| 367 std::string public_key = message.substr(message_prefix.size()); | 368 std::string public_key = message.substr(message_prefix.size()); |
| 368 if (out_public_key) | 369 if (out_public_key) |
| 369 (*out_public_key) = public_key; | 370 (*out_public_key) = public_key; |
| 370 return unlock_keys_.find(public_key) != unlock_keys_.end() || | 371 return unlock_keys_.find(public_key) != unlock_keys_.end() || |
| 371 device_whitelist_->HasDeviceWithPublicKey(public_key); | 372 device_whitelist_->HasDeviceWithPublicKey(public_key); |
| 372 } | 373 } |
| 373 | 374 |
| 374 } // namespace proximity_auth | 375 } // namespace proximity_auth |
| OLD | NEW |