diff options
Diffstat (limited to 'chromium/components/cryptauth/remote_device.cc')
-rw-r--r-- | chromium/components/cryptauth/remote_device.cc | 54 |
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 { |