U
    c$                     @   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)ZboundZ	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hashlibZsha1digest)r   dataZ
serialized r&   ;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    )iterr-   r.   r)   r&   r'   iter_methodM   s    z+_make_sequence_methods.<locals>.iter_methodc                    s   t |  | S r    )r-   )r/   idxr)   r&   r'   getitem_methodP   s    z._make_sequence_methods.<locals>.getitem_method)int)r*   r0   r2   r4   r&   r)   r'   _make_sequence_methodsI   s    r6   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    )superr7   __init__r:   r/   r9   r:   	__class__r&   r'   r<   W   s    zDuplicateExtension.__init____name__
__module____qualname__strr   r<   __classcell__r&   r&   r>   r'   r7   V   s   r7   c                       s&   e Zd Zeedd fddZ  ZS )ExtensionNotFoundNr8   c                    s   t t| | || _d S r    )r;   rF   r<   r:   r=   r>   r&   r'   r<   ]   s    zExtensionNotFound.__init__r@   r&   r&   r>   r'   rF   \   s   rF   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formatr.   r&   r&   r'   r"   e   s
    zExtensionType.public_bytesN)	rA   rB   rC   typingZ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)r/   rN   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:   rF   rH   )r/   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.rQ   )UnrecognizedExtension	TypeErrorr!   valuerF   rH   r:   )r/   rT   rR   r&   r&   r'   get_extension_for_class   s    
 z"Extensions.get_extension_for_classrP   r+   c                 C   s   d | jS )Nz<Extensions({})>)rH   rP   r.   r&   r&   r'   __repr__   s    zExtensions.__repr__)rA   rB   rC   rI   Iterabler<   r   rS   Typer   rX   r6   __len____iter____getitem__rD   rY   r&   r&   r&   r'   rM   p   s   
rM   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!   r5   rV   _crl_numberr/   ra   r&   r&   r'   r<      s    
zCRLNumber.__init__otherr   c                 C   s   t |tstS | j|jkS r    )r!   r_   NotImplementedra   r/   rg   r&   r&   r'   __eq__   s    
zCRLNumber.__eq__r+   c                 C   s
   t | jS r    hashra   r.   r&   r&   r'   __hash__   s    zCRLNumber.__hash__c                 C   s   d | jS )Nz<CRLNumber({})>)rH   ra   r.   r&   r&   r'   rY      s    zCRLNumber.__repr__c                 C   s   | j S r    rd   r.   r&   r&   r'   ra      s    zCRLNumber.crl_numberc                 C   s
   t | S r    	rust_x509Zencode_extension_valuer.   r&   r&   r'   r"      s    zCRLNumber.public_bytes)rA   rB   rC   r   Z
CRL_NUMBERr:   r5   r<   objectboolrj   rm   rD   rY   propertyra   rK   r"   r&   r&   r&   r'   r_      s   r_   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)	
ValueErrorrO   allrV   r!   r5   _key_identifier_authority_cert_issuer_authority_cert_serial_number)r/   ru   rv   rw   r&   r&   r'   r<      s,    
 zAuthorityKeyIdentifier.__init__r   c                 C   s   t |}| |d d dS N)ru   rv   rw   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})>rH   r.   r&   r&   r'   rY      s    zAuthorityKeyIdentifier.__repr__rf   c                 C   s2   t |tstS | j|jko0| j|jko0| j|jkS r    )r!   rt   rh   ru   rv   rw   ri   r&   r&   r'   rj      s    

zAuthorityKeyIdentifier.__eq__c                 C   s,   | j d krd }n
t| j }t| j|| jfS r    )rv   tuplerl   ru   rw   )r/   Zacir&   r&   r'   rm     s    

zAuthorityKeyIdentifier.__hash__c                 C   s   | j S r    )r   r.   r&   r&   r'   ru     s    z%AuthorityKeyIdentifier.key_identifierc                 C   s   | j S r    )r   r.   r&   r&   r'   rv     s    z,AuthorityKeyIdentifier.authority_cert_issuerc                 C   s   | j S r    )r   r.   r&   r&   r'   rw     s    z3AuthorityKeyIdentifier.authority_cert_serial_numberc                 C   s
   t | S r    ro   r.   r&   r&   r'   r"     s    z#AuthorityKeyIdentifier.public_bytes)rA   rB   rC   r   ZAUTHORITY_KEY_IDENTIFIERr:   rI   OptionalrK   rZ   r   r5   r<   classmethodr	   r   r   rD   rY   rq   rr   rj   rm   rs   ru   Listrv   rw   r"   r&   r&   r&   r'   rt      s2   &
		rt   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)r/   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   r.   r&   r&   r'   r$   ,  s    zSubjectKeyIdentifier.digestc                 C   s   | j S r    r   r.   r&   r&   r'   ru   0  s    z#SubjectKeyIdentifier.key_identifierc                 C   s   d | jS )Nz$<SubjectKeyIdentifier(digest={0!r})>)rH   r$   r.   r&   r&   r'   rY   4  s    zSubjectKeyIdentifier.__repr__rf   c                 C   s   t |tstS t| j|jS r    )r!   r   rh   r   Zbytes_eqr$   ri   r&   r&   r'   rj   7  s    
