blob: 9b8fcbb484ccfa30da3bcff9bf49c8e8b68da3e2 [file] [log] [blame]
// 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 "net/cert/internal/revocation_util.h"
#include "base/time/time.h"
#include "build/build_config.h"
#include "net/der/encode_values.h"
#include "net/der/parse_values.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace net {
namespace {
constexpr base::TimeDelta kOneWeek = base::TimeDelta::FromDays(7);
} // namespace
TEST(CheckRevocationDateTest, Valid) {
base::Time now = base::Time::Now();
base::Time this_update = now - base::TimeDelta::FromHours(1);
der::GeneralizedTime encoded_this_update;
ASSERT_TRUE(
der::EncodeTimeAsGeneralizedTime(this_update, &encoded_this_update));
EXPECT_TRUE(
CheckRevocationDateValid(encoded_this_update, nullptr, now, kOneWeek));
base::Time next_update = this_update + base::TimeDelta::FromDays(7);
der::GeneralizedTime encoded_next_update;
ASSERT_TRUE(
der::EncodeTimeAsGeneralizedTime(next_update, &encoded_next_update));
EXPECT_TRUE(CheckRevocationDateValid(encoded_this_update,
&encoded_next_update, now, kOneWeek));
}
TEST(CheckRevocationDateTest, ThisUpdateInTheFuture) {
base::Time now = base::Time::Now();
base::Time this_update = now + base::TimeDelta::FromHours(1);
der::GeneralizedTime encoded_this_update;
ASSERT_TRUE(
der::EncodeTimeAsGeneralizedTime(this_update, &encoded_this_update));
EXPECT_FALSE(
CheckRevocationDateValid(encoded_this_update, nullptr, now, kOneWeek));
base::Time next_update = this_update + base::TimeDelta::FromDays(7);
der::GeneralizedTime encoded_next_update;
ASSERT_TRUE(
der::EncodeTimeAsGeneralizedTime(next_update, &encoded_next_update));
EXPECT_FALSE(CheckRevocationDateValid(encoded_this_update,
&encoded_next_update, now, kOneWeek));
}
TEST(CheckRevocationDateTest, NextUpdatePassed) {
base::Time now = base::Time::Now();
base::Time this_update = now - base::TimeDelta::FromDays(6);
der::GeneralizedTime encoded_this_update;
ASSERT_TRUE(
der::EncodeTimeAsGeneralizedTime(this_update, &encoded_this_update));
EXPECT_TRUE(
CheckRevocationDateValid(encoded_this_update, nullptr, now, kOneWeek));
base::Time next_update = now - base::TimeDelta::FromHours(1);
der::GeneralizedTime encoded_next_update;
ASSERT_TRUE(
der::EncodeTimeAsGeneralizedTime(next_update, &encoded_next_update));
EXPECT_FALSE(CheckRevocationDateValid(encoded_this_update,
&encoded_next_update, now, kOneWeek));
}
TEST(CheckRevocationDateTest, NextUpdateBeforeThisUpdate) {
base::Time now = base::Time::Now();
base::Time this_update = now - base::TimeDelta::FromDays(1);
der::GeneralizedTime encoded_this_update;
ASSERT_TRUE(
der::EncodeTimeAsGeneralizedTime(this_update, &encoded_this_update));
EXPECT_TRUE(
CheckRevocationDateValid(encoded_this_update, nullptr, now, kOneWeek));
base::Time next_update = this_update - base::TimeDelta::FromDays(1);
der::GeneralizedTime encoded_next_update;
ASSERT_TRUE(
der::EncodeTimeAsGeneralizedTime(next_update, &encoded_next_update));
EXPECT_FALSE(CheckRevocationDateValid(encoded_this_update,
&encoded_next_update, now, kOneWeek));
}
TEST(CheckRevocationDateTest, ThisUpdateOlderThanMaxAge) {
base::Time now = base::Time::Now();
base::Time this_update = now - kOneWeek;
der::GeneralizedTime encoded_this_update;
ASSERT_TRUE(
der::EncodeTimeAsGeneralizedTime(this_update, &encoded_this_update));
EXPECT_TRUE(
CheckRevocationDateValid(encoded_this_update, nullptr, now, kOneWeek));
base::Time next_update = now + base::TimeDelta::FromHours(1);
der::GeneralizedTime encoded_next_update;
ASSERT_TRUE(
der::EncodeTimeAsGeneralizedTime(next_update, &encoded_next_update));
EXPECT_TRUE(CheckRevocationDateValid(encoded_this_update,
&encoded_next_update, now, kOneWeek));
ASSERT_TRUE(der::EncodeTimeAsGeneralizedTime(
this_update - base::TimeDelta::FromSeconds(1), &encoded_this_update));
EXPECT_FALSE(
CheckRevocationDateValid(encoded_this_update, nullptr, now, kOneWeek));
EXPECT_FALSE(CheckRevocationDateValid(encoded_this_update,
&encoded_next_update, now, kOneWeek));
}
TEST(CheckRevocationDateTest, VerifyTimeFromBeforeWindowsEpoch) {
base::Time windows_epoch;
base::Time verify_time = windows_epoch - base::TimeDelta::FromDays(1);
base::Time now = base::Time::Now();
base::Time this_update = now - base::TimeDelta::FromHours(1);
der::GeneralizedTime encoded_this_update;
ASSERT_TRUE(
der::EncodeTimeAsGeneralizedTime(this_update, &encoded_this_update));
EXPECT_FALSE(CheckRevocationDateValid(encoded_this_update, nullptr,
verify_time, kOneWeek));
base::Time next_update = this_update + kOneWeek;
der::GeneralizedTime encoded_next_update;
ASSERT_TRUE(
der::EncodeTimeAsGeneralizedTime(next_update, &encoded_next_update));
EXPECT_FALSE(CheckRevocationDateValid(
encoded_this_update, &encoded_next_update, verify_time, kOneWeek));
}
TEST(CheckRevocationDateTest, VerifyTimeMinusAgeFromBeforeWindowsEpoch) {
base::Time windows_epoch;
base::Time verify_time = windows_epoch + base::TimeDelta::FromDays(1);
base::Time this_update = windows_epoch;
der::GeneralizedTime encoded_this_update;
ASSERT_TRUE(
der::EncodeTimeAsGeneralizedTime(this_update, &encoded_this_update));
#if defined(OS_WIN)
EXPECT_FALSE(CheckRevocationDateValid(encoded_this_update, nullptr,
verify_time, kOneWeek));
#else
EXPECT_TRUE(CheckRevocationDateValid(encoded_this_update, nullptr,
verify_time, kOneWeek));
#endif
}
} // namespace net