U
    #i/                    @  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)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	   ZEncodingZDERZPublicFormatZPKCS1r
   ZX962ZUncompressedPointZSubjectPublicKeyInfor   Zparse_spki_for_datahashlibsha1digest)r$   dataZ
serialized r-   d/var/www/html/me.goteku.com/backend/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selfr1   r-   r.   
len_methodL   s    z*_make_sequence_methods.<locals>.len_methodc                   s   t t|  S r&   )iterr6   r7   r1   r-   r.   iter_methodO   s    z+_make_sequence_methods.<locals>.iter_methodc                   s   t |  | S r&   )r6   )r8   idxr1   r-   r.   getitem_methodR   s    z._make_sequence_methods.<locals>.getitem_methodr-   )r2   r9   r;   r=   r-   r1   r.   _make_sequence_methodsK   s    r>   c                      s&   e Zd Zdddd fddZ  ZS )DuplicateExtensionr0   r   Nonemsgoidr%   c                   s   t  | || _d S r&   super__init__rC   r8   rB   rC   	__class__r-   r.   rF   Y   s    zDuplicateExtension.__init____name__
__module____qualname__rF   __classcell__r-   r-   rH   r.   r?   X   s   r?   c                      s&   e Zd Zdddd fddZ  ZS )ExtensionNotFoundr0   r   r@   rA   c                   s   t  | || _d S r&   rD   rG   rH   r-   r.   rF   _   s    zExtensionNotFound.__init__rJ   r-   r-   rH   r.   rO   ^   s   rO   c                   @  s$   e Zd ZU ded< ddddZdS )r   z!typing.ClassVar[ObjectIdentifier]rC   r"   r4   c                 C  s   t d| dS )z7
        Serializes the extension type to DER.
        z3public_bytes is not implemented for extension type N)NotImplementedErrorr7   r-   r-   r.   r(   g   s    zExtensionType.public_bytesN)rK   rL   rM   __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)r8   rT   r-   r-   r.   rF   q   s    zExtensions.__init__r   zExtension[ExtensionType])rC   r%   c                 C  s2   | D ]}|j |kr|  S qtd| d|d S )NNo  extension was found)rC   rO   )r8   rC   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.rW   rX   )UnrecognizedExtension	TypeErrorr'   valuerO   rC   )r8   r[   rY   r-   r-   r.   get_extension_for_class}   s    

 z"Extensions.get_extension_for_classrV   r0   r4   c                 C  s   d| j  dS )Nz<Extensions()>)rV   r7   r-   r-   r.   __repr__   s    zExtensions.__repr__N)rK   rL   rM   rF   rZ   r_   r>   __len____iter____getitem__ra   r-   r-   r-   r.   rS   p   s
   	rS   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 )	CRLNumberr3   r@   
crl_numberr%   c                 C  s   t |tstd|| _d S Nzcrl_number must be an integerr'   r3   r]   _crl_numberr8   rg   r-   r-   r.   rF      s    
zCRLNumber.__init__objectboolotherr%   c                 C  s   t |tstS | j|jkS r&   )r'   re   NotImplementedrg   r8   ro   r-   r-   r.   __eq__   s    
zCRLNumber.__eq__r4   c                 C  s
   t | jS r&   hashrg   r7   r-   r-   r.   __hash__   s    zCRLNumber.__hash__r0   c                 C  s   d| j  dS )Nz<CRLNumber(r`   rg   r7   r-   r-   r.   ra      s    zCRLNumber.__repr__c                 C  s   | j S r&   rj   r7   r-   r-   r.   rg      s    zCRLNumber.crl_numberr"   c                 C  s
   t | S r&   	rust_x509Zencode_extension_valuer7   r-   r-   r.   r(      s    zCRLNumber.public_bytesN)rK   rL   rM   r   Z
CRL_NUMBERrC   rF   rr   ru   ra   propertyrg   r(   r-   r-   r-   r.   re      s   re   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)	
ValueErrorrU   allr]   r'   r3   _key_identifier_authority_cert_issuer_authority_cert_serial_number)r8   r   r   r   r-   r-   r.   rF      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_identifierr0   r4   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   r7   r-   r-   r.   ra      s    zAuthorityKeyIdentifier.__repr__rl   rm   rn   c                 C  s2   t |tstS | j|jko0| j|jko0| j|jkS r&   )r'   r{   rp   r   r   r   rq   r-   r-   r.   rr      s    

zAuthorityKeyIdentifier.__eq__r3   c                 C  s,   | j d krd }n
t| j }t| j|| jfS r&   )r   tuplert   r   r   )r8   Zacir-   r-   r.   ru     s    

zAuthorityKeyIdentifier.__hash__c                 C  s   | j S r&   )r   r7   r-   r-   r.   r     s    z%AuthorityKeyIdentifier.key_identifierlist[GeneralName] | Nonec                 C  s   | j S r&   )r   r7   r-   r-   r.   r     s    z,AuthorityKeyIdentifier.authority_cert_issuerc                 C  s   | j S r&   )r   r7   r-   r-   r.   r     s    z3AuthorityKeyIdentifier.authority_cert_serial_numberr"   c                 C  s
   t | S r&   rx   r7   r-   r-   r.   r(     s    z#AuthorityKeyIdentifier.public_bytesN)rK   rL   rM   r   ZAUTHORITY_KEY_IDENTIFIERrC   rF   classmethodr   r   ra   rr   ru   rz   r   r   r   r(   r-   r-   r-   r.   r{      s    &
		r{   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)r8   r+   r-   r-   r.   rF   !  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_keyr4   c                 C  s   | j S r&   r   r7   r-   r-   r.   r+   *  s    zSubjectKeyIdentifier.digestc                 C  s   | j S r&   r   r7   r-   r-   r.   r   .  s    z#SubjectKeyIdentifier.key_identifierr0   c                 C  s   d| j dS )Nz<SubjectKeyIdentifier(digest=r`   r   r7   r-   r-   r.   ra   2  s    zSubjectKeyIdentifier.__repr__rl   rm   rn   c                 C  s   t |tstS t| j|jS r&   )r'   r   rp   r   Zbytes_eqr+   rq   r-   r-   r.   rr   5  s    
zSubjectKeyIdentifier.__eq__r3   c                 C  s
   t | jS r&   )rt   r+   r7   r-   r-   r.   ru   ;  s    zSubjectKeyIdentifier.__hash__c                 C  s
   t | S r&   rx   r7   r-   r-   r.   r(   >  s    z!SubjectKeyIdentifier.public_bytesN)rK   rL   rM   r   ZSUBJECT_KEY_IDENTIFIERrC   rF   r   r   rz   r+   r   ra   rr   ru   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rU   r   r]   _descriptionsr8   r   r-   r-   r.   rF   E  s    z#AuthorityInformationAccess.__init__r   r0   r4   c                 C  s   d| j  dS )Nz<AuthorityInformationAccess(r`   r   r7   r-   r-   r.   ra   Q  s    z#AuthorityInformationAccess.__repr__rl   rm   rn   c                 C  s   t |tstS | j|jkS r&   )r'   r   rp   r   rq   r-   r-   r.   rr   T  s    
