U
    d                    @  s:  d dl mZ d dlZd dlZd dlZd dlZd dlZd dlmZ d dl	m
Z
 d dl	mZ d dlmZmZ d dlmZ d dlmZ d d	lmZmZ d d
lmZ d dlmZmZmZmZmZmZm Z m!Z!m"Z" d dl#m$Z$m%Z% d dl&m'Z'm(Z(m)Z)m*Z* ej+ddddZ,dddddZ-ddddZ.G dd de/Z0G dd de/Z1G dd dej2d Z3G d!d" d"Z4G d#d$ d$e3Z5G d%d& d&e3Z6G d'd( d(e3Z7G d)d* d*e3Z8G d+d, d,e3Z9G d-d. d.Z:G d/d0 d0e3Z;G d1d2 d2e3Z<G d3d4 d4e3Z=G d5d6 d6e3Z>G d7d8 d8Z?G d9d: d:ej@ZAeAjBeAjCeAjDeAjEeAjFeAjGeAjHeAjId;ZJeAjBd<eAjCd=eAjDd>eAjEd?eAjFd@eAjGdAeAjHdBeAjIdCiZKG dDdE dEe3ZLG dFdG dGe3ZMG dHdI dIZNG dJdK dKZOG dLdM dMZPG dNdO dOe3ZQG dPdQ dQe3ZRG dRdS dSe3ZSG dTdU dUe3ZTG dVdW dWej@ZUdXdY eUD ZVG dZd[ d[e3ZWG d\d] d]e3ZXG d^d_ d_e3ZYG d`da daejZe, Z[G dbdc dcZ\G ddde dee3Z]G dfdg dge3Z^G dhdi die3Z_G djdk dke3Z`G dldm dme3ZaG dndo doe3ZbG dpdq dqe3ZcG drds dse3ZdG dtdu due3ZeG dvdw dwe3ZfG dxdy dye3ZgG dzd{ d{e3ZhdS )|    )annotationsN)utils)asn1)x509)constant_timeserialization)EllipticCurvePublicKey)RSAPublicKey)CertificateIssuerPublicKeyTypesCertificatePublicKeyTypes)SignedCertificateTimestamp)	DirectoryNameDNSNameGeneralName	IPAddress	OtherNameRegisteredID
RFC822NameUniformResourceIdentifier_IPAddressTypes)NameRelativeDistinguishedName)CRLEntryExtensionOIDExtensionOIDObjectIdentifierOCSPExtensionOIDExtensionTypeVarExtensionTypeT)bound	covariantr   bytes
public_keyreturnc                 C  sl   t | tr | tjjtjj}n>t | tr@| tjj	tjj
}n| tjjtjj}t|}t| S N)
isinstancer	   public_bytesr   EncodingZDERZPublicFormatZPKCS1r   ZX962ZUncompressedPointZSubjectPublicKeyInfor   Zparse_spki_for_datahashlibsha1digest)r"   dataZ
serialized r,   @/tmp/pip-unpacked-wheel-ho9526s1/cryptography/x509/extensions.py_key_identifier_from_public_key2   s     


r.   str
field_namec                   s4   dd fdd} fdd} fdd}|||fS )	Nintr#   c                   s   t t|  S r$   )lengetattrselfr0   r,   r-   
len_methodK   s    z*_make_sequence_methods.<locals>.len_methodc                   s   t t|  S r$   )iterr5   r6   r0   r,   r-   iter_methodN   s    z+_make_sequence_methods.<locals>.iter_methodc                   s   t |  | S r$   )r5   )r7   idxr0   r,   r-   getitem_methodQ   s    z._make_sequence_methods.<locals>.getitem_methodr,   )r1   r8   r:   r<   r,   r0   r-   _make_sequence_methodsJ   s    r=   c                      s&   e Zd Zdddd fddZ  ZS )DuplicateExtensionr/   r   Nonemsgoidr#   c                   s   t  | || _d S r$   super__init__rB   r7   rA   rB   	__class__r,   r-   rE   X   s    zDuplicateExtension.__init____name__
__module____qualname__rE   __classcell__r,   r,   rG   r-   r>   W   s   r>   c                      s&   e Zd Zdddd fddZ  ZS )ExtensionNotFoundr/   r   r?   r@   c                   s   t  | || _d S r$   rC   rF   rG   r,   r-   rE   ^   s    zExtensionNotFound.__init__rI   r,   r,   rG   r-   rN   ]   s   rN   c                   @  s$   e Zd ZU ded< ddddZdS )r   z!typing.ClassVar[ObjectIdentifier]rB   r    r3   c                 C  s   t d| dS )z7
        Serializes the extension type to DER.
        z7public_bytes is not implemented for extension type {!r}N)NotImplementedErrorformatr6   r,   r,   r-   r&   f   s
    zExtensionType.public_bytesN)rJ   rK   rL   __annotations__r&   r,   r,   r,   r-   r   c   s   
)	metaclassc                   @  sX   e Zd ZdddddZdddd	d
ZdddddZed\ZZZ	ddddZ
dS )
Extensionsz)typing.Iterable[Extension[ExtensionType]]r?   )
extensionsr#   c                 C  s   t || _d S r$   )list_extensions)r7   rT   r,   r,   r-   rE   r   s    zExtensions.__init__r   zExtension[ExtensionType])rB   r#   c                 C  s2   | D ]}|j |kr|  S qtd| d|d S )NNo  extension was found)rB   rN   )r7   rB   extr,   r,   r-   get_extension_for_oidw   s    

z Extensions.get_extension_for_oidztyping.Type[ExtensionTypeVar]zExtension[ExtensionTypeVar])extclassr#   c                 C  sF   |t krtd| D ]}t|j|r|  S qtd| d|jd S )Nz|UnrecognizedExtension can't be used with get_extension_for_class because more than one instance of the class may be present.rW   rX   )UnrecognizedExtension	TypeErrorr%   valuerN   rB   )r7   r[   rY   r,   r,   r-   get_extension_for_class   s    

 z"Extensions.get_extension_for_classrV   r/   r3   c                 C  s   d| j  dS )Nz<Extensions()>)rV   r6   r,   r,   r-   __repr__   s    zExtensions.__repr__N)rJ   rK   rL   rE   rZ   r_   r=   __len____iter____getitem__ra   r,   r,   r,   r-   rS   q   s
   	rS   c                   @  sn   e Zd ZejZdddddZdddd	d
ZddddZddddZ	e
ddddZddddZdS )	CRLNumberr2   r?   
crl_numberr#   c                 C  s   t |tstd|| _d S Nzcrl_number must be an integerr%   r2   r]   _crl_numberr7   rg   r,   r,   r-   rE      s    
zCRLNumber.__init__objectboolotherr#   c                 C  s   t |tstS | j|jkS r$   )r%   re   NotImplementedrg   r7   ro   r,   r,   r-   __eq__   s    
zCRLNumber.__eq__r3   c                 C  s
   t | jS r$   hashrg   r6   r,   r,   r-   __hash__   s    zCRLNumber.__hash__r/   c                 C  s   d| j  dS )Nz<CRLNumber(r`   rg   r6   r,   r,   r-   ra      s    zCRLNumber.__repr__c                 C  s   | j S r$   rj   r6   r,   r,   r-   rg      s    zCRLNumber.crl_numberr    c                 C  s
   t | S r$   	rust_x509Zencode_extension_valuer6   r,   r,   r-   r&      s    zCRLNumber.public_bytesN)rJ   rK   rL   r   Z
CRL_NUMBERrB   rE   rr   ru   ra   propertyrg   r&   r,   r,   r,   r-   re      s   re   c                   @  s   e Zd ZejZdddddddZedd d	d
dZedd dddZ	ddddZ
dddddZddddZeddddZedddd Zeddd!d"Zd#dd$d%Zd&S )'AuthorityKeyIdentifierztyping.Optional[bytes]-typing.Optional[typing.Iterable[GeneralName]]typing.Optional[int]r?   )key_identifierauthority_cert_issuerauthority_cert_serial_numberr#   c                 C  sr   |d k|d kkrt d|d k	rBt|}tdd |D sBtd|d k	r\t|ts\td|| _|| _|| _d S )NzXauthority_cert_issuer and authority_cert_serial_number must both be present or both Nonec                 s  s   | ]}t |tV  qd S r$   r%   r   .0xr,   r,   r-   	<genexpr>   s    z2AuthorityKeyIdentifier.__init__.<locals>.<genexpr>z;authority_cert_issuer must be a list of GeneralName objectsz/authority_cert_serial_number must be an integer)	
ValueErrorrU   allr]   r%   r2   _key_identifier_authority_cert_issuer_authority_cert_serial_number)r7   r~   r   r   r,   r,   r-   rE      s,    
 zAuthorityKeyIdentifier.__init__r
   r!   c                 C  s   t |}| |d d dS N)r~   r   r   r.   )clsr"   r*   r,   r,   r-   from_issuer_public_key   s    z-AuthorityKeyIdentifier.from_issuer_public_keySubjectKeyIdentifier)skir#   c                 C  s   | |j d d dS r   r*   )r   r   r,   r,   r-   "from_issuer_subject_key_identifier   s
    z9AuthorityKeyIdentifier.from_issuer_subject_key_identifierr/   r3   c                 C  s
   d | S )Nz<AuthorityKeyIdentifier(key_identifier={0.key_identifier!r}, authority_cert_issuer={0.authority_cert_issuer}, authority_cert_serial_number={0.authority_cert_serial_number})>rP   r6   r,   r,   r-   ra      s    zAuthorityKeyIdentifier.__repr__rl   rm   rn   c                 C  s2   t |tstS | j|jko0| j|jko0| j|jkS r$   )r%   r{   rp   r~   r   r   rq   r,   r,   r-   rr      s    

zAuthorityKeyIdentifier.__eq__r2   c                 C  s,   | j d krd }n
t| j }t| j|| jfS r$   )r   tuplert   r~   r   )r7   Zacir,   r,   r-   ru     s    

zAuthorityKeyIdentifier.__hash__c                 C  s   | j S r$   )r   r6   r,   r,   r-   r~     s    z%AuthorityKeyIdentifier.key_identifier)typing.Optional[typing.List[GeneralName]]c                 C  s   | j S r$   )r   r6   r,   r,   r-   r     s    z,AuthorityKeyIdentifier.authority_cert_issuerc                 C  s   | j S r$   )r   r6   r,   r,   r-   r     s    z3AuthorityKeyIdentifier.authority_cert_serial_numberr    c                 C  s
   t | S r$   rx   r6   r,   r,   r-   r&     s    z#AuthorityKeyIdentifier.public_bytesN)rJ   rK   rL   r   ZAUTHORITY_KEY_IDENTIFIERrB   rE   classmethodr   r   ra   rr   ru   rz   r~   r   r   r&   r,   r,   r,   r-   r{      s    &
		r{   c                   @  s   e Zd ZejZdddddZedd ddd	Ze	dd
ddZ
e	dd
ddZdd
ddZdddddZdd
ddZdd
ddZdS )r   r    r?   )r*   r#   c                 C  s
   || _ d S r$   Z_digest)r7   r*   r,   r,   r-   rE   $  s    zSubjectKeyIdentifier.__init__r   r!   c                 C  s   | t |S r$   r   )r   r"   r,   r,   r-   from_public_key'  s    z$SubjectKeyIdentifier.from_public_keyr3   c                 C  s   | j S r$   r   r6   r,   r,   r-   r*   -  s    zSubjectKeyIdentifier.digestc                 C  s   | j S r$   r   r6   r,   r,   r-   r~   1  s    z#SubjectKeyIdentifier.key_identifierr/   c                 C  s   d| j dS )Nz<SubjectKeyIdentifier(digest=r`   r   r6   r,   r,   r-   ra   5  s    zSubjectKeyIdentifier.__repr__rl   rm   rn   c                 C  s   t |tstS t| j|jS r$   )r%   r   rp   r   Zbytes_eqr*   rq   r,   r,   r-   rr   8  s    
