U
    ʹh/                    @  s  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m	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Z0ddddZ1G dd de2Z3G dd de2Z4G d d dej5d!Z6G d"d# d#Z7G d$d% d%e6Z8G d&d' d'e6Z9G d(d) d)e6Z:G d*d+ d+e6Z;G d,d- d-e6Z<G d.d/ d/Z=G d0d1 d1e6Z>G d2d3 d3e6Z?G d4d5 d5e6Z@G d6d7 d7e6ZAG d8d9 d9ZBG d:d; d;ejCZDeDjEeDjFeDjGeDjHeDjIeDjJeDjKeDjLd<ZMeDjEd=eDjFd>eDjGd?eDjHd@eDjIdAeDjJdBeDjKdCeDjLdDiZNeDjOd eDjEd=eDjFd>eDjGd?eDjHd@eDjIdAeDjJdBeDjPdDeDjKdEeDjLdFi
ZQG dGdH dHe6ZRG dIdJ dJe6ZSG dKdL dLZTG dMdN dNZUG dOdP dPZVG dQdR dRe6ZWG dSdT dTe6ZXG dUdV dVe6ZYG dWdX dXe6ZZG dYdZ dZejCZ[d[d\ e[D Z\G d]d^ d^e6Z]G d_d` d`e6Z^G dadb dbe6Z_G dcdd dde6Z`G dedf dfejae/ ZbG dgdh dhZcG didj dje6ZdG dkdl dle6ZeG dmdn dne6ZfG dodp dpe6ZgG dqdr dre6ZhG dsdt dte6ZiG dudv dve6ZjG dwdx dxe6ZkG dydz dze6ZlG d{d| d|e6ZmG d}d~ d~e6ZnG dd dZoG dd dZpG dd dZqG dd de6ZrG dd de6ZsdS )    )annotationsN)IterableIterator)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)ZboundZ	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	   ZEncodingZDERZPublicFormatZPKCS1r
   ZX962ZUncompressedPointZSubjectPublicKeyInfor   Zparse_spki_for_datahashlibZsha1digest)r"   dataZ
serialized r*   B./venv/lib/python3.8/site-packages/cryptography/x509/extensions.py_key_identifier_from_public_key3   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selfr.   r*   r+   
len_methodL   s    z*_make_sequence_methods.<locals>.len_methodc                   s   t t|  S r$   )iterr3   r4   r.   r*   r+   iter_methodO   s    z+_make_sequence_methods.<locals>.iter_methodc                   s   t |  | S r$   )r3   )r5   idxr.   r*   r+   getitem_methodR   s    z._make_sequence_methods.<locals>.getitem_methodr*   )r/   r6   r8   r:   r*   r.   r+   _make_sequence_methodsK   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__r@   r5   r?   r@   	__class__r*   r+   rC   Y   s    zDuplicateExtension.__init____name__
__module____qualname__rC   __classcell__r*   r*   rE   r+   r<   X   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$   rA   rD   rE   r*   r+   rC   _   s    zExtensionNotFound.__init__rG   r*   r*   rE   r+   rL   ^   s   rL   c                   @  s$   e Zd ZU ded< ddddZdS )r   z!typing.ClassVar[ObjectIdentifier]r@   r    r1   c                 C  s   t d| dS )z7
        Serializes the extension type to DER.
        z3public_bytes is not implemented for extension type N)NotImplementedErrorr4   r*   r*   r+   r&   g   s    zExtensionType.public_bytesN)rH   rI   rJ   __annotations__r&   r*   r*   r*   r+   r   d   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"Iterable[Extension[ExtensionType]]r=   )
extensionsr#   c                 C  s   t || _d S r$   )list_extensions)r5   rQ   r*   r*   r+   rC   q   s    zExtensions.__init__r   zExtension[ExtensionType])r@   r#   c                 C  s2   | D ]}|j |kr|  S qtd| d|d S )NNo  extension was found)r@   rL   )r5   r@   extr*   r*   r+   get_extension_for_oidt   s    

z Extensions.get_extension_for_oidztype[ExtensionTypeVar]zExtension[ExtensionTypeVar])extclassr#   c                 C  sF   |t krtd| D ]}t|j|r|  S qtd| d|jd S )Nz|UnrecognizedExtension can't be used with get_extension_for_class because more than one instance of the class may be present.rT   rU   )UnrecognizedExtension	TypeErrorr%   valuerL   r@   )r5   rX   rV   r*   r*   r+   get_extension_for_class}   s    

 z"Extensions.get_extension_for_classrS   r-   r1   c                 C  s   d| j  dS )Nz<Extensions()>)rS   r4   r*   r*   r+   __repr__   s    zExtensions.__repr__N)rH   rI   rJ   rC   rW   r\   r;   __len____iter____getitem__r^   r*   r*   r*   r+   rP   p   s
   	rP   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 )	CRLNumberr0   r=   
crl_numberr#   c                 C  s   t |tstd|| _d S Nzcrl_number must be an integerr%   r0   rZ   _crl_numberr5   rd   r*   r*   r+   rC      s    
zCRLNumber.__init__objectboolotherr#   c                 C  s   t |tstS | j|jkS r$   )r%   rb   NotImplementedrd   r5   rl   r*   r*   r+   __eq__   s    
zCRLNumber.__eq__r1   c                 C  s
   t | jS r$   hashrd   r4   r*   r*   r+   __hash__   s    zCRLNumber.__hash__r-   c                 C  s   d| j  dS )Nz<CRLNumber(r]   rd   r4   r*   r*   r+   r^      s    zCRLNumber.__repr__c                 C  s   | j S r$   rg   r4   r*   r*   r+   rd      s    zCRLNumber.crl_numberr    c                 C  s
   t | S r$   	rust_x509Zencode_extension_valuer4   r*   r*   r+   r&      s    zCRLNumber.public_bytesN)rH   rI   rJ   r   Z
CRL_NUMBERr@   rC   ro   rr   r^   propertyrd   r&   r*   r*   r*   r+   rb      s   rb   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 )'AuthorityKeyIdentifierbytes | NoneIterable[GeneralName] | None
int | Noner=   )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)	
ValueErrorrR   allrZ   r%   r0   _key_identifier_authority_cert_issuer_authority_cert_serial_number)r5   r|   r}   r~   r*   r*   r+   rC      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-   r1   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   r4   r*   r*   r+   r^      s    zAuthorityKeyIdentifier.__repr__ri   rj   rk   c                 C  s2   t |tstS | j|jko0| j|jko0| j|jkS r$   )r%   rx   rm   r|   r}   r~   rn   r*   r*   r+   ro      s    

zAuthorityKeyIdentifier.__eq__r0   c                 C  s,   | j d krd }n
t| j }t| j|| jfS r$   )r}   tuplerq   r|   r~   )r5   Zacir*   r*   r+   rr     s    

zAuthorityKeyIdentifier.__hash__c                 C  s   | j S r$   )r   r4   r*   r*   r+   r|     s    z%AuthorityKeyIdentifier.key_identifierlist[GeneralName] | Nonec                 C  s   | j S r$   )r   r4   r*   r*   r+   r}     s    z,AuthorityKeyIdentifier.authority_cert_issuerc                 C  s   | j S r$   )r   r4   r*   r*   r+   r~     s    z3AuthorityKeyIdentifier.authority_cert_serial_numberr    c                 C  s
   t | S r$   ru   r4   r*   r*   r+   r&     s    z#AuthorityKeyIdentifier.public_bytesN)rH   rI   rJ   r   ZAUTHORITY_KEY_IDENTIFIERr@   rC   classmethodr   r   r^   ro   rr   rw   r|   r}   r~   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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)r5   r(   r*   r*   r+   rC   !  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_keyr1   c                 C  s   | j S r$   r   r4   r*   r*   r+   r(   *  s    zSubjectKeyIdentifier.digestc                 C  s   | j S r$   r   r4   r*   r*   r+   r|   .  s    z#SubjectKeyIdentifier.key_identifierr-   c                 C  s   d| j dS )Nz<SubjectKeyIdentifier(digest=r]   r   r4   r*   r*   r+   r^   2  s    zSubjectKeyIdentifier.__repr__ri   rj   rk   c                 C  s   t |tstS t| j|jS r$   )r%   r   rm   r   Zbytes_eqr(   rn   r*   r*   r+   ro   5  s    
zSubjectKeyIdentifier.__eq__r0   c                 C  s
   t | jS r$   )rq   r(   r4   r*   r*   r+   rr   ;  s    zSubjectKeyIdentifier.__hash__c                 C  s
   t | S r$   ru   r4   r*   r*   r+   r&   >  s    z!SubjectKeyIdentifier.public_bytesN)rH   rI   rJ   r   ZSUBJECT_KEY_IDENTIFIERr@   rC   r   r   rw   r(   r|   r^   ro   rr   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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   G  s     z6AuthorityInformationAccess.__init__.<locals>.<genexpr>@Every item in the descriptions list must be an AccessDescriptionrR   r   rZ   _descriptionsr5   r   r*   r*   r+   rC   E  s    z#AuthorityInformationAccess.__init__r   r-   r1   c                 C  s   d| j  dS )Nz<AuthorityInformationAccess(r]   r   r4   r*   r*   r+   r^   Q  s    z#AuthorityInformationAccess.__repr__ri   rj   rk   c                 C  s   t |tstS | j|jkS r$   )r%   r   rm   r   rn   r*   r*   r+   ro   T  s    
z!AuthorityInformationAccess.__eq__r0   c                 C  s   t t| jS r$   rq   r   r   r4   r*   r*   r+   rr   Z  s    z#AuthorityInformationAccess.__hash__r    c                 C  s
   t | S r$   ru   r4   r*   r*   r+   r&   ]  s    z'AuthorityInformationAccess.public_bytesN)rH   rI   rJ   r   ZAUTHORITY_INFORMATION_ACCESSr@   rC   r;   r_   r`   ra   r^   ro   rr   r&   r*   r*   r*   r+   r   B  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   f  s     z4SubjectInformationAccess.__init__.<locals>.<genexpr>r   r   r   r*   r*   r+   rC   d  s    z!SubjectInformationAccess.__init__r   r-   r1   c                 C  s   d| j  dS )Nz<SubjectInformationAccess(r]   r   r4   r*   r*   r+   r^   p  s    z!SubjectInformationAccess.__repr__ri   rj   rk   c                 C  s   t |tstS | j|jkS r$   )r%   r   rm   r   rn   r*   r*   r+   ro   s  s    
