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

Side by Side Diff: components/cryptauth/device_to_device_operations_unittest.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 "base/base64url.h" 5 #include "base/base64url.h"
6 #include "base/bind.h" 6 #include "base/bind.h"
7 #include "base/macros.h" 7 #include "base/macros.h"
8 #include "components/cryptauth/device_to_device_initiator_operations.h" 8 #include "components/cryptauth/device_to_device_initiator_operations.h"
9 #include "components/cryptauth/device_to_device_responder_operations.h" 9 #include "components/cryptauth/device_to_device_responder_operations.h"
10 #include "components/cryptauth/fake_secure_message_delegate.h" 10 #include "components/cryptauth/fake_secure_message_delegate.h"
11 #include "components/cryptauth/session_keys.h"
11 #include "testing/gtest/include/gtest/gtest.h" 12 #include "testing/gtest/include/gtest/gtest.h"
12 13
13 namespace cryptauth { 14 namespace cryptauth {
14 15
15 namespace { 16 namespace {
16 17
17 // The initiator's session public key in base64url form. Note that this is 18 // The initiator's session public key in base64url form. Note that this is
18 // actually a serialized proto. 19 // actually a serialized proto.
19 const char kInitiatorSessionPublicKeyBase64[] = 20 const char kInitiatorSessionPublicKeyBase64[] =
20 "CAESRQogOlH8DgPMQu7eAt-b6yoTXcazG8mAl6SPC5Ds-LTULIcSIQDZDMqsoYRO4tNMej1FB" 21 "CAESRQogOlH8DgPMQu7eAt-b6yoTXcazG8mAl6SPC5Ds-LTULIcSIQDZDMqsoYRO4tNMej1FB"
(...skipping 24 matching lines...) Expand all
45 // ValidateHelloMessage operations, saving both the outcome and the returned 46 // ValidateHelloMessage operations, saving both the outcome and the returned
46 // key. 47 // key.
47 void SaveValidationResultWithKey(bool* out_success, 48 void SaveValidationResultWithKey(bool* out_success,
48 std::string* out_key, 49 std::string* out_key,
49 bool success, 50 bool success,
50 const std::string& key) { 51 const std::string& key) {
51 *out_success = success; 52 *out_success = success;
52 *out_key = key; 53 *out_key = key;
53 } 54 }
54 55
56 void SaveValidationResultWithSessionKeys(bool* out_success,
57 SessionKeys* out_keys,
58 bool success,
59 const SessionKeys& keys) {
60 *out_success = success;
61 *out_keys = keys;
62 }
63
55 } // namespace 64 } // namespace
56 65
57 class ProximityAuthDeviceToDeviceOperationsTest : public testing::Test { 66 class ProximityAuthDeviceToDeviceOperationsTest : public testing::Test {
58 protected: 67 protected:
59 ProximityAuthDeviceToDeviceOperationsTest() {} 68 ProximityAuthDeviceToDeviceOperationsTest() {}
60 ~ProximityAuthDeviceToDeviceOperationsTest() override {} 69 ~ProximityAuthDeviceToDeviceOperationsTest() override {}
61 70
62 void SetUp() override { 71 void SetUp() override {
63 ASSERT_TRUE( 72 ASSERT_TRUE(
64 base::Base64UrlDecode(kInitiatorSessionPublicKeyBase64, 73 base::Base64UrlDecode(kInitiatorSessionPublicKeyBase64,
65 base::Base64UrlDecodePolicy::REQUIRE_PADDING, 74 base::Base64UrlDecodePolicy::REQUIRE_PADDING,
66 &local_session_public_key_)); 75 &local_session_public_key_));
67 local_session_private_key_ = 76 local_session_private_key_ =
68 secure_message_delegate_.GetPrivateKeyForPublicKey( 77 secure_message_delegate_.GetPrivateKeyForPublicKey(
69 local_session_public_key_); 78 local_session_public_key_);
70 79
71 ASSERT_TRUE( 80 ASSERT_TRUE(
72 base::Base64UrlDecode(kResponderSessionPublicKeyBase64, 81 base::Base64UrlDecode(kResponderSessionPublicKeyBase64,
73 base::Base64UrlDecodePolicy::REQUIRE_PADDING, 82 base::Base64UrlDecodePolicy::REQUIRE_PADDING,
74 &remote_session_public_key_)); 83 &remote_session_public_key_));
75 remote_session_private_key_ = 84 remote_session_private_key_ =
76 secure_message_delegate_.GetPrivateKeyForPublicKey( 85 secure_message_delegate_.GetPrivateKeyForPublicKey(
77 remote_session_public_key_); 86 remote_session_public_key_);
78 87
79 // Note: FakeSecureMessageDelegate functions are synchronous. 88 // Note: FakeSecureMessageDelegate functions are synchronous.
80 secure_message_delegate_.DeriveKey( 89 secure_message_delegate_.DeriveKey(
81 local_session_private_key_, remote_session_public_key_, 90 local_session_private_key_, remote_session_public_key_,
82 base::Bind(&SaveMessageResult, &session_symmetric_key_)); 91 base::Bind(&SaveMessageResult, &session_symmetric_key_));
92 session_keys_ = SessionKeys(session_symmetric_key_);
83 93
84 persistent_symmetric_key_ = "persistent symmetric key"; 94 persistent_symmetric_key_ = "persistent symmetric key";
85 } 95 }
86 96
87 // Creates the initator's [Hello] message. 97 // Creates the initator's [Hello] message.
88 std::string CreateHelloMessage() { 98 std::string CreateHelloMessage() {
89 std::string hello_message; 99 std::string hello_message;
90 DeviceToDeviceInitiatorOperations::CreateHelloMessage( 100 DeviceToDeviceInitiatorOperations::CreateHelloMessage(
91 local_session_public_key_, persistent_symmetric_key_, 101 local_session_public_key_, persistent_symmetric_key_,
92 &secure_message_delegate_, 102 &secure_message_delegate_,
(...skipping 16 matching lines...) Expand all
109 base::Bind(&SaveMessageResult, &remote_auth_message)); 119 base::Bind(&SaveMessageResult, &remote_auth_message));
110 EXPECT_FALSE(remote_auth_message.empty()); 120 EXPECT_FALSE(remote_auth_message.empty());
111 return remote_auth_message; 121 return remote_auth_message;
112 } 122 }
113 123
114 // Creates the initiator's [Initiator Auth] message. 124 // Creates the initiator's [Initiator Auth] message.
115 std::string CreateInitiatorAuthMessage( 125 std::string CreateInitiatorAuthMessage(
116 const std::string& remote_auth_message) { 126 const std::string& remote_auth_message) {
117 std::string local_auth_message; 127 std::string local_auth_message;
118 DeviceToDeviceInitiatorOperations::CreateInitiatorAuthMessage( 128 DeviceToDeviceInitiatorOperations::CreateInitiatorAuthMessage(
119 session_symmetric_key_, persistent_symmetric_key_, remote_auth_message, 129 session_keys_, persistent_symmetric_key_, remote_auth_message,
120 &secure_message_delegate_, 130 &secure_message_delegate_,
121 base::Bind(&SaveMessageResult, &local_auth_message)); 131 base::Bind(&SaveMessageResult, &local_auth_message));
122 EXPECT_FALSE(local_auth_message.empty()); 132 EXPECT_FALSE(local_auth_message.empty());
123 return local_auth_message; 133 return local_auth_message;
124 } 134 }
125 135
126 FakeSecureMessageDelegate secure_message_delegate_; 136 FakeSecureMessageDelegate secure_message_delegate_;
127 137
128 std::string persistent_symmetric_key_; 138 std::string persistent_symmetric_key_;
129 std::string local_session_public_key_; 139 std::string local_session_public_key_;
130 std::string local_session_private_key_; 140 std::string local_session_private_key_;
131 std::string remote_session_public_key_; 141 std::string remote_session_public_key_;
132 std::string remote_session_private_key_; 142 std::string remote_session_private_key_;
133 std::string session_symmetric_key_; 143 std::string session_symmetric_key_;
144 SessionKeys session_keys_;
134 145
135 DISALLOW_COPY_AND_ASSIGN(ProximityAuthDeviceToDeviceOperationsTest); 146 DISALLOW_COPY_AND_ASSIGN(ProximityAuthDeviceToDeviceOperationsTest);
136 }; 147 };
137 148
138 TEST_F(ProximityAuthDeviceToDeviceOperationsTest, 149 TEST_F(ProximityAuthDeviceToDeviceOperationsTest,
139 ValidateHelloMessage_Success) { 150 ValidateHelloMessage_Success) {
140 bool validation_success = false; 151 bool validation_success = false;
141 std::string hello_public_key; 152 std::string hello_public_key;
142 DeviceToDeviceResponderOperations::ValidateHelloMessage( 153 DeviceToDeviceResponderOperations::ValidateHelloMessage(
143 CreateHelloMessage(), persistent_symmetric_key_, 154 CreateHelloMessage(), persistent_symmetric_key_,
(...skipping 18 matching lines...) Expand all
162 EXPECT_FALSE(validation_success); 173 EXPECT_FALSE(validation_success);
163 EXPECT_TRUE(hello_public_key.empty()); 174 EXPECT_TRUE(hello_public_key.empty());
164 } 175 }
165 176
166 TEST_F(ProximityAuthDeviceToDeviceOperationsTest, 177 TEST_F(ProximityAuthDeviceToDeviceOperationsTest,
167 ValidateResponderAuthMessage_Success) { 178 ValidateResponderAuthMessage_Success) {
168 std::string hello_message = CreateHelloMessage(); 179 std::string hello_message = CreateHelloMessage();
169 std::string remote_auth_message = CreateResponderAuthMessage(hello_message); 180 std::string remote_auth_message = CreateResponderAuthMessage(hello_message);
170 181
171 bool validation_success = false; 182 bool validation_success = false;
172 std::string session_symmetric_key; 183 SessionKeys session_keys;
173 DeviceToDeviceInitiatorOperations::ValidateResponderAuthMessage( 184 DeviceToDeviceInitiatorOperations::ValidateResponderAuthMessage(
174 remote_auth_message, kResponderPersistentPublicKey, 185 remote_auth_message, kResponderPersistentPublicKey,
175 persistent_symmetric_key_, local_session_private_key_, hello_message, 186 persistent_symmetric_key_, local_session_private_key_, hello_message,
176 &secure_message_delegate_, 187 &secure_message_delegate_,
177 base::Bind(&SaveValidationResultWithKey, &validation_success, 188 base::Bind(&SaveValidationResultWithSessionKeys, &validation_success,
178 &session_symmetric_key)); 189 &session_keys));
179 190
180 EXPECT_TRUE(validation_success); 191 EXPECT_TRUE(validation_success);
181 EXPECT_EQ(session_symmetric_key_, session_symmetric_key); 192 EXPECT_EQ(session_keys_.initiator_encode_key(),
193 session_keys.initiator_encode_key());
194 EXPECT_EQ(session_keys_.responder_encode_key(),
195 session_keys.responder_encode_key());
182 } 196 }
183 197
184 TEST_F(ProximityAuthDeviceToDeviceOperationsTest, 198 TEST_F(ProximityAuthDeviceToDeviceOperationsTest,
185 ValidateResponderAuthMessage_InvalidHelloMessage) { 199 ValidateResponderAuthMessage_InvalidHelloMessage) {
186 std::string hello_message = CreateHelloMessage(); 200 std::string hello_message = CreateHelloMessage();
187 std::string remote_auth_message = CreateResponderAuthMessage(hello_message); 201 std::string remote_auth_message = CreateResponderAuthMessage(hello_message);
188 202
189 bool validation_success = true; 203 bool validation_success = true;
190 std::string session_symmetric_key = "non empty"; 204 SessionKeys session_keys("non empty");
191 DeviceToDeviceInitiatorOperations::ValidateResponderAuthMessage( 205 DeviceToDeviceInitiatorOperations::ValidateResponderAuthMessage(
192 remote_auth_message, kResponderPersistentPublicKey, 206 remote_auth_message, kResponderPersistentPublicKey,
193 persistent_symmetric_key_, local_session_private_key_, 207 persistent_symmetric_key_, local_session_private_key_,
194 "invalid hello message", &secure_message_delegate_, 208 "invalid hello message", &secure_message_delegate_,
195 base::Bind(&SaveValidationResultWithKey, &validation_success, 209 base::Bind(&SaveValidationResultWithSessionKeys, &validation_success,
196 &session_symmetric_key)); 210 &session_keys));
197 211
198 EXPECT_FALSE(validation_success); 212 EXPECT_FALSE(validation_success);
199 EXPECT_TRUE(session_symmetric_key.empty()); 213 EXPECT_TRUE(session_keys.initiator_encode_key().empty());
214 EXPECT_TRUE(session_keys.responder_encode_key().empty());
200 } 215 }
201 216
202 TEST_F(ProximityAuthDeviceToDeviceOperationsTest, 217 TEST_F(ProximityAuthDeviceToDeviceOperationsTest,
203 ValidateResponderAuthMessage_InvalidPSK) { 218 ValidateResponderAuthMessage_InvalidPSK) {
204 std::string hello_message = CreateHelloMessage(); 219 std::string hello_message = CreateHelloMessage();
205 std::string remote_auth_message = CreateResponderAuthMessage(hello_message); 220 std::string remote_auth_message = CreateResponderAuthMessage(hello_message);
206 221
207 bool validation_success = true; 222 bool validation_success = true;
208 std::string session_symmetric_key = "non empty"; 223 SessionKeys session_keys("non empty");
209 DeviceToDeviceInitiatorOperations::ValidateResponderAuthMessage( 224 DeviceToDeviceInitiatorOperations::ValidateResponderAuthMessage(
210 remote_auth_message, kResponderPersistentPublicKey, 225 remote_auth_message, kResponderPersistentPublicKey,
211 "invalid persistent symmetric key", local_session_private_key_, 226 "invalid persistent symmetric key", local_session_private_key_,
212 hello_message, &secure_message_delegate_, 227 hello_message, &secure_message_delegate_,
213 base::Bind(&SaveValidationResultWithKey, &validation_success, 228 base::Bind(&SaveValidationResultWithSessionKeys, &validation_success,
214 &session_symmetric_key)); 229 &session_keys));
215 230
216 EXPECT_FALSE(validation_success); 231 EXPECT_FALSE(validation_success);
217 EXPECT_TRUE(session_symmetric_key.empty()); 232 EXPECT_TRUE(session_keys.initiator_encode_key().empty());
233 EXPECT_TRUE(session_keys.responder_encode_key().empty());
218 } 234 }
219 235
220 TEST_F(ProximityAuthDeviceToDeviceOperationsTest, 236 TEST_F(ProximityAuthDeviceToDeviceOperationsTest,
221 ValidateInitiatorAuthMessage_Success) { 237 ValidateInitiatorAuthMessage_Success) {
222 std::string hello_message = CreateHelloMessage(); 238 std::string hello_message = CreateHelloMessage();
223 std::string remote_auth_message = CreateResponderAuthMessage(hello_message); 239 std::string remote_auth_message = CreateResponderAuthMessage(hello_message);
224 std::string local_auth_message = 240 std::string local_auth_message =
225 CreateInitiatorAuthMessage(remote_auth_message); 241 CreateInitiatorAuthMessage(remote_auth_message);
226 242
227 bool validation_success = false; 243 bool validation_success = false;
228 DeviceToDeviceResponderOperations::ValidateInitiatorAuthMessage( 244 DeviceToDeviceResponderOperations::ValidateInitiatorAuthMessage(
229 local_auth_message, session_symmetric_key_, persistent_symmetric_key_, 245 local_auth_message, session_keys_, persistent_symmetric_key_,
230 remote_auth_message, &secure_message_delegate_, 246 remote_auth_message, &secure_message_delegate_,
231 base::Bind(&SaveValidationResult, &validation_success)); 247 base::Bind(&SaveValidationResult, &validation_success));
232 248
233 EXPECT_TRUE(validation_success); 249 EXPECT_TRUE(validation_success);
234 } 250 }
235 251
236 TEST_F(ProximityAuthDeviceToDeviceOperationsTest, 252 TEST_F(ProximityAuthDeviceToDeviceOperationsTest,
237 ValidateInitiatorAuthMessage_InvalidRemoteAuth) { 253 ValidateInitiatorAuthMessage_InvalidRemoteAuth) {
238 std::string hello_message = CreateHelloMessage(); 254 std::string hello_message = CreateHelloMessage();
239 std::string remote_auth_message = CreateResponderAuthMessage(hello_message); 255 std::string remote_auth_message = CreateResponderAuthMessage(hello_message);
240 std::string local_auth_message = 256 std::string local_auth_message =
241 CreateInitiatorAuthMessage(remote_auth_message); 257 CreateInitiatorAuthMessage(remote_auth_message);
242 258
243 bool validation_success = true; 259 bool validation_success = true;
244 DeviceToDeviceResponderOperations::ValidateInitiatorAuthMessage( 260 DeviceToDeviceResponderOperations::ValidateInitiatorAuthMessage(
245 local_auth_message, session_symmetric_key_, persistent_symmetric_key_, 261 local_auth_message, session_keys_, persistent_symmetric_key_,
246 "invalid remote auth", &secure_message_delegate_, 262 "invalid remote auth", &secure_message_delegate_,
247 base::Bind(&SaveValidationResult, &validation_success)); 263 base::Bind(&SaveValidationResult, &validation_success));
248 264
249 EXPECT_FALSE(validation_success); 265 EXPECT_FALSE(validation_success);
250 } 266 }
251 267
252 TEST_F(ProximityAuthDeviceToDeviceOperationsTest, 268 TEST_F(ProximityAuthDeviceToDeviceOperationsTest,
253 ValidateInitiatorAuthMessage_InvalidPSK) { 269 ValidateInitiatorAuthMessage_InvalidPSK) {
254 std::string hello_message = CreateHelloMessage(); 270 std::string hello_message = CreateHelloMessage();
255 std::string remote_auth_message = CreateResponderAuthMessage(hello_message); 271 std::string remote_auth_message = CreateResponderAuthMessage(hello_message);
256 std::string local_auth_message = 272 std::string local_auth_message =
257 CreateInitiatorAuthMessage(remote_auth_message); 273 CreateInitiatorAuthMessage(remote_auth_message);
258 274
259 bool validation_success = true; 275 bool validation_success = true;
260 DeviceToDeviceResponderOperations::ValidateInitiatorAuthMessage( 276 DeviceToDeviceResponderOperations::ValidateInitiatorAuthMessage(
261 local_auth_message, session_symmetric_key_, 277 local_auth_message, session_keys_, "invalid persistent symmetric key",
262 "invalid persistent symmetric key", remote_auth_message, 278 remote_auth_message, &secure_message_delegate_,
263 &secure_message_delegate_,
264 base::Bind(&SaveValidationResult, &validation_success)); 279 base::Bind(&SaveValidationResult, &validation_success));
265 280
266 EXPECT_FALSE(validation_success); 281 EXPECT_FALSE(validation_success);
267 } 282 }
268 283
269 } // namespace cryptauth 284 } // namespace cryptauth
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698