U
    /2i/                    @  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	   EncodingZDERZPublicFormatZPKCS1r
   ZX962ZUncompressedPointZSubjectPublicKeyInfor   Zparse_spki_for_datahashlibsha1digest)r$   dataZ
serialized r.   @/tmp/pip-unpacked-wheel-d9r6v89i/cryptography/x509/extensions.py_key_identifier_from_public_key3   s     


r0   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selfr2   r.   r/   
len_methodL   s    z*_make_sequence_methods.<locals>.len_methodc                   s   t t|  S r&   )iterr7   r8   r2   r.   r/   iter_methodO   s    z+_make_sequence_methods.<locals>.iter_methodc                   s   t |  | S r&   )r7   )r9   idxr2   r.   r/   getitem_methodR   s    z._make_sequence_methods.<locals>.getitem_methodr.   )r3   r:   r<   r>   r.   r2   r/   _make_sequence_methodsK   s    r?   c                      s&   e Zd Zdddd fddZ  ZS )DuplicateExtensionr1   r   Nonemsgoidr%   c                   s   t  | || _d S r&   super__init__rD   r9   rC   rD   	__class__r.   r/   rG   Y   s    zDuplicateExtension.__init____name__
__module____qualname__rG   __classcell__r.   r.   rI   r/   r@   X   s   r@   c                      s&   e Zd Zdddd fddZ  ZS )ExtensionNotFoundr1   r   rA   rB   c                   s   t  | || _d S r&   rE   rH   rI   r.   r/   rG   _   s    zExtensionNotFound.__init__rK   r.   r.   rI   r/   rP   ^   s   rP   c                   @  s$   e Zd ZU ded< ddddZdS )r   z!typing.ClassVar[ObjectIdentifier]rD   r"   r5   c                 C  s   t d| dS )z7
        Serializes the extension type to DER.
        z3public_bytes is not implemented for extension type N)NotImplementedErrorr8   r.   r.   r/   r(   g   s    zExtensionType.public_bytesN)rL   rM   rN   __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]]rA   )
extensionsr%   c                 C  s   t || _d S r&   )list_extensions)r9   rU   r.   r.   r/   rG   q   s    zExtensions.__init__r   zExtension[ExtensionType])rD   r%   c                 C  s2   | D ]}|j |kr|  S qtd| d|d S )NNo  extension was found)rD   rP   )r9   rD   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.rX   rY   )UnrecognizedExtension	TypeErrorr'   valuerP   rD   )r9   r\   rZ   r.   r.   r/   get_extension_for_class}   s    

 z"Extensions.get_extension_for_classrW   r1   r5   c                 C  s   d| j  dS )Nz<Extensions()>)rW   r8   r.   r.   r/   __repr__   s    zExtensions.__repr__N)rL   rM   rN   rG   r[   r`   r?   __len____iter____getitem__rb   r.   r.   r.   r/   rT   p   s
   	rT   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 )	CRLNumberr4   rA   
crl_numberr%   c                 C  s   t |tstd|| _d S Nzcrl_number must be an integerr'   r4   r^   _crl_numberr9   rh   r.   r.   r/   rG      s    
zCRLNumber.__init__objectboolotherr%   c                 C  s   t |tstS | j|jkS r&   )r'   rf   NotImplementedrh   r9   rp   r.   r.   r/   __eq__   s    
zCRLNumber.__eq__r5   c                 C  s
   t | jS r&   hashrh   r8   r.   r.   r/   __hash__   s    zCRLNumber.__hash__r1   c                 C  s   d| j  dS )Nz<CRLNumber(ra   rh   r8   r.   r.   r/   rb      s    zCRLNumber.__repr__c                 C  s   | j S r&   rk   r8   r.   r.   r/   rh      s    zCRLNumber.crl_numberr"   c                 C  s
   t | S r&   	rust_x509Zencode_extension_valuer8   r.   r.   r/   r(      s    zCRLNumber.public_bytesN)rL   rM   rN   r   Z
CRL_NUMBERrD   rG   rs   rv   rb   propertyrh   r(   r.   r.   r.   r/   rf      s   rf   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 | NonerA   )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)	
ValueErrorrV   allr^   r'   r4   _key_identifier_authority_cert_issuer_authority_cert_serial_number)r9   r   r   r   r.   r.   r/   rG      s,    
 zAuthorityKeyIdentifier.__init__r   r#   c                 C  s   t |}| |d d dS Nr   r   r   r0   )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_identifierr1   r5   c                 C  s   d| j d| j d| j dS )Nz'<AuthorityKeyIdentifier(key_identifier=z, authority_cert_issuer=z, authority_cert_serial_number=ra   r   r8   r.   r.   r/   rb      s    zAuthorityKeyIdentifier.__repr__rm   rn   ro   c                 C  s2   t |tstS | j|jko0| j|jko0| j|jkS r&   )r'   r|   rq   r   r   r   rr   r.   r.   r/   rs      s    

zAuthorityKeyIdentifier.__eq__r4   c                 C  s,   | j d krd }n
t| j }t| j|| jfS r&   )r   tupleru   r   r   )r9   Zacir.   r.   r/   rv     s    

zAuthorityKeyIdentifier.__hash__c                 C  s   | j S r&   )r   r8   r.   r.   r/   r     s    z%AuthorityKeyIdentifier.key_identifierlist[GeneralName] | Nonec                 C  s   | j S r&   )r   r8   r.   r.   r/   r     s    z,AuthorityKeyIdentifier.authority_cert_issuerc                 C  s   | j S r&   )r   r8   r.   r.   r/   r     s    z3AuthorityKeyIdentifier.authority_cert_serial_numberr"   c                 C  s
   t | S r&   ry   r8   r.   r.   r/   r(     s    z#AuthorityKeyIdentifier.public_bytesN)rL   rM   rN   r   ZAUTHORITY_KEY_IDENTIFIERrD   rG   classmethodr   r   rb   rs   rv   r{   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"   rA   )r,   r%   c                 C  s
   || _ d S r&   Z_digest)r9   r,   r.   r.   r/   rG   !  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_keyr5   c                 C  s   | j S r&   r   r8   r.   r.   r/   r,   *  s    zSubjectKeyIdentifier.digestc                 C  s   | j S r&   r   r8   r.   r.   r/   r   .  s    z#SubjectKeyIdentifier.key_identifierr1   c                 C  s   d| j dS )Nz<SubjectKeyIdentifier(digest=ra   r   r8   r.   r.   r/   rb   2  s    zSubjectKeyIdentifier.__repr__rm   rn   ro   c                 C  s   t |tstS t| j|jS r&   )r'   r   rq   r   Zbytes_eqr,   rr   r.   r.   r/   rs   5  s    
