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

Side by Side Diff: net/cert/cert_verify_proc_unittest.cc

Issue 2672083003: Re-enable CertVerifyProcInternalTest.PublicKeyHashes. (Closed)
Patch Set: switch to base64 Created 3 years, 10 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
« no previous file with comments | « no previous file | net/cert/cert_verify_result.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "net/cert/cert_verify_proc.h" 5 #include "net/cert/cert_verify_proc.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/callback_helpers.h" 9 #include "base/callback_helpers.h"
10 #include "base/files/file_path.h" 10 #include "base/files/file_path.h"
(...skipping 714 matching lines...) Expand 10 before | Expand all | Expand 10 after
725 725
726 X509Certificate::OSCertHandles intermediates; 726 X509Certificate::OSCertHandles intermediates;
727 intermediates.push_back(certs[1]->os_cert_handle()); 727 intermediates.push_back(certs[1]->os_cert_handle());
728 728
729 scoped_refptr<X509Certificate> cert_chain = X509Certificate::CreateFromHandle( 729 scoped_refptr<X509Certificate> cert_chain = X509Certificate::CreateFromHandle(
730 certs[0]->os_cert_handle(), intermediates); 730 certs[0]->os_cert_handle(), intermediates);
731 731
732 int flags = 0; 732 int flags = 0;
733 CertVerifyResult verify_result; 733 CertVerifyResult verify_result;
734 // This will blow up, May 9th, 2016. Sorry! Please disable and file a bug 734 // This will blow up, May 9th, 2016. Sorry! Please disable and file a bug
735 // against agl. See also PublicKeyHashes. 735 // against agl.
736 int error = Verify(cert_chain.get(), "twitter.com", flags, NULL, 736 int error = Verify(cert_chain.get(), "twitter.com", flags, NULL,
737 CertificateList(), &verify_result); 737 CertificateList(), &verify_result);
738 EXPECT_THAT(error, IsOk()); 738 EXPECT_THAT(error, IsOk());
739 EXPECT_TRUE(verify_result.is_issued_by_known_root); 739 EXPECT_TRUE(verify_result.is_issued_by_known_root);
740 } 740 }
741 741
742 // TODO(crbug.com/610546): Fix and re-enable this test. 742 // This tests that on successful certificate verification,
743 TEST_P(CertVerifyProcInternalTest, DISABLED_PublicKeyHashes) { 743 // CertVerifyResult::public_key_hashes is filled with a SHA1 and SHA256 hash
744 // for each of the certificates in the chain.
745 TEST_P(CertVerifyProcInternalTest, PublicKeyHashes) {
744 if (!SupportsReturningVerifiedChain()) { 746 if (!SupportsReturningVerifiedChain()) {
745 LOG(INFO) << "Skipping this test in this platform."; 747 LOG(INFO) << "Skipping this test in this platform.";
746 return; 748 return;
747 } 749 }
748 750
749 base::FilePath certs_dir = GetTestCertsDirectory(); 751 base::FilePath certs_dir = GetTestCertsDirectory();
750 CertificateList certs = CreateCertificateListFromFile( 752 CertificateList certs = CreateCertificateListFromFile(
751 certs_dir, "twitter-chain.pem", X509Certificate::FORMAT_AUTO); 753 certs_dir, "x509_verify_results.chain.pem", X509Certificate::FORMAT_AUTO);
752 ASSERT_EQ(3U, certs.size()); 754 ASSERT_EQ(3U, certs.size());
753 755
754 X509Certificate::OSCertHandles intermediates; 756 X509Certificate::OSCertHandles intermediates;
755 intermediates.push_back(certs[1]->os_cert_handle()); 757 intermediates.push_back(certs[1]->os_cert_handle());
758 intermediates.push_back(certs[2]->os_cert_handle());
756 759
760 ScopedTestRoot scoped_root(certs[2].get());
757 scoped_refptr<X509Certificate> cert_chain = X509Certificate::CreateFromHandle( 761 scoped_refptr<X509Certificate> cert_chain = X509Certificate::CreateFromHandle(
758 certs[0]->os_cert_handle(), intermediates); 762 certs[0]->os_cert_handle(), intermediates);
763 ASSERT_TRUE(cert_chain);
764 ASSERT_EQ(2U, cert_chain->GetIntermediateCertificates().size());
765
759 int flags = 0; 766 int flags = 0;
760 CertVerifyResult verify_result; 767 CertVerifyResult verify_result;
761 768 int error = Verify(cert_chain.get(), "127.0.0.1", flags, NULL,
762 // This will blow up, May 9th, 2016. Sorry! Please disable and file a bug
763 // against agl. See also TestKnownRoot.
764 int error = Verify(cert_chain.get(), "twitter.com", flags, NULL,
765 CertificateList(), &verify_result); 769 CertificateList(), &verify_result);
766 EXPECT_THAT(error, IsOk()); 770 EXPECT_THAT(error, IsOk());
767 ASSERT_LE(3U, verify_result.public_key_hashes.size());
768 771
769 HashValueVector sha1_hashes; 772 // There are 2 hashes each of the 3 certificates in the verified chain.
770 for (size_t i = 0; i < verify_result.public_key_hashes.size(); ++i) { 773 EXPECT_EQ(6u, verify_result.public_key_hashes.size());
771 if (verify_result.public_key_hashes[i].tag != HASH_VALUE_SHA1)
772 continue;
773 sha1_hashes.push_back(verify_result.public_key_hashes[i]);
774 }
775 ASSERT_LE(3u, sha1_hashes.size());
776 774
777 for (size_t i = 0; i < 3; ++i) { 775 // Convert |public_key_hashes| to strings for ease of comparison.
778 EXPECT_EQ(HexEncode(kTwitterSPKIs[i], base::kSHA1Length), 776 std::vector<std::string> public_key_hash_strings;
779 HexEncode(sha1_hashes[i].data(), base::kSHA1Length)); 777 for (const auto& public_key_hash : verify_result.public_key_hashes)
780 } 778 public_key_hash_strings.push_back(public_key_hash.ToString());
781 779
782 HashValueVector sha256_hashes; 780 std::vector<std::string> expected_public_key_hashes = {
783 for (size_t i = 0; i < verify_result.public_key_hashes.size(); ++i) { 781 // Target
784 if (verify_result.public_key_hashes[i].tag != HASH_VALUE_SHA256) 782 "sha1/fSQl8GTgpmark/9mDK9qzIIGfFE=",
785 continue; 783 "sha256/5I5+4ndAhwDiWd1WqfBgDkKAAIEhsq0MfAx25Hoc+dA=",
786 sha256_hashes.push_back(verify_result.public_key_hashes[i]);
787 }
788 ASSERT_LE(3u, sha256_hashes.size());
789 784
790 for (size_t i = 0; i < 3; ++i) { 785 // Intermediate
791 EXPECT_EQ(HexEncode(kTwitterSPKIsSHA256[i], crypto::kSHA256Length), 786 "sha1/7+0Ms07hEkAc6zVPOo+uLtMEwfU=",
792 HexEncode(sha256_hashes[i].data(), crypto::kSHA256Length)); 787 "sha256/MtnqgdSwAIgEjse7SpxnmyKoo/RTiL9CDIWwFnz4nas=",
793 } 788
789 // Trust anchor
790 "sha1/dJwvO4gEVIZvretArGyBNggjlrQ=",
791 "sha256/z7x1Szes+eQOqJp6rBK3u/tQMs55FYojZHUCFiBcjuc="};
792
793 // |public_key_hashes| does not have an ordering guarantee.
794 std::sort(public_key_hash_strings.begin(), public_key_hash_strings.end());
795 std::sort(expected_public_key_hashes.begin(),
796 expected_public_key_hashes.end());
797
798 EXPECT_EQ(expected_public_key_hashes, public_key_hash_strings);
Ryan Sleevi 2017/02/04 01:47:02 So, to be clear: This totally works for me as is,
eroman 2017/02/04 01:59:55 Done.
794 } 799 }
795 800
796 // A regression test for http://crbug.com/70293. 801 // A regression test for http://crbug.com/70293.
797 // The Key Usage extension in this RSA SSL server certificate does not have 802 // The Key Usage extension in this RSA SSL server certificate does not have
798 // the keyEncipherment bit. 803 // the keyEncipherment bit.
799 TEST_P(CertVerifyProcInternalTest, InvalidKeyUsage) { 804 TEST_P(CertVerifyProcInternalTest, InvalidKeyUsage) {
800 base::FilePath certs_dir = GetTestCertsDirectory(); 805 base::FilePath certs_dir = GetTestCertsDirectory();
801 806
802 scoped_refptr<X509Certificate> server_cert = 807 scoped_refptr<X509Certificate> server_cert =
803 ImportCertFromFile(certs_dir, "invalid_key_usage_cert.der"); 808 ImportCertFromFile(certs_dir, "invalid_key_usage_cert.der");
(...skipping 1315 matching lines...) Expand 10 before | Expand all | Expand 10 after
2119 int flags = 0; 2124 int flags = 0;
2120 CertVerifyResult verify_result; 2125 CertVerifyResult verify_result;
2121 int error = verify_proc->Verify(cert.get(), "127.0.0.1", std::string(), flags, 2126 int error = verify_proc->Verify(cert.get(), "127.0.0.1", std::string(), flags,
2122 NULL, CertificateList(), &verify_result); 2127 NULL, CertificateList(), &verify_result);
2123 EXPECT_EQ(OK, error); 2128 EXPECT_EQ(OK, error);
2124 histograms.ExpectTotalCount(kTLSFeatureExtensionHistogram, 0); 2129 histograms.ExpectTotalCount(kTLSFeatureExtensionHistogram, 0);
2125 histograms.ExpectTotalCount(kTLSFeatureExtensionOCSPHistogram, 0); 2130 histograms.ExpectTotalCount(kTLSFeatureExtensionOCSPHistogram, 0);
2126 } 2131 }
2127 2132
2128 } // namespace net 2133 } // namespace net
OLDNEW
« no previous file with comments | « no previous file | net/cert/cert_verify_result.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698