zSubjectKeyIdentifier.__eq__r2   c                 C  s
   t | jS r$   )rt   r*   r6   r,   r,   r-   ru   >  s    zSubjectKeyIdentifier.__hash__c                 C  s
   t | S r$   rx   r6   r,   r,   r-   r&   A  s    z!SubjectKeyIdentifier.public_bytesN)rJ   rK   rL   r   ZSUBJECT_KEY_IDENTIFIERrB   rE   r   r   rz   r*   r~   ra   rr   ru   r&   r,   r,   r,   r-   r   !  s   r   c                   @  sj   e Zd ZejZdddddZed\ZZ	Z
ddd	d
ZdddddZddddZddddZdS )AuthorityInformationAccess"typing.Iterable[AccessDescription]r?   descriptionsr#   c                 C  s,   t |}tdd |D s"td|| _d S )Nc                 s  s   | ]}t |tV  qd S r$   r%   AccessDescriptionr   r,   r,   r-   r   L  s     z6AuthorityInformationAccess.__init__.<locals>.<genexpr>@Every item in the descriptions list must be an AccessDescriptionrU   r   r]   _descriptionsr7   r   r,   r,   r-   rE   H  s    z#AuthorityInformationAccess.__init__r   r/   r3   c                 C  s   d| j  dS )Nz<AuthorityInformationAccess(r`   r   r6   r,   r,   r-   ra   V  s    z#AuthorityInformationAccess.__repr__rl   rm   rn   c                 C  s   t |tstS | j|jkS r$   )r%   r   rp   r   rq   r,   r,   r-   rr   Y  s    
z!AuthorityInformationAccess.__eq__r2   c                 C  s   t t| jS r$   rt   r   r   r6   r,   r,   r-   ru   _  s    z#AuthorityInformationAccess.__hash__r    c                 C  s
   t | S r$   rx   r6   r,   r,   r-   r&   b  s    z'AuthorityInformationAccess.public_bytesN)rJ   rK   rL   r   ZAUTHORITY_INFORMATION_ACCESSrB   rE   r=   rb   rc   rd   ra   rr   ru   r&   r,   r,   r,   r-   r   E  s   r   c                   @  sj   e Zd ZejZdddddZed\ZZ	Z
ddd	d
ZdddddZddddZddddZdS )SubjectInformationAccessr   r?   r   c                 C  s,   t |}tdd |D s"td|| _d S )Nc                 s  s   | ]}t |tV  qd S r$   r   r   r,   r,   r-   r   m  s     z4SubjectInformationAccess.__init__.<locals>.<genexpr>r   r   r   r,   r,   r-   rE   i  s    z!SubjectInformationAccess.__init__r   r/   r3   c                 C  s   d| j  dS )Nz<SubjectInformationAccess(r`   r   r6   r,   r,   r-   ra   w  s    z!SubjectInformationAccess.__repr__rl   rm   rn   c                 C  s   t |tstS | j|jkS r$   )r%   r   rp   r   rq   r,   r,   r-   rr   z  s    
zSubjectInformationAccess.__eq__r2   c                 C  s   t t| jS r$   r   r6   r,   r,   r-   ru     s    z!SubjectInformationAccess.__hash__r    c                 C  s
   t | S r$   rx   r6   r,   r,   r-   r&     s    z%SubjectInformationAccess.public_bytesN)rJ   rK   rL   r   ZSUBJECT_INFORMATION_ACCESSrB   rE   r=   rb   rc   rd   ra   rr   ru   r&   r,   r,   r,   r-   r   f  s   r   c                   @  sn   e Zd ZddddddZddd	d
ZdddddZddddZeddddZeddddZ	dS )r   r   r   r?   )access_methodaccess_locationr#   c                 C  s4   t |tstdt |ts$td|| _|| _d S )Nz)access_method must be an ObjectIdentifierz%access_location must be a GeneralName)r%   r   r]   r   _access_method_access_location)r7   r   r   r,   r,   r-   rE     s    

zAccessDescription.__init__r/   r3   c                 C  s
   d | S )NzY<AccessDescription(access_method={0.access_method}, access_location={0.access_location})>r   r6   r,   r,   r-   ra     s    zAccessDescription.__repr__rl   rm   rn   c                 C  s&   t |tstS | j|jko$| j|jkS r$   )r%   r   rp   r   r   rq   r,   r,   r-   rr     s
    

zAccessDescription.__eq__r2   c                 C  s   t | j| jfS r$   )rt   r   r   r6   r,   r,   r-   ru     s    zAccessDescription.__hash__c                 C  s   | j S r$   )r   r6   r,   r,   r-   r     s    zAccessDescription.access_methodc                 C  s   | j S r$   )r   r6   r,   r,   r-   r     s    z!AccessDescription.access_locationN)
rJ   rK   rL   rE   ra   rr   ru   rz   r   r   r,   r,   r,   r-   r     s   	r   c                   @  s   e Zd ZejZddddddZedddd	Zeddd
dZ	ddddZ
dddddZddddZddddZdS )BasicConstraintsrm   r}   r?   )capath_lengthr#   c                 C  sX   t |tstd|d k	r&|s&td|d k	rHt |tr@|dk rHtd|| _|| _d S )Nzca must be a boolean valuez)path_length must be None when ca is Falser   z2path_length must be a non-negative integer or None)r%   rm   r]   r   r2   _ca_path_length)r7   r   r   r,   r,   r-   rE     s    
zBasicConstraints.__init__r3   c                 C  s   | j S r$   )r   r6   r,   r,   r-   r     s    zBasicConstraints.cac                 C  s   | j S r$   )r   r6   r,   r,   r-   r     s    zBasicConstraints.path_lengthr/   c                 C  s
   d | S )Nz:<BasicConstraints(ca={0.ca}, path_length={0.path_length})>r   r6   r,   r,   r-   ra     s    zBasicConstraints.__repr__rl   rn   c                 C  s&   t |tstS | j|jko$| j|jkS r$   )r%   r   rp   r   r   rq   r,   r,   r-   rr     s    
zBasicConstraints.__eq__r2   c                 C  s   t | j| jfS r$   )rt   r   r   r6   r,   r,   r-   ru     s    zBasicConstraints.__hash__r    c                 C  s
   t | S r$   rx   r6   r,   r,   r-   r&     s    zBasicConstraints.public_bytesN)rJ   rK   rL   r   ZBASIC_CONSTRAINTSrB   rE   rz   r   r   ra   rr   ru   r&   r,   r,   r,   r-   r     s   r   c                   @  sn   e Zd ZejZdddddZeddddZd	d