zSubjectKeyIdentifier.__eq__c                 C   s
   t | jS r    )rl   r$   r.   r&   r&   r'   rm   =  s    zSubjectKeyIdentifier.__hash__c                 C   s
   t | S r    ro   r.   r&   r&   r'   r"   @  s    z!SubjectKeyIdentifier.public_bytes)rA   rB   rC   r   ZSUBJECT_KEY_IDENTIFIERr:   rK   r<   r   r
   r   rs   r$   ru   rD   rY   rq   rr   rj   r5   rm   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   ry   r&   r&   r'   r|   K  s     z6AuthorityInformationAccess.__init__.<locals>.<genexpr>@Every item in the descriptions list must be an AccessDescriptionrO   r~   rV   _descriptionsr/   r   r&   r&   r'   r<   G  s    z#AuthorityInformationAccess.__init__r   r+   c                 C   s   d | jS )Nz <AuthorityInformationAccess({})>rH   r   r.   r&   r&   r'   rY   U  s    z#AuthorityInformationAccess.__repr__rf   c                 C   s   t |tstS | j|jkS r    )r!   r   rh   r   ri   r&   r&   r'   rj   X  s    
z!AuthorityInformationAccess.__eq__c                 C   s   t t| jS r    rl   r   r   r.   r&   r&   r'   rm   ^  s    z#AuthorityInformationAccess.__hash__c                 C   s
   t | S r    ro   r.   r&   r&   r'   r"   a  s    z'AuthorityInformationAccess.public_bytes)rA   rB   rC   r   ZAUTHORITY_INFORMATION_ACCESSr:   rI   rZ   r<   r6   r\   r]   r^   rD   rY   rq   rr   rj   r5   rm   rK   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   ry   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   r.   r&   r&   r'   rY   v  s    z!SubjectInformationAccess.__repr__rf   c                 C   s   t |tstS | j|jkS r    )r!   r   rh   r   ri   r&   r&   r'   rj   y  s    
zSubjectInformationAccess.__eq__c                 C   s   t t| jS r    r   r.   r&   r&   r'   rm     s    z!SubjectInformationAccess.__hash__c                 C   s
   t | S r    ro   r.   r&   r&   r'   r"     s    z%SubjectInformationAccess.public_bytes)rA   rB   rC   r   ZSUBJECT_INFORMATION_ACCESSr:   rI   rZ   r<   r6   r\   r]   r^   rD   rY   rq   rr   rj   r5   rm   rK   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   rV   r   _access_method_access_location)r/   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   r.   r&   r&   r'   rY     s    zAccessDescription.__repr__rf   c                 C   s&   t |tstS | j|jko$| j|jkS r    )r!   r   rh   r   r   ri   r&   r&   r'   rj     s
    

zAccessDescription.__eq__c                 C   s   t | j| jfS r    )rl   r   r   r.   r&   r&   r'   rm     s    zAccessDescription.__hash__c                 C   s   | j S r    )r   r.   r&   r&   r'   r     s    zAccessDescription.access_methodc                 C   s   | j S r    )r   r.   r&   r&   r'   r     s    z!AccessDescription.access_location)rA   rB   rC   r   r   r<   rD   rY   rq   rr   rj   r5   rm   rs   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!   rr   rV   r}   r5   _ca_path_length)r/   r   r   r&   r&   r'   r<     s    
zBasicConstraints.__init__r+   c                 C   s   | j S r    )r   r.   r&   r&   r'   r     s    zBasicConstraints.cac                 C   s   | j S r    )r   r.   r&   r&   r'   r     s    zBasicConstraints.path_lengthc                 C   s
   d | S )Nz:<BasicConstraints(ca={0.ca}, path_length={0.path_length})>r   r.   r&   r&   r'   rY     s    zBasicConstraints.__repr__rf   c                 C   s&   t |tstS | j|jko$| j|jkS r    )r!   r   rh   r   r   ri   r&   r&   r'   rj     s    
zBasicConstraints.__eq__c                 C   s   t | j| jfS r    )rl   r   r   r.   r&   r&   r'   rm     s    zBasicConstraints.__hash__c                 C   s
   t | S r    ro   r.   r&   r&   r'   r"     s    zBasicConstraints.public_bytes)rA   rB   rC   r   ZBASIC_CONSTRAINTSr:   rr   rI   r   r5   r<   rs   r   r   rD   rY   rq   rj   rm   rK   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 )DeltaCRLIndicatorNr`   c                 C   s   t |tstd|| _d S rb   rc   re   r&   r&   r'   r<     s    
