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

Side by Side Diff: net/cert/internal/parse_certificate_unittest.cc

Issue 1285593003: Add parsing code for TBSCertificate's "validity" field. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@cert_parsing
Patch Set: rebase onto master Created 5 years, 4 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
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 "net/cert/internal/parse_certificate.h" 5 #include "net/cert/internal/parse_certificate.h"
6 6
7 #include "base/strings/stringprintf.h"
7 #include "net/cert/internal/test_helpers.h" 8 #include "net/cert/internal/test_helpers.h"
8 #include "net/der/input.h" 9 #include "net/der/input.h"
9 #include "testing/gtest/include/gtest/gtest.h" 10 #include "testing/gtest/include/gtest/gtest.h"
10 11
11 namespace net { 12 namespace net {
12 13
13 namespace { 14 namespace {
14 15
15 std::string GetFilePath(const std::string file_name) { 16 std::string GetFilePath(const std::string file_name) {
16 return std::string("net/data/parse_certificate_unittest/") + file_name; 17 return std::string("net/data/parse_certificate_unittest/") + file_name;
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after
225 // The version was set to v4, which is unrecognized. 226 // The version was set to v4, which is unrecognized.
226 TEST(ParseTbsCertificateTest, Version4) { 227 TEST(ParseTbsCertificateTest, Version4) {
227 EnsureParsingTbsFails("tbs_v4.pem"); 228 EnsureParsingTbsFails("tbs_v4.pem");
228 } 229 }
229 230
230 // Tests that extraneous data after extensions in a v3 is rejected. 231 // Tests that extraneous data after extensions in a v3 is rejected.
231 TEST(ParseTbsCertificateTest, Version3DataAfterExtensions) { 232 TEST(ParseTbsCertificateTest, Version3DataAfterExtensions) {
232 EnsureParsingTbsFails("tbs_v3_data_after_extensions.pem"); 233 EnsureParsingTbsFails("tbs_v3_data_after_extensions.pem");
233 } 234 }
234 235
236 // Pretty-prints a GeneralizedTime as a human-readable string for use in test
237 // expectations (it is more readable to specify the expected results as a
238 // string).
239 std::string ToString(const der::GeneralizedTime& time) {
240 return base::StringPrintf(
241 "year=%d, month=%d, day=%d, hours=%d, minutes=%d, seconds=%d", time.year,
242 time.month, time.day, time.hours, time.minutes, time.seconds);
243 }
244
245 // Reads the "VALIDITY" block from a PEM file.
246 ::testing::AssertionResult LoadTestValidity(const std::string& file_name,
247 std::string* validity) {
248 std::string path = GetFilePath(file_name);
249 const PemBlockMapping mappings[] = {{"VALIDITY", validity}};
250 return ReadTestDataFromPemFile(path, mappings);
251 }
252
253 // Parses a valid "validity" field, where both notBefore and notAfter are
254 // expressed using UTCTime.
255 TEST(ParseCertificateValidityTest, BothUtcTime) {
256 std::string validity;
257
258 ASSERT_TRUE(LoadTestValidity("validity_both_utc_time.pem", &validity));
259
260 der::GeneralizedTime validity_not_before;
261 der::GeneralizedTime validity_not_after;
262 ASSERT_TRUE(ParseValidity(InputFromString(&validity), &validity_not_before,
263 &validity_not_after));
264
265 EXPECT_EQ("year=2012, month=10, day=18, hours=3, minutes=12, seconds=0",
266 ToString(validity_not_before));
267
268 EXPECT_EQ("year=2013, month=10, day=18, hours=14, minutes=59, seconds=59",
269 ToString(validity_not_after));
270 }
271
272 // Parses a valid "validity" field, where both notBefore and notAfter are
273 // expressed using GeneralizedTime.
274 TEST(ParseCertificateValidityTest, BothGeneralizedTime) {
275 std::string validity;
276
277 ASSERT_TRUE(
278 LoadTestValidity("validity_both_generalized_time.pem", &validity));
279
280 der::GeneralizedTime validity_not_before;
281 der::GeneralizedTime validity_not_after;
282 ASSERT_TRUE(ParseValidity(InputFromString(&validity), &validity_not_before,
283 &validity_not_after));
284
285 EXPECT_EQ("year=2014, month=1, day=31, hours=0, minutes=0, seconds=0",
286 ToString(validity_not_before));
287
288 EXPECT_EQ("year=2016, month=2, day=29, hours=0, minutes=0, seconds=0",
289 ToString(validity_not_after));
290 }
291
292 // Parses a valid "validity" field, where notBefore is a UTCTime and notAfter is
293 // a GeneralizedTime
294 TEST(ParseCertificateValidityTest, UTCTimeAndGeneralizedTime) {
295 std::string validity;
296
297 ASSERT_TRUE(LoadTestValidity("validity_utc_time_and_generalized_time.pem",
298 &validity));
299
300 der::GeneralizedTime validity_not_before;
301 der::GeneralizedTime validity_not_after;
302 ASSERT_TRUE(ParseValidity(InputFromString(&validity), &validity_not_before,
303 &validity_not_after));
304
305 EXPECT_EQ("year=2012, month=10, day=18, hours=3, minutes=12, seconds=0",
306 ToString(validity_not_before));
307
308 EXPECT_EQ("year=2016, month=2, day=29, hours=0, minutes=0, seconds=0",
309 ToString(validity_not_after));
310 }
311
312 // Parses a valid "validity" field, where notBefore is a GeneralizedTime and
313 // notAfter is
314 // a UTCTime. Also of interest, notBefore > notAfter. Parsing will succeed,
315 // however no time will fall in this range.
davidben 2015/08/18 17:24:27 Nit: This looks like a wrapped funny.
316 TEST(ParseCertificateValidityTest, GeneralizedTimeAndUTCTime) {
317 std::string validity;
318
319 ASSERT_TRUE(LoadTestValidity("validity_generalized_time_and_utc_time.pem",
320 &validity));
321
322 der::GeneralizedTime validity_not_before;
323 der::GeneralizedTime validity_not_after;
324 ASSERT_TRUE(ParseValidity(InputFromString(&validity), &validity_not_before,
325 &validity_not_after));
326
327 EXPECT_EQ("year=2014, month=1, day=31, hours=0, minutes=0, seconds=0",
328 ToString(validity_not_before));
329
330 EXPECT_EQ("year=2013, month=10, day=18, hours=14, minutes=59, seconds=59",
331 ToString(validity_not_after));
332 }
333
235 } // namespace 334 } // namespace
236 335
237 } // namespace net 336 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698