1 // Copyright 2014 The Chromium 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 #ifndef CHROMEOS_LOGIN_AUTH_KEY_H_ 6 #define CHROMEOS_LOGIN_AUTH_KEY_H_ 7 8 #include <string> 9 10 #include "chromeos/chromeos_export.h" 11 12 namespace chromeos { 13 14 // Key for user authentication. The class supports hashing of plain text 15 // passwords to generate keys as well as the use of pre-hashed keys. 16 class CHROMEOS_EXPORT Key { 17 public: 18 enum KeyType { 19 // Plain text password. 20 KEY_TYPE_PASSWORD_PLAIN = 0, 21 // SHA256 of salt + password, first half only, lower-case hex encoded. 22 KEY_TYPE_SALTED_SHA256_TOP_HALF = 1, 23 // PBKDF2 with 256 bit AES and 1234 iterations, base64 encoded. 24 KEY_TYPE_SALTED_PBKDF2_AES256_1234 = 2, 25 // SHA256 of salt + password, base64 encoded. 26 KEY_TYPE_SALTED_SHA256 = 3, 27 28 // Sentinel. Must be last. 29 KEY_TYPE_COUNT 30 }; 31 32 Key(); 33 Key(const Key& other); 34 explicit Key(const std::string& plain_text_password); 35 Key(KeyType key_type, const std::string& salt, const std::string& secret); 36 ~Key(); 37 38 bool operator==(const Key& other) const; 39 40 KeyType GetKeyType() const; 41 const std::string& GetSecret() const; 42 const std::string& GetLabel() const; 43 44 void SetLabel(const std::string& label); 45 46 void ClearSecret(); 47 48 void Transform(KeyType target_key_type, const std::string& salt); 49 50 private: 51 KeyType key_type_; 52 std::string salt_; 53 std::string secret_; 54 std::string label_; 55 }; 56 57 } // namespace chromeos 58 59 #endif // CHROMEOS_LOGIN_AUTH_KEY_H_ 60