zSubjectKeyIdentifier.__eq__r4   c                 C  s
   t | jS r&   )ru   r,   r8   r.   r.   r/   rv   ;  s    zSubjectKeyIdentifier.__hash__c                 C  s
   t | S r&   ry   r8   r.   r.   r/   r(   >  s    z!SubjectKeyIdentifier.public_bytesN)rL   rM   rN   r   ZSUBJECT_KEY_IDENTIFIERrD   rG   r   r   r{   r,   r   rb   rs   rv   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]rA   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rV   r   r^   _descriptionsr9   r   r.   r.   r/   rG   E  s    z#AuthorityInformationAccess.__init__r   r1   r5   c                 C  s   d| j  dS )Nz<AuthorityInformationAccess(ra   r   r8   r.   r.   r/   rb   Q  s    z#AuthorityInformationAccess.__repr__rm   rn   ro   c                 C  s   t |tstS | j|jkS r&   )r'   r   rq   r   rr   r.   r.   r/   rs   T  s    
z!AuthorityInformationAccess.__eq__r4   c                 C  s   t t| jS r&   ru   r   r   r8   r.   r.   r/   rv   Z  s    z#AuthorityInformationAccess.__hash__r"   c                 C  s
   t | S r&   ry   r8   r.   r.   r/   r(   ]  s    z'AuthorityInformationAccess.public_bytesN)rL   rM   rN   r   ZAUTHORITY_INFORMATION_ACCESSrD   rG   r?   rc   rd   re   rb   rs   rv   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   rA   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/   rG   d  s    z!SubjectInformationAccess.__init__r   r1   r5   c                 C  s   d| j  dS )Nz<SubjectInformationAccess(ra   r   r8   r.   r.   r/   rb   p  s    z!SubjectInformationAccess.__repr__rm   rn   ro   c                 C  s   t |tstS | j|jkS r&   )r'   r   rq   r   rr   r.   r.   r/   rs   s  s    
zSubjectInformationAccess.__eq__r4   c                 C  s   t t| jS r&   r   r8   r.   r.   r/   rv   y  s    z!SubjectInformationAccess.__hash__r"   c                 C  s
   t | S r&   ry   r8   r.   r.   r/   r(   |  s    z%SubjectInformationAccess.public_bytesN)rL   rM   rN   r   ZSUBJECT_INFORMATION_ACCESSrD   rG   r?   rc   rd   re   rb   rs   rv   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   rA   )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)r9   r   r   r.   r.   r/   rG     s    

zAccessDescription.__init__r1   r5   c                 C  s   d| j  d| j dS )Nz!<AccessDescription(access_method=z, access_location=ra   )r   r   r8   r.   r.   r/   rb     s    zAccessDescription.__repr__rm   rn   ro   c                 C  s&   t |tstS | j|jko$| j|jkS r&   )r'   r   rq   r   r   rr   r.   r.   r/   rs     s
    

zAccessDescription.__eq__r4   c                 C  s   t | j| jfS r&   )ru   r   r   r8   r.   r.   r/   rv     s    zAccessDescription.__hash__c                 C  s   | j S r&   )r   r8   r.   r.   r/   r     s    zAccessDescription.access_methodc                 C  s   | j S r&   )r   r8   r.   r.   r/   r     s    z!AccessDescription.access_locationN)
rL   rM   rN   rG   rb   rs   rv   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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 )BasicConstraintsrn   r   rA   )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'   rn   r^   r   r4   _ca_path_length)r9   r   r   r.   r.   r/   rG     s    
zBasicConstraints.__init__r5   c                 C  s   | j S r&   )r   r8   r.   r.   r/   r     s    zBasicConstraints.cac                 C  s   | j S r&   )r   r8   r.   r.   r/   r     s    zBasicConstraints.path_lengthr1   c                 C  s   d| j  d| j dS )Nz<BasicConstraints(ca=z, path_length=ra   )r   r   r8   r.   r.   r/   rb     s    zBasicConstraints.__repr__rm   ro   c                 C  s&   t |tstS | j|jko$| j|jkS r&   )r'   r   rq   r   r   rr   r.   r.   r/   rs     s    
zBasicConstraints.__eq__r4   c                 C  s   t | j| jfS r&   )ru   r   r   r8   r.   r.   r/   rv     s    zBasicConstraints.__hash__r"   c                 C  s
   t | S r&   ry   r8   r.   r.   r/   r(     s    zBasicConstraints.public_bytesN)rL   rM   rN   r   ZBASIC_CONSTRAINTSrD   rG   r{   r   r   rb   rs   rv   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 )DeltaCRLIndicatorr4   rA   rg   c                 C  s   t |tstd|| _d S ri   rj   rl   r.   r.   r/   rG     s    
zDeltaCRLIndicator.__init__r5   c                 C  s   | j S r&   rx   r8   r.   r.   r/   rh     s    zDeltaCRLIndicator.crl_numberrm   rn   ro   c                 C  s   t |tstS | j|jkS r&   )r'   r   rq   rh   rr   r.   r.   r/   rs     s    
zDeltaCRLIndicator.__eq__c                 C  s
   t | jS r&   rt   r8   r.   r.   r/   rv     s    zDeltaCRLIndicator.__hash__r1   c                 C  s   d| j  dS )Nz<DeltaCRLIndicator(crl_number=ra   rw   r8   r.   r.   r/   rb     s    zDeltaCRLIndicator.__repr__r"   c                 C  s
   t | S r&   ry   r8   r.   r.   r/   r(     s    zDeltaCRLIndicator.public_bytesN)rL   rM   rN   r   ZDELTA_CRL_INDICATORrD   rG   r{   rh   rs   rv   rb   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]rA   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rV   r   r^   _distribution_pointsr9   r   r.   r.   r/   rG     s    zCRLDistributionPoints.__init__r   r1   r5   c                 C  s   d| j  dS )Nz<CRLDistributionPoints(ra   r   r8   r.   r.   r/   rb     s    zCRLDistributionPoints.__repr__rm   rn   ro   c                 C  s   t |tstS | j|jkS r&   )r'   r   rq   r   rr   r.   r.   r/   rs     s    
zCRLDistributionPoints.__eq__r4   c                 C  s   t t| jS r&   ru   r   r   r8   r.   r.   r/   rv     s    zCRLDistributionPoints.__hash__r"   c                 C  s
   t | S r&   ry   r8   r.   r.   r/   r(     s    z"CRLDistributionPoints.public_bytesN)rL   rM   rN   r   ZCRL_DISTRIBUTION_POINTSrD   rG   r?   rc   rd   re   rb   rs   rv   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   rA   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/   rG     s    zFreshestCRL.__init__r   r1   r5   c                 C  s   d| j  dS )Nz<FreshestCRL(ra   r   r8   r.   r.   r/   rb   -  s    zFreshestCRL.__repr__rm   rn   ro   c                 C  s   t |tstS | j|jkS r&   )r'   r   rq   r   rr   r.   r.   r/   rs   0  s    
zFreshestCRL.__eq__r4   c                 C  s   t t| jS r&   r   r8   r.   r.   r/   rv   6  s    zFreshestCRL.__hash__r"   c                 C  s
   t | S r&   ry   r8   r.   r.   r/   r(   9  s    zFreshestCRL.public_bytesN)rL   rM   rN   r   ZFRESHEST_CRLrD   rG   r?   rc   rd   re   rb   rs   rv   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] | NonerA   )	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   rV   r   r^   r'   r   	frozensetr   unspecifiedremove_from_crl
