U
    cc$                     @   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)#CERTIFICATE_ISSUER_PUBLIC_KEY_TYPESCERTIFICATE_PUBLIC_KEY_TYPES)SignedCertificateTimestamp)	DNSNameDirectoryNameGeneralName	IPAddress	OtherName
RFC822NameRegisteredIDUniformResourceIdentifier_IPADDRESS_TYPES)NameRelativeDistinguishedName)CRLEntryExtensionOIDExtensionOIDOCSPExtensionOIDObjectIdentifier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   EncodingZDERZPublicFormatZPKCS1r   ZX962ZUncompressedPointZSubjectPublicKeyInfor   Zparse_spki_for_datahashlibsha1digest)r    dataZ
serialized r*   @/tmp/pip-unpacked-wheel-4layejjw/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"   )iterr1   r2   r-   r*   r+   iter_methodM   s    z+_make_sequence_methods.<locals>.iter_methodc                    s   t |  | S r"   )r1   )r3   idxr-   r*   r+   getitem_methodP   s    z._make_sequence_methods.<locals>.getitem_method)int)r.   r4   r6   r8   r*   r-   r+   _make_sequence_methodsI   s    r:   c                       s&   e Zd Zeedd fddZ  ZS )DuplicateExtensionNmsgoidr!   c                    s   t t| | || _d S r"   )superr;   __init__r>   r3   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 t| | || _d S r"   )r?   rJ   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.
        z8public_bytes is not implemented for extension type {0!r}N)NotImplementedErrorformatr2   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)r3   rS   r*   r*   r+   r@   q   s    zExtensions.__init__)r>   r!   c                 C   s0   | D ]}|j |kr|  S qtd||d S )NNo {} extension was found)r>   rJ   rL   )r3   r>   extr*   r*   r+   get_extension_for_oidv   s    

z Extensions.get_extension_for_oidzExtension[ExtensionTypeVar])extclassr!   c                 C   sD   |t krtd| D ]}t|j|r|  S qt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   )UnrecognizedExtension	TypeErrorr#   valuerJ   rL   r>   )r3   rY   rW   r*   r*   r+   get_extension_for_class   s    
 z"Extensions.get_extension_for_classrU   r/   c                 C   s   d | jS )Nz<Extensions({})>)rL   rU   r2   r*   r*   r+   __repr__   s    zExtensions.__repr__)rE   rF   rG   rM   Iterabler@   r   rX   Typer   r]   r:   __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#   r9   r[   _crl_numberr3   rf   r*   r*   r+   r@      s    
zCRLNumber.__init__otherr!   c                 C   s   t |tstS | j|jkS r"   )r#   rd   NotImplementedrf   r3   rl   r*   r*   r+   __eq__   s    
zCRLNumber.__eq__r/   c                 C   s
   t | jS r"   hashrf   r2   r*   r*   r+   __hash__   s    zCRLNumber.__hash__c                 C   s   d | jS )Nz<CRLNumber({})>)rL   rf   r2   r*   r*   r+   r^      s    zCRLNumber.__repr__c                 C   s   | j S r"   ri   r2   r*   r*   r+   rf      s    zCRLNumber.crl_numberc                 C   s
   t | S r"   	rust_x509Zencode_extension_valuer2   r*   r*   r+   r$      s    zCRLNumber.public_bytes)rE   rF   rG   r   Z
CRL_NUMBERr>   r9   r@   objectboolro   rr   rH   r^   propertyrf   rP   r$   r*   r*   r*   r+   rd      s   rd   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#   r9   _key_identifier_authority_cert_issuer_authority_cert_serial_number)r3   rz   r{   r|   r*   r*   r+   r@      s,    
 zAuthorityKeyIdentifier.__init__r   c                 C   s   t |}| |d d dS N)rz   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   r2   r*   r*   r+   r^      s    zAuthorityKeyIdentifier.__repr__rk   c                 C   s2   t |tstS | j|jko0| j|jko0| j|jkS r"   )r#   ry   rm   rz   r{   r|   rn   r*   r*   r+   ro      s    

zAuthorityKeyIdentifier.__eq__c                 C   s,   | j d krd }n
t| j }t| j|| jfS r"   )r{   tuplerq   rz   r|   )r3   Zacir*   r*   r+   rr     s    

zAuthorityKeyIdentifier.__hash__c                 C   s   | j S r"   )r   r2   r*   r*   r+   rz     s    z%AuthorityKeyIdentifier.key_identifierc                 C   s   | j S r"   )r   r2   r*   r*   r+   r{     s    z,AuthorityKeyIdentifier.authority_cert_issuerc                 C   s   | j S r"   )r   r2   r*   r*   r+   r|     s    z3AuthorityKeyIdentifier.authority_cert_serial_numberc                 C   s
   t | S r"   rt   r2   r*   r*   r+   r$     s    z#AuthorityKeyIdentifier.public_bytes)rE   rF   rG   r   ZAUTHORITY_KEY_IDENTIFIERr>   rM   OptionalrP   r_   r   r9   r@   classmethodr	   r   r   rH   r^   rv   rw   ro   rr   rx   rz   Listr{   r|   r$   r*   r*   r*   r+   ry      s2   &
		ry   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)r3   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   r2   r*   r*   r+   r(   ,  s    zSubjectKeyIdentifier.digestc                 C   s   | j S r"   r   r2   r*   r*   r+   rz   0  s    z#SubjectKeyIdentifier.key_identifierc                 C   s   d | jS )Nz$<SubjectKeyIdentifier(digest={0!r})>)rL   r(   r2   r*   r*   r+   r^   4  s    zSubjectKeyIdentifier.__repr__rk   c                 C   s   t |tstS t| j|jS r"   )r#   r   rm   r   Zbytes_eqr(   rn   r*   r*   r+   ro   7  s    
