U
    ÒZj$ÿ  ã                   @   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   ZEncodingZDERZPublicFormatZPKCS1r   ZX962ZUncompressedPointZSubjectPublicKeyInfor   Zparse_spki_for_dataÚhashlibÚsha1Údigest)r    ÚdataZ
serialized© r)   ú_/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/cryptography/x509/extensions.pyÚ_key_identifier_from_public_key1   s     
þ
þþ
r+   ©Ú
field_namec                    s4   t dœ‡ fdd„}‡ fdd„}‡ fdd„}|||fS )N©r!   c                    s   t t| ˆ ƒƒS r"   )ÚlenÚgetattr©Úselfr,   r)   r*   Ú
len_methodJ   s    z*_make_sequence_methods.<locals>.len_methodc                    s   t t| ˆ ƒƒS r"   )Úiterr0   r1   r,   r)   r*   Úiter_methodM   s    z+_make_sequence_methods.<locals>.iter_methodc                    s   t | ˆ ƒ| S r"   )r0   )r2   Úidxr,   r)   r*   Úgetitem_methodP   s    z._make_sequence_methods.<locals>.getitem_method)Úint)r-   r3   r5   r7   r)   r,   r*   Ú_make_sequence_methodsI   s    r9   c                       s&   e Zd Zeeddœ‡ fdd„Z‡  ZS )ÚDuplicateExtensionN©ÚmsgÚoidr!   c                    s   t t| ƒ |¡ || _d S r"   )Úsuperr:   Ú__init__r=   ©r2   r<   r=   ©Ú	__class__r)   r*   r?   W   s    zDuplicateExtension.__init__©Ú__name__Ú
__module__Ú__qualname__Ústrr   r?   Ú__classcell__r)   r)   rA   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>   rI   r?   r=   r@   rA   r)   r*   r?   ]   s    zExtensionNotFound.__init__rC   r)   r)   rA   r*   rI   \   s   rI   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Úformatr1   r)   r)   r*   r$   e   s
    ÿÿzExtensionType.public_bytesN)	rD   rE   rF   ÚtypingÚClassVarr   Ú__annotations__Úbytesr$   r)   r)   r)   r*   r   b   s   
)Ú	metaclassc                   @   sd   e Zd Zejd ddœdd„Zeddœdd„Zeje	 d	d
œdd„Z
edƒ\ZZZedœdd„ZdS )Ú
ExtensionszExtension[ExtensionType]N)Ú
extensionsr!   c                 C   s   t |ƒ| _d S r"   )ÚlistÚ_extensions)r2   rR   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=   rI   rK   )r2   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.rU   )ÚUnrecognizedExtensionÚ	TypeErrorr#   ÚvaluerI   rK   r=   )r2   rX   rV   r)   r)   r*   Úget_extension_for_class   s    ÿ
 ÿz"Extensions.get_extension_for_classrT   r.   c                 C   s   d  | j¡S )Nz<Extensions({})>)rK   rT   r1   r)   r)   r*   Ú__repr__“   s    zExtensions.__repr__)rD   rE   rF   rL   ÚIterabler?   r   rW   ÚTyper   r\   r9   Ú__len__Ú__iter__Ú__getitem__rG   r]   r)   r)   r)   r*   rQ   p   s   þþ
þrQ   c                   @   sn   e Zd ZejZeddœdd„Zee	dœdd„Z
edœd	d
„Zedœdd„Zeedœdd„ƒZedœdd„ZdS )Ú	CRLNumberN©Ú
crl_numberr!   c                 C   s   t |tƒstdƒ‚|| _d S ©Nzcrl_number must be an integer©r#   r8   rZ   Ú_crl_number©r2   re   r)   r)   r*   r?   š   s    
zCRLNumber.__init__©Úotherr!   c                 C   s   t |tƒstS | j|jkS r"   )r#   rc   ÚNotImplementedre   ©r2   rk   r)   r)   r*   Ú__eq__    s    
zCRLNumber.__eq__r.   c                 C   s
   t | jƒS r"   ©Úhashre   r1   r)   r)   r*   Ú__hash__¦   s    zCRLNumber.__hash__c                 C   s   d  | j¡S )Nz<CRLNumber({})>)rK   re   r1   r)   r)   r*   r]   ©   s    zCRLNumber.__repr__c                 C   s   | j S r"   ©rh   r1   r)   r)   r*   re   ¬   s    zCRLNumber.crl_numberc                 C   s
   t  | ¡S r"   ©Ú	rust_x509Zencode_extension_valuer1   r)   r)   r*   r$   °   s    zCRLNumber.public_bytes)rD   rE   rF   r   Z
CRL_NUMBERr=   r8   r?   ÚobjectÚboolrn   rq   rG   r]   Úpropertyre   rO   r$   r)   r)   r)   r*   rc   —   s   rc   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)	Ú
ValueErrorrS   ÚallrZ   r#   r8   Ú_key_identifierÚ_authority_cert_issuerÚ_authority_cert_serial_number)r2   ry   rz   r{   r)   r)   r*   r?   ·   s,    ÿÿÿÿ
 ÿzAuthorityKeyIdentifier.__init__r   c                 C   s   t |ƒ}| |d d d�S ©N)ry   rz   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})>©rK   r1   r)   r)   r*   r]   ò   s    ýÿzAuthorityKeyIdentifier.__repr__rj   c                 C   s2   t |tƒstS | j|jko0| j|jko0| j|jkS r"   )r#   rx   rl   ry   rz   r{   rm   r)   r)   r*   rn   ú   s    

ÿÿýzAuthorityKeyIdentifier.__eq__c                 C   s,   | j d krd }n
t| j ƒ}t| j|| jfƒS r"   )rz   Útuplerp   ry   r{   )r2   Zacir)   r)   r*   rq     s    

ÿzAuthorityKeyIdentifier.__hash__c                 C   s   | j S r"   )rƒ   r1   r)   r)   r*   ry     s    z%AuthorityKeyIdentifier.key_identifierc                 C   s   | j S r"   )r„   r1   r)   r)   r*   rz     s    z,AuthorityKeyIdentifier.authority_cert_issuerc                 C   s   | j S r"   )r…   r1   r)   r)   r*   r{     s    z3AuthorityKeyIdentifier.authority_cert_serial_numberc                 C   s
   t  | ¡S r"   rs   r1   r)   r)   r*   r$     s    z#AuthorityKeyIdentifier.public_bytes)rD   rE   rF   r   ZAUTHORITY_KEY_IDENTIFIERr=   rL   ÚOptionalrO   r^   r   r8   r?   Úclassmethodr	   r‰   rŒ   rG   r]   ru   rv   rn   rq   rw   ry   ÚListrz   r{   r$   r)   r)   r)   r*   rx   ´   s2   û&þ
