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_; |