zSubjectKeyIdentifier.__eq__c                 C   s
   t | jS r"   )rq   r(   r2   r*   r*   r+   rr   =  s    zSubjectKeyIdentifier.__hash__c                 C   s
   t | S r"   rt   r2   r*   r*   r+   r$   @  s    z!SubjectKeyIdentifier.public_bytes)rE   rF   rG   r   ZSUBJECT_KEY_IDENTIFIERr>   rP   r@   r   r
   r   rx   r(   rz   rH   r^   rv   rw   ro   r9   rr   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r3   r   r*   r*   r+   r@   G  s    z#AuthorityInformationAccess.__init__r   r/   c                 C   s   d | jS )Nz <AuthorityInformationAccess({})>rL   r   r2   r*   r*   r+   r^   U  s    z#AuthorityInformationAccess.__repr__rk   c                 C   s   t |tstS | j|jkS r"   )r#   r   rm   r   rn   r*   r*   r+   ro   X  s    
z!AuthorityInformationAccess.__eq__c                 C   s   t t| jS r"   rq   r   r   r2   r*   r*   r+   rr   ^  s    z#AuthorityInformationAccess.__hash__c                 C   s
   t | S r"   rt   r2   r*   r*   r+   r$   a  s    z'AuthorityInformationAccess.public_bytes)rE   rF   rG   r   ZAUTHORITY_INFORMATION_ACCESSr>   rM   r_   r@   r:   ra   rb   rc   rH   r^   rv   rw   ro   r9   rr   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S )Nz<SubjectInformationAccess({})>r   r2   r*   r*   r+   r^   v  s    z!SubjectInformationAccess.__repr__rk   c                 C   s   t |tstS | j|jkS r"   )r#   r   rm   r   rn   r*   r*   r+   ro   y  s    
zSubjectInformationAccess.__eq__c                 C   s   t t| jS r"   r   r2   r*   r*   r+   rr     s    z!SubjectInformationAccess.__hash__c                 C   s
   t | S r"   rt   r2   r*   r*   r+   r$     s    z%SubjectInformationAccess.public_bytes)rE   rF   rG   r   ZSUBJECT_INFORMATION_ACCESSr>   rM   r_   r@   r:   ra   rb   rc   rH   r^   rv   rw   ro   r9   rr   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)r3   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   r2   r*   r*   r+   r^     s    zAccessDescription.__repr__rk   c                 C   s&   t |tstS | j|jko$| j|jkS r"   )r#   r   rm   r   r   rn   r*   r*   r+   ro     s
    

zAccessDescription.__eq__c                 C   s   t | j| jfS r"   )rq   r   r   r2   r*   r*   r+   rr     s    zAccessDescription.__hash__c                 C   s   | j S r"   )r   r2   r*   r*   r+   r     s    zAccessDescription.access_methodc                 C   s   | j S r"   )r   r2   r*   r*   r+   r     s    z!AccessDescription.access_location)rE   rF   rG   r   r   r@   rH   r^   rv   rw   ro   r9   rr   rx   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#   rw   r[   r   r9   _ca_path_length)r3   r   r   r*   r*   r+   r@     s    
zBasicConstraints.__init__r/   c                 C   s   | j S r"   )r   r2   r*   r*   r+   r     s    zBasicConstraints.cac                 C   s   | j S r"   )r   r2   r*   r*   r+   r     s    zBasicConstraints.path_lengthc                 C   s
   d | S )Nz:<BasicConstraints(ca={0.ca}, path_length={0.path_length})>r   r2   r*   r*   r+   r^     s    zBasicConstraints.__repr__rk   c                 C   s&   t |tstS | j|jko$| j|jkS r"   )r#   r   rm   r   r   rn   r*   r*   r+   ro     s    
zBasicConstraints.__eq__c                 C   s   t | j| jfS r"   )rq   r   r   r2   r*   r*   r+   rr     s    zBasicConstraints.__hash__c                 C   s
   t | S r"   rt   r2   r*   r*   r+   r$     s    zBasicConstraints.public_bytes)rE   rF   rG   r   ZBASIC_CONSTRAINTSr>   rw   rM   r   r9   r@   rx   r   r   rH   r^   rv   ro   rr   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 )DeltaCRLIndicatorNre   c                 C   s   t |tstd|| _d S rg   rh   rj   r*   r*   r+   r@     s    
zDeltaCRLIndicator.__init__r/   c                 C   s   | j S r"   rs   r2   r*   r*   r+   rf     s    zDeltaCRLIndicator.crl_numberrk   c                 C   s   t |tstS | j|jkS r"   )r#   r   rm   rf   rn   r*   r*   r+   ro     s    
zDeltaCRLIndicator.__eq__c                 C   s
   t | jS r"   rp   r2   r*   r*   r+   rr     s    zDeltaCRLIndicator.__hash__c                 C   s
   d | S )Nz.<DeltaCRLIndicator(crl_number={0.crl_number})>r   r2   r*   r*   r+   r^     s    zDeltaCRLIndicator.__repr__c                 C   s
   t | S r"   rt   r2   r*   r*   r+   r$     s    zDeltaCRLIndicator.public_bytes)rE   rF   rG   r   ZDELTA_CRL_INDICATORr>   r9   r@   rx   rf   rv   rw   ro   rr   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r3   r   r*   r*   r+   r@     s    zCRLDistributionPoints.__init__r   r/   c                 C   s   d | jS )Nz<CRLDistributionPoints({})>rL   r   r2   r*   r*   r+   r^     s    zCRLDistributionPoints.__repr__rk   c                 C   s   t |tstS | j|jkS r"   )r#   r   rm   r   rn   r*   r*   r+   ro     s    