zSubjectInformationAccess.__eq__r0   c                 C  s   t t| jS r$   r   r4   r*   r*   r+   rr   y  s    z!SubjectInformationAccess.__hash__r    c                 C  s
   t | S r$   ru   r4   r*   r*   r+   r&   |  s    z%SubjectInformationAccess.public_bytesN)rH   rI   rJ   r   ZSUBJECT_INFORMATION_ACCESSr@   rC   r;   r_   r`   ra   r^   ro   rr   r&   r*   r*   r*   r+   r   a  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   rZ   r   _access_method_access_location)r5   r   r   r*   r*   r+   rC     s    

zAccessDescription.__init__r-   r1   c                 C  s   d| j  d| j dS )Nz!<AccessDescription(access_method=z, access_location=r]   )r   r   r4   r*   r*   r+   r^     s    zAccessDescription.__repr__ri   rj   rk   c                 C  s&   t |tstS | j|jko$| j|jkS r$   )r%   r   rm   r   r   rn   r*   r*   r+   ro     s
    

zAccessDescription.__eq__r0   c                 C  s   t | j| jfS r$   )rq   r   r   r4   r*   r*   r+   rr     s    zAccessDescription.__hash__c                 C  s   | j S r$   )r   r4   r*   r*   r+   r     s    zAccessDescription.access_methodc                 C  s   | j S r$   )r   r4   r*   r*   r+   r     s    z!AccessDescription.access_locationN)
rH   rI   rJ   rC   r^   ro   rr   rw   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 )BasicConstraintsrj   r{   r=   )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%   rj   rZ   r   r0   _ca_path_length)r5   r   r   r*   r*   r+   rC     s    
zBasicConstraints.__init__r1   c                 C  s   | j S r$   )r   r4   r*   r*   r+   r     s    zBasicConstraints.cac                 C  s   | j S r$   )r   r4   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   r4   r*   r*   r+   r^     s    zBasicConstraints.__repr__ri   rk   c                 C  s&   t |tstS | j|jko$| j|jkS r$   )r%   r   rm   r   r   rn   r*   r*   r+   ro     s    
zBasicConstraints.__eq__r0   c                 C  s   t | j| jfS r$   )rq   r   r   r4   r*   r*   r+   rr     s    zBasicConstraints.__hash__r    c                 C  s
   t | S r$   ru   r4   r*   r*   r+   r&     s    zBasicConstraints.public_bytesN)rH   rI   rJ   r   ZBASIC_CONSTRAINTSr@   rC   rw   r   r   r^   ro   rr   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 )DeltaCRLIndicatorr0   r=   rc   c                 C  s   t |tstd|| _d S re   rf   rh   r*   r*   r+   rC     s    
zDeltaCRLIndicator.__init__r1   c                 C  s   | j S r$   rt   r4   r*   r*   r+   rd     s    zDeltaCRLIndicator.crl_numberri   rj   rk   c                 C  s   t |tstS | j|jkS r$   )r%   r   rm   rd   rn   r*   r*   r+   ro     s    
zDeltaCRLIndicator.__eq__c                 C  s
   t | jS r$   rp   r4   r*   r*   r+   rr     s    zDeltaCRLIndicator.__hash__r-   c                 C  s   d| j  dS )Nz<DeltaCRLIndicator(crl_number=r]   rs   r4   r*   r*   r+   r^     s    zDeltaCRLIndicator.__repr__r    c                 C  s
   t | S r$   ru   r4   r*   r*   r+   r&     s    zDeltaCRLIndicator.public_bytesN)rH   rI   rJ   r   ZDELTA_CRL_INDICATORr@   rC   rw   rd   ro   rr   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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rR   r   rZ   _distribution_pointsr5   r   r*   r*   r+   rC     s    zCRLDistributionPoints.__init__r   r-   r1   c                 C  s   d| j  dS )Nz<CRLDistributionPoints(r]   r   r4   r*   r*   r+   r^     s    zCRLDistributionPoints.__repr__ri   rj   rk   c                 C  s   t |tstS | j|jkS r$   )r%   r   rm   r   rn   r*   r*   r+   ro     s    
zCRLDistributionPoints.__eq__r0   c                 C  s   t t| jS r$   rq   r   r   r4   r*   r*   r+   rr     s    zCRLDistributionPoints.__hash__r    c                 C  s
   t | S r$   ru   r4   r*   r*   r+   r&     s    z"CRLDistributionPoints.public_bytesN)rH   rI   rJ   r   ZCRL_DISTRIBUTION_POINTSr@   rC   r;   r_   r`   ra   r^   ro   rr   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+   rC     s    zFreshestCRL.__init__r   r-   r1   c                 C  s   d| j  dS )Nz<FreshestCRL(r]   r   r4   r*   r*   r+   r^   -  s    zFreshestCRL.__repr__ri   rj   rk   c                 C  s   t |tstS | j|jkS r$   )r%   r   rm   r   rn   r*   r*   r+   ro   0  s    
