a
    còf* ã                   @  sz  d dl mZ d dlZd dlZd dlZd dlZd dlZd dlmZ d dl	m
Z
 d dl	mZ d dlmZmZ d dlmZ d dlmZ d d	lmZmZ d d
lmZ d dlmZmZmZmZmZmZm Z m!Z!m"Z" d dl#m$Z$m%Z% d dl&m'Z'm(Z(m)Z)m*Z* ej+dddd�Z,dddœdd„Z-ddœdd„Z.G dd„ de/ƒZ0G dd„ de/ƒZ1G dd„ dej2d �Z3G d!d"„ d"ƒZ4G d#d$„ d$e3ƒZ5G d%d&„ d&e3ƒZ6G d'd(„ d(e3ƒZ7G d)d*„ d*e3ƒZ8G d+d,„ d,e3ƒZ9G d-d.„ d.ƒZ:G d/d0„ d0e3ƒZ;G d1d2„ d2e3ƒZ<G d3d4„ d4e3ƒZ=G d5d6„ d6e3ƒZ>G d7d8„ d8ƒZ?G d9d:„ d:ej@ƒZAeAjBeAjCeAjDeAjEeAjFeAjGeAjHeAjId;œZJeAjBd<eAjCd=eAjDd>eAjEd?eAjFd@eAjGdAeAjHdBeAjIdCiZKeAjLd eAjBd<eAjCd=eAjDd>eAjEd?eAjFd@eAjGdAeAjMdCeAjHdDeAjIdEi
ZNG dFdG„ dGe3ƒZOG dHdI„ dIe3ƒZPG dJdK„ dKƒZQG dLdM„ dMƒZRG dNdO„ dOƒZSG dPdQ„ dQe3ƒZTG dRdS„ dSe3ƒZUG dTdU„ dUe3ƒZVG dVdW„ dWe3ƒZWG dXdY„ dYej@ƒZXdZd[„ eXD ƒZYG d\d]„ d]e3ƒZZG d^d_„ d_e3ƒZ[G d`da„ dae3ƒZ\G dbdc„ dcej]e, ƒZ^G ddde„ deƒZ_G dfdg„ dge3ƒZ`G dhdi„ die3ƒZaG djdk„ dke3ƒZbG dldm„ dme3ƒZcG dndo„ doe3ƒZdG dpdq„ dqe3ƒZeG drds„ dse3ƒZfG dtdu„ due3ƒZgG dvdw„ dwe3ƒZhG dxdy„ dye3ƒZiG dzd{„ d{e3ƒZjG d|d}„ d}e3ƒZkdS )~é    )ÚannotationsN)Úutils)Úasn1)Úx509)Úconstant_timeÚserialization)ÚEllipticCurvePublicKey)ÚRSAPublicKey)ÚCertificateIssuerPublicKeyTypesÚCertificatePublicKeyTypes)ÚSignedCertificateTimestamp)	ÚDirectoryNameÚDNSNameÚGeneralNameÚ	IPAddressÚ	OtherNameÚRegisteredIDÚ
RFC822NameÚUniformResourceIdentifierÚ_IPAddressTypes)ÚNameÚRelativeDistinguishedName)ÚCRLEntryExtensionOIDÚExtensionOIDÚObjectIdentifierÚOCSPExtensionOIDÚExtensionTypeVarÚExtensionTypeT)ÚboundÚ	covariantr   Úbytes©Ú
public_keyÚreturnc                 C  sl   t | tƒr |  tjjtjj¡}n>t | tƒr@|  tjj	tjj
¡}n|  tjjtjj¡}t |¡}t |¡ ¡ S ©N)Ú
isinstancer	   Úpublic_bytesr   ÚEncodingZDERZPublicFormatZPKCS1r   ZX962ZUncompressedPointZSubjectPublicKeyInfor   Zparse_spki_for_dataÚhashlibÚsha1Údigest)r"   ÚdataZ
serialized© r,   úY/home/httpd/docs/test/DocsMgr/lib/python3.9/site-packages/cryptography/x509/extensions.pyÚ_key_identifier_from_public_key2   s     
þ
þþ
r.   Ústr©Ú
field_namec                   s4   ddœ‡ fdd„}‡ fdd„}‡ fdd„}|||fS )	NÚint©r#   c                   s   t t| ˆ ƒƒS r$   )ÚlenÚgetattr©Úselfr0   r,   r-   Ú
len_methodK   s    z*_make_sequence_methods.<locals>.len_methodc                   s   t t| ˆ ƒƒS r$   )Úiterr5   r6   r0   r,   r-   Úiter_methodN   s    z+_make_sequence_methods.<locals>.iter_methodc                   s   t | ˆ ƒ| S r$   )r5   )r7   Úidxr0   r,   r-   Úgetitem_methodQ   s    z._make_sequence_methods.<locals>.getitem_methodr,   )r1   r8   r:   r<   r,   r0   r-   Ú_make_sequence_methodsJ   s    r=   c                      s&   e Zd Zddddœ‡ fdd„Z‡  ZS )ÚDuplicateExtensionr/   r   ÚNone©ÚmsgÚoidr#   c                   s   t ƒ  |¡ || _d S r$   ©ÚsuperÚ__init__rB   ©r7   rA   rB   ©Ú	__class__r,   r-   rE   X   s    zDuplicateExtension.__init__©Ú__name__Ú
__module__Ú__qualname__rE   Ú__classcell__r,   r,   rG   r-   r>   W   s   r>   c                      s&   e Zd Zddddœ‡ fdd„Z‡  ZS )ÚExtensionNotFoundr/   r   r?   r@   c                   s   t ƒ  |¡ || _d S r$   rC   rF   rG   r,   r-   rE   ^   s    zExtensionNotFound.__init__rI   r,   r,   rG   r-   rN   ]   s   rN   c                   @  s$   e Zd ZU ded< ddœdd„ZdS )r   z!typing.ClassVar[ObjectIdentifier]rB   r    r3   c                 C  s   t d| ›�ƒ‚dS )z7
        Serializes the extension type to DER.
        z3public_bytes is not implemented for extension type N)ÚNotImplementedErrorr6   r,   r,   r-   r&   f   s    ÿzExtensionType.public_bytesN)rJ   rK   rL   Ú__annotations__r&   r,   r,   r,   r-   r   c   s   
)Ú	metaclassc                   @  sX   e Zd Zdddœdd„Zdddœd	d
„Zdddœdd„Zedƒ\ZZZ	ddœdd„Z
dS )Ú
Extensionsz)typing.Iterable[Extension[ExtensionType]]r?   )Ú
extensionsr#   c                 C  s   t |ƒ| _d S r$   )ÚlistÚ_extensions)r7   rS   r,   r,   r-   rE   p   s    zExtensions.__init__r   zExtension[ExtensionType])rB   r#   c                 C  s2   | D ]}|j |kr|  S qtd|› d�|ƒ‚d S )NúNo ú extension was found)rB   rN   )r7   rB   Úextr,   r,   r-   Úget_extension_for_oidu   s    

z Extensions.get_extension_for_oidztype[ExtensionTypeVar]zExtension[ExtensionTypeVar])Úextclassr#   c                 C  sF   |t u rtdƒ‚| D ]}t|j|ƒr|  S qtd|› d�|jƒ‚d S )Nz|UnrecognizedExtension can't be used with get_extension_for_class because more than one instance of the class may be present.rV   rW   )ÚUnrecognizedExtensionÚ	TypeErrorr%   ÚvaluerN   rB   )r7   rZ   rX   r,   r,   r-   Úget_extension_for_class~   s    ÿ
ÿz"Extensions.get_extension_for_classrU   r/   r3   c                 C  s   d| j › d�S )Nz<Extensions(ú)>)rU   r6   r,   r,   r-   Ú__repr__’   s    zExtensions.__repr__N)rJ   rK   rL   rE   rY   r^   r=   Ú__len__Ú__iter__Ú__getitem__r`   r,   r,   r,   r-   rR   o   s
   	rR   c                   @  sn   e Zd ZejZdddœdd„Zdddœd	d
„Zddœdd„Zddœdd„Z	e
ddœdd„ƒZddœdd„ZdS )Ú	CRLNumberr2   r?   ©Ú
crl_numberr#   c                 C  s   t |tƒstdƒ‚|| _d S ©Nzcrl_number must be an integer©r%   r2   r\   Ú_crl_number©r7   rf   r,   r,   r-   rE   ™   s    
zCRLNumber.__init__ÚobjectÚbool©Úotherr#   c                 C  s   t |tƒstS | j|jkS r$   )r%   rd   ÚNotImplementedrf   ©r7   rn   r,   r,   r-   Ú__eq__Ÿ   s    
zCRLNumber.__eq__r3   c                 C  s
   t | jƒS r$   ©Úhashrf   r6   r,   r,   r-   Ú__hash__¥   s    zCRLNumber.__hash__r/   c                 C  s   d| j › d�S )Nz<CRLNumber(r_   ©rf   r6   r,   r,   r-   r`   ¨   s    zCRLNumber.__repr__c                 C  s   | j S r$   ©ri   r6   r,   r,   r-   rf   «   s    zCRLNumber.crl_numberr    c                 C  s
   t  | ¡S r$   ©Ú	rust_x509Zencode_extension_valuer6   r,   r,   r-   r&   ¯   s    zCRLNumber.public_bytesN)rJ   rK   rL   r   Z
CRL_NUMBERrB   rE   rq   rt   r`   Úpropertyrf   r&   r,   r,   r,   r-   rd   –   s   rd   c                   @  s¾   e Zd ZejZdddddœdd„Zedd d	œd
d„ƒZedd dœdd„ƒZ	ddœdd„Z
dddœdd„Zddœdd„Zeddœdd„ƒZeddœdd „ƒZeddœd!d"„ƒZd#dœd$d%„Zd&S )'ÚAuthorityKeyIdentifierzbytes | Noneú#typing.Iterable[GeneralName] | Noneú
int | Noner?   )Úkey_identifierÚauthority_cert_issuerÚauthority_cert_serial_numberr#   c                 C  sr   |d u |d u krt dƒ‚|d urBt|ƒ}tdd„ |D ƒƒsBtdƒ‚|d ur\t|tƒs\tdƒ‚|| _|| _|| _d S )NzXauthority_cert_issuer and authority_cert_serial_number must both be present or both Nonec                 s  s   | ]}t |tƒV  qd S r$   ©r%   r   ©Ú.0Úxr,   r,   r-   Ú	<genexpr>Æ   s   z2AuthorityKeyIdentifier.__init__.<locals>.<genexpr>z;authority_cert_issuer must be a list of GeneralName objectsz/authority_cert_serial_number must be an integer)	Ú
ValueErrorrT   Úallr\   r%   r2   Ú_key_identifierÚ_authority_cert_issuerÚ_authority_cert_serial_number)r7   r}   r~   r   r,   r,   r-   rE   ¶   s*    ÿÿÿÿ
ÿzAuthorityKeyIdentifier.__init__r
   r!   c                 C  s   t |ƒ}| |d d d�S ©N©r}   r~   r   ©r.   )Úclsr"   r*   r,   r,   r-   Úfrom_issuer_public_keyÜ   s    ýz-AuthorityKeyIdentifier.from_issuer_public_keyÚSubjectKeyIdentifier)Úskir#   c                 C  s   | |j d d d�S rŠ   ©r*   )r�   r�   r,   r,   r-   Ú"from_issuer_subject_key_identifierç   s
    ýz9AuthorityKeyIdentifier.from_issuer_subject_key_identifierr/   r3   c                 C  s   d| j ›d| j› d| j› d�S )Nz'<AuthorityKeyIdentifier(key_identifier=z, authority_cert_issuer=z, authority_cert_serial_number=r_   r‹   r6   r,   r,   r-   r`   ñ   s    