þ		þrx   c                   @   s”   e Zd ZejZeddœdd„Zee	d dœdd„ƒZ
eedœd	d
„ƒZeedœdd„ƒZedœdd„Zeedœdd„Zedœdd„Zedœdd„ZdS )rŠ   N)r'   r!   c                 C   s
   || _ d S r"   ©Z_digest)r2   r'   r)   r)   r*   r?   #  s    zSubjectKeyIdentifier.__init__r   c                 C   s   | t |ƒƒS r"   r‡   )rˆ   r    r)   r)   r*   Úfrom_public_key&  s    z$SubjectKeyIdentifier.from_public_keyr.   c                 C   s   | j S r"   r’   r1   r)   r)   r*   r'   ,  s    zSubjectKeyIdentifier.digestc                 C   s   | j S r"   r’   r1   r)   r)   r*   ry   0  s    z#SubjectKeyIdentifier.key_identifierc                 C   s   d  | j¡S )Nz$<SubjectKeyIdentifier(digest={0!r})>)rK   r'   r1   r)   r)   r*   r]   4  s    zSubjectKeyIdentifier.__repr__rj   c                 C   s   t |tƒstS t | j|j¡S r"   )r#   rŠ   rl   r   Zbytes_eqr'   rm   r)   r)   r*   rn   7  s    
zSubjectKeyIdentifier.__eq__c                 C   s
   t | jƒS r"   )rp   r'   r1   r)   r)   r*   rq   =  s    zSubjectKeyIdentifier.__hash__c                 C   s
   t  | ¡S r"   rs   r1   r)   r)   r*   r$   @  s    z!SubjectKeyIdentifier.public_bytes)rD   rE   rF   r   ZSUBJECT_KEY_IDENTIFIERr=   rO   r?   r�   r
   r“   rw   r'   ry   rG   r]   ru   rv   rn   r8   rq   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©rS   r‚   rZ   Ú_descriptions©r2   r—   r)   r)   r*   r?   G  s    ÿz#AuthorityInformationAccess.__init__r›   r.   c                 C   s   d  | j¡S )Nz <AuthorityInformationAccess({})>©rK   r›   r1   r)   r)   r*   r]   U  s    z#AuthorityInformationAccess.__repr__rj   c                 C   s   t |tƒstS | j|jkS r"   )r#   r”   rl   r›   rm   r)   r)   r*   rn   X  s    
z!AuthorityInformationAccess.__eq__c                 C   s   t t| jƒƒS r"   ©rp   rŽ   r›   r1   r)   r)   r*   rq   ^  s    z#AuthorityInformationAccess.__hash__c                 C   s
   t  | ¡S r"   rs   r1   r)   r)   r*   r$   a  s    z'AuthorityInformationAccess.public_bytes)rD   rE   rF   r   ZAUTHORITY_INFORMATION_ACCESSr=   rL   r^   r?   r9   r`   ra   rb   rG   r]   ru   rv   rn   r8   rq   rO   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�   r1   r)   r)   r*   r]   v  s    z!SubjectInformationAccess.__repr__rj   c                 C   s   t |tƒstS | j|jkS r"   )r#   rŸ   rl   r›   rm   r)   r)   r*   rn   y  s    
zSubjectInformationAccess.__eq__c                 C   s   t t| jƒƒS r"   rž   r1   r)   r)   r*   rq     s    z!SubjectInformationAccess.__hash__c                 C   s
   t  | ¡S r"   rs   r1   r)   r)   r*   r$   ‚  s    z%SubjectInformationAccess.public_bytes)rD   rE   rF   r   ZSUBJECT_INFORMATION_ACCESSr=   rL   r^   r?   r9   r`   ra   rb   rG   r]   ru   rv   rn   r8   rq   rO   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   rZ   r   Ú_access_methodÚ_access_location)r2   r    r¡   r)   r)   r*   r?   ‡  s    

zAccessDescription.__init__r.   c                 C   s
   d  | ¡S )NzY<AccessDescription(access_method={0.access_method}, access_location={0.access_location})>r�   r1   r)   r)   r*   r]   “  s    ÿÿzAccessDescription.__repr__rj   c                 C   s&   t |tƒstS | j|jko$| j|jkS r"   )r#   r•   rl   r    r¡   rm   r)   r)   r*   rn   ™  s
    

þzAccessDescription.__eq__c                 C   s   t | j| jfƒS r"   )rp   r    r¡   r1   r)   r)   r*   rq   ¢  s    zAccessDescription.__hash__c                 C   s   | j S r"   )r¢   r1   r)   r)   r*   r    ¥  s    zAccessDescription.access_methodc                 C   s   | j S r"   )r£   r1   r)   r)   r*   r¡   ©  s    z!AccessDescription.access_location)rD   rE   rF   r   r   r?   rG   r]   ru   rv   rn   r8   rq   rw   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#   rv   rZ   r�   r8   Ú_caÚ_path_length)r2   r¥   r¦   r)   r)   r*   r?   ±  s    
ÿÿÿzBasicConstraints.__init__r.   c                 C   s   | j S r"   )r§   r1   r)   r)   r*   r¥   Â  s    zBasicConstraints.cac                 C   s   | j S r"   )r¨   r1   r)   r)   r*   r¦   Æ  s    zBasicConstraints.path_lengthc                 C   s
   d  | ¡S )Nz:<BasicConstraints(ca={0.ca}, path_length={0.path_length})>r�   r1   r)   r)   r*   r]   Ê  s    ÿþzBasicConstraints.__repr__rj   c                 C   s&   t |tƒstS | j|jko$| j|jkS r"   )r#   r¤   rl   r¥   r¦   rm   r)   r)   r*   rn   Ï  s    
zBasicConstraints.__eq__c                 C   s   t | j| jfƒS r"   )rp   r¥   r¦   r1   r)   r)   r*   rq   Õ  s    zBasicConstraints.__hash__c                 C   s
   t  | ¡S r"   rs   r1   r)   r)   r*   r$   Ø  s    zBasicConstraints.public_bytes)rD   rE   rF   r   ZBASIC_CONSTRAINTSr=   rv   rL   r�   r8   r?   rw   r¥   r¦   rG   r]   ru   rn   rq   rO   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 )ÚDeltaCRLIndicatorNrd   c                 C   s   t |tƒstdƒ‚|| _d S rf   rg   ri   r)   r)   r*   r?   ß  s    
