U
    EZh                     @   s  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*ee+dddZ,e-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+d, d,e3Z;G d-d. d.e3Z<G d/d0 d0e3Z=G d1d2 d2e3Z>G d3d4 d4Z?G d5d6 d6ej@ZAeAjBeAjCeAjDeAjEeAjFeAjGeAjHeAjId7ZJeAjBd8eAjCd9eAjDd:eAjEd;eAjFd<eAjGd=eAjHd>eAjId?iZKG d@dA dAe3ZLG dBdC dCe3ZMG dDdE dEZNG dFdG dGZOG dHdI dIZPG dJdK dKe3ZQG dLdM dMe3ZRG dNdO dOe3ZSG dPdQ dQe3ZTG dRdS dSej@ZUdTdU eUD ZVG dVdW dWe3ZWG dXdY dYe3ZXG dZd[ d[e3ZYG d\d] d]ejZe* Z[G d^d_ d_Z\G d`da dae3Z]G dbdc dce3Z^G ddde dee3Z_G dfdg dge3Z`G dhdi die3ZaG djdk dke3ZbG dldm dme3ZcG dndo doe3ZdG dpdq dqe3ZeG drds dse3ZfdS )t    N)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	covariant
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   ZEncodingZDERZPublicFormatZPKCS1r   ZX962ZUncompressedPointZSubjectPublicKeyInfor   Zparse_spki_for_datahashlibsha1digest)r    dataZ
serialized r)   c/home/aprabhat/apps/x.techxrdev.in/venv/lib/python3.8/site-packages/cryptography/x509/extensions.py_key_identifier_from_public_key1   s     


r+   
field_namec                    s4   t d fdd} fdd} fdd}|||fS )Nr!   c                    s   t t|  S r"   )lengetattrselfr,   r)   r*   
len_methodJ   s    z*_make_sequence_methods.<locals>.len_methodc                    s   t t|  S r"   )iterr0   r1   r,   r)   r*   iter_methodM   s    z+_make_sequence_methods.<locals>.iter_methodc                    s   t |  | S r"   )r0   )r2   idxr,   r)   r*   getitem_methodP   s    z._make_sequence_methods.<locals>.getitem_method)int)r-   r3   r5   r7   r)   r,   r*   _make_sequence_methodsI   s    r9   c                       s&   e Zd Zeedd fddZ  ZS )DuplicateExtensionNmsgoidr!   c                    s   t  | || _d S r"   super__init__r=   r2   r<   r=   	__class__r)   r*   r@   W   s    zDuplicateExtension.__init____name__
__module____qualname__strr   r@   __classcell__r)   r)   rB   r*   r:   V   s   r:   c                       s&   e Zd Zeedd fddZ  ZS )ExtensionNotFoundNr;   c                    s   t  | || _d S r"   r>   rA   rB   r)   r*   r@   ]   s    zExtensionNotFound.__init__rD   r)   r)   rB   r*   rJ   \   s   rJ   c                   @   s*   e Zd ZU eje ed< edddZdS )r   r=   r.   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formatr1   r)   r)   r*   r$   e   s
    zExtensionType.public_bytesN)	rE   rF   rG   typingClassVarr   __annotations__bytesr$   r)   r)   r)   r*   r   b   s   
)	metaclassc                   @   sd   e Zd Zejd ddddZeddddZeje	 d	d
ddZ
ed\ZZZedddZdS )
ExtensionszExtension[ExtensionType]N)
extensionsr!   c                 C   s   t || _d S r"   )list_extensions)r2   rS   r)   r)   r*   r@   q   s    zExtensions.__init__)r=   r!   c                 C   s2   | D ]}|j |kr|  S qtd| d|d S )NNo  extension was found)r=   rJ   )r2   r=   extr)   r)   r*   get_extension_for_oidv   s    

z Extensions.get_extension_for_oidz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.rV   rW   )UnrecognizedExtension	TypeErrorr#   valuerJ   r=   )r2   rZ   rX   r)   r)   r*   get_extension_for_class   s    

 z"Extensions.get_extension_for_classrU   r.   c                 C   s   d| j  dS )Nz<Extensions()>)rU   r1   r)   r)   r*   __repr__   s    zExtensions.__repr__)rE   rF   rG   rM   Iterabler@   r   rY   Typer   r^   r9   __len____iter____getitem__rH   r`   r)   r)   r)   r*   rR   p   s   
rR   c                   @   sn   e Zd ZejZeddddZee	dddZ
edd	d
ZedddZeedddZedddZdS )	CRLNumberN
crl_numberr!   c                 C   s   t |tstd|| _d S Nzcrl_number must be an integerr#   r8   r\   _crl_numberr2   rh   r)   r)   r*   r@      s    
zCRLNumber.__init__otherr!   c                 C   s   t |tstS | j|jkS r"   )r#   rf   NotImplementedrh   r2   rn   r)   r)   r*   __eq__   s    
zCRLNumber.__eq__r.   c                 C   s
   t | jS r"   hashrh   r1   r)   r)   r*   __hash__   s    zCRLNumber.__hash__c                 C   s   d| j  dS )Nz<CRLNumber(r_   rh   r1   r)   r)   r*   r`      s    zCRLNumber.__repr__c                 C   s   | j S r"   rk   r1   r)   r)   r*   rh      s    zCRLNumber.crl_numberc                 C   s
   t | S r"   	rust_x509Zencode_extension_valuer1   r)   r)   r*   r$      s    zCRLNumber.public_bytes)rE   rF   rG   r   Z
CRL_NUMBERr=   r8   r@   objectboolrq   rt   rH   r`   propertyrh   rP   r$   r)   r)   r)   r*   rf      s   rf   c                   @   s   e Zd ZejZeje ejej	e
  eje ddddZeed dddZedd d	d
dZedddZeedddZedddZeeje dddZeejeje
  dddZeeje dddZedddZdS )AuthorityKeyIdentifierN)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)	
ValueErrorrT   allr\   r#   r8   _key_identifier_authority_cert_issuer_authority_cert_serial_number)r2   r}   r~   r   r)   r)   r*   r@      s,    
 zAuthorityKeyIdentifier.__init__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.   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})>rL   r1   r)   r)   r*   r`      s    zAuthorityKeyIdentifier.__repr__rm   c                 C   s2   t |tstS | j|jko0| j|jko0| j|jkS r"   )r#   r|   ro   r}   r~   r   rp   r)   r)   r*   rq      s    

zAuthorityKeyIdentifier.__eq__c                 C   s,   | j d krd }n
t| j }t| j|| jfS r"   )r~   tuplers   r}   r   )r2   Zacir)   r)   r*   rt     s    

zAuthorityKeyIdentifier.__hash__c                 C   s   | j S r"   )r   r1   r)   r)   r*   r}     s    z%AuthorityKeyIdentifier.key_identifierc                 C   s   | j S r"   )r   r1   r)   r)   r*   r~     s    z,AuthorityKeyIdentifier.authority_cert_issuerc                 C   s   | j S r"   )r   r1   r)   r)   r*   r     s    z3AuthorityKeyIdentifier.authority_cert_serial_numberc                 C   s
   t | S r"   rw   r1   r)   r)   r*   r$     s    z#AuthorityKeyIdentifier.public_bytes)rE   rF   rG   r   ZAUTHORITY_KEY_IDENTIFIERr=   rM   OptionalrP   ra   r   r8   r@   classmethodr	   r   r   rH   r`   ry   rz   rq   rt   r{   r}   Listr~   r   r$   r)   r)   r)   r*   r|      s2   &
		r|   c                   @   s   e Zd ZejZeddddZee	d dddZ