zCRLDistributionPoints.__eq__c                 C   s   t t| jS r"   rq   r   r   r2   r*   r*   r+   rr     s    zCRLDistributionPoints.__hash__c                 C   s
   t | S r"   rt   r2   r*   r*   r+   r$     s    z"CRLDistributionPoints.public_bytes)rE   rF   rG   r   ZCRL_DISTRIBUTION_POINTSr>   rM   r_   r@   r:   ra   rb   rc   rH   r^   rv   rw   ro   r9   rr   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S )Nz<FreshestCRL({})>r   r2   r*   r*   r+   r^   3  s    zFreshestCRL.__repr__rk   c                 C   s   t |tstS | j|jkS r"   )r#   r   rm   r   rn   r*   r*   r+   ro   6  s    
zFreshestCRL.__eq__c                 C   s   t t| jS r"   r   r2   r*   r*   r+   rr   <  s    zFreshestCRL.__hash__c                 C   s
   t | S r"   rt   r2   r*   r*   r+   r$   ?  s    zFreshestCRL.public_bytes)rE   rF   rG   r   ZFRESHEST_CRLr>   rM   r_   r@   r:   ra   rb   rc   rH   r^   rv   rw   ro   r9   rr   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|d k	r:t|}tdd |D s:td|rPt|tsPtd|d k	rzt|}tdd |D sztd|rt|trtdd |D std	|rtj|kstj	|krt d
|r|s|s|st d|| _
|| _|| _|| _d S )NzOYou cannot provide both full_name and relative_name, at least one must be None.c                 s   s   | ]}t |tV  qd S r"   r}   r~   r*   r*   r+   r   S  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   `  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   g  s     z0reasons must be None or frozenset of ReasonFlagszLunspecified and remove_from_crl are not valid reasons in a DistributionPointzPYou must supply crl_issuer, full_name, or relative_name when reasons is not None)r   rT   r   r[   r#   r   	frozensetr   unspecifiedremove_from_crl
_full_name_relative_name_reasons_crl_issuer)r3   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   r2   r*   r*   r+   r^     s    zDistributionPoint.__repr__rk   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   rm   r   r   r   r   rn   r*   r*   r+   ro     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   rq   r   r   )r3   fnr   r*   r*   r+   rr     s    

zDistributionPoint.__hash__c                 C   s   | j S r"   r   r2   r*   r*   r+   r     s    zDistributionPoint.full_namec                 C   s   | j S r"   r   r2   r*   r*   r+   r     s    zDistributionPoint.relative_namec                 C   s   | j S r"   )r   r2   r*   r*   r+   r     s    zDistributionPoint.reasonsc                 C   s   | j S r"   )r   r2   r*   r*   r+   r     s    zDistributionPoint.crl_issuer)rE   rF   rG   rM   r   r_   r   r   	FrozenSetr@   rH   r^   rv   rw   ro   r9   rr   rx   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#   r9   r[   r   _require_explicit_policy_inhibit_policy_mapping)r3   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   r2   r*   r*   r+   r^     s    zPolicyConstraints.__repr__rk   c                 C   s&   t |tstS | j|jko$| j|jkS r"   )r#   r   rm   r   r   rn   r*   r*   r+   ro   
  s
    

zPolicyConstraints.__eq__c                 C   s   t | j| jfS r"   )rq   r   r   r2   r*   r*   r+   rr     s    
zPolicyConstraints.__hash__c                 C   s   | j S r"   )r   r2   r*   r*   r+   r     s    z)PolicyConstraints.require_explicit_policyc                 C   s   | j S r"   )r   r2   r*   r*   r+   r     s    z(PolicyConstraints.inhibit_policy_mappingc                 C   s
   t | S r"   rt   r2   r*   r*   r+   r$      s    zPolicyConstraints.public_bytes)rE   rF   rG   r   ZPOLICY_CONSTRAINTSr>   rM   r   r9   r@   rH   r^   rv   rw   ro   rr   rx   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)r3   r   r*   r*   r+   r@   '  s    zCertificatePolicies.__init__r   r/   c                 C   s   d | jS )Nz<CertificatePolicies({})>)rL   r   r2   r*   r*   r+   r^   3  s    zCertificatePolicies.__repr__rk   c                 C   s   t |tstS | j|jkS r"   )r#   r   rm   r   rn   r*   r*   r+   ro   6  s    
zCertificatePolicies.__eq__c                 C   s   t t| jS r"   )rq   r   r   r2   r*   r*   r+   rr   <  s    zCertificatePolicies.__hash__c                 C   s
   t | S r"   rt   r2   r*   r*   r+   r$   ?  s    z CertificatePolicies.public_bytes)rE   rF   rG   r   ZCERTIFICATE_POLICIESr>   rM   r_   r@   r:   ra   rb   rc   rH   r^   rv   rw   ro   r9   rr   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   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_identifierrT   r   _policy_qualifiers)r3   r   r   r*   r*   r+   r@   D  s    
