| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // AuthenticationMethod represents an authentication algorithm and its |
| // configuration. It knows how to parse and format authentication |
| // method names. |
| // Currently the following methods are supported: |
| // spake2_plain - SPAKE2 without hashing applied to the password. |
| // spake2_hmac - SPAKE2 with HMAC hashing of the password. |
| |
| #ifndef REMOTING_PROTOCOL_AUTHENTICATION_METHOD_H_ |
| #define REMOTING_PROTOCOL_AUTHENTICATION_METHOD_H_ |
| |
| #include <string> |
| |
| namespace remoting { |
| namespace protocol { |
| |
| class Authenticator; |
| |
| class AuthenticationMethod { |
| public: |
| enum MethodType { |
| INVALID, |
| SPAKE2, |
| SPAKE2_PAIR, |
| THIRD_PARTY |
| }; |
| |
| enum HashFunction { |
| NONE, |
| HMAC_SHA256, |
| }; |
| |
| // Constructors for various authentication methods. |
| static AuthenticationMethod Invalid(); |
| static AuthenticationMethod Spake2(HashFunction hash_function); |
| static AuthenticationMethod Spake2Pair(); |
| static AuthenticationMethod ThirdParty(); |
| |
| // Parses a string that defines an authentication method. Returns an |
| // invalid value if the string is invalid. |
| static AuthenticationMethod FromString(const std::string& value); |
| |
| // Applies the specified hash function to |shared_secret| with the |
| // specified |tag| as a key. |
| static std::string ApplyHashFunction(HashFunction hash_function, |
| const std::string& tag, |
| const std::string& shared_secret); |
| |
| bool is_valid() const { return type_ != INVALID; } |
| |
| MethodType type() const { return type_; } |
| |
| // Following methods are valid only when is_valid() returns true. |
| |
| // Hash function applied to the shared secret on both ends. |
| HashFunction hash_function() const; |
| |
| // Returns string representation of the value stored in this object. |
| const std::string ToString() const; |
| |
| // Comparison operators so that std::find() can be used with |
| // collections of this class. |
| bool operator ==(const AuthenticationMethod& other) const; |
| bool operator !=(const AuthenticationMethod& other) const { |
| return !(*this == other); |
| } |
| |
| protected: |
| AuthenticationMethod(); |
| AuthenticationMethod(MethodType type, HashFunction hash_function); |
| |
| MethodType type_; |
| HashFunction hash_function_; |
| }; |
| |
| // SharedSecretHash stores hash of a host secret paired with the type |
| // of the hashing function. |
| struct SharedSecretHash { |
| AuthenticationMethod::HashFunction hash_function; |
| std::string value; |
| |
| // Parse string representation of a shared secret hash. The |as_string| |
| // must be in form "<hash_function>:<hash_value_base64>". |
| bool Parse(const std::string& as_string); |
| }; |
| |
| } // namespace protocol |
| } // namespace remoting |
| |
| #endif // REMOTING_PROTOCOL_AUTHENTICATION_METHOD_H_ |