zDeltaCRLIndicator.__init__r.   c                 C   s   | j S r"   rr   r1   r)   r)   r*   re   å  s    zDeltaCRLIndicator.crl_numberrj   c                 C   s   t |tƒstS | j|jkS r"   )r#   r©   rl   re   rm   r)   r)   r*   rn   é  s    
zDeltaCRLIndicator.__eq__c                 C   s
   t | jƒS r"   ro   r1   r)   r)   r*   rq   ï  s    zDeltaCRLIndicator.__hash__c                 C   s
   d  | ¡S )Nz.<DeltaCRLIndicator(crl_number={0.crl_number})>r�   r1   r)   r)   r*   r]   ò  s    zDeltaCRLIndicator.__repr__c                 C   s
   t  | ¡S r"   rs   r1   r)   r)   r*   r$   õ  s    zDeltaCRLIndicator.public_bytes)rD   rE   rF   r   ZDELTA_CRL_INDICATORr=   r8   r?   rw   re   ru   rv   rn   rq   rG   r]   rO   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©rS   r‚   rZ   Ú_distribution_points©r2   r­   r)   r)   r*   r?   ü  s    ÿÿzCRLDistributionPoints.__init__r±   r.   c                 C   s   d  | j¡S )Nz<CRLDistributionPoints({})>©rK   r±   r1   r)   r)   r*   r]     s    zCRLDistributionPoints.__repr__rj   c                 C   s   t |tƒstS | j|jkS r"   )r#   rª   rl   r±   rm   r)   r)   r*   rn     s    
zCRLDistributionPoints.__eq__c                 C   s   t t| jƒƒS r"   ©rp   rŽ   r±   r1   r)   r)   r*   rq     s    zCRLDistributionPoints.__hash__c                 C   s
   t  | ¡S r"   rs   r1   r)   r)   r*   r$     s    z"CRLDistributionPoints.public_bytes)rD   rE   rF   r   ZCRL_DISTRIBUTION_POINTSr=   rL   r^   r?   r9   r`   ra   rb   rG   r]   ru   rv   rn   r8   rq   rO   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³   r1   r)   r)   r*   r]   3  s    zFreshestCRL.__repr__rj   c                 C   s   t |tƒstS | j|jkS r"   )r#   rµ   rl   r±   rm   r)   r)   r*   rn   6  s    
zFreshestCRL.__eq__c                 C   s   t t| jƒƒS r"   r´   r1   r)   r)   r*   rq   <  s    zFreshestCRL.__hash__c                 C   s
   t  | ¡S r"   rs   r1   r)   r)   r*   r$   ?  s    zFreshestCRL.public_bytes)rD   rE   rF   r   ZFRESHEST_CRLr=   rL   r^   r?   r9   r`   ra   rb   rG   r]   ru   rv   rn   r8   rq   rO   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ƒ‚|r¢t|tƒrštdd„ |D ƒƒs¢td	ƒ‚|rÂtj|ksºtj	|krÂt d
ƒ‚|rÚ|sÚ|sÚ|sÚt 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�   rS   r‚   rZ   r#   r   Ú	frozensetr¶   ÚunspecifiedÚremove_from_crlÚ
_full_nameÚ_relative_nameÚ_reasonsÚ_crl_issuer)r2   r·   r¸   r¹   rº   r)   r)   r*   r?   D  sV    ÿÿ
ÿÿÿþÿþÿÿzDistributionPoint.__init__r.   c                 C   s
   d  | ¡S )Nz}<DistributionPoint(full_name={0.full_name}, relative_name={0.relative_name}, reasons={0.reasons}, crl_issuer={0.crl_issuer})>r�   r1   r)   r)   r*   r]     s    þÿzDistributionPoint.__repr__rj   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«   rl   r·   r¸   r¹   rº   rm   r)   r)   r*   rn   †  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º   rp   r¸   r¹   )r2   Úfnrº   r)   r)   r*   rq   ‘  s    
ÿ
þzDistributionPoint.__hash__c                 C   s   | j S r"   ©r¿   r1   r)   r)   r*   r·   ¢  s    zDistributionPoint.full_namec                 C   s   | j S r"   ©rÀ   r1   r)   r)   r*   r¸   ¦  s    zDistributionPoint.relative_namec                 C   s   | j S r"   )rÁ   r1   r)   r)   r*   r¹   ª  s    zDistributionPoint.reasonsc                 C   s   | j S r"   )rÂ   r1   r)   r)   r*   rº   ®  s    zDistributionPoint.crl_issuer)rD   rE   rF   rL   r�   r^   r   r   Ú	FrozenSetr?   rG   r]   ru   rv   rn   r8   rq   rw   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)rD   rE   rF   r½   Úkey_compromiseÚca_compromiseÚaffiliation_changedrÇ   Úcessation_of_operationÚcertificate_holdÚprivilege_withdrawnÚaa_compromiser¾   r)   r)   r)   r*   r¶   ³  s   r¶   )é   é   é   é   é   é   é   é   rÏ   rÐ   rÑ   rÒ   rÓ   rÔ   rÕ   rÖ   c                   @   sš   e Zd ZejZeje eje ddœdd„Z	e
dœdd„Zeedœd	d
„Zedœdd„Zeeje dœdd„ƒZeeje dœdd„ƒZedœdd„ZdS )ÚPolicyConstraintsN)Úrequire_explicit_policyÚinhibit_policy_mappingr!   c                 C   s\   |d k	rt |tƒstdƒ‚|d k	r4t |tƒs4tdƒ‚|d krL|d krLtdƒ‚|| _|| _d S )Nz>require_explicit_policy must be a non-negative integer or Nonez=inhibit_policy_mapping must be a non-negative integer or NonezSAt least one of require_explicit_policy and inhibit_policy_mapping must not be None)r#   r8   rZ   r�   Ú_require_explicit_policyÚ_inhibit_policy_mapping)r2   rØ   rÙ   r)   r)   r*   r?   æ  s(    
 ÿÿ
 ÿÿÿzPolicyConstraints.__init__r.   c                 C   s
   d  | ¡S )Nz{<PolicyConstraints(require_explicit_policy={0.require_explicit_policy}, inhibit_policy_mapping={0.inhibit_policy_mapping})>r�   r1   r)   r)   r*   r]     s    þÿzPolicyConstraints.__repr__rj   c                 C   s&   t |tƒstS | j|jko$| j|jkS r"   )r#   r×   rl   rØ   rÙ   rm   r)   r)   r*   rn   
  s
    

