| Index: components/cryptauth/remote_device.cc
|
| diff --git a/components/cryptauth/remote_device.cc b/components/cryptauth/remote_device.cc
|
| index 19665df742a95b4edba9531b4c92e17c59265e06..e3d26d0b646355825d2ad568493ec20abcf055ca 100644
|
| --- a/components/cryptauth/remote_device.cc
|
| +++ b/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 {
|
|
|