ÿþÿzAuthorityKeyIdentifier.__repr__rk   rl   rm   c                 C  s2   t |tƒstS | j|jko0| j|jko0| j|jkS r$   )r%   rz   ro   r}   r~   r   rp   r,   r,   r-   rq   ù   s    

ÿÿýzAuthorityKeyIdentifier.__eq__r2   c                 C  s,   | j d u rd }n
t| j ƒ}t| j|| jfƒS r$   )r~   Útuplers   r}   r   )r7   Zacir,   r,   r-   rt     s    

ÿzAuthorityKeyIdentifier.__hash__c                 C  s   | j S r$   )r‡   r6   r,   r,   r-   r}     s    z%AuthorityKeyIdentifier.key_identifierúlist[GeneralName] | Nonec                 C  s   | j S r$   )rˆ   r6   r,   r,   r-   r~     s    z,AuthorityKeyIdentifier.authority_cert_issuerc                 C  s   | j S r$   )r‰   r6   r,   r,   r-   r     s    z3AuthorityKeyIdentifier.authority_cert_serial_numberr    c                 C  s
   t  | ¡S r$   rw   r6   r,   r,   r-   r&     s    z#AuthorityKeyIdentifier.public_bytesN)rJ   rK   rL   r   ZAUTHORITY_KEY_IDENTIFIERrB   rE   ÚclassmethodrŽ   r’   r`   rq   rt   ry   r}   r~   r   r&   r,   r,   r,   r-   rz   ³   s    &
		rz   c                   @  s”   e Zd ZejZdddœdd„Zedd dœdd	„ƒZe	dd
œdd„ƒZ
e	dd
œdd„ƒZdd
œdd„Zdddœdd„Zdd
œdd„Zdd
œdd„ZdS )r�   r    r?   )r*   r#   c                 C  s
   || _ d S r$   ©Z_digest)r7   r*   r,   r,   r-   rE   "  s    zSubjectKeyIdentifier.__init__r   r!   c                 C  s   | t |ƒƒS r$   rŒ   )r�   r"   r,   r,   r-   Úfrom_public_key%  s    z$SubjectKeyIdentifier.from_public_keyr3   c                 C  s   | j S r$   r–   r6   r,   r,   r-   r*   +  s    zSubjectKeyIdentifier.digestc                 C  s   | j S r$   r–   r6   r,   r,   r-   r}   /  s    z#SubjectKeyIdentifier.key_identifierr/   c                 C  s   d| j ›d�S )Nz<SubjectKeyIdentifier(digest=r_   r‘   r6   r,   r,   r-   r`   3  s    zSubjectKeyIdentifier.__repr__rk   rl   rm   c                 C  s   t |tƒstS t | j|j¡S r$   )r%   r�   ro   r   Zbytes_eqr*   rp   r,   r,   r-   rq   6  s    
zSubjectKeyIdentifier.__eq__r2   c                 C  s
   t | jƒS r$   )rs   r*   r6   r,   r,   r-   rt   <  s    zSubjectKeyIdentifier.__hash__c                 C  s
   t  | ¡S r$   rw   r6   r,   r,   r-   r&   ?  s    z!SubjectKeyIdentifier.public_bytesN)rJ   rK   rL   r   ZSUBJECT_KEY_IDENTIFIERrB   rE   r•   r—   ry   r*   r}   r`   rq   rt   r&   r,   r,   r,   r-   r�     s   r�   c                   @  sj   e Zd ZejZdddœdd„Zedƒ\ZZ	Z
ddœd	d
„Zdddœdd„Zddœdd„Zddœdd„ZdS )ÚAuthorityInformationAccessú"typing.Iterable[AccessDescription]r?   ©Údescriptionsr#   c                 C  s,   t |ƒ}tdd„ |D ƒƒs"tdƒ‚|| _d S )Nc                 s  s   | ]}t |tƒV  qd S r$   ©r%   ÚAccessDescriptionr�   r,   r,   r-   r„   J  ó    z6AuthorityInformationAccess.__init__.<locals>.<genexpr>ú@Every item in the descriptions list must be an AccessDescription©rT   r†   r\   Ú_descriptions©r7   r›   r,   r,   r-   rE   F  s    ÿz#AuthorityInformationAccess.__init__r¡   r/   r3   c                 C  s   d| j › d�S )Nz<AuthorityInformationAccess(r_   ©r¡   r6   r,   r,   r-   r`   T  s    z#AuthorityInformationAccess.__repr__rk   rl   rm   c                 C  s   t |tƒstS | j|jkS r$   )r%   r˜   ro   r¡   rp   r,   r,   r-   rq   W  s    
z!AuthorityInformationAccess.__eq__r2   c                 C  s   t t| jƒƒS r$   ©rs   r“   r¡   r6   r,   r,   r-   rt   ]  s    z#AuthorityInformationAccess.__hash__r    c                 C  s
   t  | ¡S r$   rw   r6   r,   r,   r-   r&   `  s    z'AuthorityInformationAccess.public_bytesN)rJ   rK   rL   r   ZAUTHORITY_INFORMATION_ACCESSrB   rE   r=   ra   rb   rc   r`   rq   rt   r&   r,   r,   r,   r-   r˜   C  s   r˜   c                   @  sj   e Zd ZejZdddœdd„Zedƒ\ZZ	Z
ddœd	d
„Zdddœdd„Zddœdd„Zddœdd„ZdS )ÚSubjectInformationAccessr™   r?   rš   c                 C  s,   t |ƒ}tdd„ |D ƒƒs"tdƒ‚|| _d S )Nc                 s  s   | ]}t |tƒV  qd S r$   rœ   r�   r,   r,   r-   r„   k  rž   z4SubjectInformationAccess.__init__.<locals>.<genexpr>rŸ   r    r¢   r,   r,   r-   rE   g  s    ÿz!SubjectInformationAccess.__init__r¡   r/   r3   c                 C  s   d| j › d�S )Nz<SubjectInformationAccess(r_   r£   r6   r,   r,   r-   r`   u  s    z!SubjectInformationAccess.__repr__rk   rl   rm   c                 C  s   t |tƒstS | j|jkS r$   )r%   r¥   ro   r¡   rp   r,   r,   r-   rq   x  s    
zSubjectInformationAccess.__eq__r2   c                 C  s   t t| jƒƒS r$   r¤   r6   r,   r,   r-   rt   ~  s    z!SubjectInformationAccess.__hash__r    c                 C  s
   t  | ¡S r$   rw   r6   r,   r,   r-   r&   �  s    z%SubjectInformationAccess.public_bytesN)rJ   rK   rL   r   ZSUBJECT_INFORMATION_ACCESSrB   rE   r=   ra   rb   rc   r`   rq   rt   r&   r,   r,   r,   r-   r¥   d  s   r¥   c                   @  sn   e Zd Zddddœdd„Zddœd	d
„Zdddœdd„Zddœdd„Zeddœdd„ƒZeddœdd„ƒZ	dS )r�   r   r   r?   )Úaccess_methodÚaccess_locationr#   c                 C  s4   t |tƒstdƒ‚t |tƒs$tdƒ‚|| _|| _d S )Nz)access_method must be an ObjectIdentifierz%access_location must be a GeneralName)r%   r   r\   r   Ú_access_methodÚ_access_location)r7   r¦   r§   r,   r,   r-   rE   †  s    

zAccessDescription.__init__r/   r3   c                 C  s   d| j › d| j› d�S )Nz!<AccessDescription(access_method=z, access_location=r_   )r¦   r§   r6   r,   r,   r-   r`   ’  s    
ÿÿzAccessDescription.__repr__rk   rl   rm   c                 C  s&   t |tƒstS | j|jko$| j|jkS r$   )r%   r�   ro   r¦   r§   rp   r,   r,   r-   rq   ˜  s
    