þzPolicyConstraints.__eq__c                 C   s   t | j| jfƒS r"   )rp   rØ   rÙ   r1   r)   r)   r*   rq     s    
ÿzPolicyConstraints.__hash__c                 C   s   | j S r"   )rÚ   r1   r)   r)   r*   rØ     s    z)PolicyConstraints.require_explicit_policyc                 C   s   | j S r"   )rÛ   r1   r)   r)   r*   rÙ     s    z(PolicyConstraints.inhibit_policy_mappingc                 C   s
   t  | ¡S r"   rs   r1   r)   r)   r*   r$      s    zPolicyConstraints.public_bytes)rD   rE   rF   r   ZPOLICY_CONSTRAINTSr=   rL   r�   r8   r?   rG   r]   ru   rv   rn   rq   rw   rØ   rÙ   rO   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)rS   r‚   rZ   Ú	_policies)r2   rÞ   r)   r)   r*   r?   '  s    ÿzCertificatePolicies.__init__rß   r.   c                 C   s   d  | j¡S )Nz<CertificatePolicies({})>)rK   rß   r1   r)   r)   r*   r]   3  s    zCertificatePolicies.__repr__rj   c                 C   s   t |tƒstS | j|jkS r"   )r#   rÜ   rl   rß   rm   r)   r)   r*   rn   6  s    
zCertificatePolicies.__eq__c                 C   s   t t| jƒƒS r"   )rp   rŽ   rß   r1   r)   r)   r*   rq   <  s    zCertificatePolicies.__hash__c                 C   s
   t  | ¡S r"   rs   r1   r)   r)   r*   r$   ?  s    z CertificatePolicies.public_bytes)rD   rE   rF   r   ZCERTIFICATE_POLICIESr=   rL   r^   r?   r9   r`   ra   rb   rG   r]   ru   rv   rn   r8   rq   rO   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#   rG   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   rZ   Ú_policy_identifierrS   r‚   Ú_policy_qualifiers)r2   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�   r1   r)   r)   r*   r]   \  s    ÿÿzPolicyInformation.__repr__rj   c                 C   s&   t |tƒstS | j|jko$| j|jkS r"   )r#   rÝ   rl   rá   râ   rm   r)   r)   r*   rn   b  s
    

þzPolicyInformation.__eq__c                 C   s(   | j d k	rt| j ƒ}nd }t| j|fƒS r"   )râ   rŽ   rp   rá   )r2   Zpqr)   r)   r*   rq   k  s
    
þzPolicyInformation.__hash__c                 C   s   | j S r"   )rã   r1   r)   r)   r*   rá   u  s    z#PolicyInformation.policy_identifierc                 C   s   | j S r"   )rä   r1   r)   r)   r*   râ   y  s    z#PolicyInformation.policy_qualifiers)rD   rE   rF   r   rL   r�   r^   ÚUnionrG   r?   r]   ru   rv   rn   r8   rq   rw   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æ   rZ   Ú_notice_referenceÚ_explicit_text)r2   rç   rè   r)   r)   r*   r?   �  s     ÿÿzUserNotice.__init__r.   c                 C   s
   d  | ¡S )NzV<UserNotice(notice_reference={0.notice_reference}, explicit_text={0.explicit_text!r})>r�   r1   r)   r)   r*   r]   �  s    ÿÿzUserNotice.__repr__rj   c                 C   s&   t |tƒstS | j|jko$| j|jkS r"   )r#   rà   rl   rç   rè   rm   r)   r)   r*   rn   –  s
    

þzUserNotice.__eq__c                 C   s   t | j| jfƒS r"   )rp   rç   rè   r1   r)   r)   r*   rq   Ÿ  s    zUserNotice.__hash__c                 C   s   | j S r"   )ré   r1   r)   r)   r*   rç   ¢  s    zUserNotice.notice_referencec                 C   s   | j S r"   )rê   r1   r)   r)   r*   rè   ¦  s    zUserNotice.explicit_text)rD   rE   rF   rL   r�   rG   r?   r]   ru   rv   rn   r8   rq   rw   rç   rè   r)   r)   r)   r*   rà   €  s   ü	rà   c                   @   s†   e Zd Zeje eje ddœdd„Zedœdd„Z	e
edœd	d
„Zedœdd„Zeeje dœdd„ƒZeeje dœdd„ƒZdS )ræ   N)ÚorganizationÚnotice_numbersr!   c                 C   s2   || _ t|ƒ}tdd„ |D ƒƒs(tdƒ‚|| _d S )Nc                 s   s   | ]}t |tƒV  qd S r"   )r#   r8   r}   r)   r)   r*   r€   ³  s     z+NoticeReference.__init__.<locals>.<genexpr>z)notice_numbers must be a list of integers)Ú_organizationrS   r‚   rZ   Ú_notice_numbers)r2   rë   rì   r)   r)   r*   r?   ¬  s
    zNoticeReference.__init__r.   c                 C   s
   d  | ¡S )NzU<NoticeReference(organization={0.organization!r}, notice_numbers={0.notice_numbers})>r�   r1   r)   r)   r*   r]   ¸  s    ÿÿzNoticeReference.__repr__rj   c                 C   s&   t |tƒstS | j|jko$| j|jkS r"   )r#   ræ   rl   rë   rì   rm   r)   r)   r*   rn   ¾  s
    

þzNoticeReference.__eq__c                 C   s   t | jt| jƒfƒS r"   )rp   rë   rŽ   rì   r1   r)   r)   r*   rq   Ç  s    zNoticeReference.__hash__c                 C   s   | j S r"   )rí   r1   r)   r)   r*   rë   Ê  s    zNoticeReference.organizationc                 C   s   | j S r"   )rî   r1   r)   r)   r*   rì   Î  s    zNoticeReference.notice_numbers)rD   rE   rF   rL   r�   rG   r^   r8   r?   r]   ru   rv   rn   rq   rw   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)rS   r‚   rZ   Ú_usages)r2   rð   r)   r)   r*   r?   Ö  s    ÿzExtendedKeyUsage.__init__rñ   r.   c                 C   s   d  | j¡S )Nz<ExtendedKeyUsage({})>)rK   rñ   r1   r)   r)   r*   r]   á  s    zExtendedKeyUsage.__repr__rj   c                 C   s   t |tƒstS | j|jkS r"   )r#   rï   rl   rñ   rm   r)   r)   r*   rn   ä  s    
zExtendedKeyUsage.__eq__c                 C   s   t t| jƒƒS r"   )rp   rŽ   rñ   r1   r)   r)   r*   rq   ê  s    zExtendedKeyUsage.__hash__c                 C   s
   t  | ¡S r"   rs   r1   r)   r)   r*   r$   í  s    zExtendedKeyUsage.public_bytes)rD   rE   rF   r   ZEXTENDED_KEY_USAGEr=   rL   r^   r   r?   r9   r`   ra   rb   rG   r]   ru   rv   rn   r8   rq   rO   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 )ÚOCSPNoCheckrj   c                 C   s   t |tƒstS dS ©NT)r#   rò   rl   rm   r)   r)   r*   rn   ô  s    