zDeltaCRLIndicator.__init__r+   c                 C   s   | j S r    rn   r.   r&   r&   r'   ra     s    zDeltaCRLIndicator.crl_numberrf   c                 C   s   t |tstS | j|jkS r    )r!   r   rh   ra   ri   r&   r&   r'   rj     s    
zDeltaCRLIndicator.__eq__c                 C   s
   t | jS r    rk   r.   r&   r&   r'   rm     s    zDeltaCRLIndicator.__hash__c                 C   s
   d | S )Nz.<DeltaCRLIndicator(crl_number={0.crl_number})>r   r.   r&   r&   r'   rY     s    zDeltaCRLIndicator.__repr__c                 C   s
   t | S r    ro   r.   r&   r&   r'   r"     s    zDeltaCRLIndicator.public_bytes)rA   rB   rC   r   ZDELTA_CRL_INDICATORr:   r5   r<   rs   ra   rq   rr   rj   rm   rD   rY   rK   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   ry   r&   r&   r'   r|      s    z1CRLDistributionPoints.__init__.<locals>.<genexpr>?distribution_points must be a list of DistributionPoint objectsrO   r~   rV   _distribution_pointsr/   r   r&   r&   r'   r<     s    zCRLDistributionPoints.__init__r   r+   c                 C   s   d | jS )Nz<CRLDistributionPoints({})>rH   r   r.   r&   r&   r'   rY     s    zCRLDistributionPoints.__repr__rf   c                 C   s   t |tstS | j|jkS r    )r!   r   rh   r   ri   r&   r&   r'   rj     s    
zCRLDistributionPoints.__eq__c                 C   s   t t| jS r    rl   r   r   r.   r&   r&   r'   rm     s    zCRLDistributionPoints.__hash__c                 C   s
   t | S r    ro   r.   r&   r&   r'   r"     s    z"CRLDistributionPoints.public_bytes)rA   rB   rC   r   ZCRL_DISTRIBUTION_POINTSr:   rI   rZ   r<   r6   r\   r]   r^   rD   rY   rq   rr   rj   r5   rm   rK   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   ry   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   r.   r&   r&   r'   rY   3  s    zFreshestCRL.__repr__rf   c                 C   s   t |tstS | j|jkS r    )r!   r   rh   r   ri   r&   r&   r'   rj   6  s    
zFreshestCRL.__eq__c                 C   s   t t| jS r    r   r.   r&   r&   r'   rm   <  s    zFreshestCRL.__hash__c                 C   s
   t | S r    ro   r.   r&   r&   r'   r"   ?  s    zFreshestCRL.public_bytes)rA   rB   rC   r   ZFRESHEST_CRLr:   rI   rZ   r<   r6   r\   r]   r^   rD   rY   rq   rr   rj   r5   rm   rK   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    rx   ry   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    rx   ry   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   ry   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}   rO   r~   rV   r!   r   	frozensetr   unspecifiedremove_from_crl
_full_name_relative_name_reasons_crl_issuer)r/   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   r.   r&   r&   r'   rY     s    zDistributionPoint.__repr__rf   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   rh   r   r   r   r   ri   r&   r&   r'   rj     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   rl   r   r   )r/   fnr   r&   r&   r'   rm     s    

zDistributionPoint.__hash__c                 C   s   | j S r    r   r.   r&   r&   r'   r     s    zDistributionPoint.full_namec                 C   s   | j S r    r   r.   r&   r&   r'   r     s    zDistributionPoint.relative_namec                 C   s   | j S r    )r   r.   r&   r&   r'   r     s    zDistributionPoint.reasonsc                 C   s   | j S r    )r   r.   r&   r&   r'   r     s    zDistributionPoint.crl_issuer)rA   rB   rC   rI   r   rZ   r   r   	FrozenSetr<   rD   rY   rq   rr   rj   r5   rm   rs   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)rA   rB   rC   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!   r5   rV   r}   _require_explicit_policy_inhibit_policy_mapping)r/   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   r.   r&   r&   r'   rY     s    zPolicyConstraints.__repr__rf   c                 C   s&   t |tstS | j|jko$| j|jkS r    )r!   r   rh   r   r   ri   r&   r&   r'   rj   
  s
    

zPolicyConstraints.__eq__c                 C   s   t | j| jfS r    )rl   r   r   r.   r&   r&   r'   rm     s    
zPolicyConstraints.__hash__c                 C   s   | j S r    )r   r.   r&   r&   r'   r     s    z)PolicyConstraints.require_explicit_policyc                 C   s   | j S r    )r   r.   r&   r&   r'   r     s    z(PolicyConstraints.inhibit_policy_mappingc                 C   s
   t | S r    ro   r.   r&   r&   r'   r"      s    zPolicyConstraints.public_bytes)rA   rB   rC   r   ZPOLICY_CONSTRAINTSr:   rI   r   r5   r<   rD   rY   rq   rr   rj   rm   rs   r   r   rK   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   ry   r&   r&   r'   r|   )  s     z/CertificatePolicies.__init__.<locals>.<genexpr>z;Every item in the policies list must be a PolicyInformation)rO   r~   rV   	_policies)r/   r   r&   r&   r'   r<   '  s    zCertificatePolicies.__init__r   r+   c                 C   s   d | jS )Nz<CertificatePolicies({})>)rH   r   r.   r&   r&   r'   rY   3  s    zCertificatePolicies.__repr__rf   c                 C   s   t |tstS | j|jkS r    )r!   r   rh   r   ri   r&   r&   r'   rj   6  s    
