Index: remoting/protocol/authentication_method.cc |
diff --git a/remoting/protocol/authentication_method.cc b/remoting/protocol/authentication_method.cc |
index d02a19ff091fecdd9ac408a01e749325f5e35df5..f78b0db76ae0a2f3ec15f1940993c3bce7f09e51 100644 |
--- a/remoting/protocol/authentication_method.cc |
+++ b/remoting/protocol/authentication_method.cc |
@@ -4,63 +4,60 @@ |
#include "remoting/protocol/authentication_method.h" |
-#include <stddef.h> |
- |
-#include "base/base64.h" |
#include "base/logging.h" |
#include "crypto/hmac.h" |
#include "remoting/protocol/auth_util.h" |
+#include "remoting/protocol/name_value_map.h" |
namespace remoting { |
namespace protocol { |
-// static |
-AuthenticationMethod AuthenticationMethod::Invalid() { |
- return AuthenticationMethod(); |
+const NameMapElement<AuthenticationMethod> kAuthenticationMethodStrings[] = { |
+ {AuthenticationMethod::SPAKE2_SHARED_SECRET_PLAIN, "spake2_plain"}, |
+ {AuthenticationMethod::SPAKE2_SHARED_SECRET_HMAC, "spake2_hmac"}, |
+ {AuthenticationMethod::SPAKE2_PAIR, "spake2_pair"}, |
+ {AuthenticationMethod::THIRD_PARTY, "third_party"}}; |
+ |
+AuthenticationMethod ParseAuthenticationMethodString(const std::string& value) { |
+ AuthenticationMethod result; |
+ if (!NameToValue(kAuthenticationMethodStrings, value, &result)) |
+ return AuthenticationMethod::INVALID; |
+ return result; |
} |
-// static |
-AuthenticationMethod AuthenticationMethod::Spake2(HashFunction hash_function) { |
- return AuthenticationMethod(SPAKE2, hash_function); |
+const std::string AuthenticationMethodToString( |
+ AuthenticationMethod method) { |
+ return ValueToName(kAuthenticationMethodStrings, method); |
} |
-// static |
-AuthenticationMethod AuthenticationMethod::Spake2Pair() { |
- return AuthenticationMethod(SPAKE2_PAIR, HMAC_SHA256); |
-} |
+HashFunction GetHashFunctionForAuthenticationMethod( |
+ AuthenticationMethod method) { |
+ switch (method) { |
+ case AuthenticationMethod::INVALID: |
+ NOTREACHED(); |
+ return HashFunction::NONE; |
-// static |
-AuthenticationMethod AuthenticationMethod::ThirdParty() { |
- return AuthenticationMethod(THIRD_PARTY, NONE); |
-} |
+ case AuthenticationMethod::SPAKE2_SHARED_SECRET_PLAIN: |
+ case AuthenticationMethod::THIRD_PARTY: |
+ return HashFunction::NONE; |
-// static |
-AuthenticationMethod AuthenticationMethod::FromString( |
- const std::string& value) { |
- if (value == "spake2_pair") { |
- return Spake2Pair(); |
- } else if (value == "spake2_plain") { |
- return Spake2(NONE); |
- } else if (value == "spake2_hmac") { |
- return Spake2(HMAC_SHA256); |
- } else if (value == "third_party") { |
- return ThirdParty(); |
- } else { |
- return AuthenticationMethod::Invalid(); |
+ case AuthenticationMethod::SPAKE2_SHARED_SECRET_HMAC: |
+ case AuthenticationMethod::SPAKE2_PAIR: |
+ return HashFunction::HMAC_SHA256; |
} |
+ |
+ NOTREACHED(); |
+ return HashFunction::NONE; |
} |
-// static |
-std::string AuthenticationMethod::ApplyHashFunction( |
- HashFunction hash_function, |
- const std::string& tag, |
- const std::string& shared_secret) { |
+std::string ApplySharedSecretHashFunction(HashFunction hash_function, |
+ const std::string& tag, |
+ const std::string& shared_secret) { |
switch (hash_function) { |
- case NONE: |
+ case HashFunction::NONE: |
return shared_secret; |
- break; |
- case HMAC_SHA256: { |
+ case HashFunction::HMAC_SHA256: { |
crypto::HMAC response(crypto::HMAC::SHA256); |
if (!response.Init(tag)) { |
LOG(FATAL) << "HMAC::Init failed"; |
@@ -79,76 +76,5 @@ std::string AuthenticationMethod::ApplyHashFunction( |
return shared_secret; |
} |
-AuthenticationMethod::AuthenticationMethod() |
- : type_(INVALID), |
- hash_function_(NONE) { |
-} |
- |
-AuthenticationMethod::AuthenticationMethod(MethodType type, |
- HashFunction hash_function) |
- : type_(type), |
- hash_function_(hash_function) { |
- DCHECK_NE(type_, INVALID); |
-} |
- |
-AuthenticationMethod::HashFunction AuthenticationMethod::hash_function() const { |
- DCHECK(is_valid()); |
- return hash_function_; |
-} |
- |
-const std::string AuthenticationMethod::ToString() const { |
- DCHECK(is_valid()); |
- |
- switch (type_) { |
- case INVALID: |
- NOTREACHED(); |
- break; |
- |
- case SPAKE2_PAIR: |
- return "spake2_pair"; |
- |
- case SPAKE2: |
- switch (hash_function_) { |
- case NONE: |
- return "spake2_plain"; |
- case HMAC_SHA256: |
- return "spake2_hmac"; |
- } |
- break; |
- |
- case THIRD_PARTY: |
- return "third_party"; |
- } |
- |
- return "invalid"; |
-} |
- |
-bool AuthenticationMethod::operator ==( |
- const AuthenticationMethod& other) const { |
- return type_ == other.type_ && |
- hash_function_ == other.hash_function_; |
-} |
- |
-bool SharedSecretHash::Parse(const std::string& as_string) { |
- size_t separator = as_string.find(':'); |
- if (separator == std::string::npos) |
- return false; |
- |
- std::string function_name = as_string.substr(0, separator); |
- if (function_name == "plain") { |
- hash_function = AuthenticationMethod::NONE; |
- } else if (function_name == "hmac") { |
- hash_function = AuthenticationMethod::HMAC_SHA256; |
- } else { |
- return false; |
- } |
- |
- if (!base::Base64Decode(as_string.substr(separator + 1), &value)) { |
- return false; |
- } |
- |
- return true; |
-} |
- |
} // namespace protocol |
} // namespace remoting |