_full_name_relative_name_reasons_crl_issuer)r9   r   r   r   r   r.   r.   r/   rG   >  sV    
zDistributionPoint.__init__r1   r5   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})>formatr8   r.   r.   r/   rb   x  s    zDistributionPoint.__repr__rm   rn   ro   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   rq   r   r   r   r   rr   r.   r.   r/   rs     s    



zDistributionPoint.__eq__r4   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   ru   r   r   )r9   fnr   r.   r.   r/   rv     s    

zDistributionPoint.__hash__r   c                 C  s   | j S r&   r   r8   r.   r.   r/   r     s    zDistributionPoint.full_namec                 C  s   | j S r&   r   r8   r.   r.   r/   r     s    zDistributionPoint.relative_namec                 C  s   | j S r&   )r   r8   r.   r.   r/   r     s    zDistributionPoint.reasonsc                 C  s   | j S r&   )r   r8   r.   r.   r/   r     s    zDistributionPoint.crl_issuerN)rL   rM   rN   rG   rb   rs   rv   r{   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)rL   rM   rN   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   rA   )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'   r4   r^   r   _require_explicit_policy_inhibit_policy_mapping)r9   r   r   r.   r.   r/   rG     s(    
 
 zPolicyConstraints.__init__r1   r5   c                 C  s
   d | S )Nz{<PolicyConstraints(require_explicit_policy={0.require_explicit_policy}, inhibit_policy_mapping={0.inhibit_policy_mapping})>r   r8   r.   r.   r/   rb     s    zPolicyConstraints.__repr__rm   rn   ro   c                 C  s&   t |tstS | j|jko$| j|jkS r&   )r'   r   rq   r   r   rr   r.   r.   r/   rs     s
    

zPolicyConstraints.__eq__r4   c                 C  s   t | j| jfS r&   )ru   r   r   r8   r.   r.   r/   rv   !  s    
zPolicyConstraints.__hash__c                 C  s   | j S r&   )r   r8   r.   r.   r/   r   &  s    z)PolicyConstraints.require_explicit_policyc                 C  s   | j S r&   )r   r8   r.   r.   r/   r   *  s    z(PolicyConstraints.inhibit_policy_mappingr"   c                 C  s
   t | S r&   ry   r8   r.   r.   r/   r(   .  s    zPolicyConstraints.public_bytesN)rL   rM   rN   r   ZPOLICY_CONSTRAINTSrD   rG   rb   rs   rv   r{   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]rA   )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)rV   r   r^   	_policies)r9   r   r.   r.   r/   rG   5  s    zCertificatePolicies.__init__r   r1   r5   c                 C  s   d| j  dS )Nz<CertificatePolicies(ra   )r   r8   r.   r.   r/   rb   @  s    zCertificatePolicies.__repr__rm   rn   ro   c                 C  s   t |tstS | j|jkS r&   )r'   r   rq   r   rr   r.   r.   r/   rs   C  s    
zCertificatePolicies.__eq__r4   c                 C  s   t t| jS r&   )ru   r   r   r8   r.   r.   r/   rv   I  s    zCertificatePolicies.__hash__r"   c                 C  s
   t | S r&   ry   r8   r.   r.   r/   r(   L  s    z CertificatePolicies.public_bytesN)rL   rM   rN   r   ZCERTIFICATE_POLICIESrD   rG   r?   rc   rd   re   rb   rs   rv   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] | NonerA   )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'   r1   
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_identifierrV   r   _policy_qualifiers)r9   r   r   r.   r.   r/   rG   Q  s    
zPolicyInformation.__init__r1   r5   c                 C  s   d| j  d| j dS )Nz%<PolicyInformation(policy_identifier=z, policy_qualifiers=ra   )r   r   r8   r.   r.   r/   rb   g  s    zPolicyInformation.__repr__rm   rn   ro   c                 C  s&   t |tstS | j|jko$| j|jkS r&   )r'   r   rq   r   r   rr   r.   r.   r/   rs   m  s
    

zPolicyInformation.__eq__r4   c                 C  s(   | j d k	rt| j }nd }t| j|fS r&   )r   r   ru   r   )r9   Zpqr.   r.   r/   rv   v  s    
zPolicyInformation.__hash__c                 C  s   | j S r&   )r   r8   r.   r.   r/   r   ~  s    z#PolicyInformation.policy_identifierzlist[str | UserNotice] | Nonec                 C  s   | j S r&   )r   r8   r.   r.   r/   r     s    z#PolicyInformation.policy_qualifiersN)
rL   rM   rN   rG   rb   rs   rv   r{   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 | NonerA   )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)r9   r   r   r.   r.   r/   rG     s     zUserNotice.__init__r1   r5   c                 C  s   d| j  d| jdS )Nz<UserNotice(notice_reference=z, explicit_text=ra   )r   r   r8   r.   r.   r/   rb     s    zUserNotice.__repr__rm   rn   ro   c                 C  s&   t |tstS | j|jko$| j|jkS r&   )r'   r   rq   r   r   rr   r.   r.   r/   rs     s
    

zUserNotice.__eq__r4   c                 C  s   t | j| jfS r&   )ru   r   r   r8   r.   r.   r/   rv     s    zUserNotice.__hash__c                 C  s   | j S r&   )r   r8   r.   r.   r/   r     s    zUserNotice.notice_referencec                 C  s   | j S r&   )r   r8   r.   r.   r/   r     s    zUserNotice.explicit_textN)
rL   rM   rN   rG   rb   rs   rv   r{   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]rA   )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'   r4   r   r.   r.   r/   r     s     z+NoticeReference.__init__.<locals>.<genexpr>z)notice_numbers must be a list of integers)_organizationrV   r   r^   _notice_numbers)r9   r   r   r.   r.   r/   rG     s
    zNoticeReference.__init__r1   r5   c                 C  s   d| j d| j dS )Nz<NoticeReference(organization=z, notice_numbers=ra   )r   r   r8   r.   r.   r/   rb     s    zNoticeReference.__repr__rm   rn   ro   c                 C  s&   t |tstS | j|jko$| j|jkS r&   )r'   r   rq   r   r   rr   r.   r.   r/   rs     s
    