z!AuthorityInformationAccess.__eq__r3   c                 C  s   t t| jS r&   rt   r   r   r7   r-   r-   r.   ru   Z  s    z#AuthorityInformationAccess.__hash__r"   c                 C  s
   t | S r&   rx   r7   r-   r-   r.   r(   ]  s    z'AuthorityInformationAccess.public_bytesN)rK   rL   rM   r   ZAUTHORITY_INFORMATION_ACCESSrC   rF   r>   rb   rc   rd   ra   rr   ru   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.   rF   d  s    z!SubjectInformationAccess.__init__r   r0   r4   c                 C  s   d| j  dS )Nz<SubjectInformationAccess(r`   r   r7   r-   r-   r.   ra   p  s    z!SubjectInformationAccess.__repr__rl   rm   rn   c                 C  s   t |tstS | j|jkS r&   )r'   r   rp   r   rq   r-   r-   r.   rr   s  s    
zSubjectInformationAccess.__eq__r3   c                 C  s   t t| jS r&   r   r7   r-   r-   r.   ru   y  s    z!SubjectInformationAccess.__hash__r"   c                 C  s
   t | S r&   rx   r7   r-   r-   r.   r(   |  s    z%SubjectInformationAccess.public_bytesN)rK   rL   rM   r   ZSUBJECT_INFORMATION_ACCESSrC   rF   r>   rb   rc   rd   ra   rr   ru   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   r]   r   _access_method_access_location)r8   r   r   r-   r-   r.   rF     s    

zAccessDescription.__init__r0   r4   c                 C  s   d| j  d| j dS )Nz!<AccessDescription(access_method=z, access_location=r`   )r   r   r7   r-   r-   r.   ra     s    zAccessDescription.__repr__rl   rm   rn   c                 C  s&   t |tstS | j|jko$| j|jkS r&   )r'   r   rp   r   r   rq   r-   r-   r.   rr     s
    

zAccessDescription.__eq__r3   c                 C  s   t | j| jfS r&   )rt   r   r   r7   r-   r-   r.   ru     s    zAccessDescription.__hash__c                 C  s   | j S r&   )r   r7   r-   r-   r.   r     s    zAccessDescription.access_methodc                 C  s   | j S r&   )r   r7   r-   r-   r.   r     s    z!AccessDescription.access_locationN)
rK   rL   rM   rF   ra   rr   ru   rz   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 )BasicConstraintsrm   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'   rm   r]   r   r3   _ca_path_length)r8   r   r   r-   r-   r.   rF     s    
zBasicConstraints.__init__r4   c                 C  s   | j S r&   )r   r7   r-   r-   r.   r     s    zBasicConstraints.cac                 C  s   | j S r&   )r   r7   r-   r-   r.   r     s    zBasicConstraints.path_lengthr0   c                 C  s   d| j  d| j dS )Nz<BasicConstraints(ca=z, path_length=r`   )r   r   r7   r-   r-   r.   ra     s    zBasicConstraints.__repr__rl   rn   c                 C  s&   t |tstS | j|jko$| j|jkS r&   )r'   r   rp   r   r   rq   r-   r-   r.   rr     s    
zBasicConstraints.__eq__r3   c                 C  s   t | j| jfS r&   )rt   r   r   r7   r-   r-   r.   ru     s    zBasicConstraints.__hash__r"   c                 C  s
   t | S r&   rx   r7   r-   r-   r.   r(     s    zBasicConstraints.public_bytesN)rK   rL   rM   r   ZBASIC_CONSTRAINTSrC   rF   rz   r   r   ra   rr   ru   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 )DeltaCRLIndicatorr3   r@   rf   c                 C  s   t |tstd|| _d S rh   ri   rk   r-   r-   r.   rF     s    
zDeltaCRLIndicator.__init__r4   c                 C  s   | j S r&   rw   r7   r-   r-   r.   rg     s    zDeltaCRLIndicator.crl_numberrl   rm   rn   c                 C  s   t |tstS | j|jkS r&   )r'   r   rp   rg   rq   r-   r-   r.   rr     s    
zDeltaCRLIndicator.__eq__c                 C  s
   t | jS r&   rs   r7   r-   r-   r.   ru     s    zDeltaCRLIndicator.__hash__r0   c                 C  s   d| j  dS )Nz<DeltaCRLIndicator(crl_number=r`   rv   r7   r-   r-   r.   ra     s    zDeltaCRLIndicator.__repr__r"   c                 C  s
   t | S r&   rx   r7   r-   r-   r.   r(     s    zDeltaCRLIndicator.public_bytesN)rK   rL   rM   r   ZDELTA_CRL_INDICATORrC   rF   rz   rg   rr   ru   ra   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rU   r   r]   _distribution_pointsr8   r   r-   r-   r.   rF     s    zCRLDistributionPoints.__init__r   r0   r4   c                 C  s   d| j  dS )Nz<CRLDistributionPoints(r`   r   r7   r-   r-   r.   ra     s    zCRLDistributionPoints.__repr__rl   rm   rn   c                 C  s   t |tstS | j|jkS r&   )r'   r   rp   r   rq   r-   r-   r.   rr     s    
zCRLDistributionPoints.__eq__r3   c                 C  s   t t| jS r&   rt   r   r   r7   r-   r-   r.   ru     s    zCRLDistributionPoints.__hash__r"   c                 C  s
   t | S r&   rx   r7   r-   r-   r.   r(     s    z"CRLDistributionPoints.public_bytesN)rK   rL   rM   r   ZCRL_DISTRIBUTION_POINTSrC   rF   r>   rb   rc   rd   ra   rr   ru   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.   rF     s    zFreshestCRL.__init__r   r0   r4   c                 C  s   d| j  dS )Nz<FreshestCRL(r`   r   r7   r-   r-   r.   ra   -  s    zFreshestCRL.__repr__rl   rm   rn   c                 C  s   t |tstS | j|jkS r&   )r'   r   rp   r   rq   r-   r-   r.   rr   0  s    
zFreshestCRL.__eq__r3   c                 C  s   t t| jS r&   r   r7   r-   r-   r.   ru   6  s    zFreshestCRL.__hash__r"   c                 C  s
   t | S r&   rx   r7   r-   r-   r.   r(   9  s    zFreshestCRL.public_bytesN)rK   rL   rM   r   ZFRESHEST_CRLrC   rF   r>   rb   rc   rd   ra   rr   ru   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 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   rU   r   r]   r'   r   	frozensetr   unspecifiedremove_from_crl