zFreshestCRL.__eq__r0   c                 C  s   t t| jS r$   r   r4   r*   r*   r+   rr   6  s    zFreshestCRL.__hash__r    c                 C  s
   t | S r$   ru   r4   r*   r*   r+   r&   9  s    zFreshestCRL.public_bytesN)rH   rI   rJ   r   ZFRESHEST_CRLr@   rC   r;   r_   r`   ra   r^   ro   rr   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   rz    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 k	rNt|}tdd |D sNtd|rdt|tsdtd|d k	rt|}tdd |D std|rt|trtd	d |D std
|rtj|kstj	|krt d|| _
|| _|| _|| _d S )NzOYou cannot provide both full_name and relative_name, at least one must be None.z?Either full_name, relative_name or crl_issuer must be provided.c                 s  s   | ]}t |tV  qd S r$   r   r   r*   r*   r+   r   R  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%   ReasonFlagsr   r*   r*   r+   r   f  s     z0reasons must be None or frozenset of ReasonFlagszLunspecified and remove_from_crl are not valid reasons in a DistributionPoint)r   rR   r   rZ   r%   r   	frozensetr   unspecifiedremove_from_crl
_full_name_relative_name_reasons_crl_issuer)r5   r   r   r   r   r*   r*   r+   rC   >  sV    
zDistributionPoint.__init__r-   r1   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})>formatr4   r*   r*   r+   r^   x  s    zDistributionPoint.__repr__ri   rj   rk   c                 C  s>   t |tstS | j|jko<| j|jko<| j|jko<| j|jkS r$   )r%   r   rm   r   r   r   r   rn   r*   r*   r+   ro     s    



zDistributionPoint.__eq__r0   c                 C  sH   | j d k	rt| j }nd }| jd k	r0t| j}nd }t|| j| j|fS r$   )r   r   r   rq   r   r   )r5   fnr   r*   r*   r+   rr     s    

zDistributionPoint.__hash__r   c                 C  s   | j S r$   r   r4   r*   r*   r+   r     s    zDistributionPoint.full_namec                 C  s   | j S r$   r   r4   r*   r*   r+   r     s    zDistributionPoint.relative_namec                 C  s   | j S r$   )r   r4   r*   r*   r+   r     s    zDistributionPoint.reasonsc                 C  s   | j S r$   )r   r4   r*   r*   r+   r     s    zDistributionPoint.crl_issuerN)rH   rI   rJ   rC   r^   ro   rr   rw   r   r   r   r   r*   r*   r*   r+   r   =  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)rH   rI   rJ   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 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%   r0   rZ   r   _require_explicit_policy_inhibit_policy_mapping)r5   r   r   r*   r*   r+   rC     s(    
 
 zPolicyConstraints.__init__r-   r1   c                 C  s
   d | S )Nz{<PolicyConstraints(require_explicit_policy={0.require_explicit_policy}, inhibit_policy_mapping={0.inhibit_policy_mapping})>r   r4   r*   r*   r+   r^     s    zPolicyConstraints.__repr__ri   rj   rk   c                 C  s&   t |tstS | j|jko$| j|jkS r$   )r%   r   rm   r   r   rn   r*   r*   r+   ro     s
    

zPolicyConstraints.__eq__r0   c                 C  s   t | j| jfS r$   )rq   r   r   r4   r*   r*   r+   rr   !  s    
zPolicyConstraints.__hash__c                 C  s   | j S r$   )r   r4   r*   r*   r+   r   &  s    z)PolicyConstraints.require_explicit_policyc                 C  s   | j S r$   )r   r4   r*   r*   r+   r   *  s    z(PolicyConstraints.inhibit_policy_mappingr    c                 C  s
   t | S r$   ru   r4   r*   r*   r+   r&   .  s    zPolicyConstraints.public_bytesN)rH   rI   rJ   r   ZPOLICY_CONSTRAINTSr@   rC   r^   ro   rr   rw   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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   7  s     z/CertificatePolicies.__init__.<locals>.<genexpr>z;Every item in the policies list must be a PolicyInformation)rR   r   rZ   	_policies)r5   r   r*   r*   r+   rC   5  s    zCertificatePolicies.__init__r   r-   r1   c                 C  s   d| j  dS )Nz<CertificatePolicies(r]   )r   r4   r*   r*   r+   r^   @  s    zCertificatePolicies.__repr__ri   rj   rk   c                 C  s   t |tstS | j|jkS r$   )r%   r   rm   r   rn   r*   r*   r+   ro   C  s    
zCertificatePolicies.__eq__r0   c                 C  s   t t| jS r$   )rq   r   r   r4   r*   r*   r+   rr   I  s    zCertificatePolicies.__hash__r    c                 C  s
   t | S r$   ru   r4   r*   r*   r+   r&   L  s    z CertificatePolicies.public_bytesN)rH   rI   rJ   r   ZCERTIFICATE_POLICIESr@   rC   r;   r_   r`   ra   r^   ro   rr   r&   r*   r*   r*   r+   r   2  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!Iterable[str | UserNotice] | Noner=   )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%   r-   
UserNoticer   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_identifierrR   r   _policy_qualifiers)r5   r   r   r*   r*   r+   rC   Q  s    
zPolicyInformation.__init__r-   r1   c                 C  s   d| j  d| j dS )Nz%<PolicyInformation(policy_identifier=z, policy_qualifiers=r]   )r   r   r4   r*   r*   r+   r^   g  s    zPolicyInformation.__repr__ri   rj   rk   c                 C  s&   t |tstS | j|jko$| j|jkS r$   )r%   r   rm   r   r   rn   r*   r*   r+   ro   m  s
    

zPolicyInformation.__eq__r0   c                 C  s(   | j d k	rt| j }nd }t| j|fS r$   )r   r   rq   r   )r5   Zpqr*   r*   r+   rr   v  s    
zPolicyInformation.__hash__c                 C  s   | j S r$   )r   r4   r*   r*   r+   r   ~  s    z#PolicyInformation.policy_identifierzlist[str | UserNotice] | Nonec                 C  s   | j S r$   )r   r4   r*   r*   r+   r     s    z#PolicyInformation.policy_qualifiersN)
rH   rI   rJ   rC   r^   ro   rr   rw   r   r   r*   r*   r*   r+   r   P  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%   NoticeReferencerZ   _notice_reference_explicit_text)r5   r   r   r*   r*   r+   rC     s     zUserNotice.__init__r-   r1   c                 C  s   d| j  d| jdS )Nz<UserNotice(notice_reference=z, explicit_text=r]   )r   r   r4   r*   r*   r+   r^     s    zUserNotice.__repr__ri   rj   rk   c                 C  s&   t |tstS | j|jko$| j|jkS r$   )r%   r   rm   r   r   rn   r*   r*   r+   ro     s
    

zUserNotice.__eq__r0   c                 C  s   t | j| jfS r$   )rq   r   r   r4   r*   r*   r+   rr     s    zUserNotice.__hash__c                 C  s   | j S r$   )r   r4   r*   r*   r+   r     s    zUserNotice.notice_referencec                 C  s   | j S r$   )r   r4   r*   r*   r+   r     s    zUserNotice.explicit_textN)
rH   rI   rJ   rC   r^   ro   rr   rw   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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%   r0   r   r*   r*   r+   r     s     z+NoticeReference.__init__.<locals>.<genexpr>z)notice_numbers must be a list of integers)_organizationrR   r   rZ   _notice_numbers)r5   r   r   r*   r*   r+   rC     s
    zNoticeReference.__init__r-   r1   c                 C  s   d| j d| j dS )Nz<NoticeReference(organization=z, notice_numbers=r]   )r   r   r4   r*   r*   r+   r^     s    zNoticeReference.__repr__ri   rj   rk   c                 C  s&   t |tstS | j|jko$| j|jkS r$   )r%   r   rm   r   r   rn   r*   r*   r+   ro     s
    

