| Index: chrome/browser/chromeos/login/managed/supervised_user_authentication.cc
|
| diff --git a/chrome/browser/chromeos/login/managed/supervised_user_authentication.cc b/chrome/browser/chromeos/login/managed/supervised_user_authentication.cc
|
| index 25e97d1af9e6e031ca95a7560b1244503a97d94d..ebec8a4647aa2174f78ae1fd9572b38bcade525c 100644
|
| --- a/chrome/browser/chromeos/login/managed/supervised_user_authentication.cc
|
| +++ b/chrome/browser/chromeos/login/managed/supervised_user_authentication.cc
|
| @@ -11,6 +11,7 @@
|
| #include "base/strings/string_number_conversions.h"
|
| #include "base/strings/string_util.h"
|
| #include "base/threading/sequenced_worker_pool.h"
|
| +#include "chrome/browser/chromeos/login/auth/key.h"
|
| #include "chrome/browser/chromeos/login/managed/locally_managed_user_constants.h"
|
| #include "chrome/browser/chromeos/login/users/supervised_user_manager.h"
|
| #include "chrome/browser/chromeos/login/users/user.h"
|
| @@ -29,10 +30,6 @@ namespace {
|
| // Byte size of hash salt.
|
| const unsigned kSaltSize = 32;
|
|
|
| -// Parameters of cryptographic hashing for new user schema.
|
| -const unsigned kNumIterations = 1234;
|
| -const unsigned kKeySizeInBits = 256;
|
| -
|
| // Size of key signature.
|
| const unsigned kHMACKeySizeInBits = 256;
|
| const int kSignatureLength = 32;
|
| @@ -104,26 +101,7 @@ SupervisedUserAuthentication::GetStableSchema() {
|
| return stable_schema_;
|
| }
|
|
|
| -std::string SupervisedUserAuthentication::TransformPassword(
|
| - const std::string& user_id,
|
| - const std::string& password) {
|
| - int user_schema = GetPasswordSchema(user_id);
|
| - if (user_schema == SCHEMA_PLAIN)
|
| - return password;
|
| -
|
| - if (user_schema == SCHEMA_SALT_HASHED) {
|
| - base::DictionaryValue holder;
|
| - std::string salt;
|
| - owner_->GetPasswordInformation(user_id, &holder);
|
| - holder.GetStringWithoutPathExpansion(kSalt, &salt);
|
| - DCHECK(!salt.empty());
|
| - return BuildPasswordForHashWithSaltSchema(salt, password);
|
| - }
|
| - NOTREACHED();
|
| - return password;
|
| -}
|
| -
|
| -UserContext SupervisedUserAuthentication::TransformPasswordInContext(
|
| +UserContext SupervisedUserAuthentication::TransformKey(
|
| const UserContext& context) {
|
| UserContext result = context;
|
| int user_schema = GetPasswordSchema(context.GetUserID());
|
| @@ -136,11 +114,10 @@ UserContext SupervisedUserAuthentication::TransformPasswordInContext(
|
| owner_->GetPasswordInformation(context.GetUserID(), &holder);
|
| holder.GetStringWithoutPathExpansion(kSalt, &salt);
|
| DCHECK(!salt.empty());
|
| - result.SetPassword(
|
| - BuildPasswordForHashWithSaltSchema(salt, context.GetPassword()));
|
| - result.SetDoesNeedPasswordHashing(false);
|
| + Key* const key = result.GetKey();
|
| + key->Transform(Key::KEY_TYPE_SALTED_PBKDF2_AES256_1234, salt);
|
| + key->SetLabel(kCryptohomeManagedUserKeyLabel);
|
| result.SetIsUsingOAuth(false);
|
| - result.SetKeyLabel(kCryptohomeManagedUserKeyLabel);
|
| return result;
|
| }
|
| NOTREACHED() << "Unknown password schema for " << context.GetUserID();
|
| @@ -162,10 +139,11 @@ bool SupervisedUserAuthentication::FillDataForNewUser(
|
| password_data->SetStringWithoutPathExpansion(kSalt, salt);
|
| int revision = kMinPasswordRevision;
|
| password_data->SetIntegerWithoutPathExpansion(kPasswordRevision, revision);
|
| - std::string salted_password =
|
| - BuildPasswordForHashWithSaltSchema(salt, password);
|
| - std::string base64_signature_key = BuildRawHMACKey();
|
| - std::string base64_signature =
|
| + Key key(password);
|
| + key.Transform(Key::KEY_TYPE_SALTED_PBKDF2_AES256_1234, salt);
|
| + const std::string salted_password = key.GetSecret();
|
| + const std::string base64_signature_key = BuildRawHMACKey();
|
| + const std::string base64_signature =
|
| BuildPasswordSignature(salted_password, revision, base64_signature_key);
|
| password_data->SetStringWithoutPathExpansion(kEncryptedPassword,
|
| salted_password);
|
| @@ -312,22 +290,6 @@ void SupervisedUserAuthentication::LoadPasswordUpdateData(
|
| base::Bind(&OnPasswordDataLoaded, success_callback, failure_callback));
|
| }
|
|
|
| -// static
|
| -std::string SupervisedUserAuthentication::BuildPasswordForHashWithSaltSchema(
|
| - const std::string& salt,
|
| - const std::string& plain_password) {
|
| - scoped_ptr<crypto::SymmetricKey> key(
|
| - crypto::SymmetricKey::DeriveKeyFromPassword(crypto::SymmetricKey::AES,
|
| - plain_password,
|
| - salt,
|
| - kNumIterations,
|
| - kKeySizeInBits));
|
| - std::string raw_result, result;
|
| - key->GetRawKey(&raw_result);
|
| - base::Base64Encode(raw_result, &result);
|
| - return result;
|
| -}
|
| -
|
| std::string SupervisedUserAuthentication::BuildPasswordSignature(
|
| const std::string& password,
|
| int revision,
|
|
|