dddZ	ddddZ
ddddZddddZdS )DeltaCRLIndicatorr2   r?   rf   c                 C  s   t |tstd|| _d S rh   ri   rk   r,   r,   r-   rE     s    
zDeltaCRLIndicator.__init__r3   c                 C  s   | j S r$   rw   r6   r,   r,   r-   rg     s    zDeltaCRLIndicator.crl_numberrl   rm   rn   c                 C  s   t |tstS | j|jkS r$   )r%   r   rp   rg   rq   r,   r,   r-   rr     s    
zDeltaCRLIndicator.__eq__c                 C  s
   t | jS r$   rs   r6   r,   r,   r-   ru     s    zDeltaCRLIndicator.__hash__r/   c                 C  s   d| j  dS )Nz<DeltaCRLIndicator(crl_number=r`   rv   r6   r,   r,   r-   ra     s    zDeltaCRLIndicator.__repr__r    c                 C  s
   t | S r$   rx   r6   r,   r,   r-   r&     s    zDeltaCRLIndicator.public_bytesN)rJ   rK   rL   r   ZDELTA_CRL_INDICATORrB   rE   rz   rg   rr   ru   ra   r&   r,   r,   r,   r-   r     s   r   c                   @  sj   e Zd ZejZdddddZed\ZZ	Z
ddd	d
ZdddddZddddZddddZdS )CRLDistributionPoints"typing.Iterable[DistributionPoint]r?   distribution_pointsr#   c                 C  s,   t |}tdd |D s"td|| _d S )Nc                 s  s   | ]}t |tV  qd S r$   r%   DistributionPointr   r,   r,   r-   r     s    z1CRLDistributionPoints.__init__.<locals>.<genexpr>?distribution_points must be a list of DistributionPoint objectsrU   r   r]   _distribution_pointsr7   r   r,   r,   r-   rE     s    zCRLDistributionPoints.__init__r   r/   r3   c                 C  s   d| j  dS )Nz<CRLDistributionPoints(r`   r   r6   r,   r,   r-   ra     s    zCRLDistributionPoints.__repr__rl   rm   rn   c                 C  s   t |tstS | j|jkS r$   )r%   r   rp   r   rq   r,   r,   r-   rr     s    
zCRLDistributionPoints.__eq__r2   c                 C  s   t t| jS r$   rt   r   r   r6   r,   r,   r-   ru     s    zCRLDistributionPoints.__hash__r    c                 C  s
   t | S r$   rx   r6   r,   r,   r-   r&     s    z"CRLDistributionPoints.public_bytesN)rJ   rK   rL   r   ZCRL_DISTRIBUTION_POINTSrB   rE   r=   rb   rc   rd   ra   rr   ru   r&   r,   r,   r,   r-   r     s   
r   c                   @  sj   e Zd ZejZdddddZed\ZZ	Z
ddd	d
ZdddddZddddZddddZdS )FreshestCRLr   r?   r   c                 C  s,   t |}tdd |D s"td|| _d S )Nc                 s  s   | ]}t |tV  qd S r$   r   r   r,   r,   r-   r   &  s    z'FreshestCRL.__init__.<locals>.<genexpr>r   r   r   r,   r,   r-   rE   "  s    zFreshestCRL.__init__r   r/   r3   c                 C  s   d| j  dS )Nz<FreshestCRL(r`   r   r6   r,   r,   r-   ra   4  s    zFreshestCRL.__repr__rl   rm   rn   c                 C  s   t |tstS | j|jkS r$   )r%   r   rp   r   rq   r,   r,   r-   rr   7  s    
zFreshestCRL.__eq__r2   c                 C  s   t t| jS r$   r   r6   r,   r,   r-   ru   =  s    zFreshestCRL.__hash__r    c                 C  s
   t | S r$   rx   r6   r,   r,   r-   r&   @  s    zFreshestCRL.public_bytesN)rJ   rK   rL   r   ZFRESHEST_CRLrB   rE   r=   rb   rc   rd   ra   rr   ru   r&   r,   r,   r,   r-   r     s   
r   c                   @  s   e Zd ZddddddddZdd	d
dZdddddZdd	ddZedd	ddZedd	ddZ	edd	ddZ
edd	ddZdS )r   r|   *typing.Optional[RelativeDistinguishedName].typing.Optional[typing.FrozenSet[ReasonFlags]]r?   )	full_namerelative_namereasons
crl_issuerr#   c                 C  s   |r|rt d|s$|s$|s$t d|d k	rNt|}tdd |D sNtd|rdt|tsdtd|d k	rt|}tdd |D std|rt|trtd	d |D std
|rtj|kstj	|krt d|| _
|| _|| _|| _d S )NzOYou cannot provide both full_name and relative_name, at least one must be None.z?Either full_name, relative_name or crl_issuer must be provided.c                 s  s   | ]}t |tV  qd S r$   r   r   r,   r,   r-   r   Y  s     z-DistributionPoint.__init__.<locals>.<genexpr>z/full_name must be a list of GeneralName objectsz1relative_name must be a RelativeDistinguishedNamec                 s  s   | ]}t |tV  qd S r$   r   r   r,   r,   r-   r   f  s     z2crl_issuer must be None or a list of general namesc                 s  s   | ]}t |tV  qd S r$   r%   ReasonFlagsr   r,   r,   r-   r   m  s     z0reasons must be None or frozenset of ReasonFlagszLunspecified and remove_from_crl are not valid reasons in a DistributionPoint)r   rU   r   r]   r%   r   	frozensetr   unspecifiedremove_from_crl
_full_name_relative_name_reasons_crl_issuer)r7   r   r   r   r   r,   r,   r-   rE   E  sV    
zDistributionPoint.__init__r/   r3   c                 C  s
   d | S )Nz}<DistributionPoint(full_name={0.full_name}, relative_name={0.relative_name}, reasons={0.reasons}, crl_issuer={0.crl_issuer})>r   r6   r,   r,   r-   ra     s    zDistributionPoint.__repr__rl   rm   rn   c                 C  s>   t |tstS | j|jko<| j|jko<| j|jko<| j|jkS r$   )r%   r   rp   r   r   r   r   rq   r,   r,   r-   rr     s    



zDistributionPoint.__eq__r2   c                 C  sH   | j d k	rt| j }nd }| jd k	r0t| j}nd }t|| j| j|fS r$   )r   r   r   rt   r   r   )r7   fnr   r,   r,   r-   ru     s    

zDistributionPoint.__hash__r   c                 C  s   | j S r$   r   r6   r,   r,   r-   r     s    zDistributionPoint.full_namec                 C  s   | j S r$   r   r6   r,   r,   r-   r     s    zDistributionPoint.relative_namec                 C  s   | j S r$   )r   r6   r,   r,   r-   r     s    zDistributionPoint.reasonsc                 C  s   | j S r$   )r   r6   r,   r,   r-   r     s    zDistributionPoint.crl_issuerN)rJ   rK   rL   rE   ra   rr   ru   rz   r   r   r   r   r,   r,   r,   r-   r   D  s   :r   c                   @  s4   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdS )r   r   ZkeyCompromiseZcACompromiseZaffiliationChanged
supersededZcessationOfOperationZcertificateHoldZprivilegeWithdrawnZaACompromiseZremoveFromCRLN)rJ   rK   rL   r   key_compromiseca_compromiseaffiliation_changedr   cessation_of_operationcertificate_holdprivilege_withdrawnaa_compromiser   r,   r,   r,   r-   r     s   r   )                        r   r   r   r   r   r   r   r   c                   @  s   e Zd ZejZddddddZdddd	Zd
ddddZddddZ	e
ddddZe
ddddZddddZdS )PolicyConstraintsr}   r?   )require_explicit_policyinhibit_policy_mappingr#   c                 C  s\   |d k	rt |tstd|d k	r4t |ts4td|d krL|d krLtd|| _|| _d S )Nz>require_explicit_policy must be a non-negative integer or Nonez=inhibit_policy_mapping must be a non-negative integer or NonezSAt least one of require_explicit_policy and inhibit_policy_mapping must not be None)r%   r2   r]   r   _require_explicit_policy_inhibit_policy_mapping)r7   r   r   r,   r,   r-   rE     s(    
 
 zPolicyConstraints.__init__r/   r3   c                 C  s
   d | S )Nz{<PolicyConstraints(require_explicit_policy={0.require_explicit_policy}, inhibit_policy_mapping={0.inhibit_policy_mapping})>r   r6   r,   r,   r-   ra     s    zPolicyConstraints.__repr__rl   rm   rn   c                 C  s&   t |tstS | j|jko$| j|jkS r$   )r%   r   rp   r   r   rq   r,   r,   r-   rr   
  s
    

zPolicyConstraints.__eq__r2   c                 C  s   t | j| jfS r$   )rt   r   r   r6   r,   r,   r-   ru     s    
zPolicyConstraints.__hash__c                 C  s   | j S r$   )r   r6   r,   r,   r-   r     s    z)PolicyConstraints.require_explicit_policyc                 C  s   | j S r$   )r   r6   r,   r,   r-   r     s    z(PolicyConstraints.inhibit_policy_mappingr    c                 C  s
   t | S r$   rx   r6   r,   r,   r-   r&      s    zPolicyConstraints.public_bytesN)rJ   rK   rL   r   ZPOLICY_CONSTRAINTSrB   rE   ra   rr   ru   rz   r   r   r&   r,   r,   r,   r-   r     s   	r   c                   @  sj   e Zd ZejZdddddZed\ZZ	Z
ddd	d
ZdddddZddddZddddZdS )CertificatePoliciesz"typing.Iterable[PolicyInformation]r?   )policiesr#   c                 C  s,   t |}tdd |D s"td|| _d S )Nc                 s  s   | ]}t |tV  qd S r$   )r%   PolicyInformationr   r,   r,   r-   r   )  s     z/CertificatePolicies.__init__.<locals>.<genexpr>z;Every item in the policies list must be a PolicyInformation)rU   r   r]   	_policies)r7   r   r,   r,   r-   rE   '  s    zCertificatePolicies.__init__r   r/   r3   c                 C  s   d| j  dS )Nz<CertificatePolicies(r`   )r   r6   r,   r,   r-   ra   3  s    zCertificatePolicies.__repr__rl   rm   rn   c                 C  s   t |tstS | j|jkS r$   )r%   r   rp   r   rq   r,   r,   r-   rr   6  s    
zCertificatePolicies.__eq__r2   c                 C  s   t t| jS r$   )rt   r   r   r6   r,   r,   r-   ru   <  s    zCertificatePolicies.__hash__r    c                 C  s
   t | S r$   rx   r6   r,   r,   r-   r&   ?  s    z CertificatePolicies.public_bytesN)rJ   rK   rL   r   ZCERTIFICATE_POLICIESrB   rE   r=   rb   rc   rd   ra   rr   ru   r&   r,   r,   r,   r-   r   $  s   