zOCSPNoCheck.__eq__r.   c                 C   s   t tƒS r"   )rp   rò   r1   r)   r)   r*   rq   ú  s    zOCSPNoCheck.__hash__c                 C   s   dS )Nz<OCSPNoCheck()>r)   r1   r)   r)   r*   r]   ý  s    zOCSPNoCheck.__repr__c                 C   s
   t  | ¡S r"   rs   r1   r)   r)   r*   r$      s    zOCSPNoCheck.public_bytesN)rD   rE   rF   r   ZOCSP_NO_CHECKr=   ru   rv   rn   r8   rq   rG   r]   rO   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 )ÚPrecertPoisonrj   c                 C   s   t |tƒstS dS ró   )r#   rô   rl   rm   r)   r)   r*   rn     s    
zPrecertPoison.__eq__r.   c                 C   s   t tƒS r"   )rp   rô   r1   r)   r)   r*   rq     s    zPrecertPoison.__hash__c                 C   s   dS )Nz<PrecertPoison()>r)   r1   r)   r)   r*   r]     s    zPrecertPoison.__repr__c                 C   s
   t  | ¡S r"   rs   r1   r)   r)   r*   r$     s    zPrecertPoison.public_bytesN)rD   rE   rF   r   ZPRECERT_POISONr=   ru   rv   rn   r8   rq   rG   r]   rO   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)rS   r‚   r/   rZ   Ú	_features)r2   r÷   r)   r)   r*   r?     s    ÿ
þÿzTLSFeature.__init__rø   r.   c                 C   s
   d  | ¡S )Nz$<TLSFeature(features={0._features})>r�   r1   r)   r)   r*   r]   )  s    zTLSFeature.__repr__rj   c                 C   s   t |tƒstS | j|jkS r"   )r#   rõ   rl   rø   rm   r)   r)   r*   rn   ,  s    
zTLSFeature.__eq__c                 C   s   t t| jƒƒS r"   )rp   rŽ   rø   r1   r)   r)   r*   rq   2  s    zTLSFeature.__hash__c                 C   s
   t  | ¡S r"   rs   r1   r)   r)   r*   r$   5  s    zTLSFeature.public_bytes)rD   rE   rF   r   ZTLS_FEATUREr=   rL   r^   r?   r9   r`   ra   rb   rG   r]   ru   rv   rn   r8   rq   rO   r$   r)   r)   r)   r*   rõ     s   rõ   c                   @   s   e Zd ZdZdZdS )rö   rÓ   é   N)rD   rE   rF   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#   r8   rZ   r�   Ú_skip_certs)r2   rý   r)   r)   r*   r?   J  s
    
zInhibitAnyPolicy.__init__r.   c                 C   s
   d  | ¡S )Nz-<InhibitAnyPolicy(skip_certs={0.skip_certs})>r�   r1   r)   r)   r*   r]   S  s    zInhibitAnyPolicy.__repr__rj   c                 C   s   t |tƒstS | j|jkS r"   )r#   rü   rl   rý   rm   r)   r)   r*   rn   V  s    
zInhibitAnyPolicy.__eq__c                 C   s
   t | jƒS r"   )rp   rý   r1   r)   r)   r*   rq   \  s    zInhibitAnyPolicy.__hash__c                 C   s   | j S r"   )rþ   r1   r)   r)   r*   rý   _  s    zInhibitAnyPolicy.skip_certsc                 C   s
   t  | ¡S r"   rs   r1   r)   r)   r*   r$   c  s    zInhibitAnyPolicy.public_bytes)rD   rE   rF   r   ZINHIBIT_ANY_POLICYr=   r8   r?   rG   r]   ru   rv   rn   rq   rw   rý   rO   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)
r2   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	  r1   r)   r)   r*   r   †  s    zKeyUsage.digital_signaturec                 C   s   | j S r"   )r
  r1   r)   r)   r*   r  Š  s    zKeyUsage.content_commitmentc                 C   s   | j S r"   )r  r1   r)   r)   r*   r  Ž  s    zKeyUsage.key_enciphermentc                 C   s   | j S r"   )r  r1   r)   r)   r*   r  ’  s    zKeyUsage.data_enciphermentc                 C   s   | j S r"   )r  r1   r)   r)   r*   r  –  s    zKeyUsage.key_agreementc                 C   s   | j S r"   )r  r1   r)   r)   r*   r  š  s    zKeyUsage.key_cert_signc                 C   s   | j S r"   )r  r1   r)   r)   r*   r  ž  s    zKeyUsage.crl_signc                 C   s   | j stdƒ‚n| jS d S )Nz7encipher_only is undefined unless key_agreement is true)r  r�   r  r1   r)   r)   r*   r  ¢  s
    ÿzKeyUsage.encipher_onlyc                 C   s   | j stdƒ‚n| jS d S )Nz7decipher_only is undefined unless key_agreement is true)r  r�   r  r1   r)   r)   r*   r  «  s
    ÿzKeyUsage.decipher_onlyc                 C   s<   z| j }| j}W n tk
r,   d}d}Y nX d | ||¡S )NFa-  <KeyUsage(digital_signature={0.digital_signature}, content_commitment={0.content_commitment}, key_encipherment={0.key_encipherment}, data_encipherment={0.data_encipherment}, key_agreement={0.key_agreement}, key_cert_sign={0.key_cert_sign}, crl_sign={0.crl_sign}, encipher_only={1}, decipher_only={2})>)r  r  r�   rK   )r2   r  r  r)   r)   r*   r]   ´  s    