þzAccessDescription.__eq__r2   c                 C  s   t | j| jfƒS r$   )rs   r¦   r§   r6   r,   r,   r-   rt   ¡  s    zAccessDescription.__hash__c                 C  s   | j S r$   )r¨   r6   r,   r,   r-   r¦   ¤  s    zAccessDescription.access_methodc                 C  s   | j S r$   )r©   r6   r,   r,   r-   r§   ¨  s    z!AccessDescription.access_locationN)
rJ   rK   rL   rE   r`   rq   rt   ry   r¦   r§   r,   r,   r,   r-   r�   …  s   	r�   c                   @  s‚   e Zd ZejZddddœdd„Zeddœdd	„ƒZeddœd
d„ƒZ	ddœdd„Z
dddœdd„Zddœdd„Zddœdd„ZdS )ÚBasicConstraintsrl   r|   r?   )ÚcaÚpath_lengthr#   c                 C  sX   t |tƒstdƒ‚|d ur&|s&tdƒ‚|d u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%   rl   r\   r…   r2   Ú_caÚ_path_length)r7   r«   r¬   r,   r,   r-   rE   °  s    
ÿÿÿzBasicConstraints.__init__r3   c                 C  s   | j S r$   )r­   r6   r,   r,   r-   r«   Á  s    zBasicConstraints.cac                 C  s   | j S r$   )r®   r6   r,   r,   r-   r¬   Å  s    zBasicConstraints.path_lengthr/   c                 C  s   d| j › d| j› d�S )Nz<BasicConstraints(ca=z, path_length=r_   )r«   r¬   r6   r,   r,   r-   r`   É  s    
ÿÿzBasicConstraints.__repr__rk   rm   c                 C  s&   t |tƒstS | j|jko$| j|jkS r$   )r%   rª   ro   r«   r¬   rp   r,   r,   r-   rq   Ï  s    
zBasicConstraints.__eq__r2   c                 C  s   t | j| jfƒS r$   )rs   r«   r¬   r6   r,   r,   r-   rt   Õ  s    zBasicConstraints.__hash__r    c                 C  s
   t  | ¡S r$   rw   r6   r,   r,   r-   r&   Ø  s    zBasicConstraints.public_bytesN)rJ   rK   rL   r   ZBASIC_CONSTRAINTSrB   rE   ry   r«   r¬   r`   rq   rt   r&   r,   r,   r,   r-   rª   ­  s   rª   c                   @  sn   e Zd ZejZdddœdd„Zeddœdd„ƒZd	d
dœdd„Z	ddœdd„Z
ddœdd„Zddœdd„ZdS )ÚDeltaCRLIndicatorr2   r?   re   c                 C  s   t |tƒstdƒ‚|| _d S rg   rh   rj   r,   r,   r-   rE   ß  s    
zDeltaCRLIndicator.__init__r3   c                 C  s   | j S r$   rv   r6   r,   r,   r-   rf   å  s    zDeltaCRLIndicator.crl_numberrk   rl   rm   c                 C  s   t |tƒstS | j|jkS r$   )r%   r¯   ro   rf   rp   r,   r,   r-   rq   é  s    
zDeltaCRLIndicator.__eq__c                 C  s
   t | jƒS r$   rr   r6   r,   r,   r-   rt   ï  s    zDeltaCRLIndicator.__hash__r/   c                 C  s   d| j › d�S )Nz<DeltaCRLIndicator(crl_number=r_   ru   r6   r,   r,   r-   r`   ò  s    zDeltaCRLIndicator.__repr__r    c                 C  s
   t  | ¡S r$   rw   r6   r,   r,   r-   r&   õ  s    zDeltaCRLIndicator.public_bytesN)rJ   rK   rL   r   ZDELTA_CRL_INDICATORrB   rE   ry   rf   rq   rt   r`   r&   r,   r,   r,   r-   r¯   Ü  s   r¯   c                   @  sj   e Zd ZejZdddœdd„Zedƒ\ZZ	Z
ddœd	d
„Zdddœdd„Zddœdd„Zddœdd„ZdS )ÚCRLDistributionPointsú"typing.Iterable[DistributionPoint]r?   ©Údistribution_pointsr#   c                 C  s,   t |ƒ}tdd„ |D ƒƒs"tdƒ‚|| _d S )Nc                 s  s   | ]}t |tƒV  qd S r$   ©r%   ÚDistributionPointr�   r,   r,   r-   r„      s   z1CRLDistributionPoints.__init__.<locals>.<genexpr>ú?distribution_points must be a list of DistributionPoint objects©rT   r†   r\   Ú_distribution_points©r7   r³   r,   r,   r-   rE   ü  s    ÿÿzCRLDistributionPoints.__init__r¸   r/   r3   c                 C  s   d| j › d�S )Nz<CRLDistributionPoints(r_   ©r¸   r6   r,   r,   r-   r`     s    zCRLDistributionPoints.__repr__rk   rl   rm   c                 C  s   t |tƒstS | j|jkS r$   )r%   r°   ro   r¸   rp   r,   r,   r-   rq     s    
zCRLDistributionPoints.__eq__r2   c                 C  s   t t| jƒƒS r$   ©rs   r“   r¸   r6   r,   r,   r-   rt     s    zCRLDistributionPoints.__hash__r    c                 C  s
   t  | ¡S r$   rw   r6   r,   r,   r-   r&     s    z"CRLDistributionPoints.public_bytesN)rJ   rK   rL   r   ZCRL_DISTRIBUTION_POINTSrB   rE   r=   ra   rb   rc   r`   rq   rt   r&   r,   r,   r,   r-   r°   ù  s   ÿ
r°   c                   @  sj   e Zd ZejZdddœdd„Zedƒ\ZZ	Z
ddœd	d
„Zdddœdd„Zddœdd„Zddœdd„ZdS )ÚFreshestCRLr±   r?   r²   c                 C  s,   t |ƒ}tdd„ |D ƒƒs"tdƒ‚|| _d S )Nc                 s  s   | ]}t |tƒV  qd S r$   r´   r�   r,   r,   r-   r„   %  s   z'FreshestCRL.__init__.<locals>.<genexpr>r¶   r·   r¹   r,   r,   r-   rE   !  s    ÿÿzFreshestCRL.__init__r¸   r/   r3   c                 C  s   d| j › d�S )Nz<FreshestCRL(r_   rº   r6   r,   r,   r-   r`   3  s    zFreshestCRL.__repr__rk   rl   rm   c                 C  s   t |tƒstS | j|jkS r$   )r%   r¼   ro   r¸   rp   r,   r,   r-   rq   6  s    
zFreshestCRL.__eq__r2   c                 C  s   t t| jƒƒS r$   r»   r6   r,   r,   r-   rt   <  s    zFreshestCRL.__hash__r    c                 C  s
   t  | ¡S r$   rw   r6   r,   r,   r-   r&   ?  s    zFreshestCRL.public_bytesN)rJ   rK   rL   r   ZFRESHEST_CRLrB   rE   r=   ra   rb   rc   r`   rq   rt   r&   r,   r,   r,   r-   r¼     s   ÿ
r¼   c                   @  s–   e Zd Zddddddœdd„Zdd	œd
d„Zdddœdd„Zdd	œdd„Zedd	œdd„ƒZedd	œdd„ƒZ	edd	œdd„ƒZ
edd	œdd„ƒZdS )rµ   r{   ú RelativeDistinguishedName | Noneúfrozenset[ReasonFlags] | Noner?   )Ú	full_nameÚrelative_nameÚreasonsÚ
crl_issuerr#   c                 C  sò   |r|rt dƒ‚|s$|s$|s$t dƒ‚|d urNt|ƒ}tdd„ |D ƒƒsNtdƒ‚|rdt|tƒsdtdƒ‚|d urŽt|ƒ}tdd„ |D ƒƒsŽtdƒ‚|r¶t|tƒr®td	d„ |D ƒƒs¶td
ƒ‚|rÖtj|v sÎtj	|v rÖt dƒ‚|| _
|| _|| _|| _d S )NzOYou cannot provide both full_name and relative_name, at least one must be None.z?Either full_name, relative_name or crl_issuer must be provided.c                 s  s   | ]}t |tƒV  qd S r$   r€   r�   r,   r,   r-   r„   X  rž   z-DistributionPoint.__init__.<locals>.<genexpr>z/full_name must be a list of GeneralName objectsz1relative_name must be a RelativeDistinguishedNamec                 s  s   | ]}t |tƒV  qd S r$   r€   r�   r,   r,   r-   r„   e  rž   z2crl_issuer must be None or a list of general namesc                 s  s   | ]}t |tƒV  qd S r$   ©r%   ÚReasonFlagsr�   r,   r,   r-   r„   l  rž   z0reasons must be None or frozenset of ReasonFlagszLunspecified and remove_from_crl are not valid reasons in a DistributionPoint)r…   rT   r†   r\   r%   r   Ú	frozensetrÄ   ÚunspecifiedÚremove_from_crlÚ
_full_nameÚ_relative_nameÚ_reasonsÚ_crl_issuer)r7   r¿   rÀ   rÁ   rÂ   r,   r,   r-   rE   D  sV    ÿÿÿ
ÿÿÿþÿþÿzDistributionPoint.__init__r/   r3   c                 C  s
   d  | ¡S )Nz}<DistributionPoint(full_name={0.full_name}, relative_name={0.relative_name}, reasons={0.reasons}, crl_issuer={0.crl_issuer})>©Úformatr6   r,   r,   r-   r`   ~  s    þÿzDistributionPoint.__repr__rk   rl   rm   c                 C  s>   t |tƒstS | j|jko<| j|jko<| j|jko<| j|jkS r$   )r%   rµ   ro   r¿   rÀ   rÁ   rÂ   rp   r,   r,   r-   rq   …  s    

ÿ
þ
üzDistributionPoint.__eq__r2   c                 C  sH   | j d urt| j ƒ}nd }| jd ur0t| jƒ}nd }t|| j| j|fƒS r$   )r¿   r“   rÂ   rs   rÀ   rÁ   )r7   ÚfnrÂ   r,   r,   r-   rt   �  s    

zDistributionPoint.__hash__r”   c                 C  s   | j S r$   ©rÈ   r6   r,   r,   r-   r¿   �  s    zDistributionPoint.full_namec                 C  s   | j S r$   ©rÉ   r6   r,   r,   r-   rÀ   ¡  s    zDistributionPoint.relative_namec                 C  s   | j S r$   )rÊ   r6   r,   r,   r-   rÁ   ¥  s    zDistributionPoint.reasonsc                 C  s   | j S r$   )rË   r6   r,   r,   r-   rÂ   ©  s    zDistributionPoint.crl_issuerN)rJ   rK   rL   rE   r`   rq   rt   ry   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)rJ   rK   rL   rÆ   Úkey_compromiseÚca_compromiseÚaffiliation_changedrÑ   Úcessation_of_operationÚcertificate_holdÚprivilege_withdrawnÚaa_compromiserÇ   r,   r,   r,   r-   rÄ   ®  s   rÄ   )é   é   é   é   é   é   é   é   rÙ   rÚ   rÛ   rÜ   rÝ   rÞ   rß   rà   é	   é
   c                   @  s‚   e Zd ZejZddddœdd„Zddœdd	„Zd
ddœdd„Zddœdd„Z	e
ddœdd„ƒZe
ddœdd„ƒZddœdd„ZdS )ÚPolicyConstraintsr|   r?   )Úrequire_explicit_policyÚinhibit_policy_mappingr#   c                 C  s\   |d urt |tƒstdƒ‚|d ur4t |tƒs4tdƒ‚|d u rL|d u rLtdƒ‚|| _|| _d S )Nz>require_explicit_policy must be a non-negative integer or Nonez=inhibit_policy_mapping must be a non-negative integer or NonezSAt least one of require_explicit_policy and inhibit_policy_mapping must not be None)r%   r2   r\   r…   Ú_require_explicit_policyÚ_inhibit_policy_mapping)r7   rä   rå   r,   r,   r-   rE   ú  s$    
ÿÿ
ÿÿÿzPolicyConstraints.__init__r/   r3   c                 C  s
   d  | ¡S )Nz{<PolicyConstraints(require_explicit_policy={0.require_explicit_policy}, inhibit_policy_mapping={0.inhibit_policy_mapping})>rÌ   r6   r,   r,   r-   r`     s    þÿzPolicyConstraints.__repr__rk   rl   rm   c                 C  s&   t |tƒstS | j|jko$| j|jkS r$   )r%   rã   ro   rä   rå   rp   r,   r,   r-   rq     s
    