zNoticeReference.__eq__r4   c                 C  s   t | jt| jfS r&   )ru   r   r   r   r8   r.   r.   r/   rv     s    zNoticeReference.__hash__c                 C  s   | j S r&   )r   r8   r.   r.   r/   r     s    zNoticeReference.organizationz	list[int]c                 C  s   | j S r&   )r   r8   r.   r.   r/   r     s    zNoticeReference.notice_numbersN)
rL   rM   rN   rG   rb   rs   rv   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 )ExtendedKeyUsageIterable[ObjectIdentifier]rA   )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)rV   r   r^   _usages)r9   r   r.   r.   r/   rG     s    zExtendedKeyUsage.__init__r  r1   r5   c                 C  s   d| j  dS )Nz<ExtendedKeyUsage(ra   )r  r8   r.   r.   r/   rb     s    zExtendedKeyUsage.__repr__rm   rn   ro   c                 C  s   t |tstS | j|jkS r&   )r'   r   rq   r  rr   r.   r.   r/   rs     s    
zExtendedKeyUsage.__eq__r4   c                 C  s   t t| jS r&   )ru   r   r  r8   r.   r.   r/   rv     s    zExtendedKeyUsage.__hash__r"   c                 C  s
   t | S r&   ry   r8   r.   r.   r/   r(     s    zExtendedKeyUsage.public_bytesN)rL   rM   rN   r   ZEXTENDED_KEY_USAGErD   rG   r?   rc   rd   re   rb   rs   rv   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 )OCSPNoCheckrm   rn   ro   c                 C  s   t |tstS dS NT)r'   r  rq   rr   r.   r.   r/   rs     s    
zOCSPNoCheck.__eq__r4   r5   c                 C  s   t tS r&   )ru   r  r8   r.   r.   r/   rv     s    zOCSPNoCheck.__hash__r1   c                 C  s   dS )Nz<OCSPNoCheck()>r.   r8   r.   r.   r/   rb     s    zOCSPNoCheck.__repr__r"   c                 C  s
   t | S r&   ry   r8   r.   r.   r/   r(   	  s    zOCSPNoCheck.public_bytesN)
rL   rM   rN   r   ZOCSP_NO_CHECKrD   rs   rv   rb   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 )PrecertPoisonrm   rn   ro   c                 C  s   t |tstS dS r  )r'   r  rq   rr   r.   r.   r/   rs     s    
zPrecertPoison.__eq__r4   r5   c                 C  s   t tS r&   )ru   r  r8   r.   r.   r/   rv     s    zPrecertPoison.__hash__r1   c                 C  s   dS )Nz<PrecertPoison()>r.   r8   r.   r.   r/   rb     s    zPrecertPoison.__repr__r"   c                 C  s
   t | S r&   ry   r8   r.   r.   r/   r(     s    zPrecertPoison.public_bytesN)
rL   rM   rN   r   ZPRECERT_POISONrD   rs   rv   rb   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]rA   )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)rV   r   r6   r^   	_features)r9   r  r.   r.   r/   rG   #  s    
zTLSFeature.__init__r  r1   r5   c                 C  s   d| j  dS )Nz<TLSFeature(features=ra   )r  r8   r.   r.   r/   rb   2  s    zTLSFeature.__repr__rm   rn   ro   c                 C  s   t |tstS | j|jkS r&   )r'   r  rq   r  rr   r.   r.   r/   rs   5  s    
zTLSFeature.__eq__r4   c                 C  s   t t| jS r&   )ru   r   r  r8   r.   r.   r/   rv   ;  s    zTLSFeature.__hash__r"   c                 C  s
   t | S r&   ry   r8   r.   r.   r/   r(   >  s    zTLSFeature.public_bytesN)rL   rM   rN   r   ZTLS_FEATURErD   rG   r?   rc   rd   re   rb   rs   rv   r(   r.   r.   r.   r/   r     s   r  c                   @  s   e Zd ZdZdZdS )r  r      N)rL   rM   rN   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 )InhibitAnyPolicyr4   rA   )
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'   r4   r^   r   _skip_certs)r9   r  r.   r.   r/   rG   S  s
    
zInhibitAnyPolicy.__init__r1   r5   c                 C  s   d| j  dS )Nz<InhibitAnyPolicy(skip_certs=ra   )r  r8   r.   r.   r/   rb   \  s    zInhibitAnyPolicy.__repr__rm   rn   ro   c                 C  s   t |tstS | j|jkS r&   )r'   r  rq   r  rr   r.   r.   r/   rs   _  s    
zInhibitAnyPolicy.__eq__c                 C  s
   t | jS r&   )ru   r  r8   r.   r.   r/   rv   e  s    zInhibitAnyPolicy.__hash__c                 C  s   | j S r&   )r  r8   r.   r.   r/   r  h  s    zInhibitAnyPolicy.skip_certsr"   c                 C  s
   t | S r&   ry   r8   r.   r.   r/   r(   l  s    zInhibitAnyPolicy.public_bytesN)rL   rM   rN   r   ZINHIBIT_ANY_POLICYrD   rG   rb   rs   rv   r{   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 )'KeyUsagern   rA   )
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)
r9   r  r  r  r  r  r  r  r  r  r.   r.   r/   rG   s  s    zKeyUsage.__init__r5   c                 C  s   | j S r&   )r  r8   r.   r.   r/   r    s    zKeyUsage.digital_signaturec                 C  s   | j S r&   )r  r8   r.   r.   r/   r    s    zKeyUsage.content_commitmentc                 C  s   | j S r&   )r  r8   r.   r.   r/   r    s    zKeyUsage.key_enciphermentc                 C  s   | j S r&   )r  r8   r.   r.   r/   r    s    zKeyUsage.data_enciphermentc                 C  s   | j S r&   )r  r8   r.   r.   r/   r    s    zKeyUsage.key_agreementc                 C  s   | j S r&   )r  r8   r.   r.   r/   r    s    zKeyUsage.key_cert_signc                 C  s   | j S r&   )r  r8   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   r8   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!  r8   r.   r.   r/   r    s
    zKeyUsage.decipher_onlyr1   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=ra   )
r  r  r   r  r  r  r  r  r  r  )r9   r  r  r.   r.   r/   rb     s    

HzKeyUsage.__repr__rm   ro   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  rq   r  r  r  r  r  r  r  r   r!  rr   r.   r.   r/   rs     s&    








zKeyUsage.__eq__r4   c              
   C  s,   t | j| j| j| j| j| j| j| j| j	f	S r&   )
ru   r  r  r  r  r  r  r  r   r!  r8   r.   r.   r/   rv     s    zKeyUsage.__hash__r"   c                 C  s
   t | S r&   ry   r8   r.   r.   r/   r(     s    zKeyUsage.public_bytesN)rL   rM   rN   r   Z	KEY_USAGErD   rG   r{   r  r  r  r  r  r  r  r  r  rb   rs   rv   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 | NonerA   )
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)r9   r#  r$  r.   r.   r/   rG     s.    

zPrivateKeyUsagePeriod.__init__r5   c                 C  s   | j S r&   )r&  r8   r.   r.   r/   r#    s    z PrivateKeyUsagePeriod.not_beforec                 C  s   | j S r&   )r'  r8   r.   r.   r/   r$    s    zPrivateKeyUsagePeriod.not_afterr1   c                 C  s   d| j  d| j dS )Nz"<PrivateKeyUsagePeriod(not_before=z, not_after=ra   )r#  r$  r8   r.   r.   r/   rb      s    zPrivateKeyUsagePeriod.__repr__rm   rn   ro   c                 C  s&   t |tstS | j|jko$| j|jkS r&   )r'   r"  rq   r#  r$  rr   r.   r.   r/   rs   &  s
    

