diff options
author | R. Martinho Fernandes <bugs@rmf.io> | 2021-06-24 10:21:54 +0000 |
---|---|---|
committer | R. Martinho Fernandes <bugs@rmf.io> | 2021-06-24 10:21:54 +0000 |
commit | 54f3f84dc90f61be8e7132279fa101ceb150b6fd (patch) | |
tree | 4b4ed855c82d71117393fe22e1db97468c4a835c | |
parent | 59526c8d04806f0ccf08008d1cecab308b6ada92 (diff) | |
download | nss-hg-54f3f84dc90f61be8e7132279fa101ceb150b6fd.tar.gz |
Bug 1717610 - Add function to get seconds from epoch from pkix::Time r=bbeurdouche,keeler
We need this function for the rewrite of CertVerifier::VerifyCertificateTransparencyPolicy in order to calculate a certificate's lifetime in months.
Differential Revision: https://phabricator.services.mozilla.com/D118525
-rw-r--r-- | lib/mozpkix/include/pkix/Time.h | 5 | ||||
-rw-r--r-- | lib/mozpkix/lib/pkixtime.cpp | 14 |
2 files changed, 19 insertions, 0 deletions
diff --git a/lib/mozpkix/include/pkix/Time.h b/lib/mozpkix/include/pkix/Time.h index 8aea5479b..20cef5160 100644 --- a/lib/mozpkix/include/pkix/Time.h +++ b/lib/mozpkix/include/pkix/Time.h @@ -111,6 +111,9 @@ Time Now(); // Note the epoch is the unix epoch (ie 00:00:00 UTC, 1 January 1970) Time TimeFromEpochInSeconds(uint64_t secondsSinceEpoch); +// Note the epoch is the unix epoch (ie 00:00:00 UTC, 1 January 1970) +Result SecondsSinceEpochFromTime(Time time, uint64_t* outSeconds); + class Duration final { public: Duration(Time timeA, Time timeB) @@ -129,6 +132,8 @@ class Duration final { } private: + friend Result SecondsSinceEpochFromTime(Time time, uint64_t* outSeconds); + uint64_t durationInSeconds; }; } diff --git a/lib/mozpkix/lib/pkixtime.cpp b/lib/mozpkix/lib/pkixtime.cpp index 38e063804..ba545d2e9 100644 --- a/lib/mozpkix/lib/pkixtime.cpp +++ b/lib/mozpkix/lib/pkixtime.cpp @@ -75,4 +75,18 @@ TimeFromEpochInSeconds(uint64_t secondsSinceEpoch) return TimeFromElapsedSecondsAD(seconds); } +Result +SecondsSinceEpochFromTime(Time time, uint64_t* outSeconds) +{ + if (!outSeconds) { + return Result::FATAL_ERROR_INVALID_ARGS; + } + Time epoch = TimeFromEpochInSeconds(0); + if (time < epoch) { + return Result::FATAL_ERROR_INVALID_ARGS; + } + *outSeconds = Duration(time, epoch).durationInSeconds; + return Result::Success; +} + } } // namespace mozilla::pkix |