þzPolicyConstraints.__eq__r2   c                 C  s   t | j| jfƒS r$   )rs   rä   rå   r6   r,   r,   r-   rt   '  s    
ÿzPolicyConstraints.__hash__c                 C  s   | j S r$   )ræ   r6   r,   r,   r-   rä   ,  s    z)PolicyConstraints.require_explicit_policyc                 C  s   | j S r$   )rç   r6   r,   r,   r-   rå   0  s    z(PolicyConstraints.inhibit_policy_mappingr    c                 C  s
   t  | ¡S r$   rw   r6   r,   r,   r-   r&   4  s    zPolicyConstraints.public_bytesN)rJ   rK   rL   r   ZPOLICY_CONSTRAINTSrB   rE   r`   rq   rt   ry   rä   rå   r&   r,   r,   r,   r-   rã   ÷  s   	rã   c                   @  sj   e Zd ZejZdddœdd„Zedƒ\ZZ	Z
ddœd	d
„Zdddœdd„Zddœdd„Zddœdd„ZdS )ÚCertificatePoliciesz"typing.Iterable[PolicyInformation]r?   )Úpoliciesr#   c                 C  s,   t |ƒ}tdd„ |D ƒƒs"tdƒ‚|| _d S )Nc                 s  s   | ]}t |tƒV  qd S r$   )r%   ÚPolicyInformationr�   r,   r,   r-   r„   =  rž   z/CertificatePolicies.__init__.<locals>.<genexpr>z;Every item in the policies list must be a PolicyInformation)rT   r†   r\   Ú	_policies)r7   ré   r,   r,   r-   rE   ;  s    ÿzCertificatePolicies.__init__rë   r/   r3   c                 C  s   d| j › d�S )Nz<CertificatePolicies(r_   )rë   r6   r,   r,   r-   r`   G  s    zCertificatePolicies.__repr__rk   rl   rm   c                 C  s   t |tƒstS | j|jkS r$   )r%   rè   ro   rë   rp   r,   r,   r-   rq   J  s    
zCertificatePolicies.__eq__r2   c                 C  s   t t| jƒƒS r$   )rs   r“   rë   r6   r,   r,   r-   rt   P  s    zCertificatePolicies.__hash__r    c                 C  s
   t  | ¡S r$   rw   r6   r,   r,   r-   r&   S  s    z CertificatePolicies.public_bytesN)rJ   rK   rL   r   ZCERTIFICATE_POLICIESrB   rE   r=   ra   rb   rc   r`   rq   rt   r&   r,   r,   r,   r-   rè   8  s   
rè   c                   @  sn   e Zd Zddddœdd„Zddœd	d
„Zdddœdd„Zddœdd„Zeddœdd„ƒZeddœdd„ƒZ	dS )rê   r   z(typing.Iterable[str | UserNotice] | Noner?   )Úpolicy_identifierÚpolicy_qualifiersr#   c                 C  sL   t |tƒstdƒ‚|| _|d urBt|ƒ}tdd„ |D ƒƒsBtdƒ‚|| _d S )Nz-policy_identifier must be an ObjectIdentifierc                 s  s   | ]}t |ttfƒV  qd S r$   )r%   r/   Ú
UserNoticer�   r,   r,   r-   r„   d  s   z-PolicyInformation.__init__.<locals>.<genexpr>zMpolicy_qualifiers must be a list of strings and/or UserNotice objects or None)r%   r   r\   Ú_policy_identifierrT   r†   Ú_policy_qualifiers)r7   rì   rí   r,   r,   r-   rE   X  s    
ÿÿzPolicyInformation.__init__r/   r3   c                 C  s   d| j › d| j› d�S )Nz%<PolicyInformation(policy_identifier=z, policy_qualifiers=r_   )rì   rí   r6   r,   r,   r-   r`   n  s    
ÿÿzPolicyInformation.__repr__rk   rl   rm   c                 C  s&   t |tƒstS | j|jko$| j|jkS r$   )r%   rê   ro   rì   rí   rp   r,   r,   r-   rq   t  s
    

þzPolicyInformation.__eq__r2   c                 C  s(   | j d urt| j ƒ}nd }t| j|fƒS r$   )rí   r“   rs   rì   )r7   Zpqr,   r,   r-   rt   }  s    
ÿzPolicyInformation.__hash__c                 C  s   | j S r$   )rï   r6   r,   r,   r-   rì   ‡  s    z#PolicyInformation.policy_identifierzlist[str | UserNotice] | Nonec                 C  s   | j S r$   )rð   r6   r,   r,   r-   rí   ‹  s    z#PolicyInformation.policy_qualifiersN)
rJ   rK   rL   rE   r`   rq   rt   ry   rì   rí   r,   r,   r,   r-   rê   W  s   	
rê   c                   @  sn   e Zd Zddddœdd„Zddœd	d
„Zdddœdd„Zddœdd„Zeddœdd„ƒZeddœdd„ƒZ	dS )rî   zNoticeReference | Noneú
str | Noner?   )Únotice_referenceÚexplicit_textr#   c                 C  s&   |rt |tƒstdƒ‚|| _|| _d S )Nz2notice_reference must be None or a NoticeReference)r%   ÚNoticeReferencer\   Ú_notice_referenceÚ_explicit_text)r7   rò   ró   r,   r,   r-   rE   “  s    ÿÿzUserNotice.__init__r/   r3   c                 C  s   d| j › d| j›d�S )Nz<UserNotice(notice_reference=z, explicit_text=r_   )rò   ró   r6   r,   r,   r-   r`   ¢  s    
ÿÿzUserNotice.__repr__rk   rl   rm   c                 C  s&   t |tƒstS | j|jko$| j|jkS r$   )r%   rî   ro   rò   ró   rp   r,   r,   r-   rq   ¨  s
    

þzUserNotice.__eq__r2   c                 C  s   t | j| jfƒS r$   )rs   rò   ró   r6   r,   r,   r-   rt   ±  s    zUserNotice.__hash__c                 C  s   | j S r$   )rõ   r6   r,   r,   r-   rò   ´  s    zUserNotice.notice_referencec                 C  s   | j S r$   )rö   r6   r,   r,   r-   ró   ¸  s    zUserNotice.explicit_textN)
rJ   rK   rL   rE   r`   rq   rt   ry   rò   ró   r,   r,   r,   r-   rî   ’  s   	rî   c                   @  sn   e Zd Zddddœdd„Zddœd	d
„Zdddœdd„Zddœdd„Zeddœdd„ƒZeddœdd„ƒZ	dS )rô   rñ   ztyping.Iterable[int]r?   )ÚorganizationÚnotice_numbersr#   c                 C  s2   || _ t|ƒ}tdd„ |D ƒƒs(tdƒ‚|| _d S )Nc                 s  s   | ]}t |tƒV  qd S r$   )r%   r2   r�   r,   r,   r-   r„   Å  rž   z+NoticeReference.__init__.<locals>.<genexpr>z)notice_numbers must be a list of integers)Ú_organizationrT   r†   r\   Ú_notice_numbers)r7   r÷   rø   r,   r,   r-   rE   ¾  s
    zNoticeReference.__init__r/   r3   c                 C  s   d| j ›d| j› d�S )Nz<NoticeReference(organization=z, notice_numbers=r_   )r÷   rø   r6   r,   r,   r-   r`   Ê  s    
ÿÿzNoticeReference.__repr__rk   rl   rm   c                 C  s&   t |tƒstS | j|jko$| j|jkS r$   )r%   rô   ro   r÷   rø   rp   r,   r,   r-   rq   Ð  s
    

þzNoticeReference.__eq__r2   c                 C  s   t | jt| jƒfƒS r$   )rs   r÷   r“   rø   r6   r,   r,   r-   rt   Ù  s    zNoticeReference.__hash__c                 C  s   | j S r$   )rù   r6   r,   r,   r-   r÷   Ü  s    zNoticeReference.organizationz	list[int]c                 C  s   | j S r$   )rú   r6   r,   r,   r-   rø   à  s    zNoticeReference.notice_numbersN)
rJ   rK   rL   rE   r`   rq   rt   ry   r÷   rø   r,   r,   r,   r-   rô   ½  s   	rô   c                   @  sj   e Zd ZejZdddœdd„Zedƒ\ZZ	Z
ddœd	d
„Zdddœdd„Zddœdd„Zddœdd„ZdS )ÚExtendedKeyUsageú!typing.Iterable[ObjectIdentifier]r?   )Úusagesr#   c                 C  s,   t |ƒ}tdd„ |D ƒƒs"tdƒ‚|| _d S )Nc                 s  s   | ]}t |tƒV  qd S r$   ©r%   r   r�   r,   r,   r-   r„   ê  rž   z,ExtendedKeyUsage.__init__.<locals>.<genexpr>z9Every item in the usages list must be an ObjectIdentifier)rT   r†   r\   Ú_usages)r7   rý   r,   r,   r-   rE   è  s    ÿzExtendedKeyUsage.__init__rÿ   r/   r3   c                 C  s   d| j › d�S )Nz<ExtendedKeyUsage(r_   )rÿ   r6   r,   r,   r-   r`   ó  s    zExtendedKeyUsage.__repr__rk   rl   rm   c                 C  s   t |tƒstS | j|jkS r$   )r%   rû   ro   rÿ   rp   r,   r,   r-   rq   ö  s    
zExtendedKeyUsage.__eq__r2   c                 C  s   t t| jƒƒS r$   )rs   r“   rÿ   r6   r,   r,   r-   rt   ü  s    zExtendedKeyUsage.__hash__r    c                 C  s
   t  | ¡S r$   rw   r6   r,   r,   r-   r&   ÿ  s    zExtendedKeyUsage.public_bytesN)rJ   rK   rL   r   ZEXTENDED_KEY_USAGErB   rE   r=   ra   rb   rc   r`   rq   rt   r&   r,   r,   r,   r-   rû   å  s   	rû   c                   @  sL   e Zd ZejZdddœdd„Zddœdd	„Zd
dœdd„Zddœdd„Z	dS )ÚOCSPNoCheckrk   rl   rm   c                 C  s   t |tƒstS dS ©NT)r%   r   ro   rp   r,   r,   r-   rq     s    
zOCSPNoCheck.__eq__r2   r3   c                 C  s   t tƒS r$   )rs   r   r6   r,   r,   r-   rt     s    zOCSPNoCheck.__hash__r/   c                 C  s   dS )Nz<OCSPNoCheck()>r,   r6   r,   r,   r-   r`     s    zOCSPNoCheck.__repr__r    c                 C  s
   t  | ¡S r$   rw   r6   r,   r,   r-   r&     s    zOCSPNoCheck.public_bytesN)
rJ   rK   rL   r   ZOCSP_NO_CHECKrB   rq   rt   r`   r&   r,   r,   r,   r-   r     s
   r   c                   @  sL   e Zd ZejZdddœdd„Zddœdd	„Zd
dœdd„Zddœdd„Z	dS )ÚPrecertPoisonrk   rl   rm   c                 C  s   t |tƒstS dS r  )r%   r  ro   rp   r,   r,   r-   rq     s    
zPrecertPoison.__eq__r2   r3   c                 C  s   t tƒS r$   )rs   r  r6   r,   r,   r-   rt     s    zPrecertPoison.__hash__r/   c                 C  s   dS )Nz<PrecertPoison()>r,   r6   r,   r,   r-   r`   "  s    zPrecertPoison.__repr__r    c                 C  s
   t  | ¡S r$   rw   r6   r,   r,   r-   r&   %  s    zPrecertPoison.public_bytesN)