zPrivateKeyUsagePeriod.__eq__r4   c                 C  s   t | j| jfS r&   )ru   r#  r$  r8   r.   r.   r/   rv   /  s    zPrivateKeyUsagePeriod.__hash__r"   c                 C  s
   t | S r&   ry   r8   r.   r.   r/   r(   2  s    z"PrivateKeyUsagePeriod.public_bytesN)rL   rM   rN   r   ZPRIVATE_KEY_USAGE_PERIODrD   rG   r{   r#  r$  rb   rs   rv   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~   rA   )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)rV   r   r   r^   _validate_tree_permitted_subtrees_excluded_subtrees)r9   r)  r*  r.   r.   r/   rG   9  s8    

zNameConstraints.__init__rm   rn   ro   c                 C  s&   t |tstS | j|jko$| j|jkS r&   )r'   r(  rq   r*  r)  rr   r.   r.   r/   rs   c  s
    

zNameConstraints.__eq__Iterable[GeneralName])treer%   c                 C  s   |  | | | d S r&   )_validate_ip_name_validate_dns_namer9   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^   r2  r.   r.   r/   r0  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_   r6  r.   r.   r/   r   ~  s    z5NameConstraints._validate_dns_name.<locals>.<genexpr>zDDNSName name constraints must not contain the '*' wildcard character)r8  r   r2  r.   r.   r/   r1  }  s    z"NameConstraints._validate_dns_namer1   r5   c                 C  s   d| j  d| j dS )Nz$<NameConstraints(permitted_subtrees=z, excluded_subtrees=ra   )r)  r*  r8   r.   r.   r/   rb     s    zNameConstraints.__repr__r4   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*  ru   )r9   Zpsesr.   r.   r/   rv     s    

zNameConstraints.__hash__r   c                 C  s   | j S r&   )r,  r8   r.   r.   r/   r)    s    z"NameConstraints.permitted_subtreesc                 C  s   | j S r&   )r-  r8   r.   r.   r/   r*    s    z!NameConstraints.excluded_subtreesr"   c                 C  s
   t | S r&   ry   r8   r.   r.   r/   r(     s    zNameConstraints.public_bytesN)rL   rM   rN   r   ZNAME_CONSTRAINTSrD   rG   rs   r+  r0  r1  rb   rv   r{   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   rn   r   rA   )rD   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^   rn   _oid	_critical_value)r9   rD   r<  r_   r.   r.   r/   rG     s    

zExtension.__init__r5   c                 C  s   | j S r&   r=  r8   r.   r.   r/   rD     s    zExtension.oidc                 C  s   | j S r&   )r>  r8   r.   r.   r/   r<    s    zExtension.criticalc                 C  s   | j S r&   r?  r8   r.   r.   r/   r_     s    zExtension.valuer1   c                 C  s   d| j  d| j d| j dS )Nz<Extension(oid=z, critical=, value=ra   )rD   r<  r_   r8   r.   r.   r/   rb     s    zExtension.__repr__rm   ro   c                 C  s2   t |tstS | j|jko0| j|jko0| j|jkS r&   )r'   r;  rq   rD   r<  r_   rr   r.   r.   r/   rs     s    


zExtension.__eq__r4   c                 C  s   t | j| j| jfS r&   )ru   rD   r<  r_   r8   r.   r.   r/   rv     s    zExtension.__hash__N)rL   rM   rN   rG   r{   rD   r<  r_   rb   rs   rv   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.  rA   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)rV   r   r^   _general_namesr9   rE  r.   r.   r/   rG     s    zGeneralNames.__init__rF  Btype[DNSName] | type[UniformResourceIdentifier] | type[RFC822Name]	list[str]typer%   c                 C  s   d S r&   r.   r9   rK  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.   rL  r.   r.   r/   rM    s    type[RegisteredID]list[ObjectIdentifier]c                 C  s   d S r&   r.   rL  r.   r.   r/   rM    s    type[IPAddress]list[_IPAddressTypes]c                 C  s   d S r&   r.   rL  r.   r.   r/   rM    s    type[OtherName]list[OtherName]c                 C  s   d S r&   r.   rL  r.   r.   r/   rM    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rK  r.   r/   r     s     
 z3GeneralNames.get_values_for_type.<locals>.<genexpr>c                 S  s   g | ]
}|j qS r.   r
  rX  r.   r.   r/   
