| Index: chromeos/cryptohome/homedir_methods.cc
|
| diff --git a/chromeos/cryptohome/homedir_methods.cc b/chromeos/cryptohome/homedir_methods.cc
|
| index 73a741b51c111289c845252eba7f96420a89beff..3f80453a40206fd190210ef25de1cc42cf67f654 100644
|
| --- a/chromeos/cryptohome/homedir_methods.cc
|
| +++ b/chromeos/cryptohome/homedir_methods.cc
|
| @@ -44,20 +44,36 @@ void FillKeyProtobuf(const KeyDefinition& key_def, Key* key) {
|
| PRIV_AUTHORIZED_UPDATE);
|
| }
|
|
|
| - if (key_def.encryption_key.empty() && key_def.signature_key.empty())
|
| - return;
|
| -
|
| - KeyAuthorizationData* auth_data = data->add_authorization_data();
|
| - auth_data->set_type(KeyAuthorizationData::KEY_AUTHORIZATION_TYPE_HMACSHA256);
|
| - if (!key_def.encryption_key.empty()) {
|
| - KeyAuthorizationSecret* secret = auth_data->add_secrets();
|
| - secret->mutable_usage()->set_encrypt(true);
|
| - secret->set_symmetric_key(key_def.encryption_key);
|
| + const bool has_auth_data =
|
| + !key_def.encryption_key.empty() || !key_def.signature_key.empty();
|
| + if (has_auth_data) {
|
| + KeyAuthorizationData* auth_data = data->add_authorization_data();
|
| + auth_data->set_type(
|
| + KeyAuthorizationData::KEY_AUTHORIZATION_TYPE_HMACSHA256);
|
| + if (!key_def.encryption_key.empty()) {
|
| + KeyAuthorizationSecret* secret = auth_data->add_secrets();
|
| + secret->mutable_usage()->set_encrypt(true);
|
| + secret->set_symmetric_key(key_def.encryption_key);
|
| + }
|
| + if (!key_def.signature_key.empty()) {
|
| + KeyAuthorizationSecret* secret = auth_data->add_secrets();
|
| + secret->mutable_usage()->set_sign(true);
|
| + secret->set_symmetric_key(key_def.signature_key);
|
| + }
|
| }
|
| - if (!key_def.signature_key.empty()) {
|
| - KeyAuthorizationSecret* secret = auth_data->add_secrets();
|
| - secret->mutable_usage()->set_sign(true);
|
| - secret->set_symmetric_key(key_def.signature_key);
|
| +
|
| + if (!key_def.provider_data.empty()) {
|
| + KeyProviderData* provider_data = data->mutable_provider_data();
|
| + for (size_t i = 0; i < key_def.provider_data.size(); ++i) {
|
| + const ProviderDataEntry& entry_data = key_def.provider_data[i];
|
| +
|
| + KeyProviderData_Entry* entry = provider_data->add_entry();
|
| + entry->set_name(entry_data.name);
|
| + if (entry_data.has_number)
|
| + entry->set_number(entry_data.number);
|
| + if (entry_data.has_bytes)
|
| + entry->set_bytes(entry_data.bytes);
|
| + }
|
| }
|
| }
|
|
|
| @@ -329,22 +345,20 @@ class HomedirMethodsImpl : public HomedirMethods {
|
| ++provider_data_it) {
|
| // Extract |name|.
|
| key_data->provider_data.push_back(
|
| - new RetrievedKeyData::ProviderData(provider_data_it->name()));
|
| - RetrievedKeyData::ProviderData* provider_data =
|
| - key_data->provider_data.back();
|
| + ProviderDataEntry(provider_data_it->name()));
|
| + ProviderDataEntry* provider_data = &key_data->provider_data.back();
|
|
|
| int data_items = 0;
|
|
|
| // Extract |number|.
|
| if (provider_data_it->has_number()) {
|
| - provider_data->number.reset(new int64(provider_data_it->number()));
|
| + provider_data->SetNumber(provider_data_it->number());
|
| ++data_items;
|
| }
|
|
|
| // Extract |bytes|.
|
| if (provider_data_it->has_bytes()) {
|
| - provider_data->bytes.reset(
|
| - new std::string(provider_data_it->bytes()));
|
| + provider_data->SetBytes(provider_data_it->bytes());
|
| ++data_items;
|
| }
|
|
|
|
|