eedd	d
ZeedddZedddZeedddZedddZedddZdS )r   N)r'   r!   c                 C   s
   || _ d S r"   Z_digest)r2   r'   r)   r)   r*   r@   #  s    zSubjectKeyIdentifier.__init__r   c                 C   s   | t |S r"   r   )r   r    r)   r)   r*   from_public_key&  s    z$SubjectKeyIdentifier.from_public_keyr.   c                 C   s   | j S r"   r   r1   r)   r)   r*   r'   ,  s    zSubjectKeyIdentifier.digestc                 C   s   | j S r"   r   r1   r)   r)   r*   r}   0  s    z#SubjectKeyIdentifier.key_identifierc                 C   s   d| j dS )Nz<SubjectKeyIdentifier(digest=r_   r   r1   r)   r)   r*   r`   4  s    zSubjectKeyIdentifier.__repr__rm   c                 C   s   t |tstS t| j|jS r"   )r#   r   ro   r   Zbytes_eqr'   rp   r)   r)   r*   rq   7  s    
zSubjectKeyIdentifier.__eq__c                 C   s
   t | jS r"   )rs   r'   r1   r)   r)   r*   rt   =  s    zSubjectKeyIdentifier.__hash__c                 C   s
   t | S r"   rw   r1   r)   r)   r*   r$   @  s    z!SubjectKeyIdentifier.public_bytes)rE   rF   rG   r   ZSUBJECT_KEY_IDENTIFIERr=   rP   r@   r   r
   r   r{   r'   r}   rH   r`   ry   rz   rq   r8   rt   r$   r)   r)   r)   r*   r      s   r   c                   @   sp   e Zd ZejZejd ddddZe	d\Z
ZZeddd	Zeed
ddZedddZedddZdS )AuthorityInformationAccessAccessDescriptionN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#   r   r   r)   r)   r*   r   K  s     z6AuthorityInformationAccess.__init__.<locals>.<genexpr>@Every item in the descriptions list must be an AccessDescriptionrT   r   r\   _descriptionsr2   r   r)   r)   r*   r@   G  s    z#AuthorityInformationAccess.__init__r   r.   c                 C   s   d| j  dS )Nz<AuthorityInformationAccess(r_   r   r1   r)   r)   r*   r`   U  s    z#AuthorityInformationAccess.__repr__rm   c                 C   s   t |tstS | j|jkS r"   )r#   r   ro   r   rp   r)   r)   r*   rq   X  s    
z!AuthorityInformationAccess.__eq__c                 C   s   t t| jS r"   rs   r   r   r1   r)   r)   r*   rt   ^  s    z#AuthorityInformationAccess.__hash__c                 C   s
   t | S r"   rw   r1   r)   r)   r*   r$   a  s    z'AuthorityInformationAccess.public_bytes)rE   rF   rG   r   ZAUTHORITY_INFORMATION_ACCESSr=   rM   ra   r@   r9   rc   rd   re   rH   r`   ry   rz   rq   r8   rt   rP   r$   r)   r)   r)   r*   r   D  s   r   c                   @   sp   e Zd ZejZejd ddddZe	d\Z
ZZeddd	Zeed
ddZedddZedddZdS )SubjectInformationAccessr   Nr   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   l  s     z4SubjectInformationAccess.__init__.<locals>.<genexpr>r   r   r   r)   r)   r*   r@   h  s    z!SubjectInformationAccess.__init__r   r.   c                 C   s   d| j  dS )Nz<SubjectInformationAccess(r_   r   r1   r)   r)   r*   r`   v  s    z!SubjectInformationAccess.__repr__rm   c                 C   s   t |tstS | j|jkS r"   )r#   r   ro   r   rp   r)   r)   r*   rq   y  s    
zSubjectInformationAccess.__eq__c                 C   s   t t| jS r"   r   r1   r)   r)   r*   rt     s    z!SubjectInformationAccess.__hash__c                 C   s
   t | S r"   rw   r1   r)   r)   r*   r$     s    z%SubjectInformationAccess.public_bytes)rE   rF   rG   r   ZSUBJECT_INFORMATION_ACCESSr=   rM   ra   r@   r9   rc   rd   re   rH   r`   ry   rz   rq   r8   rt   rP   r$   r)   r)   r)   r*   r   e  s   r   c                   @   sn   e Zd ZeeddddZedddZee	dd	d
Z
edddZeedddZeedddZdS )r   N)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)r2   r   r   r)   r)   r*   r@     s    

zAccessDescription.__init__r.   c                 C   s
   d | S )NzY<AccessDescription(access_method={0.access_method}, access_location={0.access_location})>r   r1   r)   r)   r*   r`     s    zAccessDescription.__repr__rm   c                 C   s&   t |tstS | j|jko$| j|jkS r"   )r#   r   ro   r   r   rp   r)   r)   r*   rq     s
    

zAccessDescription.__eq__c                 C   s   t | j| jfS r"   )rs   r   r   r1   r)   r)   r*   rt     s    zAccessDescription.__hash__c                 C   s   | j S r"   )r   r1   r)   r)   r*   r     s    zAccessDescription.access_methodc                 C   s   | j S r"   )r   r1   r)   r)   r*   r     s    z!AccessDescription.access_location)rE   rF   rG   r   r   r@   rH   r`   ry   rz   rq   r8   rt   r{   r   r   r)   r)   r)   r*   r     s    	r   c                   @   s   e Zd ZejZeeje	 ddddZ
eedddZeeje	 ddd	Zedd
dZeedddZe	dddZedddZdS )BasicConstraintsN)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#   rz   r\   r   r8   _ca_path_length)r2   r   r   r)   r)   r*   r@     s    
zBasicConstraints.__init__r.   c                 C   s   | j S r"   )r   r1   r)   r)   r*   r     s    zBasicConstraints.cac                 C   s   | j S r"   )r   r1   r)   r)   r*   r     s    zBasicConstraints.path_lengthc                 C   s
   d | S )Nz:<BasicConstraints(ca={0.ca}, path_length={0.path_length})>r   r1   r)   r)   r*   r`     s    zBasicConstraints.__repr__rm   c                 C   s&   t |tstS | j|jko$| j|jkS r"   )r#   r   ro   r   r   rp   r)   r)   r*   rq     s    
zBasicConstraints.__eq__c                 C   s   t | j| jfS r"   )rs   r   r   r1   r)   r)   r*   rt     s    zBasicConstraints.__hash__c                 C   s
   t | S r"   rw   r1   r)   r)   r*   r$     s    zBasicConstraints.public_bytes)rE   rF   rG   r   ZBASIC_CONSTRAINTSr=   rz   rM   r   r8   r@   r{   r   r   rH   r`   ry   rq   rt   rP   r$   r)   r)   r)   r*   r     s   r   c                   @   sn   e Zd ZejZeddddZeedddZ	e
