| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2009-2010 The Chromium OS Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "cryptohome/username_passhash.h" | |
| 6 | |
| 7 #include <openssl/sha.h> | |
| 8 | |
| 9 #include "base/logging.h" | |
| 10 #include "chromeos/utility.h" | |
| 11 | |
| 12 namespace cryptohome { | |
| 13 using namespace chromeos; | |
| 14 using std::string; | |
| 15 | |
| 16 UsernamePasshash::UsernamePasshash(const char *username, | |
| 17 const int username_length, | |
| 18 const char *passhash, | |
| 19 const int passhash_length) | |
| 20 : username_(username, username_length), | |
| 21 passhash_(passhash, passhash_length) { | |
| 22 } | |
| 23 | |
| 24 void UsernamePasshash::GetFullUsername(char *name_buffer, int length) const { | |
| 25 strncpy(name_buffer, username_.c_str(), length); | |
| 26 } | |
| 27 | |
| 28 void UsernamePasshash::GetPartialUsername(char *name_buffer, int length) const { | |
| 29 size_t at_index = username_.find('@'); | |
| 30 string partial = username_.substr(0, at_index); | |
| 31 strncpy(name_buffer, partial.c_str(), length); | |
| 32 } | |
| 33 | |
| 34 string UsernamePasshash::GetObfuscatedUsername(const Blob &system_salt) const { | |
| 35 CHECK(!username_.empty()); | |
| 36 | |
| 37 SHA_CTX ctx; | |
| 38 unsigned char md_value[SHA_DIGEST_LENGTH]; | |
| 39 | |
| 40 SHA1_Init(&ctx); | |
| 41 SHA1_Update(&ctx, &system_salt[0], system_salt.size()); | |
| 42 SHA1_Update(&ctx, username_.c_str(), username_.length()); | |
| 43 SHA1_Final(md_value, &ctx); | |
| 44 | |
| 45 Blob md_blob(md_value, | |
| 46 md_value + (SHA_DIGEST_LENGTH * sizeof(unsigned char))); | |
| 47 | |
| 48 return AsciiEncode(md_blob); | |
| 49 } | |
| 50 | |
| 51 string UsernamePasshash::GetPasswordWeakHash(const Blob &system_salt) const { | |
| 52 return passhash_; | |
| 53 } | |
| 54 | |
| 55 } // namespace cryptohome | |
| OLD | NEW |