summaryrefslogtreecommitdiffstats
path: root/security/manager/ssl/nsNSSCertValidity.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'security/manager/ssl/nsNSSCertValidity.cpp')
-rw-r--r--security/manager/ssl/nsNSSCertValidity.cpp130
1 files changed, 130 insertions, 0 deletions
diff --git a/security/manager/ssl/nsNSSCertValidity.cpp b/security/manager/ssl/nsNSSCertValidity.cpp
new file mode 100644
index 000000000..536aafc8f
--- /dev/null
+++ b/security/manager/ssl/nsNSSCertValidity.cpp
@@ -0,0 +1,130 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include "nsNSSCertValidity.h"
+
+#include "cert.h"
+#include "mozilla/Assertions.h"
+#include "nsCOMPtr.h"
+#include "nsComponentManagerUtils.h"
+#include "nsReadableUtils.h"
+
+NS_IMPL_ISUPPORTS(nsX509CertValidity, nsIX509CertValidity)
+
+nsX509CertValidity::nsX509CertValidity(const mozilla::UniqueCERTCertificate& cert)
+ : mTimesInitialized(false)
+{
+ MOZ_ASSERT(cert);
+ if (!cert) {
+ return;
+ }
+
+ nsNSSShutDownPreventionLock locker;
+ if (isAlreadyShutDown()) {
+ return;
+ }
+
+ if (CERT_GetCertTimes(cert.get(), &mNotBefore, &mNotAfter) == SECSuccess) {
+ mTimesInitialized = true;
+ }
+}
+
+nsX509CertValidity::~nsX509CertValidity()
+{
+ nsNSSShutDownPreventionLock locker;
+ if (isAlreadyShutDown()) {
+ return;
+ }
+
+ shutdown(ShutdownCalledFrom::Object);
+}
+
+NS_IMETHODIMP
+nsX509CertValidity::GetNotBefore(PRTime* aNotBefore)
+{
+ NS_ENSURE_ARG(aNotBefore);
+
+ if (!mTimesInitialized) {
+ return NS_ERROR_FAILURE;
+ }
+
+ *aNotBefore = mNotBefore;
+ return NS_OK;
+}
+
+nsresult
+nsX509CertValidity::FormatTime(const PRTime& aTimeDate,
+ PRTimeParamFn aParamFn,
+ const nsTimeFormatSelector aTimeFormatSelector,
+ nsAString& aFormattedTimeDate)
+{
+ if (!mTimesInitialized)
+ return NS_ERROR_FAILURE;
+
+ nsCOMPtr<nsIDateTimeFormat> dateFormatter = nsIDateTimeFormat::Create();
+ if (!dateFormatter) {
+ return NS_ERROR_FAILURE;
+ }
+
+ PRExplodedTime explodedTime;
+ PR_ExplodeTime(const_cast<PRTime&>(aTimeDate), aParamFn, &explodedTime);
+ return dateFormatter->FormatPRExplodedTime(nullptr, kDateFormatLong,
+ aTimeFormatSelector,
+ &explodedTime, aFormattedTimeDate);
+}
+
+NS_IMETHODIMP
+nsX509CertValidity::GetNotBeforeLocalTime(nsAString& aNotBeforeLocalTime)
+{
+ return FormatTime(mNotBefore, PR_LocalTimeParameters,
+ kTimeFormatSeconds, aNotBeforeLocalTime);
+}
+
+NS_IMETHODIMP
+nsX509CertValidity::GetNotBeforeLocalDay(nsAString& aNotBeforeLocalDay)
+{
+ return FormatTime(mNotBefore, PR_LocalTimeParameters,
+ kTimeFormatNone, aNotBeforeLocalDay);
+}
+
+NS_IMETHODIMP
+nsX509CertValidity::GetNotBeforeGMT(nsAString& aNotBeforeGMT)
+{
+ return FormatTime(mNotBefore, PR_GMTParameters,
+ kTimeFormatSeconds, aNotBeforeGMT);
+}
+
+NS_IMETHODIMP
+nsX509CertValidity::GetNotAfter(PRTime* aNotAfter)
+{
+ NS_ENSURE_ARG(aNotAfter);
+
+ if (!mTimesInitialized) {
+ return NS_ERROR_FAILURE;
+ }
+
+ *aNotAfter = mNotAfter;
+ return NS_OK;
+}
+
+NS_IMETHODIMP
+nsX509CertValidity::GetNotAfterLocalTime(nsAString& aNotAfterLocaltime)
+{
+ return FormatTime(mNotAfter, PR_LocalTimeParameters,
+ kTimeFormatSeconds, aNotAfterLocaltime);
+}
+
+NS_IMETHODIMP
+nsX509CertValidity::GetNotAfterLocalDay(nsAString& aNotAfterLocalDay)
+{
+ return FormatTime(mNotAfter, PR_LocalTimeParameters,
+ kTimeFormatNone, aNotAfterLocalDay);
+}
+
+NS_IMETHODIMP
+nsX509CertValidity::GetNotAfterGMT(nsAString& aNotAfterGMT)
+{
+ return FormatTime(mNotAfter, PR_GMTParameters,
+ kTimeFormatSeconds, aNotAfterGMT);
+}