zPolicyInformation.__init__r/   c                 C   s
   d | S )Nze<PolicyInformation(policy_identifier={0.policy_identifier}, policy_qualifiers={0.policy_qualifiers})>r   r2   r*   r*   r+   r^   \  s    zPolicyInformation.__repr__rk   c                 C   s&   t |tstS | j|jko$| j|jkS r"   )r#   r   rm   r   r   rn   r*   r*   r+   ro   b  s
    

zPolicyInformation.__eq__c                 C   s(   | j d k	rt| j }nd }t| j|fS r"   )r   r   rq   r   )r3   Zpqr*   r*   r+   rr   k  s
    
zPolicyInformation.__hash__c                 C   s   | j S r"   )r   r2   r*   r*   r+   r   u  s    z#PolicyInformation.policy_identifierc                 C   s   | j S r"   )r   r2   r*   r*   r+   r   y  s    z#PolicyInformation.policy_qualifiers)rE   rF   rG   r   rM   r   r_   UnionrH   r@   r^   rv   rw   ro   r9   rr   rx   r   r   r   r*   r*   r*   r+   r   C  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)r3   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   r2   r*   r*   r+   r^     s    zUserNotice.__repr__rk   c                 C   s&   t |tstS | j|jko$| j|jkS r"   )r#   r   rm   r   r   rn   r*   r*   r+   ro     s
    

zUserNotice.__eq__c                 C   s   t | j| jfS r"   )rq   r   r   r2   r*   r*   r+   rr     s    zUserNotice.__hash__c                 C   s   | j S r"   )r   r2   r*   r*   r+   r     s    zUserNotice.notice_referencec                 C   s   | j S r"   )r   r2   r*   r*   r+   r     s    zUserNotice.explicit_text)rE   rF   rG   rM   r   rH   r@   r^   rv   rw   ro   r9   rr   rx   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#   r9   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)r3   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   r2   r*   r*   r+   r^     s    zNoticeReference.__repr__rk   c                 C   s&   t |tstS | j|jko$| j|jkS r"   )r#   r   rm   r   r   rn   r*   r*   r+   ro     s
    

zNoticeReference.__eq__c                 C   s   t | jt| jfS r"   )rq   r   r   r   r2   r*   r*   r+   rr     s    zNoticeReference.__hash__c                 C   s   | j S r"   )r   r2   r*   r*   r+   r     s    zNoticeReference.organizationc                 C   s   | j S r"   )r   r2   r*   r*   r+   r     s    zNoticeReference.notice_numbers)rE   rF   rG   rM   r   rH   r_   r9   r@   r^   rv   rw   ro   rr   rx   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)r3   r   r*   r*   r+   r@     s    zExtendedKeyUsage.__init__r   r/   c                 C   s   d | jS )Nz<ExtendedKeyUsage({})>)rL   r   r2   r*   r*   r+   r^     s    zExtendedKeyUsage.__repr__rk   c                 C   s   t |tstS | j|jkS r"   )r#   r   rm   r   rn   r*   r*   r+   ro     s    
zExtendedKeyUsage.__eq__c                 C   s   t t| jS r"   )rq   r   r   r2   r*   r*   r+   rr     s    zExtendedKeyUsage.__hash__c                 C   s
   t | S r"   rt   r2   r*   r*   r+   r$     s    zExtendedKeyUsage.public_bytes)rE   rF   rG   r   ZEXTENDED_KEY_USAGEr>   rM   r_   r   r@   r:   ra   rb   rc   rH   r^   rv   rw   ro   r9   rr   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 )OCSPNoCheckrk   c                 C   s   t |tstS dS NT)r#   r   rm   rn   r*   r*   r+   ro     s    
zOCSPNoCheck.__eq__r/   c                 C   s   t tS r"   )rq   r   r2   r*   r*   r+   rr     s    zOCSPNoCheck.__hash__c                 C   s   dS )Nz<OCSPNoCheck()>r*   r2   r*   r*   r+   r^     s    zOCSPNoCheck.__repr__c                 C   s
   t | S r"   rt   r2   r*   r*   r+   r$      s    zOCSPNoCheck.public_bytesN)rE   rF   rG   r   ZOCSP_NO_CHECKr>   rv   rw   ro   r9   rr   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 )PrecertPoisonrk   c                 C   s   t |tstS dS r   )r#   r   rm   rn   r*   r*   r+   ro     s    
zPrecertPoison.__eq__r/   c                 C   s   t tS r"   )rq   r   r2   r*   r*   r+   rr     s    zPrecertPoison.__hash__c                 C   s   dS )Nz<PrecertPoison()>r*   r2   r*   r*   r+   r^     s    zPrecertPoison.__repr__c                 C   s
   t | S r"   rt   r2   r*   r*   r+   r$     s    zPrecertPoison.public_bytesN)rE   rF   rG   r   ZPRECERT_POISONr>   rv   rw   ro   r9   rr   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   r0   r[   	_features)r3   r   r*   r*   r+   r@     s    
zTLSFeature.__init__r   r/   c                 C   s
   d | S )Nz$<TLSFeature(features={0._features})>r   r2   r*   r*   r+   r^   )  s    zTLSFeature.__repr__rk   c                 C   s   t |tstS | j|jkS r"   )r#   r   rm   r   rn   r*   r*   r+   ro   ,  s    
