// Copyright 2019 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 "util/crypto/certificate_utils.h" #include #include #include #include #include #include "gtest/gtest.h" #include "platform/api/time.h" #include "platform/base/error.h" #include "util/std_util.h" namespace openscreen { namespace { constexpr char kName[] = "test.com"; constexpr auto kDuration = std::chrono::seconds(31556952); TEST(CertificateUtilTest, CreatesValidCertificate) { bssl::UniquePtr pkey = GenerateRsaKeyPair(); ASSERT_TRUE(pkey); ErrorOr> certificate = CreateSelfSignedX509Certificate(kName, kDuration, *pkey); ASSERT_TRUE(certificate.is_value()); // Validate the generated certificate. EXPECT_NE(0, X509_verify(certificate.value().get(), pkey.get())); } TEST(CertificateUtilTest, ExportsAndImportsCertificate) { bssl::UniquePtr pkey = GenerateRsaKeyPair(); ASSERT_TRUE(pkey); ErrorOr> certificate = CreateSelfSignedX509Certificate(kName, kDuration, *pkey); ASSERT_TRUE(certificate.is_value()); ErrorOr> exported = ExportX509CertificateToDer(*certificate.value()); ASSERT_TRUE(exported.is_value()) << exported.error(); EXPECT_FALSE(exported.value().empty()); ErrorOr> imported = ImportCertificate(exported.value().data(), exported.value().size()); ASSERT_TRUE(imported.is_value()) << imported.error(); ASSERT_TRUE(imported.value().get()); // Validate the imported certificate. EXPECT_NE(0, X509_verify(imported.value().get(), pkey.get())); } } // namespace } // namespace openscreen