r   c                   @  sn   e Zd ZddddddZddd	d
ZdddddZddddZeddddZeddddZ	dS )r   r   z?typing.Optional[typing.Iterable[typing.Union[str, UserNotice]]]r?   )policy_identifierpolicy_qualifiersr#   c                 C  sL   t |tstd|| _|d k	rBt|}tdd |D sBtd|| _d S )Nz-policy_identifier must be an ObjectIdentifierc                 s  s   | ]}t |ttfV  qd S r$   )r%   r/   
UserNoticer   r,   r,   r-   r   R  s    z-PolicyInformation.__init__.<locals>.<genexpr>zMpolicy_qualifiers must be a list of strings and/or UserNotice objects or None)r%   r   r]   _policy_identifierrU   r   _policy_qualifiers)r7   r   r   r,   r,   r-   rE   D  s    
zPolicyInformation.__init__r/   r3   c                 C  s
   d | S )Nze<PolicyInformation(policy_identifier={0.policy_identifier}, policy_qualifiers={0.policy_qualifiers})>r   r6   r,   r,   r-   ra   \  s    zPolicyInformation.__repr__rl   rm   rn   c                 C  s&   t |tstS | j|jko$| j|jkS r$   )r%   r   rp   r   r   rq   r,   r,   r-   rr   b  s
    

zPolicyInformation.__eq__r2   c                 C  s(   | j d k	rt| j }nd }t| j|fS r$   )r   r   rt   r   )r7   Zpqr,   r,   r-   ru   k  s
    
zPolicyInformation.__hash__c                 C  s   | j S r$   )r   r6   r,   r,   r-   r   u  s    z#PolicyInformation.policy_identifierz;typing.Optional[typing.List[typing.Union[str, UserNotice]]]c                 C  s   | j S r$   )r   r6   r,   r,   r-   r   y  s    z#PolicyInformation.policy_qualifiersN)
rJ   rK   rL   rE   ra   rr   ru   rz   r   r   r,   r,   r,   r-   r   C  s   	
r   c                   @  sn   e Zd ZddddddZddd	d
ZdddddZddddZeddddZeddddZ	dS )r   z typing.Optional[NoticeReference]typing.Optional[str]r?   )notice_referenceexplicit_textr#   c                 C  s&   |rt |tstd|| _|| _d S )Nz2notice_reference must be None or a NoticeReference)r%   NoticeReferencer]   _notice_reference_explicit_text)r7   r   r   r,   r,   r-   rE     s     zUserNotice.__init__r/   r3   c                 C  s
   d | S )NzV<UserNotice(notice_reference={0.notice_reference}, explicit_text={0.explicit_text!r})>r   r6   r,   r,   r-   ra     s    zUserNotice.__repr__rl   rm   rn   c                 C  s&   t |tstS | j|jko$| j|jkS r$   )r%   r   rp   r   r   rq   r,   r,   r-   rr     s
    

zUserNotice.__eq__r2   c                 C  s   t | j| jfS r$   )rt   r   r   r6   r,   r,   r-   ru     s    zUserNotice.__hash__c                 C  s   | j S r$   )r   r6   r,   r,   r-   r     s    zUserNotice.notice_referencec                 C  s   | j S r$   )r   r6   r,   r,   r-   r     s    zUserNotice.explicit_textN)
rJ   rK   rL   rE   ra   rr   ru   rz   r   r   r,   r,   r,   r-   r     s   	r   c                   @  sn   e Zd ZddddddZddd	d
ZdddddZddddZeddddZeddddZ	dS )r   r   ztyping.Iterable[int]r?   )organizationnotice_numbersr#   c                 C  s2   || _ t|}tdd |D s(td|| _d S )Nc                 s  s   | ]}t |tV  qd S r$   )r%   r2   r   r,   r,   r-   r     s     z+NoticeReference.__init__.<locals>.<genexpr>z)notice_numbers must be a list of integers)_organizationrU   r   r]   _notice_numbers)r7   r   r   r,   r,   r-   rE     s
    zNoticeReference.__init__r/   r3   c                 C  s
   d | S )NzU<NoticeReference(organization={0.organization!r}, notice_numbers={0.notice_numbers})>r   r6   r,   r,   r-   ra     s    zNoticeReference.__repr__rl   rm   rn   c                 C  s&   t |tstS | j|jko$| j|jkS r$   )r%   r   rp   r   r   rq   r,   r,   r-   rr     s
    

zNoticeReference.__eq__r2   c                 C  s   t | jt| jfS r$   )rt   r   r   r   r6   r,   r,   r-   ru     s    zNoticeReference.__hash__c                 C  s   | j S r$   )r   r6   r,   r,   r-   r     s    zNoticeReference.organizationztyping.List[int]c                 C  s   | j S r$   )r   r6   r,   r,   r-   r     s    zNoticeReference.notice_numbersN)
rJ   rK   rL   rE   ra   rr   ru   rz   r   r   r,   r,   r,   r-   r     s   	r   c                   @  sj   e Zd ZejZdddddZed\ZZ	Z
ddd	d
ZdddddZddddZddddZdS )ExtendedKeyUsage!typing.Iterable[ObjectIdentifier]r?   )usagesr#   c                 C  s,   t |}tdd |D s"td|| _d S )Nc                 s  s   | ]}t |tV  qd S r$   r%   r   r   r,   r,   r-   r     s     z,ExtendedKeyUsage.__init__.<locals>.<genexpr>z9Every item in the usages list must be an ObjectIdentifier)rU   r   r]   _usages)r7   r   r,   r,   r-   rE     s    zExtendedKeyUsage.__init__r   r/   r3   c                 C  s   d| j  dS )Nz<ExtendedKeyUsage(r`   )r   r6   r,   r,   r-   ra     s    zExtendedKeyUsage.__repr__rl   rm   rn   c                 C  s   t |tstS | j|jkS r$   )r%   r   rp   r   rq   r,   r,   r-   rr     s    
zExtendedKeyUsage.__eq__r2   c                 C  s   t t| jS r$   )rt   r   r   r6   r,   r,   r-   ru     s    zExtendedKeyUsage.__hash__r    c                 C  s
   t | S r$   rx   r6   r,   r,   r-   r&     s    zExtendedKeyUsage.public_bytesN)rJ   rK   rL   r   ZEXTENDED_KEY_USAGErB   rE   r=   rb   rc   rd   ra   rr   ru   r&   r,   r,   r,   r-   r     s   	r   c                   @  sL   e Zd ZejZdddddZdddd	Zd
dddZddddZ	dS )OCSPNoCheckrl   rm   rn   c                 C  s   t |tstS dS NT)r%   r   rp   rq   r,   r,   r-   rr     s    
zOCSPNoCheck.__eq__r2   r3   c                 C  s   t tS r$   )rt   r   r6   r,   r,   r-   ru     s    zOCSPNoCheck.__hash__r/   c                 C  s   dS )Nz<OCSPNoCheck()>r,   r6   r,   r,   r-   ra     s    zOCSPNoCheck.__repr__r    c                 C  s
   t | S r$   rx   r6   r,   r,   r-   r&      s    zOCSPNoCheck.public_bytesN)
rJ   rK   rL   r   ZOCSP_NO_CHECKrB   rr   ru   ra   r&   r,   r,   r,   r-   r     s
   r   c                   @  sL   e Zd ZejZdddddZdddd	Zd
dddZddddZ	dS )PrecertPoisonrl   rm   rn   c                 C  s   t |tstS dS r   )r%   r   rp   rq   r,   r,   r-   rr     s    
zPrecertPoison.__eq__r2   r3   c                 C  s   t tS r$   )rt   r   r6   r,   r,   r-   ru     s    zPrecertPoison.__hash__r/   c                 C  s   dS )Nz<PrecertPoison()>r,   r6   r,   r,   r-   ra     s    zPrecertPoison.__repr__r    c                 C  s
   t | S r$   rx   r6   r,   r,   r-   r&     s    zPrecertPoison.public_bytesN)
rJ   rK   rL   r   ZPRECERT_POISONrB   rr   ru   ra   r&   r,   r,   r,   r-   r     s
   r   c                   @  sj   e Zd ZejZdddddZed\ZZ	Z