<listcomp>  s     z4GeneralNames.get_values_for_type.<locals>.<listcomp>)r   rV   )r9   rK  objsr.   rZ  r/   rM    s    r1   r5   c                 C  s   d| j  dS )Nz<GeneralNames(ra   rF  r8   r.   r.   r/   rb     s    zGeneralNames.__repr__rm   rn   ro   c                 C  s   t |tstS | j|jkS r&   )r'   rC  rq   rF  rr   r.   r.   r/   rs     s    
zGeneralNames.__eq__r4   c                 C  s   t t| jS r&   )ru   r   rF  r8   r.   r.   r/   rv   %  s    zGeneralNames.__hash__N)rL   rM   rN   rG   r?   rc   rd   re   typingoverloadrM  rb   rs   rv   r.   r.   r.   r/   rC    s    
rC  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.  rA   rD  c                 C  s   t || _d S r&   rC  rF  rG  r.   r.   r/   rG   ,  s    zSubjectAlternativeName.__init__rF  rH  rI  rJ  c                 C  s   d S r&   r.   rL  r.   r.   r/   rM  1  s    z*SubjectAlternativeName.get_values_for_typerN  rO  c                 C  s   d S r&   r.   rL  r.   r.   r/   rM  9  s    rP  rQ  c                 C  s   d S r&   r.   rL  r.   r.   r/   rM  ?  s    rR  rS  c                 C  s   d S r&   r.   rL  r.   r.   r/   rM  E  s    rT  rU  c                 C  s   d S r&   r.   rL  r.   r.   r/   rM  J  s    rV  rW  c                 C  s   | j |S r&   rF  rM  rL  r.   r.   r/   rM  O  s    r1   r5   c                 C  s   d| j  dS )Nz<SubjectAlternativeName(ra   r]  r8   r.   r.   r/   rb   a  s    zSubjectAlternativeName.__repr__rm   rn   ro   c                 C  s   t |tstS | j|jkS r&   )r'   r`  rq   rF  rr   r.   r.   r/   rs   d  s    
zSubjectAlternativeName.__eq__r4   c                 C  s
   t | jS r&   ru   rF  r8   r.   r.   r/   rv   j  s    zSubjectAlternativeName.__hash__r"   c                 C  s
   t | S r&   ry   r8   r.   r.   r/   r(   m  s    z#SubjectAlternativeName.public_bytesN)rL   rM   rN   r   ZSUBJECT_ALTERNATIVE_NAMErD   rG   r?   rc   rd   re   r^  r_  rM  rb   rs   rv   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.  rA   rD  c                 C  s   t || _d S r&   ra  rG  r.   r.   r/   rG   t  s    zIssuerAlternativeName.__init__rF  rH  rI  rJ  c                 C  s   d S r&   r.   rL  r.   r.   r/   rM  y  s    z)IssuerAlternativeName.get_values_for_typerN  rO  c                 C  s   d S r&   r.   rL  r.   r.   r/   rM    s    rP  rQ  c                 C  s   d S r&   r.   rL  r.   r.   r/   rM    s    rR  rS  c                 C  s   d S r&   r.   rL  r.   r.   r/   rM    s    rT  rU  c                 C  s   d S r&   r.   rL  r.   r.   r/   rM    s    rV  rW  c                 C  s   | j |S r&   rb  rL  r.   r.   r/   rM    s    r1   r5   c                 C  s   d| j  dS )Nz<IssuerAlternativeName(ra   r]  r8   r.   r.   r/   rb     s    zIssuerAlternativeName.__repr__rm   rn   ro   c                 C  s   t |tstS | j|jkS r&   )r'   rd  rq   rF  rr   r.   r.   r/   rs     s    
zIssuerAlternativeName.__eq__r4   c                 C  s
   t | jS r&   rc  r8   r.   r.   r/   rv     s    zIssuerAlternativeName.__hash__r"   c                 C  s
   t | S r&   ry   r8   r.   r.   r/   r(     s    z"IssuerAlternativeName.public_bytesN)rL   rM   rN   r   ZISSUER_ALTERNATIVE_NAMErD   rG   r?   rc   rd   re   r^  r_  rM  rb   rs   rv   r(   r.   r.   r.   r/   rd  q  s$   rd  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.  rA   rD  c                 C  s   t || _d S r&   ra  rG  r.   r.   r/   rG     s    zCertificateIssuer.__init__rF  rH  rI  rJ  c                 C  s   d S r&   r.   rL  r.   r.   r/   rM    s    z%CertificateIssuer.get_values_for_typerN  rO  c                 C  s   d S r&   r.   rL  r.   r.   r/   rM    s    rP  rQ  c                 C  s   d S r&   r.   rL  r.   r.   r/   rM    s    rR  rS  c                 C  s   d S r&   r.   rL  r.   r.   r/   rM    s    rT  rU  c                 C  s   d S r&   r.   rL  r.   r.   r/   rM    s    rV  rW  c                 C  s   | j |S r&   rb  rL  r.   r.   r/   rM    s    r1   r5   c                 C  s   d| j  dS )Nz<CertificateIssuer(ra   r]  r8   r.   r.   r/   rb     s    zCertificateIssuer.__repr__rm   rn   ro   c                 C  s   t |tstS | j|jkS r&   )r'   re  rq   rF  rr   r.   r.   r/   rs     s    
zCertificateIssuer.__eq__r4   c                 C  s
   t | jS r&   rc  r8   r.   r.   r/   rv     s    zCertificateIssuer.__hash__r"   c                 C  s
   t | S r&   ry   r8   r.   r.   r/   r(     s    zCertificateIssuer.public_bytesN)rL   rM   rN   r   ZCERTIFICATE_ISSUERrD   rG   r?   rc   rd   re   r^  r_  rM  rb   rs   rv   r(   r.   r.   r.   r/   re    s$   re  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   rA   )reasonr%   c                 C  s   t |tstd|| _d S )Nz*reason must be an element from ReasonFlags)r'   r   r^   _reason)r9   rg  r.   r.   r/   rG     s    
zCRLReason.__init__r1   r5   c                 C  s   d| j  dS )Nz<CRLReason(reason=ra   rh  r8   r.   r.   r/   rb   
  s    zCRLReason.__repr__rm   rn   ro   c                 C  s   t |tstS | j|jkS r&   )r'   rf  rq   rg  rr   r.   r.   r/   rs     s    
zCRLReason.__eq__r4   c                 C  s
   t | jS r&   )ru   rg  r8   r.   r.   r/   rv     s    zCRLReason.__hash__c                 C  s   | j S r&   ri  r8   r.   r.   r/   rg    s    zCRLReason.reasonr"   c                 C  s
   t | S r&   ry   r8   r.   r.   r/   r(     s    zCRLReason.public_bytesN)rL   rM   rN   r   Z
CRL_REASONrD   rG   rb   rs   rv   r{   rg  r(   r.   r.   r.   r/   rf    s   rf  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.datetimerA   )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)r9   rk  r.   r.   r/   rG   !  s    zInvalidityDate.__init__r1   r5   c                 C  s   d| j  dS )Nz <InvalidityDate(invalidity_date=ra   rl  r8   r.   r.   r/   rb   '  s    zInvalidityDate.__repr__rm   rn   ro   c                 C  s   t |tstS | j|jkS r&   )r'   rj  rq   rk  rr   r.   r.   r/   rs   *  s    
zInvalidityDate.__eq__r4   c                 C  s
   t | jS r&   )ru   rk  r8   r.   r.   r/   rv   0  s    zInvalidityDate.__hash__c                 C  s   | j S r&   rm  r8   r.   r.   r/   rk  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)rl  rn  replacer%  timezoneutc
astimezoner8   r.   r.   r/   invalidity_date_utc7  s    z"InvalidityDate.invalidity_date_utcr"   c                 C  s
   t | S r&   ry   r8   r.   r.   r/   r(   >  s    zInvalidityDate.public_bytesN)rL   rM   rN   r   ZINVALIDITY_DATErD   rG   rb   rs   rv   r{   rk  rt  r(   r.   r.   r.   r/   rj    s   rj  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]rA   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rV   r   r^   _signed_certificate_timestampsr9   rx  r.   r.   r/   rG   E  s    z2PrecertificateSignedCertificateTimestamps.__init__r}  r1   r5   c                 C  s   dt |  dS )Nz+<PrecertificateSignedCertificateTimestamps(ra   rV   r8   r.   r.   r/   rb   X  s    z2PrecertificateSignedCertificateTimestamps.__repr__r4   c                 C  s   t t| jS r&   ru   r   r}  r8   r.   r.   r/   rv   [  s    z2PrecertificateSignedCertificateTimestamps.__hash__rm   rn   ro   c                 C  s   t |tstS | j|jkS r&   )r'   ru  rq   r}  rr   r.   r.   r/   rs   ^  s    