_full_name_relative_name_reasons_crl_issuer)r8   r   r   r   r   r-   r-   r.   rF   >  sV    
zDistributionPoint.__init__r0   r4   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})>formatr7   r-   r-   r.   ra   x  s    zDistributionPoint.__repr__rl   rm   rn   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   rp   r   r   r   r   rq   r-   r-   r.   rr     s    



zDistributionPoint.__eq__r3   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   rt   r   r   )r8   fnr   r-   r-   r.   ru     s    

zDistributionPoint.__hash__r   c                 C  s   | j S r&   r   r7   r-   r-   r.   r     s    zDistributionPoint.full_namec                 C  s   | j S r&   r   r7   r-   r-   r.   r     s    zDistributionPoint.relative_namec                 C  s   | j S r&   )r   r7   r-   r-   r.   r     s    zDistributionPoint.reasonsc                 C  s   | j S r&   )r   r7   r-   r-   r.   r     s    zDistributionPoint.crl_issuerN)rK   rL   rM   rF   ra   rr   ru   rz   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)rK   rL   rM   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'   r3   r]   r   _require_explicit_policy_inhibit_policy_mapping)r8   r   r   r-   r-   r.   rF     s(    
 
 zPolicyConstraints.__init__r0   r4   c                 C  s
   d | S )Nz{<PolicyConstraints(require_explicit_policy={0.require_explicit_policy}, inhibit_policy_mapping={0.inhibit_policy_mapping})>r   r7   r-   r-   r.   ra     s    zPolicyConstraints.__repr__rl   rm   rn   c                 C  s&   t |tstS | j|jko$| j|jkS r&   )r'   r   rp   r   r   rq   r-   r-   r.   rr     s
    

zPolicyConstraints.__eq__r3   c                 C  s   t | j| jfS r&   )rt   r   r   r7   r-   r-   r.   ru   !  s    
zPolicyConstraints.__hash__c                 C  s   | j S r&   )r   r7   r-   r-   r.   r   &  s    z)PolicyConstraints.require_explicit_policyc                 C  s   | j S r&   )r   r7   r-   r-   r.   r   *  s    z(PolicyConstraints.inhibit_policy_mappingr"   c                 C  s
   t | S r&   rx   r7   r-   r-   r.   r(   .  s    zPolicyConstraints.public_bytesN)rK   rL   rM   r   ZPOLICY_CONSTRAINTSrC   rF   ra   rr   ru   rz   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)rU   r   r]   	_policies)r8   r   r-   r-   r.   rF   5  s    zCertificatePolicies.__init__r   r0   r4   c                 C  s   d| j  dS )Nz<CertificatePolicies(r`   )r   r7   r-   r-   r.   ra   @  s    zCertificatePolicies.__repr__rl   rm   rn   c                 C  s   t |tstS | j|jkS r&   )r'   r   rp   r   rq   r-   r-   r.   rr   C  s    
zCertificatePolicies.__eq__r3   c                 C  s   t t| jS r&   )rt   r   r   r7   r-   r-   r.   ru   I  s    zCertificatePolicies.__hash__r"   c                 C  s
   t | S r&   rx   r7   r-   r-   r.   r(   L  s    z CertificatePolicies.public_bytesN)rK   rL   rM   r   ZCERTIFICATE_POLICIESrC   rF   r>   rb   rc   rd   ra   rr   ru   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'   r0   
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   r]   _policy_identifierrU   r   _policy_qualifiers)r8   r   r   r-   r-   r.   rF   Q  s    
zPolicyInformation.__init__r0   r4   c                 C  s   d| j  d| j dS )Nz%<PolicyInformation(policy_identifier=z, policy_qualifiers=r`   )r   r   r7   r-   r-   r.   ra   g  s    zPolicyInformation.__repr__rl   rm   rn   c                 C  s&   t |tstS | j|jko$| j|jkS r&   )r'   r   rp   r   r   rq   r-   r-   r.   rr   m  s
    

zPolicyInformation.__eq__r3   c                 C  s(   | j d k	rt| j }nd }t| j|fS r&   )r   r   rt   r   )r8   Zpqr-   r-   r.   ru   v  s    
zPolicyInformation.__hash__c                 C  s   | j S r&   )r   r7   r-   r-   r.   r   ~  s    z#PolicyInformation.policy_identifierzlist[str | UserNotice] | Nonec                 C  s   | j S r&   )r   r7   r-   r-   r.   r     s    z#PolicyInformation.policy_qualifiersN)
rK   rL   rM   rF   ra   rr   ru   rz   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'   NoticeReferencer]   _notice_reference_explicit_text)r8   r   r   r-   r-   r.   rF     s     zUserNotice.__init__r0   r4   c                 C  s   d| j  d| jdS )Nz<UserNotice(notice_reference=z, explicit_text=r`   )r   r   r7   r-   r-   r.   ra     s    zUserNotice.__repr__rl   rm   rn   c                 C  s&   t |tstS | j|jko$| j|jkS r&   )r'   r   rp   r   r   rq   r-   r-   r.   rr     s
    

zUserNotice.__eq__r3   c                 C  s   t | j| jfS r&   )rt   r   r   r7   r-   r-   r.   ru     s    zUserNotice.__hash__c                 C  s   | j S r&   )r   r7   r-   r-   r.   r     s    zUserNotice.notice_referencec                 C  s   | j S r&   )r   r7   r-   r-   r.   r     s    zUserNotice.explicit_textN)
rK   rL   rM   rF   ra   rr   ru   rz   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'   r3   r   r-   r-   r.   r     s     z+NoticeReference.__init__.<locals>.<genexpr>z)notice_numbers must be a list of integers)_organizationrU   r   r]   _notice_numbers)r8   r   r   r-   r-   r.   rF     s
    zNoticeReference.__init__r0   r4   c                 C  s   d| j d| j dS )Nz<NoticeReference(organization=z, notice_numbers=r`   )r   r   r7   r-   r-   r.   ra     s    zNoticeReference.__repr__rl   rm   rn   c                 C  s&   t |tstS | j|jko$| j|jkS r&   )r'   r   rp   r   r   rq   r-   r-   r.   rr     s
    

zNoticeReference.__eq__r3   c                 C  s   t | jt| jfS r&   )rt   r   r   r   r7   r-   r-   r.   ru     s    zNoticeReference.__hash__c                 C  s   | j S r&   )r   r7   r-   r-   r.   r     s    zNoticeReference.organizationz	list[int]c                 C  s   | j S r&   )r   r7   r-   r-   r.   r     s    zNoticeReference.notice_numbersN)
rK   rL   rM   rF   ra   rr   ru   rz   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)rU   r   r]   _usages)r8   r   r-   r-   r.   rF     s    zExtendedKeyUsage.__init__r   r0   r4   c                 C  s   d| j  dS )Nz<ExtendedKeyUsage(r`   )r   r7   r-   r-   r.   ra     s    zExtendedKeyUsage.__repr__rl   rm   rn   c                 C  s   t |tstS | j|jkS r&   )r'   r   rp   r   rq   r-   r-   r.   rr     s    
zExtendedKeyUsage.__eq__r3   c                 C  s   t t| jS r&   )rt   r   r   r7   r-   r-   r.   ru     s    zExtendedKeyUsage.__hash__r"   c                 C  s
   t | S r&   rx   r7   r-   r-   r.   r(     s    zExtendedKeyUsage.public_bytesN)rK   rL   rM   r   ZEXTENDED_KEY_USAGErC   rF   r>   rb   rc   rd   ra   rr   ru   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 )OCSPNoCheckrl   rm   rn   c                 C  s   t |tstS dS NT)r'   r  rp   rq   r-   r-   r.   rr     s    