ddd	d
ZdddddZddddZddddZdS )
TLSFeatureztyping.Iterable[TLSFeatureType]r?   )featuresr#   c                 C  s8   t |}tdd |D r&t|dkr.td|| _d S )Nc                 s  s   | ]}t |tV  qd S r$   )r%   TLSFeatureTyper   r,   r,   r-   r     s     z&TLSFeature.__init__.<locals>.<genexpr>r   z@features must be a list of elements from the TLSFeatureType enum)rU   r   r4   r]   	_features)r7   r   r,   r,   r-   rE     s    
zTLSFeature.__init__r  r/   r3   c                 C  s   d| j  dS )Nz<TLSFeature(features=r`   )r  r6   r,   r,   r-   ra   )  s    zTLSFeature.__repr__rl   rm   rn   c                 C  s   t |tstS | j|jkS r$   )r%   r   rp   r  rq   r,   r,   r-   rr   ,  s    
zTLSFeature.__eq__r2   c                 C  s   t t| jS r$   )rt   r   r  r6   r,   r,   r-   ru   2  s    zTLSFeature.__hash__r    c                 C  s
   t | S r$   rx   r6   r,   r,   r-   r&   5  s    zTLSFeature.public_bytesN)rJ   rK   rL   r   ZTLS_FEATURErB   rE   r=   rb   rc   rd   ra   rr   ru   r&   r,   r,   r,   r-   r     s   r   c                   @  s   e Zd ZdZdZdS )r  r      N)rJ   rK   rL   Zstatus_requestZstatus_request_v2r,   r,   r,   r-   r  9  s   r  c                 C  s   i | ]}|j |qS r,   r^   r   r,   r,   r-   
<dictcomp>D  s      r  c                   @  sn   e Zd ZejZdddddZdddd	Zd
ddddZddddZ	e
ddddZddddZdS )InhibitAnyPolicyr2   r?   )
skip_certsr#   c                 C  s,   t |tstd|dk r"td|| _d S )Nzskip_certs must be an integerr   z)skip_certs must be a non-negative integer)r%   r2   r]   r   _skip_certs)r7   r  r,   r,   r-   rE   J  s
    
zInhibitAnyPolicy.__init__r/   r3   c                 C  s   d| j  dS )Nz<InhibitAnyPolicy(skip_certs=r`   )r  r6   r,   r,   r-   ra   S  s    zInhibitAnyPolicy.__repr__rl   rm   rn   c                 C  s   t |tstS | j|jkS r$   )r%   r  rp   r  rq   r,   r,   r-   rr   V  s    
zInhibitAnyPolicy.__eq__c                 C  s
   t | jS r$   )rt   r  r6   r,   r,   r-   ru   \  s    zInhibitAnyPolicy.__hash__c                 C  s   | j S r$   )r  r6   r,   r,   r-   r  _  s    zInhibitAnyPolicy.skip_certsr    c                 C  s
   t | S r$   rx   r6   r,   r,   r-   r&   c  s    zInhibitAnyPolicy.public_bytesN)rJ   rK   rL   r   ZINHIBIT_ANY_POLICYrB   rE   ra   rr   ru   rz   r  r&   r,   r,   r,   r-   r  G  s   	r  c                   @  s  e Zd ZejZddddddddddd
ddZeddddZeddd	d
Z	eddddZ
eddddZeddddZeddddZeddddZeddddZeddddZddddZdddddZd dd!d"Zd#dd$d%Zd&S )'KeyUsagerm   r?   )
digital_signaturecontent_commitmentkey_enciphermentdata_enciphermentkey_agreementkey_cert_signcrl_signencipher_onlydecipher_onlyr#   c
           
      C  sN   |s|s|	rt d|| _|| _|| _|| _|| _|| _|| _|| _|	| _	d S )NzKencipher_only and decipher_only can only be true when key_agreement is true)
r   _digital_signature_content_commitment_key_encipherment_data_encipherment_key_agreement_key_cert_sign	_crl_sign_encipher_only_decipher_only)
r7   r
  r  r  r  r  r  r  r  r  r,   r,   r-   rE   j  s    zKeyUsage.__init__r3   c                 C  s   | j S r$   )r  r6   r,   r,   r-   r
    s    zKeyUsage.digital_signaturec                 C  s   | j S r$   )r  r6   r,   r,   r-   r    s    zKeyUsage.content_commitmentc                 C  s   | j S r$   )r  r6   r,   r,   r-   r    s    zKeyUsage.key_enciphermentc                 C  s   | j S r$   )r  r6   r,   r,   r-   r    s    zKeyUsage.data_enciphermentc                 C  s   | j S r$   )r  r6   r,   r,   r-   r    s    zKeyUsage.key_agreementc                 C  s   | j S r$   )r  r6   r,   r,   r-   r    s    zKeyUsage.key_cert_signc                 C  s   | j S r$   )r  r6   r,   r,   r-   r    s    zKeyUsage.crl_signc                 C  s   | j stdn| jS d S )Nz7encipher_only is undefined unless key_agreement is true)r  r   r  r6   r,   r,   r-   r    s
    zKeyUsage.encipher_onlyc                 C  s   | j stdn| jS d S )Nz7decipher_only is undefined unless key_agreement is true)r  r   r  r6   r,   r,   r-   r    s
    zKeyUsage.decipher_onlyr/   c                 C  s<   z| j }| j}W n tk
r,   d}d}Y nX d| ||S )NFa-  <KeyUsage(digital_signature={0.digital_signature}, content_commitment={0.content_commitment}, key_encipherment={0.key_encipherment}, data_encipherment={0.data_encipherment}, key_agreement={0.key_agreement}, key_cert_sign={0.key_cert_sign}, crl_sign={0.crl_sign}, encipher_only={1}, decipher_only={2})>)r  r  r   rP   )r7   r  r  r,   r,   r-   ra     s    

  zKeyUsage.__repr__rl   rn   c                 C  sz   t |tstS | j|jkox| j|jkox| j|jkox| j|jkox| j|jkox| j|jkox| j	|j	kox| j
|j
kox| j|jkS r$   )r%   r	  rp   r
  r  r  r  r  r  r  r  r  rq   r,   r,   r-   rr     s&    








zKeyUsage.__eq__r2   c              
   C  s,   t | j| j| j| j| j| j| j| j| j	f	S r$   )
rt   r
  r  r  r  r  r  r  r  r  r6   r,   r,   r-   ru     s    zKeyUsage.__hash__r    c                 C  s
   t | S r$   rx   r6   r,   r,   r-   r&     s    zKeyUsage.public_bytesN)rJ   rK   rL   r   Z	KEY_USAGErB   rE   rz   r
  r  r  r  r  r  r  r  r  ra   rr   ru   r&   r,   r,   r,   r-   r	  g  s0    r	  c                   @  s   e Zd ZejZddddddZdddd	d
ZdddddZdddddZ	dddddZ
ddddZddddZeddddZeddddZddd d!Zd"S )#NameConstraintsr|   r?   )permitted_subtreesexcluded_subtreesr#   c                 C  s   |d k	r@t |}|stdtdd |D s6td| | |d k	rt |}|s\tdtdd |D svtd| | |d kr|d krtd|| _|| _d S )	Nz3permitted_subtrees must be a non-empty list or Nonec                 s  s   | ]}t |tV  qd S r$   r   r   r,   r,   r-   r     s     z+NameConstraints.__init__.<locals>.<genexpr>z@permitted_subtrees must be a list of GeneralName objects or Nonez2excluded_subtrees must be a non-empty list or Nonec                 s  s   | ]}t |tV  qd S r$   r   r   r,   r,   r-   r     s     z?excluded_subtrees must be a list of GeneralName objects or NonezIAt least one of permitted_subtrees and excluded_subtrees must not be None)rU   r   r   r]   _validate_tree_permitted_subtrees_excluded_subtrees)r7   r  r  r,   r,   r-   rE     s8    

zNameConstraints.__init__rl   rm   rn   c                 C  s&   t |tstS | j|jko$| j|jkS r$   )r%   r  rp   r  r  rq   r,   r,   r-   rr     s
    

zNameConstraints.__eq__typing.Iterable[GeneralName])treer#   c                 C  s   |  | | | d S r$   )_validate_ip_name_validate_dns_namer7   r#  r,   r,   r-   r  "  s    
zNameConstraints._validate_treec                 C  s   t dd |D rtdd S )Nc                 s  s.   | ]&}t |to$t |jtjtjf V  qd S r$   )r%   r   r^   	ipaddressIPv4NetworkIPv6Networkr   namer,   r,   r-   r   '  s   
 
z4NameConstraints._validate_ip_name.<locals>.<genexpr>zGIPAddress name constraints must be an IPv4Network or IPv6Network object)anyr]   r&  r,   r,   r-   r$  &  s    z!NameConstraints._validate_ip_namec                 C  s   t dd |D rtdd S )Nc                 s  s"   | ]}t |tod |jkV  qdS )*N)r%   r   r^   r*  r,   r,   r-   r   4  s    z5NameConstraints._validate_dns_name.<locals>.<genexpr>zDDNSName name constraints must not contain the '*' wildcard character)r,  r   r&  r,   r,   r-   r%  3  s    z"NameConstraints._validate_dns_namer/   r3   c                 C  s
   d | S )Nze<NameConstraints(permitted_subtrees={0.permitted_subtrees}, excluded_subtrees={0.excluded_subtrees})>r   r6   r,   r,   r-   ra   <  s    zNameConstraints.__repr__r2   c                 C  s@   | j d k	rt| j }nd }| jd k	r0t| j}nd }t||fS r$   )r  r   r  rt   )r7   Zpsesr,   r,   r-   ru   B  s    

zNameConstraints.__hash__r   c                 C  s   | j S r$   )r   r6   r,   r,   r-   r  S  s    z"NameConstraints.permitted_subtreesc                 C  s   | j S r$   )r!  r6   r,   r,   r-   r  Y  s    z!NameConstraints.excluded_subtreesr    c                 C  s
   t | S r$   rx   r6   r,   r,   r-   r&   _  s    zNameConstraints.public_bytesN)rJ   rK   rL   r   ZNAME_CONSTRAINTSrB   rE   rr   r  r$  r%  ra   ru   rz   r  r  r&   r,   r,   r,   r-   r    s   *		r  c                   @  s   e Zd ZdddddddZeddd	d
