OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/chromeos/cros/cryptohome_library.h" | 5 #include "chrome/browser/chromeos/cros/cryptohome_library.h" |
6 | 6 |
7 #include <map> | 7 #include <map> |
8 | 8 |
9 #include "base/memory/weak_ptr.h" | 9 #include "base/memory/weak_ptr.h" |
10 #include "base/string_number_conversions.h" | 10 #include "base/string_number_conversions.h" |
11 #include "base/string_util.h" | 11 #include "base/string_util.h" |
12 #include "chromeos/dbus/cryptohome_client.h" | 12 #include "chromeos/dbus/cryptohome_client.h" |
13 #include "chromeos/dbus/dbus_thread_manager.h" | 13 #include "chromeos/dbus/dbus_thread_manager.h" |
14 #include "crypto/sha2.h" | |
15 | 14 |
16 namespace { | 15 namespace { |
17 | 16 |
18 const char kStubSystemSalt[] = "stub_system_salt"; | 17 const char kStubSystemSalt[] = "stub_system_salt"; |
19 const int kPassHashLen = 32; | |
20 | 18 |
21 } | 19 } |
22 | 20 |
23 namespace chromeos { | 21 namespace chromeos { |
24 | 22 |
25 // This class handles the interaction with the ChromeOS cryptohome library APIs. | 23 // This class handles the interaction with the ChromeOS cryptohome library APIs. |
26 class CryptohomeLibraryImpl : public CryptohomeLibrary { | 24 class CryptohomeLibraryImpl : public CryptohomeLibrary { |
27 public: | 25 public: |
28 CryptohomeLibraryImpl() : weak_ptr_factory_(this) { | 26 CryptohomeLibraryImpl() : weak_ptr_factory_(this) { |
29 } | 27 } |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
120 return result; | 118 return result; |
121 } | 119 } |
122 | 120 |
123 virtual bool InstallAttributesIsFirstInstall() OVERRIDE { | 121 virtual bool InstallAttributesIsFirstInstall() OVERRIDE { |
124 bool result = false; | 122 bool result = false; |
125 DBusThreadManager::Get()->GetCryptohomeClient()-> | 123 DBusThreadManager::Get()->GetCryptohomeClient()-> |
126 InstallAttributesIsFirstInstall(&result); | 124 InstallAttributesIsFirstInstall(&result); |
127 return result; | 125 return result; |
128 } | 126 } |
129 | 127 |
130 virtual std::string HashPassword(const std::string& password) OVERRIDE { | |
131 // Get salt, ascii encode, update sha with that, then update with ascii | |
132 // of password, then end. | |
133 std::string ascii_salt = GetSystemSalt(); | |
134 char passhash_buf[kPassHashLen]; | |
135 | |
136 // Hash salt and password | |
137 crypto::SHA256HashString(ascii_salt + password, | |
138 &passhash_buf, sizeof(passhash_buf)); | |
139 | |
140 return StringToLowerASCII(base::HexEncode( | |
141 reinterpret_cast<const void*>(passhash_buf), | |
142 sizeof(passhash_buf) / 2)); | |
143 } | |
144 | |
145 virtual std::string GetSystemSalt() OVERRIDE { | 128 virtual std::string GetSystemSalt() OVERRIDE { |
146 LoadSystemSalt(); // no-op if it's already loaded. | 129 LoadSystemSalt(); // no-op if it's already loaded. |
147 return StringToLowerASCII(base::HexEncode( | 130 return StringToLowerASCII(base::HexEncode( |
148 reinterpret_cast<const void*>(system_salt_.data()), | 131 reinterpret_cast<const void*>(system_salt_.data()), |
149 system_salt_.size())); | 132 system_salt_.size())); |
150 } | 133 } |
151 | 134 |
152 private: | 135 private: |
153 void LoadSystemSalt() { | 136 void LoadSystemSalt() { |
154 if (!system_salt_.empty()) | 137 if (!system_salt_.empty()) |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
227 } | 210 } |
228 | 211 |
229 virtual bool InstallAttributesIsInvalid() OVERRIDE { | 212 virtual bool InstallAttributesIsInvalid() OVERRIDE { |
230 return false; | 213 return false; |
231 } | 214 } |
232 | 215 |
233 virtual bool InstallAttributesIsFirstInstall() OVERRIDE { | 216 virtual bool InstallAttributesIsFirstInstall() OVERRIDE { |
234 return !locked_; | 217 return !locked_; |
235 } | 218 } |
236 | 219 |
237 virtual std::string HashPassword(const std::string& password) OVERRIDE { | |
238 return StringToLowerASCII(base::HexEncode( | |
239 reinterpret_cast<const void*>(password.data()), | |
240 password.length())); | |
241 } | |
242 | |
243 virtual std::string GetSystemSalt() OVERRIDE { | 220 virtual std::string GetSystemSalt() OVERRIDE { |
244 return kStubSystemSalt; | 221 return kStubSystemSalt; |
245 } | 222 } |
246 | 223 |
247 private: | 224 private: |
248 std::map<std::string, std::string> install_attrs_; | 225 std::map<std::string, std::string> install_attrs_; |
249 bool locked_; | 226 bool locked_; |
250 DISALLOW_COPY_AND_ASSIGN(CryptohomeLibraryStubImpl); | 227 DISALLOW_COPY_AND_ASSIGN(CryptohomeLibraryStubImpl); |
251 }; | 228 }; |
252 | 229 |
253 CryptohomeLibrary::CryptohomeLibrary() {} | 230 CryptohomeLibrary::CryptohomeLibrary() {} |
254 CryptohomeLibrary::~CryptohomeLibrary() {} | 231 CryptohomeLibrary::~CryptohomeLibrary() {} |
255 | 232 |
256 // static | 233 // static |
257 CryptohomeLibrary* CryptohomeLibrary::GetImpl(bool stub) { | 234 CryptohomeLibrary* CryptohomeLibrary::GetImpl(bool stub) { |
258 CryptohomeLibrary* impl; | 235 CryptohomeLibrary* impl; |
259 if (stub) | 236 if (stub) |
260 impl = new CryptohomeLibraryStubImpl(); | 237 impl = new CryptohomeLibraryStubImpl(); |
261 else | 238 else |
262 impl = new CryptohomeLibraryImpl(); | 239 impl = new CryptohomeLibraryImpl(); |
263 return impl; | 240 return impl; |
264 } | 241 } |
265 | 242 |
266 } // namespace chromeos | 243 } // namespace chromeos |
OLD | NEW |