summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorR. Martinho Fernandes <bugs@rmf.io>2021-06-24 10:21:54 +0000
committerR. Martinho Fernandes <bugs@rmf.io>2021-06-24 10:21:54 +0000
commit54f3f84dc90f61be8e7132279fa101ceb150b6fd (patch)
tree4b4ed855c82d71117393fe22e1db97468c4a835c
parent59526c8d04806f0ccf08008d1cecab308b6ada92 (diff)
downloadnss-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.h5
-rw-r--r--lib/mozpkix/lib/pkixtime.cpp14
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