diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/cryptography/hazmat/backends/openssl/x509.py | 4 | ||||
-rw-r--r-- | src/cryptography/x509/__init__.py | 3 | ||||
-rw-r--r-- | src/cryptography/x509/extensions.py | 28 |
3 files changed, 33 insertions, 2 deletions
diff --git a/src/cryptography/hazmat/backends/openssl/x509.py b/src/cryptography/hazmat/backends/openssl/x509.py index 2650b5d4..1376ab72 100644 --- a/src/cryptography/hazmat/backends/openssl/x509.py +++ b/src/cryptography/hazmat/backends/openssl/x509.py @@ -717,7 +717,9 @@ def _decode_invalidity_date(backend, inv_date): backend._ffi.cast("ASN1_STRING *", generalized_time) ) ).decode("ascii") - return datetime.datetime.strptime(time, "%Y%m%d%H%M%SZ") + return x509.InvalidityDate( + datetime.datetime.strptime(time, "%Y%m%d%H%M%SZ") + ) def _decode_cert_issuer(backend, ext): diff --git a/src/cryptography/x509/__init__.py b/src/cryptography/x509/__init__.py index 89e7f063..dc19161e 100644 --- a/src/cryptography/x509/__init__.py +++ b/src/cryptography/x509/__init__.py @@ -18,7 +18,7 @@ from cryptography.x509.extensions import ( CRLNumber, CRLReason, CertificateIssuer, CertificatePolicies, DistributionPoint, DuplicateExtension, ExtendedKeyUsage, Extension, ExtensionNotFound, ExtensionType, Extensions, GeneralNames, - InhibitAnyPolicy, IssuerAlternativeName, KeyUsage, + InhibitAnyPolicy, InvalidityDate, IssuerAlternativeName, KeyUsage, NameConstraints, NoticeReference, OCSPNoCheck, PolicyInformation, ReasonFlags, SubjectAlternativeName, SubjectKeyIdentifier, UnsupportedExtension, UserNotice @@ -168,4 +168,5 @@ __all__ = [ "CRLExtensionOID", "CertificateIssuer", "CRLReason", + "InvalidityDate", ] diff --git a/src/cryptography/x509/extensions.py b/src/cryptography/x509/extensions.py index 6ae00927..22cba682 100644 --- a/src/cryptography/x509/extensions.py +++ b/src/cryptography/x509/extensions.py @@ -5,6 +5,7 @@ from __future__ import absolute_import, division, print_function import abc +import datetime import hashlib import ipaddress from enum import Enum @@ -1001,3 +1002,30 @@ class CRLReason(object): return not self == other reason = utils.read_only_property("_reason") + + +@utils.register_interface(ExtensionType) +class InvalidityDate(object): + oid = CRLEntryExtensionOID.INVALIDITY_DATE + + def __init__(self, invalidity_date): + if not isinstance(invalidity_date, datetime.datetime): + raise TypeError("invalidity_date must be a datetime.datetime") + + self._invalidity_date = invalidity_date + + def __repr__(self): + return "<InvalidityDate(invalidity_date={0})>".format( + self._invalidity_date + ) + + def __eq__(self, other): + if not isinstance(other, InvalidityDate): + return NotImplemented + + return self.invalidity_date == other.invalidity_date + + def __ne__(self, other): + return not self == other + + invalidity_date = utils.read_only_property("_invalidity_date") |