zCertificatePolicies.__eq__c                 C   s   t t| jS r    )rl   r   r   r.   r&   r&   r'   rm   <  s    zCertificatePolicies.__hash__c                 C   s
   t | S r    ro   r.   r&   r&   r'   r"   ?  s    z CertificatePolicies.public_bytes)rA   rB   rC   r   ZCERTIFICATE_POLICIESr:   rI   rZ   r<   r6   r\   r]   r^   rD   rY   rq   rr   rj   r5   rm   rK   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!   rD   r   ry   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   rV   _policy_identifierrO   r~   _policy_qualifiers)r/   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   r.   r&   r&   r'   rY   \  s    zPolicyInformation.__repr__rf   c                 C   s&   t |tstS | j|jko$| j|jkS r    )r!   r   rh   r   r   ri   r&   r&   r'   rj   b  s
    

zPolicyInformation.__eq__c                 C   s(   | j d k	rt| j }nd }t| j|fS r    )r   r   rl   r   )r/   Zpqr&   r&   r'   rm   k  s
    
zPolicyInformation.__hash__c                 C   s   | j S r    )r   r.   r&   r&   r'   r   u  s    z#PolicyInformation.policy_identifierc                 C   s   | j S r    )r   r.   r&   r&   r'   r   y  s    z#PolicyInformation.policy_qualifiers)rA   rB   rC   r   rI   r   rZ   UnionrD   r<   rY   rq   rr   rj   r5   rm   rs   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   rV   _notice_reference_explicit_text)r/   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   r.   r&   r&   r'   rY     s    zUserNotice.__repr__rf   c                 C   s&   t |tstS | j|jko$| j|jkS r    )r!   r   rh   r   r   ri   r&   r&   r'   rj     s
    

zUserNotice.__eq__c                 C   s   t | j| jfS r    )rl   r   r   r.   r&   r&   r'   rm     s    zUserNotice.__hash__c                 C   s   | j S r    )r   r.   r&   r&   r'   r     s    zUserNotice.notice_referencec                 C   s   | j S r    )r   r.   r&   r&   r'   r     s    zUserNotice.explicit_text)rA   rB   rC   rI   r   rD   r<   rY   rq   rr   rj   r5   rm   rs   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!   r5   ry   r&   r&   r'   r|     s     z+NoticeReference.__init__.<locals>.<genexpr>z)notice_numbers must be a list of integers)_organizationrO   r~   rV   _notice_numbers)r/   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   r.   r&   r&   r'   rY     s    zNoticeReference.__repr__rf   c                 C   s&   t |tstS | j|jko$| j|jkS r    )r!   r   rh   r   r   ri   r&   r&   r'   rj     s
    

zNoticeReference.__eq__c                 C   s   t | jt| jfS r    )rl   r   r   r   r.   r&   r&   r'   rm     s    zNoticeReference.__hash__c                 C   s   | j S r    )r   r.   r&   r&   r'   r     s    zNoticeReference.organizationc                 C   s   | j S r    )r   r.   r&   r&   r'   r     s    zNoticeReference.notice_numbers)rA   rB   rC   rI   r   rD   rZ   r5   r<   rY   rq   rr   rj   rm   rs   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   ry   r&   r&   r'   r|     s     z,ExtendedKeyUsage.__init__.<locals>.<genexpr>z9Every item in the usages list must be an ObjectIdentifier)rO   r~   rV   _usages)r/   r   r&   r&   r'   r<     s    zExtendedKeyUsage.__init__r   r+   c                 C   s   d | jS )Nz<ExtendedKeyUsage({})>)rH   r   r.   r&   r&   r'   rY     s    zExtendedKeyUsage.__repr__rf   c                 C   s   t |tstS | j|jkS r    )r!   r   rh   r   ri   r&   r&   r'   rj     s    
zExtendedKeyUsage.__eq__c                 C   s   t t| jS r    )rl   r   r   r.   r&   r&   r'   rm     s    zExtendedKeyUsage.__hash__c                 C   s
   t | S r    ro   r.   r&   r&   r'   r"     s    zExtendedKeyUsage.public_bytes)rA   rB   rC   r   ZEXTENDED_KEY_USAGEr:   rI   rZ   r   r<   r6   r\   r]   r^   rD   rY   rq   rr   rj   r5   rm   rK   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 )OCSPNoCheckrf   c                 C   s   t |tstS dS NT)r!   r   rh   ri   r&   r&   r'   rj     s    
zOCSPNoCheck.__eq__r+   c                 C   s   t tS r    )rl   r   r.   r&   r&   r'   rm     s    zOCSPNoCheck.__hash__c                 C   s   dS )Nz<OCSPNoCheck()>r&   r.   r&   r&   r'   rY     s    zOCSPNoCheck.__repr__c                 C   s
   t | S r    ro   r.   r&   r&   r'   r"      s    zOCSPNoCheck.public_bytesN)rA   rB   rC   r   ZOCSP_NO_CHECKr:   rq   rr   rj   r5   rm   rD   rY   rK   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 )PrecertPoisonrf   c                 C   s   t |tstS dS r   )r!   r   rh   ri   r&   r&   r'   rj     s    