ÿ  øzKeyUsage.__repr__rj   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ÿ   rl   r   r  r  r  r  r  r  r  r  rm   r)   r)   r*   rn   É  s&    

ÿ
þ
ý
ü
û
ú
ù
÷zKeyUsage.__eq__c              
   C   s,   t | j| j| j| j| j| j| j| j| j	f	ƒS r"   )
rp   r   r  r  r  r  r  r  r  r  r1   r)   r)   r*   rq   Ù  s    ÷ÿzKeyUsage.__hash__c                 C   s
   t  | ¡S r"   rs   r1   r)   r)   r*   r$   è  s    zKeyUsage.public_bytes)rD   rE   rF   r   Z	KEY_USAGEr=   rv   r?   rw   r   r  r  r  r  r  r  r  r  rG   r]   ru   rn   r8   rq   rO   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	r€t |ƒ}|s\tdƒ‚tdd„ |D ƒƒsvtdƒ‚|  |¡ |d kr˜|d kr˜t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)rS   r�   r‚   rZ   Ú_validate_ip_nameÚ_permitted_subtreesÚ_excluded_subtrees)r2   r  r  r)   r)   r*   r?   ï  s8    ÿÿ
ÿÿ
ÿzNameConstraints.__init__rj   c                 C   s&   t |tƒstS | j|jko$| j|jkS r"   )r#   r  rl   r  r  rm   r)   r)   r*   rn     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)ÚanyrZ   )r2   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�   r1   r)   r)   r*   r]   /  s    ÿÿzNameConstraints.__repr__c                 C   s@   | j d k	rt| j ƒ}nd }| jd k	r0t| jƒ}nd }t||fƒS r"   )r  rŽ   r  rp   )r2   ZpsÚesr)   r)   r*   rq   5  s    
ÿ
ÿzNameConstraints.__hash__c                 C   s   | j S r"   )r  r1   r)   r)   r*   r  F  s    z"NameConstraints.permitted_subtreesc                 C   s   | j S r"   )r  r1   r)   r)   r*   r  L  s    z!NameConstraints.excluded_subtreesc                 C   s
   t  | ¡S r"   rs   r1   r)   r)   r*   r$   R  s    zNameConstraints.public_bytes)rD   rE   rF   r   ZNAME_CONSTRAINTSr=   rL   r�   r^   r   r?   ru   rv   rn   r  rG   r]   r8   rq   rw   r‘   r  r  rO   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   rZ   rv   Ú_oidÚ	_criticalÚ_value)r2   r=   r   r[   r)   r)   r*   r?   W  s    
ÿ
zExtension.__init__r.   c                 C   s   | j S r"   ©r!  r1   r)   r)   r*   r=   f  s    zExtension.oidc                 C   s   | j S r"   )r"  r1   r)   r)   r*   r   j  s    zExtension.criticalc                 C   s   | j S r"   ©r#  r1   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�   r1   r)   r)   r*   r]   r  s    ÿýzExtension.__repr__rj   c                 C   s2   t |tƒstS | j|jko0| j|jko0| j|jkS r"   )r#   r  rl   r=   r   r[   rm   r)   r)   r*   rn   x  s    

ÿ
ýzExtension.__eq__c                 C   s   t | j| j| jfƒS r"   )rp   r=   r   r[   r1   r)   r)   r*   rq   ‚  s    zExtension.__hash__)rD   rE   rF   r   rv   r   r?   rw   r=   r   r[   rG   r]   ru   rn   r8   rq   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)rS   r‚   rZ   Ú_general_names©r2   r(  r)   r)   r*   r?   ‡  s    ÿzGeneralNames.__init__r)  ©Útyper!   c                 C   s   d S r"   r)   ©r2   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ú   r/  r)   r)   r*   Ú
<listcomp>Ï  s     z4GeneralNames.get_values_for_type.<locals>.<listcomp>)r   rS   )r2   r,  Zobjsr)   r1  r*   r.  ¸  s    r.   c                 C   s   d  | j¡S )Nz<GeneralNames({})>©rK   r)  r1   r)   r)   r*   r]   Ò  s    zGeneralNames.__repr__rj   c                 C   s   t |tƒstS | j|jkS r"   )r#   r&  rl   r)  rm   r)   r)   r*   rn   Õ  s    
zGeneralNames.__eq__c                 C   s   t t| jƒƒS r"   )rp   rŽ   r)  r1   r)   r)   r*   rq   Û  s    zGeneralNames.__hash__)!rD   rE   rF   rL   r^   r   r?   r9   r`   ra   rb   Úoverloadrå   r_   r   r   r   r‘   rG   r.  r   r   r   r   r   r   r   r]   ru   rv   rn   r8   rq   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({})>r3  r1   r)   r)   r*   r]      s    zSubjectAlternativeName.__repr__rj   c                 C   s   t |tƒstS | j|jkS r"   )r#   r5  rl   r)  rm   r)   r)   r*   rn   #  s    
zSubjectAlternativeName.__eq__c                 C   s
   t | jƒS r"   ©rp   r)  r1   r)   r)   r*   rq   )  s    zSubjectAlternativeName.__hash__c                 C   s
   t  | ¡S r"   rs   r1   r)   r)   r*   r$   ,  s    z#SubjectAlternativeName.public_bytes)&rD   rE   rF   r   ZSUBJECT_ALTERNATIVE_NAMEr=   rL   r^   r   r?   r9   r`   ra   rb   r4  rå   r_   r   r   r   r‘   rG   r.  r   r   r   r   r   r   r   r]   ru   rv   rn   r8   rq   rO   r$   r)   r)   r)   r*   r5  ß  sf   þÿù
