OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "crypto/p224_spake.h" |
| 6 |
5 #include <string> | 7 #include <string> |
6 #include <crypto/p224_spake.h> | |
7 | 8 |
8 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "base/strings/string_number_conversions.h" |
9 #include "testing/gtest/include/gtest/gtest.h" | 11 #include "testing/gtest/include/gtest/gtest.h" |
10 | 12 |
11 namespace crypto { | 13 namespace crypto { |
12 | 14 |
13 namespace { | 15 namespace { |
14 | 16 |
| 17 std::string HexEncodeString(const std::string& binary_data) { |
| 18 return base::HexEncode(binary_data.c_str(), binary_data.size()); |
| 19 } |
| 20 |
15 bool RunExchange(P224EncryptedKeyExchange* client, | 21 bool RunExchange(P224EncryptedKeyExchange* client, |
16 P224EncryptedKeyExchange* server, | 22 P224EncryptedKeyExchange* server, |
17 bool is_password_same) { | 23 bool is_password_same) { |
18 for (;;) { | 24 for (;;) { |
19 std::string client_message, server_message; | 25 std::string client_message, server_message; |
20 client_message = client->GetMessage(); | 26 client_message = client->GetMessage(); |
21 server_message = server->GetMessage(); | 27 server_message = server->GetMessage(); |
22 | 28 |
23 P224EncryptedKeyExchange::Result client_result, server_result; | 29 P224EncryptedKeyExchange::Result client_result, server_result; |
24 client_result = client->ProcessMessage(server_message); | 30 client_result = client->ProcessMessage(server_message); |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
64 P224EncryptedKeyExchange client( | 70 P224EncryptedKeyExchange client( |
65 P224EncryptedKeyExchange::kPeerTypeClient, | 71 P224EncryptedKeyExchange::kPeerTypeClient, |
66 kPassword); | 72 kPassword); |
67 P224EncryptedKeyExchange server( | 73 P224EncryptedKeyExchange server( |
68 P224EncryptedKeyExchange::kPeerTypeServer, | 74 P224EncryptedKeyExchange::kPeerTypeServer, |
69 "wrongpassword"); | 75 "wrongpassword"); |
70 | 76 |
71 EXPECT_FALSE(RunExchange(&client, &server, false)); | 77 EXPECT_FALSE(RunExchange(&client, &server, false)); |
72 } | 78 } |
73 | 79 |
| 80 TEST(MutualAuth, ExpectedValues) { |
| 81 P224EncryptedKeyExchange client(P224EncryptedKeyExchange::kPeerTypeClient, |
| 82 kPassword); |
| 83 client.SetXForTesting("Client x"); |
| 84 P224EncryptedKeyExchange server(P224EncryptedKeyExchange::kPeerTypeServer, |
| 85 kPassword); |
| 86 server.SetXForTesting("Server x"); |
| 87 |
| 88 std::string client_message = client.GetMessage(); |
| 89 EXPECT_EQ( |
| 90 "3508EF7DECC8AB9F9C439FBB0154288BBECC0A82E8448F4CF29554EB" |
| 91 "BE9D486686226255EAD1D077C635B1A41F46AC91D7F7F32CED9EC3E0", |
| 92 HexEncodeString(client_message)); |
| 93 |
| 94 std::string server_message = server.GetMessage(); |
| 95 EXPECT_EQ( |
| 96 "A3088C18B75D2C2B107105661AEC85424777475EB29F1DDFB8C14AFB" |
| 97 "F1603D0DF38413A00F420ACF2059E7997C935F5A957A193D09A2B584", |
| 98 HexEncodeString(server_message)); |
| 99 |
| 100 EXPECT_EQ(P224EncryptedKeyExchange::kResultPending, |
| 101 client.ProcessMessage(server_message)); |
| 102 EXPECT_EQ(P224EncryptedKeyExchange::kResultPending, |
| 103 server.ProcessMessage(client_message)); |
| 104 |
| 105 EXPECT_EQ(client.GetUnverifiedKey(), server.GetUnverifiedKey()); |
| 106 // Must stay the same. External implementations should be able to pair with. |
| 107 EXPECT_EQ( |
| 108 "CE7CCFC435CDA4F01EC8826788B1F8B82EF7D550A34696B371096E64" |
| 109 "C487D4FE193F7D1A6FF6820BC7F807796BA3889E8F999BBDEFC32FFA", |
| 110 HexEncodeString(server.GetUnverifiedKey())); |
| 111 |
| 112 EXPECT_TRUE(RunExchange(&client, &server, true)); |
| 113 EXPECT_EQ(client.GetKey(), server.GetKey()); |
| 114 } |
| 115 |
74 TEST(MutualAuth, Fuzz) { | 116 TEST(MutualAuth, Fuzz) { |
75 static const unsigned kIterations = 40; | 117 static const unsigned kIterations = 40; |
76 | 118 |
77 for (unsigned i = 0; i < kIterations; i++) { | 119 for (unsigned i = 0; i < kIterations; i++) { |
78 P224EncryptedKeyExchange client( | 120 P224EncryptedKeyExchange client( |
79 P224EncryptedKeyExchange::kPeerTypeClient, kPassword); | 121 P224EncryptedKeyExchange::kPeerTypeClient, kPassword); |
80 P224EncryptedKeyExchange server( | 122 P224EncryptedKeyExchange server( |
81 P224EncryptedKeyExchange::kPeerTypeServer, kPassword); | 123 P224EncryptedKeyExchange::kPeerTypeServer, kPassword); |
82 | 124 |
83 // We'll only be testing small values of i, but we don't want that to bias | 125 // We'll only be testing small values of i, but we don't want that to bias |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
123 | 165 |
124 ASSERT_EQ(P224EncryptedKeyExchange::kResultPending, | 166 ASSERT_EQ(P224EncryptedKeyExchange::kResultPending, |
125 client_result); | 167 client_result); |
126 ASSERT_EQ(P224EncryptedKeyExchange::kResultPending, | 168 ASSERT_EQ(P224EncryptedKeyExchange::kResultPending, |
127 server_result); | 169 server_result); |
128 } | 170 } |
129 } | 171 } |
130 } | 172 } |
131 | 173 |
132 } // namespace crypto | 174 } // namespace crypto |
OLD | NEW |