| // Copyright 2021 The Chromium Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #include "quiche/quic/core/crypto/certificate_util.h" | |
| #include "openssl/ssl.h" | |
| #include "quiche/quic/core/crypto/certificate_view.h" | |
| #include "quiche/quic/platform/api/quic_test.h" | |
| #include "quiche/quic/platform/api/quic_test_output.h" | |
| namespace quic { | |
| namespace test { | |
| namespace { | |
| TEST(CertificateUtilTest, CreateSelfSignedCertificate) { | |
| bssl::UniquePtr<EVP_PKEY> key = MakeKeyPairForSelfSignedCertificate(); | |
| ASSERT_NE(key, nullptr); | |
| CertificatePrivateKey cert_key(std::move(key)); | |
| CertificateOptions options; | |
| options.subject = "CN=subject"; | |
| options.serial_number = 0x12345678; | |
| options.validity_start = {2020, 1, 1, 0, 0, 0}; | |
| options.validity_end = {2049, 12, 31, 0, 0, 0}; | |
| std::string der_cert = | |
| CreateSelfSignedCertificate(*cert_key.private_key(), options); | |
| ASSERT_FALSE(der_cert.empty()); | |
| QuicSaveTestOutput("CertificateUtilTest_CreateSelfSignedCert.crt", der_cert); | |
| std::unique_ptr<CertificateView> cert_view = | |
| CertificateView::ParseSingleCertificate(der_cert); | |
| ASSERT_NE(cert_view, nullptr); | |
| EXPECT_EQ(cert_view->public_key_type(), PublicKeyType::kP256); | |
| absl::optional<std::string> subject = cert_view->GetHumanReadableSubject(); | |
| ASSERT_TRUE(subject.has_value()); | |
| EXPECT_EQ(*subject, options.subject); | |
| EXPECT_TRUE( | |
| cert_key.ValidForSignatureAlgorithm(SSL_SIGN_ECDSA_SECP256R1_SHA256)); | |
| EXPECT_TRUE(cert_key.MatchesPublicKey(*cert_view)); | |
| } | |
| } // namespace | |
| } // namespace test | |
| } // namespace quic |