edd	d
ZedddZedddZedddZdS )DeltaCRLIndicatorNrg   c                 C   s   t |tstd|| _d S ri   rj   rl   r)   r)   r*   r@     s    
zDeltaCRLIndicator.__init__r.   c                 C   s   | j S r"   rv   r1   r)   r)   r*   rh     s    zDeltaCRLIndicator.crl_numberrm   c                 C   s   t |tstS | j|jkS r"   )r#   r   ro   rh   rp   r)   r)   r*   rq     s    
zDeltaCRLIndicator.__eq__c                 C   s
   t | jS r"   rr   r1   r)   r)   r*   rt     s    zDeltaCRLIndicator.__hash__c                 C   s   d| j  dS )Nz<DeltaCRLIndicator(crl_number=r_   ru   r1   r)   r)   r*   r`     s    zDeltaCRLIndicator.__repr__c                 C   s
   t | S r"   rw   r1   r)   r)   r*   r$     s    zDeltaCRLIndicator.public_bytes)rE   rF   rG   r   ZDELTA_CRL_INDICATORr=   r8   r@   r{   rh   ry   rz   rq   rt   rH   r`   rP   r$   r)   r)   r)   r*   r     s   r   c                   @   sp   e Zd ZejZejd ddddZe	d\Z
ZZeddd	Zeed
ddZedddZedddZdS )CRLDistributionPointsDistributionPointN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#   r   r   r)   r)   r*   r      s    z1CRLDistributionPoints.__init__.<locals>.<genexpr>?distribution_points must be a list of DistributionPoint objectsrT   r   r\   _distribution_pointsr2   r   r)   r)   r*   r@     s    zCRLDistributionPoints.__init__r   r.   c                 C   s   d| j  dS )Nz<CRLDistributionPoints(r_   r   r1   r)   r)   r*   r`     s    zCRLDistributionPoints.__repr__rm   c                 C   s   t |tstS | j|jkS r"   )r#   r   ro   r   rp   r)   r)   r*   rq     s    
zCRLDistributionPoints.__eq__c                 C   s   t t| jS r"   rs   r   r   r1   r)   r)   r*   rt     s    zCRLDistributionPoints.__hash__c                 C   s
   t | S r"   rw   r1   r)   r)   r*   r$     s    z"CRLDistributionPoints.public_bytes)rE   rF   rG   r   ZCRL_DISTRIBUTION_POINTSr=   rM   ra   r@   r9   rc   rd   re   rH   r`   ry   rz   rq   r8   rt   rP   r$   r)   r)   r)   r*   r     s   
r   c                   @   sp   e Zd ZejZejd ddddZe	d\Z
ZZeddd	Zeed
ddZedddZedddZdS )FreshestCRLr   Nr   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*   r@   !  s    zFreshestCRL.__init__r   r.   c                 C   s   d| j  dS )Nz<FreshestCRL(r_   r   r1   r)   r)   r*   r`   3  s    zFreshestCRL.__repr__rm   c                 C   s   t |tstS | j|jkS r"   )r#   r   ro   r   rp   r)   r)   r*   rq   6  s    
zFreshestCRL.__eq__c                 C   s   t t| jS r"   r   r1   r)   r)   r*   rt   <  s    zFreshestCRL.__hash__c                 C   s
   t | S r"   rw   r1   r)   r)   r*   r$   ?  s    zFreshestCRL.public_bytes)rE   rF   rG   r   ZFRESHEST_CRLr=   rM   ra   r@   r9   rc   rd   re   rH   r`   ry   rz   rq   r8   rt   rP   r$   r)   r)   r)   r*   r     s   
r   c                   @   s   e Zd Zejeje  eje ejejd  ejeje  ddddZ	e
dddZeed	d
dZedddZeejeje  dddZeeje dddZeejejd  dddZeejeje  dddZdS )r   ReasonFlagsN)	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   X  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   e  s     z2crl_issuer must be None or a list of general namesc                 s   s   | ]}t |tV  qd S r"   r#   r   r   r)   r)   r*   r   l  s     z0reasons must be None or frozenset of ReasonFlagszLunspecified and remove_from_crl are not valid reasons in a DistributionPoint)r   rT   r   r\   r#   r   	frozensetr   unspecifiedremove_from_crl
_full_name_relative_name_reasons_crl_issuer)r2   r   r   r   r   r)   r)   r*   r@   D  sV    
zDistributionPoint.__init__r.   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   r1   r)   r)   r*   r`   ~  s    zDistributionPoint.__repr__rm   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   ro   r   r   r   r   rp   r)   r)   r*   rq     s    



zDistributionPoint.__eq__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   rs   r   r   )r2   fnr   r)   r)   r*   rt     s    

zDistributionPoint.__hash__c                 C   s   | j S r"   r   r1   r)   r)   r*   r     s    zDistributionPoint.full_namec                 C   s   | j S r"   r   r1   r)   r)   r*   r     s    zDistributionPoint.relative_namec                 C   s   | j S r"   )r   r1   r)   r)   r*   r     s    zDistributionPoint.reasonsc                 C   s   | j S r"   )r   r1   r)   r)   r*   r     s    zDistributionPoint.crl_issuer)rE   rF   rG   rM   r   ra   r   r   	FrozenSetr@   rH   r`   ry   rz   rq   r8   rt   r{   r   r   r   r   r   r)   r)   r)   r*   r   C  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)rE   rF   rG   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eje eje ddddZ	e
dddZeedd	d
ZedddZeeje dddZeeje dddZedddZdS )PolicyConstraintsN)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#   r8   r\   r   _require_explicit_policy_inhibit_policy_mapping)r2   r   r   r)   r)   r*   r@     s(    
 
 zPolicyConstraints.__init__r.   c                 C   s
   d | S )Nz{<PolicyConstraints(require_explicit_policy={0.require_explicit_policy}, inhibit_policy_mapping={0.inhibit_policy_mapping})>r   r1   r)   r)   r*   r`     s    zPolicyConstraints.__repr__rm   c                 C   s&   t |tstS | j|jko$| j|jkS r"   )r#   r   ro   r   r   rp   r)   r)   r*   rq   	  s
    

zPolicyConstraints.__eq__c                 C   s   t | j| jfS r"   )rs   r   r   r1   r)   r)   r*   rt     s    
zPolicyConstraints.__hash__c                 C   s   | j S r"   )r   r1   r)   r)   r*   r     s    z)PolicyConstraints.require_explicit_policyc                 C   s   | j S r"   )r   r1   r)   r)   r*   r     s    z(PolicyConstraints.inhibit_policy_mappingc                 C   s
   t | S r"   rw   r1   r)   r)   r*   r$     s    zPolicyConstraints.public_bytes)rE   rF   rG   r   ZPOLICY_CONSTRAINTSr=   rM   r   r8   r@   rH   r`   ry   rz   rq   rt   r{   r   r   rP   r$   r)   r)   r)   r*   r     s   	r   c                   @   sp   e Zd ZejZejd ddddZe	d\Z