zOCSPNoCheck.__eq__r3   r4   c                 C  s   t tS r&   )rt   r  r7   r-   r-   r.   ru     s    zOCSPNoCheck.__hash__r0   c                 C  s   dS )Nz<OCSPNoCheck()>r-   r7   r-   r-   r.   ra     s    zOCSPNoCheck.__repr__r"   c                 C  s
   t | S r&   rx   r7   r-   r-   r.   r(   	  s    zOCSPNoCheck.public_bytesN)
rK   rL   rM   r   ZOCSP_NO_CHECKrC   rr   ru   ra   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 )PrecertPoisonrl   rm   rn   c                 C  s   t |tstS dS r  )r'   r  rp   rq   r-   r-   r.   rr     s    
zPrecertPoison.__eq__r3   r4   c                 C  s   t tS r&   )rt   r  r7   r-   r-   r.   ru     s    zPrecertPoison.__hash__r0   c                 C  s   dS )Nz<PrecertPoison()>r-   r7   r-   r-   r.   ra     s    zPrecertPoison.__repr__r"   c                 C  s
   t | S r&   rx   r7   r-   r-   r.   r(     s    zPrecertPoison.public_bytesN)
rK   rL   rM   r   ZPRECERT_POISONrC   rr   ru   ra   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)rU   r   r5   r]   	_features)r8   r  r-   r-   r.   rF   #  s    
zTLSFeature.__init__r  r0   r4   c                 C  s   d| j  dS )Nz<TLSFeature(features=r`   )r  r7   r-   r-   r.   ra   2  s    zTLSFeature.__repr__rl   rm   rn   c                 C  s   t |tstS | j|jkS r&   )r'   r  rp   r  rq   r-   r-   r.   rr   5  s    
zTLSFeature.__eq__r3   c                 C  s   t t| jS r&   )rt   r   r  r7   r-   r-   r.   ru   ;  s    zTLSFeature.__hash__r"   c                 C  s
   t | S r&   rx   r7   r-   r-   r.   r(   >  s    zTLSFeature.public_bytesN)rK   rL   rM   r   ZTLS_FEATURErC   rF   r>   rb   rc   rd   ra   rr   ru   r(   r-   r-   r-   r.   r     s   r  c                   @  s   e Zd ZdZdZdS )r  r      N)rK   rL   rM   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 )InhibitAnyPolicyr3   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'   r3   r]   r   _skip_certs)r8   r  r-   r-   r.   rF   S  s
    
zInhibitAnyPolicy.__init__r0   r4   c                 C  s   d| j  dS )Nz<InhibitAnyPolicy(skip_certs=r`   )r  r7   r-   r-   r.   ra   \  s    zInhibitAnyPolicy.__repr__rl   rm   rn   c                 C  s   t |tstS | j|jkS r&   )r'   r  rp   r  rq   r-   r-   r.   rr   _  s    
zInhibitAnyPolicy.__eq__c                 C  s
   t | jS r&   )rt   r  r7   r-   r-   r.   ru   e  s    zInhibitAnyPolicy.__hash__c                 C  s   | j S r&   )r  r7   r-   r-   r.   r  h  s    zInhibitAnyPolicy.skip_certsr"   c                 C  s
   t | S r&   rx   r7   r-   r-   r.   r(   l  s    zInhibitAnyPolicy.public_bytesN)rK   rL   rM   r   ZINHIBIT_ANY_POLICYrC   rF   ra   rr   ru   rz   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 )'KeyUsagerm   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)
r8   r  r  r  r  r  r  r  r  r  r-   r-   r.   rF   s  s    zKeyUsage.__init__r4   c                 C  s   | j S r&   )r  r7   r-   r-   r.   r    s    zKeyUsage.digital_signaturec                 C  s   | j S r&   )r  r7   r-   r-   r.   r    s    zKeyUsage.content_commitmentc                 C  s   | j S r&   )r  r7   r-   r-   r.   r    s    zKeyUsage.key_enciphermentc                 C  s   | j S r&   )r  r7   r-   r-   r.   r    s    zKeyUsage.data_enciphermentc                 C  s   | j S r&   )r  r7   r-   r-   r.   r    s    zKeyUsage.key_agreementc                 C  s   | j S r&   )r  r7   r-   r-   r.   r    s    zKeyUsage.key_cert_signc                 C  s   | j S r&   )r  r7   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  r7   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   r7   r-   r-   r.   r    s
    zKeyUsage.decipher_onlyr0   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  )r8   r  r  r-   r-   r.   ra     s    

HzKeyUsage.__repr__rl   rn   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  rp   r  r  r  r  r  r  r  r  r   rq   r-   r-   r.   rr     s&    








zKeyUsage.__eq__r3   c              
   C  s,   t | j| j| j| j| j| j| j| j| j	f	S r&   )
rt   r  r  r  r  r  r  r  r  r   r7   r-   r-   r.   ru     s    zKeyUsage.__hash__r"   c                 C  s
   t | S r&   rx   r7   r-   r-   r.   r(     s    zKeyUsage.public_bytesN)rK   rL   rM   r   Z	KEY_USAGErC   rF   rz   r  r  r  r  r  r  r  r  r  ra   rr   ru   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'   datetimer]   r   _not_before
_not_after)r8   r"  r#  r-   r-   r.   rF     s.    

