summaryrefslogtreecommitdiffstats
path: root/chrome/browser/chromeos/cros/cryptohome_library.cc
diff options
context:
space:
mode:
authorzelidrag@chromium.org <zelidrag@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-12-03 00:57:01 +0000
committerzelidrag@chromium.org <zelidrag@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-12-03 00:57:01 +0000
commit8c5e41e48924619bc30e9bc3fefc8a7f9fdad90c (patch)
tree52c2e7d1a965dab49e0678b6be0b091e6f6739d7 /chrome/browser/chromeos/cros/cryptohome_library.cc
parent5b7cb5670cb2a1f9154c39e0dea8a104b2293aa8 (diff)
downloadchromium_src-8c5e41e48924619bc30e9bc3fefc8a7f9fdad90c.zip
chromium_src-8c5e41e48924619bc30e9bc3fefc8a7f9fdad90c.tar.gz
chromium_src-8c5e41e48924619bc30e9bc3fefc8a7f9fdad90c.tar.bz2
Shaving parallel authenticator yak to remove unnecessary dependency on this class from OAuth specific code. Moved system salt and supplemental key related methods to cryptohome and cert libraries instead.
BUG=chromium-os:23301 TEST=none Review URL: http://codereview.chromium.org/8761016 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@112834 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/chromeos/cros/cryptohome_library.cc')
-rw-r--r--chrome/browser/chromeos/cros/cryptohome_library.cc88
1 files changed, 61 insertions, 27 deletions
diff --git a/chrome/browser/chromeos/cros/cryptohome_library.cc b/chrome/browser/chromeos/cros/cryptohome_library.cc
index 4711dcf..a9183d5 100644
--- a/chrome/browser/chromeos/cros/cryptohome_library.cc
+++ b/chrome/browser/chromeos/cros/cryptohome_library.cc
@@ -8,14 +8,21 @@
#include "base/command_line.h"
#include "base/hash_tables.h"
#include "base/message_loop.h"
+#include "base/string_number_conversions.h"
+#include "base/string_util.h"
#include "chrome/browser/chromeos/cros/cros_library.h"
#include "chrome/common/chrome_switches.h"
#include "content/public/browser/browser_thread.h"
+#include "crypto/encryptor.h"
+#include "crypto/sha2.h"
using content::BrowserThread;
namespace {
- const char kStubSystemSalt[] = "stub_system_salt";
+
+const char kStubSystemSalt[] = "stub_system_salt";
+const int kPassHashLen = 32;
+
}
namespace chromeos {
@@ -84,23 +91,6 @@ class CryptohomeLibraryImpl : public CryptohomeLibrary {
return chromeos::CryptohomeIsMounted();
}
- virtual CryptohomeBlob GetSystemSalt() OVERRIDE {
- CryptohomeBlob system_salt;
- char* salt_buf;
- int salt_len;
- bool result = chromeos::CryptohomeGetSystemSaltSafe(&salt_buf, &salt_len);
- if (result) {
- system_salt.resize(salt_len);
- if ((int)system_salt.size() == salt_len) {
- memcpy(&system_salt[0], static_cast<const void*>(salt_buf),
- salt_len);
- } else {
- system_salt.clear();
- }
- }
- return system_salt;
- }
-
virtual bool AsyncSetOwnerUser(
const std::string& username, Delegate* d) OVERRIDE {
return CacheCallback(
@@ -184,7 +174,31 @@ class CryptohomeLibraryImpl : public CryptohomeLibrary {
return chromeos::CryptohomePkcs11IsTpmTokenReady();
}
+ virtual std::string HashPassword(const std::string& password) OVERRIDE {
+ // Get salt, ascii encode, update sha with that, then update with ascii
+ // of password, then end.
+ std::string ascii_salt = GetSystemSalt();
+ char passhash_buf[kPassHashLen];
+
+ // Hash salt and password
+ crypto::SHA256HashString(ascii_salt + password,
+ &passhash_buf, sizeof(passhash_buf));
+
+ return StringToLowerASCII(base::HexEncode(
+ reinterpret_cast<const void*>(passhash_buf),
+ sizeof(passhash_buf) / 2));
+ }
+
+ 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()));
+ }
+
private:
+ typedef base::hash_map<int, Delegate*> CallbackMap;
+
static void Handler(const chromeos::CryptohomeAsyncCallStatus& event,
void* cryptohome_library) {
CryptohomeLibraryImpl* library =
@@ -213,7 +227,25 @@ class CryptohomeLibraryImpl : public CryptohomeLibrary {
return true;
}
- typedef base::hash_map<int, Delegate*> CallbackMap;
+ void LoadSystemSalt() {
+ if (!system_salt_.empty())
+ return;
+
+ char* salt_buf;
+ int salt_len;
+ bool result = chromeos::CryptohomeGetSystemSaltSafe(&salt_buf, &salt_len);
+ if (result) {
+ system_salt_.resize(salt_len);
+ if (static_cast<int>(system_salt_.size()) == salt_len)
+ memcpy(&system_salt_[0], static_cast<const void*>(salt_buf), salt_len);
+ else
+ system_salt_.clear();
+ }
+ CHECK(!system_salt_.empty());
+ CHECK_EQ(system_salt_.size() % 2, 0U);
+ }
+
+ chromeos::CryptohomeBlob system_salt_;
mutable CallbackMap callback_map_;
void* cryptohome_connection_;
@@ -277,14 +309,6 @@ class CryptohomeLibraryStubImpl : public CryptohomeLibrary {
return true;
}
- virtual CryptohomeBlob GetSystemSalt() OVERRIDE {
- CryptohomeBlob salt = CryptohomeBlob();
- for (size_t i = 0; i < strlen(kStubSystemSalt); i++)
- salt.push_back(static_cast<unsigned char>(kStubSystemSalt[i]));
-
- return salt;
- }
-
virtual bool AsyncSetOwnerUser(
const std::string& username, Delegate* callback) OVERRIDE {
BrowserThread::PostTask(
@@ -360,6 +384,16 @@ class CryptohomeLibraryStubImpl : public CryptohomeLibrary {
virtual bool Pkcs11IsTpmTokenReady() OVERRIDE { return true; }
+ virtual std::string HashPassword(const std::string& password) OVERRIDE {
+ return StringToLowerASCII(base::HexEncode(
+ reinterpret_cast<const void*>(password.data()),
+ password.length()));
+ }
+
+ virtual std::string GetSystemSalt() OVERRIDE {
+ return kStubSystemSalt;
+ }
+
private:
static void DoStubCallback(Delegate* callback) {
if (callback)