zNoticeReference.__eq__r0   c                 C  s   t | jt| jfS r$   )rq   r   r   r   r4   r*   r*   r+   rr     s    zNoticeReference.__hash__c                 C  s   | j S r$   )r   r4   r*   r*   r+   r     s    zNoticeReference.organizationz	list[int]c                 C  s   | j S r$   )r   r4   r*   r*   r+   r     s    zNoticeReference.notice_numbersN)
rH   rI   rJ   rC   r^   ro   rr   rw   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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     s     z,ExtendedKeyUsage.__init__.<locals>.<genexpr>z9Every item in the usages list must be an ObjectIdentifier)rR   r   rZ   _usages)r5   r   r*   r*   r+   rC     s    zExtendedKeyUsage.__init__r   r-   r1   c                 C  s   d| j  dS )Nz<ExtendedKeyUsage(r]   )r   r4   r*   r*   r+   r^     s    zExtendedKeyUsage.__repr__ri   rj   rk   c                 C  s   t |tstS | j|jkS r$   )r%   r   rm   r   rn   r*   r*   r+   ro     s    
zExtendedKeyUsage.__eq__r0   c                 C  s   t t| jS r$   )rq   r   r   r4   r*   r*   r+   rr     s    zExtendedKeyUsage.__hash__r    c                 C  s
   t | S r$   ru   r4   r*   r*   r+   r&     s    zExtendedKeyUsage.public_bytesN)rH   rI   rJ   r   ZEXTENDED_KEY_USAGEr@   rC   r;   r_   r`   ra   r^   ro   rr   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 )OCSPNoCheckri   rj   rk   c                 C  s   t |tstS dS NT)r%   r   rm   rn   r*   r*   r+   ro     s    
zOCSPNoCheck.__eq__r0   r1   c                 C  s   t tS r$   )rq   r   r4   r*   r*   r+   rr     s    zOCSPNoCheck.__hash__r-   c                 C  s   dS )Nz<OCSPNoCheck()>r*   r4   r*   r*   r+   r^     s    zOCSPNoCheck.__repr__r    c                 C  s
   t | S r$   ru   r4   r*   r*   r+   r&   	  s    zOCSPNoCheck.public_bytesN)
rH   rI   rJ   r   ZOCSP_NO_CHECKr@   ro   rr   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 )PrecertPoisonri   rj   rk   c                 C  s   t |tstS dS r   )r%   r   rm   rn   r*   r*   r+   ro     s    
zPrecertPoison.__eq__r0   r1   c                 C  s   t tS r$   )rq   r   r4   r*   r*   r+   rr     s    zPrecertPoison.__hash__r-   c                 C  s   dS )Nz<PrecertPoison()>r*   r4   r*   r*   r+   r^     s    zPrecertPoison.__repr__r    c                 C  s
   t | S r$   ru   r4   r*   r*   r+   r&     s    zPrecertPoison.public_bytesN)
rH   rI   rJ   r   ZPRECERT_POISONr@   ro   rr   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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   &  s     z&TLSFeature.__init__.<locals>.<genexpr>r   z@features must be a list of elements from the TLSFeatureType enum)rR   r   r2   rZ   	_features)r5   r  r*   r*   r+   rC   #  s    
zTLSFeature.__init__r  r-   r1   c                 C  s   d| j  dS )Nz<TLSFeature(features=r]   )r  r4   r*   r*   r+   r^   2  s    zTLSFeature.__repr__ri   rj   rk   c                 C  s   t |tstS | j|jkS r$   )r%   r  rm   r  rn   r*   r*   r+   ro   5  s    
zTLSFeature.__eq__r0   c                 C  s   t t| jS r$   )rq   r   r  r4   r*   r*   r+   rr   ;  s    zTLSFeature.__hash__r    c                 C  s
   t | S r$   ru   r4   r*   r*   r+   r&   >  s    zTLSFeature.public_bytesN)rH   rI   rJ   r   ZTLS_FEATUREr@   rC   r;   r_   r`   ra   r^   ro   rr   r&   r*   r*   r*   r+   r     s   r  c                   @  s   e Zd ZdZdZdS )r  r      N)rH   rI   rJ   Zstatus_requestZstatus_request_v2r*   r*   r*   r+   r  B  s   r  c                 C  s   i | ]}|j |qS r*   r[   r   r*   r*   r+   
<dictcomp>M  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 )InhibitAnyPolicyr0   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%   r0   rZ   r   _skip_certs)r5   r	  r*   r*   r+   rC   S  s
    
zInhibitAnyPolicy.__init__r-   r1   c                 C  s   d| j  dS )Nz<InhibitAnyPolicy(skip_certs=r]   )r	  r4   r*   r*   r+   r^   \  s    zInhibitAnyPolicy.__repr__ri   rj   rk   c                 C  s   t |tstS | j|jkS r$   )r%   r  rm   r	  rn   r*   r*   r+   ro   _  s    
zInhibitAnyPolicy.__eq__c                 C  s
   t | jS r$   )rq   r	  r4   r*   r*   r+   rr   e  s    zInhibitAnyPolicy.__hash__c                 C  s   | j S r$   )r
  r4   r*   r*   r+   r	  h  s    zInhibitAnyPolicy.skip_certsr    c                 C  s
   t | S r$   ru   r4   r*   r*   r+   r&   l  s    zInhibitAnyPolicy.public_bytesN)rH   rI   rJ   r   ZINHIBIT_ANY_POLICYr@   rC   r^   ro   rr   rw   r	  r&   r*   r*   r*   r+   r  P  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 )'KeyUsagerj   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)
r5   r  r  r  r  r  r  r  r  r  r*   r*   r+   rC   s  s    zKeyUsage.__init__r1   c                 C  s   | j S r$   )r  r4   r*   r*   r+   r    s    zKeyUsage.digital_signaturec                 C  s   | j S r$   )r  r4   r*   r*   r+   r    s    zKeyUsage.content_commitmentc                 C  s   | j S r$   )r  r4   r*   r*   r+   r    s    zKeyUsage.key_enciphermentc                 C  s   | j S r$   )r  r4   r*   r*   r+   r    s    zKeyUsage.data_enciphermentc                 C  s   | j S r$   )r  r4   r*   r*   r+   r    s    zKeyUsage.key_agreementc                 C  s   | j S r$   )r  r4   r*   r*   r+   r    s    zKeyUsage.key_cert_signc                 C  s   | j S r$   )r  r4   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  r4   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  r4   r*   r*   r+   r    s
    zKeyUsage.decipher_onlyr-   c                 C  sx   z| j }| j}W n tk
r,   d}d}Y nX 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  )r5   r  r  r*   r*   r+   r^     s    

HzKeyUsage.__repr__ri   rk   c                 C  sz   t |tstS | j|jkox| j|jkox| j|jkox| j|jkox| j|jkox| j|jkox| j	|j	kox| j
|j
kox| j|jkS r$   )r%   r  rm   r  r  r  r  r  r  r  r  r  rn   r*   r*   r+   ro     s&    








zKeyUsage.__eq__r0   c              
   C  s,   t | j| j| j| j| j| j| j| j| j	f	S r$   )
rq   r  r  r  r  r  r  r  r  r  r4   r*   r*   r+   rr     s    zKeyUsage.__hash__r    c                 C  s
   t | S r$   ru   r4   r*   r*   r+   r&     s    zKeyUsage.public_bytesN)rH   rI   rJ   r   Z	KEY_USAGEr@   rC   rw   r  r  r  r  r  r  r  r  r  r^   ro   rr   r&   r*   r*   r*   r+   r  p  s0    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 )PrivateKeyUsagePeriodzdatetime.datetime | Noner=   )
not_before	not_afterr#   c                 C  s   t |tjs|d k	rtdt |tjs8|d k	r8td|d krP|d krPtd|d k	rp|d k	rp||krptd|| _|| _d S )Nz.not_before must be a datetime.datetime or Nonez-not_after must be a datetime.datetime or Nonez9At least one of not_before and not_after must not be Nonez#not_before must be before not_after)r%   datetimerZ   r   _not_before
_not_after)r5   r  r   r*   r*   r+   rC     s.    

zPrivateKeyUsagePeriod.__init__r1   c                 C  s   | j S r$   )r"  r4   r*   r*   r+   r    s    z PrivateKeyUsagePeriod.not_beforec                 C  s   | j S r$   )r#  r4   r*   r*   r+   r     s    zPrivateKeyUsagePeriod.not_afterr-   c                 C  s   d| j  d| j dS )Nz"<PrivateKeyUsagePeriod(not_before=z, not_after=r]   )r  r   r4   r*   r*   r+   r^      s    zPrivateKeyUsagePeriod.__repr__ri   rj   rk   c                 C  s&   t |tstS | j|jko$| j|jkS r$   )r%   r  rm   r  r   rn   r*   r*   r+   ro   &  s
    

zPrivateKeyUsagePeriod.__eq__r0   c                 C  s   t | j| jfS r$   )rq   r  r   r4   r*   r*   r+   rr   /  s    zPrivateKeyUsagePeriod.__hash__r    c                 C  s
   t | S r$   ru   r4   r*   r*   r+   r&   2  s    z"PrivateKeyUsagePeriod.public_bytesN)rH   rI   rJ   r   ZPRIVATE_KEY_USAGE_PERIODr@   rC   rw   r  r   r^   ro   rr   r&   r*   r*   r*   r+   r    s    	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 )#NameConstraintsrz   r=   )permitted_subtreesexcluded_subtreesr#   c                 C  s   |d k	r@t |}|stdtdd |D s6td| | |d k	rt |}|s\tdtdd |D svtd| | |d kr|d krtd|| _|| _d S )	Nz3permitted_subtrees must be a non-empty list or Nonec                 s  s   | ]}t |tV  qd S r$   r   r   r*   r*   r+   r   D  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   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)rR   r   r   rZ   _validate_tree_permitted_subtrees_excluded_subtrees)r5   r%  r&  r*   r*   r+   rC   9  s8    

