Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / chromeos / login / auth / key.h
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_