zTLSFeature.__eq__c                 C   s   t t| jS r"   )rq   r   r   r2   r*   r*   r+   rr   2  s    zTLSFeature.__hash__c                 C   s
   t | S r"   rt   r2   r*   r*   r+   r$   5  s    zTLSFeature.public_bytes)rE   rF   rG   r   ZTLS_FEATUREr>   rM   r_   r@   r:   ra   rb   rc   rH   r^   rv   rw   ro   r9   rr   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   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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#   r9   r[   r   _skip_certs)r3   r   r*   r*   r+   r@   J  s
    
zInhibitAnyPolicy.__init__r/   c                 C   s
   d | S )Nz-<InhibitAnyPolicy(skip_certs={0.skip_certs})>r   r2   r*   r*   r+   r^   S  s    zInhibitAnyPolicy.__repr__rk   c                 C   s   t |tstS | j|jkS r"   )r#   r   rm   r   rn   r*   r*   r+   ro   V  s    
zInhibitAnyPolicy.__eq__c                 C   s
   t | jS r"   )rq   r   r2   r*   r*   r+   rr   \  s    zInhibitAnyPolicy.__hash__c                 C   s   | j S r"   )r   r2   r*   r*   r+   r   _  s    zInhibitAnyPolicy.skip_certsc                 C   s
   t | S r"   rt   r2   r*   r*   r+   r$   c  s    zInhibitAnyPolicy.public_bytes)rE   rF   rG   r   ZINHIBIT_ANY_POLICYr>   r9   r@   rH   r^   rv   rw   ro   rr   rx   r   rP   r$   r*   r*   r*   r+   r   G  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)
r3   r  r  r  r  r  r  r  r  r	  r*   r*   r+   r@   j  s    zKeyUsage.__init__r/   c                 C   s   | j S r"   )r
  r2   r*   r*   r+   r    s    zKeyUsage.digital_signaturec                 C   s   | j S r"   )r  r2   r*   r*   r+   r    s    zKeyUsage.content_commitmentc                 C   s   | j S r"   )r  r2   r*   r*   r+   r    s    zKeyUsage.key_enciphermentc                 C   s   | j S r"   )r  r2   r*   r*   r+   r    s    zKeyUsage.data_enciphermentc                 C   s   | j S r"   )r  r2   r*   r*   r+   r    s    zKeyUsage.key_agreementc                 C   s   | j S r"   )r  r2   r*   r*   r+   r    s    zKeyUsage.key_cert_signc                 C   s   | j S r"   )r  r2   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  r2   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  r2   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   )r3   r  r	  r*   r*   r+   r^     s    

  zKeyUsage.__repr__rk   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   rm   r  r  r  r  r  r  r  r  r  rn   r*   r*   r+   ro     s&    








zKeyUsage.__eq__c              
   C   s,   t | j| j| j| j| j| j| j| j| j	f	S r"   )
rq   r  r  r  r  r  r  r  r  r  r2   r*   r*   r+   rr     s    zKeyUsage.__hash__c                 C   s
   t | S r"   rt   r2   r*   r*   r+   r$     s    zKeyUsage.public_bytes)rE   rF   rG   r   Z	KEY_USAGEr>   rw   r@   rx   r  r  r  r  r  r  r  r  r	  rH   r^   rv   ro   r9   rr   rP   r$   r*   r*   r*   r+   r   g  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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_ip_name_permitted_subtrees_excluded_subtrees)r3   r  r  r*   r*   r+   r@     s8    

zNameConstraints.__init__rk   c                 C   s&   t |tstS | j|jko$| j|jkS r"   )r#   r  rm   r  r  rn   r*   r*   r+   ro     s
    

zNameConstraints.__eq__)treer!   c                 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[   )r3   r  r*   r*   r+   r  "  s    z!NameConstraints._validate_ip_namer/   c                 C   s
   d | S )Nze<NameConstraints(permitted_subtrees={0.permitted_subtrees}, excluded_subtrees={0.excluded_subtrees})>r   r2   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  rq   )r3   Zpsesr*   r*   r+   rr   5  s    

zNameConstraints.__hash__c                 C   s   | j S r"   )r  r2   r*   r*   r+   r  F  s    z"NameConstraints.permitted_subtreesc                 C   s   | j S r"   )r  r2   r*   r*   r+   r  L  s    z!NameConstraints.excluded_subtreesc                 C   s
   t | S r"   rt   r2   r*   r*   r+   r$   R  s    zNameConstraints.public_bytes)rE   rF   rG   r   ZNAME_CONSTRAINTSr>   rM   r   r_   r   r@   rv   rw   ro   r  rH   r^   r9   rr   rx   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[   rw   _oid	_critical_value)r3   r>   r!  r\   r*   r*   r+   r@   W  s    

zExtension.__init__r/   c                 C   s   | j S r"   r"  r2   r*   r*   r+   r>   f  s    zExtension.oidc                 C   s   | j S r"   )r#  r2   r*   r*   r+   r!  j  s    zExtension.criticalc                 C   s   | j S r"   r$  r2   r*   r*   r+   r\   n  s    zExtension.valuec                 C   s
   d | S )Nz@<Extension(oid={0.oid}, critical={0.critical}, value={0.value})>r   r2   r*   r*   r+   r^   r  s    zExtension.__repr__rk   c                 C   s2   t |tstS | j|jko0| j|jko0| j|jkS r"   )r#   r   rm   r>   r!  r\   rn   r*   r*   r+   ro   x  s    


