Home | History | Annotate | Download | only in auth
      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