Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(909)

Side by Side Diff: components/cryptauth/device_to_device_authenticator.cc

Issue 2899863002: Updating D2D protocol to v1 to support separate sequence numbers. (Closed)
Patch Set: Addressing comments Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "components/cryptauth/device_to_device_authenticator.h" 5 #include "components/cryptauth/device_to_device_authenticator.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/memory/ptr_util.h" 9 #include "base/memory/ptr_util.h"
10 #include "base/time/time.h" 10 #include "base/time/time.h"
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
147 hello_message_, std::string(Authenticator::kAuthenticationFeature))); 147 hello_message_, std::string(Authenticator::kAuthenticationFeature)));
148 } 148 }
149 149
150 void DeviceToDeviceAuthenticator::OnResponderAuthTimedOut() { 150 void DeviceToDeviceAuthenticator::OnResponderAuthTimedOut() {
151 DCHECK(state_ == State::SENT_HELLO); 151 DCHECK(state_ == State::SENT_HELLO);
152 Fail("Timed out waiting for [Responder Auth]"); 152 Fail("Timed out waiting for [Responder Auth]");
153 } 153 }
154 154
155 void DeviceToDeviceAuthenticator::OnResponderAuthValidated( 155 void DeviceToDeviceAuthenticator::OnResponderAuthValidated(
156 bool validated, 156 bool validated,
157 const std::string& session_symmetric_key) { 157 const SessionKeys& session_keys) {
158 if (!validated) { 158 if (!validated) {
159 Fail("Unable to validated [Responder Auth]"); 159 Fail("Unable to validated [Responder Auth]");
160 return; 160 return;
161 } 161 }
162 162
163 PA_LOG(INFO) << "Successfully validated [Responder Auth]! " 163 PA_LOG(INFO) << "Successfully validated [Responder Auth]! "
164 << "Sending [Initiator Auth]..."; 164 << "Sending [Initiator Auth]...";
165 state_ = State::VALIDATED_RESPONDER_AUTH; 165 state_ = State::VALIDATED_RESPONDER_AUTH;
166 session_symmetric_key_ = session_symmetric_key; 166 session_keys_ = session_keys;
167 167
168 // Create the [Initiator Auth] message to send to the remote device. 168 // Create the [Initiator Auth] message to send to the remote device.
169 DeviceToDeviceInitiatorOperations::CreateInitiatorAuthMessage( 169 DeviceToDeviceInitiatorOperations::CreateInitiatorAuthMessage(
170 session_symmetric_key, 170 session_keys_, connection_->remote_device().persistent_symmetric_key,
171 connection_->remote_device().persistent_symmetric_key,
172 responder_auth_message_, secure_message_delegate_.get(), 171 responder_auth_message_, secure_message_delegate_.get(),
173 base::Bind(&DeviceToDeviceAuthenticator::OnInitiatorAuthCreated, 172 base::Bind(&DeviceToDeviceAuthenticator::OnInitiatorAuthCreated,
174 weak_ptr_factory_.GetWeakPtr())); 173 weak_ptr_factory_.GetWeakPtr()));
175 } 174 }
176 175
177 void DeviceToDeviceAuthenticator::OnInitiatorAuthCreated( 176 void DeviceToDeviceAuthenticator::OnInitiatorAuthCreated(
178 const std::string& message) { 177 const std::string& message) {
179 DCHECK(state_ == State::VALIDATED_RESPONDER_AUTH); 178 DCHECK(state_ == State::VALIDATED_RESPONDER_AUTH);
180 if (message.empty()) { 179 if (message.empty()) {
181 Fail("Failed to create [Initiator Auth]"); 180 Fail("Failed to create [Initiator Auth]");
(...skipping 15 matching lines...) Expand all
197 PA_LOG(WARNING) << "Authentication failed: " << error_message; 196 PA_LOG(WARNING) << "Authentication failed: " << error_message;
198 state_ = State::AUTHENTICATION_FAILURE; 197 state_ = State::AUTHENTICATION_FAILURE;
199 weak_ptr_factory_.InvalidateWeakPtrs(); 198 weak_ptr_factory_.InvalidateWeakPtrs();
200 connection_->RemoveObserver(this); 199 connection_->RemoveObserver(this);
201 timer_.reset(); 200 timer_.reset();
202 callback_.Run(result, nullptr); 201 callback_.Run(result, nullptr);
203 } 202 }
204 203
205 void DeviceToDeviceAuthenticator::Succeed() { 204 void DeviceToDeviceAuthenticator::Succeed() {
206 DCHECK(state_ == State::SENT_INITIATOR_AUTH); 205 DCHECK(state_ == State::SENT_INITIATOR_AUTH);
207 DCHECK(!session_symmetric_key_.empty()); 206 DCHECK(!session_keys_.initiator_encode_key().empty());
207 DCHECK(!session_keys_.responder_encode_key().empty());
208 PA_LOG(INFO) << "Authentication succeeded!"; 208 PA_LOG(INFO) << "Authentication succeeded!";
209 209
210 state_ = State::AUTHENTICATION_SUCCESS; 210 state_ = State::AUTHENTICATION_SUCCESS;
211 connection_->RemoveObserver(this); 211 connection_->RemoveObserver(this);
212 callback_.Run( 212 callback_.Run(
213 Result::SUCCESS, 213 Result::SUCCESS,
214 base::MakeUnique<DeviceToDeviceSecureContext>( 214 base::MakeUnique<DeviceToDeviceSecureContext>(
215 std::move(secure_message_delegate_), session_symmetric_key_, 215 std::move(secure_message_delegate_), session_keys_,
216 responder_auth_message_, SecureContext::PROTOCOL_VERSION_THREE_ONE)); 216 responder_auth_message_, SecureContext::PROTOCOL_VERSION_THREE_ONE));
217 } 217 }
218 218
219 void DeviceToDeviceAuthenticator::OnConnectionStatusChanged( 219 void DeviceToDeviceAuthenticator::OnConnectionStatusChanged(
220 Connection* connection, 220 Connection* connection,
221 Connection::Status old_status, 221 Connection::Status old_status,
222 Connection::Status new_status) { 222 Connection::Status new_status) {
223 // We do not expect the connection to drop during authentication. 223 // We do not expect the connection to drop during authentication.
224 if (new_status == Connection::DISCONNECTED) { 224 if (new_status == Connection::DISCONNECTED) {
225 Fail("Disconnected while authentication is in progress", 225 Fail("Disconnected while authentication is in progress",
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
262 Succeed(); 262 Succeed();
263 else 263 else
264 Fail("Failed to send [Initiator Auth]"); 264 Fail("Failed to send [Initiator Auth]");
265 } else if (!success && state_ == State::SENT_HELLO) { 265 } else if (!success && state_ == State::SENT_HELLO) {
266 DCHECK(message.payload() == hello_message_); 266 DCHECK(message.payload() == hello_message_);
267 Fail("Failed to send [Hello]"); 267 Fail("Failed to send [Hello]");
268 } 268 }
269 } 269 }
270 270
271 } // namespace cryptauth 271 } // namespace cryptauth
OLDNEW
« no previous file with comments | « components/cryptauth/device_to_device_authenticator.h ('k') | components/cryptauth/device_to_device_authenticator_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698