zPrivateKeyUsagePeriod.__init__r4   c                 C  s   | j S r&   )r%  r7   r-   r-   r.   r"    s    z PrivateKeyUsagePeriod.not_beforec                 C  s   | j S r&   )r&  r7   r-   r-   r.   r#    s    zPrivateKeyUsagePeriod.not_afterr0   c                 C  s   d| j  d| j dS )Nz"<PrivateKeyUsagePeriod(not_before=z, not_after=r`   )r"  r#  r7   r-   r-   r.   ra      s    zPrivateKeyUsagePeriod.__repr__rl   rm   rn   c                 C  s&   t |tstS | j|jko$| j|jkS r&   )r'   r!  rp   r"  r#  rq   r-   r-   r.   rr   &  s
    

zPrivateKeyUsagePeriod.__eq__r3   c                 C  s   t | j| jfS r&   )rt   r"  r#  r7   r-   r-   r.   ru   /  s    zPrivateKeyUsagePeriod.__hash__r"   c                 C  s
   t | S r&   rx   r7   r-   r-   r.   r(   2  s    z"PrivateKeyUsagePeriod.public_bytesN)rK   rL   rM   r   ZPRIVATE_KEY_USAGE_PERIODrC   rF   rz   r"  r#  ra   rr   ru   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 )#NameConstraintsr}   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)rU   r   r   r]   _validate_tree_permitted_subtrees_excluded_subtrees)r8   r(  r)  r-   r-   r.   rF   9  s8    

zNameConstraints.__init__rl   rm   rn   c                 C  s&   t |tstS | j|jko$| j|jkS r&   )r'   r'  rp   r)  r(  rq   r-   r-   r.   rr   c  s
    

zNameConstraints.__eq__Iterable[GeneralName])treer%   c                 C  s   |  | | | d S r&   )_validate_ip_name_validate_dns_namer8   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^   	ipaddressIPv4NetworkIPv6Networkr   namer-   r-   r.   r   q  s   
 
z4NameConstraints._validate_ip_name.<locals>.<genexpr>zGIPAddress name constraints must be an IPv4Network or IPv6Network object)anyr]   r1  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^   r5  r-   r-   r.   r   ~  s    z5NameConstraints._validate_dns_name.<locals>.<genexpr>zDDNSName name constraints must not contain the '*' wildcard character)r7  r   r1  r-   r-   r.   r0  }  s    z"NameConstraints._validate_dns_namer0   r4   c                 C  s   d| j  d| j dS )Nz$<NameConstraints(permitted_subtrees=z, excluded_subtrees=r`   )r(  r)  r7   r-   r-   r.   ra     s    zNameConstraints.__repr__r3   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)  rt   )r8   Zpsesr-   r-   r.   ru     s    

zNameConstraints.__hash__r   c                 C  s   | j S r&   )r+  r7   r-   r-   r.   r(    s    z"NameConstraints.permitted_subtreesc                 C  s   | j S r&   )r,  r7   r-   r-   r.   r)    s    z!NameConstraints.excluded_subtreesr"   c                 C  s
   t | S r&   rx   r7   r-   r-   r.   r(     s    zNameConstraints.public_bytesN)rK   rL   rM   r   ZNAME_CONSTRAINTSrC   rF   rr   r*  r/  r0  ra   ru   rz   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   rm   r   r@   )rC   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]   rm   _oid	_critical_value)r8   rC   r;  r^   r-   r-   r.   rF     s    

zExtension.__init__r4   c                 C  s   | j S r&   r<  r7   r-   r-   r.   rC     s    zExtension.oidc                 C  s   | j S r&   )r=  r7   r-   r-   r.   r;    s    zExtension.criticalc                 C  s   | j S r&   r>  r7   r-   r-   r.   r^     s    zExtension.valuer0   c                 C  s   d| j  d| j d| j dS )Nz<Extension(oid=z, critical=, value=r`   )rC   r;  r^   r7   r-   r-   r.   ra     s    zExtension.__repr__rl   rn   c                 C  s2   t |tstS | j|jko0| j|jko0| j|jkS r&   )r'   r:  rp   rC   r;  r^   rq   r-   r-   r.   rr     s    


zExtension.__eq__r3   c                 C  s   t | j| j| jfS r&   )rt   rC   r;  r^   r7   r-   r-   r.   ru     s    zExtension.__hash__N)rK   rL   rM   rF   rz   rC   r;  r^   ra   rr   ru   r-   r-   r-   r.   r:    s   
r:  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)rU   r   r]   _general_namesr8   rD  r-   r-   r.   rF     s    zGeneralNames.__init__rE  Btype[DNSName] | type[UniformResourceIdentifier] | type[RFC822Name]	list[str]typer%   c                 C  s   d S r&   r-   r8   rJ  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-   rK  r-   r-   r.   rL    s    type[RegisteredID]list[ObjectIdentifier]c                 C  s   d S r&   r-   rK  r-   r-   r.   rL    s    type[IPAddress]list[_IPAddressTypes]c                 C  s   d S r&   r-   rK  r-   r-   r.   rL    s    type[OtherName]list[OtherName]c                 C  s   d S r&   r-   rK  r-   r-   r.   rL    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rJ  r-   r.   r     s     
 z3GeneralNames.get_values_for_type.<locals>.<genexpr>c                 S  s   g | ]
}|j qS r-   r	  rW  r-   r-   r.   
<listcomp>  s     z4GeneralNames.get_values_for_type.<locals>.<listcomp>)r   rU   )r8   rJ  Zobjsr-   rY  r.   rL    s    r0   r4   c                 C  s   d| j  dS )Nz<GeneralNames(r`   rE  r7   r-   r-   r.   ra     s    zGeneralNames.__repr__rl   rm   rn   c                 C  s   t |tstS | j|jkS r&   )r'   rB  rp   rE  rq   r-   r-   r.   rr     s    
zGeneralNames.__eq__r3   c                 C  s   t t| jS r&   )rt   r   rE  r7   r-   r-   r.   ru   %  s    zGeneralNames.__hash__N)rK   rL   rM   rF   r>   rb   rc   rd   typingoverloadrL  ra   rr   ru   r-   r-   r-   r.   rB    s    
rB  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@   rC  c                 C  s   t || _d S r&   rB  rE  rF  r-   r-   r.   rF   ,  s    zSubjectAlternativeName.__init__rE  rG  rH  rI  c                 C  s   d S r&   r-   rK  r-   r-   r.   rL  1  s    z*SubjectAlternativeName.get_values_for_typerM  rN  c                 C  s   d S r&   r-   rK  r-   r-   r.   rL  9  s    rO  rP  c                 C  s   d S r&   r-   rK  r-   r-   r.   rL  ?  s    rQ  rR  c                 C  s   d S r&   r-   rK  r-   r-   r.   rL  E  s    rS  rT  c                 C  s   d S r&   r-   rK  r-   r-   r.   rL  J  s    rU  rV  c                 C  s   | j |S r&   rE  rL  rK  r-   r-   r.   rL  O  s    r0   r4   c                 C  s   d| j  dS )Nz<SubjectAlternativeName(r`   r[  r7   r-   r-   r.   ra   a  s    zSubjectAlternativeName.__repr__rl   rm   rn   c                 C  s   t |tstS | j|jkS r&   )r'   r^  rp   rE  rq   r-   r-   r.   rr   d  s    
zSubjectAlternativeName.__eq__r3   c                 C  s
   t | jS r&   rt   rE  r7   r-   r-   r.   ru   j  s    zSubjectAlternativeName.__hash__r"   c                 C  s
   t | S r&   rx   r7   r-   r-   r.   r(   m  s    z#SubjectAlternativeName.public_bytesN)rK   rL   rM   r   ZSUBJECT_ALTERNATIVE_NAMErC   rF   r>   rb   rc   rd   r\  r]  rL  ra   rr   ru   r(   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 )+IssuerAlternativeNamer-  r@   rC  c                 C  s   t || _d S r&   r_  rF  r-   r-   r.   rF   t  s    zIssuerAlternativeName.__init__rE  rG  rH  rI  c                 C  s   d S r&   r-   rK  r-   r-   r.   rL  y  s    z)IssuerAlternativeName.get_values_for_typerM  rN  c                 C  s   d S r&   r-   rK  r-   r-   r.   rL    s    rO  rP  c                 C  s   d S r&   r-   rK  r-   r-   r.   rL    s    rQ  rR  c                 C  s   d S r&   r-   rK  r-   r-   r.   rL    s    rS  rT  c                 C  s   d S r&   r-   rK  r-   r-   r.   rL    s    rU  rV  c                 C  s   | j |S r&   r`  rK  r-   r-   r.   rL    s    r0   r4   c                 C  s   d| j  dS )Nz<IssuerAlternativeName(r`   r[  r7   r-   r-   r.   ra     s    zIssuerAlternativeName.__repr__rl   rm   rn   c                 C  s   t |tstS | j|jkS r&   )r'   rb  rp   rE  rq   r-   r-   r.   rr     s    
zIssuerAlternativeName.__eq__r3   c                 C  s
   t | jS r&   ra  r7   r-   r-   r.   ru     s    zIssuerAlternativeName.__hash__r"   c                 C  s
   t | S r&   rx   r7   r-   r-   r.   r(     s    z"IssuerAlternativeName.public_bytesN)rK   rL   rM   r   ZISSUER_ALTERNATIVE_NAMErC   rF   r>   rb   rc   rd   r\  r]  rL  ra   rr   ru   r(   r-   r-   r-   r.   rb  q  s$   rb  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@   rC  c                 C  s   t || _d S r&   r_  rF  r-   r-   r.   rF     s    zCertificateIssuer.__init__rE  rG  rH  rI  c                 C  s   d S r&   r-   rK  r-   r-   r.   rL    s    z%CertificateIssuer.get_values_for_typerM  rN  c                 C  s   d S r&   r-   rK  r-   r-   r.   rL    s    rO  rP  c                 C  s   d S r&   r-   rK  r-   r-   r.   rL    s    rQ  rR  c                 C  s   d S r&   r-   rK  r-   r-   r.   rL    s    rS  rT  c                 C  s   d S r&   r-   rK  r-   r-   r.   rL    s    rU  rV  c                 C  s   | j |S r&   r`  rK  r-   r-   r.   rL    s    r0   r4   c                 C  s   d| j  dS )Nz<CertificateIssuer(r`   r[  r7   r-   r-   r.   ra     s    zCertificateIssuer.__repr__rl   rm   rn   c                 C  s   t |tstS | j|jkS r&   )r'   rc  rp   rE  rq   r-   r-   r.   rr     s    
zCertificateIssuer.__eq__r3   c                 C  s
   t | jS r&   ra  r7   r-   r-   r.   ru     s    zCertificateIssuer.__hash__r"   c                 C  s
   t | S r&   rx   r7   r-   r-   r.   r(     s    zCertificateIssuer.public_bytesN)rK   rL   rM   r   ZCERTIFICATE_ISSUERrC   rF   r>   rb   rc   rd   r\  r]  rL  ra   rr   ru   r(   r-   r-   r-   r.   rc    s$   rc  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)r8   re  r-   r-   r.   rF     s    
zCRLReason.__init__r0   r4   c                 C  s   d| j  dS )Nz<CRLReason(reason=r`   rf  r7   r-   r-   r.   ra   
  s    zCRLReason.__repr__rl   rm   rn   c                 C  s   t |tstS | j|jkS r&   )r'   rd  rp   re  rq   r-   r-   r.   rr     s    