zNameConstraints.__init__ri   rj   rk   c                 C  s&   t |tstS | j|jko$| j|jkS r$   )r%   r$  rm   r&  r%  rn   r*   r*   r+   ro   c  s
    

zNameConstraints.__eq__Iterable[GeneralName])treer#   c                 C  s   |  | | | d S r$   )_validate_ip_name_validate_dns_namer5   r+  r*   r*   r+   r'  l  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[   	ipaddressZIPv4NetworkZIPv6Networkr   namer*   r*   r+   r   q  s   
 
z4NameConstraints._validate_ip_name.<locals>.<genexpr>zGIPAddress name constraints must be an IPv4Network or IPv6Network object)anyrZ   r.  r*   r*   r+   r,  p  s    z!NameConstraints._validate_ip_namec                 C  s   t dd |D rtdd S )Nc                 s  s"   | ]}t |tod |jkV  qdS )*N)r%   r   r[   r0  r*   r*   r+   r   ~  s    z5NameConstraints._validate_dns_name.<locals>.<genexpr>zDDNSName name constraints must not contain the '*' wildcard character)r2  r   r.  r*   r*   r+   r-  }  s    z"NameConstraints._validate_dns_namer-   r1   c                 C  s   d| j  d| j dS )Nz$<NameConstraints(permitted_subtrees=z, excluded_subtrees=r]   )r%  r&  r4   r*   r*   r+   r^     s    zNameConstraints.__repr__r0   c                 C  s@   | j d k	rt| j }nd }| jd k	r0t| j}nd }t||fS r$   )r%  r   r&  rq   )r5   Zpsesr*   r*   r+   rr     s    

zNameConstraints.__hash__r   c                 C  s   | j S r$   )r(  r4   r*   r*   r+   r%    s    z"NameConstraints.permitted_subtreesc                 C  s   | j S r$   )r)  r4   r*   r*   r+   r&    s    z!NameConstraints.excluded_subtreesr    c                 C  s
   t | S r$   ru   r4   r*   r*   r+   r&     s    zNameConstraints.public_bytesN)rH   rI   rJ   r   ZNAME_CONSTRAINTSr@   rC   ro   r'  r,  r-  r^   rr   rw   r%  r&  r&   r*   r*   r*   r+   r$  6  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   rj   r   r=   )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   rj   _oid	_critical_value)r5   r@   r6  r[   r*   r*   r+   rC     s    

zExtension.__init__r1   c                 C  s   | j S r$   r7  r4   r*   r*   r+   r@     s    zExtension.oidc                 C  s   | j S r$   )r8  r4   r*   r*   r+   r6    s    zExtension.criticalc                 C  s   | j S r$   r9  r4   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]   )r@   r6  r[   r4   r*   r*   r+   r^     s    zExtension.__repr__ri   rk   c                 C  s2   t |tstS | j|jko0| j|jko0| j|jkS r$   )r%   r5  rm   r@   r6  r[   rn   r*   r*   r+   ro     s    


zExtension.__eq__r0   c                 C  s   t | j| j| jfS r$   )rq   r@   r6  r[   r4   r*   r*   r+   rr     s    zExtension.__hash__N)rH   rI   rJ   rC   rw   r@   r6  r[   r^   ro   rr   r*   r*   r*   r+   r5    s   
r5  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     s     z(GeneralNames.__init__.<locals>.<genexpr>z^Every item in the general_names list must be an object conforming to the GeneralName interface)rR   r   rZ   _general_namesr5   r?  r*   r*   r+   rC     s    zGeneralNames.__init__r@  Btype[DNSName] | type[UniformResourceIdentifier] | type[RFC822Name]	list[str]typer#   c                 C  s   d S r$   r*   r5   rE  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*   rF  r*   r*   r+   rG    s    type[RegisteredID]list[ObjectIdentifier]c                 C  s   d S r$   r*   rF  r*   r*   r+   rG    s    type[IPAddress]list[_IPAddressTypes]c                 C  s   d S r$   r*   rF  r*   r*   r+   rG    s    type[OtherName]list[OtherName]c                 C  s   d S r$   r*   rF  r*   r*   r+   rG    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rE  r*   r+   r     s     
 z3GeneralNames.get_values_for_type.<locals>.<genexpr>c                 S  s   g | ]
}|j qS r*   r  rR  r*   r*   r+   
<listcomp>  s     z4GeneralNames.get_values_for_type.<locals>.<listcomp>)r   rR   )r5   rE  Zobjsr*   rT  r+   rG    s    r-   r1   c                 C  s   d| j  dS )Nz<GeneralNames(r]   r@  r4   r*   r*   r+   r^     s    zGeneralNames.__repr__ri   rj   rk   c                 C  s   t |tstS | j|jkS r$   )r%   r=  rm   r@  rn   r*   r*   r+   ro     s    
zGeneralNames.__eq__r0   c                 C  s   t t| jS r$   )rq   r   r@  r4   r*   r*   r+   rr   %  s    zGeneralNames.__hash__N)rH   rI   rJ   rC   r;   r_   r`   ra   typingoverloadrG  r^   ro   rr   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@  rA  r*   r*   r+   rC   ,  s    zSubjectAlternativeName.__init__r@  rB  rC  rD  c                 C  s   d S r$   r*   rF  r*   r*   r+   rG  1  s    z*SubjectAlternativeName.get_values_for_typerH  rI  c                 C  s   d S r$   r*   rF  r*   r*   r+   rG  9  s    rJ  rK  c                 C  s   d S r$   r*   rF  r*   r*   r+   rG  ?  s    rL  rM  c                 C  s   d S r$   r*   rF  r*   r*   r+   rG  E  s    rN  rO  c                 C  s   d S r$   r*   rF  r*   r*   r+   rG  J  s    rP  rQ  c                 C  s   | j |S r$   r@  rG  rF  r*   r*   r+   rG  O  s    r-   r1   c                 C  s   d| j  dS )Nz<SubjectAlternativeName(r]   rV  r4   r*   r*   r+   r^   a  s    zSubjectAlternativeName.__repr__ri   rj   rk   c                 C  s   t |tstS | j|jkS r$   )r%   rY  rm   r@  rn   r*   r*   r+   ro   d  s    
zSubjectAlternativeName.__eq__r0   c                 C  s
   t | jS r$   rq   r@  r4   r*   r*   r+   rr   j  s    zSubjectAlternativeName.__hash__r    c                 C  s
   t | S r$   ru   r4   r*   r*   r+   r&   m  s    z#SubjectAlternativeName.public_bytesN)rH   rI   rJ   r   ZSUBJECT_ALTERNATIVE_NAMEr@   rC   r;   r_   r`   ra   rW  rX  rG  r^   ro   rr   r&   r*   r*   r*   r+   rY  )  s$   rY  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$   rZ  rA  r*   r*   r+   rC   t  s    zIssuerAlternativeName.__init__r@  rB  rC  rD  c                 C  s   d S r$   r*   rF  r*   r*   r+   rG  y  s    z)IssuerAlternativeName.get_values_for_typerH  rI  c                 C  s   d S r$   r*   rF  r*   r*   r+   rG    s    rJ  rK  c                 C  s   d S r$   r*   rF  r*   r*   r+   rG    s    rL  rM  c                 C  s   d S r$   r*   rF  r*   r*   r+   rG    s    rN  rO  c                 C  s   d S r$   r*   rF  r*   r*   r+   rG    s    rP  rQ  c                 C  s   | j |S r$   r[  rF  r*   r*   r+   rG    s    r-   r1   c                 C  s   d| j  dS )Nz<IssuerAlternativeName(r]   rV  r4   r*   r*   r+   r^     s    zIssuerAlternativeName.__repr__ri   rj   rk   c                 C  s   t |tstS | j|jkS r$   )r%   r]  rm   r@  rn   r*   r*   r+   ro     s    