ZZeddd	Zeed
ddZedddZedddZdS )CertificatePoliciesPolicyInformationN)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#   r   r   r)   r)   r*   r   (  s     z/CertificatePolicies.__init__.<locals>.<genexpr>z;Every item in the policies list must be a PolicyInformation)rT   r   r\   	_policies)r2   r   r)   r)   r*   r@   &  s    zCertificatePolicies.__init__r   r.   c                 C   s   d| j  dS )Nz<CertificatePolicies(r_   )r   r1   r)   r)   r*   r`   2  s    zCertificatePolicies.__repr__rm   c                 C   s   t |tstS | j|jkS r"   )r#   r   ro   r   rp   r)   r)   r*   rq   5  s    
zCertificatePolicies.__eq__c                 C   s   t t| jS r"   )rs   r   r   r1   r)   r)   r*   rt   ;  s    zCertificatePolicies.__hash__c                 C   s
   t | S r"   rw   r1   r)   r)   r*   r$   >  s    z CertificatePolicies.public_bytes)rE   rF   rG   r   ZCERTIFICATE_POLICIESr=   rM   ra   r@   r9   rc   rd   re   rH   r`   ry   rz   rq   r8   rt   rP   r$   r)   r)   r)   r*   r   #  s   
r   c                   @   s   e Zd Zeejejejedf   ddddZ	edddZ
eed	d
dZedddZeedddZeejejejedf   dddZdS )r   
UserNoticeN)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#   rH   r   r   r)   r)   r*   r   Q  s    z-PolicyInformation.__init__.<locals>.<genexpr>zMpolicy_qualifiers must be a list of strings and/or UserNotice objects or None)r#   r   r\   _policy_identifierrT   r   _policy_qualifiers)r2   r   r   r)   r)   r*   r@   C  s    
zPolicyInformation.__init__r.   c                 C   s
   d | S )Nze<PolicyInformation(policy_identifier={0.policy_identifier}, policy_qualifiers={0.policy_qualifiers})>r   r1   r)   r)   r*   r`   [  s    zPolicyInformation.__repr__rm   c                 C   s&   t |tstS | j|jko$| j|jkS r"   )r#   r   ro   r   r   rp   r)   r)   r*   rq   a  s
    

zPolicyInformation.__eq__c                 C   s(   | j d k	rt| j }nd }t| j|fS r"   )r   r   rs   r   )r2   Zpqr)   r)   r*   rt   j  s
    
zPolicyInformation.__hash__c                 C   s   | j S r"   )r   r1   r)   r)   r*   r   t  s    z#PolicyInformation.policy_identifierc                 C   s   | j S r"   )r   r1   r)   r)   r*   r   x  s    z#PolicyInformation.policy_qualifiers)rE   rF   rG   r   rM   r   ra   UnionrH   r@   r`   ry   rz   rq   r8   rt   r{   r   r   r   r)   r)   r)   r*   r   B  s   	
r   c                   @   s   e Zd Zejd eje ddddZedddZee	d	d
dZ
edddZeejd dddZeeje dddZdS )r   NoticeReferenceN)notice_referenceexplicit_textr!   c                 C   s&   |rt |tstd|| _|| _d S )Nz2notice_reference must be None or a NoticeReference)r#   r   r\   _notice_reference_explicit_text)r2   r   r   r)   r)   r*   r@     s     zUserNotice.__init__r.   c                 C   s
   d | S )NzV<UserNotice(notice_reference={0.notice_reference}, explicit_text={0.explicit_text!r})>r   r1   r)   r)   r*   r`     s    zUserNotice.__repr__rm   c                 C   s&   t |tstS | j|jko$| j|jkS r"   )r#   r   ro   r   r   rp   r)   r)   r*   rq     s
    

zUserNotice.__eq__c                 C   s   t | j| jfS r"   )rs   r   r   r1   r)   r)   r*   rt     s    zUserNotice.__hash__c                 C   s   | j S r"   )r   r1   r)   r)   r*   r     s    zUserNotice.notice_referencec                 C   s   | j S r"   )r   r1   r)   r)   r*   r     s    zUserNotice.explicit_text)rE   rF   rG   rM   r   rH   r@   r`   ry   rz   rq   r8   rt   r{   r   r   r)   r)   r)   r*   r     s   	r   c                   @   s   e Zd Zeje eje ddddZedddZ	e
edd	d
ZedddZeeje dddZeeje dddZdS )r   N)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#   r8   r   r)   r)   r*   r     s     z+NoticeReference.__init__.<locals>.<genexpr>z)notice_numbers must be a list of integers)_organizationrT   r   r\   _notice_numbers)r2   r   r   r)   r)   r*   r@     s
    zNoticeReference.__init__r.   c                 C   s
   d | S )NzU<NoticeReference(organization={0.organization!r}, notice_numbers={0.notice_numbers})>r   r1   r)   r)   r*   r`     s    zNoticeReference.__repr__rm   c                 C   s&   t |tstS | j|jko$| j|jkS r"   )r#   r   ro   r   r   rp   r)   r)   r*   rq     s
    

zNoticeReference.__eq__c                 C   s   t | jt| jfS r"   )rs   r   r   r   r1   r)   r)   r*   rt     s    zNoticeReference.__hash__c                 C   s   | j S r"   )r   r1   r)   r)   r*   r     s    zNoticeReference.organizationc                 C   s   | j S r"   )r   r1   r)   r)   r*   r     s    zNoticeReference.notice_numbers)rE   rF   rG   rM   r   rH   ra   r8   r@   r`   ry   rz   rq   rt   r{   r   r   r   r)   r)   r)   r*   r     s   	r   c                   @   sp   e Zd ZejZeje ddddZ	e
d\ZZZedddZeed	d
dZedddZedddZdS )ExtendedKeyUsageN)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)rT   r   r\   _usages)r2   r   r)   r)   r*   r@     s    zExtendedKeyUsage.__init__r   r.   c                 C   s   d| j  dS )Nz<ExtendedKeyUsage(r_   )r   r1   r)   r)   r*   r`     s    zExtendedKeyUsage.__repr__rm   c                 C   s   t |tstS | j|jkS r"   )r#   r   ro   r   rp   r)   r)   r*   rq     s    
zExtendedKeyUsage.__eq__c                 C   s   t t| jS r"   )rs   r   r   r1   r)   r)   r*   rt     s    zExtendedKeyUsage.__hash__c                 C   s
   t | S r"   rw   r1   r)   r)   r*   r$     s    zExtendedKeyUsage.public_bytes)rE   rF   rG   r   ZEXTENDED_KEY_USAGEr=   rM   ra   r   r@   r9   rc   rd   re   rH   r`   ry   rz   rq   r8   rt   rP   r$   r)   r)   r)   r*   r     s   	r   c                   @   sL   e Zd ZejZeedddZe	dddZ
edddZedd	d
ZdS )OCSPNoCheckrm   c                 C   s   t |tstS dS NT)r#   r   ro   rp   r)   r)   r*   rq     s    
zOCSPNoCheck.__eq__r.   c                 C   s   t tS r"   )rs   r   r1   r)   r)   r*   rt     s    zOCSPNoCheck.__hash__c                 C   s   dS )Nz<OCSPNoCheck()>r)   r1   r)   r)   r*   r`     s    zOCSPNoCheck.__repr__c                 C   s
   t | S r"   rw   r1   r)   r)   r*   r$     s    zOCSPNoCheck.public_bytesN)rE   rF   rG   r   ZOCSP_NO_CHECKr=   ry   rz   rq   r8   rt   rH   r`   rP   r$   r)   r)   r)   r*   r     s
   r   c                   @   sL   e Zd ZejZeedddZe	dddZ
