OLD | NEW |
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 "net/cert/multi_threaded_cert_verifier.h" | 5 #include "net/cert/multi_threaded_cert_verifier.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/files/file_path.h" | 8 #include "base/files/file_path.h" |
9 #include "base/format_macros.h" | 9 #include "base/format_macros.h" |
10 #include "base/strings/stringprintf.h" | 10 #include "base/strings/stringprintf.h" |
(...skipping 21 matching lines...) Expand all Loading... |
32 } | 32 } |
33 | 33 |
34 class MockCertVerifyProc : public CertVerifyProc { | 34 class MockCertVerifyProc : public CertVerifyProc { |
35 public: | 35 public: |
36 MockCertVerifyProc() {} | 36 MockCertVerifyProc() {} |
37 | 37 |
38 private: | 38 private: |
39 virtual ~MockCertVerifyProc() {} | 39 virtual ~MockCertVerifyProc() {} |
40 | 40 |
41 // CertVerifyProc implementation | 41 // CertVerifyProc implementation |
42 virtual bool SupportsAdditionalTrustAnchors() const OVERRIDE { | 42 virtual bool SupportsAdditionalTrustAnchors() const OVERRIDE { return false; } |
43 return false; | |
44 } | |
45 | 43 |
46 virtual int VerifyInternal(X509Certificate* cert, | 44 virtual int VerifyInternal(X509Certificate* cert, |
47 const std::string& hostname, | 45 const std::string& hostname, |
48 int flags, | 46 int flags, |
49 CRLSet* crl_set, | 47 CRLSet* crl_set, |
50 const CertificateList& additional_trust_anchors, | 48 const CertificateList& additional_trust_anchors, |
51 CertVerifyResult* verify_result) OVERRIDE { | 49 CertVerifyResult* verify_result) OVERRIDE { |
52 verify_result->Reset(); | 50 verify_result->Reset(); |
53 verify_result->verified_cert = cert; | 51 verify_result->verified_cert = cert; |
54 verify_result->cert_status = CERT_STATUS_COMMON_NAME_INVALID; | 52 verify_result->cert_status = CERT_STATUS_COMMON_NAME_INVALID; |
(...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
326 // Keys to test | 324 // Keys to test |
327 MultiThreadedCertVerifier::RequestParams key1; | 325 MultiThreadedCertVerifier::RequestParams key1; |
328 MultiThreadedCertVerifier::RequestParams key2; | 326 MultiThreadedCertVerifier::RequestParams key2; |
329 | 327 |
330 // Expectation: | 328 // Expectation: |
331 // -1 means key1 is less than key2 | 329 // -1 means key1 is less than key2 |
332 // 0 means key1 equals key2 | 330 // 0 means key1 equals key2 |
333 // 1 means key1 is greater than key2 | 331 // 1 means key1 is greater than key2 |
334 int expected_result; | 332 int expected_result; |
335 } tests[] = { | 333 } tests[] = { |
336 { // Test for basic equivalence. | 334 {// Test for basic equivalence. |
337 MultiThreadedCertVerifier::RequestParams(a_key, a_key, "www.example.test", | 335 MultiThreadedCertVerifier::RequestParams( |
338 0, test_list), | 336 a_key, a_key, "www.example.test", 0, test_list), |
339 MultiThreadedCertVerifier::RequestParams(a_key, a_key, "www.example.test", | 337 MultiThreadedCertVerifier::RequestParams( |
340 0, test_list), | 338 a_key, a_key, "www.example.test", 0, test_list), |
341 0, | 339 0, |
342 }, | 340 }, |
343 { // Test that different certificates but with the same CA and for | 341 {// Test that different certificates but with the same CA and for |
344 // the same host are different validation keys. | 342 // the same host are different validation keys. |
345 MultiThreadedCertVerifier::RequestParams(a_key, a_key, "www.example.test", | 343 MultiThreadedCertVerifier::RequestParams( |
346 0, test_list), | 344 a_key, a_key, "www.example.test", 0, test_list), |
347 MultiThreadedCertVerifier::RequestParams(z_key, a_key, "www.example.test", | 345 MultiThreadedCertVerifier::RequestParams( |
348 0, test_list), | 346 z_key, a_key, "www.example.test", 0, test_list), |
349 -1, | 347 -1, |
350 }, | 348 }, |
351 { // Test that the same EE certificate for the same host, but with | 349 {// Test that the same EE certificate for the same host, but with |
352 // different chains are different validation keys. | 350 // different chains are different validation keys. |
353 MultiThreadedCertVerifier::RequestParams(a_key, z_key, "www.example.test", | 351 MultiThreadedCertVerifier::RequestParams( |
354 0, test_list), | 352 a_key, z_key, "www.example.test", 0, test_list), |
355 MultiThreadedCertVerifier::RequestParams(a_key, a_key, "www.example.test", | 353 MultiThreadedCertVerifier::RequestParams( |
356 0, test_list), | 354 a_key, a_key, "www.example.test", 0, test_list), |
357 1, | 355 1, |
358 }, | 356 }, |
359 { // The same certificate, with the same chain, but for different | 357 {// The same certificate, with the same chain, but for different |
360 // hosts are different validation keys. | 358 // hosts are different validation keys. |
361 MultiThreadedCertVerifier::RequestParams(a_key, a_key, | 359 MultiThreadedCertVerifier::RequestParams( |
362 "www1.example.test", 0, | 360 a_key, a_key, "www1.example.test", 0, test_list), |
363 test_list), | 361 MultiThreadedCertVerifier::RequestParams( |
364 MultiThreadedCertVerifier::RequestParams(a_key, a_key, | 362 a_key, a_key, "www2.example.test", 0, test_list), |
365 "www2.example.test", 0, | 363 -1, |
366 test_list), | 364 }, |
367 -1, | 365 {// The same certificate, chain, and host, but with different flags |
368 }, | 366 // are different validation keys. |
369 { // The same certificate, chain, and host, but with different flags | 367 MultiThreadedCertVerifier::RequestParams(a_key, |
370 // are different validation keys. | 368 a_key, |
371 MultiThreadedCertVerifier::RequestParams(a_key, a_key, "www.example.test", | 369 "www.example.test", |
372 CertVerifier::VERIFY_EV_CERT, | 370 CertVerifier::VERIFY_EV_CERT, |
373 test_list), | 371 test_list), |
374 MultiThreadedCertVerifier::RequestParams(a_key, a_key, "www.example.test", | 372 MultiThreadedCertVerifier::RequestParams( |
375 0, test_list), | 373 a_key, a_key, "www.example.test", 0, test_list), |
376 1, | 374 1, |
377 }, | 375 }, |
378 { // Different additional_trust_anchors. | 376 {// Different additional_trust_anchors. |
379 MultiThreadedCertVerifier::RequestParams(a_key, a_key, "www.example.test", | 377 MultiThreadedCertVerifier::RequestParams( |
380 0, empty_list), | 378 a_key, a_key, "www.example.test", 0, empty_list), |
381 MultiThreadedCertVerifier::RequestParams(a_key, a_key, "www.example.test", | 379 MultiThreadedCertVerifier::RequestParams( |
382 0, test_list), | 380 a_key, a_key, "www.example.test", 0, test_list), |
383 -1, | 381 -1, |
384 }, | 382 }, |
385 }; | 383 }; |
386 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { | 384 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { |
387 SCOPED_TRACE(base::StringPrintf("Test[%" PRIuS "]", i)); | 385 SCOPED_TRACE(base::StringPrintf("Test[%" PRIuS "]", i)); |
388 | 386 |
389 const MultiThreadedCertVerifier::RequestParams& key1 = tests[i].key1; | 387 const MultiThreadedCertVerifier::RequestParams& key1 = tests[i].key1; |
390 const MultiThreadedCertVerifier::RequestParams& key2 = tests[i].key2; | 388 const MultiThreadedCertVerifier::RequestParams& key2 = tests[i].key2; |
391 | 389 |
392 switch (tests[i].expected_result) { | 390 switch (tests[i].expected_result) { |
393 case -1: | 391 case -1: |
394 EXPECT_TRUE(key1 < key2); | 392 EXPECT_TRUE(key1 < key2); |
395 EXPECT_FALSE(key2 < key1); | 393 EXPECT_FALSE(key2 < key1); |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
476 Mock::VerifyAndClearExpectations(&trust_provider); | 474 Mock::VerifyAndClearExpectations(&trust_provider); |
477 ASSERT_EQ(ERR_IO_PENDING, error); | 475 ASSERT_EQ(ERR_IO_PENDING, error); |
478 EXPECT_TRUE(request_handle); | 476 EXPECT_TRUE(request_handle); |
479 error = callback.WaitForResult(); | 477 error = callback.WaitForResult(); |
480 EXPECT_EQ(ERR_CERT_COMMON_NAME_INVALID, error); | 478 EXPECT_EQ(ERR_CERT_COMMON_NAME_INVALID, error); |
481 ASSERT_EQ(3u, verifier_.requests()); | 479 ASSERT_EQ(3u, verifier_.requests()); |
482 ASSERT_EQ(1u, verifier_.cache_hits()); | 480 ASSERT_EQ(1u, verifier_.cache_hits()); |
483 } | 481 } |
484 | 482 |
485 } // namespace net | 483 } // namespace net |
OLD | NEW |