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