edddZedd	d
ZdS )PrecertPoisonrm   c                 C   s   t |tstS dS r   )r#   r   ro   rp   r)   r)   r*   rq     s    
zPrecertPoison.__eq__r.   c                 C   s   t tS r"   )rs   r   r1   r)   r)   r*   rt     s    zPrecertPoison.__hash__c                 C   s   dS )Nz<PrecertPoison()>r)   r1   r)   r)   r*   r`     s    zPrecertPoison.__repr__c                 C   s
   t | S r"   rw   r1   r)   r)   r*   r$     s    zPrecertPoison.public_bytesN)rE   rF   rG   r   ZPRECERT_POISONr=   ry   rz   rq   r8   rt   rH   r`   rP   r$   r)   r)   r)   r*   r     s
   r   c                   @   sp   e Zd ZejZejd ddddZe	d\Z
ZZeddd	Zeed
ddZedddZedddZdS )
TLSFeatureTLSFeatureTypeN)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#   r   r   r)   r)   r*   r     s     z&TLSFeature.__init__.<locals>.<genexpr>r   z@features must be a list of elements from the TLSFeatureType enum)rT   r   r/   r\   	_features)r2   r   r)   r)   r*   r@     s    
zTLSFeature.__init__r   r.   c                 C   s   d| j  dS )Nz<TLSFeature(features=r_   )r   r1   r)   r)   r*   r`   (  s    zTLSFeature.__repr__rm   c                 C   s   t |tstS | j|jkS r"   )r#   r   ro   r   rp   r)   r)   r*   rq   +  s    
zTLSFeature.__eq__c                 C   s   t t| jS r"   )rs   r   r   r1   r)   r)   r*   rt   1  s    zTLSFeature.__hash__c                 C   s
   t | S r"   rw   r1   r)   r)   r*   r$   4  s    zTLSFeature.public_bytes)rE   rF   rG   r   ZTLS_FEATUREr=   rM   ra   r@   r9   rc   rd   re   rH   r`   ry   rz   rq   r8   rt   rP   r$   r)   r)   r)   r*   r     s   r   c                   @   s   e Zd ZdZdZdS )r   r      N)rE   rF   rG   Zstatus_requestZstatus_request_v2r)   r)   r)   r*   r   8  s   r   c                 C   s   i | ]}|j |qS r)   r]   r   r)   r)   r*   
<dictcomp>C  s      r   c                   @   sn   e Zd ZejZeddddZedddZ	e
edd	d
ZedddZeedddZedddZdS )InhibitAnyPolicyN)
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#   r8   r\   r   _skip_certs)r2   r  r)   r)   r*   r@   I  s
    
zInhibitAnyPolicy.__init__r.   c                 C   s   d| j  dS )Nz<InhibitAnyPolicy(skip_certs=r_   )r  r1   r)   r)   r*   r`   R  s    zInhibitAnyPolicy.__repr__rm   c                 C   s   t |tstS | j|jkS r"   )r#   r  ro   r  rp   r)   r)   r*   rq   U  s    
zInhibitAnyPolicy.__eq__c                 C   s
   t | jS r"   )rs   r  r1   r)   r)   r*   rt   [  s    zInhibitAnyPolicy.__hash__c                 C   s   | j S r"   )r  r1   r)   r)   r*   r  ^  s    zInhibitAnyPolicy.skip_certsc                 C   s
   t | S r"   rw   r1   r)   r)   r*   r$   b  s    zInhibitAnyPolicy.public_bytes)rE   rF   rG   r   ZINHIBIT_ANY_POLICYr=   r8   r@   rH   r`   ry   rz   rq   rt   r{   r  rP   r$   r)   r)   r)   r*   r  F  s   	r  c                   @   s  e Zd ZejZeeeeeeeeedd
ddZeedddZ	eeddd	Z
eedd
dZeedddZeedddZeedddZeedddZeedddZeedddZedddZeedddZedddZeddd ZdS )!KeyUsageN)
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)
r2   r  r  r  r  r	  r
  r  r  r  r)   r)   r*   r@   i  s    zKeyUsage.__init__r.   c                 C   s   | j S r"   )r  r1   r)   r)   r*   r    s    zKeyUsage.digital_signaturec                 C   s   | j S r"   )r  r1   r)   r)   r*   r    s    zKeyUsage.content_commitmentc                 C   s   | j S r"   )r  r1   r)   r)   r*   r    s    zKeyUsage.key_enciphermentc                 C   s   | j S r"   )r  r1   r)   r)   r*   r    s    zKeyUsage.data_enciphermentc                 C   s   | j S r"   )r  r1   r)   r)   r*   r	    s    zKeyUsage.key_agreementc                 C   s   | j S r"   )r  r1   r)   r)   r*   r
    s    zKeyUsage.key_cert_signc                 C   s   | j S r"   )r  r1   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  r1   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  r1   r)   r)   r*   r    s
    zKeyUsage.decipher_onlyc                 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   rL   )r2   r  r  r)   r)   r*   r`     s    

  zKeyUsage.__repr__rm   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  ro   r  r  r  r  r	  r
  r  r  r  rp   r)   r)   r*   rq     s&    








zKeyUsage.__eq__c              
   C   s,   t | j| j| j| j| j| j| j| j| j	f	S r"   )
rs   r  r  r  r  r	  r
  r  r  r  r1   r)   r)   r*   rt     s    zKeyUsage.__hash__c                 C   s
   t | S r"   rw   r1   r)   r)   r*   r$     s    zKeyUsage.public_bytes)rE   rF   rG   r   Z	KEY_USAGEr=   rz   r@   r{   r  r  r  r  r	  r
  r  r  r  rH   r`   ry   rq   r8   rt   rP   r$   r)   r)   r)   r*   r  f  sD   r  c                   @   s   e Zd ZejZejeje	  ejeje	  ddddZ
eedddZeje	 ddd	d
Zeje	 ddddZeje	 ddddZedddZedddZeejeje	  dddZeejeje	  dddZedddZdS )NameConstraintsN)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)rT   r   r   r\   _validate_tree_permitted_subtrees_excluded_subtrees)r2   r  r  r)   r)   r*   r@     s8    

zNameConstraints.__init__rm   c                 C   s&   t |tstS | j|jko$| j|jkS r"   )r#   r  ro   r  r  rp   r)   r)   r*   rq     s
    