ZeddddZeddddZddddZdddddZ	ddddZ
dS )	Extensionr   rm   r   r?   )rB   criticalr^   r#   c                 C  s:   t |tstdt |ts$td|| _|| _|| _d S )Nz2oid argument must be an ObjectIdentifier instance.z critical must be a boolean value)r%   r   r]   rm   _oid	_critical_value)r7   rB   r0  r^   r,   r,   r-   rE   d  s    

zExtension.__init__r3   c                 C  s   | j S r$   r1  r6   r,   r,   r-   rB   s  s    zExtension.oidc                 C  s   | j S r$   )r2  r6   r,   r,   r-   r0  w  s    zExtension.criticalc                 C  s   | j S r$   r3  r6   r,   r,   r-   r^   {  s    zExtension.valuer/   c                 C  s
   d | S )Nz@<Extension(oid={0.oid}, critical={0.critical}, value={0.value})>r   r6   r,   r,   r-   ra     s    zExtension.__repr__rl   rn   c                 C  s2   t |tstS | j|jko0| j|jko0| j|jkS r$   )r%   r/  rp   rB   r0  r^   rq   r,   r,   r-   rr     s    


zExtension.__eq__r2   c                 C  s   t | j| j| jfS r$   )rt   rB   r0  r^   r6   r,   r,   r-   ru     s    zExtension.__hash__N)rJ   rK   rL   rE   rz   rB   r0  r^   ra   rr   ru   r,   r,   r,   r-   r/  c  s   
r/  c                   @  s   e Zd ZdddddZed\ZZZej	ddd	d
dZ
ej	ddd	ddZ
ej	ddd	ddZ
ej	ddd	ddZ
ej	ddd	ddZ
ddd	ddZ
ddddZdd d!d"d#Zd$dd%d&Zd'S )(GeneralNamesr"  r?   general_namesr#   c                 C  s,   t |}tdd |D s"td|| _d S )Nc                 s  s   | ]}t |tV  qd S r$   r   r   r,   r,   r-   r     s     z(GeneralNames.__init__.<locals>.<genexpr>z^Every item in the general_names list must be an object conforming to the GeneralName interface)rU   r   r]   _general_namesr7   r8  r,   r,   r-   rE     s    zGeneralNames.__init__r9  ctyping.Union[typing.Type[DNSName], typing.Type[UniformResourceIdentifier], typing.Type[RFC822Name]]typing.List[str]typer#   c                 C  s   d S r$   r,   r7   r>  r,   r,   r-   get_values_for_type  s    	z GeneralNames.get_values_for_typetyping.Type[DirectoryName]typing.List[Name]c                 C  s   d S r$   r,   r?  r,   r,   r-   r@    s    typing.Type[RegisteredID]typing.List[ObjectIdentifier]c                 C  s   d S r$   r,   r?  r,   r,   r-   r@    s    typing.Type[IPAddress]typing.List[_IPAddressTypes]c                 C  s   d S r$   r,   r?  r,   r,   r-   r@    s    typing.Type[OtherName]typing.List[OtherName]c                 C  s   d S r$   r,   r?  r,   r,   r-   r@    s    typing.Union[typing.Type[DNSName], typing.Type[DirectoryName], typing.Type[IPAddress], typing.Type[OtherName], typing.Type[RFC822Name], typing.Type[RegisteredID], typing.Type[UniformResourceIdentifier]]typing.Union[typing.List[_IPAddressTypes], typing.List[str], typing.List[OtherName], typing.List[Name], typing.List[ObjectIdentifier]]c                   s0    fdd| D } t kr(dd |D S t|S )Nc                 3  s   | ]}t | r|V  qd S r$   )r%   r   ir>  r,   r-   r     s     
 z3GeneralNames.get_values_for_type.<locals>.<genexpr>c                 S  s   g | ]
}|j qS r,   r  rK  r,   r,   r-   
<listcomp>  s     z4GeneralNames.get_values_for_type.<locals>.<listcomp>)r   rU   )r7   r>  objsr,   rM  r-   r@    s    r/   r3   c                 C  s   d| j  dS )Nz<GeneralNames(r`   r9  r6   r,   r,   r-   ra     s    zGeneralNames.__repr__rl   rm   rn   c                 C  s   t |tstS | j|jkS r$   )r%   r6  rp   r9  rq   r,   r,   r-   rr     s    
zGeneralNames.__eq__r2   c                 C  s   t t| jS r$   )rt   r   r9  r6   r,   r,   r-   ru     s    zGeneralNames.__hash__N)rJ   rK   rL   rE   r=   rb   rc   rd   typingoverloadr@  ra   rr   ru   r,   r,   r,   r-   r6    s    

r6  c                   @  s   e Zd ZejZdddddZed\ZZ	Z
ejddd	d
dZejddd	ddZejddd	ddZejddd	ddZejddd	ddZddd	ddZddddZdd d!d"d#Zd$dd%d&Zd'dd(d)Zd*S )+SubjectAlternativeNamer"  r?   r7  c                 C  s   t || _d S r$   r6  r9  r:  r,   r,   r-   rE     s    zSubjectAlternativeName.__init__r9  r;  r<  r=  c                 C  s   d S r$   r,   r?  r,   r,   r-   r@    s    	z*SubjectAlternativeName.get_values_for_typerA  rB  c                 C  s   d S r$   r,   r?  r,   r,   r-   r@    s    rC  rD  c                 C  s   d S r$   r,   r?  r,   r,   r-   r@    s    rE  rF  c                 C  s   d S r$   r,   r?  r,   r,   r-   r@    s    rG  rH  c                 C  s   d S r$   r,   r?  r,   r,   r-   r@    s    rI  rJ  c                 C  s   | j |S r$   r9  r@  r?  r,   r,   r-   r@    s    r/   r3   c                 C  s   d| j  dS )Nz<SubjectAlternativeName(r`   rP  r6   r,   r,   r-   ra   -  s    zSubjectAlternativeName.__repr__rl   rm   rn   c                 C  s   t |tstS | j|jkS r$   )r%   rS  rp   r9  rq   r,   r,   r-   rr   0  s    
zSubjectAlternativeName.__eq__r2   c                 C  s
   t | jS r$   rt   r9  r6   r,   r,   r-   ru   6  s    zSubjectAlternativeName.__hash__r    c                 C  s
   t | S r$   rx   r6   r,   r,   r-   r&   9  s    z#SubjectAlternativeName.public_bytesN)rJ   rK   rL   r   ZSUBJECT_ALTERNATIVE_NAMErB   rE   r=   rb   rc   rd   rQ  rR  r@  ra   rr   ru   r&   r,   r,   r,   r-   rS    s$   
rS  c                   @  s   e Zd ZejZdddddZed\ZZ	Z
ejddd	d
dZejddd	ddZejddd	ddZejddd	ddZejddd	ddZddd	ddZddddZdd d!d"d#Zd$dd%d&Zd'dd(d)Zd*S )+IssuerAlternativeNamer"  r?   r7  c                 C  s   t || _d S r$   rT  r:  r,   r,   r-   rE   @  s    zIssuerAlternativeName.__init__r9  r;  r<  r=  c                 C  s   d S r$   r,   r?  r,   r,   r-   r@  E  s    	z)IssuerAlternativeName.get_values_for_typerA  rB  c                 C  s   d S r$   r,   r?  r,   r,   r-   r@  P  s    rC  rD  c                 C  s   d S r$   r,   r?  r,   r,   r-   r@  W  s    rE  rF  c                 C  s   d S r$   r,   r?  r,   r,   r-   r@  ^  s    rG  rH  c                 C  s   d S r$   r,   r?  r,   r,   r-   r@  d  s    rI  rJ  c                 C  s   | j |S r$   rU  r?  r,   r,   r-   r@  j  s    r/   r3   c                 C  s   d| j  dS )Nz<IssuerAlternativeName(r`   rP  r6   r,   r,   r-   ra   ~  s    zIssuerAlternativeName.__repr__rl   rm   rn   c                 C  s   t |tstS | j|jkS r$   )r%   rW  rp   r9  rq   r,   r,   r-   rr     s    
zIssuerAlternativeName.__eq__r2   c                 C  s
   t | jS r$   rV  r6   r,   r,   r-   ru     s    zIssuerAlternativeName.__hash__r    c                 C  s
   t | S r$   rx   r6   r,   r,   r-   r&     s    z"IssuerAlternativeName.public_bytesN)rJ   rK   rL   r   ZISSUER_ALTERNATIVE_NAMErB   rE   r=   rb   rc   rd   rQ  rR  r@  ra   rr   ru   r&   r,   r,   r,   r-   rW  =  s$   
rW  c                   @  s   e Zd ZejZdddddZed\ZZ	Z
ejddd	d
dZejddd	ddZejddd	ddZejddd	ddZejddd	ddZddd	ddZddddZdd d!d"d#Zd$dd%d&Zd'dd(d)Zd*S )+CertificateIssuerr"  r?   r7  c                 C  s   t || _d S r$   rT  r:  r,   r,   r-   rE     s    zCertificateIssuer.__init__r9  r;  r<  r=  c                 C  s   d S r$   r,   r?  r,   r,   r-   r@    s    	z%CertificateIssuer.get_values_for_typerA  rB  c                 C  s   d S r$   r,   r?  r,   r,   r-   r@    s    rC  rD  c                 C  s   d S r$   r,   r?  r,   r,   r-   r@    s    rE  rF  c                 C  s   d S r$   r,   r?  r,   r,   r-   r@    s    rG  rH  c                 C  s   d S r$   r,   r?  r,   r,   r-   r@    s    rI  rJ  c                 C  s   | j |S r$   rU  r?  r,   r,   r-   r@    s    r/   r3   c                 C  s   d| j  dS )Nz<CertificateIssuer(r`   rP  r6   r,   r,   r-   ra     s    zCertificateIssuer.__repr__rl   rm   rn   c                 C  s   t |tstS | j|jkS r$   )r%   rX  rp   r9  rq   r,   r,   r-   rr     s    
zCertificateIssuer.__eq__r2   c                 C  s
   t | jS r$   rV  r6   r,   r,   r-   ru     s    zCertificateIssuer.__hash__r    c                 C  s
   t | S r$   rx   r6   r,   r,   r-   r&     s    zCertificateIssuer.public_bytesN)rJ   rK   rL   r   ZCERTIFICATE_ISSUERrB   rE   r=   rb   rc   rd   rQ  rR  r@  ra   rr   ru   r&   r,   r,   r,   r-   rX    s$   