rJ   rK   rL   r   ZPRECERT_POISONrB   rq   rt   r`   r&   r,   r,   r,   r-   r    s
   r  c                   @  sj   e Zd ZejZdddœdd„Zedƒ\ZZ	Z
ddœd	d
„Zdddœdd„Zddœdd„Zddœdd„ZdS )Ú
TLSFeatureztyping.Iterable[TLSFeatureType]r?   )Úfeaturesr#   c                 C  s8   t |ƒ}tdd„ |D ƒƒr&t|ƒdkr.tdƒ‚|| _d S )Nc                 s  s   | ]}t |tƒV  qd S r$   )r%   ÚTLSFeatureTyper�   r,   r,   r-   r„   /  rž   z&TLSFeature.__init__.<locals>.<genexpr>r   z@features must be a list of elements from the TLSFeatureType enum)rT   r†   r4   r\   Ú	_features)r7   r  r,   r,   r-   rE   ,  s    ÿ
þÿzTLSFeature.__init__r  r/   r3   c                 C  s   d| j › d�S )Nz<TLSFeature(features=r_   )r  r6   r,   r,   r-   r`   ;  s    zTLSFeature.__repr__rk   rl   rm   c                 C  s   t |tƒstS | j|jkS r$   )r%   r  ro   r  rp   r,   r,   r-   rq   >  s    
zTLSFeature.__eq__r2   c                 C  s   t t| jƒƒS r$   )rs   r“   r  r6   r,   r,   r-   rt   D  s    zTLSFeature.__hash__r    c                 C  s
   t  | ¡S r$   rw   r6   r,   r,   r-   r&   G  s    zTLSFeature.public_bytesN)rJ   rK   rL   r   ZTLS_FEATURErB   rE   r=   ra   rb   rc   r`   rq   rt   r&   r,   r,   r,   r-   r  )  s   r  c                   @  s   e Zd ZdZdZdS )r  rÝ   é   N)rJ   rK   rL   Zstatus_requestZstatus_request_v2r,   r,   r,   r-   r  K  s   r  c                 C  s   i | ]}|j |“qS r,   ©r]   r�   r,   r,   r-   Ú
<dictcomp>V  rž   r	  c                   @  sn   e Zd ZejZdddœdd„Zddœdd	„Zd
ddœdd„Zddœdd„Z	e
ddœdd„ƒZddœdd„ZdS )ÚInhibitAnyPolicyr2   r?   )Ú
skip_certsr#   c                 C  s,   t |tƒstdƒ‚|dk r"tdƒ‚|| _d S )Nzskip_certs must be an integerr   z)skip_certs must be a non-negative integer)r%   r2   r\   r…   Ú_skip_certs)r7   r  r,   r,   r-   rE   \  s
    
zInhibitAnyPolicy.__init__r/   r3   c                 C  s   d| j › d�S )Nz<InhibitAnyPolicy(skip_certs=r_   )r  r6   r,   r,   r-   r`   e  s    zInhibitAnyPolicy.__repr__rk   rl   rm   c                 C  s   t |tƒstS | j|jkS r$   )r%   r
  ro   r  rp   r,   r,   r-   rq   h  s    
zInhibitAnyPolicy.__eq__c                 C  s
   t | jƒS r$   )rs   r  r6   r,   r,   r-   rt   n  s    zInhibitAnyPolicy.__hash__c                 C  s   | j S r$   )r  r6   r,   r,   r-   r  q  s    zInhibitAnyPolicy.skip_certsr    c                 C  s
   t  | ¡S r$   rw   r6   r,   r,   r-   r&   u  s    zInhibitAnyPolicy.public_bytesN)rJ   rK   rL   r   ZINHIBIT_ANY_POLICYrB   rE   r`   rq   rt   ry   r  r&   r,   r,   r,   r-   r
  Y  s   	r
  c                   @  s  e Zd ZejZdddddddddddœ
dd„Zeddœdd„ƒZeddœd	d
„ƒZ	eddœdd„ƒZ
eddœdd„ƒZeddœdd„ƒZeddœdd„ƒZeddœdd„ƒZeddœdd„ƒZeddœdd„ƒZddœdd„Zdddœdd„Zd dœd!d"„Zd#dœd$d%„Zd&S )'ÚKeyUsagerl   r?   )
Údigital_signatureÚcontent_commitmentÚkey_enciphermentÚdata_enciphermentÚkey_agreementÚkey_cert_signÚcrl_signÚencipher_onlyÚdecipher_onlyr#   c
           
      C  sN   |s|s|	rt dƒ‚|| _|| _|| _|| _|| _|| _|| _|| _|	| _	d S )NzKencipher_only and decipher_only can only be true when key_agreement is true)
r…   Ú_digital_signatureÚ_content_commitmentÚ_key_enciphermentÚ_data_enciphermentÚ_key_agreementÚ_key_cert_signÚ	_crl_signÚ_encipher_onlyÚ_decipher_only)
r7   r  r  r  r  r  r  r  r  r  r,   r,   r-   rE   |  s    ÿzKeyUsage.__init__r3   c                 C  s   | j S r$   )r  r6   r,   r,   r-   r  ˜  s    zKeyUsage.digital_signaturec                 C  s   | j S r$   )r  r6   r,   r,   r-   r  œ  s    zKeyUsage.content_commitmentc                 C  s   | j S r$   )r  r6   r,   r,   r-   r     s    zKeyUsage.key_enciphermentc                 C  s   | j S r$   )r  r6   r,   r,   r-   r  ¤  s    zKeyUsage.data_enciphermentc                 C  s   | j S r$   )r  r6   r,   r,   r-   r  ¨  s    zKeyUsage.key_agreementc                 C  s   | j S r$   )r  r6   r,   r,   r-   r  ¬  s    zKeyUsage.key_cert_signc                 C  s   | j S r$   )r  r6   r,   r,   r-   r  °  s    zKeyUsage.crl_signc                 C  s   | j stdƒ‚n| jS d S )Nz7encipher_only is undefined unless key_agreement is true)r  r…   r  r6   r,   r,   r-   r  ´  s
    ÿzKeyUsage.encipher_onlyc                 C  s   | j stdƒ‚n| jS d S )Nz7decipher_only is undefined unless key_agreement is true)r  r…   r  r6   r,   r,   r-   r  ½  s
    ÿzKeyUsage.decipher_onlyr/   c                 C  sv   z| j }| j}W n ty*   d}d}Y n0 d| j› d| j› d| j› d| j› d| j› d| j› d| j	› d	|› d
|› d�S )NFz<KeyUsage(digital_signature=z, content_commitment=z, key_encipherment=z, data_encipherment=z, key_agreement=z, key_cert_sign=z, crl_sign=z, encipher_only=z, decipher_only=r_   )
r  r  r…   r  r  r  r  r  r  r  )r7   r  r  r,   r,   r-   r`   Æ  s0    


ÿþýüûûúúÿzKeyUsage.__repr__rk   rm   c                 C  sz   t |tƒstS | j|jkox| j|jkox| j|jkox| j|jkox| j|jkox| j|jkox| j	|j	kox| j
|j
kox| j|jkS r$   )r%   r  ro   r  r  r  r  r  r  r  r  r  rp   r,   r,   r-   rq   Û  s&    

ÿ
þ
ý
ü
û
ú
ù
÷zKeyUsage.__eq__r2   c              
   C  s,   t | j| j| j| j| j| j| j| j| j	f	ƒS r$   )
rs   r  r  r  r  r  r  r  r  r  r6   r,   r,   r-   rt   ë  s    ÷ÿzKeyUsage.__hash__r    c                 C  s
   t  | ¡S r$   rw   r6   r,   r,   r-   r&   ú  s    zKeyUsage.public_bytesN)rJ   rK   rL   r   Z	KEY_USAGErB   rE   ry   r  r  r  r  r  r  r  r  r  r`   rq   rt   r&   r,   r,   r,   r-   r  y  s0    r  c                   @  s²   e Zd ZejZddddœdd„Zdddœd	d
„Zdddœdd„Zdddœdd„Z	dddœdd„Z
ddœdd„Zddœdd„Zeddœdd„ƒZeddœdd„ƒZddœd d!„Zd"S )#ÚNameConstraintsr{   r?   )Úpermitted_subtreesÚexcluded_subtreesr#   c                 C  s¨   |d ur@t |ƒ}|stdƒ‚tdd„ |D ƒƒs6tdƒ‚|  |¡ |d ur€t |ƒ}|s\tdƒ‚tdd„ |D ƒƒsvtdƒ‚|  |¡ |d u r˜|d u 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„     rž   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„     rž   z?excluded_subtrees must be a list of GeneralName objects or NonezIAt least one of permitted_subtrees and excluded_subtrees must not be None)rT   r…   r†   r\   Ú_validate_treeÚ_permitted_subtreesÚ_excluded_subtrees)r7   r!  r"  r,   r,   r-   rE     s8    ÿÿ
ÿÿ
ÿzNameConstraints.__init__rk   rl   rm   c                 C  s&   t |tƒstS | j|jko$| j|jkS r$   )r%   r   ro   r"  r!  rp   r,   r,   r-   rq   +  s
    

þzNameConstraints.__eq__útyping.Iterable[GeneralName])Útreer#   c                 C  s   |   |¡ |  |¡ d S r$   )Ú_validate_ip_nameÚ_validate_dns_name©r7   r'  r,   r,   r-   r#  4  s    
zNameConstraints._validate_treec                 C  s   t dd„ |D ƒƒrtdƒ‚d S )Nc                 s  s.   | ]&}t |tƒo$t |jtjtjfƒ V  qd S r$   )r%   r   r]   Ú	ipaddressÚIPv4NetworkÚIPv6Network©r‚   Únamer,   r,   r-   r„   9  s
   ü
ÿz4NameConstraints._validate_ip_name.<locals>.<genexpr>zGIPAddress name constraints must be an IPv4Network or IPv6Network object)Úanyr\   r*  r,   r,   r-   r(  8  s    ûÿz!NameConstraints._validate_ip_namec                 C  s   t dd„ |D ƒƒrtdƒ‚d S )Nc                 s  s"   | ]}t |tƒod |jv V  qdS )Ú*N)r%   r   r]   r.  r,   r,   r-   r„   F  s   z5NameConstraints._validate_dns_name.<locals>.<genexpr>zDDNSName name constraints must not contain the '*' wildcard character)r0  r…   r*  r,   r,   r-   r)  E  s    ÿÿz"NameConstraints._validate_dns_namer/   r3   c                 C  s   d| j › d| j› d�S )Nz$<NameConstraints(permitted_subtrees=z, excluded_subtrees=r_   )r!  r"  r6   r,   r,   r-   r`   N  s    
ÿÿzNameConstraints.__repr__r2   c                 C  s@   | j d urt| j ƒ}nd }| jd ur0t| jƒ}nd }t||fƒS r$   )r!  r“   r"  rs   )r7   ZpsÚesr,   r,   r-   rt   T  s    