zNameConstraints.__eq__)treer!   c                 C   s   |  | | | d S r"   )_validate_ip_name_validate_dns_namer2   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   3  s    z5NameConstraints._validate_dns_name.<locals>.<genexpr>zDDNSName name constraints must not contain the '*' wildcard character)r&  r   r   r)   r)   r*   r  2  s    z"NameConstraints._validate_dns_namer.   c                 C   s
   d | S )Nze<NameConstraints(permitted_subtrees={0.permitted_subtrees}, excluded_subtrees={0.excluded_subtrees})>r   r1   r)   r)   r*   r`   ;  s    zNameConstraints.__repr__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  rs   )r2   Zpsesr)   r)   r*   rt   A  s    

zNameConstraints.__hash__c                 C   s   | j S r"   )r  r1   r)   r)   r*   r  R  s    z"NameConstraints.permitted_subtreesc                 C   s   | j S r"   )r  r1   r)   r)   r*   r  X  s    z!NameConstraints.excluded_subtreesc                 C   s
   t | S r"   rw   r1   r)   r)   r*   r$   ^  s    zNameConstraints.public_bytes)rE   rF   rG   r   ZNAME_CONSTRAINTSr=   rM   r   ra   r   r@   ry   rz   rq   r  r  r  rH   r`   r8   rt   r{   r   r  r  rP   r$   r)   r)   r)   r*   r    s$   *		r  c                   @   s   e Zd ZeeeddddZeedddZeeddd	Z	eedd
dZ
edddZeedddZedddZdS )	ExtensionN)r=   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\   rz   _oid	_critical_value)r2   r=   r*  r]   r)   r)   r*   r@   c  s    

zExtension.__init__r.   c                 C   s   | j S r"   r+  r1   r)   r)   r*   r=   r  s    zExtension.oidc                 C   s   | j S r"   )r,  r1   r)   r)   r*   r*  v  s    zExtension.criticalc                 C   s   | j S r"   r-  r1   r)   r)   r*   r]   z  s    zExtension.valuec                 C   s
   d | S )Nz@<Extension(oid={0.oid}, critical={0.critical}, value={0.value})>r   r1   r)   r)   r*   r`   ~  s    zExtension.__repr__rm   c                 C   s2   t |tstS | j|jko0| j|jko0| j|jkS r"   )r#   r)  ro   r=   r*  r]   rp   r)   r)   r*   rq     s    


zExtension.__eq__c                 C   s   t | j| j| jfS r"   )rs   r=   r*  r]   r1   r)   r)   r*   rt     s    zExtension.__hash__)rE   rF   rG   r   rz   r   r@   r{   r=   r*  r]   rH   r`   ry   rq   r8   rt   r)   r)   r)   r*   r)  b  s     
r)  c                	   @   s  e Zd Zeje ddddZed\ZZ	Z
ejejeje eje eje f eje dddZejeje eje dd	dZejeje eje dd
dZejeje eje dddZejeje eje dddZejeje eje eje eje eje eje eje f ejeje eje eje eje eje f dddZedddZeedddZedddZ dS )GeneralNamesN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)rT   r   r\   _general_namesr2   r2  r)   r)   r*   r@     s    zGeneralNames.__init__r3  typer!   c                 C   s   d S r"   r)   r2   r6  r)   r)   r*   get_values_for_type  s    	z GeneralNames.get_values_for_typec                 C   s   d S r"   r)   r7  r)   r)   r*   r8    s    c                 C   s   d S r"   r)   r7  r)   r)   r*   r8    s    c                 C   s   d S r"   r)   r7  r)   r)   r*   r8    s    c                 C   s   d S r"   r)   r7  r)   r)   r*   r8    s    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r6  r)   r*   r     s     
 z3GeneralNames.get_values_for_type.<locals>.<genexpr>c                 S   s   g | ]
}|j qS r)   r   r9  r)   r)   r*   
<listcomp>  s     z4GeneralNames.get_values_for_type.<locals>.<listcomp>)r   rT   )r2   r6  Zobjsr)   r;  r*   r8    s    r.   c                 C   s   d| j  dS )Nz<GeneralNames(r_   r3  r1   r)   r)   r*   r`     s    zGeneralNames.__repr__rm   c                 C   s   t |tstS | j|jkS r"   )r#   r0  ro   r3  rp   r)   r)   r*   rq     s    
zGeneralNames.__eq__c                 C   s   t t| jS r"   )rs   r   r3  r1   r)   r)   r*   rt     s    zGeneralNames.__hash__)!rE   rF   rG   rM   ra   r   r@   r9   rc   rd   re   overloadr   rb   r   r   r   r   rH   r8  r   r   r   r   r   r   r   r`   ry   rz   rq   r8   rt   r)   r)   r)   r*   r0    sb   

	r0  c                	   @   s  e Zd ZejZeje ddddZ	e
d\ZZZejejeje eje eje f eje dddZejeje eje dd	dZejeje eje dd
dZejeje eje dddZejeje eje dddZejeje eje eje eje eje eje eje f ejeje eje eje eje eje f dddZedddZee dddZ!e"dddZ#e$dddZ%dS )SubjectAlternativeNameNr1  c                 C   s   t || _d S r"   r0  r3  r4  r)   r)   r*   r@     s    zSubjectAlternativeName.__init__r3  r5  c                 C   s   d S r"   r)   r7  r)   r)   r*   r8    s    	z*SubjectAlternativeName.get_values_for_typec                 C   s   d S r"   r)   r7  r)   r)   r*   r8    s    c                 C   s   d S r"   r)   r7  r)   r)   r*   r8    s    c                 C   s   d S r"   r)   r7  r)   r)   r*   r8    s    c                 C   s   d S r"   r)   r7  r)   r)   r*   r8    s    c                 C   s   | j |S r"   r3  r8  r7  r)   r)   r*   r8    s    r.   c                 C   s   d| j  dS )Nz<SubjectAlternativeName(r_   r=  r1   r)   r)   r*   r`   ,  s    zSubjectAlternativeName.__repr__rm   c                 C   s   t |tstS | j|jkS r"   )r#   r?  ro   r3  rp   r)   r)   r*   rq   /  s    
zSubjectAlternativeName.__eq__c                 C   s
   t | jS r"   rs   r3  r1   r)   r)   r*   rt   5  s    zSubjectAlternativeName.__hash__c                 C   s
   t | S r"   rw   r1   r)   r)   r*   r$   8  s    z#SubjectAlternativeName.public_bytes)&rE   rF   rG   r   ZSUBJECT_ALTERNATIVE_NAMEr=   rM   ra   r   r@   r9   rc   rd   re   r>  r   rb   r   r   r   r   rH   r8  r   r   r   r   r   r   r   r`   ry   rz   rq   r8   rt   rP   r$   r)   r)   r)   r*   r?    sf   
	r?  c                	   @   s  e Zd ZejZeje ddddZ	e