zCRLReason.__eq__r3   c                 C  s
   t | jS r&   )rt   re  r7   r-   r-   r.   ru     s    zCRLReason.__hash__c                 C  s   | j S r&   rg  r7   r-   r-   r.   re    s    zCRLReason.reasonr"   c                 C  s
   t | S r&   rx   r7   r-   r-   r.   r(     s    zCRLReason.public_bytesN)rK   rL   rM   r   Z
CRL_REASONrC   rF   ra   rr   ru   rz   re  r(   r-   r-   r-   r.   rd    s   rd  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$  r]   _invalidity_date)r8   ri  r-   r-   r.   rF   !  s    zInvalidityDate.__init__r0   r4   c                 C  s   d| j  dS )Nz <InvalidityDate(invalidity_date=r`   rj  r7   r-   r-   r.   ra   '  s    zInvalidityDate.__repr__rl   rm   rn   c                 C  s   t |tstS | j|jkS r&   )r'   rh  rp   ri  rq   r-   r-   r.   rr   *  s    
zInvalidityDate.__eq__r3   c                 C  s
   t | jS r&   )rt   ri  r7   r-   r-   r.   ru   0  s    zInvalidityDate.__hash__c                 C  s   | j S r&   rk  r7   r-   r-   r.   ri  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)tz)rj  rl  replacer$  timezoneutc
astimezoner7   r-   r-   r.   invalidity_date_utc7  s    z"InvalidityDate.invalidity_date_utcr"   c                 C  s
   t | S r&   rx   r7   r-   r-   r.   r(   >  s    zInvalidityDate.public_bytesN)rK   rL   rM   r   ZINVALIDITY_DATErC   rF   ra   rr   ru   rz   ri  rr  r(   r-   r-   r-   r.   rh    s   rh  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rU   r   r]   _signed_certificate_timestampsr8   rv  r-   r-   r.   rF   E  s    z2PrecertificateSignedCertificateTimestamps.__init__r{  r0   r4   c                 C  s   dt |  dS )Nz+<PrecertificateSignedCertificateTimestamps(r`   rU   r7   r-   r-   r.   ra   X  s    z2PrecertificateSignedCertificateTimestamps.__repr__r3   c                 C  s   t t| jS r&   rt   r   r{  r7   r-   r-   r.   ru   [  s    z2PrecertificateSignedCertificateTimestamps.__hash__rl   rm   rn   c                 C  s   t |tstS | j|jkS r&   )r'   rs  rp   r{  rq   r-   r-   r.   rr   ^  s    
z0PrecertificateSignedCertificateTimestamps.__eq__r"   c                 C  s
   t | S r&   rx   r7   r-   r-   r.   r(   g  s    z6PrecertificateSignedCertificateTimestamps.public_bytesN)rK   rL   rM   r   Z%PRECERT_SIGNED_CERTIFICATE_TIMESTAMPSrC   rF   r>   rb   rc   rd   ra   ru   rr   r(   r-   r-   r-   r.   rs  B  s   
	rs  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 )SignedCertificateTimestampsrt  r@   ru  c                 C  s,   t |}tdd |D s"td|| _d S )Nc                 s  s   | ]}t |tV  qd S r&   rw  rx  r-   r-   r.   r   s  s   z7SignedCertificateTimestamps.__init__.<locals>.<genexpr>ry  rz  r|  r-   r-   r.   rF   n  s    z$SignedCertificateTimestamps.__init__r{  r0   r4   c                 C  s   dt |  dS )Nz<SignedCertificateTimestamps(r`   r}  r7   r-   r-   r.   ra     s    z$SignedCertificateTimestamps.__repr__r3   c                 C  s   t t| jS r&   r~  r7   r-   r-   r.   ru     s    z$SignedCertificateTimestamps.__hash__rl   rm   rn   c                 C  s   t |tstS | j|jkS r&   )r'   r  rp   r{  rq   r-   r-   r.   rr     s    
z"SignedCertificateTimestamps.__eq__r"   c                 C  s
   t | S r&   rx   r7   r-   r-   r.   r(     s    z(SignedCertificateTimestamps.public_bytesN)rK   rL   rM   r   ZSIGNED_CERTIFICATE_TIMESTAMPSrC   rF   r>   rb   rc   rd   ra   ru   rr   r(   r-   r-   r-   r.   r  k  s   
	r  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)r8   r  r-   r-   r.   rF     s    
zOCSPNonce.__init__rl   rm   rn   c                 C  s   t |tstS | j|jkS r&   )r'   r  rp   r  rq   r-   r-   r.   rr     s    
zOCSPNonce.__eq__r3   r4   c                 C  s
   t | jS r&   )rt   r  r7   r-   r-   r.   ru     s    zOCSPNonce.__hash__r0   c                 C  s   d| j dS )Nz<OCSPNonce(nonce=r`   )r  r7   r-   r-   r.   ra     s    zOCSPNonce.__repr__c                 C  s   | j S r&   )r  r7   r-   r-   r.   r    s    zOCSPNonce.noncec                 C  s
   t | S r&   rx   r7   r-   r-   r.   r(     s    zOCSPNonce.public_bytesN)rK   rL   rM   r   ZNONCErC   rF   rr   ru   ra   rz   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     s     z3OCSPAcceptableResponses.__init__.<locals>.<genexpr>z'All responses must be ObjectIdentifiers)rU   r7  r]   
_responses)r8   r  r-   r-   r.   rF     s    z OCSPAcceptableResponses.__init__rl   rm   rn   c                 C  s   t |tstS | j|jkS r&   )r'   r  rp   r  rq   r-   r-   r.   rr     s    
zOCSPAcceptableResponses.__eq__r3   r4   c                 C  s   t t| jS r&   )rt   r   r  r7   r-   r-   r.   ru     s    z OCSPAcceptableResponses.__hash__r0   c                 C  s   d| j  dS )Nz#<OCSPAcceptableResponses(responses=r`   )r  r7   r-   r-   r.   ra     s    z OCSPAcceptableResponses.__repr__zIterator[ObjectIdentifier]c                 C  s
   t | jS r&   )r:   r  r7   r-   r-   r.   rc     s    z OCSPAcceptableResponses.__iter__r"   c                 C  s
   t | S r&   rx   r7   r-   r-   r.   r(     s    z$OCSPAcceptableResponses.public_bytesN)rK   rL   rM   r   ZACCEPTABLE_RESPONSESrC   rF   rr   ru   ra   rc   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   rm   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.   rZ    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.)rU   r'   r   r   r]   r   r   r   r   rm   r5   r7  _only_contains_user_certs_only_contains_ca_certs_indirect_crl_only_contains_attribute_certs_only_some_reasonsr   r   )	r8   r   r   r  r  r  r  r  Zcrl_constraintsr-   r-   r.   rF     sr    