zPrecertPoison.__eq__r+   c                 C   s   t tS r    )rl   r   r.   r&   r&   r'   rm     s    zPrecertPoison.__hash__c                 C   s   dS )Nz<PrecertPoison()>r&   r.   r&   r&   r'   rY     s    zPrecertPoison.__repr__c                 C   s
   t | S r    ro   r.   r&   r&   r'   r"     s    zPrecertPoison.public_bytesN)rA   rB   rC   r   ZPRECERT_POISONr:   rq   rr   rj   r5   rm   rD   rY   rK   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   ry   r&   r&   r'   r|     s     z&TLSFeature.__init__.<locals>.<genexpr>r   z@features must be a list of elements from the TLSFeatureType enum)rO   r~   r,   rV   	_features)r/   r   r&   r&   r'   r<     s    
zTLSFeature.__init__r   r+   c                 C   s
   d | S )Nz$<TLSFeature(features={0._features})>r   r.   r&   r&   r'   rY   )  s    zTLSFeature.__repr__rf   c                 C   s   t |tstS | j|jkS r    )r!   r   rh   r   ri   r&   r&   r'   rj   ,  s    
zTLSFeature.__eq__c                 C   s   t t| jS r    )rl   r   r   r.   r&   r&   r'   rm   2  s    zTLSFeature.__hash__c                 C   s
   t | S r    ro   r.   r&   r&   r'   r"   5  s    zTLSFeature.public_bytes)rA   rB   rC   r   ZTLS_FEATUREr:   rI   rZ   r<   r6   r\   r]   r^   rD   rY   rq   rr   rj   r5   rm   rK   r"   r&   r&   r&   r'   r     s   r   c                   @   s   e Zd ZdZdZdS )r   r      N)rA   rB   rC   Zstatus_requestZstatus_request_v2r&   r&   r&   r'   r   9  s   r   c                 C   s   i | ]}|j |qS r&   rW   ry   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!   r5   rV   r}   _skip_certs)r/   r   r&   r&   r'   r<   J  s
    
zInhibitAnyPolicy.__init__r+   c                 C   s
   d | S )Nz-<InhibitAnyPolicy(skip_certs={0.skip_certs})>r   r.   r&   r&   r'   rY   S  s    zInhibitAnyPolicy.__repr__rf   c                 C   s   t |tstS | j|jkS r    )r!   r   rh   r   ri   r&   r&   r'   rj   V  s    
zInhibitAnyPolicy.__eq__c                 C   s
   t | jS r    )rl   r   r.   r&   r&   r'   rm   \  s    zInhibitAnyPolicy.__hash__c                 C   s   | j S r    )r   r.   r&   r&   r'   r   _  s    zInhibitAnyPolicy.skip_certsc                 C   s
   t | S r    ro   r.   r&   r&   r'   r"   c  s    zInhibitAnyPolicy.public_bytes)rA   rB   rC   r   ZINHIBIT_ANY_POLICYr:   r5   r<   rD   rY   rq   rr   rj   rm   rs   r   rK   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)
r/   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  r.   r&   r&   r'   r     s    zKeyUsage.digital_signaturec                 C   s   | j S r    )r  r.   r&   r&   r'   r     s    zKeyUsage.content_commitmentc                 C   s   | j S r    )r  r.   r&   r&   r'   r     s    zKeyUsage.key_enciphermentc                 C   s   | j S r    )r  r.   r&   r&   r'   r     s    zKeyUsage.data_enciphermentc                 C   s   | j S r    )r	  r.   r&   r&   r'   r     s    zKeyUsage.key_agreementc                 C   s   | j S r    )r
  r.   r&   r&   r'   r    s    zKeyUsage.key_cert_signc                 C   s   | j S r    )r  r.   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  r.   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  r.   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}   rH   )r/   r  r  r&   r&   r'   rY     s    

  zKeyUsage.__repr__rf   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   rh   r   r   r   r   r   r  r  r  r  ri   r&   r&   r'   rj     s&    








zKeyUsage.__eq__c              
   C   s,   t | j| j| j| j| j| j| j| j| j	f	S r    )
rl   r   r   r   r   r   r  r  r  r  r.   r&   r&   r'   rm     s    zKeyUsage.__hash__c                 C   s
   t | S r    ro   r.   r&   r&   r'   r"     s    zKeyUsage.public_bytes)rA   rB   rC   r   Z	KEY_USAGEr:   rr   r<   rs   r   r   r   r   r   r  r  r  r  rD   rY   rq   rj   r5   rm   rK   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    rx   ry   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    rx   ry   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)rO   r}   r~   rV   _validate_ip_name_permitted_subtrees_excluded_subtrees)r/   r  r  r&   r&   r'   r<     s8    

zNameConstraints.__init__rf   c                 C   s&   t |tstS | j|jko$| j|jkS r    )r!   r  rh   r  r  ri   r&   r&   r'   rj     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   rW   	ipaddressZIPv4NetworkZIPv6Network)rz   namer&   r&   r'   r|   #  s   
 
z4NameConstraints._validate_ip_name.<locals>.<genexpr>zGIPAddress name constraints must be an IPv4Network or IPv6Network object)anyrV   )r/   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   r.   r&   r&   r'   rY   /  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  rl   )r/   ZpsZesr&   r&   r'   rm   5  s    

