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

Side by Side Diff: net/base/x509_certificate_unittest.cc

Issue 9584041: Create stubs for system certificate validation. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 9 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "base/file_path.h" 5 #include "base/file_path.h"
6 #include "base/file_util.h" 6 #include "base/file_util.h"
7 #include "base/path_service.h" 7 #include "base/path_service.h"
8 #include "base/pickle.h" 8 #include "base/pickle.h"
9 #include "base/sha1.h" 9 #include "base/sha1.h"
10 #include "base/string_number_conversions.h" 10 #include "base/string_number_conversions.h"
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after
227 EXPECT_EQ(valid_to, valid_expiry.ToDoubleT()); 227 EXPECT_EQ(valid_to, valid_expiry.ToDoubleT());
228 228
229 const SHA1Fingerprint& fingerprint = google_cert->fingerprint(); 229 const SHA1Fingerprint& fingerprint = google_cert->fingerprint();
230 for (size_t i = 0; i < 20; ++i) 230 for (size_t i = 0; i < 20; ++i)
231 EXPECT_EQ(expected_fingerprint[i], fingerprint.data[i]); 231 EXPECT_EQ(expected_fingerprint[i], fingerprint.data[i]);
232 232
233 std::vector<std::string> dns_names; 233 std::vector<std::string> dns_names;
234 google_cert->GetDNSNames(&dns_names); 234 google_cert->GetDNSNames(&dns_names);
235 ASSERT_EQ(1U, dns_names.size()); 235 ASSERT_EQ(1U, dns_names.size());
236 EXPECT_EQ("www.google.com", dns_names[0]); 236 EXPECT_EQ("www.google.com", dns_names[0]);
237
238 #if TEST_EV
239 // TODO(avi): turn this on for the Mac once EV checking is implemented.
240 CertVerifyResult verify_result;
241 int flags = X509Certificate::VERIFY_REV_CHECKING_ENABLED |
242 X509Certificate::VERIFY_EV_CERT;
243 EXPECT_EQ(OK, google_cert->Verify("www.google.com", flags, NULL,
244 &verify_result);
245 EXPECT_FALSE(verify_result.cert_status & CERT_STATUS_IS_EV);
246 #endif
247 } 237 }
248 238
249 TEST(X509CertificateTest, GoogleCertParsing) { 239 // TODO(rsleevi): Temporary fixture while refactoring http://crbug.com/114343
240 class X509CertificateTest : public testing::Test {
241 public:
242 X509CertificateTest() {}
243 virtual ~X509CertificateTest() {}
244
245 protected:
246 int Verify(X509Certificate* cert,
247 const std::string& hostname,
248 int flags,
249 CRLSet* crl_set,
250 CertVerifyResult* verify_result) {
251 return cert->Verify(hostname, flags, crl_set, verify_result);
252 }
253 };
254
255 TEST_F(X509CertificateTest, GoogleCertParsing) {
250 scoped_refptr<X509Certificate> google_cert( 256 scoped_refptr<X509Certificate> google_cert(
251 X509Certificate::CreateFromBytes( 257 X509Certificate::CreateFromBytes(
252 reinterpret_cast<const char*>(google_der), sizeof(google_der))); 258 reinterpret_cast<const char*>(google_der), sizeof(google_der)));
253 259
254 CheckGoogleCert(google_cert, google_fingerprint, 260 CheckGoogleCert(google_cert, google_fingerprint,
255 1238192407, // Mar 27 22:20:07 2009 GMT 261 1238192407, // Mar 27 22:20:07 2009 GMT
256 1269728407); // Mar 27 22:20:07 2010 GMT 262 1269728407); // Mar 27 22:20:07 2010 GMT
257 } 263 }
258 264
259 TEST(X509CertificateTest, WebkitCertParsing) { 265 TEST_F(X509CertificateTest, WebkitCertParsing) {
260 scoped_refptr<X509Certificate> webkit_cert(X509Certificate::CreateFromBytes( 266 scoped_refptr<X509Certificate> webkit_cert(X509Certificate::CreateFromBytes(
261 reinterpret_cast<const char*>(webkit_der), sizeof(webkit_der))); 267 reinterpret_cast<const char*>(webkit_der), sizeof(webkit_der)));
262 268
263 ASSERT_NE(static_cast<X509Certificate*>(NULL), webkit_cert); 269 ASSERT_NE(static_cast<X509Certificate*>(NULL), webkit_cert);
264 270
265 const CertPrincipal& subject = webkit_cert->subject(); 271 const CertPrincipal& subject = webkit_cert->subject();
266 EXPECT_EQ("Cupertino", subject.locality_name); 272 EXPECT_EQ("Cupertino", subject.locality_name);
267 EXPECT_EQ("California", subject.state_or_province_name); 273 EXPECT_EQ("California", subject.state_or_province_name);
268 EXPECT_EQ("US", subject.country_name); 274 EXPECT_EQ("US", subject.country_name);
269 EXPECT_EQ(0U, subject.street_addresses.size()); 275 EXPECT_EQ(0U, subject.street_addresses.size());
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
312 #endif 318 #endif
313 319
314 // Test that the wildcard cert matches properly. 320 // Test that the wildcard cert matches properly.
315 EXPECT_TRUE(webkit_cert->VerifyNameMatch("www.webkit.org")); 321 EXPECT_TRUE(webkit_cert->VerifyNameMatch("www.webkit.org"));
316 EXPECT_TRUE(webkit_cert->VerifyNameMatch("foo.webkit.org")); 322 EXPECT_TRUE(webkit_cert->VerifyNameMatch("foo.webkit.org"));
317 EXPECT_TRUE(webkit_cert->VerifyNameMatch("webkit.org")); 323 EXPECT_TRUE(webkit_cert->VerifyNameMatch("webkit.org"));
318 EXPECT_FALSE(webkit_cert->VerifyNameMatch("www.webkit.com")); 324 EXPECT_FALSE(webkit_cert->VerifyNameMatch("www.webkit.com"));
319 EXPECT_FALSE(webkit_cert->VerifyNameMatch("www.foo.webkit.com")); 325 EXPECT_FALSE(webkit_cert->VerifyNameMatch("www.foo.webkit.com"));
320 } 326 }
321 327
322 TEST(X509CertificateTest, WithoutRevocationChecking) { 328 TEST_F(X509CertificateTest, WithoutRevocationChecking) {
323 // Check that verification without revocation checking works. 329 // Check that verification without revocation checking works.
324 CertificateList certs = CreateCertificateListFromFile( 330 CertificateList certs = CreateCertificateListFromFile(
325 GetTestCertsDirectory(), 331 GetTestCertsDirectory(),
326 "googlenew.chain.pem", 332 "googlenew.chain.pem",
327 X509Certificate::FORMAT_PEM_CERT_SEQUENCE); 333 X509Certificate::FORMAT_PEM_CERT_SEQUENCE);
328 334
329 X509Certificate::OSCertHandles intermediates; 335 X509Certificate::OSCertHandles intermediates;
330 intermediates.push_back(certs[1]->os_cert_handle()); 336 intermediates.push_back(certs[1]->os_cert_handle());
331 337
332 scoped_refptr<X509Certificate> google_full_chain = 338 scoped_refptr<X509Certificate> google_full_chain =
333 X509Certificate::CreateFromHandle(certs[0]->os_cert_handle(), 339 X509Certificate::CreateFromHandle(certs[0]->os_cert_handle(),
334 intermediates); 340 intermediates);
335 341
336 CertVerifyResult verify_result; 342 CertVerifyResult verify_result;
337 EXPECT_EQ(OK, google_full_chain->Verify("www.google.com", 0 /* flags */, NULL, 343 EXPECT_EQ(OK, Verify(google_full_chain, "www.google.com", 0 /* flags */, NULL,
338 &verify_result)); 344 &verify_result));
339 } 345 }
340 346
341 TEST(X509CertificateTest, ThawteCertParsing) { 347 TEST_F(X509CertificateTest, ThawteCertParsing) {
342 scoped_refptr<X509Certificate> thawte_cert(X509Certificate::CreateFromBytes( 348 scoped_refptr<X509Certificate> thawte_cert(X509Certificate::CreateFromBytes(
343 reinterpret_cast<const char*>(thawte_der), sizeof(thawte_der))); 349 reinterpret_cast<const char*>(thawte_der), sizeof(thawte_der)));
344 350
345 ASSERT_NE(static_cast<X509Certificate*>(NULL), thawte_cert); 351 ASSERT_NE(static_cast<X509Certificate*>(NULL), thawte_cert);
346 352
347 const CertPrincipal& subject = thawte_cert->subject(); 353 const CertPrincipal& subject = thawte_cert->subject();
348 EXPECT_EQ("www.thawte.com", subject.common_name); 354 EXPECT_EQ("www.thawte.com", subject.common_name);
349 EXPECT_EQ("Mountain View", subject.locality_name); 355 EXPECT_EQ("Mountain View", subject.locality_name);
350 EXPECT_EQ("California", subject.state_or_province_name); 356 EXPECT_EQ("California", subject.state_or_province_name);
351 EXPECT_EQ("US", subject.country_name); 357 EXPECT_EQ("US", subject.country_name);
(...skipping 30 matching lines...) Expand all
382 std::vector<std::string> dns_names; 388 std::vector<std::string> dns_names;
383 thawte_cert->GetDNSNames(&dns_names); 389 thawte_cert->GetDNSNames(&dns_names);
384 ASSERT_EQ(1U, dns_names.size()); 390 ASSERT_EQ(1U, dns_names.size());
385 EXPECT_EQ("www.thawte.com", dns_names[0]); 391 EXPECT_EQ("www.thawte.com", dns_names[0]);
386 392
387 #if TEST_EV 393 #if TEST_EV
388 int flags = X509Certificate::VERIFY_REV_CHECKING_ENABLED | 394 int flags = X509Certificate::VERIFY_REV_CHECKING_ENABLED |
389 X509Certificate::VERIFY_EV_CERT; 395 X509Certificate::VERIFY_EV_CERT;
390 CertVerifyResult verify_result; 396 CertVerifyResult verify_result;
391 // EV cert verification requires revocation checking. 397 // EV cert verification requires revocation checking.
392 EXPECT_EQ(OK, thawte_cert->Verify("www.thawte.com", flags, NULL, 398 EXPECT_EQ(OK, Verify(thawte_cert, "www.thawte.com", flags, NULL,
393 &verify_result); 399 &verify_result);
394 EXPECT_TRUE(verify_result.cert_status & CERT_STATUS_IS_EV); 400 EXPECT_TRUE(verify_result.cert_status & CERT_STATUS_IS_EV);
395 // Consequently, if we don't have revocation checking enabled, we can't claim 401 // Consequently, if we don't have revocation checking enabled, we can't claim
396 // any cert is EV. 402 // any cert is EV.
397 flags = X509Certificate::VERIFY_EV_CERT; 403 flags = X509Certificate::VERIFY_EV_CERT;
398 EXPECT_EQ(OK, thawte_cert->Verify("www.thawte.com", flags, NULL, 404 EXPECT_EQ(OK, Verify(thawte_cert, "www.thawte.com", flags, NULL,
399 &verify_result)); 405 &verify_result));
400 EXPECT_FALSE(verify_result.cert_status & CERT_STATUS_IS_EV); 406 EXPECT_FALSE(verify_result.cert_status & CERT_STATUS_IS_EV);
401 #endif 407 #endif
402 } 408 }
403 409
404 // Test that all desired AttributeAndValue pairs can be extracted when only 410 // Test that all desired AttributeAndValue pairs can be extracted when only
405 // a single RelativeDistinguishedName is present. "Normally" there is only 411 // a single RelativeDistinguishedName is present. "Normally" there is only
406 // one AVA per RDN, but some CAs place all AVAs within a single RDN. 412 // one AVA per RDN, but some CAs place all AVAs within a single RDN.
407 // This is a regression test for http://crbug.com/101009 413 // This is a regression test for http://crbug.com/101009
408 TEST(X509CertificateTest, MultivalueRDN) { 414 TEST_F(X509CertificateTest, MultivalueRDN) {
409 FilePath certs_dir = GetTestCertsDirectory(); 415 FilePath certs_dir = GetTestCertsDirectory();
410 416
411 scoped_refptr<X509Certificate> multivalue_rdn_cert = 417 scoped_refptr<X509Certificate> multivalue_rdn_cert =
412 ImportCertFromFile(certs_dir, "multivalue_rdn.pem"); 418 ImportCertFromFile(certs_dir, "multivalue_rdn.pem");
413 ASSERT_NE(static_cast<X509Certificate*>(NULL), multivalue_rdn_cert); 419 ASSERT_NE(static_cast<X509Certificate*>(NULL), multivalue_rdn_cert);
414 420
415 const CertPrincipal& subject = multivalue_rdn_cert->subject(); 421 const CertPrincipal& subject = multivalue_rdn_cert->subject();
416 EXPECT_EQ("Multivalue RDN Test", subject.common_name); 422 EXPECT_EQ("Multivalue RDN Test", subject.common_name);
417 EXPECT_EQ("", subject.locality_name); 423 EXPECT_EQ("", subject.locality_name);
418 EXPECT_EQ("", subject.state_or_province_name); 424 EXPECT_EQ("", subject.state_or_province_name);
419 EXPECT_EQ("US", subject.country_name); 425 EXPECT_EQ("US", subject.country_name);
420 EXPECT_EQ(0U, subject.street_addresses.size()); 426 EXPECT_EQ(0U, subject.street_addresses.size());
421 ASSERT_EQ(1U, subject.organization_names.size()); 427 ASSERT_EQ(1U, subject.organization_names.size());
422 EXPECT_EQ("Chromium", subject.organization_names[0]); 428 EXPECT_EQ("Chromium", subject.organization_names[0]);
423 ASSERT_EQ(1U, subject.organization_unit_names.size()); 429 ASSERT_EQ(1U, subject.organization_unit_names.size());
424 EXPECT_EQ("Chromium net_unittests", subject.organization_unit_names[0]); 430 EXPECT_EQ("Chromium net_unittests", subject.organization_unit_names[0]);
425 ASSERT_EQ(1U, subject.domain_components.size()); 431 ASSERT_EQ(1U, subject.domain_components.size());
426 EXPECT_EQ("Chromium", subject.domain_components[0]); 432 EXPECT_EQ("Chromium", subject.domain_components[0]);
427 } 433 }
428 434
429 // Test that characters which would normally be escaped in the string form, 435 // Test that characters which would normally be escaped in the string form,
430 // such as '=' or '"', are not escaped when parsed as individual components. 436 // such as '=' or '"', are not escaped when parsed as individual components.
431 // This is a regression test for http://crbug.com/102839 437 // This is a regression test for http://crbug.com/102839
432 TEST(X509CertificateTest, UnescapedSpecialCharacters) { 438 TEST_F(X509CertificateTest, UnescapedSpecialCharacters) {
433 FilePath certs_dir = GetTestCertsDirectory(); 439 FilePath certs_dir = GetTestCertsDirectory();
434 440
435 scoped_refptr<X509Certificate> unescaped_cert = 441 scoped_refptr<X509Certificate> unescaped_cert =
436 ImportCertFromFile(certs_dir, "unescaped.pem"); 442 ImportCertFromFile(certs_dir, "unescaped.pem");
437 ASSERT_NE(static_cast<X509Certificate*>(NULL), unescaped_cert); 443 ASSERT_NE(static_cast<X509Certificate*>(NULL), unescaped_cert);
438 444
439 const CertPrincipal& subject = unescaped_cert->subject(); 445 const CertPrincipal& subject = unescaped_cert->subject();
440 EXPECT_EQ("127.0.0.1", subject.common_name); 446 EXPECT_EQ("127.0.0.1", subject.common_name);
441 EXPECT_EQ("Mountain View", subject.locality_name); 447 EXPECT_EQ("Mountain View", subject.locality_name);
442 EXPECT_EQ("California", subject.state_or_province_name); 448 EXPECT_EQ("California", subject.state_or_province_name);
443 EXPECT_EQ("US", subject.country_name); 449 EXPECT_EQ("US", subject.country_name);
444 ASSERT_EQ(1U, subject.street_addresses.size()); 450 ASSERT_EQ(1U, subject.street_addresses.size());
445 EXPECT_EQ("1600 Amphitheatre Parkway", subject.street_addresses[0]); 451 EXPECT_EQ("1600 Amphitheatre Parkway", subject.street_addresses[0]);
446 ASSERT_EQ(1U, subject.organization_names.size()); 452 ASSERT_EQ(1U, subject.organization_names.size());
447 EXPECT_EQ("Chromium = \"net_unittests\"", subject.organization_names[0]); 453 EXPECT_EQ("Chromium = \"net_unittests\"", subject.organization_names[0]);
448 ASSERT_EQ(2U, subject.organization_unit_names.size()); 454 ASSERT_EQ(2U, subject.organization_unit_names.size());
449 EXPECT_EQ("net_unittests", subject.organization_unit_names[0]); 455 EXPECT_EQ("net_unittests", subject.organization_unit_names[0]);
450 EXPECT_EQ("Chromium", subject.organization_unit_names[1]); 456 EXPECT_EQ("Chromium", subject.organization_unit_names[1]);
451 EXPECT_EQ(0U, subject.domain_components.size()); 457 EXPECT_EQ(0U, subject.domain_components.size());
452 } 458 }
453 459
454 TEST(X509CertificateTest, PaypalNullCertParsing) { 460 TEST_F(X509CertificateTest, PaypalNullCertParsing) {
455 scoped_refptr<X509Certificate> paypal_null_cert( 461 scoped_refptr<X509Certificate> paypal_null_cert(
456 X509Certificate::CreateFromBytes( 462 X509Certificate::CreateFromBytes(
457 reinterpret_cast<const char*>(paypal_null_der), 463 reinterpret_cast<const char*>(paypal_null_der),
458 sizeof(paypal_null_der))); 464 sizeof(paypal_null_der)));
459 465
460 ASSERT_NE(static_cast<X509Certificate*>(NULL), paypal_null_cert); 466 ASSERT_NE(static_cast<X509Certificate*>(NULL), paypal_null_cert);
461 467
462 const SHA1Fingerprint& fingerprint = 468 const SHA1Fingerprint& fingerprint =
463 paypal_null_cert->fingerprint(); 469 paypal_null_cert->fingerprint();
464 for (size_t i = 0; i < 20; ++i) 470 for (size_t i = 0; i < 20; ++i)
465 EXPECT_EQ(paypal_null_fingerprint[i], fingerprint.data[i]); 471 EXPECT_EQ(paypal_null_fingerprint[i], fingerprint.data[i]);
466 472
467 int flags = 0; 473 int flags = 0;
468 CertVerifyResult verify_result; 474 CertVerifyResult verify_result;
469 int error = paypal_null_cert->Verify("www.paypal.com", flags, NULL, 475 int error = Verify(paypal_null_cert, "www.paypal.com", flags, NULL,
470 &verify_result); 476 &verify_result);
471 #if defined(USE_OPENSSL) || defined(OS_MACOSX) || defined(OS_WIN) 477 #if defined(USE_OPENSSL) || defined(OS_MACOSX) || defined(OS_WIN)
472 // TOOD(bulach): investigate why macosx and win aren't returning 478 // TOOD(bulach): investigate why macosx and win aren't returning
473 // ERR_CERT_INVALID or ERR_CERT_COMMON_NAME_INVALID. 479 // ERR_CERT_INVALID or ERR_CERT_COMMON_NAME_INVALID.
474 EXPECT_EQ(ERR_CERT_AUTHORITY_INVALID, error); 480 EXPECT_EQ(ERR_CERT_AUTHORITY_INVALID, error);
475 #else 481 #else
476 EXPECT_EQ(ERR_CERT_COMMON_NAME_INVALID, error); 482 EXPECT_EQ(ERR_CERT_COMMON_NAME_INVALID, error);
477 #endif 483 #endif
478 // Either the system crypto library should correctly report a certificate 484 // Either the system crypto library should correctly report a certificate
479 // name mismatch, or our certificate blacklist should cause us to report an 485 // name mismatch, or our certificate blacklist should cause us to report an
480 // invalid certificate. 486 // invalid certificate.
481 #if !defined(OS_MACOSX) && !defined(USE_OPENSSL) 487 #if !defined(OS_MACOSX) && !defined(USE_OPENSSL)
482 EXPECT_TRUE(verify_result.cert_status & 488 EXPECT_TRUE(verify_result.cert_status &
483 (CERT_STATUS_COMMON_NAME_INVALID | CERT_STATUS_INVALID)); 489 (CERT_STATUS_COMMON_NAME_INVALID | CERT_STATUS_INVALID));
484 #endif 490 #endif
485 } 491 }
486 492
487 TEST(X509CertificateTest, SerialNumbers) { 493 TEST_F(X509CertificateTest, SerialNumbers) {
488 scoped_refptr<X509Certificate> google_cert( 494 scoped_refptr<X509Certificate> google_cert(
489 X509Certificate::CreateFromBytes( 495 X509Certificate::CreateFromBytes(
490 reinterpret_cast<const char*>(google_der), sizeof(google_der))); 496 reinterpret_cast<const char*>(google_der), sizeof(google_der)));
491 497
492 static const uint8 google_serial[16] = { 498 static const uint8 google_serial[16] = {
493 0x01,0x2a,0x39,0x76,0x0d,0x3f,0x4f,0xc9, 499 0x01,0x2a,0x39,0x76,0x0d,0x3f,0x4f,0xc9,
494 0x0b,0xe7,0xbd,0x2b,0xcf,0x95,0x2e,0x7a, 500 0x0b,0xe7,0xbd,0x2b,0xcf,0x95,0x2e,0x7a,
495 }; 501 };
496 502
497 ASSERT_EQ(sizeof(google_serial), google_cert->serial_number().size()); 503 ASSERT_EQ(sizeof(google_serial), google_cert->serial_number().size());
498 EXPECT_TRUE(memcmp(google_cert->serial_number().data(), google_serial, 504 EXPECT_TRUE(memcmp(google_cert->serial_number().data(), google_serial,
499 sizeof(google_serial)) == 0); 505 sizeof(google_serial)) == 0);
500 506
501 // We also want to check a serial number where the first byte is >= 0x80 in 507 // We also want to check a serial number where the first byte is >= 0x80 in
502 // case the underlying library tries to pad it. 508 // case the underlying library tries to pad it.
503 scoped_refptr<X509Certificate> paypal_null_cert( 509 scoped_refptr<X509Certificate> paypal_null_cert(
504 X509Certificate::CreateFromBytes( 510 X509Certificate::CreateFromBytes(
505 reinterpret_cast<const char*>(paypal_null_der), 511 reinterpret_cast<const char*>(paypal_null_der),
506 sizeof(paypal_null_der))); 512 sizeof(paypal_null_der)));
507 513
508 static const uint8 paypal_null_serial[3] = {0x00, 0xf0, 0x9b}; 514 static const uint8 paypal_null_serial[3] = {0x00, 0xf0, 0x9b};
509 ASSERT_EQ(sizeof(paypal_null_serial), 515 ASSERT_EQ(sizeof(paypal_null_serial),
510 paypal_null_cert->serial_number().size()); 516 paypal_null_cert->serial_number().size());
511 EXPECT_TRUE(memcmp(paypal_null_cert->serial_number().data(), 517 EXPECT_TRUE(memcmp(paypal_null_cert->serial_number().data(),
512 paypal_null_serial, sizeof(paypal_null_serial)) == 0); 518 paypal_null_serial, sizeof(paypal_null_serial)) == 0);
513 } 519 }
514 520
515 TEST(X509CertificateTest, CAFingerprints) { 521 TEST_F(X509CertificateTest, CAFingerprints) {
516 FilePath certs_dir = GetTestCertsDirectory(); 522 FilePath certs_dir = GetTestCertsDirectory();
517 523
518 scoped_refptr<X509Certificate> server_cert = 524 scoped_refptr<X509Certificate> server_cert =
519 ImportCertFromFile(certs_dir, "salesforce_com_test.pem"); 525 ImportCertFromFile(certs_dir, "salesforce_com_test.pem");
520 ASSERT_NE(static_cast<X509Certificate*>(NULL), server_cert); 526 ASSERT_NE(static_cast<X509Certificate*>(NULL), server_cert);
521 527
522 scoped_refptr<X509Certificate> intermediate_cert1 = 528 scoped_refptr<X509Certificate> intermediate_cert1 =
523 ImportCertFromFile(certs_dir, "verisign_intermediate_ca_2011.pem"); 529 ImportCertFromFile(certs_dir, "verisign_intermediate_ca_2011.pem");
524 ASSERT_NE(static_cast<X509Certificate*>(NULL), intermediate_cert1); 530 ASSERT_NE(static_cast<X509Certificate*>(NULL), intermediate_cert1);
525 531
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
563 EXPECT_TRUE(memcmp(cert_chain2->ca_fingerprint().data, 569 EXPECT_TRUE(memcmp(cert_chain2->ca_fingerprint().data,
564 cert_chain2_ca_fingerprint, 20) == 0); 570 cert_chain2_ca_fingerprint, 20) == 0);
565 EXPECT_TRUE(memcmp(cert_chain3->ca_fingerprint().data, 571 EXPECT_TRUE(memcmp(cert_chain3->ca_fingerprint().data,
566 cert_chain3_ca_fingerprint, 20) == 0); 572 cert_chain3_ca_fingerprint, 20) == 0);
567 } 573 }
568 574
569 // A regression test for http://crbug.com/31497. 575 // A regression test for http://crbug.com/31497.
570 // This certificate will expire on 2012-04-08. The test will still 576 // This certificate will expire on 2012-04-08. The test will still
571 // pass if error == ERR_CERT_DATE_INVALID. TODO(wtc): generate test 577 // pass if error == ERR_CERT_DATE_INVALID. TODO(wtc): generate test
572 // certificates for this unit test. http://crbug.com/111742 578 // certificates for this unit test. http://crbug.com/111742
573 TEST(X509CertificateTest, IntermediateCARequireExplicitPolicy) { 579 TEST_F(X509CertificateTest, IntermediateCARequireExplicitPolicy) {
574 FilePath certs_dir = GetTestCertsDirectory(); 580 FilePath certs_dir = GetTestCertsDirectory();
575 581
576 scoped_refptr<X509Certificate> server_cert = 582 scoped_refptr<X509Certificate> server_cert =
577 ImportCertFromFile(certs_dir, "www_us_army_mil_cert.der"); 583 ImportCertFromFile(certs_dir, "www_us_army_mil_cert.der");
578 ASSERT_NE(static_cast<X509Certificate*>(NULL), server_cert); 584 ASSERT_NE(static_cast<X509Certificate*>(NULL), server_cert);
579 585
580 // The intermediate CA certificate's policyConstraints extension has a 586 // The intermediate CA certificate's policyConstraints extension has a
581 // requireExplicitPolicy field with SkipCerts=0. 587 // requireExplicitPolicy field with SkipCerts=0.
582 scoped_refptr<X509Certificate> intermediate_cert = 588 scoped_refptr<X509Certificate> intermediate_cert =
583 ImportCertFromFile(certs_dir, "dod_ca_17_cert.der"); 589 ImportCertFromFile(certs_dir, "dod_ca_17_cert.der");
584 ASSERT_NE(static_cast<X509Certificate*>(NULL), intermediate_cert); 590 ASSERT_NE(static_cast<X509Certificate*>(NULL), intermediate_cert);
585 591
586 FilePath root_cert_path = certs_dir.AppendASCII("dod_root_ca_2_cert.der"); 592 FilePath root_cert_path = certs_dir.AppendASCII("dod_root_ca_2_cert.der");
587 TestRootCerts* root_certs = TestRootCerts::GetInstance(); 593 TestRootCerts* root_certs = TestRootCerts::GetInstance();
588 ASSERT_TRUE(root_certs->AddFromFile(root_cert_path)); 594 ASSERT_TRUE(root_certs->AddFromFile(root_cert_path));
589 595
590 X509Certificate::OSCertHandles intermediates; 596 X509Certificate::OSCertHandles intermediates;
591 intermediates.push_back(intermediate_cert->os_cert_handle()); 597 intermediates.push_back(intermediate_cert->os_cert_handle());
592 scoped_refptr<X509Certificate> cert_chain = 598 scoped_refptr<X509Certificate> cert_chain =
593 X509Certificate::CreateFromHandle(server_cert->os_cert_handle(), 599 X509Certificate::CreateFromHandle(server_cert->os_cert_handle(),
594 intermediates); 600 intermediates);
595 601
596 int flags = 0; 602 int flags = 0;
597 CertVerifyResult verify_result; 603 CertVerifyResult verify_result;
598 int error = cert_chain->Verify("www.us.army.mil", flags, NULL, 604 int error = Verify(cert_chain, "www.us.army.mil", flags, NULL,
599 &verify_result); 605 &verify_result);
600 if (error == OK) { 606 if (error == OK) {
601 EXPECT_EQ(0U, verify_result.cert_status); 607 EXPECT_EQ(0U, verify_result.cert_status);
602 } else { 608 } else {
603 EXPECT_EQ(ERR_CERT_DATE_INVALID, error); 609 EXPECT_EQ(ERR_CERT_DATE_INVALID, error);
604 EXPECT_EQ(CERT_STATUS_DATE_INVALID, verify_result.cert_status); 610 EXPECT_EQ(CERT_STATUS_DATE_INVALID, verify_result.cert_status);
605 } 611 }
606 root_certs->Clear(); 612 root_certs->Clear();
607 } 613 }
608 614
609 // Test for bug 58437. 615 // Test for bug 58437.
610 // This certificate will expire on 2011-12-21. The test will still 616 // This certificate will expire on 2011-12-21. The test will still
611 // pass if error == ERR_CERT_DATE_INVALID. 617 // pass if error == ERR_CERT_DATE_INVALID.
612 // This test is DISABLED because it appears that we cannot do 618 // This test is DISABLED because it appears that we cannot do
613 // certificate revocation checking when running all of the net unit tests. 619 // certificate revocation checking when running all of the net unit tests.
614 // This test passes when run individually, but when run with all of the net 620 // This test passes when run individually, but when run with all of the net
615 // unit tests, the call to PKIXVerifyCert returns the NSS error -8180, which is 621 // unit tests, the call to PKIXVerifyCert returns the NSS error -8180, which is
616 // SEC_ERROR_REVOKED_CERTIFICATE. This indicates a lack of revocation 622 // SEC_ERROR_REVOKED_CERTIFICATE. This indicates a lack of revocation
617 // status, i.e. that the revocation check is failing for some reason. 623 // status, i.e. that the revocation check is failing for some reason.
618 TEST(X509CertificateTest, DISABLED_GlobalSignR3EVTest) { 624 TEST_F(X509CertificateTest, DISABLED_GlobalSignR3EVTest) {
619 FilePath certs_dir = GetTestCertsDirectory(); 625 FilePath certs_dir = GetTestCertsDirectory();
620 626
621 scoped_refptr<X509Certificate> server_cert = 627 scoped_refptr<X509Certificate> server_cert =
622 ImportCertFromFile(certs_dir, "2029_globalsign_com_cert.pem"); 628 ImportCertFromFile(certs_dir, "2029_globalsign_com_cert.pem");
623 ASSERT_NE(static_cast<X509Certificate*>(NULL), server_cert); 629 ASSERT_NE(static_cast<X509Certificate*>(NULL), server_cert);
624 630
625 scoped_refptr<X509Certificate> intermediate_cert = 631 scoped_refptr<X509Certificate> intermediate_cert =
626 ImportCertFromFile(certs_dir, "globalsign_ev_sha256_ca_cert.pem"); 632 ImportCertFromFile(certs_dir, "globalsign_ev_sha256_ca_cert.pem");
627 ASSERT_NE(static_cast<X509Certificate*>(NULL), intermediate_cert); 633 ASSERT_NE(static_cast<X509Certificate*>(NULL), intermediate_cert);
628 634
629 X509Certificate::OSCertHandles intermediates; 635 X509Certificate::OSCertHandles intermediates;
630 intermediates.push_back(intermediate_cert->os_cert_handle()); 636 intermediates.push_back(intermediate_cert->os_cert_handle());
631 scoped_refptr<X509Certificate> cert_chain = 637 scoped_refptr<X509Certificate> cert_chain =
632 X509Certificate::CreateFromHandle(server_cert->os_cert_handle(), 638 X509Certificate::CreateFromHandle(server_cert->os_cert_handle(),
633 intermediates); 639 intermediates);
634 640
635 CertVerifyResult verify_result; 641 CertVerifyResult verify_result;
636 int flags = X509Certificate::VERIFY_REV_CHECKING_ENABLED | 642 int flags = X509Certificate::VERIFY_REV_CHECKING_ENABLED |
637 X509Certificate::VERIFY_EV_CERT; 643 X509Certificate::VERIFY_EV_CERT;
638 int error = cert_chain->Verify("2029.globalsign.com", flags, NULL, 644 int error = Verify(cert_chain, "2029.globalsign.com", flags, NULL,
639 &verify_result); 645 &verify_result);
640 if (error == OK) 646 if (error == OK)
641 EXPECT_TRUE(verify_result.cert_status & CERT_STATUS_IS_EV); 647 EXPECT_TRUE(verify_result.cert_status & CERT_STATUS_IS_EV);
642 else 648 else
643 EXPECT_EQ(ERR_CERT_DATE_INVALID, error); 649 EXPECT_EQ(ERR_CERT_DATE_INVALID, error);
644 } 650 }
645 651
646 // Currently, only RSA and DSA keys are checked for weakness, and our example 652 // Currently, only RSA and DSA keys are checked for weakness, and our example
647 // weak size is 768. These could change in the future. 653 // weak size is 768. These could change in the future.
648 // 654 //
649 // Note that this means there may be false negatives: keys for other 655 // Note that this means there may be false negatives: keys for other
650 // algorithms and which are weak will pass this test. 656 // algorithms and which are weak will pass this test.
651 static bool IsWeakKeyType(const std::string& key_type) { 657 static bool IsWeakKeyType(const std::string& key_type) {
652 size_t pos = key_type.find("-"); 658 size_t pos = key_type.find("-");
653 std::string size = key_type.substr(0, pos); 659 std::string size = key_type.substr(0, pos);
654 std::string type = key_type.substr(pos + 1); 660 std::string type = key_type.substr(pos + 1);
655 661
656 if (type == "rsa" || type == "dsa") 662 if (type == "rsa" || type == "dsa")
657 return size == "768"; 663 return size == "768";
658 664
659 return false; 665 return false;
660 } 666 }
661 667
662 TEST(X509CertificateTest, RejectWeakKeys) { 668 TEST_F(X509CertificateTest, RejectWeakKeys) {
663 FilePath certs_dir = GetTestCertsDirectory(); 669 FilePath certs_dir = GetTestCertsDirectory();
664 typedef std::vector<std::string> Strings; 670 typedef std::vector<std::string> Strings;
665 Strings key_types; 671 Strings key_types;
666 672
667 // generate-weak-test-chains.sh currently has: 673 // generate-weak-test-chains.sh currently has:
668 // key_types="768-rsa 1024-rsa 2048-rsa prime256v1-ecdsa" 674 // key_types="768-rsa 1024-rsa 2048-rsa prime256v1-ecdsa"
669 // We must use the same key types here. The filenames generated look like: 675 // We must use the same key types here. The filenames generated look like:
670 // 2048-rsa-ee-by-768-rsa-intermediate.pem 676 // 2048-rsa-ee-by-768-rsa-intermediate.pem
671 key_types.push_back("768-rsa"); 677 key_types.push_back("768-rsa");
672 key_types.push_back("1024-rsa"); 678 key_types.push_back("1024-rsa");
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
704 ImportCertFromFile(certs_dir, basename); 710 ImportCertFromFile(certs_dir, basename);
705 ASSERT_NE(static_cast<X509Certificate*>(NULL), intermediate); 711 ASSERT_NE(static_cast<X509Certificate*>(NULL), intermediate);
706 712
707 X509Certificate::OSCertHandles intermediates; 713 X509Certificate::OSCertHandles intermediates;
708 intermediates.push_back(intermediate->os_cert_handle()); 714 intermediates.push_back(intermediate->os_cert_handle());
709 scoped_refptr<X509Certificate> cert_chain = 715 scoped_refptr<X509Certificate> cert_chain =
710 X509Certificate::CreateFromHandle(ee_cert->os_cert_handle(), 716 X509Certificate::CreateFromHandle(ee_cert->os_cert_handle(),
711 intermediates); 717 intermediates);
712 718
713 CertVerifyResult verify_result; 719 CertVerifyResult verify_result;
714 int error = cert_chain->Verify("127.0.0.1", 0, NULL, &verify_result); 720 int error = Verify(cert_chain, "127.0.0.1", 0, NULL, &verify_result);
715 721
716 if (IsWeakKeyType(*ee_type) || IsWeakKeyType(*signer_type)) { 722 if (IsWeakKeyType(*ee_type) || IsWeakKeyType(*signer_type)) {
717 EXPECT_NE(OK, error); 723 EXPECT_NE(OK, error);
718 EXPECT_EQ(CERT_STATUS_WEAK_KEY, 724 EXPECT_EQ(CERT_STATUS_WEAK_KEY,
719 verify_result.cert_status & CERT_STATUS_WEAK_KEY); 725 verify_result.cert_status & CERT_STATUS_WEAK_KEY);
720 } else { 726 } else {
721 EXPECT_EQ(OK, error); 727 EXPECT_EQ(OK, error);
722 EXPECT_EQ(0U, verify_result.cert_status & CERT_STATUS_WEAK_KEY); 728 EXPECT_EQ(0U, verify_result.cert_status & CERT_STATUS_WEAK_KEY);
723 } 729 }
724 } 730 }
725 } 731 }
726 732
727 TestRootCerts::GetInstance()->Clear(); 733 TestRootCerts::GetInstance()->Clear();
728 } 734 }
729 735
730 // Test for bug 108514. 736 // Test for bug 108514.
731 // The certificate will expire on 2012-07-20. The test will still 737 // The certificate will expire on 2012-07-20. The test will still
732 // pass if error == ERR_CERT_DATE_INVALID. TODO(rsleevi): generate test 738 // pass if error == ERR_CERT_DATE_INVALID. TODO(rsleevi): generate test
733 // certificates for this unit test. http://crbug.com/111730 739 // certificates for this unit test. http://crbug.com/111730
734 TEST(X509CertificateTest, ExtraneousMD5RootCert) { 740 TEST_F(X509CertificateTest, ExtraneousMD5RootCert) {
735 FilePath certs_dir = GetTestCertsDirectory(); 741 FilePath certs_dir = GetTestCertsDirectory();
736 742
737 scoped_refptr<X509Certificate> server_cert = 743 scoped_refptr<X509Certificate> server_cert =
738 ImportCertFromFile(certs_dir, "images_etrade_wallst_com.pem"); 744 ImportCertFromFile(certs_dir, "images_etrade_wallst_com.pem");
739 ASSERT_NE(static_cast<X509Certificate*>(NULL), server_cert); 745 ASSERT_NE(static_cast<X509Certificate*>(NULL), server_cert);
740 746
741 scoped_refptr<X509Certificate> intermediate_cert = 747 scoped_refptr<X509Certificate> intermediate_cert =
742 ImportCertFromFile(certs_dir, "globalsign_orgv1_ca.pem"); 748 ImportCertFromFile(certs_dir, "globalsign_orgv1_ca.pem");
743 ASSERT_NE(static_cast<X509Certificate*>(NULL), intermediate_cert); 749 ASSERT_NE(static_cast<X509Certificate*>(NULL), intermediate_cert);
744 750
745 scoped_refptr<X509Certificate> md5_root_cert = 751 scoped_refptr<X509Certificate> md5_root_cert =
746 ImportCertFromFile(certs_dir, "globalsign_root_ca_md5.pem"); 752 ImportCertFromFile(certs_dir, "globalsign_root_ca_md5.pem");
747 ASSERT_NE(static_cast<X509Certificate*>(NULL), md5_root_cert); 753 ASSERT_NE(static_cast<X509Certificate*>(NULL), md5_root_cert);
748 754
749 X509Certificate::OSCertHandles intermediates; 755 X509Certificate::OSCertHandles intermediates;
750 intermediates.push_back(intermediate_cert->os_cert_handle()); 756 intermediates.push_back(intermediate_cert->os_cert_handle());
751 intermediates.push_back(md5_root_cert->os_cert_handle()); 757 intermediates.push_back(md5_root_cert->os_cert_handle());
752 scoped_refptr<X509Certificate> cert_chain = 758 scoped_refptr<X509Certificate> cert_chain =
753 X509Certificate::CreateFromHandle(server_cert->os_cert_handle(), 759 X509Certificate::CreateFromHandle(server_cert->os_cert_handle(),
754 intermediates); 760 intermediates);
755 761
756 CertVerifyResult verify_result; 762 CertVerifyResult verify_result;
757 int flags = 0; 763 int flags = 0;
758 int error = cert_chain->Verify("images.etrade.wallst.com", flags, NULL, 764 int error = Verify(cert_chain, "images.etrade.wallst.com", flags, NULL,
759 &verify_result); 765 &verify_result);
760 if (error != OK) 766 if (error != OK)
761 EXPECT_EQ(ERR_CERT_DATE_INVALID, error); 767 EXPECT_EQ(ERR_CERT_DATE_INVALID, error);
762 768
763 EXPECT_FALSE(verify_result.has_md5); 769 EXPECT_FALSE(verify_result.has_md5);
764 EXPECT_FALSE(verify_result.has_md5_ca); 770 EXPECT_FALSE(verify_result.has_md5_ca);
765 } 771 }
766 772
767 // Test for bug 94673. 773 // Test for bug 94673.
768 TEST(X509CertificateTest, GoogleDigiNotarTest) { 774 TEST_F(X509CertificateTest, GoogleDigiNotarTest) {
769 FilePath certs_dir = GetTestCertsDirectory(); 775 FilePath certs_dir = GetTestCertsDirectory();
770 776
771 scoped_refptr<X509Certificate> server_cert = 777 scoped_refptr<X509Certificate> server_cert =
772 ImportCertFromFile(certs_dir, "google_diginotar.pem"); 778 ImportCertFromFile(certs_dir, "google_diginotar.pem");
773 ASSERT_NE(static_cast<X509Certificate*>(NULL), server_cert); 779 ASSERT_NE(static_cast<X509Certificate*>(NULL), server_cert);
774 780
775 scoped_refptr<X509Certificate> intermediate_cert = 781 scoped_refptr<X509Certificate> intermediate_cert =
776 ImportCertFromFile(certs_dir, "diginotar_public_ca_2025.pem"); 782 ImportCertFromFile(certs_dir, "diginotar_public_ca_2025.pem");
777 ASSERT_NE(static_cast<X509Certificate*>(NULL), intermediate_cert); 783 ASSERT_NE(static_cast<X509Certificate*>(NULL), intermediate_cert);
778 784
779 X509Certificate::OSCertHandles intermediates; 785 X509Certificate::OSCertHandles intermediates;
780 intermediates.push_back(intermediate_cert->os_cert_handle()); 786 intermediates.push_back(intermediate_cert->os_cert_handle());
781 scoped_refptr<X509Certificate> cert_chain = 787 scoped_refptr<X509Certificate> cert_chain =
782 X509Certificate::CreateFromHandle(server_cert->os_cert_handle(), 788 X509Certificate::CreateFromHandle(server_cert->os_cert_handle(),
783 intermediates); 789 intermediates);
784 790
785 CertVerifyResult verify_result; 791 CertVerifyResult verify_result;
786 int flags = X509Certificate::VERIFY_REV_CHECKING_ENABLED; 792 int flags = X509Certificate::VERIFY_REV_CHECKING_ENABLED;
787 int error = cert_chain->Verify("mail.google.com", flags, NULL, 793 int error = Verify(cert_chain, "mail.google.com", flags, NULL,
788 &verify_result); 794 &verify_result);
789 EXPECT_NE(OK, error); 795 EXPECT_NE(OK, error);
790 796
791 // Now turn off revocation checking. Certificate verification should still 797 // Now turn off revocation checking. Certificate verification should still
792 // fail. 798 // fail.
793 flags = 0; 799 flags = 0;
794 error = cert_chain->Verify("mail.google.com", flags, NULL, &verify_result); 800 error = Verify(cert_chain, "mail.google.com", flags, NULL, &verify_result);
795 EXPECT_NE(OK, error); 801 EXPECT_NE(OK, error);
796 } 802 }
797 803
798 TEST(X509CertificateTest, DigiNotarCerts) { 804 TEST_F(X509CertificateTest, DigiNotarCerts) {
799 static const char* const kDigiNotarFilenames[] = { 805 static const char* const kDigiNotarFilenames[] = {
800 "diginotar_root_ca.pem", 806 "diginotar_root_ca.pem",
801 "diginotar_cyber_ca.pem", 807 "diginotar_cyber_ca.pem",
802 "diginotar_services_1024_ca.pem", 808 "diginotar_services_1024_ca.pem",
803 "diginotar_pkioverheid.pem", 809 "diginotar_pkioverheid.pem",
804 "diginotar_pkioverheid_g2.pem", 810 "diginotar_pkioverheid_g2.pem",
805 NULL, 811 NULL,
806 }; 812 };
807 813
808 FilePath certs_dir = GetTestCertsDirectory(); 814 FilePath certs_dir = GetTestCertsDirectory();
(...skipping 15 matching lines...) Expand all
824 ASSERT_EQ(sizeof(fingerprint.data), spki_sha1.size()); 830 ASSERT_EQ(sizeof(fingerprint.data), spki_sha1.size());
825 memcpy(fingerprint.data, spki_sha1.data(), spki_sha1.size()); 831 memcpy(fingerprint.data, spki_sha1.data(), spki_sha1.size());
826 public_keys.push_back(fingerprint); 832 public_keys.push_back(fingerprint);
827 833
828 EXPECT_TRUE(X509Certificate::IsPublicKeyBlacklisted(public_keys)) << 834 EXPECT_TRUE(X509Certificate::IsPublicKeyBlacklisted(public_keys)) <<
829 "Public key not blocked for " << kDigiNotarFilenames[i]; 835 "Public key not blocked for " << kDigiNotarFilenames[i];
830 } 836 }
831 } 837 }
832 838
833 // Bug 111893: This test needs a new certificate. 839 // Bug 111893: This test needs a new certificate.
834 TEST(X509CertificateTest, DISABLED_TestKnownRoot) { 840 TEST_F(X509CertificateTest, DISABLED_TestKnownRoot) {
835 FilePath certs_dir = GetTestCertsDirectory(); 841 FilePath certs_dir = GetTestCertsDirectory();
836 scoped_refptr<X509Certificate> cert = 842 scoped_refptr<X509Certificate> cert =
837 ImportCertFromFile(certs_dir, "nist.der"); 843 ImportCertFromFile(certs_dir, "nist.der");
838 ASSERT_NE(static_cast<X509Certificate*>(NULL), cert); 844 ASSERT_NE(static_cast<X509Certificate*>(NULL), cert);
839 845
840 // This intermediate is only needed for old Linux machines. Modern NSS 846 // This intermediate is only needed for old Linux machines. Modern NSS
841 // includes it as a root already. 847 // includes it as a root already.
842 scoped_refptr<X509Certificate> intermediate_cert = 848 scoped_refptr<X509Certificate> intermediate_cert =
843 ImportCertFromFile(certs_dir, "nist_intermediate.der"); 849 ImportCertFromFile(certs_dir, "nist_intermediate.der");
844 ASSERT_NE(static_cast<X509Certificate*>(NULL), intermediate_cert); 850 ASSERT_NE(static_cast<X509Certificate*>(NULL), intermediate_cert);
845 851
846 X509Certificate::OSCertHandles intermediates; 852 X509Certificate::OSCertHandles intermediates;
847 intermediates.push_back(intermediate_cert->os_cert_handle()); 853 intermediates.push_back(intermediate_cert->os_cert_handle());
848 scoped_refptr<X509Certificate> cert_chain = 854 scoped_refptr<X509Certificate> cert_chain =
849 X509Certificate::CreateFromHandle(cert->os_cert_handle(), 855 X509Certificate::CreateFromHandle(cert->os_cert_handle(),
850 intermediates); 856 intermediates);
851 857
852 int flags = 0; 858 int flags = 0;
853 CertVerifyResult verify_result; 859 CertVerifyResult verify_result;
854 // This is going to blow up in Feb 2012. Sorry! Disable and file a bug 860 // This is going to blow up in Feb 2012. Sorry! Disable and file a bug
855 // against agl. Also see PublicKeyHashes in this file. 861 // against agl. Also see PublicKeyHashes in this file.
856 int error = cert_chain->Verify("www.nist.gov", flags, NULL, &verify_result); 862 int error = Verify(cert_chain, "www.nist.gov", flags, NULL, &verify_result);
857 EXPECT_EQ(OK, error); 863 EXPECT_EQ(OK, error);
858 EXPECT_EQ(0U, verify_result.cert_status); 864 EXPECT_EQ(0U, verify_result.cert_status);
859 EXPECT_TRUE(verify_result.is_issued_by_known_root); 865 EXPECT_TRUE(verify_result.is_issued_by_known_root);
860 } 866 }
861 867
862 // This is the SHA1 hash of the SubjectPublicKeyInfo of nist.der. 868 // This is the SHA1 hash of the SubjectPublicKeyInfo of nist.der.
863 static const char nistSPKIHash[] = 869 static const char nistSPKIHash[] =
864 "\x15\x60\xde\x65\x4e\x03\x9f\xd0\x08\x82" 870 "\x15\x60\xde\x65\x4e\x03\x9f\xd0\x08\x82"
865 "\xa9\x6a\xc4\x65\x8e\x6f\x92\x06\x84\x35"; 871 "\xa9\x6a\xc4\x65\x8e\x6f\x92\x06\x84\x35";
866 872
867 TEST(X509CertificateTest, ExtractSPKIFromDERCert) { 873 TEST_F(X509CertificateTest, ExtractSPKIFromDERCert) {
868 FilePath certs_dir = GetTestCertsDirectory(); 874 FilePath certs_dir = GetTestCertsDirectory();
869 scoped_refptr<X509Certificate> cert = 875 scoped_refptr<X509Certificate> cert =
870 ImportCertFromFile(certs_dir, "nist.der"); 876 ImportCertFromFile(certs_dir, "nist.der");
871 ASSERT_NE(static_cast<X509Certificate*>(NULL), cert); 877 ASSERT_NE(static_cast<X509Certificate*>(NULL), cert);
872 878
873 std::string derBytes; 879 std::string derBytes;
874 EXPECT_TRUE(X509Certificate::GetDEREncoded(cert->os_cert_handle(), 880 EXPECT_TRUE(X509Certificate::GetDEREncoded(cert->os_cert_handle(),
875 &derBytes)); 881 &derBytes));
876 882
877 base::StringPiece spkiBytes; 883 base::StringPiece spkiBytes;
878 EXPECT_TRUE(asn1::ExtractSPKIFromDERCert(derBytes, &spkiBytes)); 884 EXPECT_TRUE(asn1::ExtractSPKIFromDERCert(derBytes, &spkiBytes));
879 885
880 uint8 hash[base::kSHA1Length]; 886 uint8 hash[base::kSHA1Length];
881 base::SHA1HashBytes(reinterpret_cast<const uint8*>(spkiBytes.data()), 887 base::SHA1HashBytes(reinterpret_cast<const uint8*>(spkiBytes.data()),
882 spkiBytes.size(), hash); 888 spkiBytes.size(), hash);
883 889
884 EXPECT_EQ(0, memcmp(hash, nistSPKIHash, sizeof(hash))); 890 EXPECT_EQ(0, memcmp(hash, nistSPKIHash, sizeof(hash)));
885 } 891 }
886 892
887 TEST(X509CertificateTest, ExtractCRLURLsFromDERCert) { 893 TEST_F(X509CertificateTest, ExtractCRLURLsFromDERCert) {
888 FilePath certs_dir = GetTestCertsDirectory(); 894 FilePath certs_dir = GetTestCertsDirectory();
889 scoped_refptr<X509Certificate> cert = 895 scoped_refptr<X509Certificate> cert =
890 ImportCertFromFile(certs_dir, "nist.der"); 896 ImportCertFromFile(certs_dir, "nist.der");
891 ASSERT_NE(static_cast<X509Certificate*>(NULL), cert); 897 ASSERT_NE(static_cast<X509Certificate*>(NULL), cert);
892 898
893 std::string derBytes; 899 std::string derBytes;
894 EXPECT_TRUE(X509Certificate::GetDEREncoded(cert->os_cert_handle(), 900 EXPECT_TRUE(X509Certificate::GetDEREncoded(cert->os_cert_handle(),
895 &derBytes)); 901 &derBytes));
896 902
897 std::vector<base::StringPiece> crl_urls; 903 std::vector<base::StringPiece> crl_urls;
898 EXPECT_TRUE(asn1::ExtractCRLURLsFromDERCert(derBytes, &crl_urls)); 904 EXPECT_TRUE(asn1::ExtractCRLURLsFromDERCert(derBytes, &crl_urls));
899 905
900 EXPECT_EQ(1u, crl_urls.size()); 906 EXPECT_EQ(1u, crl_urls.size());
901 if (crl_urls.size() > 0) { 907 if (crl_urls.size() > 0) {
902 EXPECT_EQ("http://SVRSecure-G3-crl.verisign.com/SVRSecureG3.crl", 908 EXPECT_EQ("http://SVRSecure-G3-crl.verisign.com/SVRSecureG3.crl",
903 crl_urls[0].as_string()); 909 crl_urls[0].as_string());
904 } 910 }
905 } 911 }
906 912
907 // Bug 111893: This test needs a new certificate. 913 // Bug 111893: This test needs a new certificate.
908 TEST(X509CertificateTest, DISABLED_PublicKeyHashes) { 914 TEST_F(X509CertificateTest, DISABLED_PublicKeyHashes) {
909 FilePath certs_dir = GetTestCertsDirectory(); 915 FilePath certs_dir = GetTestCertsDirectory();
910 // This is going to blow up in Feb 2012. Sorry! Disable and file a bug 916 // This is going to blow up in Feb 2012. Sorry! Disable and file a bug
911 // against agl. Also see TestKnownRoot in this file. 917 // against agl. Also see TestKnownRoot in this file.
912 scoped_refptr<X509Certificate> cert = 918 scoped_refptr<X509Certificate> cert =
913 ImportCertFromFile(certs_dir, "nist.der"); 919 ImportCertFromFile(certs_dir, "nist.der");
914 ASSERT_NE(static_cast<X509Certificate*>(NULL), cert); 920 ASSERT_NE(static_cast<X509Certificate*>(NULL), cert);
915 921
916 // This intermediate is only needed for old Linux machines. Modern NSS 922 // This intermediate is only needed for old Linux machines. Modern NSS
917 // includes it as a root already. 923 // includes it as a root already.
918 scoped_refptr<X509Certificate> intermediate_cert = 924 scoped_refptr<X509Certificate> intermediate_cert =
919 ImportCertFromFile(certs_dir, "nist_intermediate.der"); 925 ImportCertFromFile(certs_dir, "nist_intermediate.der");
920 ASSERT_NE(static_cast<X509Certificate*>(NULL), intermediate_cert); 926 ASSERT_NE(static_cast<X509Certificate*>(NULL), intermediate_cert);
921 927
922 TestRootCerts::GetInstance()->Add(intermediate_cert.get()); 928 TestRootCerts::GetInstance()->Add(intermediate_cert.get());
923 929
924 X509Certificate::OSCertHandles intermediates; 930 X509Certificate::OSCertHandles intermediates;
925 intermediates.push_back(intermediate_cert->os_cert_handle()); 931 intermediates.push_back(intermediate_cert->os_cert_handle());
926 scoped_refptr<X509Certificate> cert_chain = 932 scoped_refptr<X509Certificate> cert_chain =
927 X509Certificate::CreateFromHandle(cert->os_cert_handle(), 933 X509Certificate::CreateFromHandle(cert->os_cert_handle(),
928 intermediates); 934 intermediates);
929 935
930 int flags = 0; 936 int flags = 0;
931 CertVerifyResult verify_result; 937 CertVerifyResult verify_result;
932 938
933 int error = cert_chain->Verify("www.nist.gov", flags, NULL, &verify_result); 939 int error = Verify(cert_chain, "www.nist.gov", flags, NULL, &verify_result);
934 EXPECT_EQ(OK, error); 940 EXPECT_EQ(OK, error);
935 EXPECT_EQ(0U, verify_result.cert_status); 941 EXPECT_EQ(0U, verify_result.cert_status);
936 ASSERT_LE(2u, verify_result.public_key_hashes.size()); 942 ASSERT_LE(2u, verify_result.public_key_hashes.size());
937 EXPECT_EQ(HexEncode(nistSPKIHash, base::kSHA1Length), 943 EXPECT_EQ(HexEncode(nistSPKIHash, base::kSHA1Length),
938 HexEncode(verify_result.public_key_hashes[0].data, base::kSHA1Length)); 944 HexEncode(verify_result.public_key_hashes[0].data, base::kSHA1Length));
939 EXPECT_EQ("83244223D6CBF0A26FC7DE27CEBCA4BDA32612AD", 945 EXPECT_EQ("83244223D6CBF0A26FC7DE27CEBCA4BDA32612AD",
940 HexEncode(verify_result.public_key_hashes[1].data, base::kSHA1Length)); 946 HexEncode(verify_result.public_key_hashes[1].data, base::kSHA1Length));
941 947
942 TestRootCerts::GetInstance()->Clear(); 948 TestRootCerts::GetInstance()->Clear();
943 } 949 }
944 950
945 // A regression test for http://crbug.com/70293. 951 // A regression test for http://crbug.com/70293.
946 // The Key Usage extension in this RSA SSL server certificate does not have 952 // The Key Usage extension in this RSA SSL server certificate does not have
947 // the keyEncipherment bit. 953 // the keyEncipherment bit.
948 TEST(X509CertificateTest, InvalidKeyUsage) { 954 TEST_F(X509CertificateTest, InvalidKeyUsage) {
949 FilePath certs_dir = GetTestCertsDirectory(); 955 FilePath certs_dir = GetTestCertsDirectory();
950 956
951 scoped_refptr<X509Certificate> server_cert = 957 scoped_refptr<X509Certificate> server_cert =
952 ImportCertFromFile(certs_dir, "invalid_key_usage_cert.der"); 958 ImportCertFromFile(certs_dir, "invalid_key_usage_cert.der");
953 ASSERT_NE(static_cast<X509Certificate*>(NULL), server_cert); 959 ASSERT_NE(static_cast<X509Certificate*>(NULL), server_cert);
954 960
955 int flags = 0; 961 int flags = 0;
956 CertVerifyResult verify_result; 962 CertVerifyResult verify_result;
957 int error = server_cert->Verify("jira.aquameta.com", flags, NULL, 963 int error = Verify(server_cert, "jira.aquameta.com", flags, NULL,
958 &verify_result); 964 &verify_result);
959 #if defined(USE_OPENSSL) 965 #if defined(USE_OPENSSL)
960 // This certificate has two errors: "invalid key usage" and "untrusted CA". 966 // This certificate has two errors: "invalid key usage" and "untrusted CA".
961 // However, OpenSSL returns only one (the latter), and we can't detect 967 // However, OpenSSL returns only one (the latter), and we can't detect
962 // the other errors. 968 // the other errors.
963 EXPECT_EQ(ERR_CERT_AUTHORITY_INVALID, error); 969 EXPECT_EQ(ERR_CERT_AUTHORITY_INVALID, error);
964 #else 970 #else
965 EXPECT_EQ(ERR_CERT_INVALID, error); 971 EXPECT_EQ(ERR_CERT_INVALID, error);
966 EXPECT_TRUE(verify_result.cert_status & CERT_STATUS_INVALID); 972 EXPECT_TRUE(verify_result.cert_status & CERT_STATUS_INVALID);
967 #endif 973 #endif
968 // TODO(wtc): fix http://crbug.com/75520 to get all the certificate errors 974 // TODO(wtc): fix http://crbug.com/75520 to get all the certificate errors
969 // from NSS. 975 // from NSS.
970 #if !defined(USE_NSS) 976 #if !defined(USE_NSS)
971 // The certificate is issued by an unknown CA. 977 // The certificate is issued by an unknown CA.
972 EXPECT_TRUE(verify_result.cert_status & CERT_STATUS_AUTHORITY_INVALID); 978 EXPECT_TRUE(verify_result.cert_status & CERT_STATUS_AUTHORITY_INVALID);
973 #endif 979 #endif
974 } 980 }
975 981
976 // Tests X509CertificateCache via X509Certificate::CreateFromHandle. We 982 // Tests X509CertificateCache via X509Certificate::CreateFromHandle. We
977 // call X509Certificate::CreateFromHandle several times and observe whether 983 // call X509Certificate::CreateFromHandle several times and observe whether
978 // it returns a cached or new OSCertHandle. 984 // it returns a cached or new OSCertHandle.
979 TEST(X509CertificateTest, Cache) { 985 TEST_F(X509CertificateTest, Cache) {
980 X509Certificate::OSCertHandle google_cert_handle; 986 X509Certificate::OSCertHandle google_cert_handle;
981 X509Certificate::OSCertHandle thawte_cert_handle; 987 X509Certificate::OSCertHandle thawte_cert_handle;
982 988
983 // Add a single certificate to the certificate cache. 989 // Add a single certificate to the certificate cache.
984 google_cert_handle = X509Certificate::CreateOSCertHandleFromBytes( 990 google_cert_handle = X509Certificate::CreateOSCertHandleFromBytes(
985 reinterpret_cast<const char*>(google_der), sizeof(google_der)); 991 reinterpret_cast<const char*>(google_der), sizeof(google_der));
986 scoped_refptr<X509Certificate> cert1(X509Certificate::CreateFromHandle( 992 scoped_refptr<X509Certificate> cert1(X509Certificate::CreateFromHandle(
987 google_cert_handle, X509Certificate::OSCertHandles())); 993 google_cert_handle, X509Certificate::OSCertHandles()));
988 X509Certificate::FreeOSCertHandle(google_cert_handle); 994 X509Certificate::FreeOSCertHandle(google_cert_handle);
989 995
(...skipping 26 matching lines...) Expand all
1016 X509Certificate::FreeOSCertHandle(thawte_cert_handle); 1022 X509Certificate::FreeOSCertHandle(thawte_cert_handle);
1017 1023
1018 // Test that the new certificate, even with intermediates, results in the 1024 // Test that the new certificate, even with intermediates, results in the
1019 // same underlying handle being used. 1025 // same underlying handle being used.
1020 EXPECT_EQ(cert1->os_cert_handle(), cert3->os_cert_handle()); 1026 EXPECT_EQ(cert1->os_cert_handle(), cert3->os_cert_handle());
1021 // Though they use the same OS handle, the intermediates should be different. 1027 // Though they use the same OS handle, the intermediates should be different.
1022 EXPECT_NE(cert1->GetIntermediateCertificates().size(), 1028 EXPECT_NE(cert1->GetIntermediateCertificates().size(),
1023 cert3->GetIntermediateCertificates().size()); 1029 cert3->GetIntermediateCertificates().size());
1024 } 1030 }
1025 1031
1026 TEST(X509CertificateTest, Pickle) { 1032 TEST_F(X509CertificateTest, Pickle) {
1027 X509Certificate::OSCertHandle google_cert_handle = 1033 X509Certificate::OSCertHandle google_cert_handle =
1028 X509Certificate::CreateOSCertHandleFromBytes( 1034 X509Certificate::CreateOSCertHandleFromBytes(
1029 reinterpret_cast<const char*>(google_der), sizeof(google_der)); 1035 reinterpret_cast<const char*>(google_der), sizeof(google_der));
1030 X509Certificate::OSCertHandle thawte_cert_handle = 1036 X509Certificate::OSCertHandle thawte_cert_handle =
1031 X509Certificate::CreateOSCertHandleFromBytes( 1037 X509Certificate::CreateOSCertHandleFromBytes(
1032 reinterpret_cast<const char*>(thawte_der), sizeof(thawte_der)); 1038 reinterpret_cast<const char*>(thawte_der), sizeof(thawte_der));
1033 1039
1034 X509Certificate::OSCertHandles intermediates; 1040 X509Certificate::OSCertHandles intermediates;
1035 intermediates.push_back(thawte_cert_handle); 1041 intermediates.push_back(thawte_cert_handle);
1036 scoped_refptr<X509Certificate> cert = X509Certificate::CreateFromHandle( 1042 scoped_refptr<X509Certificate> cert = X509Certificate::CreateFromHandle(
(...skipping 17 matching lines...) Expand all
1054 cert->GetIntermediateCertificates(); 1060 cert->GetIntermediateCertificates();
1055 const X509Certificate::OSCertHandles& pickle_intermediates = 1061 const X509Certificate::OSCertHandles& pickle_intermediates =
1056 cert_from_pickle->GetIntermediateCertificates(); 1062 cert_from_pickle->GetIntermediateCertificates();
1057 ASSERT_EQ(cert_intermediates.size(), pickle_intermediates.size()); 1063 ASSERT_EQ(cert_intermediates.size(), pickle_intermediates.size());
1058 for (size_t i = 0; i < cert_intermediates.size(); ++i) { 1064 for (size_t i = 0; i < cert_intermediates.size(); ++i) {
1059 EXPECT_TRUE(X509Certificate::IsSameOSCert(cert_intermediates[i], 1065 EXPECT_TRUE(X509Certificate::IsSameOSCert(cert_intermediates[i],
1060 pickle_intermediates[i])); 1066 pickle_intermediates[i]));
1061 } 1067 }
1062 } 1068 }
1063 1069
1064 TEST(X509CertificateTest, Policy) { 1070 TEST_F(X509CertificateTest, Policy) {
1065 scoped_refptr<X509Certificate> google_cert(X509Certificate::CreateFromBytes( 1071 scoped_refptr<X509Certificate> google_cert(X509Certificate::CreateFromBytes(
1066 reinterpret_cast<const char*>(google_der), sizeof(google_der))); 1072 reinterpret_cast<const char*>(google_der), sizeof(google_der)));
1067 1073
1068 scoped_refptr<X509Certificate> webkit_cert(X509Certificate::CreateFromBytes( 1074 scoped_refptr<X509Certificate> webkit_cert(X509Certificate::CreateFromBytes(
1069 reinterpret_cast<const char*>(webkit_der), sizeof(webkit_der))); 1075 reinterpret_cast<const char*>(webkit_der), sizeof(webkit_der)));
1070 1076
1071 CertPolicy policy; 1077 CertPolicy policy;
1072 1078
1073 EXPECT_EQ(policy.Check(google_cert.get()), CertPolicy::UNKNOWN); 1079 EXPECT_EQ(policy.Check(google_cert.get()), CertPolicy::UNKNOWN);
1074 EXPECT_EQ(policy.Check(webkit_cert.get()), CertPolicy::UNKNOWN); 1080 EXPECT_EQ(policy.Check(webkit_cert.get()), CertPolicy::UNKNOWN);
(...skipping 15 matching lines...) Expand all
1090 EXPECT_TRUE(policy.HasDeniedCert()); 1096 EXPECT_TRUE(policy.HasDeniedCert());
1091 1097
1092 policy.Allow(webkit_cert.get()); 1098 policy.Allow(webkit_cert.get());
1093 1099
1094 EXPECT_EQ(policy.Check(google_cert.get()), CertPolicy::DENIED); 1100 EXPECT_EQ(policy.Check(google_cert.get()), CertPolicy::DENIED);
1095 EXPECT_EQ(policy.Check(webkit_cert.get()), CertPolicy::ALLOWED); 1101 EXPECT_EQ(policy.Check(webkit_cert.get()), CertPolicy::ALLOWED);
1096 EXPECT_TRUE(policy.HasAllowedCert()); 1102 EXPECT_TRUE(policy.HasAllowedCert());
1097 EXPECT_TRUE(policy.HasDeniedCert()); 1103 EXPECT_TRUE(policy.HasDeniedCert());
1098 } 1104 }
1099 1105
1100 TEST(X509CertificateTest, IntermediateCertificates) { 1106 TEST_F(X509CertificateTest, IntermediateCertificates) {
1101 scoped_refptr<X509Certificate> webkit_cert( 1107 scoped_refptr<X509Certificate> webkit_cert(
1102 X509Certificate::CreateFromBytes( 1108 X509Certificate::CreateFromBytes(
1103 reinterpret_cast<const char*>(webkit_der), sizeof(webkit_der))); 1109 reinterpret_cast<const char*>(webkit_der), sizeof(webkit_der)));
1104 1110
1105 scoped_refptr<X509Certificate> thawte_cert( 1111 scoped_refptr<X509Certificate> thawte_cert(
1106 X509Certificate::CreateFromBytes( 1112 X509Certificate::CreateFromBytes(
1107 reinterpret_cast<const char*>(thawte_der), sizeof(thawte_der))); 1113 reinterpret_cast<const char*>(thawte_der), sizeof(thawte_der)));
1108 1114
1109 X509Certificate::OSCertHandle google_handle; 1115 X509Certificate::OSCertHandle google_handle;
1110 // Create object with no intermediates: 1116 // Create object with no intermediates:
(...skipping 23 matching lines...) Expand all
1134 // Cleanup 1140 // Cleanup
1135 X509Certificate::FreeOSCertHandle(google_handle); 1141 X509Certificate::FreeOSCertHandle(google_handle);
1136 } 1142 }
1137 1143
1138 // Basic test for returning the chain in CertVerifyResult. Note that the 1144 // Basic test for returning the chain in CertVerifyResult. Note that the
1139 // returned chain may just be a reflection of the originally supplied chain; 1145 // returned chain may just be a reflection of the originally supplied chain;
1140 // that is, if any errors occur, the default chain returned is an exact copy 1146 // that is, if any errors occur, the default chain returned is an exact copy
1141 // of the certificate to be verified. The remaining VerifyReturn* tests are 1147 // of the certificate to be verified. The remaining VerifyReturn* tests are
1142 // used to ensure that the actual, verified chain is being returned by 1148 // used to ensure that the actual, verified chain is being returned by
1143 // Verify(). 1149 // Verify().
1144 TEST(X509CertificateTest, VerifyReturnChainBasic) { 1150 TEST_F(X509CertificateTest, VerifyReturnChainBasic) {
1145 FilePath certs_dir = GetTestCertsDirectory(); 1151 FilePath certs_dir = GetTestCertsDirectory();
1146 CertificateList certs = CreateCertificateListFromFile( 1152 CertificateList certs = CreateCertificateListFromFile(
1147 certs_dir, "x509_verify_results.chain.pem", 1153 certs_dir, "x509_verify_results.chain.pem",
1148 X509Certificate::FORMAT_AUTO); 1154 X509Certificate::FORMAT_AUTO);
1149 ASSERT_EQ(3U, certs.size()); 1155 ASSERT_EQ(3U, certs.size());
1150 1156
1151 X509Certificate::OSCertHandles intermediates; 1157 X509Certificate::OSCertHandles intermediates;
1152 intermediates.push_back(certs[1]->os_cert_handle()); 1158 intermediates.push_back(certs[1]->os_cert_handle());
1153 intermediates.push_back(certs[2]->os_cert_handle()); 1159 intermediates.push_back(certs[2]->os_cert_handle());
1154 1160
1155 TestRootCerts::GetInstance()->Add(certs[2]); 1161 TestRootCerts::GetInstance()->Add(certs[2]);
1156 1162
1157 scoped_refptr<X509Certificate> google_full_chain = 1163 scoped_refptr<X509Certificate> google_full_chain =
1158 X509Certificate::CreateFromHandle(certs[0]->os_cert_handle(), 1164 X509Certificate::CreateFromHandle(certs[0]->os_cert_handle(),
1159 intermediates); 1165 intermediates);
1160 ASSERT_NE(static_cast<X509Certificate*>(NULL), google_full_chain); 1166 ASSERT_NE(static_cast<X509Certificate*>(NULL), google_full_chain);
1161 ASSERT_EQ(2U, google_full_chain->GetIntermediateCertificates().size()); 1167 ASSERT_EQ(2U, google_full_chain->GetIntermediateCertificates().size());
1162 1168
1163 CertVerifyResult verify_result; 1169 CertVerifyResult verify_result;
1164 EXPECT_EQ(static_cast<X509Certificate*>(NULL), verify_result.verified_cert); 1170 EXPECT_EQ(static_cast<X509Certificate*>(NULL), verify_result.verified_cert);
1165 int error = google_full_chain->Verify("127.0.0.1", 0, NULL, &verify_result); 1171 int error = Verify(google_full_chain, "127.0.0.1", 0, NULL, &verify_result);
1166 EXPECT_EQ(OK, error); 1172 EXPECT_EQ(OK, error);
1167 ASSERT_NE(static_cast<X509Certificate*>(NULL), verify_result.verified_cert); 1173 ASSERT_NE(static_cast<X509Certificate*>(NULL), verify_result.verified_cert);
1168 1174
1169 EXPECT_NE(google_full_chain, verify_result.verified_cert); 1175 EXPECT_NE(google_full_chain, verify_result.verified_cert);
1170 EXPECT_TRUE(X509Certificate::IsSameOSCert( 1176 EXPECT_TRUE(X509Certificate::IsSameOSCert(
1171 google_full_chain->os_cert_handle(), 1177 google_full_chain->os_cert_handle(),
1172 verify_result.verified_cert->os_cert_handle())); 1178 verify_result.verified_cert->os_cert_handle()));
1173 const X509Certificate::OSCertHandles& return_intermediates = 1179 const X509Certificate::OSCertHandles& return_intermediates =
1174 verify_result.verified_cert->GetIntermediateCertificates(); 1180 verify_result.verified_cert->GetIntermediateCertificates();
1175 ASSERT_EQ(2U, return_intermediates.size()); 1181 ASSERT_EQ(2U, return_intermediates.size());
1176 EXPECT_TRUE(X509Certificate::IsSameOSCert(return_intermediates[0], 1182 EXPECT_TRUE(X509Certificate::IsSameOSCert(return_intermediates[0],
1177 certs[1]->os_cert_handle())); 1183 certs[1]->os_cert_handle()));
1178 EXPECT_TRUE(X509Certificate::IsSameOSCert(return_intermediates[1], 1184 EXPECT_TRUE(X509Certificate::IsSameOSCert(return_intermediates[1],
1179 certs[2]->os_cert_handle())); 1185 certs[2]->os_cert_handle()));
1180 1186
1181 TestRootCerts::GetInstance()->Clear(); 1187 TestRootCerts::GetInstance()->Clear();
1182 } 1188 }
1183 1189
1184 // Test that the certificate returned in CertVerifyResult is able to reorder 1190 // Test that the certificate returned in CertVerifyResult is able to reorder
1185 // certificates that are not ordered from end-entity to root. While this is 1191 // certificates that are not ordered from end-entity to root. While this is
1186 // a protocol violation if sent during a TLS handshake, if multiple sources 1192 // a protocol violation if sent during a TLS handshake, if multiple sources
1187 // of intermediate certificates are combined, it's possible that order may 1193 // of intermediate certificates are combined, it's possible that order may
1188 // not be maintained. 1194 // not be maintained.
1189 TEST(X509CertificateTest, VerifyReturnChainProperlyOrdered) { 1195 TEST_F(X509CertificateTest, VerifyReturnChainProperlyOrdered) {
1190 FilePath certs_dir = GetTestCertsDirectory(); 1196 FilePath certs_dir = GetTestCertsDirectory();
1191 CertificateList certs = CreateCertificateListFromFile( 1197 CertificateList certs = CreateCertificateListFromFile(
1192 certs_dir, "x509_verify_results.chain.pem", 1198 certs_dir, "x509_verify_results.chain.pem",
1193 X509Certificate::FORMAT_AUTO); 1199 X509Certificate::FORMAT_AUTO);
1194 ASSERT_EQ(3U, certs.size()); 1200 ASSERT_EQ(3U, certs.size());
1195 1201
1196 // Construct the chain out of order. 1202 // Construct the chain out of order.
1197 X509Certificate::OSCertHandles intermediates; 1203 X509Certificate::OSCertHandles intermediates;
1198 intermediates.push_back(certs[2]->os_cert_handle()); 1204 intermediates.push_back(certs[2]->os_cert_handle());
1199 intermediates.push_back(certs[1]->os_cert_handle()); 1205 intermediates.push_back(certs[1]->os_cert_handle());
1200 1206
1201 TestRootCerts::GetInstance()->Add(certs[2]); 1207 TestRootCerts::GetInstance()->Add(certs[2]);
1202 1208
1203 scoped_refptr<X509Certificate> google_full_chain = 1209 scoped_refptr<X509Certificate> google_full_chain =
1204 X509Certificate::CreateFromHandle(certs[0]->os_cert_handle(), 1210 X509Certificate::CreateFromHandle(certs[0]->os_cert_handle(),
1205 intermediates); 1211 intermediates);
1206 ASSERT_NE(static_cast<X509Certificate*>(NULL), google_full_chain); 1212 ASSERT_NE(static_cast<X509Certificate*>(NULL), google_full_chain);
1207 ASSERT_EQ(2U, google_full_chain->GetIntermediateCertificates().size()); 1213 ASSERT_EQ(2U, google_full_chain->GetIntermediateCertificates().size());
1208 1214
1209 CertVerifyResult verify_result; 1215 CertVerifyResult verify_result;
1210 EXPECT_EQ(static_cast<X509Certificate*>(NULL), verify_result.verified_cert); 1216 EXPECT_EQ(static_cast<X509Certificate*>(NULL), verify_result.verified_cert);
1211 int error = google_full_chain->Verify("127.0.0.1", 0, NULL, &verify_result); 1217 int error = Verify(google_full_chain, "127.0.0.1", 0, NULL, &verify_result);
1212 EXPECT_EQ(OK, error); 1218 EXPECT_EQ(OK, error);
1213 ASSERT_NE(static_cast<X509Certificate*>(NULL), verify_result.verified_cert); 1219 ASSERT_NE(static_cast<X509Certificate*>(NULL), verify_result.verified_cert);
1214 1220
1215 EXPECT_NE(google_full_chain, verify_result.verified_cert); 1221 EXPECT_NE(google_full_chain, verify_result.verified_cert);
1216 EXPECT_TRUE(X509Certificate::IsSameOSCert( 1222 EXPECT_TRUE(X509Certificate::IsSameOSCert(
1217 google_full_chain->os_cert_handle(), 1223 google_full_chain->os_cert_handle(),
1218 verify_result.verified_cert->os_cert_handle())); 1224 verify_result.verified_cert->os_cert_handle()));
1219 const X509Certificate::OSCertHandles& return_intermediates = 1225 const X509Certificate::OSCertHandles& return_intermediates =
1220 verify_result.verified_cert->GetIntermediateCertificates(); 1226 verify_result.verified_cert->GetIntermediateCertificates();
1221 ASSERT_EQ(2U, return_intermediates.size()); 1227 ASSERT_EQ(2U, return_intermediates.size());
1222 EXPECT_TRUE(X509Certificate::IsSameOSCert(return_intermediates[0], 1228 EXPECT_TRUE(X509Certificate::IsSameOSCert(return_intermediates[0],
1223 certs[1]->os_cert_handle())); 1229 certs[1]->os_cert_handle()));
1224 EXPECT_TRUE(X509Certificate::IsSameOSCert(return_intermediates[1], 1230 EXPECT_TRUE(X509Certificate::IsSameOSCert(return_intermediates[1],
1225 certs[2]->os_cert_handle())); 1231 certs[2]->os_cert_handle()));
1226 1232
1227 TestRootCerts::GetInstance()->Clear(); 1233 TestRootCerts::GetInstance()->Clear();
1228 } 1234 }
1229 1235
1230 // Test that Verify() filters out certificates which are not related to 1236 // Test that Verify() filters out certificates which are not related to
1231 // or part of the certificate chain being verified. 1237 // or part of the certificate chain being verified.
1232 TEST(X509CertificateTest, VerifyReturnChainFiltersUnrelatedCerts) { 1238 TEST_F(X509CertificateTest, VerifyReturnChainFiltersUnrelatedCerts) {
1233 FilePath certs_dir = GetTestCertsDirectory(); 1239 FilePath certs_dir = GetTestCertsDirectory();
1234 CertificateList certs = CreateCertificateListFromFile( 1240 CertificateList certs = CreateCertificateListFromFile(
1235 certs_dir, "x509_verify_results.chain.pem", 1241 certs_dir, "x509_verify_results.chain.pem",
1236 X509Certificate::FORMAT_AUTO); 1242 X509Certificate::FORMAT_AUTO);
1237 ASSERT_EQ(3U, certs.size()); 1243 ASSERT_EQ(3U, certs.size());
1238 TestRootCerts::GetInstance()->Add(certs[2]); 1244 TestRootCerts::GetInstance()->Add(certs[2]);
1239 1245
1240 scoped_refptr<X509Certificate> unrelated_dod_certificate = 1246 scoped_refptr<X509Certificate> unrelated_dod_certificate =
1241 ImportCertFromFile(certs_dir, "dod_ca_17_cert.der"); 1247 ImportCertFromFile(certs_dir, "dod_ca_17_cert.der");
1242 scoped_refptr<X509Certificate> unrelated_dod_certificate2 = 1248 scoped_refptr<X509Certificate> unrelated_dod_certificate2 =
1243 ImportCertFromFile(certs_dir, "dod_root_ca_2_cert.der"); 1249 ImportCertFromFile(certs_dir, "dod_root_ca_2_cert.der");
1244 ASSERT_NE(static_cast<X509Certificate*>(NULL), unrelated_dod_certificate); 1250 ASSERT_NE(static_cast<X509Certificate*>(NULL), unrelated_dod_certificate);
1245 ASSERT_NE(static_cast<X509Certificate*>(NULL), unrelated_dod_certificate2); 1251 ASSERT_NE(static_cast<X509Certificate*>(NULL), unrelated_dod_certificate2);
1246 1252
1247 // Interject unrelated certificates into the list of intermediates. 1253 // Interject unrelated certificates into the list of intermediates.
1248 X509Certificate::OSCertHandles intermediates; 1254 X509Certificate::OSCertHandles intermediates;
1249 intermediates.push_back(unrelated_dod_certificate->os_cert_handle()); 1255 intermediates.push_back(unrelated_dod_certificate->os_cert_handle());
1250 intermediates.push_back(certs[1]->os_cert_handle()); 1256 intermediates.push_back(certs[1]->os_cert_handle());
1251 intermediates.push_back(unrelated_dod_certificate2->os_cert_handle()); 1257 intermediates.push_back(unrelated_dod_certificate2->os_cert_handle());
1252 intermediates.push_back(certs[2]->os_cert_handle()); 1258 intermediates.push_back(certs[2]->os_cert_handle());
1253 1259
1254 scoped_refptr<X509Certificate> google_full_chain = 1260 scoped_refptr<X509Certificate> google_full_chain =
1255 X509Certificate::CreateFromHandle(certs[0]->os_cert_handle(), 1261 X509Certificate::CreateFromHandle(certs[0]->os_cert_handle(),
1256 intermediates); 1262 intermediates);
1257 ASSERT_NE(static_cast<X509Certificate*>(NULL), google_full_chain); 1263 ASSERT_NE(static_cast<X509Certificate*>(NULL), google_full_chain);
1258 ASSERT_EQ(4U, google_full_chain->GetIntermediateCertificates().size()); 1264 ASSERT_EQ(4U, google_full_chain->GetIntermediateCertificates().size());
1259 1265
1260 CertVerifyResult verify_result; 1266 CertVerifyResult verify_result;
1261 EXPECT_EQ(static_cast<X509Certificate*>(NULL), verify_result.verified_cert); 1267 EXPECT_EQ(static_cast<X509Certificate*>(NULL), verify_result.verified_cert);
1262 int error = google_full_chain->Verify("127.0.0.1", 0, NULL, &verify_result); 1268 int error = Verify(google_full_chain, "127.0.0.1", 0, NULL, &verify_result);
1263 EXPECT_EQ(OK, error); 1269 EXPECT_EQ(OK, error);
1264 ASSERT_NE(static_cast<X509Certificate*>(NULL), verify_result.verified_cert); 1270 ASSERT_NE(static_cast<X509Certificate*>(NULL), verify_result.verified_cert);
1265 1271
1266 EXPECT_NE(google_full_chain, verify_result.verified_cert); 1272 EXPECT_NE(google_full_chain, verify_result.verified_cert);
1267 EXPECT_TRUE(X509Certificate::IsSameOSCert( 1273 EXPECT_TRUE(X509Certificate::IsSameOSCert(
1268 google_full_chain->os_cert_handle(), 1274 google_full_chain->os_cert_handle(),
1269 verify_result.verified_cert->os_cert_handle())); 1275 verify_result.verified_cert->os_cert_handle()));
1270 const X509Certificate::OSCertHandles& return_intermediates = 1276 const X509Certificate::OSCertHandles& return_intermediates =
1271 verify_result.verified_cert->GetIntermediateCertificates(); 1277 verify_result.verified_cert->GetIntermediateCertificates();
1272 ASSERT_EQ(2U, return_intermediates.size()); 1278 ASSERT_EQ(2U, return_intermediates.size());
1273 EXPECT_TRUE(X509Certificate::IsSameOSCert(return_intermediates[0], 1279 EXPECT_TRUE(X509Certificate::IsSameOSCert(return_intermediates[0],
1274 certs[1]->os_cert_handle())); 1280 certs[1]->os_cert_handle()));
1275 EXPECT_TRUE(X509Certificate::IsSameOSCert(return_intermediates[1], 1281 EXPECT_TRUE(X509Certificate::IsSameOSCert(return_intermediates[1],
1276 certs[2]->os_cert_handle())); 1282 certs[2]->os_cert_handle()));
1277 TestRootCerts::GetInstance()->Clear(); 1283 TestRootCerts::GetInstance()->Clear();
1278 } 1284 }
1279 1285
1280 #if defined(OS_MACOSX) 1286 #if defined(OS_MACOSX)
1281 TEST(X509CertificateTest, IsIssuedBy) { 1287 TEST_F(X509CertificateTest, IsIssuedBy) {
1282 FilePath certs_dir = GetTestCertsDirectory(); 1288 FilePath certs_dir = GetTestCertsDirectory();
1283 1289
1284 // Test a client certificate from MIT. 1290 // Test a client certificate from MIT.
1285 scoped_refptr<X509Certificate> mit_davidben_cert( 1291 scoped_refptr<X509Certificate> mit_davidben_cert(
1286 ImportCertFromFile(certs_dir, "mit.davidben.der")); 1292 ImportCertFromFile(certs_dir, "mit.davidben.der"));
1287 ASSERT_NE(static_cast<X509Certificate*>(NULL), mit_davidben_cert); 1293 ASSERT_NE(static_cast<X509Certificate*>(NULL), mit_davidben_cert);
1288 1294
1289 CertPrincipal mit_issuer; 1295 CertPrincipal mit_issuer;
1290 mit_issuer.country_name = "US"; 1296 mit_issuer.country_name = "US";
1291 mit_issuer.state_or_province_name = "Massachusetts"; 1297 mit_issuer.state_or_province_name = "Massachusetts";
(...skipping 28 matching lines...) Expand all
1320 EXPECT_TRUE(foaf_me_chromium_test_cert->IsIssuedBy(both_issuers)); 1326 EXPECT_TRUE(foaf_me_chromium_test_cert->IsIssuedBy(both_issuers));
1321 EXPECT_TRUE(mit_davidben_cert->IsIssuedBy(both_issuers)); 1327 EXPECT_TRUE(mit_davidben_cert->IsIssuedBy(both_issuers));
1322 EXPECT_FALSE(foaf_me_chromium_test_cert->IsIssuedBy(mit_issuers)); 1328 EXPECT_FALSE(foaf_me_chromium_test_cert->IsIssuedBy(mit_issuers));
1323 EXPECT_FALSE(mit_davidben_cert->IsIssuedBy(foaf_issuers)); 1329 EXPECT_FALSE(mit_davidben_cert->IsIssuedBy(foaf_issuers));
1324 } 1330 }
1325 #endif // defined(OS_MACOSX) 1331 #endif // defined(OS_MACOSX)
1326 1332
1327 #if defined(USE_NSS) || defined(OS_WIN) || defined(OS_MACOSX) 1333 #if defined(USE_NSS) || defined(OS_WIN) || defined(OS_MACOSX)
1328 // This test creates a self-signed cert from a private key and then verify the 1334 // This test creates a self-signed cert from a private key and then verify the
1329 // content of the certificate. 1335 // content of the certificate.
1330 TEST(X509CertificateTest, CreateSelfSigned) { 1336 TEST_F(X509CertificateTest, CreateSelfSigned) {
1331 scoped_ptr<crypto::RSAPrivateKey> private_key( 1337 scoped_ptr<crypto::RSAPrivateKey> private_key(
1332 crypto::RSAPrivateKey::Create(1024)); 1338 crypto::RSAPrivateKey::Create(1024));
1333 scoped_refptr<X509Certificate> cert = 1339 scoped_refptr<X509Certificate> cert =
1334 X509Certificate::CreateSelfSigned( 1340 X509Certificate::CreateSelfSigned(
1335 private_key.get(), "CN=subject", 1, base::TimeDelta::FromDays(1)); 1341 private_key.get(), "CN=subject", 1, base::TimeDelta::FromDays(1));
1336 1342
1337 EXPECT_EQ("subject", cert->subject().GetDisplayName()); 1343 EXPECT_EQ("subject", cert->subject().GetDisplayName());
1338 EXPECT_FALSE(cert->HasExpired()); 1344 EXPECT_FALSE(cert->HasExpired());
1339 1345
1340 const uint8 private_key_info[] = { 1346 const uint8 private_key_info[] = {
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
1427 private_key.reset(crypto::RSAPrivateKey::CreateFromPrivateKeyInfo(input)); 1433 private_key.reset(crypto::RSAPrivateKey::CreateFromPrivateKeyInfo(input));
1428 ASSERT_TRUE(private_key.get()); 1434 ASSERT_TRUE(private_key.get());
1429 1435
1430 cert = X509Certificate::CreateSelfSigned( 1436 cert = X509Certificate::CreateSelfSigned(
1431 private_key.get(), "CN=subject", 1, base::TimeDelta::FromDays(1)); 1437 private_key.get(), "CN=subject", 1, base::TimeDelta::FromDays(1));
1432 1438
1433 EXPECT_EQ("subject", cert->subject().GetDisplayName()); 1439 EXPECT_EQ("subject", cert->subject().GetDisplayName());
1434 EXPECT_FALSE(cert->HasExpired()); 1440 EXPECT_FALSE(cert->HasExpired());
1435 } 1441 }
1436 1442
1437 TEST(X509CertificateTest, GetDEREncoded) { 1443 TEST_F(X509CertificateTest, GetDEREncoded) {
1438 scoped_ptr<crypto::RSAPrivateKey> private_key( 1444 scoped_ptr<crypto::RSAPrivateKey> private_key(
1439 crypto::RSAPrivateKey::Create(1024)); 1445 crypto::RSAPrivateKey::Create(1024));
1440 scoped_refptr<X509Certificate> cert = 1446 scoped_refptr<X509Certificate> cert =
1441 X509Certificate::CreateSelfSigned( 1447 X509Certificate::CreateSelfSigned(
1442 private_key.get(), "CN=subject", 0, base::TimeDelta::FromDays(1)); 1448 private_key.get(), "CN=subject", 0, base::TimeDelta::FromDays(1));
1443 1449
1444 std::string der_cert; 1450 std::string der_cert;
1445 EXPECT_TRUE(X509Certificate::GetDEREncoded(cert->os_cert_handle(), 1451 EXPECT_TRUE(X509Certificate::GetDEREncoded(cert->os_cert_handle(),
1446 &der_cert)); 1452 &der_cert));
1447 EXPECT_FALSE(der_cert.empty()); 1453 EXPECT_FALSE(der_cert.empty());
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
1492 0x31, 0x2c, 0x22, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x53, 0x50, 0x4b, 1498 0x31, 0x2c, 0x22, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x53, 0x50, 0x4b,
1493 0x49, 0x73, 0x22, 0x3a, 0x5b, 0x5d, 0x7d, 0xe9, 0x7e, 0x8c, 0xc5, 0x1e, 0xd7, 1499 0x49, 0x73, 0x22, 0x3a, 0x5b, 0x5d, 0x7d, 0xe9, 0x7e, 0x8c, 0xc5, 0x1e, 0xd7,
1494 0xa4, 0xc4, 0x0a, 0xc4, 0x80, 0x3d, 0x3e, 0x3e, 0xbb, 0xeb, 0xcb, 0xed, 0x52, 1500 0xa4, 0xc4, 0x0a, 0xc4, 0x80, 0x3d, 0x3e, 0x3e, 0xbb, 0xeb, 0xcb, 0xed, 0x52,
1495 0x49, 0x33, 0x1f, 0x2c, 0xc0, 0xa2, 0x6a, 0x0e, 0x84, 0xa5, 0x27, 0xce, 0xc5, 1501 0x49, 0x33, 0x1f, 0x2c, 0xc0, 0xa2, 0x6a, 0x0e, 0x84, 0xa5, 0x27, 0xce, 0xc5,
1496 0x01, 0x00, 0x00, 0x00, 0x10, 0x4f, 0x9d, 0x96, 0xd9, 0x66, 0xb0, 0x99, 0x2b, 1502 0x01, 0x00, 0x00, 0x00, 0x10, 0x4f, 0x9d, 0x96, 0xd9, 0x66, 0xb0, 0x99, 0x2b,
1497 0x54, 0xc2, 0x95, 0x7c, 0xb4, 0x15, 0x7d, 0x4d, 1503 0x54, 0xc2, 0x95, 0x7c, 0xb4, 0x15, 0x7d, 0x4d,
1498 }; 1504 };
1499 1505
1500 // Test that CRLSets are effective in making a certificate appear to be 1506 // Test that CRLSets are effective in making a certificate appear to be
1501 // revoked. 1507 // revoked.
1502 TEST(X509CertificateTest, CRLSet) { 1508 TEST_F(X509CertificateTest, CRLSet) {
1503 CertificateList certs = CreateCertificateListFromFile( 1509 CertificateList certs = CreateCertificateListFromFile(
1504 GetTestCertsDirectory(), 1510 GetTestCertsDirectory(),
1505 "googlenew.chain.pem", 1511 "googlenew.chain.pem",
1506 X509Certificate::FORMAT_PEM_CERT_SEQUENCE); 1512 X509Certificate::FORMAT_PEM_CERT_SEQUENCE);
1507 1513
1508 X509Certificate::OSCertHandles intermediates; 1514 X509Certificate::OSCertHandles intermediates;
1509 intermediates.push_back(certs[1]->os_cert_handle()); 1515 intermediates.push_back(certs[1]->os_cert_handle());
1510 1516
1511 scoped_refptr<X509Certificate> google_full_chain = 1517 scoped_refptr<X509Certificate> google_full_chain =
1512 X509Certificate::CreateFromHandle(certs[0]->os_cert_handle(), 1518 X509Certificate::CreateFromHandle(certs[0]->os_cert_handle(),
1513 intermediates); 1519 intermediates);
1514 1520
1515 CertVerifyResult verify_result; 1521 CertVerifyResult verify_result;
1516 int error = google_full_chain->Verify( 1522 int error = Verify(google_full_chain, "www.google.com", 0, NULL,
1517 "www.google.com", 0, NULL, &verify_result); 1523 &verify_result);
1518 EXPECT_EQ(OK, error); 1524 EXPECT_EQ(OK, error);
1519 1525
1520 // First test blocking by SPKI. 1526 // First test blocking by SPKI.
1521 base::StringPiece crl_set_bytes( 1527 base::StringPiece crl_set_bytes(
1522 reinterpret_cast<const char*>(kCRLSetThawteSPKIBlocked), 1528 reinterpret_cast<const char*>(kCRLSetThawteSPKIBlocked),
1523 sizeof(kCRLSetThawteSPKIBlocked)); 1529 sizeof(kCRLSetThawteSPKIBlocked));
1524 scoped_refptr<CRLSet> crl_set; 1530 scoped_refptr<CRLSet> crl_set;
1525 ASSERT_TRUE(CRLSet::Parse(crl_set_bytes, &crl_set)); 1531 ASSERT_TRUE(CRLSet::Parse(crl_set_bytes, &crl_set));
1526 1532
1527 error = google_full_chain->Verify( 1533 error = Verify(google_full_chain, "www.google.com", 0, crl_set.get(),
1528 "www.google.com", 0, crl_set.get(), &verify_result); 1534 &verify_result);
1529 EXPECT_EQ(ERR_CERT_REVOKED, error); 1535 EXPECT_EQ(ERR_CERT_REVOKED, error);
1530 1536
1531 // Second, test revocation by serial number of a cert directly under the 1537 // Second, test revocation by serial number of a cert directly under the
1532 // root. 1538 // root.
1533 crl_set_bytes = base::StringPiece( 1539 crl_set_bytes = base::StringPiece(
1534 reinterpret_cast<const char*>(kCRLSetThawteSerialBlocked), 1540 reinterpret_cast<const char*>(kCRLSetThawteSerialBlocked),
1535 sizeof(kCRLSetThawteSerialBlocked)); 1541 sizeof(kCRLSetThawteSerialBlocked));
1536 ASSERT_TRUE(CRLSet::Parse(crl_set_bytes, &crl_set)); 1542 ASSERT_TRUE(CRLSet::Parse(crl_set_bytes, &crl_set));
1537 1543
1538 error = google_full_chain->Verify( 1544 error = Verify(google_full_chain, "www.google.com", 0, crl_set.get(),
1539 "www.google.com", 0, crl_set.get(), &verify_result); 1545 &verify_result);
1540 EXPECT_EQ(ERR_CERT_REVOKED, error); 1546 EXPECT_EQ(ERR_CERT_REVOKED, error);
1541 1547
1542 // Lastly, test revocation by serial number of a certificate not under the 1548 // Lastly, test revocation by serial number of a certificate not under the
1543 // root. 1549 // root.
1544 crl_set_bytes = base::StringPiece( 1550 crl_set_bytes = base::StringPiece(
1545 reinterpret_cast<const char*>(kCRLSetGoogleSerialBlocked), 1551 reinterpret_cast<const char*>(kCRLSetGoogleSerialBlocked),
1546 sizeof(kCRLSetGoogleSerialBlocked)); 1552 sizeof(kCRLSetGoogleSerialBlocked));
1547 ASSERT_TRUE(CRLSet::Parse(crl_set_bytes, &crl_set)); 1553 ASSERT_TRUE(CRLSet::Parse(crl_set_bytes, &crl_set));
1548 1554
1549 error = google_full_chain->Verify( 1555 error = Verify(google_full_chain, "www.google.com", 0, crl_set.get(),
1550 "www.google.com", 0, crl_set.get(), &verify_result); 1556 &verify_result);
1551 EXPECT_EQ(ERR_CERT_REVOKED, error); 1557 EXPECT_EQ(ERR_CERT_REVOKED, error);
1552 } 1558 }
1553 #endif 1559 #endif
1554 1560
1555 class X509CertificateParseTest 1561 class X509CertificateParseTest
1556 : public testing::TestWithParam<CertificateFormatTestData> { 1562 : public testing::TestWithParam<CertificateFormatTestData> {
1557 public: 1563 public:
1558 virtual ~X509CertificateParseTest() {} 1564 virtual ~X509CertificateParseTest() {}
1559 virtual void SetUp() { 1565 virtual void SetUp() {
1560 test_data_ = GetParam(); 1566 test_data_ = GetParam();
(...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after
1828 // attempt to print out the first twenty bytes of the object, which depending 1834 // attempt to print out the first twenty bytes of the object, which depending
1829 // on platform and alignment, may result in an invalid read. 1835 // on platform and alignment, may result in an invalid read.
1830 void PrintTo(const WeakDigestTestData& data, std::ostream* os) { 1836 void PrintTo(const WeakDigestTestData& data, std::ostream* os) {
1831 *os << "root: " 1837 *os << "root: "
1832 << (data.root_cert_filename ? data.root_cert_filename : "none") 1838 << (data.root_cert_filename ? data.root_cert_filename : "none")
1833 << "; intermediate: " << data.intermediate_cert_filename 1839 << "; intermediate: " << data.intermediate_cert_filename
1834 << "; end-entity: " << data.ee_cert_filename; 1840 << "; end-entity: " << data.ee_cert_filename;
1835 } 1841 }
1836 1842
1837 class X509CertificateWeakDigestTest 1843 class X509CertificateWeakDigestTest
1838 : public testing::TestWithParam<WeakDigestTestData> { 1844 : public X509CertificateTest,
1845 public testing::WithParamInterface<WeakDigestTestData> {
1839 public: 1846 public:
1840 X509CertificateWeakDigestTest() {} 1847 X509CertificateWeakDigestTest() {}
1841 1848
1842 virtual void TearDown() { 1849 virtual void TearDown() {
1843 TestRootCerts::GetInstance()->Clear(); 1850 TestRootCerts::GetInstance()->Clear();
1844 } 1851 }
1845 }; 1852 };
1846 1853
1847 TEST_P(X509CertificateWeakDigestTest, Verify) { 1854 TEST_P(X509CertificateWeakDigestTest, Verify) {
1848 WeakDigestTestData data = GetParam(); 1855 WeakDigestTestData data = GetParam();
(...skipping 16 matching lines...) Expand all
1865 X509Certificate::OSCertHandles intermediates; 1872 X509Certificate::OSCertHandles intermediates;
1866 intermediates.push_back(intermediate_cert->os_cert_handle()); 1873 intermediates.push_back(intermediate_cert->os_cert_handle());
1867 1874
1868 scoped_refptr<X509Certificate> ee_chain = 1875 scoped_refptr<X509Certificate> ee_chain =
1869 X509Certificate::CreateFromHandle(ee_cert->os_cert_handle(), 1876 X509Certificate::CreateFromHandle(ee_cert->os_cert_handle(),
1870 intermediates); 1877 intermediates);
1871 ASSERT_NE(static_cast<X509Certificate*>(NULL), ee_chain); 1878 ASSERT_NE(static_cast<X509Certificate*>(NULL), ee_chain);
1872 1879
1873 int flags = 0; 1880 int flags = 0;
1874 CertVerifyResult verify_result; 1881 CertVerifyResult verify_result;
1875 int rv = ee_chain->Verify("127.0.0.1", flags, NULL, &verify_result); 1882 int rv = Verify(ee_chain, "127.0.0.1", flags, NULL, &verify_result);
1876 EXPECT_EQ(data.expected_has_md5, verify_result.has_md5); 1883 EXPECT_EQ(data.expected_has_md5, verify_result.has_md5);
1877 EXPECT_EQ(data.expected_has_md4, verify_result.has_md4); 1884 EXPECT_EQ(data.expected_has_md4, verify_result.has_md4);
1878 EXPECT_EQ(data.expected_has_md2, verify_result.has_md2); 1885 EXPECT_EQ(data.expected_has_md2, verify_result.has_md2);
1879 EXPECT_EQ(data.expected_has_md5_ca, verify_result.has_md5_ca); 1886 EXPECT_EQ(data.expected_has_md5_ca, verify_result.has_md5_ca);
1880 EXPECT_EQ(data.expected_has_md2_ca, verify_result.has_md2_ca); 1887 EXPECT_EQ(data.expected_has_md2_ca, verify_result.has_md2_ca);
1881 1888
1882 // Ensure that MD4 and MD2 are tagged as invalid. 1889 // Ensure that MD4 and MD2 are tagged as invalid.
1883 if (data.expected_has_md4 || data.expected_has_md2) { 1890 if (data.expected_has_md4 || data.expected_has_md2) {
1884 EXPECT_EQ(CERT_STATUS_INVALID, 1891 EXPECT_EQ(CERT_STATUS_INVALID,
1885 verify_result.cert_status & CERT_STATUS_INVALID); 1892 verify_result.cert_status & CERT_STATUS_INVALID);
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
2039 #define MAYBE_VerifyMixed DISABLED_VerifyMixed 2046 #define MAYBE_VerifyMixed DISABLED_VerifyMixed
2040 #else 2047 #else
2041 #define MAYBE_VerifyMixed VerifyMixed 2048 #define MAYBE_VerifyMixed VerifyMixed
2042 #endif 2049 #endif
2043 WRAPPED_INSTANTIATE_TEST_CASE_P( 2050 WRAPPED_INSTANTIATE_TEST_CASE_P(
2044 MAYBE_VerifyMixed, 2051 MAYBE_VerifyMixed,
2045 X509CertificateWeakDigestTest, 2052 X509CertificateWeakDigestTest,
2046 testing::ValuesIn(kVerifyMixedTestData)); 2053 testing::ValuesIn(kVerifyMixedTestData));
2047 2054
2048 } // namespace net 2055 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698