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

Side by Side Diff: components/gcm_driver/crypto/encryption_header_parsers_unittest.cc

Issue 1244803002: Add parsers for the Encryption and Encryption-Key HTTP headers. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: address comments Created 5 years, 2 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 2015 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/gcm_driver/crypto/encryption_header_parsers.h"
6
7 #include <vector>
8
9 #include "base/macros.h"
10 #include "testing/gtest/include/gtest/gtest.h"
11
12 namespace gcm {
13
14 namespace {
15
16 const uint64_t kDefaultRecordSize = 4096;
17
18 TEST(EncryptionHeaderParsersTest, ParseValidEncryptionHeaders) {
19 struct {
20 const char* const header;
21 const char* const parsed_keyid;
22 const char* const parsed_salt;
23 uint64_t parsed_rs;
24 } expected_results[] = {
25 { "keyid=foo;salt=c2l4dGVlbmNvb2xieXRlcw;rs=1024",
26 "foo", "sixteencoolbytes", 1024 },
27 { "keyid=foo; salt=c2l4dGVlbmNvb2xieXRlcw; rs=1024",
28 "foo", "sixteencoolbytes", 1024 },
29 { "KEYID=foo;SALT=c2l4dGVlbmNvb2xieXRlcw;RS=1024",
30 "foo", "sixteencoolbytes", 1024 },
31 { " keyid = foo ; salt = c2l4dGVlbmNvb2xieXRlcw ; rs = 1024 ",
32 "foo", "sixteencoolbytes", 1024 },
33 { "keyid=foo", "foo", "", kDefaultRecordSize },
34 { "keyid=foo;", "foo", "", kDefaultRecordSize },
35 { "keyid=\"foo\"", "foo", "", kDefaultRecordSize },
36 { "keyid='foo'", "foo", "", kDefaultRecordSize },
37 { "salt=c2l4dGVlbmNvb2xieXRlcw",
38 "", "sixteencoolbytes", kDefaultRecordSize },
39 { "rs=2048", "", "", 2048 },
40 { "keyid=foo;someothervalue=1;rs=42", "foo", "", 42 },
41 { "keyid=foo;keyid=bar", "bar", "", kDefaultRecordSize },
42 };
43
44 for (size_t i = 0; i < arraysize(expected_results); i++) {
45 SCOPED_TRACE(i);
46
47 std::string keyid, salt;
48 uint64_t rs = kDefaultRecordSize;
49
50 ASSERT_TRUE(ParseEncryptionHeader(expected_results[i].header, &keyid,
51 &salt, &rs));
52
53 EXPECT_EQ(expected_results[i].parsed_keyid, keyid);
54 EXPECT_EQ(expected_results[i].parsed_salt, salt);
55 EXPECT_EQ(expected_results[i].parsed_rs, rs);
56 }
57 }
58
59 TEST(EncryptionHeaderParsersTest, ParseInvalidEncryptionHeaders) {
60 const char* const expected_failures[] = {
61 "keyid",
62 "keyid=",
63 "keyid=foo;novaluekey",
64 "salt",
65 "salt=",
66 "salt=YmV/2ZXJ-sMDA",
67 "salt=dHdlbHZlY29vbGJ5dGVz=====",
68 "salt=123$xyz",
69 "rs",
70 "rs=",
71 "rs=0",
72 "rs=0x13",
73 "rs=1",
74 "rs=-1",
75 "rs=99999999999999999999999999999999",
76 "rs=foobar",
77 };
78
79 for (size_t i = 0; i < arraysize(expected_failures); i++) {
80 SCOPED_TRACE(i);
81
82 std::string keyid, salt;
83 uint64_t rs = kDefaultRecordSize;
84
85 EXPECT_FALSE(ParseEncryptionHeader(expected_failures[i], &keyid, &salt,
86 &rs));
87 }
88 }
89
90 TEST(EncryptionHeaderParsersTest, ParseValidEncryptionKeyHeaders) {
91 struct {
92 const char* const header;
93 const char* const parsed_keyid;
94 const char* const parsed_key;
95 const char* const parsed_dh;
96 } expected_results[] = {
97 { "keyid=foo;key=c2l4dGVlbmNvb2xieXRlcw;dh=dHdlbHZlY29vbGJ5dGVz",
98 "foo", "sixteencoolbytes", "twelvecoolbytes" },
99 { "keyid=foo; key=c2l4dGVlbmNvb2xieXRlcw; dh=dHdlbHZlY29vbGJ5dGVz",
100 "foo", "sixteencoolbytes", "twelvecoolbytes" },
101 { "keyid = foo ; key = c2l4dGVlbmNvb2xieXRlcw ; dh = dHdlbHZlY29vbGJ5dGVz ",
102 "foo", "sixteencoolbytes", "twelvecoolbytes" },
103 { "KEYID=foo;KEY=c2l4dGVlbmNvb2xieXRlcw;DH=dHdlbHZlY29vbGJ5dGVz",
104 "foo", "sixteencoolbytes", "twelvecoolbytes" },
105 { "keyid=foo", "foo", "", "" },
106 { "key=c2l4dGVlbmNvb2xieXRlcw", "", "sixteencoolbytes", "" },
107 { "key=\"c2l4dGVlbmNvb2xieXRlcw\"", "", "sixteencoolbytes", "" },
108 { "key='c2l4dGVlbmNvb2xieXRlcw'", "", "sixteencoolbytes", "" },
109 { "dh=dHdlbHZlY29vbGJ5dGVz", "", "", "twelvecoolbytes" },
110 { "keyid=foo;someothervalue=bar;key=dHdlbHZlY29vbGJ5dGVz",
111 "foo", "twelvecoolbytes", "" },
112 { "keyid=foo;keyid=bar", "bar", "", "" },
113 };
114
115 for (size_t i = 0; i < arraysize(expected_results); i++) {
116 SCOPED_TRACE(i);
117
118 std::string keyid, key, dh;
119
120 ASSERT_TRUE(ParseEncryptionKeyHeader(expected_results[i].header, &keyid,
121 &key, &dh));
122
123 EXPECT_EQ(expected_results[i].parsed_keyid, keyid);
124 EXPECT_EQ(expected_results[i].parsed_key, key);
125 EXPECT_EQ(expected_results[i].parsed_dh, dh);
126 }
127 }
128
129 TEST(EncryptionHeaderParsersTest, ParseInvalidEncryptionKeyHeaders) {
130 const char* const expected_failures[] = {
131 "keyid",
132 "keyid=",
133 "keyid=foo;novaluekey",
134 "key",
135 "key=",
136 "key=123$xyz",
137 "dh",
138 "dh=",
139 "dh=YmV/2ZXJ-sMDA",
140 "dh=dHdlbHZlY29vbGJ5dGVz=====",
141 "dh=123$xyz",
142 };
143
144 for (size_t i = 0; i < arraysize(expected_failures); i++) {
145 SCOPED_TRACE(i);
146
147 std::string keyid, key, dh;
148
149 EXPECT_FALSE(ParseEncryptionKeyHeader(expected_failures[i], &keyid, &key,
150 &dh));
151 }
152 }
153
154 TEST(EncryptionHeaderParsersTest, InvalidHeadersDoNotModifyOutput) {
155 std::string keyid = "mykeyid";
156 std::string salt = "somesalt";
157 uint64_t rs = 42u;
158
159 ASSERT_FALSE(ParseEncryptionHeader("rs=foobar", &keyid, &salt, &rs));
160
161 EXPECT_EQ("mykeyid", keyid);
162 EXPECT_EQ("somesalt", salt);
163 EXPECT_EQ(42u, rs);
164
165 std::string key = "akey";
166 std::string dh = "yourdh";
167
168 ASSERT_FALSE(ParseEncryptionKeyHeader("key=$$$", &keyid, &key, &dh));
169
170 EXPECT_EQ("mykeyid", keyid);
171 EXPECT_EQ("akey", key);
172 EXPECT_EQ("yourdh", dh);
173 }
174
175 TEST(EncryptionHeaderParsersTest, ParseMultipleValueHeaders) {
176 // Chrome currently does not support multiple lists of parameters as part
177 // of the Encryption headers. Make sure we reject such headers until we do.
178 std::string keyid, salt;
179 uint64_t rs = kDefaultRecordSize;
180
181 EXPECT_FALSE(ParseEncryptionHeader(
182 "keyid=foo;salt=c2l4dGVlbmNvb2xieXRlcw;rs=12,"
183 "keyid=bar;salt=dHdlbHZlY29vbGJ5dGVzl;rs=24",
184 &keyid, &salt, &rs));
185
186 std::string key, dh;
187
188 EXPECT_FALSE(ParseEncryptionKeyHeader(
189 "keyid=foo;key=c2l4dGVlbmNvb2xieXRlcw;dh=dHdlbHZlY29vbGJ5dGVzl,"
190 "keyid=bar;key=dHdlbHZlY29vbGJ5dGVzl;dh=c2l4dGVlbmNvb2xieXRlcw",
191 &keyid, &key, &dh));
192 }
193
194 } // namespace
195
196 } // namespace gcm
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698