zNameConstraints.__hash__c                 C   s   | j S r    )r  r.   r&   r&   r'   r  F  s    z"NameConstraints.permitted_subtreesc                 C   s   | j S r    )r  r.   r&   r&   r'   r  L  s    z!NameConstraints.excluded_subtreesc                 C   s
   t | S r    ro   r.   r&   r&   r'   r"   R  s    zNameConstraints.public_bytes)rA   rB   rC   r   ZNAME_CONSTRAINTSr:   rI   r   rZ   r   r<   rq   rr   rj   r  rD   rY   r5   rm   rs   r   r  r  rK   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:   criticalrW   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   rV   rr   _oid	_critical_value)r/   r:   r  rW   r&   r&   r'   r<   W  s    

zExtension.__init__r+   c                 C   s   | j S r    r  r.   r&   r&   r'   r:   f  s    zExtension.oidc                 C   s   | j S r    )r  r.   r&   r&   r'   r  j  s    zExtension.criticalc                 C   s   | j S r    r  r.   r&   r&   r'   rW   n  s    zExtension.valuec                 C   s
   d | S )Nz@<Extension(oid={0.oid}, critical={0.critical}, value={0.value})>r   r.   r&   r&   r'   rY   r  s    zExtension.__repr__rf   c                 C   s2   t |tstS | j|jko0| j|jko0| j|jkS r    )r!   r  rh   r:   r  rW   ri   r&   r&   r'   rj   x  s    


zExtension.__eq__c                 C   s   t | j| j| jfS r    )rl   r:   r  rW   r.   r&   r&   r'   rm     s    zExtension.__hash__)rA   rB   rC   r   rr   r   r<   rs   r:   r  rW   rD   rY   rq   rj   r5   rm   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    rx   ry   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)rO   r~   rV   _general_namesr/   r!  r&   r&   r'   r<     s    zGeneralNames.__init__r"  typer   c                 C   s   d S r    r&   r/   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!   rz   ir%  r&   r'   r|     s     
 z3GeneralNames.get_values_for_type.<locals>.<genexpr>c                 S   s   g | ]
}|j qS r&   r   r(  r&   r&   r'   
<listcomp>  s     z4GeneralNames.get_values_for_type.<locals>.<listcomp>)r   rO   )r/   r%  Zobjsr&   r*  r'   r'    s    r+   c                 C   s   d | jS )Nz<GeneralNames({})>rH   r"  r.   r&   r&   r'   rY     s    zGeneralNames.__repr__rf   c                 C   s   t |tstS | j|jkS r    )r!   r  rh   r"  ri   r&   r&   r'   rj     s    
zGeneralNames.__eq__c                 C   s   t t| jS r    )rl   r   r"  r.   r&   r&   r'   rm     s    zGeneralNames.__hash__)!rA   rB   rC   rI   rZ   r   r<   r6   r\   r]   r^   overloadr   r[   r   r   r   r   rD   r'  r   r   r   r   r   r   r   rY   rq   rr   rj   r5   rm   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({})>r,  r.   r&   r&   r'   rY      s    zSubjectAlternativeName.__repr__rf   c                 C   s   t |tstS | j|jkS r    )r!   r.  rh   r"  ri   r&   r&   r'   rj   #  s    
zSubjectAlternativeName.__eq__c                 C   s
   t | jS r    rl   r"  r.   r&   r&   r'   rm   )  s    zSubjectAlternativeName.__hash__c                 C   s
   t | S r    ro   r.   r&   r&   r'   r"   ,  s    z#SubjectAlternativeName.public_bytes)&rA   rB   rC   r   ZSUBJECT_ALTERNATIVE_NAMEr:   rI   rZ   r   r<   r6   r\   r]   r^   r-  r   r[   r   r   r   r   rD   r'  r   r   r   r   r   r   r   rY   rq   rr   rj   r5   rm   rK   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 )IssuerAlternativeNameNr   c                 C   s   t || _d S r    r/  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    r0  r&  r&   r&   r'   r'  ]  s    r+   c                 C   s   d | jS )Nz<IssuerAlternativeName({})>r,  r.   r&   r&   r'   rY   q  s    zIssuerAlternativeName.__repr__rf   c                 C   s   t |tstS | j|jkS r    )r!   r2  rh   r"  ri   r&   r&   r'   rj   t  s    
zIssuerAlternativeName.__eq__c                 C   s
   t | jS r    r1  r.   r&   r&   r'   rm   z  s    zIssuerAlternativeName.__hash__c                 C   s
   t | S r    ro   r.   r&   r&   r'   r"   }  s    z"IssuerAlternativeName.public_bytes)&rA   rB   rC   r   ZISSUER_ALTERNATIVE_NAMEr:   rI   rZ   r   r<   r6   r\   r]   r^   r-  r   r[   r   r   r   r   rD   r'  r   r   r   r   r   r   r   rY   rq   rr   rj   r5   rm   rK   r"   r&   r&   r&   r'   r2  0  sf   
	r2  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    r/  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    r0  r&  r&   r&   r'   r'    s    r+   c                 C   s   d | jS )Nz<CertificateIssuer({})>r,  r.   r&   r&   r'   rY     s    zCertificateIssuer.__repr__rf   c                 C   s   t |tstS | j|jkS r    )r!   r3  rh   r"  ri   r&   r&   r'   rj     s    