zNameConstraints.__hash__r”   c                 C  s   | j S r$   )r$  r6   r,   r,   r-   r!  a  s    z"NameConstraints.permitted_subtreesc                 C  s   | j S r$   )r%  r6   r,   r,   r-   r"  g  s    z!NameConstraints.excluded_subtreesr    c                 C  s
   t  | ¡S r$   rw   r6   r,   r,   r-   r&   m  s    zNameConstraints.public_bytesN)rJ   rK   rL   r   ZNAME_CONSTRAINTSrB   rE   rq   r#  r(  r)  r`   rt   ry   r!  r"  r&   r,   r,   r,   r-   r   þ  s   *		r   c                   @  s‚   e Zd Zdddddœdd„Zeddœd	d
„ƒZeddœdd„ƒZeddœdd„ƒZddœdd„Zdddœdd„Z	ddœdd„Z
dS )Ú	Extensionr   rl   r   r?   )rB   Úcriticalr]   r#   c                 C  s:   t |tƒstdƒ‚t |tƒs$tdƒ‚|| _|| _|| _d S )Nz2oid argument must be an ObjectIdentifier instance.z critical must be a boolean value)r%   r   r\   rl   Ú_oidÚ	_criticalÚ_value)r7   rB   r4  r]   r,   r,   r-   rE   r  s    
ÿ
zExtension.__init__r3   c                 C  s   | j S r$   ©r5  r6   r,   r,   r-   rB   �  s    zExtension.oidc                 C  s   | j S r$   )r6  r6   r,   r,   r-   r4  …  s    zExtension.criticalc                 C  s   | j S r$   ©r7  r6   r,   r,   r-   r]   ‰  s    zExtension.valuer/   c                 C  s   d| j › d| j› d| j› d�S )Nz<Extension(oid=z, critical=ú, value=r_   )rB   r4  r]   r6   r,   r,   r-   r`   �  s    ÿÿzExtension.__repr__rk   rm   c                 C  s2   t |tƒstS | j|jko0| j|jko0| j|jkS r$   )r%   r3  ro   rB   r4  r]   rp   r,   r,   r-   rq   “  s    

ÿ
ýzExtension.__eq__r2   c                 C  s   t | j| j| jfƒS r$   )rs   rB   r4  r]   r6   r,   r,   r-   rt   �  s    zExtension.__hash__N)rJ   rK   rL   rE   ry   rB   r4  r]   r`   rq   rt   r,   r,   r,   r-   r3  q  s   
r3  c                   @  sÔ   e Zd Zdddœdd„Zedƒ\ZZZej	ddd	œd
d„ƒZ
ej	ddd	œdd„ƒZ
ej	ddd	œdd„ƒZ
ej	ddd	œdd„ƒZ
ej	ddd	œdd„ƒZ
ddd	œdd„Z
ddœdd„Zdd d!œd"d#„Zd$dœd%d&„Zd'S )(ÚGeneralNamesr&  r?   ©Úgeneral_namesr#   c                 C  s,   t |ƒ}tdd„ |D ƒƒs"tdƒ‚|| _d S )Nc                 s  s   | ]}t |tƒV  qd S r$   r€   r�   r,   r,   r-   r„   ¤  rž   z(GeneralNames.__init__.<locals>.<genexpr>z^Every item in the general_names list must be an object conforming to the GeneralName interface)rT   r†   r\   Ú_general_names©r7   r=  r,   r,   r-   rE   ¢  s    ÿzGeneralNames.__init__r>  úBtype[DNSName] | type[UniformResourceIdentifier] | type[RFC822Name]ú	list[str]©Útyper#   c                 C  s   d S r$   r,   ©r7   rC  r,   r,   r-   Úget_values_for_type®  s    z GeneralNames.get_values_for_typeútype[DirectoryName]ú
list[Name]c                 C  s   d S r$   r,   rD  r,   r,   r-   rE  ¶  s    útype[RegisteredID]úlist[ObjectIdentifier]c                 C  s   d S r$   r,   rD  r,   r,   r-   rE  ¼  s    útype[IPAddress]úlist[_IPAddressTypes]c                 C  s   d S r$   r,   rD  r,   r,   r-   rE  Â  s    útype[OtherName]úlist[OtherName]c                 C  s   d S r$   r,   rD  r,   r,   r-   rE  Ç  s    ú‘type[DNSName] | type[DirectoryName] | type[IPAddress] | type[OtherName] | type[RFC822Name] | type[RegisteredID] | type[UniformResourceIdentifier]úYlist[_IPAddressTypes] | list[str] | list[OtherName] | list[Name] | list[ObjectIdentifier]c                   s0   ‡ fdd„| D ƒ}ˆ t kr(dd„ |D ƒS t|ƒS )Nc                 3  s   | ]}t |ˆ ƒr|V  qd S r$   )r%   ©r‚   Úi©rC  r,   r-   r„   ß  rž   z3GeneralNames.get_values_for_type.<locals>.<genexpr>c                 S  s   g | ]
}|j ‘qS r,   r  rP  r,   r,   r-   Ú
<listcomp>á  rž   z4GeneralNames.get_values_for_type.<locals>.<listcomp>)r   rT   )r7   rC  Úobjsr,   rR  r-   rE  Ì  s    r/   r3   c                 C  s   d| j › d�S )Nz<GeneralNames(r_   ©r>  r6   r,   r,   r-   r`   ä  s    zGeneralNames.__repr__rk   rl   rm   c                 C  s   t |tƒstS | j|jkS r$   )r%   r;  ro   r>  rp   r,   r,   r-   rq   ç  s    
zGeneralNames.__eq__r2   c                 C  s   t t| jƒƒS r$   )rs   r“   r>  r6   r,   r,   r-   rt   í  s    zGeneralNames.__hash__N)rJ   rK   rL   rE   r=   ra   rb   rc   ÚtypingÚoverloadrE  r`   rq   rt   r,   r,   r,   r-   r;  ¡  s    
r;  c                   @  sè   e Zd ZejZdddœdd„Zedƒ\ZZ	Z
ejddd	œd
d„ƒZejddd	œdd„ƒZejddd	œdd„ƒZejddd	œdd„ƒZejddd	œdd„ƒZddd	œdd„Zddœdd„Zdd d!œd"d#„Zd$dœd%d&„Zd'dœd(d)„Zd*S )+ÚSubjectAlternativeNamer&  r?   r<  c                 C  s   t |ƒ| _d S r$   ©r;  r>  r?  r,   r,   r-   rE   ô  s    zSubjectAlternativeName.__init__r>  r@  rA  rB  c                 C  s   d S r$   r,   rD  r,   r,   r-   rE  ù  s    z*SubjectAlternativeName.get_values_for_typerF  rG  c                 C  s   d S r$   r,   rD  r,   r,   r-   rE    s    rH  rI  c                 C  s   d S r$   r,   rD  r,   r,   r-   rE    s    rJ  rK  c                 C  s   d S r$   r,   rD  r,   r,   r-   rE    s    rL  rM  c                 C  s   d S r$   r,   rD  r,   r,   r-   rE    s    rN  rO  c                 C  s   | j  |¡S r$   ©r>  rE  rD  r,   r,   r-   rE    s    r/   r3   c                 C  s   d| j › d�S )Nz<SubjectAlternativeName(r_   rU  r6   r,   r,   r-   r`   )  s    zSubjectAlternativeName.__repr__rk   rl   rm   c                 C  s   t |tƒstS | j|jkS r$   )r%   rX  ro   r>  rp   r,   r,   r-   rq   ,  s    
zSubjectAlternativeName.__eq__r2   c                 C  s
   t | jƒS r$   ©rs   r>  r6   r,   r,   r-   rt   2  s    zSubjectAlternativeName.__hash__r    c                 C  s
   t  | ¡S r$   rw   r6   r,   r,   r-   r&   5  s    z#SubjectAlternativeName.public_bytesN)rJ   rK   rL   r   ZSUBJECT_ALTERNATIVE_NAMErB   rE   r=   ra   rb   rc   rV  rW  rE  r`   rq   rt   r&   r,   r,   r,   r-   rX  ñ  s$   rX  c                   @  sè   e Zd ZejZdddœdd„Zedƒ\ZZ	Z
ejddd	œd
d„ƒZejddd	œdd„ƒZejddd	œdd„ƒZejddd	œdd„ƒZejddd	œdd„ƒZddd	œdd„Zddœdd„Zdd d!œd"d#„Zd$dœd%d&„Zd'dœd(d)„Zd*S )+ÚIssuerAlternativeNamer&  r?   r<  c                 C  s   t |ƒ| _d S r$   rY  r?  r,   r,   r-   rE   <  s    zIssuerAlternativeName.__init__r>  r@  rA  rB  c                 C  s   d S r$   r,   rD  r,   r,   r-   rE  A  s    z)IssuerAlternativeName.get_values_for_typerF  rG  c                 C  s   d S r$   r,   rD  r,   r,   r-   rE  I  s    rH  rI  c                 C  s   d S r$   r,   rD  r,   r,   r-   rE  O  s    rJ  rK  c                 C  s   d S r$   r,   rD  r,   r,   r-   rE  U  s    rL  rM  c                 C  s   d S r$   r,   rD  r,   r,   r-   rE  Z  s    rN  rO  c                 C  s   | j  |¡S r$   rZ  rD  r,   r,   r-   rE  _  s    r/   r3   c                 C  s   d| j › d�S )Nz<IssuerAlternativeName(r_   rU  r6   r,   r,   r-   r`   q  s    zIssuerAlternativeName.__repr__rk   rl   rm   c                 C  s   t |tƒstS | j|jkS r$   )r%   r\  ro   r>  rp   r,   r,   r-   rq   t  s    
zIssuerAlternativeName.__eq__r2   c                 C  s
   t | jƒS r$   r[  r6   r,   r,   r-   rt   z  s    zIssuerAlternativeName.__hash__r    c                 C  s
   t  | ¡S r$   rw   r6   r,   r,   r-   r&   }  s    z"IssuerAlternativeName.public_bytesN)rJ   rK   rL   r   ZISSUER_ALTERNATIVE_NAMErB   rE   r=   ra   rb   rc   rV  rW  rE  r`   rq   rt   r&   r,   r,   r,   r-   r\  9  s$   r\  c                   @  sè   e Zd ZejZdddœdd„Zedƒ\ZZ	Z
ejddd	œd
d„ƒZejddd	œdd„ƒZejddd	œdd„ƒZejddd	œdd„ƒZejddd	œdd„ƒZddd	œdd„Zddœdd„Zdd d!œd"d#„Zd$dœd%d&„Zd'dœd(d)„Zd*S )+ÚCertificateIssuerr&  r?   r<  c                 C  s   t |ƒ| _d S r$   rY  r?  r,   r,   r-   rE   „  s    zCertificateIssuer.__init__r>  r@  rA  rB  c                 C  s   d S r$   r,   rD  r,   r,   r-   rE  ‰  s    z%CertificateIssuer.get_values_for_typerF  rG  c                 C  s   d S r$   r,   rD  r,   r,   r-   rE  ‘  s    rH  rI  c                 C  s   d S r$   r,   rD  r,   r,   r-   rE  —  s    rJ  rK  c                 C  s   d S r$   r,   rD  r,   r,   r-   rE  �  s    rL  rM  c                 C  s   d S r$   r,   rD  r,   r,   r-   rE  ¢  s    rN  rO  c                 C  s   | j  |¡S r$   rZ  rD  r,   r,   r-   rE  §  s    r/   r3   c                 C  s   d| j › d�S )Nz<CertificateIssuer(r_   rU  r6   r,   r,   r-   r`   ¹  s    zCertificateIssuer.__repr__rk   rl   rm   c                 C  s   t |tƒstS | j|jkS r$   )r%   r]  ro   r>  rp   r,   r,   r-   rq   ¼  s    
zCertificateIssuer.__eq__r2   c                 C  s
   t | jƒS r$   r[  r6   r,   r,   r-   rt   Â  s    zCertificateIssuer.__hash__r    c                 C  s
   t  | ¡S r$   rw   r6   r,   r,   r-   r&   Å  s    zCertificateIssuer.public_bytesN)rJ   rK   rL   r   ZCERTIFICATE_ISSUERrB   rE   r=   ra   rb   rc   rV  rW  rE  r`   rq   rt   r&   r,   r,   r,   r-   r]  �  s$   r]  c                   @  sn   e Zd ZejZdddœdd„Zddœdd	„Zd
ddœdd„Zddœdd„Z	e
ddœdd„ƒZddœdd„ZdS )Ú	CRLReasonrÄ   r?   )Úreasonr#   c                 C  s   t |tƒstdƒ‚|| _d S )Nz*reason must be an element from ReasonFlags)r%   rÄ   r\   Ú_reason)r7   r_  r,   r,   r-   rE   Ì  s    
zCRLReason.__init__r/   r3   c                 C  s   d| j › d�S )Nz<CRLReason(reason=r_   ©r`  r6   r,   r,   r-   r`   Ò  s    zCRLReason.__repr__rk   rl   rm   c                 C  s   t |tƒstS | j|jkS r$   )r%   r^  ro   r_  rp   r,   r,   r-   rq   Õ  s    
zCRLReason.__eq__r2   c                 C  s
   t | jƒS r$   )rs   r_  r6   r,   r,   r-   rt   Û  s    zCRLReason.__hash__c                 C  s   | j S r$   ra  r6   r,   r,   r-   r_  Þ  s    zCRLReason.reasonr    c                 C  s
   t  | ¡S r$   rw   r6   r,   r,   r-   r&   â  s    zCRLReason.public_bytesN)rJ   rK   rL   r   Z
CRL_REASONrB   rE   r`   rq   rt   ry   r_  r&   r,   r,   r,   r-   r^  É  s   r^  c                   @  s€   e Zd ZejZdddœdd„Zddœdd	„Zd
ddœdd„Zddœdd„Z	e
ddœdd„ƒZe
ddœdd„ƒZddœdd„ZdS )ÚInvalidityDatezdatetime.datetimer?   )Úinvalidity_dater#   c                 C  s   t |tjƒstdƒ‚|| _d S )Nz+invalidity_date must be a datetime.datetime)r%   Údatetimer\   Ú_invalidity_date)r7   rc  r,   r,   r-   rE   é  s    zInvalidityDate.__init__r/   r3   c                 C  s   d| j › d�S )Nz <InvalidityDate(invalidity_date=r_   ©re  r6   r,   r,   r-   r`   ï  s    zInvalidityDate.__repr__rk   rl   rm   c                 C  s   t |tƒstS | j|jkS r$   )r%   rb  ro   rc  rp   r,   r,   r-   rq   ò  s    
zInvalidityDate.__eq__r2   c                 C  s
   t | jƒS r$   )rs   rc  r6   r,   r,   r-   rt   ø  s    zInvalidityDate.__hash__c                 C  s   | j S r$   rf  r6   r,   r,   r-   rc  û  s    zInvalidityDate.invalidity_datec                 C  s4   | j jd u r| j jtjjd�S | j jtjjd�S d S )N)Útzinfo)Útz)re  rg  Úreplacerd  ÚtimezoneÚutcÚ