ýýþþúÿ	üÿõr5  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"   r6  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"   r7  r-  r)   r)   r*   r.  ]  s    r.   c                 C   s   d  | j¡S )Nz<IssuerAlternativeName({})>r3  r1   r)   r)   r*   r]   q  s    zIssuerAlternativeName.__repr__rj   c                 C   s   t |tƒstS | j|jkS r"   )r#   r9  rl   r)  rm   r)   r)   r*   rn   t  s    
zIssuerAlternativeName.__eq__c                 C   s
   t | jƒS r"   r8  r1   r)   r)   r*   rq   z  s    zIssuerAlternativeName.__hash__c                 C   s
   t  | ¡S r"   rs   r1   r)   r)   r*   r$   }  s    z"IssuerAlternativeName.public_bytes)&rD   rE   rF   r   ZISSUER_ALTERNATIVE_NAMEr=   rL   r^   r   r?   r9   r`   ra   rb   r4  rå   r_   r   r   r   r‘   rG   r.  r   r   r   r   r   r   r   r]   ru   rv   rn   r8   rq   rO   r$   r)   r)   r)   r*   r9  0  sf   þÿù
ýýþþúÿ	üÿõr9  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"   r6  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"   r7  r-  r)   r)   r*   r.  ®  s    r.   c                 C   s   d  | j¡S )Nz<CertificateIssuer({})>r3  r1   r)   r)   r*   r]   Â  s    zCertificateIssuer.__repr__rj   c                 C   s   t |tƒstS | j|jkS r"   )r#   r:  rl   r)  rm   r)   r)   r*   rn   Å  s    
zCertificateIssuer.__eq__c                 C   s
   t | jƒS r"   r8  r1   r)   r)   r*   rq   Ë  s    zCertificateIssuer.__hash__c                 C   s
   t  | ¡S r"   rs   r1   r)   r)   r*   r$   Î  s    zCertificateIssuer.public_bytes)&rD   rE   rF   r   ZCERTIFICATE_ISSUERr=   rL   r^   r   r?   r9   r`   ra   rb   r4  rå   r_   r   r   r   r‘   rG   r.  r   r   r   r   r   r   r   r]   ru   rv   rn   r8   rq   rO   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¶   rZ   Ú_reason)r2   r<  r)   r)   r*   r?   Õ  s    
zCRLReason.__init__r.   c                 C   s   d  | j¡S )Nz<CRLReason(reason={})>)rK   r=  r1   r)   r)   r*   r]   Û  s    zCRLReason.__repr__rj   c                 C   s   t |tƒstS | j|jkS r"   )r#   r;  rl   r<  rm   r)   r)   r*   rn   Þ  s    
zCRLReason.__eq__c                 C   s
   t | jƒS r"   )rp   r<  r1   r)   r)   r*   rq   ä  s    zCRLReason.__hash__c                 C   s   | j S r"   )r=  r1   r)   r)   r*   r<  ç  s    zCRLReason.reasonc                 C   s
   t  | ¡S r"   rs   r1   r)   r)   r*   r$   ë  s    zCRLReason.public_bytes)rD   rE   rF   r   Z
CRL_REASONr=   r¶   r?   rG   r]   ru   rv   rn   r8   rq   rw   r<  rO   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#   ÚdatetimerZ   Ú_invalidity_date)r2   r?  r)   r)   r*   r?   ò  s    zInvalidityDate.__init__r.   c                 C   s   d  | j¡S )Nz$<InvalidityDate(invalidity_date={})>)rK   rA  r1   r)   r)   r*   r]   ø  s    ÿzInvalidityDate.__repr__rj   c                 C   s   t |tƒstS | j|jkS r"   )r#   r>  rl   r?  rm   r)   r)   r*   rn   ý  s    
zInvalidityDate.__eq__c                 C   s
   t | jƒS r"   )rp   r?  r1   r)   r)   r*   rq     s    zInvalidityDate.__hash__c                 C   s   | j S r"   )rA  r1   r)   r)   r*   r?    s    zInvalidityDate.invalidity_datec                 C   s
   t  | ¡S r"   rs   r1   r)   r)   r*   r$   
  s    zInvalidityDate.public_bytes)rD   rE   rF   r   ZINVALIDITY_DATEr=   r@  r?   rG   r]   ru   rv   rn   r8   rq   rw   r?  rO   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©rS   r‚   rZ   Ú_signed_certificate_timestamps©r2   rD  r)   r)   r*   r?     s    þÿz2PrecertificateSignedCertificateTimestamps.__init__rI  r.   c                 C   s   d  t| ƒ¡S )Nz/<PrecertificateSignedCertificateTimestamps({})>©rK   rS   r1   r)   r)   r*   r]   &  s    ÿz2PrecertificateSignedCertificateTimestamps.__repr__c                 C   s   t t| jƒƒS r"   ©rp   rŽ   rI  r1   r)   r)   r*   rq   +  s    z2PrecertificateSignedCertificateTimestamps.__hash__rj   c                 C   s   t |tƒstS | j|jkS r"   )r#   rB  rl   rI  rm   r)   r)   r*   rn   .  s    
ÿÿz0PrecertificateSignedCertificateTimestamps.__eq__c                 C   s
   t  | ¡S r"   rs   r1   r)   r)   r*   r$   7  s    z6PrecertificateSignedCertificateTimestamps.public_bytes)rD   rE   rF   r   Z%PRECERT_SIGNED_CERTIFICATE_TIMESTAMPSr=   rL   r^   r   r?   r9   r`   ra   rb   rG   r]   r8   rq   ru   rv   rn   rO   r$   r)   r)   r)   r*   rB    s   ÿûÿ
	rB  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 )ÚSignedCertificateTimestampsNrC  c                 C   s,   t |ƒ}tdd„ |D ƒƒs"tdƒ‚|| _d S )Nc                 s   s   | ]}t |tƒV  qd S r"   rE  rF  r)   r)   r*   r€   E  s   ÿz7SignedCertificateTimestamps.__init__.<locals>.<genexpr>rG  rH  rJ  r)   r)   r*   r?   >  s    þÿz$SignedCertificateTimestamps.__init__rI  r.   c                 C   s   d  t| ƒ¡S )Nz!<SignedCertificateTimestamps({})>rK  r1   r)   r)   r*   r]   S  s    z$SignedCertificateTimestamps.__repr__c                 C   s   t t| jƒƒS r"   rL  r1   r)   r)   r*   rq   V  s    z$SignedCertificateTimestamps.__hash__rj   c                 C   s   t |tƒstS | j|jkS r"   )r#   rM  rl   rI  rm   r)   r)   r*   rn   Y  s    
ÿÿz"SignedCertificateTimestamps.__eq__c                 C   s
   t  | ¡S r"   rs   r1   r)   r)   r*   r$   b  s    z(SignedCertificateTimestamps.public_bytes)rD   rE   rF   r   ZSIGNED_CERTIFICATE_TIMESTAMPSr=   rL   r^   r   r?   r9   r`   ra   rb   rG   r]   r8   rq   ru   rv   rn   rO   r$   r)   r)   r)   r*   rM  ;  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 )Ú	OCSPNonceN)Únoncer!   c                 C   s   t |tƒstdƒ‚|| _d S )Nznonce must be bytes)r#   rO   rZ   Ú_nonce)r2   rO  r)   r)   r*   r?   i  s    