rX  c                   @  sn   e Zd ZejZdddddZdddd	Zd
ddddZddddZ	e
ddddZddddZdS )	CRLReasonr   r?   )reasonr#   c                 C  s   t |tstd|| _d S )Nz*reason must be an element from ReasonFlags)r%   r   r]   _reason)r7   rZ  r,   r,   r-   rE     s    
zCRLReason.__init__r/   r3   c                 C  s   d| j  dS )Nz<CRLReason(reason=r`   r[  r6   r,   r,   r-   ra     s    zCRLReason.__repr__rl   rm   rn   c                 C  s   t |tstS | j|jkS r$   )r%   rY  rp   rZ  rq   r,   r,   r-   rr     s    
zCRLReason.__eq__r2   c                 C  s
   t | jS r$   )rt   rZ  r6   r,   r,   r-   ru     s    zCRLReason.__hash__c                 C  s   | j S r$   r\  r6   r,   r,   r-   rZ    s    zCRLReason.reasonr    c                 C  s
   t | S r$   rx   r6   r,   r,   r-   r&     s    zCRLReason.public_bytesN)rJ   rK   rL   r   Z
CRL_REASONrB   rE   ra   rr   ru   rz   rZ  r&   r,   r,   r,   r-   rY    s   rY  c                   @  sn   e Zd ZejZdddddZdddd	Zd
ddddZddddZ	e
ddddZddddZdS )InvalidityDatezdatetime.datetimer?   )invalidity_dater#   c                 C  s   t |tjstd|| _d S )Nz+invalidity_date must be a datetime.datetime)r%   datetimer]   _invalidity_date)r7   r^  r,   r,   r-   rE     s    zInvalidityDate.__init__r/   r3   c                 C  s   d | jS )Nz$<InvalidityDate(invalidity_date={})>)rP   r`  r6   r,   r,   r-   ra     s    zInvalidityDate.__repr__rl   rm   rn   c                 C  s   t |tstS | j|jkS r$   )r%   r]  rp   r^  rq   r,   r,   r-   rr   
  s    
zInvalidityDate.__eq__r2   c                 C  s
   t | jS r$   )rt   r^  r6   r,   r,   r-   ru     s    zInvalidityDate.__hash__c                 C  s   | j S r$   )r`  r6   r,   r,   r-   r^    s    zInvalidityDate.invalidity_dater    c                 C  s
   t | S r$   rx   r6   r,   r,   r-   r&     s    zInvalidityDate.public_bytesN)rJ   rK   rL   r   ZINVALIDITY_DATErB   rE   ra   rr   ru   rz   r^  r&   r,   r,   r,   r-   r]    s   r]  c                   @  sj   e Zd ZejZdddddZed\ZZ	Z
ddd	d
ZddddZdddddZddddZdS ))PrecertificateSignedCertificateTimestamps+typing.Iterable[SignedCertificateTimestamp]r?   signed_certificate_timestampsr#   c                 C  s,   t |}tdd |D s"td|| _d S )Nc                 s  s   | ]}t |tV  qd S r$   r%   r   r   Zsctr,   r,   r-   r   %  s   zEPrecertificateSignedCertificateTimestamps.__init__.<locals>.<genexpr>YEvery item in the signed_certificate_timestamps list must be a SignedCertificateTimestamprU   r   r]   _signed_certificate_timestampsr7   rd  r,   r,   r-   rE     s    z2PrecertificateSignedCertificateTimestamps.__init__ri  r/   r3   c                 C  s   d t| S )Nz/<PrecertificateSignedCertificateTimestamps({})>)rP   rU   r6   r,   r,   r-   ra   3  s    z2PrecertificateSignedCertificateTimestamps.__repr__r2   c                 C  s   t t| jS r$   rt   r   ri  r6   r,   r,   r-   ru   8  s    z2PrecertificateSignedCertificateTimestamps.__hash__rl   rm   rn   c                 C  s   t |tstS | j|jkS r$   )r%   ra  rp   ri  rq   r,   r,   r-   rr   ;  s    
z0PrecertificateSignedCertificateTimestamps.__eq__r    c                 C  s
   t | S r$   rx   r6   r,   r,   r-   r&   D  s    z6PrecertificateSignedCertificateTimestamps.public_bytesN)rJ   rK   rL   r   Z%PRECERT_SIGNED_CERTIFICATE_TIMESTAMPSrB   rE   r=   rb   rc   rd   ra   ru   rr   r&   r,   r,   r,   r-   ra    s   
	ra  c                   @  sj   e Zd ZejZdddddZed\ZZ	Z
ddd	d
ZddddZdddddZddddZdS )SignedCertificateTimestampsrb  r?   rc  c                 C  s,   t |}tdd |D s"td|| _d S )Nc                 s  s   | ]}t |tV  qd S r$   re  rf  r,   r,   r-   r   R  s   z7SignedCertificateTimestamps.__init__.<locals>.<genexpr>rg  rh  rj  r,   r,   r-   rE   K  s    z$SignedCertificateTimestamps.__init__ri  r/   r3   c                 C  s   dt |  dS )Nz<SignedCertificateTimestamps(r`   )rU   r6   r,   r,   r-   ra   `  s    z$SignedCertificateTimestamps.__repr__r2   c                 C  s   t t| jS r$   rk  r6   r,   r,   r-   ru   c  s    z$SignedCertificateTimestamps.__hash__rl   rm   rn   c                 C  s   t |tstS | j|jkS r$   )r%   rl  rp   ri  rq   r,   r,   r-   rr   f  s    
z"SignedCertificateTimestamps.__eq__r    c                 C  s
   t | S r$   rx   r6   r,   r,   r-   r&   o  s    z(SignedCertificateTimestamps.public_bytesN)rJ   rK   rL   r   ZSIGNED_CERTIFICATE_TIMESTAMPSrB   rE   r=   rb   rc   rd   ra   ru   rr   r&   r,   r,   r,   r-   rl  H  s   
	rl  c                   @  sn   e Zd ZejZdddddZdddd	d
ZddddZddddZ	e
ddddZddddZdS )	OCSPNoncer    r?   )noncer#   c                 C  s   t |tstd|| _d S )Nznonce must be bytes)r%   r    r]   _nonce)r7   rn  r,   r,   r-   rE   v  s    
zOCSPNonce.__init__rl   rm   rn   c                 C  s   t |tstS | j|jkS r$   )r%   rm  rp   rn  rq   r,   r,   r-   rr   |  s    
zOCSPNonce.__eq__r2   r3   c                 C  s
   t | jS r$   )rt   rn  r6   r,   r,   r-   ru     s    zOCSPNonce.__hash__r/   c                 C  s   d| j dS )Nz<OCSPNonce(nonce=r`   )rn  r6   r,   r,   r-   ra     s    zOCSPNonce.__repr__c                 C  s   | j S r$   )ro  r6   r,   r,   r-   rn    s    zOCSPNonce.noncec                 C  s
   t | S r$   rx   r6   r,   r,   r-   r&     s    zOCSPNonce.public_bytesN)rJ   rK   rL   r   ZNONCErB   rE   rr   ru   ra   rz   rn  r&   r,   r,   r,   r-   rm  s  s   rm  c                   @  sj   e Zd ZejZdddddZdddd	d
ZddddZddddZ	ddddZ
ddddZdS )OCSPAcceptableResponsesr   r?   )	responsesr#   c                 C  s,   t |}tdd |D r"td|| _d S )Nc                 s  s   | ]}t |t V  qd S r$   r   )r   rr,   r,   r-   r     s     z3OCSPAcceptableResponses.__init__.<locals>.<genexpr>z'All responses must be ObjectIdentifiers)rU   r,  r]   
_responses)r7   rq  r,   r,   r-   rE     s    z OCSPAcceptableResponses.__init__rl   rm   rn   c                 C  s   t |tstS | j|jkS r$   )r%   rp  rp   rs  rq   r,   r,   r-   rr     s    
zOCSPAcceptableResponses.__eq__r2   r3   c                 C  s   t t| jS r$   )rt   r   rs  r6   r,   r,   r-   ru     s    z OCSPAcceptableResponses.__hash__r/   c                 C  s   d| j  dS )Nz#<OCSPAcceptableResponses(responses=r`   )rs  r6   r,   r,   r-   ra     s    z OCSPAcceptableResponses.__repr__z!typing.Iterator[ObjectIdentifier]c                 C  s
   t | jS r$   )r9   rs  r6   r,   r,   r-   rc     s    z OCSPAcceptableResponses.__iter__r    c                 C  s
   t | S r$   rx   r6   r,   r,   r-   r&     s    z$OCSPAcceptableResponses.public_bytesN)rJ   rK   rL   r   ZACCEPTABLE_RESPONSESrB   rE   rr   ru   ra   rc   r&   r,   r,   r,   r-   rp    s   rp  c                	   @  s   e Zd ZejZdddddddddddZd	d