astimezoner6   r,   r,   r-   Úinvalidity_date_utcÿ  s    z"InvalidityDate.invalidity_date_utcr    c                 C  s
   t  | ¡S r$   rw   r6   r,   r,   r-   r&     s    zInvalidityDate.public_bytesN)rJ   rK   rL   r   ZINVALIDITY_DATErB   rE   r`   rq   rt   ry   rc  rm  r&   r,   r,   r,   r-   rb  æ  s   rb  c                   @  sj   e Zd ZejZdddœdd„Zedƒ\ZZ	Z
ddœd	d
„Zddœdd„Zdddœdd„Zddœdd„ZdS )Ú)PrecertificateSignedCertificateTimestampsú+typing.Iterable[SignedCertificateTimestamp]r?   ©Úsigned_certificate_timestampsr#   c                 C  s,   t |ƒ}tdd„ |D ƒƒs"tdƒ‚|| _d S )Nc                 s  s   | ]}t |tƒV  qd S r$   ©r%   r   ©r‚   Zsctr,   r,   r-   r„     s   ÿzEPrecertificateSignedCertificateTimestamps.__init__.<locals>.<genexpr>úYEvery item in the signed_certificate_timestamps list must be a SignedCertificateTimestamp©rT   r†   r\   Ú_signed_certificate_timestamps©r7   rq  r,   r,   r-   rE     s    þÿz2PrecertificateSignedCertificateTimestamps.__init__rv  r/   r3   c                 C  s   dt | ƒ› d�S )Nz+<PrecertificateSignedCertificateTimestamps(r_   ©rT   r6   r,   r,   r-   r`   "  s    z2PrecertificateSignedCertificateTimestamps.__repr__r2   c                 C  s   t t| jƒƒS r$   ©rs   r“   rv  r6   r,   r,   r-   rt   %  s    z2PrecertificateSignedCertificateTimestamps.__hash__rk   rl   rm   c                 C  s   t |tƒstS | j|jkS r$   )r%   rn  ro   rv  rp   r,   r,   r-   rq   (  s    
ÿÿz0PrecertificateSignedCertificateTimestamps.__eq__r    c                 C  s
   t  | ¡S r$   rw   r6   r,   r,   r-   r&   1  s    z6PrecertificateSignedCertificateTimestamps.public_bytesN)rJ   rK   rL   r   Z%PRECERT_SIGNED_CERTIFICATE_TIMESTAMPSrB   rE   r=   ra   rb   rc   r`   rt   rq   r&   r,   r,   r,   r-   rn  
  s   ÿ
	rn  c                   @  sj   e Zd ZejZdddœdd„Zedƒ\ZZ	Z
ddœd	d
„Zddœdd„Zdddœdd„Zddœdd„ZdS )ÚSignedCertificateTimestampsro  r?   rp  c                 C  s,   t |ƒ}tdd„ |D ƒƒs"tdƒ‚|| _d S )Nc                 s  s   | ]}t |tƒV  qd S r$   rr  rs  r,   r,   r-   r„   ?  s   ÿz7SignedCertificateTimestamps.__init__.<locals>.<genexpr>rt  ru  rw  r,   r,   r-   rE   8  s    þÿz$SignedCertificateTimestamps.__init__rv  r/   r3   c                 C  s   dt | ƒ› d�S )Nz<SignedCertificateTimestamps(r_   rx  r6   r,   r,   r-   r`   M  s    z$SignedCertificateTimestamps.__repr__r2   c                 C  s   t t| jƒƒS r$   ry  r6   r,   r,   r-   rt   P  s    z$SignedCertificateTimestamps.__hash__rk   rl   rm   c                 C  s   t |tƒstS | j|jkS r$   )r%   rz  ro   rv  rp   r,   r,   r-   rq   S  s    
ÿÿz"SignedCertificateTimestamps.__eq__r    c                 C  s
   t  | ¡S r$   rw   r6   r,   r,   r-   r&   \  s    z(SignedCertificateTimestamps.public_bytesN)rJ   rK   rL   r   ZSIGNED_CERTIFICATE_TIMESTAMPSrB   rE   r=   ra   rb   rc   r`   rt   rq   r&   r,   r,   r,   r-   rz  5  s   ÿ
	rz  c                   @  sn   e Zd ZejZdddœdd„Zdddœd	d
„Zddœdd„Zddœdd„Z	e
ddœdd„ƒZddœdd„ZdS )Ú	OCSPNoncer    r?   )Únoncer#   c                 C  s   t |tƒstdƒ‚|| _d S )Nznonce must be bytes)r%   r    r\   Ú_nonce)r7   r|  r,   r,   r-   rE   c  s    
zOCSPNonce.__init__rk   rl   rm   c                 C  s   t |tƒstS | j|jkS r$   )r%   r{  ro   r|  rp   r,   r,   r-   rq   i  s    
zOCSPNonce.__eq__r2   r3   c                 C  s
   t | jƒS r$   )rs   r|  r6   r,   r,   r-   rt   o  s    zOCSPNonce.__hash__r/   c                 C  s   d| j ›d�S )Nz<OCSPNonce(nonce=r_   )r|  r6   r,   r,   r-   r`   r  s    zOCSPNonce.__repr__c                 C  s   | j S r$   )r}  r6   r,   r,   r-   r|  u  s    zOCSPNonce.noncec                 C  s
   t  | ¡S r$   rw   r6   r,   r,   r-   r&   y  s    zOCSPNonce.public_bytesN)rJ   rK   rL   r   ZNONCErB   rE   rq   rt   r`   ry   r|  r&   r,   r,   r,   r-   r{  `  s   r{  c                   @  sj   e Zd ZejZdddœdd„Zdddœd	d
„Zddœdd„Zddœdd„Z	ddœdd„Z
ddœdd„ZdS )ÚOCSPAcceptableResponsesrü   r?   )Ú	responsesr#   c                 C  s,   t |ƒ}tdd„ |D ƒƒr"tdƒ‚|| _d S )Nc                 s  s   | ]}t |tƒ V  qd S r$   rþ   )r‚   Úrr,   r,   r-   r„   ‚  rž   z3OCSPAcceptableResponses.__init__.<locals>.<genexpr>z'All responses must be ObjectIdentifiers)rT   r0  r\   Ú
_responses)r7   r  r,   r,   r-   rE   €  s    z OCSPAcceptableResponses.__init__rk   rl   rm   c                 C  s   t |tƒstS | j|jkS r$   )r%   r~  ro   r�  rp   r,   r,   r-   rq   ‡  s    
zOCSPAcceptableResponses.__eq__r2   r3   c                 C  s   t t| jƒƒS r$   )rs   r“   r�  r6   r,   r,   r-   rt   �  s    z OCSPAcceptableResponses.__hash__r/   c                 C  s   d| j › d�S )Nz#<OCSPAcceptableResponses(responses=r_   )r�  r6   r,   r,   r-   r`   �  s    z OCSPAcceptableResponses.__repr__z!typing.Iterator[ObjectIdentifier]c                 C  s
   t | jƒS r$   )r9   r�  r6   r,   r,   r-   rb   “  s    z OCSPAcceptableResponses.__iter__r    c                 C  s
   t  | ¡S r$   rw   r6   r,   r,   r-   r&   –  s    z$OCSPAcceptableResponses.public_bytesN)rJ   rK   rL   r   ZACCEPTABLE_RESPONSESrB   rE   rq   rt   r`   rb   r&   r,   r,   r,   r-   r~  }  s   r~  c                	   @  sæ   e Zd ZejZdddddddddœdd„Zd	d
œdd„Zdddœdd„Zdd
œdd„Z	e
dd
œdd„ƒZe
dd
œdd„ƒZe
dd
œdd„ƒZe
dd
œdd„ƒZe
dd
œdd„ƒZe
dd
œdd „ƒZe
dd
œd!d"„ƒZd#d
œd$d%„Zd&S )'ÚIssuingDistributionPointr{   r½   rl   r¾   r?   )r¿   rÀ   Úonly_contains_user_certsÚonly_contains_ca_certsÚonly_some_reasonsÚindirect_crlÚonly_contains_attribute_certsr#   c           	      C  sþ   |d urt |ƒ}|r8t|tƒr0tdd„ |D ƒƒs8tdƒ‚|rXtj|v sPtj|v 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„   ¬  rž   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-   rS  Î  rž   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.)rT   r%   rÅ   r†   r\   rÄ   rÆ   rÇ   r…   rl   r4   r0  Ú_only_contains_user_certsÚ_only_contains_ca_certsÚ_indirect_crlÚ_only_contains_attribute_certsÚ_only_some_reasonsrÈ   rÉ   )	r7   r¿   rÀ   rƒ  r„  r…  r†  r‡  Zcrl_constraintsr,   r,   r-   rE   �  st    
ÿþÿÿþÿÿþýüÿüÿùÿÿz!IssuingDistributionPoint.__init__r/   r3   c                 C  s>   d| j › d| j› d| j› d| j› d| j› d| j› d| j› d�S )	Nz$<IssuingDistributionPoint(full_name=z, relative_name=z, only_contains_user_certs=z, only_contains_ca_certs=z, only_some_reasons=z, indirect_crl=z , only_contains_attribute_certs=r_   )r¿   rÀ   rƒ  r„  r…  r†  r‡  r6   r,   r,   r-   r`   ð  s    
ÿþýüûùÿz!IssuingDistributionPoint.__repr__rk   rm   c                 C  sb   t |tƒstS | j|jko`| j|jko`| j|jko`| j|jko`| j|jko`| j|jko`| j	|j	kS r$   )
r%   r‚  ro   r¿   rÀ   rƒ  r„  r…  r†  r‡  rp   r,   r,   r-   rq   ü  s"    