z!IssuingDistributionPoint.__init__r0   r4   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  r7   r-   r-   r.   ra   &  s    <z!IssuingDistributionPoint.__repr__rl   rn   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  rp   r   r   r  r  r  r  r  rq   r-   r-   r.   rr   2  s"    





zIssuingDistributionPoint.__eq__r3   c                 C  s$   t | j| j| j| j| j| j| jfS r&   )rt   r   r   r  r  r  r  r  r7   r-   r-   r.   ru   A  s    z!IssuingDistributionPoint.__hash__r   c                 C  s   | j S r&   r   r7   r-   r-   r.   r   N  s    z"IssuingDistributionPoint.full_namec                 C  s   | j S r&   r   r7   r-   r-   r.   r   R  s    z&IssuingDistributionPoint.relative_namec                 C  s   | j S r&   )r  r7   r-   r-   r.   r  V  s    z1IssuingDistributionPoint.only_contains_user_certsc                 C  s   | j S r&   )r  r7   r-   r-   r.   r  Z  s    z/IssuingDistributionPoint.only_contains_ca_certsc                 C  s   | j S r&   )r  r7   r-   r-   r.   r  ^  s    z*IssuingDistributionPoint.only_some_reasonsc                 C  s   | j S r&   )r  r7   r-   r-   r.   r  d  s    z%IssuingDistributionPoint.indirect_crlc                 C  s   | j S r&   )r  r7   r-   r-   r.   r  h  s    z6IssuingDistributionPoint.only_contains_attribute_certsr"   c                 C  s
   t | S r&   rx   r7   r-   r-   r.   r(   l  s    z%IssuingDistributionPoint.public_bytesN)rK   rL   rM   r   ZISSUING_DISTRIBUTION_POINTrC   rF   ra   rr   ru   rz   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   r]   _template_idr3   _major_version_minor_version)r8   r  r  r  r-   r-   r.   rF   s  s     
zMSCertificateTemplate.__init__r4   c                 C  s   | j S r&   )r  r7   r-   r-   r.   r    s    z!MSCertificateTemplate.template_idc                 C  s   | j S r&   )r  r7   r-   r-   r.   r    s    z#MSCertificateTemplate.major_versionc                 C  s   | j S r&   )r  r7   r-   r-   r.   r    s    z#MSCertificateTemplate.minor_versionr0   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  r7   r-   r-   r.   ra     s    zMSCertificateTemplate.__repr__rl   rm   rn   c                 C  s2   t |tstS | j|jko0| j|jko0| j|jkS r&   )r'   r  rp   r  r  r  rq   r-   r-   r.   rr     s    