z0PrecertificateSignedCertificateTimestamps.__eq__r"   c                 C  s
   t | S r&   ry   r8   r.   r.   r/   r(   g  s    z6PrecertificateSignedCertificateTimestamps.public_bytesN)rL   rM   rN   r   Z%PRECERT_SIGNED_CERTIFICATE_TIMESTAMPSrD   rG   r?   rc   rd   re   rb   rv   rs   r(   r.   r.   r.   r/   ru  B  s   
	ru  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 )SignedCertificateTimestampsrv  rA   rw  c                 C  s,   t |}tdd |D s"td|| _d S )Nc                 s  s   | ]}t |tV  qd S r&   ry  rz  r.   r.   r/   r   s  s   z7SignedCertificateTimestamps.__init__.<locals>.<genexpr>r{  r|  r~  r.   r.   r/   rG   n  s    z$SignedCertificateTimestamps.__init__r}  r1   r5   c                 C  s   dt |  dS )Nz<SignedCertificateTimestamps(ra   r  r8   r.   r.   r/   rb     s    z$SignedCertificateTimestamps.__repr__r4   c                 C  s   t t| jS r&   r  r8   r.   r.   r/   rv     s    z$SignedCertificateTimestamps.__hash__rm   rn   ro   c                 C  s   t |tstS | j|jkS r&   )r'   r  rq   r}  rr   r.   r.   r/   rs     s    
z"SignedCertificateTimestamps.__eq__r"   c                 C  s
   t | S r&   ry   r8   r.   r.   r/   r(     s    z(SignedCertificateTimestamps.public_bytesN)rL   rM   rN   r   ZSIGNED_CERTIFICATE_TIMESTAMPSrD   rG   r?   rc   rd   re   rb   rv   rs   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"   rA   )noncer%   c                 C  s   t |tstd|| _d S )Nznonce must be bytes)r'   r"   r^   _nonce)r9   r  r.   r.   r/   rG     s    
zOCSPNonce.__init__rm   rn   ro   c                 C  s   t |tstS | j|jkS r&   )r'   r  rq   r  rr   r.   r.   r/   rs     s    
zOCSPNonce.__eq__r4   r5   c                 C  s
   t | jS r&   )ru   r  r8   r.   r.   r/   rv     s    zOCSPNonce.__hash__r1   c                 C  s   d| j dS )Nz<OCSPNonce(nonce=ra   )r  r8   r.   r.   r/   rb     s    zOCSPNonce.__repr__c                 C  s   | j S r&   )r  r8   r.   r.   r/   r    s    zOCSPNonce.noncec                 C  s
   t | S r&   ry   r8   r.   r.   r/   r(     s    zOCSPNonce.public_bytesN)rL   rM   rN   r   ZNONCErD   rG   rs   rv   rb   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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   rA   )	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)rV   r8  r^   
_responses)r9   r  r.   r.   r/   rG     s    z OCSPAcceptableResponses.__init__rm   rn   ro   c                 C  s   t |tstS | j|jkS r&   )r'   r  rq   r  rr   r.   r.   r/   rs     s    
zOCSPAcceptableResponses.__eq__r4   r5   c                 C  s   t t| jS r&   )ru   r   r  r8   r.   r.   r/   rv     s    z OCSPAcceptableResponses.__hash__r1   c                 C  s   d| j  dS )Nz#<OCSPAcceptableResponses(responses=ra   )r  r8   r.   r.   r/   rb     s    z OCSPAcceptableResponses.__repr__zIterator[ObjectIdentifier]c                 C  s
   t | jS r&   )r;   r  r8   r.   r.   r/   rd     s    z OCSPAcceptableResponses.__iter__r"   c                 C  s
   t | S r&   ry   r8   r.   r.   r/   r(     s    z$OCSPAcceptableResponses.public_bytesN)rL   rM   rN   r   ZACCEPTABLE_RESPONSESrD   rG   rs   rv   rb   rd   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   rn   r   rA   )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/   r[    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.)rV   r'   r   r   r^   r   r   r   r   rn   r6   r8  _only_contains_user_certs_only_contains_ca_certs_indirect_crl_only_contains_attribute_certs_only_some_reasonsr   r   )	r9   r   r   r  r  r  r  r  Zcrl_constraintsr.   r.   r/   rG     sr    

z!IssuingDistributionPoint.__init__r1   r5   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=ra   )r   r   r  r  r  r  r  r8   r.   r.   r/   rb   &  s    <z!IssuingDistributionPoint.__repr__rm   ro   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  rq   r   r   r  r  r  r  r  rr   r.   r.   r/   rs   2  s"    





zIssuingDistributionPoint.__eq__r4   c                 C  s$   t | j| j| j| j| j| j| jfS r&   )ru   r   r   r  r  r  r  r  r8   r.   r.   r/   rv   A  s    z!IssuingDistributionPoint.__hash__r   c                 C  s   | j S r&   r   r8   r.   r.   r/   r   N  s    z"IssuingDistributionPoint.full_namec                 C  s   | j S r&   r   r8   r.   r.   r/   r   R  s    z&IssuingDistributionPoint.relative_namec                 C  s   | j S r&   )r  r8   r.   r.   r/   r  V  s    z1IssuingDistributionPoint.only_contains_user_certsc                 C  s   | j S r&   )r  r8   r.   r.   r/   r  Z  s    z/IssuingDistributionPoint.only_contains_ca_certsc                 C  s   | j S r&   )r  r8   r.   r.   r/   r  ^  s    z*IssuingDistributionPoint.only_some_reasonsc                 C  s   | j S r&   )r  r8   r.   r.   r/   r  d  s    z%IssuingDistributionPoint.indirect_crlc                 C  s   | j S r&   )r  r8   r.   r.   r/   r  h  s    z6IssuingDistributionPoint.only_contains_attribute_certsr"   c                 C  s
   t | S r&   ry   r8   r.   r.   r/   r(   l  s    z%IssuingDistributionPoint.public_bytesN)rL   rM   rN   r   ZISSUING_DISTRIBUTION_POINTrD   rG   rb   rs   rv   r{   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   rA   )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_idr4   _major_version_minor_version)r9   r  r  r  r.   r.   r/   rG   s  s     
zMSCertificateTemplate.__init__r5   c                 C  s   | j S r&   )r  r8   r.   r.   r/   r    s    z!MSCertificateTemplate.template_idc                 C  s   | j S r&   )r  r8   r.   r.   r/   r    s    z#MSCertificateTemplate.major_versionc                 C  s   | j S r&   )r  r8   r.   r.   r/   r    s    z#MSCertificateTemplate.minor_versionr1   c                 C  s   d| j  d| j d| j dS )Nz#<MSCertificateTemplate(template_id=z, major_version=z, minor_version=ra   )r  r  r  r8   r.   r.   r/   rb     s    zMSCertificateTemplate.__repr__rm   rn   ro   c                 C  s2   t |tstS | j|jko0| j|jko0| j|jkS r&   )r'   r  rq   r  r  r  rr   r.   r.   r/   rs     s    