d\ZZZejejeje eje eje f eje dddZejeje eje dd	dZejeje eje dd
dZejeje eje dddZejeje eje dddZejeje eje eje eje eje eje eje f ejeje eje eje eje eje f dddZedddZee dddZ!e"dddZ#e$dddZ%dS )IssuerAlternativeNameNr1  c                 C   s   t || _d S r"   r@  r4  r)   r)   r*   r@   ?  s    zIssuerAlternativeName.__init__r3  r5  c                 C   s   d S r"   r)   r7  r)   r)   r*   r8  D  s    	z)IssuerAlternativeName.get_values_for_typec                 C   s   d S r"   r)   r7  r)   r)   r*   r8  O  s    c                 C   s   d S r"   r)   r7  r)   r)   r*   r8  V  s    c                 C   s   d S r"   r)   r7  r)   r)   r*   r8  ]  s    c                 C   s   d S r"   r)   r7  r)   r)   r*   r8  c  s    c                 C   s   | j |S r"   rA  r7  r)   r)   r*   r8  i  s    r.   c                 C   s   d| j  dS )Nz<IssuerAlternativeName(r_   r=  r1   r)   r)   r*   r`   }  s    zIssuerAlternativeName.__repr__rm   c                 C   s   t |tstS | j|jkS r"   )r#   rC  ro   r3  rp   r)   r)   r*   rq     s    
zIssuerAlternativeName.__eq__c                 C   s
   t | jS r"   rB  r1   r)   r)   r*   rt     s    zIssuerAlternativeName.__hash__c                 C   s
   t | S r"   rw   r1   r)   r)   r*   r$     s    z"IssuerAlternativeName.public_bytes)&rE   rF   rG   r   ZISSUER_ALTERNATIVE_NAMEr=   rM   ra   r   r@   r9   rc   rd   re   r>  r   rb   r   r   r   r   rH   r8  r   r   r   r   r   r   r   r`   ry   rz   rq   r8   rt   rP   r$   r)   r)   r)   r*   rC  <  sf   
	rC  c                	   @   s  e Zd ZejZeje ddddZ	e
d\ZZZejejeje eje eje f eje dddZejeje eje dd	dZejeje eje dd
dZejeje eje dddZejeje eje dddZejeje eje eje eje eje eje eje f ejeje eje eje eje eje f dddZedddZee dddZ!e"dddZ#e$dddZ%dS )CertificateIssuerNr1  c                 C   s   t || _d S r"   r@  r4  r)   r)   r*   r@     s    zCertificateIssuer.__init__r3  r5  c                 C   s   d S r"   r)   r7  r)   r)   r*   r8    s    	z%CertificateIssuer.get_values_for_typec                 C   s   d S r"   r)   r7  r)   r)   r*   r8    s    c                 C   s   d S r"   r)   r7  r)   r)   r*   r8    s    c                 C   s   d S r"   r)   r7  r)   r)   r*   r8    s    c                 C   s   d S r"   r)   r7  r)   r)   r*   r8    s    c                 C   s   | j |S r"   rA  r7  r)   r)   r*   r8    s    r.   c                 C   s   d| j  dS )Nz<CertificateIssuer(r_   r=  r1   r)   r)   r*   r`     s    zCertificateIssuer.__repr__rm   c                 C   s   t |tstS | j|jkS r"   )r#   rD  ro   r3  rp   r)   r)   r*   rq     s    
zCertificateIssuer.__eq__c                 C   s
   t | jS r"   rB  r1   r)   r)   r*   rt     s    zCertificateIssuer.__hash__c                 C   s
   t | S r"   rw   r1   r)   r)   r*   r$     s    zCertificateIssuer.public_bytes)&rE   rF   rG   r   ZCERTIFICATE_ISSUERr=   rM   ra   r   r@   r9   rc   rd   re   r>  r   rb   r   r   r   r   rH   r8  r   r   r   r   r   r   r   r`   ry   rz   rq   r8   rt   rP   r$   r)   r)   r)   r*   rD    sf   
	rD  c                   @   sn   e Zd ZejZeddddZedddZ	e
edd	d
ZedddZeedddZedddZdS )	CRLReasonN)reasonr!   c                 C   s   t |tstd|| _d S )Nz*reason must be an element from ReasonFlags)r#   r   r\   _reason)r2   rF  r)   r)   r*   r@     s    
zCRLReason.__init__r.   c                 C   s   d| j  dS )Nz<CRLReason(reason=r_   rG  r1   r)   r)   r*   r`     s    zCRLReason.__repr__rm   c                 C   s   t |tstS | j|jkS r"   )r#   rE  ro   rF  rp   r)   r)   r*   rq     s    
zCRLReason.__eq__c                 C   s
   t | jS r"   )rs   rF  r1   r)   r)   r*   rt     s    zCRLReason.__hash__c                 C   s   | j S r"   rH  r1   r)   r)   r*   rF    s    zCRLReason.reasonc                 C   s
   t | S r"   rw   r1   r)   r)   r*   r$     s    zCRLReason.public_bytes)rE   rF   rG   r   Z
CRL_REASONr=   r   r@   rH   r`   ry   rz   rq   r8   rt   r{   rF  rP   r$   r)   r)   r)   r*   rE    s   rE  c                   @   sr   e Zd ZejZejddddZedddZ	e
edd	d
ZedddZeejdddZedddZdS )InvalidityDateN)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)r2   rJ  r)   r)   r*   r@     s    zInvalidityDate.__init__r.   c                 C   s   d | jS )Nz$<InvalidityDate(invalidity_date={})>)rL   rL  r1   r)   r)   r*   r`     s    zInvalidityDate.__repr__rm   c                 C   s   t |tstS | j|jkS r"   )r#   rI  ro   rJ  rp   r)   r)   r*   rq   	  s    
zInvalidityDate.__eq__c                 C   s
   t | jS r"   )rs   rJ  r1   r)   r)   r*   rt     s    zInvalidityDate.__hash__c                 C   s   | j S r"   )rL  r1   r)   r)   r*   rJ    s    zInvalidityDate.invalidity_datec                 C   s
   t | S r"   rw   r1   r)   r)   r*   r$     s    zInvalidityDate.public_bytes)rE   rF   rG   r   ZINVALIDITY_DATEr=   rK  r@   rH   r`   ry   rz   rq   r8   rt   r{   rJ  rP   r$   r)   r)   r)   r*   rI    s   rI  c                   @   sp   e Zd ZejZeje ddddZ	e
d\ZZZedddZedd	d
ZeedddZedddZdS ))PrecertificateSignedCertificateTimestampsN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rT   r   r\   _signed_certificate_timestampsr2   rO  r)   r)   r*   r@     s    z2PrecertificateSignedCertificateTimestamps.__init__rT  r.   c                 C   s   d t| S )Nz/<PrecertificateSignedCertificateTimestamps({})>)rL   rT   r1   r)   r)   r*   r`   2  s    z2PrecertificateSignedCertificateTimestamps.__repr__c                 C   s   t t| jS r"   rs   r   rT  r1   r)   r)   r*   rt   7  s    z2PrecertificateSignedCertificateTimestamps.__hash__rm   c                 C   s   t |tstS | j|jkS r"   )r#   rM  ro   rT  rp   r)   r)   r*   rq   :  s    
z0PrecertificateSignedCertificateTimestamps.__eq__c                 C   s
   t | S r"   rw   r1   r)   r)   r*   r$   C  s    z6PrecertificateSignedCertificateTimestamps.public_bytes)rE   rF   rG   r   Z%PRECERT_SIGNED_CERTIFICATE_TIMESTAMPSr=   rM   ra   r   r@   r9   rc   rd   re   rH   r`   r8   rt   ry   rz   rq   rP   r$   r)   r)   r)   r*   rM    s   
	rM  c                   @   sp   e Zd ZejZeje ddddZ	e
