OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "remoting/protocol/negotiating_client_authenticator.h" | 5 #include "remoting/protocol/negotiating_client_authenticator.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <sstream> | 8 #include <sstream> |
9 #include <utility> | 9 #include <utility> |
10 | 10 |
11 #include "base/bind.h" | 11 #include "base/bind.h" |
12 #include "base/callback.h" | 12 #include "base/callback.h" |
13 #include "base/logging.h" | 13 #include "base/logging.h" |
14 #include "base/strings/string_split.h" | 14 #include "base/strings/string_split.h" |
15 #include "remoting/protocol/auth_util.h" | 15 #include "remoting/protocol/auth_util.h" |
16 #include "remoting/protocol/channel_authenticator.h" | 16 #include "remoting/protocol/channel_authenticator.h" |
17 #include "remoting/protocol/pairing_client_authenticator.h" | 17 #include "remoting/protocol/pairing_client_authenticator.h" |
18 #include "remoting/protocol/spake2_authenticator.h" | 18 #include "remoting/protocol/spake2_authenticator.h" |
19 #include "remoting/protocol/v2_authenticator.h" | 19 #include "remoting/protocol/v2_authenticator.h" |
20 #include "third_party/webrtc/libjingle/xmllite/xmlelement.h" | 20 #include "third_party/webrtc/libjingle/xmllite/xmlelement.h" |
21 | 21 |
22 namespace remoting { | 22 namespace remoting { |
23 namespace protocol { | 23 namespace protocol { |
24 | 24 |
25 ClientAuthenticationConfig::ClientAuthenticationConfig() {} | |
26 ClientAuthenticationConfig::~ClientAuthenticationConfig() {} | |
27 | |
28 NegotiatingClientAuthenticator::NegotiatingClientAuthenticator( | 25 NegotiatingClientAuthenticator::NegotiatingClientAuthenticator( |
29 const std::string& local_id, | 26 const std::string& local_id, |
30 const std::string& remote_id, | 27 const std::string& remote_id, |
31 const ClientAuthenticationConfig& config) | 28 const ClientAuthenticationConfig& config) |
32 : NegotiatingAuthenticatorBase(MESSAGE_READY), | 29 : NegotiatingAuthenticatorBase(MESSAGE_READY), |
33 local_id_(local_id), | 30 local_id_(local_id), |
34 remote_id_(remote_id), | 31 remote_id_(remote_id), |
35 config_(config), | 32 config_(config), |
36 weak_factory_(this) { | 33 weak_factory_(this) { |
37 if (!config_.fetch_third_party_token_callback.is_null()) { | 34 if (!config_.fetch_third_party_token_callback.is_null()) { |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
144 } | 141 } |
145 } | 142 } |
146 | 143 |
147 void NegotiatingClientAuthenticator::CreatePreferredAuthenticator() { | 144 void NegotiatingClientAuthenticator::CreatePreferredAuthenticator() { |
148 if (!config_.pairing_client_id.empty() && !config_.pairing_secret.empty() && | 145 if (!config_.pairing_client_id.empty() && !config_.pairing_secret.empty() && |
149 std::find(methods_.begin(), methods_.end(), Method::PAIRED_SPAKE2_P224) != | 146 std::find(methods_.begin(), methods_.end(), Method::PAIRED_SPAKE2_P224) != |
150 methods_.end()) { | 147 methods_.end()) { |
151 // If the client specified a pairing id and shared secret, then create a | 148 // If the client specified a pairing id and shared secret, then create a |
152 // PairingAuthenticator. | 149 // PairingAuthenticator. |
153 current_authenticator_.reset(new PairingClientAuthenticator( | 150 current_authenticator_.reset(new PairingClientAuthenticator( |
154 config_.pairing_client_id, config_.pairing_secret, | 151 config_, base::Bind(&V2Authenticator::CreateForClient))); |
155 base::Bind(&V2Authenticator::CreateForClient), | |
156 config_.fetch_secret_callback, config_.host_id)); | |
157 current_method_ = Method::PAIRED_SPAKE2_P224; | 152 current_method_ = Method::PAIRED_SPAKE2_P224; |
158 } | 153 } |
159 } | 154 } |
160 | 155 |
161 void NegotiatingClientAuthenticator::CreateSharedSecretAuthenticator( | 156 void NegotiatingClientAuthenticator::CreateSharedSecretAuthenticator( |
162 Authenticator::State initial_state, | 157 Authenticator::State initial_state, |
163 const base::Closure& resume_callback, | 158 const base::Closure& resume_callback, |
164 const std::string& shared_secret) { | 159 const std::string& shared_secret) { |
165 std::string shared_secret_hash = | 160 std::string shared_secret_hash = |
166 (current_method_ == Method::SHARED_SECRET_PLAIN_SPAKE2_P224) | 161 (current_method_ == Method::SHARED_SECRET_PLAIN_SPAKE2_P224) |
167 ? shared_secret | 162 ? shared_secret |
168 : GetSharedSecretHash(config_.host_id, shared_secret); | 163 : GetSharedSecretHash(config_.host_id, shared_secret); |
169 | 164 |
170 if (current_method_ == Method::SHARED_SECRET_SPAKE2_CURVE25519) { | 165 if (current_method_ == Method::SHARED_SECRET_SPAKE2_CURVE25519) { |
171 current_authenticator_ = Spake2Authenticator::CreateForClient( | 166 current_authenticator_ = Spake2Authenticator::CreateForClient( |
172 local_id_, remote_id_, shared_secret_hash, initial_state); | 167 local_id_, remote_id_, shared_secret_hash, initial_state); |
173 } else { | 168 } else { |
174 current_authenticator_ = | 169 current_authenticator_ = |
175 V2Authenticator::CreateForClient(shared_secret_hash, initial_state); | 170 V2Authenticator::CreateForClient(shared_secret_hash, initial_state); |
176 } | 171 } |
177 resume_callback.Run(); | 172 resume_callback.Run(); |
178 } | 173 } |
179 | 174 |
180 } // namespace protocol | 175 } // namespace protocol |
181 } // namespace remoting | 176 } // namespace remoting |
OLD | NEW |