ÿ
þ
ý
ü
ûÿùzIssuingDistributionPoint.__eq__r2   c                 C  s$   t | j| j| j| j| j| j| jfƒS r$   )rs   r¿   rÀ   rƒ  r„  r…  r†  r‡  r6   r,   r,   r-   rt     s    ùÿz!IssuingDistributionPoint.__hash__r”   c                 C  s   | j S r$   rÏ   r6   r,   r,   r-   r¿     s    z"IssuingDistributionPoint.full_namec                 C  s   | j S r$   rÐ   r6   r,   r,   r-   rÀ     s    z&IssuingDistributionPoint.relative_namec                 C  s   | j S r$   )rˆ  r6   r,   r,   r-   rƒ     s    z1IssuingDistributionPoint.only_contains_user_certsc                 C  s   | j S r$   )r‰  r6   r,   r,   r-   r„  $  s    z/IssuingDistributionPoint.only_contains_ca_certsc                 C  s   | j S r$   )rŒ  r6   r,   r,   r-   r…  (  s    z*IssuingDistributionPoint.only_some_reasonsc                 C  s   | j S r$   )rŠ  r6   r,   r,   r-   r†  .  s    z%IssuingDistributionPoint.indirect_crlc                 C  s   | j S r$   )r‹  r6   r,   r,   r-   r‡  2  s    z6IssuingDistributionPoint.only_contains_attribute_certsr    c                 C  s
   t  | ¡S r$   rw   r6   r,   r,   r-   r&   6  s    z%IssuingDistributionPoint.public_bytesN)rJ   rK   rL   r   ZISSUING_DISTRIBUTION_POINTrB   rE   r`   rq   rt   ry   r¿   rÀ   rƒ  r„  r…  r†  r‡  r&   r,   r,   r,   r-   r‚  š  s(   Sr‚  c                   @  s–   e Zd ZejZdddddœdd„Zeddœdd	„ƒZeddœd
d„ƒZ	eddœdd„ƒZ
ddœdd„Zdddœdd„Zddœdd„Zddœdd„ZdS )ÚMSCertificateTemplater   r|   r?   )Útemplate_idÚmajor_versionÚminor_versionr#   c                 C  sT   t |tƒstdƒ‚|| _|d ur*t |tƒr<|d urDt |tƒsDtdƒ‚|| _|| _d S )Núoid must be an ObjectIdentifierz8major_version and minor_version must be integers or None)r%   r   r\   Ú_template_idr2   Ú_major_versionÚ_minor_version)r7   rŽ  r�  r�  r,   r,   r-   rE   =  s     
ÿÿýýÿzMSCertificateTemplate.__init__r3   c                 C  s   | j S r$   )r’  r6   r,   r,   r-   rŽ  Q  s    z!MSCertificateTemplate.template_idc                 C  s   | j S r$   )r“  r6   r,   r,   r-   r�  U  s    z#MSCertificateTemplate.major_versionc                 C  s   | j S r$   )r”  r6   r,   r,   r-   r�  Y  s    z#MSCertificateTemplate.minor_versionr/   c                 C  s   d| j › d| j› d| j› d�S )Nz#<MSCertificateTemplate(template_id=z, major_version=z, minor_version=r_   )rŽ  r�  r�  r6   r,   r,   r-   r`   ]  s    
ÿþÿzMSCertificateTemplate.__repr__rk   rl   rm   c                 C  s2   t |tƒstS | j|jko0| j|jko0| j|jkS r$   )r%   r�  ro   rŽ  r�  r�  rp   r,   r,   r-   rq   d  s    

ÿ
ýzMSCertificateTemplate.__eq__r2   c                 C  s   t | j| j| jfƒS r$   )rs   rŽ  r�  r�  r6   r,   r,   r-   rt   n  s    zMSCertificateTemplate.__hash__r    c                 C  s
   t  | ¡S r$   rw   r6   r,   r,   r-   r&   q  s    z"MSCertificateTemplate.public_bytesN)rJ   rK   rL   r   ZMS_CERTIFICATE_TEMPLATErB   rE   ry   rŽ  r�  r�  r`   rq   rt   r&   r,   r,   r,   r-   r�  :  s   
r�  c                   @  s|   e Zd Zddddœdd„Zeddœdd	„ƒZeddœd
d„ƒZddœdd„Zdddœdd„Zddœdd„Z	ddœdd„Z
dS )r[   r   r    r?   )rB   r]   r#   c                 C  s"   t |tƒstdƒ‚|| _|| _d S )Nr‘  )r%   r   r\   r5  r7  )r7   rB   r]   r,   r,   r-   rE   v  s    
zUnrecognizedExtension.__init__r3   c                 C  s   | j S r$   r8  r6   r,   r,   r-   rB   |  s    zUnrecognizedExtension.oidc                 C  s   | j S r$   r9  r6   r,   r,   r-   r]   €  s    zUnrecognizedExtension.valuer/   c                 C  s   d| j › d| j›d�S )Nz<UnrecognizedExtension(oid=r:  r_   )rB   r]   r6   r,   r,   r-   r`   „  s    
ÿÿzUnrecognizedExtension.__repr__rk   rl   rm   c                 C  s&   t |tƒstS | j|jko$| j|jkS r$   )r%   r[   ro   rB   r]   rp   r,   r,   r-   rq   Š  s    
zUnrecognizedExtension.__eq__r2   c                 C  s   t | j| jfƒS r$   )rs   rB   r]   r6   r,   r,   r-   rt   �  s    zUnrecognizedExtension.__hash__c                 C  s   | j S r$   r  r6   r,   r,   r-   r&   “  s    z"UnrecognizedExtension.public_bytesN)rJ   rK   rL   rE   ry   rB   r]   r`   rq   rt   r&   r,   r,   r,   r-   r[   u  s   r[   )lÚ
__future__r   Úabcrd  r(   r+  rV  Zcryptographyr   Z"cryptography.hazmat.bindings._rustr   r   rx   Zcryptography.hazmat.primitivesr   r   Z,cryptography.hazmat.primitives.asymmetric.ecr   Z-cryptography.hazmat.primitives.asymmetric.rsar	   Z/cryptography.hazmat.primitives.asymmetric.typesr
   r   Z*cryptography.x509.certificate_transparencyr   Zcryptography.x509.general_namer   r   r   r   r   r   r   r   r   Zcryptography.x509.namer   r   Zcryptography.x509.oidr   r   r   r   ÚTypeVarr   r.   r=   Ú	Exceptionr>   rN   ÚABCMetar   rR   rd   rz   r�   r˜   r¥   r�   rª   r¯   r°   r¼   rµ   ÚEnumrÄ   rÒ   rÓ   rÔ   rÑ   rÕ   rÖ   r×   rØ   Z_REASON_BIT_MAPPINGZ_CRLREASONFLAGSrÆ   rÇ   Z_CRL_ENTRY_REASON_ENUM_TO_CODErã   rè   rê   rî   rô   rû   r   r  r  r  Z_TLS_FEATURE_TYPE_TO_ENUMr
  r  r   ÚGenericr3  r;  rX  r\  r]  r^  rb  rn  rz  r{  r~  r‚  r�  r[   r,   r,   r,   r-   Ú<module>   sÀ   ,ÿ'l$!!(/%%køøöA;+("  s0PHHH$++ !;