zIssuerAlternativeName.__eq__r0   c                 C  s
   t | jS r$   r\  r4   r*   r*   r+   rr     s    zIssuerAlternativeName.__hash__r    c                 C  s
   t | S r$   ru   r4   r*   r*   r+   r&     s    z"IssuerAlternativeName.public_bytesN)rH   rI   rJ   r   ZISSUER_ALTERNATIVE_NAMEr@   rC   r;   r_   r`   ra   rW  rX  rG  r^   ro   rr   r&   r*   r*   r*   r+   r]  q  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$   rZ  rA  r*   r*   r+   rC     s    zCertificateIssuer.__init__r@  rB  rC  rD  c                 C  s   d S r$   r*   rF  r*   r*   r+   rG    s    z%CertificateIssuer.get_values_for_typerH  rI  c                 C  s   d S r$   r*   rF  r*   r*   r+   rG    s    rJ  rK  c                 C  s   d S r$   r*   rF  r*   r*   r+   rG    s    rL  rM  c                 C  s   d S r$   r*   rF  r*   r*   r+   rG    s    rN  rO  c                 C  s   d S r$   r*   rF  r*   r*   r+   rG    s    rP  rQ  c                 C  s   | j |S r$   r[  rF  r*   r*   r+   rG    s    r-   r1   c                 C  s   d| j  dS )Nz<CertificateIssuer(r]   rV  r4   r*   r*   r+   r^     s    zCertificateIssuer.__repr__ri   rj   rk   c                 C  s   t |tstS | j|jkS r$   )r%   r^  rm   r@  rn   r*   r*   r+   ro     s    
zCertificateIssuer.__eq__r0   c                 C  s
   t | jS r$   r\  r4   r*   r*   r+   rr     s    zCertificateIssuer.__hash__r    c                 C  s
   t | S r$   ru   r4   r*   r*   r+   r&     s    zCertificateIssuer.public_bytesN)rH   rI   rJ   r   ZCERTIFICATE_ISSUERr@   rC   r;   r_   r`   ra   rW  rX  rG  r^   ro   rr   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   rZ   _reason)r5   r`  r*   r*   r+   rC     s    
zCRLReason.__init__r-   r1   c                 C  s   d| j  dS )Nz<CRLReason(reason=r]   ra  r4   r*   r*   r+   r^   
  s    zCRLReason.__repr__ri   rj   rk   c                 C  s   t |tstS | j|jkS r$   )r%   r_  rm   r`  rn   r*   r*   r+   ro     s    
zCRLReason.__eq__r0   c                 C  s
   t | jS r$   )rq   r`  r4   r*   r*   r+   rr     s    zCRLReason.__hash__c                 C  s   | j S r$   rb  r4   r*   r*   r+   r`    s    zCRLReason.reasonr    c                 C  s
   t | S r$   ru   r4   r*   r*   r+   r&     s    zCRLReason.public_bytesN)rH   rI   rJ   r   Z
CRL_REASONr@   rC   r^   ro   rr   rw   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%   r!  rZ   _invalidity_date)r5   rd  r*   r*   r+   rC   !  s    zInvalidityDate.__init__r-   r1   c                 C  s   d| j  dS )Nz <InvalidityDate(invalidity_date=r]   re  r4   r*   r*   r+   r^   '  s    zInvalidityDate.__repr__ri   rj   rk   c                 C  s   t |tstS | j|jkS r$   )r%   rc  rm   rd  rn   r*   r*   r+   ro   *  s    
zInvalidityDate.__eq__r0   c                 C  s
   t | jS r$   )rq   rd  r4   r*   r*   r+   rr   0  s    zInvalidityDate.__hash__c                 C  s   | j S r$   rf  r4   r*   r*   r+   rd  3  s    zInvalidityDate.invalidity_datec                 C  s4   | j jd kr| j jtjjdS | j jtjjdS d S )N)tzinfo)Ztz)re  rg  replacer!  timezoneZutcZ
astimezoner4   r*   r*   r+   invalidity_date_utc7  s    z"InvalidityDate.invalidity_date_utcr    c                 C  s
   t | S r$   ru   r4   r*   r*   r+   r&   >  s    zInvalidityDate.public_bytesN)rH   rI   rJ   r   ZINVALIDITY_DATEr@   rC   r^   ro   rr   rw   rd  rj  r&   r*   r*   r*   r+   rc    s   rc  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$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   J  s   zEPrecertificateSignedCertificateTimestamps.__init__.<locals>.<genexpr>YEvery item in the signed_certificate_timestamps list must be a SignedCertificateTimestamprR   r   rZ   _signed_certificate_timestampsr5   rn  r*   r*   r+   rC   E  s    z2PrecertificateSignedCertificateTimestamps.__init__rs  r-   r1   c                 C  s   dt |  dS )Nz+<PrecertificateSignedCertificateTimestamps(r]   rR   r4   r*   r*   r+   r^   X  s    z2PrecertificateSignedCertificateTimestamps.__repr__r0   c                 C  s   t t| jS r$   rq   r   rs  r4   r*   r*   r+   rr   [  s    z2PrecertificateSignedCertificateTimestamps.__hash__ri   rj   rk   c                 C  s   t |tstS | j|jkS r$   )r%   rk  rm   rs  rn   r*   r*   r+   ro   ^  s    
z0PrecertificateSignedCertificateTimestamps.__eq__r    c                 C  s
   t | S r$   ru   r4   r*   r*   r+   r&   g  s    z6PrecertificateSignedCertificateTimestamps.public_bytesN)rH   rI   rJ   r   Z%PRECERT_SIGNED_CERTIFICATE_TIMESTAMPSr@   rC   r;   r_   r`   ra   r^   rr   ro   r&   r*   r*   r*   r+   rk  B  s   
	rk  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 )SignedCertificateTimestampsrl  r=   rm  c                 C  s,   t |}tdd |D s"td|| _d S )Nc                 s  s   | ]}t |tV  qd S r$   ro  rp  r*   r*   r+   r   s  s   z7SignedCertificateTimestamps.__init__.<locals>.<genexpr>rq  rr  rt  r*   r*   r+   rC   n  s    z$SignedCertificateTimestamps.__init__rs  r-   r1   c                 C  s   dt |  dS )Nz<SignedCertificateTimestamps(r]   ru  r4   r*   r*   r+   r^     s    z$SignedCertificateTimestamps.__repr__r0   c                 C  s   t t| jS r$   rv  r4   r*   r*   r+   rr     s    z$SignedCertificateTimestamps.__hash__ri   rj   rk   c                 C  s   t |tstS | j|jkS r$   )r%   rw  rm   rs  rn   r*   r*   r+   ro     s    