zExtension.__eq__c                 C   s   t | j| j| jfS r"   )rq   r>   r!  r\   r2   r*   r*   r+   rr     s    zExtension.__hash__)rE   rF   rG   r   rw   r   r@   rx   r>   r!  r\   rH   r^   rv   ro   r9   rr   r*   r*   r*   r+   r   V  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r3   r)  r*   r*   r+   r@     s    zGeneralNames.__init__r*  typer!   c                 C   s   d S r"   r*   r3   r-  r*   r*   r+   get_values_for_type  s    	z GeneralNames.get_values_for_typec                 C   s   d S r"   r*   r.  r*   r*   r+   r/    s    c                 C   s   d S r"   r*   r.  r*   r*   r+   r/    s    c                 C   s   d S r"   r*   r.  r*   r*   r+   r/    s    c                 C   s   d S r"   r*   r.  r*   r*   r+   r/    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r-  r*   r+   r     s     
 z3GeneralNames.get_values_for_type.<locals>.<genexpr>c                 S   s   g | ]
}|j qS r*   r   r0  r*   r*   r+   
<listcomp>  s     z4GeneralNames.get_values_for_type.<locals>.<listcomp>)r   rT   )r3   r-  objsr*   r2  r+   r/    s    r/   c                 C   s   d | jS )Nz<GeneralNames({})>rL   r*  r2   r*   r*   r+   r^     s    zGeneralNames.__repr__rk   c                 C   s   t |tstS | j|jkS r"   )r#   r'  rm   r*  rn   r*   r*   r+   ro     s    
zGeneralNames.__eq__c                 C   s   t t| jS r"   )rq   r   r*  r2   r*   r*   r+   rr     s    zGeneralNames.__hash__)!rE   rF   rG   rM   r_   r   r@   r:   ra   rb   rc   overloadr   r`   r   r   r   r   rH   r/  r   r   r   r   r   r   r   r^   rv   rw   ro   r9   rr   r*   r*   r*   r+   r'    sb   

	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 )SubjectAlternativeNameNr(  c                 C   s   t || _d S r"   r'  r*  r+  r*   r*   r+   r@     s    zSubjectAlternativeName.__init__r*  r,  c                 C   s   d S r"   r*   r.  r*   r*   r+   r/    s    	z*SubjectAlternativeName.get_values_for_typec                 C   s   d S r"   r*   r.  r*   r*   r+   r/    s    c                 C   s   d S r"   r*   r.  r*   r*   r+   r/    s    c                 C   s   d S r"   r*   r.  r*   r*   r+   r/     s    c                 C   s   d S r"   r*   r.  r*   r*   r+   r/    s    c                 C   s   | j |S r"   r*  r/  r.  r*   r*   r+   r/    s    r/   c                 C   s   d | jS )Nz<SubjectAlternativeName({})>r5  r2   r*   r*   r+   r^      s    zSubjectAlternativeName.__repr__rk   c                 C   s   t |tstS | j|jkS r"   )r#   r7  rm   r*  rn   r*   r*   r+   ro   #  s    
zSubjectAlternativeName.__eq__c                 C   s
   t | jS r"   rq   r*  r2   r*   r*   r+   rr   )  s    zSubjectAlternativeName.__hash__c                 C   s
   t | S r"   rt   r2   r*   r*   r+   r$   ,  s    z#SubjectAlternativeName.public_bytes)&rE   rF   rG   r   ZSUBJECT_ALTERNATIVE_NAMEr>   rM   r_   r   r@   r:   ra   rb   rc   r6  r   r`   r   r   r   r   rH   r/  r   r   r   r   r   r   r   r^   rv   rw   ro   r9   rr   rP   r$   r*   r*   r*   r+   r7    sf   
	r7  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 )IssuerAlternativeNameNr(  c                 C   s   t || _d S r"   r8  r+  r*   r*   r+   r@   3  s    zIssuerAlternativeName.__init__r*  r,  c                 C   s   d S r"   r*   r.  r*   r*   r+   r/  8  s    	z)IssuerAlternativeName.get_values_for_typec                 C   s   d S r"   r*   r.  r*   r*   r+   r/  C  s    c                 C   s   d S r"   r*   r.  r*   r*   r+   r/  J  s    c                 C   s   d S r"   r*   r.  r*   r*   r+   r/  Q  s    c                 C   s   d S r"   r*   r.  r*   r*   r+   r/  W  s    c                 C   s   | j |S r"   r9  r.  r*   r*   r+   r/  ]  s    r/   c                 C   s   d | jS )Nz<IssuerAlternativeName({})>r5  r2   r*   r*   r+   r^   q  s    zIssuerAlternativeName.__repr__rk   c                 C   s   t |tstS | j|jkS r"   )r#   r;  rm   r*  rn   r*   r*   r+   ro   t  s    
