"""To be added to trustpoint_core as trustpoint_core.oid.CertificateExtensionOid."""
import enum
from dataclasses import dataclass
@dataclass(frozen=True)
[docs]
class CertificateExtensionOidData:
"""The Certificate Extension OID Data class holding all of the information."""
[docs]
abbreviation: str | None
[docs]
class CertificateExtensionOid(enum.Enum):
"""Certificate Extension OID Enum holding extension metadata as dataclass instances and lookup helpers."""
[docs]
SUBJECT_DIRECTORY_ATTRIBUTES = CertificateExtensionOidData(
'2.5.29.9', None, 'subjectDirectoryAttributes', 'Subject Directory Attributes')
[docs]
SUBJECT_KEY_IDENTIFIER = CertificateExtensionOidData(
'2.5.29.14', 'ski', 'subjectKeyIdentifier', 'Subject Key Identifier')
[docs]
KEY_USAGE = CertificateExtensionOidData('2.5.29.15', 'ku', 'keyUsage', 'Key Usage')
[docs]
SUBJECT_ALTERNATIVE_NAME = CertificateExtensionOidData(
'2.5.29.17', 'san', 'subjectAlternativeName', 'Subject Alternative Name')
[docs]
ISSUER_ALTERNATIVE_NAME = CertificateExtensionOidData(
'2.5.29.18', 'ian', 'issuerAlternativeName', 'Issuer Alternative Name')
[docs]
BASIC_CONSTRAINTS = CertificateExtensionOidData('2.5.29.19', 'bc', 'basicConstraints', 'Basic Constraints')
[docs]
NAME_CONSTRAINTS = CertificateExtensionOidData('2.5.29.30', 'nc', 'nameConstraints', 'Name Constraints')
[docs]
CRL_DISTRIBUTION_POINTS = CertificateExtensionOidData(
'2.5.29.31', 'crl', 'crlDistributionPoints', 'CRL Distribution Points')
[docs]
CERTIFICATE_POLICIES = CertificateExtensionOidData('2.5.29.32', 'cp', 'certificatePolicies', 'Certificate Policies')
[docs]
POLICY_MAPPINGS = CertificateExtensionOidData('2.5.29.33', 'pm', 'policyMappings', 'Policy Mappings')
[docs]
AUTHORITY_KEY_IDENTIFIER = CertificateExtensionOidData(
'2.5.29.35', 'aki', 'authorityKeyIdentifier', 'Authority Key Identifier')
[docs]
POLICY_CONSTRAINTS = CertificateExtensionOidData('2.5.29.36', 'pc', 'policyConstraints', 'Policy Constraints')
[docs]
EXTENDED_KEY_USAGE = CertificateExtensionOidData('2.5.29.37', 'eku', 'extendedKeyUsage', 'Extended Key Usage')
[docs]
FRESHEST_CRL = CertificateExtensionOidData('2.5.29.46', None, 'freshestCRL', 'Freshest CRL')
[docs]
INHIBIT_ANY_POLICY = CertificateExtensionOidData('2.5.29.54', 'iap', 'inhibitAnyPolicy','Inhibit Any Policy')
[docs]
ISSUING_DISTRIBUTION_POINT = CertificateExtensionOidData(
'2.5.29.28', None, 'issuingDistributionPoint', 'Issuing Distribution Point')
[docs]
OCSP_NO_CHECK = CertificateExtensionOidData('1.3.6.1.5.5.7.48.1.5', None, 'ocspNoCheck','OCSP No Check')
[docs]
TLS_FEATURE = CertificateExtensionOidData('1.3.6.1.5.5.7.1.24', None, 'tlsFeature','TLS Feature')
[docs]
CRL_NUMBER = CertificateExtensionOidData('2.5.29.20', None, 'crlNumber','CRL Number')
[docs]
DELTA_CRL_INDICATOR = CertificateExtensionOidData('2.5.29.27', None, 'deltaCrlIndicator','Delta CRL Indicator')
[docs]
PRECERT_SIGNED_CERTIFICATE_TIMESTAMPS = CertificateExtensionOidData(
'1.3.6.1.4.1.11129.2.4.2',
None,
'precertSignedCertificateTimestamps',
'Precert Signed Certificate Timestamps',
)
[docs]
PRECERT_POISON = CertificateExtensionOidData('1.3.6.1.4.1.11129.2.4.3', None, 'precertPoison', 'Precert Poison')
[docs]
SIGNED_CERTIFICATE_TIMESTAMPS = CertificateExtensionOidData(
'1.3.6.1.4.1.11129.2.4.5',
None,
'signedCertificateTimestamps',
'Signed Certificate Timestamps',
)
[docs]
MS_CERTIFICATE_TEMPLATE = CertificateExtensionOidData(
'1.3.6.1.4.1.311.21.7', None, 'microsoftCertificateTemplate','Microsoft Certificate Template')
@property
[docs]
def dotted_string(self) -> str:
"""Return the dotted string OID.
Returns:
The dotted string OID.
"""
return self.value.dotted_string
@property
[docs]
def abbreviation(self) -> str | None:
"""Return the abbreviation for the NameOid, if any.
Returns:
The abbreviation, or None if not defined.
"""
return self.value.abbreviation
@property
[docs]
def full_name(self) -> str:
"""Return the full name for the NameOid.
Returns:
The full name.
"""
return self.value.full_name
@property
[docs]
def verbose_name(self) -> str:
"""Return the verbose name for display.
Returns:
The verbose name.
"""
return self.value.verbose_name
[docs]
class ExtendedKeyUsageOid(enum.Enum):
"""OIDs for Extended Key Usage values."""
[docs]
SERVER_AUTH = '1.3.6.1.5.5.7.3.1'
[docs]
CLIENT_AUTH = '1.3.6.1.5.5.7.3.2'
[docs]
CODE_SIGNING = '1.3.6.1.5.5.7.3.3'
[docs]
EMAIL_PROTECTION = '1.3.6.1.5.5.7.3.4'
[docs]
TIME_STAMPING = '1.3.6.1.5.5.7.3.8'
[docs]
OCSP_SIGNING = '1.3.6.1.5.5.7.3.9'
[docs]
ANY_EXTENDED_KEY_USAGE = '2.5.29.37.0'
[docs]
SMARTCARD_LOGON = '1.3.6.1.4.1.311.20.2.2'
[docs]
KERBEROS_PKINIT_KDC = '1.3.6.1.5.2.3.5'
[docs]
IPSEC_IKE = '1.3.6.1.5.5.7.3.17'
[docs]
BUNDLE_SECURITY = '1.3.6.1.5.5.7.3.35'
[docs]
CERTIFICATE_TRANSPARENCY = '1.3.6.1.4.1.11129.2.4.4'