z"SignedCertificateTimestamps.__eq__r    c                 C  s
   t | S r$   ru   r4   r*   r*   r+   r&     s    z(SignedCertificateTimestamps.public_bytesN)rH   rI   rJ   r   ZSIGNED_CERTIFICATE_TIMESTAMPSr@   rC   r;   r_   r`   ra   r^   rr   ro   r&   r*   r*   r*   r+   rw  k  s   
	rw  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    rZ   _nonce)r5   ry  r*   r*   r+   rC     s    
zOCSPNonce.__init__ri   rj   rk   c                 C  s   t |tstS | j|jkS r$   )r%   rx  rm   ry  rn   r*   r*   r+   ro     s    
zOCSPNonce.__eq__r0   r1   c                 C  s
   t | jS r$   )rq   ry  r4   r*   r*   r+   rr     s    zOCSPNonce.__hash__r-   c                 C  s   d| j dS )Nz<OCSPNonce(nonce=r]   )ry  r4   r*   r*   r+   r^     s    zOCSPNonce.__repr__c                 C  s   | j S r$   )rz  r4   r*   r*   r+   ry    s    zOCSPNonce.noncec                 C  s
   t | S r$   ru   r4   r*   r*   r+   r&     s    zOCSPNonce.public_bytesN)rH   rI   rJ   r   ZNONCEr@   rC   ro   rr   r^   rw   ry  r&   r*   r*   r*   r+   rx    s   rx  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     s     z3OCSPAcceptableResponses.__init__.<locals>.<genexpr>z'All responses must be ObjectIdentifiers)rR   r2  rZ   
_responses)r5   r|  r*   r*   r+   rC     s    z OCSPAcceptableResponses.__init__ri   rj   rk   c                 C  s   t |tstS | j|jkS r$   )r%   r{  rm   r~  rn   r*   r*   r+   ro     s    
zOCSPAcceptableResponses.__eq__r0   r1   c                 C  s   t t| jS r$   )rq   r   r~  r4   r*   r*   r+   rr     s    z OCSPAcceptableResponses.__hash__r-   c                 C  s   d| j  dS )Nz#<OCSPAcceptableResponses(responses=r]   )r~  r4   r*   r*   r+   r^     s    z OCSPAcceptableResponses.__repr__zIterator[ObjectIdentifier]c                 C  s
   t | jS r$   )r7   r~  r4   r*   r*   r+   r`     s    z OCSPAcceptableResponses.__iter__r    c                 C  s
   t | S r$   ru   r4   r*   r*   r+   r&     s    z$OCSPAcceptableResponses.public_bytesN)rH   rI   rJ   r   ZACCEPTABLE_RESPONSESr@   rC   ro   rr   r^   r`   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 )'IssuingDistributionPointrz   r   rj   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 k	rt |}|r8t|tr0tdd |D s8td|rXtj|ksPtj|krXtdt|t	rt|t	rt|t	rt|t	std|||g}t
dd |D dkrtd	t|||||||gstd
|| _|| _|| _|| _|| _|| _|| _d S )Nc                 s  s   | ]}t |tV  qd S r$   r   r   r*   r*   r+   r     s     z4IssuingDistributionPoint.__init__.<locals>.<genexpr>z:only_some_reasons must be None or frozenset of ReasonFlagszTunspecified and remove_from_crl are not valid reasons in an IssuingDistributionPointzuonly_contains_user_certs, only_contains_ca_certs, indirect_crl and only_contains_attribute_certs must all be boolean.c                 S  s   g | ]}|r|qS r*   r*   r   r*   r*   r+   rU    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, only_contains_attribute_certszCannot create empty extension: if only_contains_user_certs, only_contains_ca_certs, indirect_crl, and only_contains_attribute_certs are all False, then either full_name, relative_name, or only_some_reasons must have a value.)rR   r%   r   r   rZ   r   r   r   r   rj   r2   r2  _only_contains_user_certs_only_contains_ca_certs_indirect_crl_only_contains_attribute_certs_only_some_reasonsr   r   )	r5   r   r   r  r  r  r  r  Zcrl_constraintsr*   r*   r+   rC     sr    

z!IssuingDistributionPoint.__init__r-   r1   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  r4   r*   r*   r+   r^   &  s    <z!IssuingDistributionPoint.__repr__ri   rk   c                 C  sb   t |tstS | j|jko`| j|jko`| j|jko`| j|jko`| j|jko`| j|jko`| j	|j	kS r$   )
r%   r  rm   r   r   r  r  r  r  r  rn   r*   r*   r+   ro   2  s"    





zIssuingDistributionPoint.__eq__r0   c                 C  s$   t | j| j| j| j| j| j| jfS r$   )rq   r   r   r  r  r  r  r  r4   r*   r*   r+   rr   A  s    z!IssuingDistributionPoint.__hash__r   c                 C  s   | j S r$   r   r4   r*   r*   r+   r   N  s    z"IssuingDistributionPoint.full_namec                 C  s   | j S r$   r   r4   r*   r*   r+   r   R  s    z&IssuingDistributionPoint.relative_namec                 C  s   | j S r$   )r  r4   r*   r*   r+   r  V  s    z1IssuingDistributionPoint.only_contains_user_certsc                 C  s   | j S r$   )r  r4   r*   r*   r+   r  Z  s    z/IssuingDistributionPoint.only_contains_ca_certsc                 C  s   | j S r$   )r  r4   r*   r*   r+   r  ^  s    z*IssuingDistributionPoint.only_some_reasonsc                 C  s   | j S r$   )r  r4   r*   r*   r+   r  d  s    z%IssuingDistributionPoint.indirect_crlc                 C  s   | j S r$   )r  r4   r*   r*   r+   r  h  s    z6IssuingDistributionPoint.only_contains_attribute_certsr    c                 C  s
   t | S r$   ru   r4   r*   r*   r+   r&   l  s    z%IssuingDistributionPoint.public_bytesN)rH   rI   rJ   r   ZISSUING_DISTRIBUTION_POINTr@   rC   r^   ro   rr   rw   r   r   r  r  r  r  r  r&   r*   r*   r*   r+   r    s(   U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 k	r*t |tr<|d k	rDt |tsDtd|| _|| _d S )Noid must be an ObjectIdentifierz8major_version and minor_version must be integers or None)r%   r   rZ   _template_idr0   _major_version_minor_version)r5   r  r  r  r*   r*   r+   rC   s  s     
zMSCertificateTemplate.__init__r1   c                 C  s   | j S r$   )r  r4   r*   r*   r+   r    s    z!MSCertificateTemplate.template_idc                 C  s   | j S r$   )r  r4   r*   r*   r+   r    s    z#MSCertificateTemplate.major_versionc                 C  s   | j S r$   )r  r4   r*   r*   r+   r    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  r4   r*   r*   r+   r^     s    zMSCertificateTemplate.__repr__ri   rj   rk   c                 C  s2   t |tstS | j|jko0| j|jko0| j|jkS r$   )r%   r  rm   r  r  r  rn   r*   r*   r+   ro     s    


zMSCertificateTemplate.__eq__r0   c                 C  s   t | j| j| jfS r$   )rq   r  r  r  r4   r*   r*   r+   rr     s    zMSCertificateTemplate.__hash__r    c                 C  s
   t | S r$   ru   r4   r*   r*   r+   r&     s    z"MSCertificateTemplate.public_bytesN)rH   rI   rJ   r   ZMS_CERTIFICATE_TEMPLATEr@   rC   rw   r  r  r  r^   ro   rr   r&   r*   r*   r*   r+   r  p  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 )NamingAuthorityzObjectIdentifier | Noner   r=   )idurltextr#   c                 C  sd   |d k	rt |tstd|d k	r4t |ts4td|d k	rNt |tsNtd|| _|| _|| _d S )Nzid must be an ObjectIdentifierzurl must be a strztext must be a str)r%   r   rZ   r-   _id_url_text)r5   r  r  r  r*   r*   r+   rC     s    zNamingAuthority.__init__r1   c                 C  s   | j S r$   )r  r4   r*   r*   r+   r    s    zNamingAuthority.idc                 C  s   | j S r$   )r  r4   r*   r*   r+   r    s    zNamingAuthority.urlc                 C  s   | j S r$   )r  r4   r*   r*   r+   r    s    zNamingAuthority.textr-   c                 C  s   d| j  d| j d| j dS )Nz<NamingAuthority(id=z, url=z, text=r]   )r  r  r  r4   r*   r*   r+   r^     s    zNamingAuthority.__repr__ri   rj   rk   c                 C  s2   t |tstS | j|jko0| j|jko0| j|jkS r$   )r%   r  rm   r  r  r  rn   r*   r*   r+   ro     s    


zNamingAuthority.__eq__r0   c                 C  s   t | j| j| jfS r$   )rq   r  r  r  r4   r*   r*   r+   rr     s    zNamingAuthority.__hash__N)rH   rI   rJ   rC   rw   r  r  r  r^   ro   rr   r*   r*   r*   r+   r    s   
r  c                   @  s   e Zd Z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	dd
ddZ
dddddZdd
d d!Zd"S )#ProfessionInfoNamingAuthority | NonezIterable[str]z!Iterable[ObjectIdentifier] | Noner   ry   r=   )naming_authorityprofession_itemsprofession_oidsregistration_numberadd_profession_infor#   c                 C  s   |d k	rt |tstdt|}tdd |D s<td|d k	rft|}tdd |D sftd|d k	rt |tstd|d k	rt |tstd|| _|| _|| _	|| _
|| _d S )	N*naming_authority must be a NamingAuthorityc                 s  s   | ]}t |tV  qd S r$   )r%   r-   )r   itemr*   r*   r+   r     s     z*ProfessionInfo.__init__.<locals>.<genexpr>z5Every item in the profession_items list must be a strc                 s  s   | ]}t |tV  qd S r$   r   )r   r@   r*   r*   r+   r     s    zBEvery item in the profession_oids list must be an ObjectIdentifierz!registration_number must be a strz!add_profession_info must be bytes)r%   r  rZ   rR   r   r-   r    _naming_authority_profession_items_profession_oids_registration_number_add_profession_info)r5   r  r  r  r  r  r*   r*   r+   rC     sB    
 
 
 zProfessionInfo.__init__r1   c                 C  s   | j S r$   r  r4   r*   r*   r+   r  	  s    zProfessionInfo.naming_authorityrC  c                 C  s   | j S r$   )r  r4   r*   r*   r+   r  	  s    zProfessionInfo.profession_itemszlist[ObjectIdentifier] | Nonec                 C  s   | j S r$   )r  r4   r*   r*   r+   r  	  s    zProfessionInfo.profession_oidsc                 C  s   | j S r$   )r  r4   r*   r*   r+   r  	  s    z"ProfessionInfo.registration_numberc                 C  s   | j S r$   )r  r4   r*   r*   r+   r  #	  s    z"ProfessionInfo.add_profession_infor-   c                 C  s.   d| j  d| j d| j d| j d| jdS )Nz!<ProfessionInfo(naming_authority=z, profession_items=z, profession_oids=z, registration_number=z, add_profession_info=r]   )r  r  r  r  r  r4   r*   r*   r+   r^   '	  s    ,zProfessionInfo.__repr__ri   rj   rk   c                 C  sJ   t |tstS | j|jkoH| j|jkoH| j|jkoH| j|jkoH| j|jkS r$   )r%   r  rm   r  r  r  r  r  rn   r*   r*   r+   ro   0	  s    




zProfessionInfo.__eq__r0   c                 C  s8   | j d k	rt| j }nd }t| jt| j|| j| jfS r$   )r  r   rq   r  r  r  r  )r5   r  r*   r*   r+   rr   <	  s    
zProfessionInfo.__hash__N)rH   rI   rJ   rC   rw   r  r  r  r  r  r^   ro   rr   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 )	AdmissionGeneralName | Noner  zIterable[ProfessionInfo]r=   )admission_authorityr  profession_infosr#   c                 C  sl   |d k	rt |tstd|d k	r4t |ts4tdt|}tdd |D sVtd|| _|| _|| _d S )Nz)admission_authority must be a GeneralNamer  c                 s  s   | ]}t |tV  qd S r$   )r%   r  )r   infor*   r*   r+   r   ^	  s    z%Admission.__init__.<locals>.<genexpr>z@Every item in the profession_infos list must be a ProfessionInfo)	r%   r   rZ   r  rR   r   _admission_authorityr  _profession_infos)r5   r  r  r  r*   r*   r+   rC   M	  s(    
 
 zAdmission.__init__r1   c                 C  s   | j S r$   )r  r4   r*   r*   r+   r  j	  s    zAdmission.admission_authorityc                 C  s   | j S r$   r  r4   r*   r*   r+   r  n	  s    zAdmission.naming_authorityzlist[ProfessionInfo]c                 C  s   | j S r$   )r  r4   r*   r*   r+   r  r	  s    zAdmission.profession_infosr-   c                 C  s   d| j  d| j d| j dS )Nz<Admission(admission_authority=z, naming_authority=z, profession_infos=r]   )r  r  r  r4   r*   r*   r+   r^   v	  s    zAdmission.__repr__ri   rj   rk   c                 C  s2   t |tstS | j|jko0| j|jko0| j|jkS r$   )r%   r  rm   r  r  r  rn   r*   r*   r+   ro   }	  s    


zAdmission.__eq__r0   c                 C  s   t | j| jt| jfS r$   )rq   r  r  r   r  r4   r*   r*   r+   rr   	  s    zAdmission.__hash__N)rH   rI   rJ   rC   rw   r  r  r  r^   ro   rr   r*   r*   r*   r+   r  L	  s   
r  c                   @  s~   e Zd ZejZddddddZed\ZZ	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 )
Admissionsr  zIterable[Admission]r=   )	authority
admissionsr#   c                 C  sL   |d k	rt |tstdt|}tdd |D s<td|| _|| _d S )Nzauthority must be a GeneralNamec                 s  s   | ]}t |tV  qd S r$   )r%   r  )r   Z	admissionr*   r*   r+   r   	  s    z&Admissions.__init__.<locals>.<genexpr>zBEvery item in the contents_of_admissions list must be an Admission)r%   r   rZ   rR   r   
_authority_admissions)r5   r  r  r*   r*   r+   rC   	  s    zAdmissions.__init__r  r1   c                 C  s   | j S r$   )r  r4   r*   r*   r+   r  	  s    zAdmissions.authorityr-   c                 C  s   d| j  d| j dS )Nz<Admissions(authority=z, admissions=r]   )r  r  r4   r*   r*   r+   r^   	  s    zAdmissions.__repr__ri   rj   rk   c                 C  s&   t |tstS | j|jko$| j|jkS r$   )r%   r  rm   r  r  rn   r*   r*   r+   ro   	  s
    

zAdmissions.__eq__r0   c                 C  s   t | jt| jfS r$   )rq   r  r   r  r4   r*   r*   r+   rr   	  s    zAdmissions.__hash__r    c                 C  s
   t | S r$   ru   r4   r*   r*   r+   r&   	  s    zAdmissions.public_bytesN)rH   rI   rJ   r   Z
ADMISSIONSr@   rC   r;   r_   r`   ra   rw   r  r^   ro   rr   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 )rY   r   r    r=   )r@   r[   r#   c                 C  s"   t |tstd|| _|| _d S )Nr  )r%   r   rZ   r7  r9  )r5   r@   r[   r*   r*   r+   rC   	  s    
zUnrecognizedExtension.__init__r1   c                 C  s   | j S r$   r:  r4   r*   r*   r+   r@   	  s    zUnrecognizedExtension.oidc                 C  s   | j S r$   r;  r4   r*   r*   r+   r[   	  s    zUnrecognizedExtension.valuer-   c                 C  s   d| j  d| jdS )Nz<UnrecognizedExtension(oid=r<  r]   )r@   r[   r4   r*   r*   r+   r^   	  s    zUnrecognizedExtension.__repr__ri   rj   rk   c                 C  s&   t |tstS | j|jko$| j|jkS r$   )r%   rY   rm   r@   r[   rn   r*   r*   r+   ro   	  s    
zUnrecognizedExtension.__eq__r0   c                 C  s   t | j| jfS r$   )rq   r@   r[   r4   r*   r*   r+   rr   	  s    zUnrecognizedExtension.__hash__c                 C  s   | j S r$   r  r4   r*   r*   r+   r&   	  s    z"UnrecognizedExtension.public_bytesN)rH   rI   rJ   rC   rw   r@   r[   r^   ro   rr   r&   r*   r*   r*   r+   rY   	  s   rY   )tZ
__future__r   abcr!  r'   r/  rW  Zcollections.abcr   r   Zcryptographyr   Z"cryptography.hazmat.bindings._rustr   r   rv   Zcryptography.hazmat.primitivesr   r	   Z,cryptography.hazmat.primitives.asymmetric.ecr
   Z-cryptography.hazmat.primitives.asymmetric.rsar   Z/cryptography.hazmat.primitives.asymmetric.typesr   r   Z*cryptography.x509.certificate_transparencyr   Zcryptography.x509.general_namer   r   r   r   r   r   r   r   r   Zcryptography.x509.namer   r   Zcryptography.x509.oidr   r   r   r   ZTypeVarr   r,   r;   	Exceptionr<   rL   ABCMetar   rP   rb   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   Z_CRL_ENTRY_REASON_ENUM_TO_CODEr   r   r   r   r   r   r   r   r  r  Z_TLS_FEATURE_TYPE_TO_ENUMr  r  r  r$  ZGenericr5  r=  rY  r]  r^  r_  rc  rk  rw  rx  r{  r  r  r  r  r  r  rY   r*   r*   r*   r+   <module>   s   ,  %l$(.%%k                  A9+("  As0PHHH$)) #;:gE3