OLD | NEW |
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/proximity_auth/device_to_device_secure_context.h" | 5 #include "components/proximity_auth/device_to_device_secure_context.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/memory/ptr_util.h" | 10 #include "base/memory/ptr_util.h" |
11 #include "components/proximity_auth/cryptauth/fake_secure_message_delegate.h" | 11 #include "components/cryptauth/fake_secure_message_delegate.h" |
12 #include "components/proximity_auth/cryptauth/proto/cryptauth_api.pb.h" | 12 #include "components/cryptauth/proto/cryptauth_api.pb.h" |
13 #include "components/proximity_auth/cryptauth/proto/securemessage.pb.h" | 13 #include "components/cryptauth/proto/securemessage.pb.h" |
14 #include "testing/gtest/include/gtest/gtest.h" | 14 #include "testing/gtest/include/gtest/gtest.h" |
15 | 15 |
16 namespace proximity_auth { | 16 namespace proximity_auth { |
17 | 17 |
18 namespace { | 18 namespace { |
19 | 19 |
20 const char kSymmetricKey[] = "symmetric key"; | 20 const char kSymmetricKey[] = "symmetric key"; |
21 const char kResponderAuthMessage[] = "responder_auth_message"; | 21 const char kResponderAuthMessage[] = "responder_auth_message"; |
22 const SecureContext::ProtocolVersion kProtocolVersion = | 22 const SecureContext::ProtocolVersion kProtocolVersion = |
23 SecureContext::PROTOCOL_VERSION_THREE_ONE; | 23 SecureContext::PROTOCOL_VERSION_THREE_ONE; |
24 | 24 |
25 // Callback saving |result| to |result_out|. | 25 // Callback saving |result| to |result_out|. |
26 void SaveResult(std::string* result_out, const std::string& result) { | 26 void SaveResult(std::string* result_out, const std::string& result) { |
27 *result_out = result; | 27 *result_out = result; |
28 } | 28 } |
29 | 29 |
30 } // namespace | 30 } // namespace |
31 | 31 |
32 class ProximityAuthDeviceToDeviceSecureContextTest : public testing::Test { | 32 class ProximityAuthDeviceToDeviceSecureContextTest : public testing::Test { |
33 protected: | 33 protected: |
34 ProximityAuthDeviceToDeviceSecureContextTest() | 34 ProximityAuthDeviceToDeviceSecureContextTest() |
35 : secure_context_(base::MakeUnique<FakeSecureMessageDelegate>(), | 35 : secure_context_( |
36 kSymmetricKey, | 36 base::MakeUnique<cryptauth::FakeSecureMessageDelegate>(), |
37 kResponderAuthMessage, | 37 kSymmetricKey, |
38 kProtocolVersion) {} | 38 kResponderAuthMessage, |
| 39 kProtocolVersion) {} |
39 | 40 |
40 DeviceToDeviceSecureContext secure_context_; | 41 DeviceToDeviceSecureContext secure_context_; |
41 }; | 42 }; |
42 | 43 |
43 TEST_F(ProximityAuthDeviceToDeviceSecureContextTest, GetProperties) { | 44 TEST_F(ProximityAuthDeviceToDeviceSecureContextTest, GetProperties) { |
44 EXPECT_EQ(kResponderAuthMessage, secure_context_.GetChannelBindingData()); | 45 EXPECT_EQ(kResponderAuthMessage, secure_context_.GetChannelBindingData()); |
45 EXPECT_EQ(kProtocolVersion, secure_context_.GetProtocolVersion()); | 46 EXPECT_EQ(kProtocolVersion, secure_context_.GetProtocolVersion()); |
46 } | 47 } |
47 | 48 |
48 TEST_F(ProximityAuthDeviceToDeviceSecureContextTest, CheckEncodedHeader) { | 49 TEST_F(ProximityAuthDeviceToDeviceSecureContextTest, CheckEncodedHeader) { |
(...skipping 18 matching lines...) Expand all Loading... |
67 std::string encoded_message = "invalidly encoded message"; | 68 std::string encoded_message = "invalidly encoded message"; |
68 std::string decoded_message = "not empty"; | 69 std::string decoded_message = "not empty"; |
69 secure_context_.Decode(encoded_message, | 70 secure_context_.Decode(encoded_message, |
70 base::Bind(&SaveResult, &decoded_message)); | 71 base::Bind(&SaveResult, &decoded_message)); |
71 EXPECT_TRUE(decoded_message.empty()); | 72 EXPECT_TRUE(decoded_message.empty()); |
72 } | 73 } |
73 | 74 |
74 TEST_F(ProximityAuthDeviceToDeviceSecureContextTest, EncodeAndDecode) { | 75 TEST_F(ProximityAuthDeviceToDeviceSecureContextTest, EncodeAndDecode) { |
75 // Initialize second secure channel with the same parameters as the first. | 76 // Initialize second secure channel with the same parameters as the first. |
76 DeviceToDeviceSecureContext secure_context2( | 77 DeviceToDeviceSecureContext secure_context2( |
77 base::MakeUnique<FakeSecureMessageDelegate>(), kSymmetricKey, | 78 base::MakeUnique<cryptauth::FakeSecureMessageDelegate>(), kSymmetricKey, |
78 kResponderAuthMessage, kProtocolVersion); | 79 kResponderAuthMessage, kProtocolVersion); |
79 std::string message = "encrypt this message"; | 80 std::string message = "encrypt this message"; |
80 | 81 |
81 // Pass some messages between the two secure contexts. | 82 // Pass some messages between the two secure contexts. |
82 for (int i = 0; i < 3; ++i) { | 83 for (int i = 0; i < 3; ++i) { |
83 std::string encoded_message; | 84 std::string encoded_message; |
84 secure_context_.Encode(message, base::Bind(&SaveResult, &encoded_message)); | 85 secure_context_.Encode(message, base::Bind(&SaveResult, &encoded_message)); |
85 EXPECT_NE(message, encoded_message); | 86 EXPECT_NE(message, encoded_message); |
86 | 87 |
87 std::string decoded_message; | 88 std::string decoded_message; |
88 secure_context2.Decode(encoded_message, | 89 secure_context2.Decode(encoded_message, |
89 base::Bind(&SaveResult, &decoded_message)); | 90 base::Bind(&SaveResult, &decoded_message)); |
90 EXPECT_EQ(message, decoded_message); | 91 EXPECT_EQ(message, decoded_message); |
91 } | 92 } |
92 } | 93 } |
93 | 94 |
94 TEST_F(ProximityAuthDeviceToDeviceSecureContextTest, | 95 TEST_F(ProximityAuthDeviceToDeviceSecureContextTest, |
95 DecodeInvalidSequenceNumber) { | 96 DecodeInvalidSequenceNumber) { |
96 // Initialize second secure channel with the same parameters as the first. | 97 // Initialize second secure channel with the same parameters as the first. |
97 DeviceToDeviceSecureContext secure_context2( | 98 DeviceToDeviceSecureContext secure_context2( |
98 base::MakeUnique<FakeSecureMessageDelegate>(), kSymmetricKey, | 99 base::MakeUnique<cryptauth::FakeSecureMessageDelegate>(), kSymmetricKey, |
99 kResponderAuthMessage, kProtocolVersion); | 100 kResponderAuthMessage, kProtocolVersion); |
100 | 101 |
101 // Send a few messages over the first secure context. | 102 // Send a few messages over the first secure context. |
102 std::string message = "encrypt this message"; | 103 std::string message = "encrypt this message"; |
103 std::string encoded1; | 104 std::string encoded1; |
104 for (int i = 0; i < 3; ++i) { | 105 for (int i = 0; i < 3; ++i) { |
105 secure_context_.Encode(message, base::Bind(&SaveResult, &encoded1)); | 106 secure_context_.Encode(message, base::Bind(&SaveResult, &encoded1)); |
106 } | 107 } |
107 | 108 |
108 // Second secure channel should not decode the message with an invalid | 109 // Second secure channel should not decode the message with an invalid |
109 // sequence number. | 110 // sequence number. |
110 std::string decoded_message = "not empty"; | 111 std::string decoded_message = "not empty"; |
111 secure_context_.Decode(encoded1, base::Bind(&SaveResult, &decoded_message)); | 112 secure_context_.Decode(encoded1, base::Bind(&SaveResult, &decoded_message)); |
112 EXPECT_TRUE(decoded_message.empty()); | 113 EXPECT_TRUE(decoded_message.empty()); |
113 } | 114 } |
114 | 115 |
115 } // proximity_auth | 116 } // proximity_auth |
OLD | NEW |