zIssuerAlternativeName.__eq__c                 C   s
   t | jS r"   r:  r2   r*   r*   r+   rr   z  s    zIssuerAlternativeName.__hash__c                 C   s
   t | S r"   rt   r2   r*   r*   r+   r$   }  s    z"IssuerAlternativeName.public_bytes)&rE   rF   rG   r   ZISSUER_ALTERNATIVE_NAMEr>   rM   r_   r   r@   r:   ra   rb   rc   r6  r   r`   r   r   r   r   rH   r/  r   r   r   r   r   r   r   r^   rv   rw   ro   r9   rr   rP   r$   r*   r*   r*   r+   r;  0  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 )CertificateIssuerNr(  c                 C   s   t || _d S r"   r8  r+  r*   r*   r+   r@     s    zCertificateIssuer.__init__r*  r,  c                 C   s   d S r"   r*   r.  r*   r*   r+   r/    s    	z%CertificateIssuer.get_values_for_typec                 C   s   d S r"   r*   r.  r*   r*   r+   r/    s    c                 C   s   d S r"   r*   r.  r*   r*   r+   r/    s    c                 C   s   d S r"   r*   r.  r*   r*   r+   r/    s    c                 C   s   d S r"   r*   r.  r*   r*   r+   r/    s    c                 C   s   | j |S r"   r9  r.  r*   r*   r+   r/    s    r/   c                 C   s   d | jS )Nz<CertificateIssuer({})>r5  r2   r*   r*   r+   r^     s    zCertificateIssuer.__repr__rk   c                 C   s   t |tstS | j|jkS r"   )r#   r<  rm   r*  rn   r*   r*   r+   ro     s    
zCertificateIssuer.__eq__c                 C   s
   t | jS r"   r:  r2   r*   r*   r+   rr     s    zCertificateIssuer.__hash__c                 C   s
   t | S r"   rt   r2   r*   r*   r+   r$     s    zCertificateIssuer.public_bytes)&rE   rF   rG   r   ZCERTIFICATE_ISSUERr>   rM   r_   r   r@   r:   ra   rb   rc   r6  r   r`   r   r   r   r   rH   r/  r   r   r   r   r   r   r   r^   rv   rw   ro   r9   rr   rP   r$   r*   r*   r*   r+   r<    sf   
	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 )	CRLReasonN)reasonr!   c                 C   s   t |tstd|| _d S )Nz*reason must be an element from ReasonFlags)r#   r   r[   _reason)r3   r>  r*   r*   r+   r@     s    
zCRLReason.__init__r/   c                 C   s   d | jS )Nz<CRLReason(reason={})>)rL   r?  r2   r*   r*   r+   r^     s    zCRLReason.__repr__rk   c                 C   s   t |tstS | j|jkS r"   )r#   r=  rm   r>  rn   r*   r*   r+   ro     s    
zCRLReason.__eq__c                 C   s
   t | jS r"   )rq   r>  r2   r*   r*   r+   rr     s    zCRLReason.__hash__c                 C   s   | j S r"   )r?  r2   r*   r*   r+   r>    s    zCRLReason.reasonc                 C   s
   t | S r"   rt   r2   r*   r*   r+   r$     s    zCRLReason.public_bytes)rE   rF   rG   r   Z
CRL_REASONr>   r   r@   rH   r^   rv   rw   ro   r9   rr   rx   r>  rP   r$   r*   r*   r*   r+   r=    s   r=  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)r3   rA  r*   r*   r+   r@     s    zInvalidityDate.__init__r/   c                 C   s   d | jS )Nz$<InvalidityDate(invalidity_date={})>)rL   rC  r2   r*   r*   r+   r^     s    zInvalidityDate.__repr__rk   c                 C   s   t |tstS | j|jkS r"   )r#   r@  rm   rA  rn   r*   r*   r+   ro     s    
zInvalidityDate.__eq__c                 C   s
   t | jS r"   )rq   rA  r2   r*   r*   r+   rr     s    zInvalidityDate.__hash__c                 C   s   | j S r"   )rC  r2   r*   r*   r+   rA    s    zInvalidityDate.invalidity_datec                 C   s
   t | S r"   rt   r2   r*   r*   r+   r$   
  s    zInvalidityDate.public_bytes)rE   rF   rG   r   ZINVALIDITY_DATEr>   rB  r@   rH   r^   rv   rw   ro   r9   rr   rx   rA  rP   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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r3   rF  r*   r*   r+   r@     s    z2PrecertificateSignedCertificateTimestamps.__init__rK  r/   c                 C   s   d t| S )Nz/<PrecertificateSignedCertificateTimestamps({})>rL   rT   r2   r*   r*   r+   r^   &  s    z2PrecertificateSignedCertificateTimestamps.__repr__c                 C   s   t t| jS r"   rq   r   rK  r2   r*   r*   r+   rr   +  s    z2PrecertificateSignedCertificateTimestamps.__hash__rk   c                 C   s   t |tstS | j|jkS r"   )r#   rD  rm   rK  rn   r*   r*   r+   ro   .  s    
z0PrecertificateSignedCertificateTimestamps.__eq__c                 C   s
   t | S r"   rt   r2   r*   r*   r+   r$   7  s    z6PrecertificateSignedCertificateTimestamps.public_bytes)rE   rF   rG   r   Z%PRECERT_SIGNED_CERTIFICATE_TIMESTAMPSr>   rM   r_   r   r@   r:   ra   rb   rc   rH   r^   r9   rr   rv   rw   ro   rP   r$   r*   r*   r*   r+   rD    s   
	rD  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 )SignedCertificateTimestampsNrE  c                 C   s,   t |}tdd |D s"td|| _d S )Nc                 s   s   | ]}t |tV  qd S r"   rG  rH  r*   r*   r+   r   E  s   z7SignedCertificateTimestamps.__init__.<locals>.<genexpr>rI  rJ  rL  r*   r*   r+   r@   >  s    z$SignedCertificateTimestamps.__init__rK  r/   c                 C   s   d t| S )Nz!<SignedCertificateTimestamps({})>rM  r2   r*   r*   r+   r^   S  s    z$SignedCertificateTimestamps.__repr__c                 C   s   t t| jS r"   rN  r2   r*   r*   r+   rr   V  s    z$SignedCertificateTimestamps.__hash__rk   c                 C   s   t |tstS | j|jkS r"   )r#   rO  rm   rK  rn   r*   r*   r+   ro   Y  s    