zOCSPNonce.__init__rj   c                 C   s   t |tƒstS | j|jkS r"   )r#   rN  rl   rO  rm   r)   r)   r*   rn   o  s    
zOCSPNonce.__eq__r.   c                 C   s
   t | jƒS r"   )rp   rO  r1   r)   r)   r*   rq   u  s    zOCSPNonce.__hash__c                 C   s
   d  | ¡S )Nz<OCSPNonce(nonce={0.nonce!r})>r�   r1   r)   r)   r*   r]   x  s    zOCSPNonce.__repr__c                 C   s   | j S r"   )rP  r1   r)   r)   r*   rO  {  s    zOCSPNonce.noncec                 C   s
   t  | ¡S r"   rs   r1   r)   r)   r*   r$     s    zOCSPNonce.public_bytes)rD   rE   rF   r   ZNONCEr=   rO   r?   ru   rv   rn   r8   rq   rG   r]   rw   rO  r$   r)   r)   r)   r*   rN  f  s   rN  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	ƒr€t|t	ƒr€t|t	ƒr€t|t	ƒsˆtdƒ‚||||g}t
dd„ |D ƒƒdkr²td	ƒ‚t|||||||gƒsÐt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*   r2  ·  s      z5IssuingDistributionPoint.__init__.<locals>.<listcomp>rÏ   z‹Only one of the following can be set to True: only_contains_user_certs, only_contains_ca_certs, indirect_crl, only_contains_attribute_certszàCannot 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.)rS   r#   r¼   r‚   rZ   r¶   r½   r¾   r�   rv   r/   r  Ú_only_contains_user_certsÚ_only_contains_ca_certsÚ_indirect_crlÚ_only_contains_attribute_certsÚ_only_some_reasonsr¿   rÀ   )	r2   r·   r¸   rR  rS  rT  rU  rV  Zcrl_constraintsr)   r)   r*   r?   †  st    
ÿþÿÿþÿÿþýüÿüÿùÿÿz!IssuingDistributionPoint.__init__r.   c                 C   s
   d  | ¡S )NaG  <IssuingDistributionPoint(full_name={0.full_name}, relative_name={0.relative_name}, only_contains_user_certs={0.only_contains_user_certs}, only_contains_ca_certs={0.only_contains_ca_certs}, only_some_reasons={0.only_some_reasons}, indirect_crl={0.indirect_crl}, only_contains_attribute_certs={0.only_contains_attribute_certs})>r�   r1   r)   r)   r*   r]   Ù  s    ùÿz!IssuingDistributionPoint.__repr__rj   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#   rQ  rl   r·   r¸   rR  rS  rT  rU  rV  rm   r)   r)   r*   rn   å  s"    

ÿ
þ
ý
ü
ûÿùzIssuingDistributionPoint.__eq__c                 C   s$   t | j| j| j| j| j| j| jfƒS r"   )rp   r·   r¸   rR  rS  rT  rU  rV  r1   r)   r)   r*   rq   ô  s    ùÿz!IssuingDistributionPoint.__hash__c                 C   s   | j S r"   rÄ   r1   r)   r)   r*   r·     s    z"IssuingDistributionPoint.full_namec                 C   s   | j S r"   rÅ   r1   r)   r)   r*   r¸     s    z&IssuingDistributionPoint.relative_namec                 C   s   | j S r"   )rW  r1   r)   r)   r*   rR  	  s    z1IssuingDistributionPoint.only_contains_user_certsc                 C   s   | j S r"   )rX  r1   r)   r)   r*   rS    s    z/IssuingDistributionPoint.only_contains_ca_certsc                 C   s   | j S r"   )r[  r1   r)   r)   r*   rT    s    z*IssuingDistributionPoint.only_some_reasonsc                 C   s   | j S r"   )rY  r1   r)   r)   r*   rU    s    z%IssuingDistributionPoint.indirect_crlc                 C   s   | j S r"   )rZ  r1   r)   r)   r*   rV    s    z6IssuingDistributionPoint.only_contains_attribute_certsc                 C   s
   t  | ¡S r"   rs   r1   r)   r)   r*   r$     s    z%IssuingDistributionPoint.public_bytes) rD   rE   rF   r   ZISSUING_DISTRIBUTION_POINTr=   rL   r�   r^   r   r   rv   rÆ   r¶   r?   rG   r]   ru   rn   r8   rq   rw   r‘   r·   r¸   rR  rS  rT  rU  rV  rO   r$   r)   r)   r)   r*   rQ  ƒ  s:   ÷SþrQ  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 )rY   N)r=   r[   r!   c                 C   s"   t |tƒstdƒ‚|| _|| _d S )Nzoid must be an ObjectIdentifier)r#   r   rZ   r!  r#  )r2   r=   r[   r)   r)   r*   r?   $  s    
zUnrecognizedExtension.__init__r.   c                 C   s   | j S r"   r$  r1   r)   r)   r*   r=   *  s    zUnrecognizedExtension.oidc                 C   s   | j S r"   r%  r1   r)   r)   r*   r[   .  s    zUnrecognizedExtension.valuec                 C   s
   d  | ¡S )Nz7<UnrecognizedExtension(oid={0.oid}, value={0.value!r})>r�   r1   r)   r)   r*   r]   2  s    ÿÿzUnrecognizedExtension.__repr__rj   c                 C   s&   t |tƒstS | j|jko$| j|jkS r"   )r#   rY   rl   r=   r[   rm   r)   r)   r*   rn   8  s    
zUnrecognizedExtension.__eq__c                 C   s   t | j| jfƒS r"   )rp   r=   r[   r1   r)   r)   r*   rq   >  s    zUnrecognizedExtension.__hash__c                 C   s   | j S r"   rú   r1   r)   r)   r*   r$   A  s    z"UnrecognizedExtension.public_bytes)rD   rE   rF   r   rO   r?   rw   r=   r[   rG   r]   ru   rv   rn   r8   rq   r$   r)   r)   r)   r*   rY   #  s   rY   )gÚabcr@  r%   r  rL   Zcryptographyr   Z"cryptography.hazmat.bindings._rustr   r   rt   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   rO   r+   rG   r9   Ú	Exceptionr:   rI   ÚABCMetar   rQ   rc   rx   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&  r5  r9  r:  r;  r>  rB  rM  rN  rQ  rY   r)   r)   r)   r*   Ú<module>   s¼   ,  ÿþ'l$!!(.%%pø        øA=+("  j0YQQQ-+ !