zCertificateIssuer.__eq__c                 C   s
   t | jS r    r1  r.   r&   r&   r'   rm     s    zCertificateIssuer.__hash__c                 C   s
   t | S r    ro   r.   r&   r&   r'   r"     s    zCertificateIssuer.public_bytes)&rA   rB   rC   r   ZCERTIFICATE_ISSUERr:   rI   rZ   r   r<   r6   r\   r]   r^   r-  r   r[   r   r   r   r   rD   r'  r   r   r   r   r   r   r   rY   rq   rr   rj   r5   rm   rK   r"   r&   r&   r&   r'   r3    sf   
	r3  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   rV   _reason)r/   r5  r&   r&   r'   r<     s    
zCRLReason.__init__r+   c                 C   s   d | jS )Nz<CRLReason(reason={})>)rH   r6  r.   r&   r&   r'   rY     s    zCRLReason.__repr__rf   c                 C   s   t |tstS | j|jkS r    )r!   r4  rh   r5  ri   r&   r&   r'   rj     s    
zCRLReason.__eq__c                 C   s
   t | jS r    )rl   r5  r.   r&   r&   r'   rm     s    zCRLReason.__hash__c                 C   s   | j S r    )r6  r.   r&   r&   r'   r5    s    zCRLReason.reasonc                 C   s
   t | S r    ro   r.   r&   r&   r'   r"     s    zCRLReason.public_bytes)rA   rB   rC   r   Z
CRL_REASONr:   r   r<   rD   rY   rq   rr   rj   r5   rm   rs   r5  rK   r"   r&   r&   r&   r'   r4    s   r4  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!   datetimerV   _invalidity_date)r/   r8  r&   r&   r'   r<     s    zInvalidityDate.__init__r+   c                 C   s   d | jS )Nz$<InvalidityDate(invalidity_date={})>)rH   r:  r.   r&   r&   r'   rY     s    zInvalidityDate.__repr__rf   c                 C   s   t |tstS | j|jkS r    )r!   r7  rh   r8  ri   r&   r&   r'   rj     s    
zInvalidityDate.__eq__c                 C   s
   t | jS r    )rl   r8  r.   r&   r&   r'   rm     s    zInvalidityDate.__hash__c                 C   s   | j S r    )r:  r.   r&   r&   r'   r8    s    zInvalidityDate.invalidity_datec                 C   s
   t | S r    ro   r.   r&   r&   r'   r"   
  s    zInvalidityDate.public_bytes)rA   rB   rC   r   ZINVALIDITY_DATEr:   r9  r<   rD   rY   rq   rr   rj   r5   rm   rs   r8  rK   r"   r&   r&   r&   r'   r7    s   r7  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   rz   Zsctr&   r&   r'   r|     s   zEPrecertificateSignedCertificateTimestamps.__init__.<locals>.<genexpr>YEvery item in the signed_certificate_timestamps list must be a SignedCertificateTimestamprO   r~   rV   _signed_certificate_timestampsr/   r=  r&   r&   r'   r<     s    z2PrecertificateSignedCertificateTimestamps.__init__rB  r+   c                 C   s   d t| S )Nz/<PrecertificateSignedCertificateTimestamps({})>rH   rO   r.   r&   r&   r'   rY   &  s    z2PrecertificateSignedCertificateTimestamps.__repr__c                 C   s   t t| jS r    rl   r   rB  r.   r&   r&   r'   rm   +  s    z2PrecertificateSignedCertificateTimestamps.__hash__rf   c                 C   s   t |tstS | j|jkS r    )r!   r;  rh   rB  ri   r&   r&   r'   rj   .  s    
z0PrecertificateSignedCertificateTimestamps.__eq__c                 C   s
   t | S r    ro   r.   r&   r&   r'   r"   7  s    z6PrecertificateSignedCertificateTimestamps.public_bytes)rA   rB   rC   r   Z%PRECERT_SIGNED_CERTIFICATE_TIMESTAMPSr:   rI   rZ   r   r<   r6   r\   r]   r^   rD   rY   r5   rm   rq   rr   rj   rK   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 )SignedCertificateTimestampsNr<  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|   E  s   z7SignedCertificateTimestamps.__init__.<locals>.<genexpr>r@  rA  rC  r&   r&   r'   r<   >  s    z$SignedCertificateTimestamps.__init__rB  r+   c                 C   s   d t| S )Nz!<SignedCertificateTimestamps({})>rD  r.   r&   r&   r'   rY   S  s    z$SignedCertificateTimestamps.__repr__c                 C   s   t t| jS r    rE  r.   r&   r&   r'   rm   V  s    z$SignedCertificateTimestamps.__hash__rf   c                 C   s   t |tstS | j|jkS r    )r!   rF  rh   rB  ri   r&   r&   r'   rj   Y  s    
z"SignedCertificateTimestamps.__eq__c                 C   s
   t | S r    ro   r.   r&   r&   r'   r"   b  s    z(SignedCertificateTimestamps.public_bytes)rA   rB   rC   r   ZSIGNED_CERTIFICATE_TIMESTAMPSr:   rI   rZ   r   r<   r6   r\   r]   r^   rD   rY   r5   rm   rq   rr   rj   rK   r"   r&   r&   r&   r'   rF  ;  s   
	rF  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!   rK   rV   _nonce)r/   rH  r&   r&   r'   r<   i  s    
