summaryrefslogtreecommitdiff
path: root/chromium/components/cryptauth/remote_device.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/components/cryptauth/remote_device.cc')
-rw-r--r--chromium/components/cryptauth/remote_device.cc54
1 files changed, 47 insertions, 7 deletions
diff --git a/chromium/components/cryptauth/remote_device.cc b/chromium/components/cryptauth/remote_device.cc
index 19665df742a..e3d26d0b646 100644
--- a/chromium/components/cryptauth/remote_device.cc
+++ b/chromium/components/cryptauth/remote_device.cc
@@ -8,6 +8,30 @@
namespace cryptauth {
+namespace {
+
+// Returns true if both vectors are BeaconSeeds are equal.
+bool AreBeaconSeedsEqual(const std::vector<BeaconSeed> beacon_seeds1,
+ const std::vector<BeaconSeed> beacon_seeds2) {
+ if (beacon_seeds1.size() != beacon_seeds2.size()) {
+ return false;
+ }
+
+ for (size_t i = 0; i < beacon_seeds1.size(); ++i) {
+ const BeaconSeed& seed1 = beacon_seeds1[i];
+ const BeaconSeed& seed2 = beacon_seeds2[i];
+ if (seed1.start_time_millis() != seed2.start_time_millis() ||
+ seed1.end_time_millis() != seed2.end_time_millis() ||
+ seed1.data() != seed2.data()) {
+ return false;
+ }
+ }
+
+ return true;
+}
+
+} // namespace
+
RemoteDevice::RemoteDevice() {}
RemoteDevice::RemoteDevice(const std::string& user_id,
@@ -21,12 +45,19 @@ RemoteDevice::RemoteDevice(const std::string& user_id,
public_key(public_key),
bluetooth_address(bluetooth_address),
persistent_symmetric_key(persistent_symmetric_key),
- sign_in_challenge(sign_in_challenge) {}
+ sign_in_challenge(sign_in_challenge),
+ are_beacon_seeds_loaded(false) {}
RemoteDevice::RemoteDevice(const RemoteDevice& other) = default;
RemoteDevice::~RemoteDevice() {}
+void RemoteDevice::LoadBeaconSeeds(
+ const std::vector<BeaconSeed>& beacon_seeds) {
+ this->are_beacon_seeds_loaded = true;
+ this->beacon_seeds = beacon_seeds;
+}
+
std::string RemoteDevice::GetDeviceId() const {
std::string to_return;
base::Base64Encode(public_key, &to_return);
@@ -38,12 +69,21 @@ std::string RemoteDevice::GetTruncatedDeviceIdForLogs() const {
}
bool RemoteDevice::operator==(const RemoteDevice& other) const {
- return user_id == other.user_id
- && name == other.name
- && public_key == other.public_key
- && bluetooth_address == other.bluetooth_address
- && persistent_symmetric_key == other.persistent_symmetric_key
- && sign_in_challenge == other.sign_in_challenge;
+ // Only compare |beacon_seeds| if they are loaded.
+ bool are_beacon_seeds_equal = false;
+ if (are_beacon_seeds_loaded) {
+ are_beacon_seeds_equal =
+ other.are_beacon_seeds_loaded &&
+ AreBeaconSeedsEqual(beacon_seeds, other.beacon_seeds);
+ } else {
+ are_beacon_seeds_equal = !other.are_beacon_seeds_loaded;
+ }
+
+ return user_id == other.user_id && name == other.name &&
+ public_key == other.public_key &&
+ bluetooth_address == other.bluetooth_address &&
+ persistent_symmetric_key == other.persistent_symmetric_key &&
+ sign_in_challenge == other.sign_in_challenge && are_beacon_seeds_equal;
}
bool RemoteDevice::operator<(const RemoteDevice& other) const {