d\ZZZedddZedd	d
ZeedddZedddZdS )SignedCertificateTimestampsNrN  c                 C   s,   t |}tdd |D s"td|| _d S )Nc                 s   s   | ]}t |tV  qd S r"   rP  rQ  r)   r)   r*   r   Q  s   z7SignedCertificateTimestamps.__init__.<locals>.<genexpr>rR  rS  rU  r)   r)   r*   r@   J  s    z$SignedCertificateTimestamps.__init__rT  r.   c                 C   s   dt |  dS )Nz<SignedCertificateTimestamps(r_   )rT   r1   r)   r)   r*   r`   _  s    z$SignedCertificateTimestamps.__repr__c                 C   s   t t| jS r"   rV  r1   r)   r)   r*   rt   b  s    z$SignedCertificateTimestamps.__hash__rm   c                 C   s   t |tstS | j|jkS r"   )r#   rW  ro   rT  rp   r)   r)   r*   rq   e  s    
z"SignedCertificateTimestamps.__eq__c                 C   s
   t | S r"   rw   r1   r)   r)   r*   r$   n  s    z(SignedCertificateTimestamps.public_bytes)rE   rF   rG   r   ZSIGNED_CERTIFICATE_TIMESTAMPSr=   rM   ra   r   r@   r9   rc   rd   re   rH   r`   r8   rt   ry   rz   rq   rP   r$   r)   r)   r)   r*   rW  G  s   
	rW  c                   @   sn   e Zd ZejZeddddZee	dddZ
edd	d
ZedddZeedddZedddZdS )	OCSPNonceN)noncer!   c                 C   s   t |tstd|| _d S )Nznonce must be bytes)r#   rP   r\   _nonce)r2   rY  r)   r)   r*   r@   u  s    
zOCSPNonce.__init__rm   c                 C   s   t |tstS | j|jkS r"   )r#   rX  ro   rY  rp   r)   r)   r*   rq   {  s    
zOCSPNonce.__eq__r.   c                 C   s
   t | jS r"   )rs   rY  r1   r)   r)   r*   rt     s    zOCSPNonce.__hash__c                 C   s   d| j dS )Nz<OCSPNonce(nonce=r_   )rY  r1   r)   r)   r*   r`     s    zOCSPNonce.__repr__c                 C   s   | j S r"   )rZ  r1   r)   r)   r*   rY    s    zOCSPNonce.noncec                 C   s
   t | S r"   rw   r1   r)   r)   r*   r$     s    zOCSPNonce.public_bytes)rE   rF   rG   r   ZNONCEr=   rP   r@   ry   rz   rq   r8   rt   rH   r`   r{   rY  r$   r)   r)   r)   r*   rX  r  s   rX  c                	   @   s"  e Zd ZejZejeje	  eje
 eeejeje  eeddddZedddZeedd	d
ZedddZeejeje	  dddZeeje
 dddZeedddZeedddZeejeje  dddZeedddZeedddZedddZdS )IssuingDistributionPointN)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*   r<    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.)rT   r#   r   r   r\   r   r   r   r   rz   r/   r&  _only_contains_user_certs_only_contains_ca_certs_indirect_crl_only_contains_attribute_certs_only_some_reasonsr   r   )	r2   r   r   r\  r]  r^  r_  r`  Zcrl_constraintsr)   r)   r*   r@     st    
z!IssuingDistributionPoint.__init__r.   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   r1   r)   r)   r*   r`     s    z!IssuingDistributionPoint.__repr__rm   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#   r[  ro   r   r   r\  r]  r^  r_  r`  rp   r)   r)   r*   rq     s"    





zIssuingDistributionPoint.__eq__c                 C   s$   t | j| j| j| j| j| j| jfS r"   )rs   r   r   r\  r]  r^  r_  r`  r1   r)   r)   r*   rt      s    z!IssuingDistributionPoint.__hash__c                 C   s   | j S r"   r   r1   r)   r)   r*   r     s    z"IssuingDistributionPoint.full_namec                 C   s   | j S r"   r   r1   r)   r)   r*   r     s    z&IssuingDistributionPoint.relative_namec                 C   s   | j S r"   )ra  r1   r)   r)   r*   r\    s    z1IssuingDistributionPoint.only_contains_user_certsc                 C   s   | j S r"   )rb  r1   r)   r)   r*   r]    s    z/IssuingDistributionPoint.only_contains_ca_certsc                 C   s   | j S r"   )re  r1   r)   r)   r*   r^    s    z*IssuingDistributionPoint.only_some_reasonsc                 C   s   | j S r"   )rc  r1   r)   r)   r*   r_  #  s    z%IssuingDistributionPoint.indirect_crlc                 C   s   | j S r"   )rd  r1   r)   r)   r*   r`  '  s    z6IssuingDistributionPoint.only_contains_attribute_certsc                 C   s
   t | S r"   rw   r1   r)   r)   r*   r$   +  s    z%IssuingDistributionPoint.public_bytes) rE   rF   rG   r   ZISSUING_DISTRIBUTION_POINTr=   rM   r   ra   r   r   rz   r   r   r@   rH   r`   ry   rq   r8   rt   r{   r   r   r   r\  r]  r^  r_  r`  rP   r$   r)   r)   r)   r*   r[    s:   Sr[  c                   @   s|   e Zd ZeeddddZeedddZeeddd	Ze	dd
dZ
eedddZedddZedddZdS )r[   N)r=   r]   r!   c                 C   s"   t |tstd|| _|| _d S )Nzoid must be an ObjectIdentifier)r#   r   r\   r+  r-  )r2   r=   r]   r)   r)   r*   r@   0  s    
zUnrecognizedExtension.__init__r.   c                 C   s   | j S r"   r.  r1   r)   r)   r*   r=   6  s    zUnrecognizedExtension.oidc                 C   s   | j S r"   r/  r1   r)   r)   r*   r]   :  s    zUnrecognizedExtension.valuec                 C   s
   d | S )Nz7<UnrecognizedExtension(oid={0.oid}, value={0.value!r})>r   r1   r)   r)   r*   r`   >  s    zUnrecognizedExtension.__repr__rm   c                 C   s&   t |tstS | j|jko$| j|jkS r"   )r#   r[   ro   r=   r]   rp   r)   r)   r*   rq   D  s    
zUnrecognizedExtension.__eq__c                 C   s   t | j| jfS r"   )rs   r=   r]   r1   r)   r)   r*   rt   J  s    zUnrecognizedExtension.__hash__c                 C   s   | j S r"   r   r1   r)   r)   r*   r$   M  s    z"UnrecognizedExtension.public_bytes)rE   rF   rG   r   rP   r@   r{   r=   r]   rH   r`   ry   rz   rq   r8   rt   r$   r)   r)   r)   r*   r[   /  s   r[   )gabcrK  r%   r!  rM   Zcryptographyr   Z"cryptography.hazmat.bindings._rustr   r   rx   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   rP   r+   rH   r9   	Exceptionr:   rJ   ABCMetar   rR   rf   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)  r0  r?  rC  rD  rE  rI  rM  rW  rX  r[  r[   r)   r)   r)   r*   <module>   s   ,  'l$!!(.%%o        A=+("  w0YQQQ-+ !