zMSCertificateTemplate.__eq__r3   c                 C  s   t | j| j| jfS r&   )rt   r  r  r  r7   r-   r-   r.   ru     s    zMSCertificateTemplate.__hash__r"   c                 C  s
   t | S r&   rx   r7   r-   r-   r.   r(     s    z"MSCertificateTemplate.public_bytesN)rK   rL   rM   r   ZMS_CERTIFICATE_TEMPLATErC   rF   rz   r  r  r  ra   rr   ru   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   r]   r0   _id_url_text)r8   r  r  r  r-   r-   r.   rF     s    zNamingAuthority.__init__r4   c                 C  s   | j S r&   )r  r7   r-   r-   r.   r    s    zNamingAuthority.idc                 C  s   | j S r&   )r  r7   r-   r-   r.   r    s    zNamingAuthority.urlc                 C  s   | j S r&   )r  r7   r-   r-   r.   r    s    zNamingAuthority.textr0   c                 C  s   d| j  d| j d| j dS )Nz<NamingAuthority(id=z, url=z, text=r`   )r  r  r  r7   r-   r-   r.   ra     s    zNamingAuthority.__repr__rl   rm   rn   c                 C  s2   t |tstS | j|jko0| j|jko0| j|jkS r&   )r'   r  rp   r  r  r  rq   r-   r-   r.   rr     s    


zNamingAuthority.__eq__r3   c                 C  s   t | j| j| jfS r&   )rt   r  r  r  r7   r-   r-   r.   ru     s    zNamingAuthority.__hash__N)rK   rL   rM   rF   rz   r  r  r  ra   rr   ru   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   r|   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'   r0   )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   rC   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  r]   rU   r   r0   r"   _naming_authority_profession_items_profession_oids_registration_number_add_profession_info)r8   r  r  r  r  r  r-   r-   r.   rF     sB    
 
 
 zProfessionInfo.__init__r4   c                 C  s   | j S r&   r  r7   r-   r-   r.   r  	  s    zProfessionInfo.naming_authorityrH  c                 C  s   | j S r&   )r  r7   r-   r-   r.   r  	  s    zProfessionInfo.profession_itemszlist[ObjectIdentifier] | Nonec                 C  s   | j S r&   )r  r7   r-   r-   r.   r  	  s    zProfessionInfo.profession_oidsc                 C  s   | j S r&   )r  r7   r-   r-   r.   r  	  s    z"ProfessionInfo.registration_numberc                 C  s   | j S r&   )r  r7   r-   r-   r.   r  #	  s    z"ProfessionInfo.add_profession_infor0   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  r7   r-   r-   r.   ra   '	  s    ,zProfessionInfo.__repr__rl   rm   rn   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  rp   r  r  r  r  r  rq   r-   r-   r.   rr   0	  s    




zProfessionInfo.__eq__r3   c                 C  s8   | j d k	rt| j }nd }t| jt| j|| j| jfS r&   )r  r   rt   r  r  r  r  )r8   r  r-   r-   r.   ru   <	  s    
zProfessionInfo.__hash__N)rK   rL   rM   rF   rz   r  r  r  r  r  ra   rr   ru   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   r]   r  rU   r   _admission_authorityr  _profession_infos)r8   r  r  r  r-   r-   r.   rF   M	  s(    
 
 zAdmission.__init__r4   c                 C  s   | j S r&   )r  r7   r-   r-   r.   r  j	  s    zAdmission.admission_authorityc                 C  s   | j S r&   r  r7   r-   r-   r.   r  n	  s    zAdmission.naming_authorityzlist[ProfessionInfo]c                 C  s   | j S r&   )r  r7   r-   r-   r.   r  r	  s    zAdmission.profession_infosr0   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  r7   r-   r-   r.   ra   v	  s    zAdmission.__repr__rl   rm   rn   c                 C  s2   t |tstS | j|jko0| j|jko0| j|jkS r&   )r'   r  rp   r  r  r  rq   r-   r-   r.   rr   }	  s    


zAdmission.__eq__r3   c                 C  s   t | j| jt| jfS r&   )rt   r  r  r   r  r7   r-   r-   r.   ru   	  s    zAdmission.__hash__N)rK   rL   rM   rF   rz   r  r  r  ra   rr   ru   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   r]   rU   r   
_authority_admissions)r8   r  r  r-   r-   r.   rF   	  s    zAdmissions.__init__r  r4   c                 C  s   | j S r&   )r  r7   r-   r-   r.   r  	  s    zAdmissions.authorityr0   c                 C  s   d| j  d| j dS )Nz<Admissions(authority=z, admissions=r`   )r  r  r7   r-   r-   r.   ra   	  s    zAdmissions.__repr__rl   rm   rn   c                 C  s&   t |tstS | j|jko$| j|jkS r&   )r'   r  rp   r  r  rq   r-   r-   r.   rr   	  s
    

zAdmissions.__eq__r3   c                 C  s   t | jt| jfS r&   )rt   r  r   r  r7   r-   r-   r.   ru   	  s    zAdmissions.__hash__r"   c                 C  s
   t | S r&   rx   r7   r-   r-   r.   r(   	  s    zAdmissions.public_bytesN)rK   rL   rM   r   Z
ADMISSIONSrC   rF   r>   rb   rc   rd   rz   r  ra   rr   ru   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@   )rC   r^   r%   c                 C  s"   t |tstd|| _|| _d S )Nr  )r'   r   r]   r<  r>  )r8   rC   r^   r-   r-   r.   rF   	  s    
zUnrecognizedExtension.__init__r4   c                 C  s   | j S r&   r?  r7   r-   r-   r.   rC   	  s    zUnrecognizedExtension.oidc                 C  s   | j S r&   r@  r7   r-   r-   r.   r^   	  s    zUnrecognizedExtension.valuer0   c                 C  s   d| j  d| jdS )Nz<UnrecognizedExtension(oid=rA  r`   )rC   r^   r7   r-   r-   r.   ra   	  s    zUnrecognizedExtension.__repr__rl   rm   rn   c                 C  s&   t |tstS | j|jko$| j|jkS r&   )r'   r\   rp   rC   r^   rq   r-   r-   r.   rr   	  s    
zUnrecognizedExtension.__eq__r3   c                 C  s   t | j| jfS r&   )rt   rC   r^   r7   r-   r-   r.   ru   	  s    zUnrecognizedExtension.__hash__c                 C  s   | j S r&   r	  r7   r-   r-   r.   r(   	  s    z"UnrecognizedExtension.public_bytesN)rK   rL   rM   rF   rz   rC   r^   ra   rr   ru   r(   r-   r-   r-   r.   r\   	  s   r\   )t
__future__r   abcr$  r)   r2  r\  collections.abcr   r   Zcryptographyr   Z"cryptography.hazmat.bindings._rustr   r   ry   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?   rO   ABCMetar   rS   re   r{   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'  Genericr:  rB  r^  rb  rc  rd  rh  rs  r  r  r  r  r  r  r  r  r  r\   r-   r-   r-   r.   <module>   s   ,  %l$(.%%k                  A9+("  As0PHHH$)) #;:gE3