ddZdddddZdd
ddZ	e
dd
ddZe
dd
ddZe
dd
ddZe
dd
ddZe
dd
ddZe
dd
dd Ze
dd
d!d"Zd#d
d$d%Zd&S )'IssuingDistributionPointr|   r   rm   r   r?   )r   r   only_contains_user_certsonly_contains_ca_certsonly_some_reasonsindirect_crlonly_contains_attribute_certsr#   c           	      C  s   |d k	rt |}|r8t|tr0tdd |D s8td|rXtj|ksPtj|krXtdt|t	rt|t	rt|t	rt|t	std||||g}t
dd |D dkrtd	t|||||||gstd
|| _|| _|| _|| _|| _|| _|| _d S )Nc                 s  s   | ]}t |tV  qd S r$   r   r   r,   r,   r-   r     s     z4IssuingDistributionPoint.__init__.<locals>.<genexpr>z:only_some_reasons must be None or frozenset of ReasonFlagszTunspecified and remove_from_crl are not valid reasons in an IssuingDistributionPointzuonly_contains_user_certs, only_contains_ca_certs, indirect_crl and only_contains_attribute_certs must all be boolean.c                 S  s   g | ]}|r|qS r,   r,   r   r,   r,   r-   rN    s      z5IssuingDistributionPoint.__init__.<locals>.<listcomp>r   zOnly one of the following can be set to True: only_contains_user_certs, only_contains_ca_certs, indirect_crl, only_contains_attribute_certszCannot create empty extension: if only_contains_user_certs, only_contains_ca_certs, indirect_crl, and only_contains_attribute_certs are all False, then either full_name, relative_name, or only_some_reasons must have a value.)rU   r%   r   r   r]   r   r   r   r   rm   r4   r,  _only_contains_user_certs_only_contains_ca_certs_indirect_crl_only_contains_attribute_certs_only_some_reasonsr   r   )	r7   r   r   ru  rv  rw  rx  ry  Zcrl_constraintsr,   r,   r-   rE     st    
z!IssuingDistributionPoint.__init__r/   r3   c                 C  s
   d | S )NaG  <IssuingDistributionPoint(full_name={0.full_name}, relative_name={0.relative_name}, only_contains_user_certs={0.only_contains_user_certs}, only_contains_ca_certs={0.only_contains_ca_certs}, only_some_reasons={0.only_some_reasons}, indirect_crl={0.indirect_crl}, only_contains_attribute_certs={0.only_contains_attribute_certs})>r   r6   r,   r,   r-   ra     s    z!IssuingDistributionPoint.__repr__rl   rn   c                 C  sb   t |tstS | j|jko`| j|jko`| j|jko`| j|jko`| j|jko`| j|jko`| j	|j	kS r$   )
r%   rt  rp   r   r   ru  rv  rw  rx  ry  rq   r,   r,   r-   rr     s"    





zIssuingDistributionPoint.__eq__r2   c                 C  s$   t | j| j| j| j| j| j| jfS r$   )rt   r   r   ru  rv  rw  rx  ry  r6   r,   r,   r-   ru     s    z!IssuingDistributionPoint.__hash__r   c                 C  s   | j S r$   r   r6   r,   r,   r-   r   +  s    z"IssuingDistributionPoint.full_namec                 C  s   | j S r$   r   r6   r,   r,   r-   r   /  s    z&IssuingDistributionPoint.relative_namec                 C  s   | j S r$   )rz  r6   r,   r,   r-   ru  3  s    z1IssuingDistributionPoint.only_contains_user_certsc                 C  s   | j S r$   )r{  r6   r,   r,   r-   rv  7  s    z/IssuingDistributionPoint.only_contains_ca_certsc                 C  s   | j S r$   )r~  r6   r,   r,   r-   rw  ;  s    z*IssuingDistributionPoint.only_some_reasonsc                 C  s   | j S r$   )r|  r6   r,   r,   r-   rx  A  s    z%IssuingDistributionPoint.indirect_crlc                 C  s   | j S r$   )r}  r6   r,   r,   r-   ry  E  s    z6IssuingDistributionPoint.only_contains_attribute_certsr    c                 C  s
   t | S r$   rx   r6   r,   r,   r-   r&   I  s    z%IssuingDistributionPoint.public_bytesN)rJ   rK   rL   r   ZISSUING_DISTRIBUTION_POINTrB   rE   ra   rr   ru   rz   r   r   ru  rv  rw  rx  ry  r&   r,   r,   r,   r-   rt    s(   Srt  c                   @  s   e Zd ZejZdddddddZedddd	Zeddd
dZ	eddddZ
ddddZdddddZddddZddddZdS )MSCertificateTemplater   r}   r?   )template_idmajor_versionminor_versionr#   c                 C  sT   t |tstd|| _|d k	r*t |tr<|d k	rDt |tsDtd|| _|| _d S )Noid must be an ObjectIdentifierz8major_version and minor_version must be integers or None)r%   r   r]   _template_idr2   _major_version_minor_version)r7   r  r  r  r,   r,   r-   rE   P  s     
zMSCertificateTemplate.__init__r3   c                 C  s   | j S r$   )r  r6   r,   r,   r-   r  d  s    z!MSCertificateTemplate.template_idc                 C  s   | j S r$   )r  r6   r,   r,   r-   r  h  s    z#MSCertificateTemplate.major_versionc                 C  s   | j S r$   )r  r6   r,   r,   r-   r  l  s    z#MSCertificateTemplate.minor_versionr/   c                 C  s   d| j  d| j d| j dS )Nz#<MSCertificateTemplate(template_id=z, major_version=z, minor_version=r`   )r  r  r  r6   r,   r,   r-   ra   p  s    zMSCertificateTemplate.__repr__rl   rm   rn   c                 C  s2   t |tstS | j|jko0| j|jko0| j|jkS r$   )r%   r  rp   r  r  r  rq   r,   r,   r-   rr   w  s    


zMSCertificateTemplate.__eq__r2   c                 C  s   t | j| j| jfS r$   )rt   r  r  r  r6   r,   r,   r-   ru     s    zMSCertificateTemplate.__hash__r    c                 C  s
   t | S r$   rx   r6   r,   r,   r-   r&     s    z"MSCertificateTemplate.public_bytesN)rJ   rK   rL   r   ZMS_CERTIFICATE_TEMPLATErB   rE   rz   r  r  r  ra   rr   ru   r&   r,   r,   r,   r-   r  M  s   
r  c                   @  s|   e Zd ZddddddZedddd	Zeddd
dZddddZdddddZddddZ	ddddZ
dS )r\   r   r    r?   )rB   r^   r#   c                 C  s"   t |tstd|| _|| _d S )Nr  )r%   r   r]   r1  r3  )r7   rB   r^   r,   r,   r-   rE     s    
zUnrecognizedExtension.__init__r3   c                 C  s   | j S r$   r4  r6   r,   r,   r-   rB     s    zUnrecognizedExtension.oidc                 C  s   | j S r$   r5  r6   r,   r,   r-   r^     s    zUnrecognizedExtension.valuer/   c                 C  s
   d | S )Nz7<UnrecognizedExtension(oid={0.oid}, value={0.value!r})>r   r6   r,   r,   r-   ra     s    zUnrecognizedExtension.__repr__rl   rm   rn   c                 C  s&   t |tstS | j|jko$| j|jkS r$   )r%   r\   rp   rB   r^   rq   r,   r,   r-   rr     s    
zUnrecognizedExtension.__eq__r2   c                 C  s   t | j| jfS r$   )rt   rB   r^   r6   r,   r,   r-   ru     s    zUnrecognizedExtension.__hash__c                 C  s   | j S r$   r  r6   r,   r,   r-   r&     s    z"UnrecognizedExtension.public_bytesN)rJ   rK   rL   rE   rz   rB   r^   ra   rr   ru   r&   r,   r,   r,   r-   r\     s   r\   )i
__future__r   abcr_  r(   r'  rQ  Zcryptographyr   Z"cryptography.hazmat.bindings._rustr   r   ry   Zcryptography.hazmat.primitivesr   r   Z,cryptography.hazmat.primitives.asymmetric.ecr   Z-cryptography.hazmat.primitives.asymmetric.rsar	   Z/cryptography.hazmat.primitives.asymmetric.typesr
   r   Z*cryptography.x509.certificate_transparencyr   Zcryptography.x509.general_namer   r   r   r   r   r   r   r   r   Zcryptography.x509.namer   r   Zcryptography.x509.oidr   r   r   r   TypeVarr   r.   r=   	Exceptionr>   rN   ABCMetar   rS   re   r{   r   r   r   r   r   r   r   r   r   Enumr   r   r   r   r   r   r   r   r   Z_REASON_BIT_MAPPINGZ_CRLREASONFLAGSr   r   r   r   r   r   r   r   r   r  Z_TLS_FEATURE_TYPE_TO_ENUMr  r	  r  Genericr/  r6  rS  rW  rX  rY  r]  ra  rl  rm  rp  rt  r  r\   r,   r,   r,   r-   <module>   s   ,  'l$!!(.%%o        A=+("  w0YQQQ-+ !;