OLD | NEW |
---|---|
(Empty) | |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "components/proximity_auth/cryptauth/fake_secure_message_delegate.h" | |
6 | |
7 #include "base/bind.h" | |
8 #include "testing/gtest/include/gtest/gtest.h" | |
9 | |
10 namespace proximity_auth { | |
11 | |
12 namespace { | |
13 | |
14 const char kTestPublicKey[] = "the private key is in another castle"; | |
15 const char kPayload[] = "500 tons of uranium"; | |
16 const char kSymmetricKey[] = "hunter2"; | |
17 const char kPublicMetadata[] = "brought to you by our sponsors"; | |
18 const char kAssociatedData[] = "save 20% bytes on your nonce insurance"; | |
19 const char kVerificationKeyId[] = "the one with the red stripes"; | |
20 const char kDecryptionKeyId[] = "it's in your pocket somewhere"; | |
Ilya Sherman
2015/04/03 22:43:42
:)
Tim Song
2015/04/04 05:06:14
:)
| |
21 | |
22 void SaveKeyPair(std::string* private_key_out, | |
Ilya Sherman
2015/04/03 22:43:42
nit: Please write (brief) doc strings for all thes
Tim Song
2015/04/04 05:06:14
Done.
| |
23 std::string* public_key_out, | |
24 const std::string& private_key, | |
25 const std::string& public_key) { | |
26 *private_key_out = private_key; | |
27 *public_key_out = public_key; | |
28 } | |
29 | |
30 void SaveString(std::string* out, const std::string& value) { | |
31 *out = value; | |
32 } | |
33 | |
34 void SaveUnwrapResults(std::string* payload_out, | |
35 securemessage::Header* header_out, | |
36 bool verified, | |
37 const std::string& payload, | |
38 const securemessage::Header& header) { | |
39 ASSERT_TRUE(verified); | |
40 *payload_out = payload; | |
41 *header_out = header; | |
42 } | |
43 | |
44 SecureMessageDelegate::CreateOptions GetCreateOptions( | |
45 securemessage::EncScheme encryption_scheme, | |
46 securemessage::SigScheme signature_scheme) { | |
47 SecureMessageDelegate::CreateOptions create_options; | |
48 create_options.encryption_scheme = encryption_scheme; | |
49 create_options.signature_scheme = signature_scheme; | |
50 create_options.public_metadata = kPublicMetadata; | |
51 create_options.associated_data = kAssociatedData; | |
52 create_options.verification_key_id = kVerificationKeyId; | |
53 create_options.decryption_key_id = kDecryptionKeyId; | |
54 return create_options; | |
55 } | |
56 | |
57 SecureMessageDelegate::UnwrapOptions GetUnwrapOptions( | |
58 securemessage::EncScheme encryption_scheme, | |
59 securemessage::SigScheme signature_scheme) { | |
60 SecureMessageDelegate::UnwrapOptions unwrap_options; | |
61 unwrap_options.encryption_scheme = encryption_scheme; | |
62 unwrap_options.signature_scheme = signature_scheme; | |
63 unwrap_options.associated_data = kAssociatedData; | |
64 return unwrap_options; | |
65 } | |
66 | |
67 void CheckSerializedSecureMessage( | |
68 const std::string& serialized_message, | |
69 const SecureMessageDelegate::CreateOptions& create_options) { | |
70 securemessage::SecureMessage secure_message; | |
71 ASSERT_TRUE(secure_message.ParseFromString(serialized_message)); | |
72 securemessage::HeaderAndBody header_and_body; | |
73 ASSERT_TRUE( | |
74 header_and_body.ParseFromString(secure_message.header_and_body())); | |
75 | |
76 const securemessage::Header& header = header_and_body.header(); | |
77 EXPECT_EQ(create_options.signature_scheme, header.signature_scheme()); | |
78 EXPECT_EQ(create_options.encryption_scheme, header.encryption_scheme()); | |
79 EXPECT_EQ(create_options.verification_key_id, header.verification_key_id()); | |
80 EXPECT_EQ(create_options.decryption_key_id, header.decryption_key_id()); | |
81 EXPECT_EQ(create_options.public_metadata, header.public_metadata()); | |
82 } | |
83 | |
84 } // namespace | |
85 | |
86 class ProximityAuthFakeSecureMessageDelegateTest : public testing::Test { | |
87 protected: | |
88 ProximityAuthFakeSecureMessageDelegateTest() {} | |
89 | |
90 FakeSecureMessageDelegate delegate_; | |
91 | |
92 DISALLOW_COPY_AND_ASSIGN(ProximityAuthFakeSecureMessageDelegateTest); | |
93 }; | |
94 | |
95 TEST_F(ProximityAuthFakeSecureMessageDelegateTest, GenerateKeyPair) { | |
96 std::string public_key1, private_key1; | |
97 delegate_.GenerateKeyPair( | |
98 base::Bind(&SaveKeyPair, &public_key1, &private_key1)); | |
99 EXPECT_NE(private_key1, public_key1); | |
100 | |
101 std::string public_key2, private_key2; | |
102 delegate_.GenerateKeyPair( | |
103 base::Bind(&SaveKeyPair, &public_key2, &private_key2)); | |
104 EXPECT_NE(private_key2, public_key2); | |
105 | |
106 EXPECT_NE(public_key1, public_key2); | |
107 EXPECT_NE(private_key1, private_key2); | |
108 | |
109 delegate_.set_next_public_key(kTestPublicKey); | |
110 std::string public_key3, private_key3; | |
111 delegate_.GenerateKeyPair( | |
112 base::Bind(&SaveKeyPair, &public_key3, &private_key3)); | |
113 EXPECT_EQ(kTestPublicKey, public_key3); | |
114 EXPECT_NE(private_key3, public_key3); | |
115 | |
116 EXPECT_NE(public_key1, public_key3); | |
117 EXPECT_NE(private_key1, private_key3); | |
118 } | |
119 | |
120 TEST_F(ProximityAuthFakeSecureMessageDelegateTest, DeriveKey) { | |
121 delegate_.set_next_public_key("key_pair_1"); | |
122 std::string public_key1, private_key1; | |
123 delegate_.GenerateKeyPair( | |
124 base::Bind(&SaveKeyPair, &public_key1, &private_key1)); | |
125 | |
126 delegate_.set_next_public_key("key_pair_2"); | |
127 std::string public_key2, private_key2; | |
128 delegate_.GenerateKeyPair( | |
129 base::Bind(&SaveKeyPair, &public_key2, &private_key2)); | |
130 | |
131 std::string symmetric_key1, symmetric_key2; | |
132 delegate_.DeriveKey(private_key1, public_key2, | |
133 base::Bind(&SaveString, &symmetric_key1)); | |
134 delegate_.DeriveKey(private_key2, public_key1, | |
135 base::Bind(&SaveString, &symmetric_key2)); | |
136 | |
137 EXPECT_EQ(symmetric_key1, symmetric_key2); | |
138 } | |
139 | |
140 TEST_F(ProximityAuthFakeSecureMessageDelegateTest, | |
141 CreateAndUnwrapWithSymmetricKey) { | |
142 // Create SecureMessage using symmetric key. | |
143 SecureMessageDelegate::CreateOptions create_options = | |
144 GetCreateOptions(securemessage::AES_256_CBC, securemessage::HMAC_SHA256); | |
145 std::string serialized_message; | |
146 delegate_.CreateSecureMessage(kPayload, kSymmetricKey, create_options, | |
147 base::Bind(&SaveString, &serialized_message)); | |
148 | |
149 CheckSerializedSecureMessage(serialized_message, create_options); | |
150 | |
151 // Unwrap SecureMessage using symmetric key. | |
152 SecureMessageDelegate::UnwrapOptions unwrap_options = | |
153 GetUnwrapOptions(securemessage::AES_256_CBC, securemessage::HMAC_SHA256); | |
154 std::string payload; | |
155 securemessage::Header header; | |
156 delegate_.UnwrapSecureMessage( | |
157 serialized_message, kSymmetricKey, unwrap_options, | |
158 base::Bind(&SaveUnwrapResults, &payload, &header)); | |
159 | |
160 EXPECT_EQ(kPayload, payload); | |
161 } | |
162 | |
163 TEST_F(ProximityAuthFakeSecureMessageDelegateTest, | |
164 CreateAndUnwrapWithAsymmetricKey) { | |
165 delegate_.set_next_public_key(kTestPublicKey); | |
166 std::string public_key, private_key; | |
167 delegate_.GenerateKeyPair( | |
168 base::Bind(&SaveKeyPair, &public_key, &private_key)); | |
169 | |
170 // Create SecureMessage using asymmetric key. | |
171 SecureMessageDelegate::CreateOptions create_options = | |
172 GetCreateOptions(securemessage::NONE, securemessage::ECDSA_P256_SHA256); | |
173 std::string serialized_message; | |
174 delegate_.CreateSecureMessage(kPayload, private_key, create_options, | |
175 base::Bind(&SaveString, &serialized_message)); | |
176 | |
177 CheckSerializedSecureMessage(serialized_message, create_options); | |
178 | |
179 // Unwrap SecureMessage using symmetric key. | |
180 SecureMessageDelegate::UnwrapOptions unwrap_options = | |
181 GetUnwrapOptions(securemessage::NONE, securemessage::ECDSA_P256_SHA256); | |
182 std::string payload; | |
183 securemessage::Header header; | |
184 delegate_.UnwrapSecureMessage( | |
185 serialized_message, public_key, unwrap_options, | |
186 base::Bind(&SaveUnwrapResults, &payload, &header)); | |
187 | |
188 EXPECT_EQ(kPayload, payload); | |
189 } | |
190 | |
191 } // proximity_auth | |
OLD | NEW |