zOCSPNonce.__init__rf   c                 C   s   t |tstS | j|jkS r    )r!   rG  rh   rH  ri   r&   r&   r'   rj   o  s    
zOCSPNonce.__eq__r+   c                 C   s
   t | jS r    )rl   rH  r.   r&   r&   r'   rm   u  s    zOCSPNonce.__hash__c                 C   s
   d | S )Nz<OCSPNonce(nonce={0.nonce!r})>r   r.   r&   r&   r'   rY   x  s    zOCSPNonce.__repr__c                 C   s   | j S r    )rI  r.   r&   r&   r'   rH  {  s    zOCSPNonce.noncec                 C   s
   t | S r    ro   r.   r&   r&   r'   r"     s    zOCSPNonce.public_bytes)rA   rB   rC   r   ZNONCEr:   rK   r<   rq   rr   rj   r5   rm   rD   rY   rs   rH  r"   r&   r&   r&   r'   rG  f  s   rG  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   ry   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&   ry   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.)rO   r!   r   r~   rV   r   r   r   r}   rr   r,   r  _only_contains_user_certs_only_contains_ca_certs_indirect_crl_only_contains_attribute_certs_only_some_reasonsr   r   )	r/   r   r   rK  rL  rM  rN  rO  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   r.   r&   r&   r'   rY     s    z!IssuingDistributionPoint.__repr__rf   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!   rJ  rh   r   r   rK  rL  rM  rN  rO  ri   r&   r&   r'   rj     s"    





zIssuingDistributionPoint.__eq__c                 C   s$   t | j| j| j| j| j| j| jfS r    )rl   r   r   rK  rL  rM  rN  rO  r.   r&   r&   r'   rm     s    z!IssuingDistributionPoint.__hash__c                 C   s   | j S r    r   r.   r&   r&   r'   r     s    z"IssuingDistributionPoint.full_namec                 C   s   | j S r    r   r.   r&   r&   r'   r     s    z&IssuingDistributionPoint.relative_namec                 C   s   | j S r    )rP  r.   r&   r&   r'   rK  	  s    z1IssuingDistributionPoint.only_contains_user_certsc                 C   s   | j S r    )rQ  r.   r&   r&   r'   rL    s    z/IssuingDistributionPoint.only_contains_ca_certsc                 C   s   | j S r    )rT  r.   r&   r&   r'   rM    s    z*IssuingDistributionPoint.only_some_reasonsc                 C   s   | j S r    )rR  r.   r&   r&   r'   rN    s    z%IssuingDistributionPoint.indirect_crlc                 C   s   | j S r    )rS  r.   r&   r&   r'   rO    s    z6IssuingDistributionPoint.only_contains_attribute_certsc                 C   s
   t | S r    ro   r.   r&   r&   r'   r"     s    z%IssuingDistributionPoint.public_bytes) rA   rB   rC   r   ZISSUING_DISTRIBUTION_POINTr:   rI   r   rZ   r   r   rr   r   r   r<   rD   rY   rq   rj   r5   rm   rs   r   r   r   rK  rL  rM  rN  rO  rK   r"   r&   r&   r&   r'   rJ    s:   SrJ  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 )rU   N)r:   rW   r   c                 C   s"   t |tstd|| _|| _d S )Nzoid must be an ObjectIdentifier)r!   r   rV   r  r  )r/   r:   rW   r&   r&   r'   r<   $  s    
zUnrecognizedExtension.__init__r+   c                 C   s   | j S r    r  r.   r&   r&   r'   r:   *  s    zUnrecognizedExtension.oidc                 C   s   | j S r    r  r.   r&   r&   r'   rW   .  s    zUnrecognizedExtension.valuec                 C   s
   d | S )Nz7<UnrecognizedExtension(oid={0.oid}, value={0.value!r})>r   r.   r&   r&   r'   rY   2  s    zUnrecognizedExtension.__repr__rf   c                 C   s&   t |tstS | j|jko$| j|jkS r    )r!   rU   rh   r:   rW   ri   r&   r&   r'   rj   8  s    
zUnrecognizedExtension.__eq__c                 C   s   t | j| jfS r    )rl   r:   rW   r.   r&   r&   r'   rm   >  s    zUnrecognizedExtension.__hash__c                 C   s   | j S r    r   r.   r&   r&   r'   r"   A  s    z"UnrecognizedExtension.public_bytes)rA   rB   rC   r   rK   r<   rs   r:   rW   rD   rY   rq   rr   rj   r5   rm   r"   r&   r&   r&   r'   rU   #  s   rU   )gabcr9  r#   r  rI   Zcryptographyr   Z"cryptography.hazmat.bindings._rustr   r   rp   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   ZTypeVarr   rK   r(   rD   r6   	Exceptionr7   rF   ABCMetar   rM   r_   rt   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  ZGenericr  r  r.  r2  r3  r4  r7  r;  rF  rG  rJ  rU   r&   r&   r&   r'   <module>   s   ,  'l$!!(.%%p        A=+("  j0YQQQ-+ !