z"SignedCertificateTimestamps.__eq__c                 C   s
   t | S r"   rt   r2   r*   r*   r+   r$   b  s    z(SignedCertificateTimestamps.public_bytes)rE   rF   rG   r   ZSIGNED_CERTIFICATE_TIMESTAMPSr>   rM   r_   r   r@   r:   ra   rb   rc   rH   r^   r9   rr   rv   rw   ro   rP   r$   r*   r*   r*   r+   rO  ;  s   
	rO  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)r3   rQ  r*   r*   r+   r@   i  s    
zOCSPNonce.__init__rk   c                 C   s   t |tstS | j|jkS r"   )r#   rP  rm   rQ  rn   r*   r*   r+   ro   o  s    
zOCSPNonce.__eq__r/   c                 C   s
   t | jS r"   )rq   rQ  r2   r*   r*   r+   rr   u  s    zOCSPNonce.__hash__c                 C   s
   d | S )Nz<OCSPNonce(nonce={0.nonce!r})>r   r2   r*   r*   r+   r^   x  s    zOCSPNonce.__repr__c                 C   s   | j S r"   )rR  r2   r*   r*   r+   rQ  {  s    zOCSPNonce.noncec                 C   s
   t | S r"   rt   r2   r*   r*   r+   r$     s    zOCSPNonce.public_bytes)rE   rF   rG   r   ZNONCEr>   rP   r@   rv   rw   ro   r9   rr   rH   r^   rx   rQ  r$   r*   r*   r*   r+   rP  f  s   rP  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+   r3    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   rw   r0   r  _only_contains_user_certs_only_contains_ca_certs_indirect_crl_only_contains_attribute_certs_only_some_reasonsr   r   )	r3   r   r   rT  rU  rV  rW  rX  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   r2   r*   r*   r+   r^     s    z!IssuingDistributionPoint.__repr__rk   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#   rS  rm   r   r   rT  rU  rV  rW  rX  rn   r*   r*   r+   ro     s"    





zIssuingDistributionPoint.__eq__c                 C   s$   t | j| j| j| j| j| j| jfS r"   )rq   r   r   rT  rU  rV  rW  rX  r2   r*   r*   r+   rr     s    z!IssuingDistributionPoint.__hash__c                 C   s   | j S r"   r   r2   r*   r*   r+   r     s    z"IssuingDistributionPoint.full_namec                 C   s   | j S r"   r   r2   r*   r*   r+   r     s    z&IssuingDistributionPoint.relative_namec                 C   s   | j S r"   )rY  r2   r*   r*   r+   rT  	  s    z1IssuingDistributionPoint.only_contains_user_certsc                 C   s   | j S r"   )rZ  r2   r*   r*   r+   rU    s    z/IssuingDistributionPoint.only_contains_ca_certsc                 C   s   | j S r"   )r]  r2   r*   r*   r+   rV    s    z*IssuingDistributionPoint.only_some_reasonsc                 C   s   | j S r"   )r[  r2   r*   r*   r+   rW    s    z%IssuingDistributionPoint.indirect_crlc                 C   s   | j S r"   )r\  r2   r*   r*   r+   rX    s    z6IssuingDistributionPoint.only_contains_attribute_certsc                 C   s
   t | S r"   rt   r2   r*   r*   r+   r$     s    z%IssuingDistributionPoint.public_bytes) rE   rF   rG   r   ZISSUING_DISTRIBUTION_POINTr>   rM   r   r_   r   r   rw   r   r   r@   rH   r^   rv   ro   r9   rr   rx   r   r   r   rT  rU  rV  rW  rX  rP   r$   r*   r*   r*   r+   rS    s:   SrS  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 )rZ   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$  )r3   r>   r\   r*   r*   r+   r@   $  s    
zUnrecognizedExtension.__init__r/   c                 C   s   | j S r"   r%  r2   r*   r*   r+   r>   *  s    zUnrecognizedExtension.oidc                 C   s   | j S r"   r&  r2   r*   r*   r+   r\   .  s    zUnrecognizedExtension.valuec                 C   s
   d | S )Nz7<UnrecognizedExtension(oid={0.oid}, value={0.value!r})>r   r2   r*   r*   r+   r^   2  s    zUnrecognizedExtension.__repr__rk   c                 C   s&   t |tstS | j|jko$| j|jkS r"   )r#   rZ   rm   r>   r\   rn   r*   r*   r+   ro   8  s    
zUnrecognizedExtension.__eq__c                 C   s   t | j| jfS r"   )rq   r>   r\   r2   r*   r*   r+   rr   >  s    zUnrecognizedExtension.__hash__c                 C   s   | j S r"   r   r2   r*   r*   r+   r$   A  s    z"UnrecognizedExtension.public_bytes)rE   rF   rG   r   rP   r@   rx   r>   r\   rH   r^   rv   rw   ro   r9   rr   r$   r*   r*   r*   r+   rZ   #  s   rZ   )gabcrB  r&   r  rM   Zcryptographyr   Z"cryptography.hazmat.bindings._rustr   r   ru   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   r:   	Exceptionr;   rJ   ABCMetar   rR   rd   ry   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   r'  r7  r;  r<  r=  r@  rD  rO  rP  rS  rZ   r*   r*   r*   r+   <module>   s   ,  'l$!!(.%%p        A=+("  j0YQQQ-+ !