zMSCertificateTemplate.__eq__r4   c                 C  s   t | j| j| jfS r&   )ru   r  r  r  r8   r.   r.   r/   rv     s    zMSCertificateTemplate.__hash__r"   c                 C  s
   t | S r&   ry   r8   r.   r.   r/   r(     s    z"MSCertificateTemplate.public_bytesN)rL   rM   rN   r   ZMS_CERTIFICATE_TEMPLATErD   rG   r{   r  r  r  rb   rs   rv   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   rA   )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^   r1   _id_url_text)r9   r  r  r  r.   r.   r/   rG     s    zNamingAuthority.__init__r5   c                 C  s   | j S r&   )r  r8   r.   r.   r/   r    s    zNamingAuthority.idc                 C  s   | j S r&   )r  r8   r.   r.   r/   r    s    zNamingAuthority.urlc                 C  s   | j S r&   )r  r8   r.   r.   r/   r    s    zNamingAuthority.textr1   c                 C  s   d| j  d| j d| j dS )Nz<NamingAuthority(id=z, url=z, text=ra   )r  r  r  r8   r.   r.   r/   rb     s    zNamingAuthority.__repr__rm   rn   ro   c                 C  s2   t |tstS | j|jko0| j|jko0| j|jkS r&   )r'   r  rq   r  r  r  rr   r.   r.   r/   rs     s    


zNamingAuthority.__eq__r4   c                 C  s   t | j| j| jfS r&   )ru   r  r  r  r8   r.   r.   r/   rv     s    zNamingAuthority.__hash__N)rL   rM   rN   rG   r{   r  r  r  rb   rs   rv   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}   rA   )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'   r1   )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   rD   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^   rV   r   r1   r"   _naming_authority_profession_items_profession_oids_registration_number_add_profession_info)r9   r  r  r  r  r  r.   r.   r/   rG     sB    
 
 
 zProfessionInfo.__init__r5   c                 C  s   | j S r&   r  r8   r.   r.   r/   r  	  s    zProfessionInfo.naming_authorityrI  c                 C  s   | j S r&   )r  r8   r.   r.   r/   r  	  s    zProfessionInfo.profession_itemszlist[ObjectIdentifier] | Nonec                 C  s   | j S r&   )r  r8   r.   r.   r/   r  	  s    zProfessionInfo.profession_oidsc                 C  s   | j S r&   )r  r8   r.   r.   r/   r  	  s    z"ProfessionInfo.registration_numberc                 C  s   | j S r&   )r  r8   r.   r.   r/   r  #	  s    z"ProfessionInfo.add_profession_infor1   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=ra   )r  r  r  r  r  r8   r.   r.   r/   rb   '	  s    ,zProfessionInfo.__repr__rm   rn   ro   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  rq   r  r  r  r  r  rr   r.   r.   r/   rs   0	  s    




zProfessionInfo.__eq__r4   c                 C  s8   | j d k	rt| j }nd }t| jt| j|| j| jfS r&   )r  r   ru   r  r  r  r  )r9   r  r.   r.   r/   rv   <	  s    
zProfessionInfo.__hash__N)rL   rM   rN   rG   r{   r  r  r  r  r  rb   rs   rv   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]rA   )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  rV   r   _admission_authorityr  _profession_infos)r9   r  r  r  r.   r.   r/   rG   M	  s(    
 
 zAdmission.__init__r5   c                 C  s   | j S r&   )r  r8   r.   r.   r/   r  j	  s    zAdmission.admission_authorityc                 C  s   | j S r&   r  r8   r.   r.   r/   r  n	  s    zAdmission.naming_authorityzlist[ProfessionInfo]c                 C  s   | j S r&   )r  r8   r.   r.   r/   r  r	  s    zAdmission.profession_infosr1   c                 C  s   d| j  d| j d| j dS )Nz<Admission(admission_authority=z, naming_authority=z, profession_infos=ra   )r  r  r  r8   r.   r.   r/   rb   v	  s    zAdmission.__repr__rm   rn   ro   c                 C  s2   t |tstS | j|jko0| j|jko0| j|jkS r&   )r'   r  rq   r  r  r  rr   r.   r.   r/   rs   }	  s    


zAdmission.__eq__r4   c                 C  s   t | j| jt| jfS r&   )ru   r  r  r   r  r8   r.   r.   r/   rv   	  s    zAdmission.__hash__N)rL   rM   rN   rG   r{   r  r  r  rb   rs   rv   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]rA   )	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^   rV   r   
_authority_admissions)r9   r  r  r.   r.   r/   rG   	  s    zAdmissions.__init__r  r5   c                 C  s   | j S r&   )r  r8   r.   r.   r/   r  	  s    zAdmissions.authorityr1   c                 C  s   d| j  d| j dS )Nz<Admissions(authority=z, admissions=ra   )r  r  r8   r.   r.   r/   rb   	  s    zAdmissions.__repr__rm   rn   ro   c                 C  s&   t |tstS | j|jko$| j|jkS r&   )r'   r  rq   r  r  rr   r.   r.   r/   rs   	  s
    

zAdmissions.__eq__r4   c                 C  s   t | jt| jfS r&   )ru   r  r   r  r8   r.   r.   r/   rv   	  s    zAdmissions.__hash__r"   c                 C  s
   t | S r&   ry   r8   r.   r.   r/   r(   	  s    zAdmissions.public_bytesN)rL   rM   rN   r   Z
ADMISSIONSrD   rG   r?   rc   rd   re   r{   r  rb   rs   rv   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"   rA   )rD   r_   r%   c                 C  s"   t |tstd|| _|| _d S )Nr  )r'   r   r^   r=  r?  )r9   rD   r_   r.   r.   r/   rG   	  s    
zUnrecognizedExtension.__init__r5   c                 C  s   | j S r&   r@  r8   r.   r.   r/   rD   	  s    zUnrecognizedExtension.oidc                 C  s   | j S r&   rA  r8   r.   r.   r/   r_   	  s    zUnrecognizedExtension.valuer1   c                 C  s   d| j  d| jdS )Nz<UnrecognizedExtension(oid=rB  ra   )rD   r_   r8   r.   r.   r/   rb   	  s    zUnrecognizedExtension.__repr__rm   rn   ro   c                 C  s&   t |tstS | j|jko$| j|jkS r&   )r'   r]   rq   rD   r_   rr   r.   r.   r/   rs   	  s    
zUnrecognizedExtension.__eq__r4   c                 C  s   t | j| jfS r&   )ru   rD   r_   r8   r.   r.   r/   rv   	  s    zUnrecognizedExtension.__hash__c                 C  s   | j S r&   r
  r8   r.   r.   r/   r(   	  s    z"UnrecognizedExtension.public_bytesN)rL   rM   rN   rG   r{   rD   r_   rb   rs   rv   r(   r.   r.   r.   r/   r]   	  s   r]   )t
__future__r   abcr%  r*   r3  r^  collections.abcr   r   Zcryptographyr   Z"cryptography.hazmat.bindings._rustr   r   rz   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   r0   r?   	Exceptionr@   rP   ABCMetar   rT   rf   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;  rC  r`  rd  re  rf  rj  ru  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