| Index: components/cryptauth/cryptauth_device_manager.cc
|
| diff --git a/components/cryptauth/cryptauth_device_manager.cc b/components/cryptauth/cryptauth_device_manager.cc
|
| index 3597043786193c30dedcaf71eff49a40a69ea973..f2e6b55e9f6e31844934ee6f6d26208f05029a99 100644
|
| --- a/components/cryptauth/cryptauth_device_manager.cc
|
| +++ b/components/cryptauth/cryptauth_device_manager.cc
|
| @@ -68,9 +68,14 @@ std::unique_ptr<base::ListValue> BeaconSeedsToListValue(
|
| std::unique_ptr<base::DictionaryValue> beacon_seed_value(
|
| new base::DictionaryValue());
|
|
|
| - // Note: Seed data is already base-64 encoded, so there is no need to
|
| - // convert it.
|
| - beacon_seed_value->SetString(kExternalDeviceKeyBeaconSeedData, seed.data());
|
| + // Note that the |BeaconSeed|s' data is stored in Base64Url encoding because
|
| + // dictionary values must be valid UTF8 strings.
|
| + std::string seed_data_b64;
|
| + base::Base64UrlEncode(seed.data(),
|
| + base::Base64UrlEncodePolicy::INCLUDE_PADDING,
|
| + &seed_data_b64);
|
| + beacon_seed_value->SetString(kExternalDeviceKeyBeaconSeedData,
|
| + seed_data_b64);
|
|
|
| // Set the timestamps as string representations of their numeric value
|
| // since there is no notion of a base::LongValue.
|
| @@ -168,19 +173,27 @@ void AddBeaconSeedsToExternalDevice(
|
| continue;
|
| }
|
|
|
| - std::string data, start_time_millis_str, end_time_millis_str;
|
| - if (!seed_dictionary->GetString(kExternalDeviceKeyBeaconSeedData, &data)
|
| - || !seed_dictionary->GetString(
|
| - kExternalDeviceKeyBeaconSeedStartMs,
|
| - &start_time_millis_str)
|
| - || !seed_dictionary->GetString(
|
| - kExternalDeviceKeyBeaconSeedEndMs,
|
| - &end_time_millis_str)) {
|
| + std::string seed_data_b64, start_time_millis_str, end_time_millis_str;
|
| + if (!seed_dictionary->GetString(kExternalDeviceKeyBeaconSeedData,
|
| + &seed_data_b64) ||
|
| + !seed_dictionary->GetString(kExternalDeviceKeyBeaconSeedStartMs,
|
| + &start_time_millis_str) ||
|
| + !seed_dictionary->GetString(kExternalDeviceKeyBeaconSeedEndMs,
|
| + &end_time_millis_str)) {
|
| PA_LOG(WARNING) << "Unable to deserialize BeaconSeed due to missing "
|
| << "data; skipping.";
|
| continue;
|
| }
|
|
|
| + // Seed data is returned as raw data, not in Base64 encoding.
|
| + std::string seed_data;
|
| + if (!base::Base64UrlDecode(seed_data_b64,
|
| + base::Base64UrlDecodePolicy::REQUIRE_PADDING,
|
| + &seed_data)) {
|
| + PA_LOG(WARNING) << "Decoding seed data failed.";
|
| + continue;
|
| + }
|
| +
|
| int64_t start_time_millis, end_time_millis;
|
| if (!base::StringToInt64(start_time_millis_str, &start_time_millis)
|
| || !base::StringToInt64(end_time_millis_str, &end_time_millis)) {
|
| @@ -190,7 +203,7 @@ void AddBeaconSeedsToExternalDevice(
|
| }
|
|
|
| cryptauth::BeaconSeed* seed = external_device.add_beacon_seeds();
|
| - seed->set_data(data);
|
| + seed->set_data(seed_data);
|
| seed->set_start_time_millis(start_time_millis);
|
| seed->set_end_time_millis(end_time_millis);
|
| }
|
|
|