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

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

Powered by Google App Engine
This is Rietveld 408576698