Chromium Code Reviews| Index: chromeos/cryptohome/cryptohome_library.cc |
| diff --git a/chromeos/cryptohome/cryptohome_library.cc b/chromeos/cryptohome/cryptohome_library.cc |
| index ae045606a46c887e50d61cbe60e9c8c6d01075cd..46ccbb5393e6744552a5a59d8fca6905d7a952bc 100644 |
| --- a/chromeos/cryptohome/cryptohome_library.cc |
| +++ b/chromeos/cryptohome/cryptohome_library.cc |
| @@ -33,7 +33,7 @@ void DoNothing(DBusMethodCallStatus call_status) {} |
| // This class handles the interaction with the ChromeOS cryptohome library APIs. |
| class CryptohomeLibraryImpl : public CryptohomeLibrary { |
| public: |
| - CryptohomeLibraryImpl() : weak_ptr_factory_(this) { |
| + CryptohomeLibraryImpl() { |
| } |
| virtual ~CryptohomeLibraryImpl() { |
| @@ -117,9 +117,7 @@ class CryptohomeLibraryImpl : public CryptohomeLibrary { |
| virtual std::string GetSystemSalt() OVERRIDE { |
| LoadSystemSalt(); // no-op if it's already loaded. |
| - return StringToLowerASCII(base::HexEncode( |
| - reinterpret_cast<const void*>(system_salt_.data()), |
| - system_salt_.size())); |
| + return system_salt_; |
| } |
| virtual std::string EncryptWithSystemSalt(const std::string& token) OVERRIDE { |
| @@ -132,7 +130,7 @@ class CryptohomeLibraryImpl : public CryptohomeLibrary { |
| return std::string(); |
| } |
| return EncryptTokenWithKey(system_salt_key_.get(), |
| - GetSystemSalt(), |
| + system_salt_, |
| token); |
| } |
| @@ -147,7 +145,7 @@ class CryptohomeLibraryImpl : public CryptohomeLibrary { |
| return std::string(); |
| } |
| return DecryptTokenWithKey(system_salt_key_.get(), |
| - GetSystemSalt(), |
| + system_salt_, |
| encrypted_token_hex); |
| } |
| @@ -155,17 +153,23 @@ class CryptohomeLibraryImpl : public CryptohomeLibrary { |
| void LoadSystemSalt() { |
| if (!system_salt_.empty()) |
| return; |
| - DBusThreadManager::Get()->GetCryptohomeClient()-> |
| - GetSystemSalt(&system_salt_); |
| - CHECK(!system_salt_.empty()); |
| - CHECK_EQ(system_salt_.size() % 2, 0U); |
| + std::vector<uint8> salt; |
| + DBusThreadManager::Get()->GetCryptohomeClient()->GetSystemSalt(&salt); |
| + if (salt.empty() || salt.size() % 2 != 0U) { |
| + LOG(WARNING) << "System salt not available"; |
| + return; |
| + } |
| + system_salt_ = StringToLowerASCII(base::HexEncode( |
| + reinterpret_cast<const void*>(salt.data()), salt.size())); |
| } |
| // TODO: should this use the system salt for both the password and the salt |
| // value, or should this use a separate salt value? |
| bool LoadSystemSaltKey() { |
|
hashimoto
2013/09/18 05:53:19
nit: This method no longer loads the key, could yo
|
| + if (system_salt_.empty()) |
| + return false; |
| if (!system_salt_key_.get()) |
| - system_salt_key_.reset(PassphraseToKey(GetSystemSalt(), GetSystemSalt())); |
| + system_salt_key_.reset(PassphraseToKey(system_salt_, system_salt_)); |
| return system_salt_key_.get(); |
| } |
| @@ -227,8 +231,7 @@ class CryptohomeLibraryImpl : public CryptohomeLibrary { |
| return token; |
| } |
| - base::WeakPtrFactory<CryptohomeLibraryImpl> weak_ptr_factory_; |
| - std::vector<uint8> system_salt_; |
| + std::string system_salt_; |
| // A key based on the system salt. Useful for encrypting device-level |
| // data for which we have no additional credentials. |
| scoped_ptr<crypto::SymmetricKey> system_salt_key_; |