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

Side by Side Diff: components/proximity_auth/cryptauth/fake_secure_message_delegate_unittest.cc

Issue 1060483002: Add SecureMessage definitions to CryptAuth. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: add unit test Created 5 years, 8 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
(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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698