| // Copyright 2021 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chrome/browser/ash/attestation/certificate_util.h" |
| |
| #include <string> |
| |
| #include "base/time/time.h" |
| #include "chromeos/ash/components/attestation/fake_certificate.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| |
| namespace ash { |
| namespace attestation { |
| |
| constexpr base::TimeDelta kOneDay = base::Days(1); |
| constexpr base::TimeDelta kOneDayBefore = base::Days(-1); |
| constexpr base::TimeDelta kExpiryTreshold = kOneDay; |
| |
| TEST(CheckCertificateExpiryTest, CertificateValid) { |
| std::string valid_certificate; |
| ASSERT_TRUE( |
| GetFakeCertificatePEM(/*expiry=*/2 * kOneDay, &valid_certificate)); |
| |
| EXPECT_EQ(CheckCertificateExpiry(valid_certificate, kExpiryTreshold), |
| CertificateExpiryStatus::kValid); |
| } |
| |
| TEST(CheckCertificateExpiryTest, CertificateExpiresSoon) { |
| std::string expiring_soon_certificate; |
| ASSERT_TRUE(GetFakeCertificatePEM(/*expiry=*/kOneDay / 2, |
| &expiring_soon_certificate)); |
| |
| EXPECT_EQ(CheckCertificateExpiry(expiring_soon_certificate, kExpiryTreshold), |
| CertificateExpiryStatus::kExpiringSoon); |
| } |
| |
| TEST(CheckCertificateExpiryTest, IntermediateCertificateExpiresSoon) { |
| std::string valid_certificate; |
| ASSERT_TRUE( |
| GetFakeCertificatePEM(/*expiry=*/2 * kOneDay, &valid_certificate)); |
| |
| std::string expiring_soon_certificate; |
| ASSERT_TRUE(GetFakeCertificatePEM(/*expiry=*/kOneDay / 2, |
| &expiring_soon_certificate)); |
| |
| const std::string certificate_chain = |
| valid_certificate + expiring_soon_certificate + valid_certificate; |
| |
| EXPECT_EQ(CheckCertificateExpiry(certificate_chain, kExpiryTreshold), |
| CertificateExpiryStatus::kExpiringSoon); |
| } |
| |
| TEST(CheckCertificateExpiryTest, CertificateExpired) { |
| std::string expired_certificate; |
| ASSERT_TRUE( |
| GetFakeCertificatePEM(/*expiry=*/kOneDayBefore, &expired_certificate)); |
| |
| EXPECT_EQ(CheckCertificateExpiry(expired_certificate, kExpiryTreshold), |
| CertificateExpiryStatus::kExpired); |
| } |
| |
| TEST(CheckCertificateExpiryTest, IntermediateCertificateExpired) { |
| std::string valid_certificate; |
| ASSERT_TRUE( |
| GetFakeCertificatePEM(/*expiry=*/2 * kOneDay, &valid_certificate)); |
| |
| std::string expired_certificate; |
| ASSERT_TRUE( |
| GetFakeCertificatePEM(/*expiry=*/kOneDayBefore, &expired_certificate)); |
| |
| const std::string certificate_chain = |
| valid_certificate + expired_certificate + valid_certificate; |
| |
| EXPECT_EQ(CheckCertificateExpiry(certificate_chain, kExpiryTreshold), |
| CertificateExpiryStatus::kExpired); |
| } |
| |
| TEST(CheckCertificateExpiryTest, CertificateEmpty) { |
| std::string empty_certificate; |
| |
| EXPECT_EQ(CheckCertificateExpiry(empty_certificate, kExpiryTreshold), |
| CertificateExpiryStatus::kInvalidPemChain); |
| } |
| |
| TEST(CheckCertificateExpiryTest, CertificateInvalidPemChain) { |
| std::string invalid_pem_certificate = "invalid_pem"; |
| |
| EXPECT_EQ(CheckCertificateExpiry(invalid_pem_certificate, kExpiryTreshold), |
| CertificateExpiryStatus::kInvalidPemChain); |
| } |
| |
| TEST(CheckCertificateExpiryTest, CertificateInvalidX509) { |
| std::string not_x509_certificate = |
| "-----BEGIN CERTIFICATE-----\n" |
| "Vm0wd2QyUXlWa1pOVldoVFYwZDRWVll3WkRSV1JteFZVMjA1VjFadGVEQmFWVll3WVd4YWMx" |
| "TnNiRlZXYkhCUVdWZHplRll5VGtWUwpiSEJPVWpKb1RWZFhkR0ZUTWs1eVRsWmtZUXBTYlZK" |
| "d1ZXcEtiMDFzWkZkV2JVWlVZbFpHTTFSc1dsZFZaM0JwVTBWS2RsWkdZM2hpCk1rbDRWMnhX" |
| "VkdGc1NsaFpiRnBIVGtaYVNFNVZkRmRhTTBKd1ZteGFkMVpXWkZobFIzUnBDazFXY0VoV01X" |
| "aHpZV3hLV1ZWc1ZscGkKUm5Cb1dsZDRXbVZWTlZkYVIyaFdWMFZLVlZacVFsZFRNVnBYV2ta" |
| "b2JGSXpVbGREYlVwWFYydG9WMDF1VW5aWmExcExZMnMxVjFScwpjRmdLVTBWS1dWWnRjRWRq" |
| "TWs1elYyNVNVRll5YUZkV01GWkxWbXhhVlZGc1pGUk5Wa3BJVmpKNGIyRnNTbGxWYkVKRVlr" |
| "VndWbFZ0CmVHOVdNVWw2WVVkb1dGWnNjRXhXTUZwWFpGWk9jd3BhUjJkTFdWUkNkMDVzV2to" |
| "TlZGSmFWbTFTUjFSV1ZsZFdNa3BKVVd4a1YwMUcKV2t4V01uaGhWMGRXU0dSRk9WTk5WWEJa" |
| "Vm1wR2IySXhXblJTV0hCV1lrWktSVmxZY0VkbGJGbDVDbU5GVGxkTlZtdzJWbGMxWVZkdApS" |
| "WGhqUlhSaFZucEdTRlZ0TVZOU2QzQmhVbTFPVEZkWGVGWmtNbEY0VjJ0V1UySkhVbFpVVjNS" |
| "M1pXeFdXR1ZHWkZWaVJYQmFWa2QwCk5GSkdjRFlLVFVSc1JGcDZNRGxEWnowOUNnPT0K\n" |
| "-----END CERTIFICATE-----\n"; |
| EXPECT_EQ(CheckCertificateExpiry(not_x509_certificate, kExpiryTreshold), |
| CertificateExpiryStatus::kInvalidX509); |
| } |
| |
| } // namespace attestation |
| } // namespace ash |