U
    g)                    @  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 d dl	m
Z
 d dl	mZ d dlmZmZ d dlmZ d dlmZ d d	lmZmZ d d
lmZ d dlmZmZmZmZmZmZm Z m!Z!m"Z" d dl#m$Z$m%Z% d dl&m'Z'm(Z(m)Z)m*Z* ej+ddddZ,dddddZ-ddddZ.G dd de/Z0G dd de/Z1G dd dej2d Z3G d!d" d"Z4G d#d$ d$e3Z5G d%d& d&e3Z6G d'd( d(e3Z7G d)d* d*e3Z8G d+d, d,e3Z9G d-d. d.Z:G d/d0 d0e3Z;G d1d2 d2e3Z<G d3d4 d4e3Z=G d5d6 d6e3Z>G d7d8 d8Z?G d9d: d:ej@ZAeAjBeAjCeAjDeAjEeAjFeAjGeAjHeAjId;ZJeAjBd<eAjCd=eAjDd>eAjEd?eAjFd@eAjGdAeAjHdBeAjIdCiZKG dDdE dEe3ZLG dFdG dGe3ZMG dHdI dIZNG dJdK dKZOG dLdM dMZPG dNdO dOe3ZQG dPdQ dQe3ZRG dRdS dSe3ZSG dTdU dUe3ZTG dVdW dWej@ZUdXdY eUD ZVG dZd[ d[e3ZWG d\d] d]e3ZXG d^d_ d_e3ZYG d`da daejZe, Z[G dbdc dcZ\G ddde dee3Z]G dfdg dge3Z^G dhdi die3Z_G djdk dke3Z`G dldm dme3ZaG dndo doe3ZbG dpdq dqe3ZcG drds dse3ZdG dtdu due3ZeG dvdw dwe3ZfG dxdy dye3ZgG dzd{ d{e3ZhdS )|    )annotationsN)utils)asn1)x509)constant_timeserialization)EllipticCurvePublicKey)RSAPublicKey)CertificateIssuerPublicKeyTypesCertificatePublicKeyTypes)SignedCertificateTimestamp)	DirectoryNameDNSNameGeneralName	IPAddress	OtherNameRegisteredID
RFC822NameUniformResourceIdentifier_IPAddressTypes)NameRelativeDistinguishedName)CRLEntryExtensionOIDExtensionOIDObjectIdentifierOCSPExtensionOIDExtensionTypeVarExtensionTypeT)bound	covariantr   bytes
public_keyreturnc                 C  sl   t | tr | tjjtjj}n>t | tr@| tjj	tjj
}n| tjjtjj}t|}t| S N)
isinstancer	   public_bytesr   EncodingZDERZPublicFormatZPKCS1r   ZX962ZUncompressedPointZSubjectPublicKeyInfor   Zparse_spki_for_datahashlibsha1digest)r"   dataZ
serialized r,   @/tmp/pip-unpacked-wheel-nr_9cwun/cryptography/x509/extensions.py_key_identifier_from_public_key2   s     


r.   str
field_namec                   s4   dd fdd} fdd} fdd}|||fS )	Nintr#   c                   s   t t|  S r$   )lengetattrselfr0   r,   r-   
len_methodK   s    z*_make_sequence_methods.<locals>.len_methodc                   s   t t|  S r$   )iterr5   r6   r0   r,   r-   iter_methodN   s    z+_make_sequence_methods.<locals>.iter_methodc                   s   t |  | S r$   )r5   )r7   idxr0   r,   r-   getitem_methodQ   s    z._make_sequence_methods.<locals>.getitem_methodr,   )r1   r8   r:   r<   r,   r0   r-   _make_sequence_methodsJ   s    r=   c                      s&   e Zd Zdddd fddZ  ZS )DuplicateExtensionr/   r   Nonemsgoidr#   c                   s   t  | || _d S r$   super__init__rB   r7   rA   rB   	__class__r,   r-   rE   X   s    zDuplicateExtension.__init____name__
__module____qualname__rE   __classcell__r,   r,   rG   r-   r>   W   s   r>   c                      s&   e Zd Zdddd fddZ  ZS )ExtensionNotFoundr/   r   r?   r@   c                   s   t  | || _d S r$   rC   rF   rG   r,   r-   rE   ^   s    zExtensionNotFound.__init__rI   r,   r,   rG   r-   rN   ]   s   rN   c                   @  s$   e Zd ZU ded< ddddZdS )r   z!typing.ClassVar[ObjectIdentifier]rB   r    r3   c                 C  s   t d| dS )z7
        Serializes the extension type to DER.
        z3public_bytes is not implemented for extension type N)NotImplementedErrorr6   r,   r,   r-   r&   f   s    zExtensionType.public_bytesN)rJ   rK   rL   __annotations__r&   r,   r,   r,   r-   r   c   s   
)	metaclassc                   @  sX   e Zd ZdddddZdddd	d
ZdddddZed\ZZZ	ddddZ
dS )
Extensionsz)typing.Iterable[Extension[ExtensionType]]r?   )
extensionsr#   c                 C  s   t || _d S r$   )list_extensions)r7   rS   r,   r,   r-   rE   p   s    zExtensions.__init__r   zExtension[ExtensionType])rB   r#   c                 C  s2   | D ]}|j |kr|  S qtd| d|d S )NNo  extension was found)rB   rN   )r7   rB   extr,   r,   r-   get_extension_for_oidu   s    

z Extensions.get_extension_for_oidztype[ExtensionTypeVar]zExtension[ExtensionTypeVar])extclassr#   c                 C  sF   |t 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.rV   rW   )UnrecognizedExtension	TypeErrorr%   valuerN   rB   )r7   rZ   rX   r,   r,   r-   get_extension_for_class~   s    

 z"Extensions.get_extension_for_classrU   r/   r3   c                 C  s   d| j  dS )Nz<Extensions()>)rU   r6   r,   r,   r-   __repr__   s    zExtensions.__repr__N)rJ   rK   rL   rE   rY   r^   r=   __len____iter____getitem__r`   r,   r,   r,   r-   rR   o   s
   	rR   c                   @  sn   e Zd ZejZdddddZdddd	d
ZddddZddddZ	e
ddddZddddZdS )	CRLNumberr2   r?   
crl_numberr#   c                 C  s   t |tstd|| _d S Nzcrl_number must be an integerr%   r2   r\   _crl_numberr7   rf   r,   r,   r-   rE      s    
zCRLNumber.__init__objectboolotherr#   c                 C  s   t |tstS | j|jkS r$   )r%   rd   NotImplementedrf   r7   rn   r,   r,   r-   __eq__   s    
zCRLNumber.__eq__r3   c                 C  s
   t | jS r$   hashrf   r6   r,   r,   r-   __hash__   s    zCRLNumber.__hash__r/   c                 C  s   d| j  dS )Nz<CRLNumber(r_   rf   r6   r,   r,   r-   r`      s    zCRLNumber.__repr__c                 C  s   | j S r$   ri   r6   r,   r,   r-   rf      s    zCRLNumber.crl_numberr    c                 C  s
   t | S r$   	rust_x509Zencode_extension_valuer6   r,   r,   r-   r&      s    zCRLNumber.public_bytesN)rJ   rK   rL   r   Z
CRL_NUMBERrB   rE   rq   rt   r`   propertyrf   r&   r,   r,   r,   r-   rd      s   rd   c                   @  s   e Zd ZejZdddddddZedd d	d
dZedd dddZ	ddddZ
dddddZddddZeddddZedddd Zeddd!d"Zd#dd$d%Zd&S )'AuthorityKeyIdentifierzbytes | None#typing.Iterable[GeneralName] | None
int | Noner?   )key_identifierauthority_cert_issuerauthority_cert_serial_numberr#   c                 C  sr   |d 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)	
ValueErrorrT   allr\   r%   r2   _key_identifier_authority_cert_issuer_authority_cert_serial_number)r7   r}   r~   r   r,   r,   r-   rE      s,    
 zAuthorityKeyIdentifier.__init__r
   r!   c                 C  s   t |}| |d d dS Nr}   r~   r   r.   )clsr"   r*   r,   r,   r-   from_issuer_public_key   s    z-AuthorityKeyIdentifier.from_issuer_public_keySubjectKeyIdentifier)skir#   c                 C  s   | |j d d dS r   r*   )r   r   r,   r,   r-   "from_issuer_subject_key_identifier   s
    z9AuthorityKeyIdentifier.from_issuer_subject_key_identifierr/   r3   c                 C  s   d| j d| j d| j dS )Nz'<AuthorityKeyIdentifier(key_identifier=z, authority_cert_issuer=z, authority_cert_serial_number=r_   r   r6   r,   r,   r-   r`      s    zAuthorityKeyIdentifier.__repr__rk   rl   rm   c                 C  s2   t |tstS | j|jko0| j|jko0| j|jkS r$   )r%   rz   ro   r}   r~   r   rp   r,   r,   r-   rq      s    

zAuthorityKeyIdentifier.__eq__r2   c                 C  s,   | j d krd }n
t| j }t| j|| jfS r$   )r~   tuplers   r}   r   )r7   Zacir,   r,   r-   rt     s    

zAuthorityKeyIdentifier.__hash__c                 C  s   | j S r$   )r   r6   r,   r,   r-   r}     s    z%AuthorityKeyIdentifier.key_identifierlist[GeneralName] | Nonec                 C  s   | j S r$   )r   r6   r,   r,   r-   r~     s    z,AuthorityKeyIdentifier.authority_cert_issuerc                 C  s   | j S r$   )r   r6   r,   r,   r-   r     s    z3AuthorityKeyIdentifier.authority_cert_serial_numberr    c                 C  s
   t | S r$   rw   r6   r,   r,   r-   r&     s    z#AuthorityKeyIdentifier.public_bytesN)rJ   rK   rL   r   ZAUTHORITY_KEY_IDENTIFIERrB   rE   classmethodr   r   r`   rq   rt   ry   r}   r~   r   r&   r,   r,   r,   r-   rz      s    &
		rz   c                   @  s   e Zd ZejZdddddZedd ddd	Ze	dd
ddZ
e	dd
ddZdd
ddZdddddZdd
ddZdd
ddZdS )r   r    r?   )r*   r#   c                 C  s
   || _ d S r$   Z_digest)r7   r*   r,   r,   r-   rE   "  s    zSubjectKeyIdentifier.__init__r   r!   c                 C  s   | t |S r$   r   )r   r"   r,   r,   r-   from_public_key%  s    z$SubjectKeyIdentifier.from_public_keyr3   c                 C  s   | j S r$   r   r6   r,   r,   r-   r*   +  s    zSubjectKeyIdentifier.digestc                 C  s   | j S r$   r   r6   r,   r,   r-   r}   /  s    z#SubjectKeyIdentifier.key_identifierr/   c                 C  s   d| j dS )Nz<SubjectKeyIdentifier(digest=r_   r   r6   r,   r,   r-   r`   3  s    zSubjectKeyIdentifier.__repr__rk   rl   rm   c                 C  s   t |tstS t| j|jS r$   )r%   r   ro   r   Zbytes_eqr*   rp   r,   r,   r-   rq   6  s    
zSubjectKeyIdentifier.__eq__r2   c                 C  s
   t | jS r$   )rs   r*   r6   r,   r,   r-   rt   <  s    zSubjectKeyIdentifier.__hash__c                 C  s
   t | S r$   rw   r6   r,   r,   r-   r&   ?  s    z!SubjectKeyIdentifier.public_bytesN)rJ   rK   rL   r   ZSUBJECT_KEY_IDENTIFIERrB   rE   r   r   ry   r*   r}   r`   rq   rt   r&   r,   r,   r,   r-   r     s   r   c                   @  sj   e Zd ZejZdddddZed\ZZ	Z
ddd	d
ZdddddZddddZddddZdS )AuthorityInformationAccess"typing.Iterable[AccessDescription]r?   descriptionsr#   c                 C  s,   t |}tdd |D s"td|| _d S )Nc                 s  s   | ]}t |tV  qd S r$   r%   AccessDescriptionr   r,   r,   r-   r   J  s     z6AuthorityInformationAccess.__init__.<locals>.<genexpr>@Every item in the descriptions list must be an AccessDescriptionrT   r   r\   _descriptionsr7   r   r,   r,   r-   rE   F  s    z#AuthorityInformationAccess.__init__r   r/   r3   c                 C  s   d| j  dS )Nz<AuthorityInformationAccess(r_   r   r6   r,   r,   r-   r`   T  s    z#AuthorityInformationAccess.__repr__rk   rl   rm   c                 C  s   t |tstS | j|jkS r$   )r%   r   ro   r   rp   r,   r,   r-   rq   W  s    
z!AuthorityInformationAccess.__eq__r2   c                 C  s   t t| jS r$   rs   r   r   r6   r,   r,   r-   rt   ]  s    z#AuthorityInformationAccess.__hash__r    c                 C  s
   t | S r$   rw   r6   r,   r,   r-   r&   `  s    z'AuthorityInformationAccess.public_bytesN)rJ   rK   rL   r   ZAUTHORITY_INFORMATION_ACCESSrB   rE   r=   ra   rb   rc   r`   rq   rt   r&   r,   r,   r,   r-   r   C  s   r   c                   @  sj   e Zd ZejZdddddZed\ZZ	Z
ddd	d
ZdddddZddddZddddZdS )SubjectInformationAccessr   r?   r   c                 C  s,   t |}tdd |D s"td|| _d S )Nc                 s  s   | ]}t |tV  qd S r$   r   r   r,   r,   r-   r   k  s     z4SubjectInformationAccess.__init__.<locals>.<genexpr>r   r   r   r,   r,   r-   rE   g  s    z!SubjectInformationAccess.__init__r   r/   r3   c                 C  s   d| j  dS )Nz<SubjectInformationAccess(r_   r   r6   r,   r,   r-   r`   u  s    z!SubjectInformationAccess.__repr__rk   rl   rm   c                 C  s   t |tstS | j|jkS r$   )r%   r   ro   r   rp   r,   r,   r-   rq   x  s    
zSubjectInformationAccess.__eq__r2   c                 C  s   t t| jS r$   r   r6   r,   r,   r-   rt   ~  s    z!SubjectInformationAccess.__hash__r    c                 C  s
   t | S r$   rw   r6   r,   r,   r-   r&     s    z%SubjectInformationAccess.public_bytesN)rJ   rK   rL   r   ZSUBJECT_INFORMATION_ACCESSrB   rE   r=   ra   rb   rc   r`   rq   rt   r&   r,   r,   r,   r-   r   d  s   r   c                   @  sn   e Zd ZddddddZddd	d
ZdddddZddddZeddddZeddddZ	dS )r   r   r   r?   )access_methodaccess_locationr#   c                 C  s4   t |tstdt |ts$td|| _|| _d S )Nz)access_method must be an ObjectIdentifierz%access_location must be a GeneralName)r%   r   r\   r   _access_method_access_location)r7   r   r   r,   r,   r-   rE     s    

zAccessDescription.__init__r/   r3   c                 C  s
   d | S )NzY<AccessDescription(access_method={0.access_method}, access_location={0.access_location})>formatr6   r,   r,   r-   r`     s    zAccessDescription.__repr__rk   rl   rm   c                 C  s&   t |tstS | j|jko$| j|jkS r$   )r%   r   ro   r   r   rp   r,   r,   r-   rq     s
    

zAccessDescription.__eq__r2   c                 C  s   t | j| jfS r$   )rs   r   r   r6   r,   r,   r-   rt     s    zAccessDescription.__hash__c                 C  s   | j S r$   )r   r6   r,   r,   r-   r     s    zAccessDescription.access_methodc                 C  s   | j S r$   )r   r6   r,   r,   r-   r     s    z!AccessDescription.access_locationN)
rJ   rK   rL   rE   r`   rq   rt   ry   r   r   r,   r,   r,   r-   r     s   	r   c                   @  s   e Zd ZejZddddddZedddd	Zeddd
dZ	ddddZ
dddddZddddZddddZdS )BasicConstraintsrl   r|   r?   )capath_lengthr#   c                 C  sX   t |tstd|d 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%   rl   r\   r   r2   _ca_path_length)r7   r   r   r,   r,   r-   rE     s    
zBasicConstraints.__init__r3   c                 C  s   | j S r$   )r   r6   r,   r,   r-   r     s    zBasicConstraints.cac                 C  s   | j S r$   )r   r6   r,   r,   r-   r     s    zBasicConstraints.path_lengthr/   c                 C  s
   d | S )Nz:<BasicConstraints(ca={0.ca}, path_length={0.path_length})>r   r6   r,   r,   r-   r`     s    zBasicConstraints.__repr__rk   rm   c                 C  s&   t |tstS | j|jko$| j|jkS r$   )r%   r   ro   r   r   rp   r,   r,   r-   rq     s    
zBasicConstraints.__eq__r2   c                 C  s   t | j| jfS r$   )rs   r   r   r6   r,   r,   r-   rt     s    zBasicConstraints.__hash__r    c                 C  s
   t | S r$   rw   r6   r,   r,   r-   r&     s    zBasicConstraints.public_bytesN)rJ   rK   rL   r   ZBASIC_CONSTRAINTSrB   rE   ry   r   r   r`   rq   rt   r&   r,   r,   r,   r-   r     s   r   c                   @  sn   e Zd ZejZdddddZeddddZd	d
dddZ	ddddZ
ddddZddddZdS )DeltaCRLIndicatorr2   r?   re   c                 C  s   t |tstd|| _d S rg   rh   rj   r,   r,   r-   rE     s    
zDeltaCRLIndicator.__init__r3   c                 C  s   | j S r$   rv   r6   r,   r,   r-   rf     s    zDeltaCRLIndicator.crl_numberrk   rl   rm   c                 C  s   t |tstS | j|jkS r$   )r%   r   ro   rf   rp   r,   r,   r-   rq     s    
zDeltaCRLIndicator.__eq__c                 C  s
   t | jS r$   rr   r6   r,   r,   r-   rt     s    zDeltaCRLIndicator.__hash__r/   c                 C  s   d| j  dS )Nz<DeltaCRLIndicator(crl_number=r_   ru   r6   r,   r,   r-   r`     s    zDeltaCRLIndicator.__repr__r    c                 C  s
   t | S r$   rw   r6   r,   r,   r-   r&     s    zDeltaCRLIndicator.public_bytesN)rJ   rK   rL   r   ZDELTA_CRL_INDICATORrB   rE   ry   rf   rq   rt   r`   r&   r,   r,   r,   r-   r     s   r   c                   @  sj   e Zd ZejZdddddZed\ZZ	Z
ddd	d
ZdddddZddddZddddZdS )CRLDistributionPoints"typing.Iterable[DistributionPoint]r?   distribution_pointsr#   c                 C  s,   t |}tdd |D s"td|| _d S )Nc                 s  s   | ]}t |tV  qd S r$   r%   DistributionPointr   r,   r,   r-   r     s    z1CRLDistributionPoints.__init__.<locals>.<genexpr>?distribution_points must be a list of DistributionPoint objectsrT   r   r\   _distribution_pointsr7   r   r,   r,   r-   rE     s    zCRLDistributionPoints.__init__r   r/   r3   c                 C  s   d| j  dS )Nz<CRLDistributionPoints(r_   r   r6   r,   r,   r-   r`     s    zCRLDistributionPoints.__repr__rk   rl   rm   c                 C  s   t |tstS | j|jkS r$   )r%   r   ro   r   rp   r,   r,   r-   rq     s    
zCRLDistributionPoints.__eq__r2   c                 C  s   t t| jS r$   rs   r   r   r6   r,   r,   r-   rt     s    zCRLDistributionPoints.__hash__r    c                 C  s
   t | S r$   rw   r6   r,   r,   r-   r&     s    z"CRLDistributionPoints.public_bytesN)rJ   rK   rL   r   ZCRL_DISTRIBUTION_POINTSrB   rE   r=   ra   rb   rc   r`   rq   rt   r&   r,   r,   r,   r-   r     s   
r   c                   @  sj   e Zd ZejZdddddZed\ZZ	Z
ddd	d
ZdddddZddddZddddZdS )FreshestCRLr   r?   r   c                 C  s,   t |}tdd |D s"td|| _d S )Nc                 s  s   | ]}t |tV  qd S r$   r   r   r,   r,   r-   r   $  s    z'FreshestCRL.__init__.<locals>.<genexpr>r   r   r   r,   r,   r-   rE      s    zFreshestCRL.__init__r   r/   r3   c                 C  s   d| j  dS )Nz<FreshestCRL(r_   r   r6   r,   r,   r-   r`   2  s    zFreshestCRL.__repr__rk   rl   rm   c                 C  s   t |tstS | j|jkS r$   )r%   r   ro   r   rp   r,   r,   r-   rq   5  s    
zFreshestCRL.__eq__r2   c                 C  s   t t| jS r$   r   r6   r,   r,   r-   rt   ;  s    zFreshestCRL.__hash__r    c                 C  s
   t | S r$   rw   r6   r,   r,   r-   r&   >  s    zFreshestCRL.public_bytesN)rJ   rK   rL   r   ZFRESHEST_CRLrB   rE   r=   ra   rb   rc   r`   rq   rt   r&   r,   r,   r,   r-   r     s   
r   c                   @  s   e Zd ZddddddddZdd	d
dZdddddZdd	ddZedd	ddZedd	ddZ	edd	ddZ
edd	ddZdS )r   r{    RelativeDistinguishedName | Nonefrozenset[ReasonFlags] | Noner?   )	full_namerelative_namereasons
crl_issuerr#   c                 C  s   |r|rt d|s$|s$|s$t d|d 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   W  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   d  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   k  s     z0reasons must be None or frozenset of ReasonFlagszLunspecified and remove_from_crl are not valid reasons in a DistributionPoint)r   rT   r   r\   r%   r   	frozensetr   unspecifiedremove_from_crl
_full_name_relative_name_reasons_crl_issuer)r7   r   r   r   r   r,   r,   r-   rE   C  sV    
zDistributionPoint.__init__r/   r3   c                 C  s
   d | S )Nz}<DistributionPoint(full_name={0.full_name}, relative_name={0.relative_name}, reasons={0.reasons}, crl_issuer={0.crl_issuer})>r   r6   r,   r,   r-   r`   }  s    zDistributionPoint.__repr__rk   rl   rm   c                 C  s>   t |tstS | j|jko<| j|jko<| j|jko<| j|jkS r$   )r%   r   ro   r   r   r   r   rp   r,   r,   r-   rq     s    



zDistributionPoint.__eq__r2   c                 C  sH   | j d k	rt| j }nd }| jd k	r0t| j}nd }t|| j| j|fS r$   )r   r   r   rs   r   r   )r7   fnr   r,   r,   r-   rt     s    

zDistributionPoint.__hash__r   c                 C  s   | j S r$   r   r6   r,   r,   r-   r     s    zDistributionPoint.full_namec                 C  s   | j S r$   r   r6   r,   r,   r-   r     s    zDistributionPoint.relative_namec                 C  s   | j S r$   )r   r6   r,   r,   r-   r     s    zDistributionPoint.reasonsc                 C  s   | j S r$   )r   r6   r,   r,   r-   r     s    zDistributionPoint.crl_issuerN)rJ   rK   rL   rE   r`   rq   rt   ry   r   r   r   r   r,   r,   r,   r-   r   B  s   :r   c                   @  s4   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdS )r   r   ZkeyCompromiseZcACompromiseZaffiliationChanged
supersededZcessationOfOperationZcertificateHoldZprivilegeWithdrawnZaACompromiseZremoveFromCRLN)rJ   rK   rL   r   key_compromiseca_compromiseaffiliation_changedr   cessation_of_operationcertificate_holdprivilege_withdrawnaa_compromiser   r,   r,   r,   r-   r     s   r   )                        r   r   r   r   r   r   r   r   c                   @  s   e Zd ZejZddddddZdddd	Zd
ddddZddddZ	e
ddddZe
ddddZddddZdS )PolicyConstraintsr|   r?   )require_explicit_policyinhibit_policy_mappingr#   c                 C  s\   |d 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%   r2   r\   r   _require_explicit_policy_inhibit_policy_mapping)r7   r   r   r,   r,   r-   rE     s(    
 
 zPolicyConstraints.__init__r/   r3   c                 C  s
   d | S )Nz{<PolicyConstraints(require_explicit_policy={0.require_explicit_policy}, inhibit_policy_mapping={0.inhibit_policy_mapping})>r   r6   r,   r,   r-   r`     s    zPolicyConstraints.__repr__rk   rl   rm   c                 C  s&   t |tstS | j|jko$| j|jkS r$   )r%   r   ro   r   r   rp   r,   r,   r-   rq     s
    

zPolicyConstraints.__eq__r2   c                 C  s   t | j| jfS r$   )rs   r   r   r6   r,   r,   r-   rt     s    
zPolicyConstraints.__hash__c                 C  s   | j S r$   )r   r6   r,   r,   r-   r     s    z)PolicyConstraints.require_explicit_policyc                 C  s   | j S r$   )r   r6   r,   r,   r-   r     s    z(PolicyConstraints.inhibit_policy_mappingr    c                 C  s
   t | S r$   rw   r6   r,   r,   r-   r&     s    zPolicyConstraints.public_bytesN)rJ   rK   rL   r   ZPOLICY_CONSTRAINTSrB   rE   r`   rq   rt   ry   r   r   r&   r,   r,   r,   r-   r     s   	r   c                   @  sj   e Zd ZejZdddddZed\ZZ	Z
ddd	d
ZdddddZddddZddddZdS )CertificatePoliciesz"typing.Iterable[PolicyInformation]r?   )policiesr#   c                 C  s,   t |}tdd |D s"td|| _d S )Nc                 s  s   | ]}t |tV  qd S r$   )r%   PolicyInformationr   r,   r,   r-   r   #  s     z/CertificatePolicies.__init__.<locals>.<genexpr>z;Every item in the policies list must be a PolicyInformation)rT   r   r\   	_policies)r7   r   r,   r,   r-   rE   !  s    zCertificatePolicies.__init__r   r/   r3   c                 C  s   d| j  dS )Nz<CertificatePolicies(r_   )r   r6   r,   r,   r-   r`   -  s    zCertificatePolicies.__repr__rk   rl   rm   c                 C  s   t |tstS | j|jkS r$   )r%   r   ro   r   rp   r,   r,   r-   rq   0  s    
zCertificatePolicies.__eq__r2   c                 C  s   t t| jS r$   )rs   r   r   r6   r,   r,   r-   rt   6  s    zCertificatePolicies.__hash__r    c                 C  s
   t | S r$   rw   r6   r,   r,   r-   r&   9  s    z CertificatePolicies.public_bytesN)rJ   rK   rL   r   ZCERTIFICATE_POLICIESrB   rE   r=   ra   rb   rc   r`   rq   rt   r&   r,   r,   r,   r-   r     s   
r   c                   @  sn   e Zd ZddddddZddd	d
ZdddddZddddZeddddZeddddZ	dS )r   r   z(typing.Iterable[str | UserNotice] | Noner?   )policy_identifierpolicy_qualifiersr#   c                 C  sL   t |tstd|| _|d k	rBt|}tdd |D sBtd|| _d S )Nz-policy_identifier must be an ObjectIdentifierc                 s  s   | ]}t |ttfV  qd S r$   )r%   r/   
UserNoticer   r,   r,   r-   r   J  s    z-PolicyInformation.__init__.<locals>.<genexpr>zMpolicy_qualifiers must be a list of strings and/or UserNotice objects or None)r%   r   r\   _policy_identifierrT   r   _policy_qualifiers)r7   r   r   r,   r,   r-   rE   >  s    
zPolicyInformation.__init__r/   r3   c                 C  s
   d | S )Nze<PolicyInformation(policy_identifier={0.policy_identifier}, policy_qualifiers={0.policy_qualifiers})>r   r6   r,   r,   r-   r`   T  s    zPolicyInformation.__repr__rk   rl   rm   c                 C  s&   t |tstS | j|jko$| j|jkS r$   )r%   r   ro   r   r   rp   r,   r,   r-   rq   Z  s
    

zPolicyInformation.__eq__r2   c                 C  s(   | j d k	rt| j }nd }t| j|fS r$   )r   r   rs   r   )r7   Zpqr,   r,   r-   rt   c  s    
zPolicyInformation.__hash__c                 C  s   | j S r$   )r   r6   r,   r,   r-   r   m  s    z#PolicyInformation.policy_identifierzlist[str | UserNotice] | Nonec                 C  s   | j S r$   )r   r6   r,   r,   r-   r   q  s    z#PolicyInformation.policy_qualifiersN)
rJ   rK   rL   rE   r`   rq   rt   ry   r   r   r,   r,   r,   r-   r   =  s   	
r   c                   @  sn   e Zd ZddddddZddd	d
ZdddddZddddZeddddZeddddZ	dS )r   zNoticeReference | None
str | Noner?   )notice_referenceexplicit_textr#   c                 C  s&   |rt |tstd|| _|| _d S )Nz2notice_reference must be None or a NoticeReference)r%   NoticeReferencer\   _notice_reference_explicit_text)r7   r   r   r,   r,   r-   rE   y  s     zUserNotice.__init__r/   r3   c                 C  s
   d | S )NzV<UserNotice(notice_reference={0.notice_reference}, explicit_text={0.explicit_text!r})>r   r6   r,   r,   r-   r`     s    zUserNotice.__repr__rk   rl   rm   c                 C  s&   t |tstS | j|jko$| j|jkS r$   )r%   r   ro   r   r   rp   r,   r,   r-   rq     s
    

zUserNotice.__eq__r2   c                 C  s   t | j| jfS r$   )rs   r   r   r6   r,   r,   r-   rt     s    zUserNotice.__hash__c                 C  s   | j S r$   )r   r6   r,   r,   r-   r     s    zUserNotice.notice_referencec                 C  s   | j S r$   )r   r6   r,   r,   r-   r     s    zUserNotice.explicit_textN)
rJ   rK   rL   rE   r`   rq   rt   ry   r   r   r,   r,   r,   r-   r   x  s   	r   c                   @  sn   e Zd ZddddddZddd	d
ZdddddZddddZeddddZeddddZ	dS )r   r   ztyping.Iterable[int]r?   )organizationnotice_numbersr#   c                 C  s2   || _ t|}tdd |D s(td|| _d S )Nc                 s  s   | ]}t |tV  qd S r$   )r%   r2   r   r,   r,   r-   r     s     z+NoticeReference.__init__.<locals>.<genexpr>z)notice_numbers must be a list of integers)_organizationrT   r   r\   _notice_numbers)r7   r   r   r,   r,   r-   rE     s
    zNoticeReference.__init__r/   r3   c                 C  s
   d | S )NzU<NoticeReference(organization={0.organization!r}, notice_numbers={0.notice_numbers})>r   r6   r,   r,   r-   r`     s    zNoticeReference.__repr__rk   rl   rm   c                 C  s&   t |tstS | j|jko$| j|jkS r$   )r%   r   ro   r   r   rp   r,   r,   r-   rq     s
    

zNoticeReference.__eq__r2   c                 C  s   t | jt| jfS r$   )rs   r   r   r   r6   r,   r,   r-   rt     s    zNoticeReference.__hash__c                 C  s   | j S r$   )r   r6   r,   r,   r-   r     s    zNoticeReference.organizationz	list[int]c                 C  s   | j S r$   )r   r6   r,   r,   r-   r     s    zNoticeReference.notice_numbersN)
rJ   rK   rL   rE   r`   rq   rt   ry   r   r   r,   r,   r,   r-   r     s   	r   c                   @  sj   e Zd ZejZdddddZed\ZZ	Z
ddd	d
ZdddddZddddZddddZdS )ExtendedKeyUsage!typing.Iterable[ObjectIdentifier]r?   )usagesr#   c                 C  s,   t |}tdd |D s"td|| _d S )Nc                 s  s   | ]}t |tV  qd S r$   r%   r   r   r,   r,   r-   r     s     z,ExtendedKeyUsage.__init__.<locals>.<genexpr>z9Every item in the usages list must be an ObjectIdentifier)rT   r   r\   _usages)r7   r   r,   r,   r-   rE     s    zExtendedKeyUsage.__init__r   r/   r3   c                 C  s   d| j  dS )Nz<ExtendedKeyUsage(r_   )r   r6   r,   r,   r-   r`     s    zExtendedKeyUsage.__repr__rk   rl   rm   c                 C  s   t |tstS | j|jkS r$   )r%   r   ro   r   rp   r,   r,   r-   rq     s    
zExtendedKeyUsage.__eq__r2   c                 C  s   t t| jS r$   )rs   r   r   r6   r,   r,   r-   rt     s    zExtendedKeyUsage.__hash__r    c                 C  s
   t | S r$   rw   r6   r,   r,   r-   r&     s    zExtendedKeyUsage.public_bytesN)rJ   rK   rL   r   ZEXTENDED_KEY_USAGErB   rE   r=   ra   rb   rc   r`   rq   rt   r&   r,   r,   r,   r-   r     s   	r   c                   @  sL   e Zd ZejZdddddZdddd	Zd
dddZddddZ	dS )OCSPNoCheckrk   rl   rm   c                 C  s   t |tstS dS NT)r%   r   ro   rp   r,   r,   r-   rq     s    
zOCSPNoCheck.__eq__r2   r3   c                 C  s   t tS r$   )rs   r   r6   r,   r,   r-   rt     s    zOCSPNoCheck.__hash__r/   c                 C  s   dS )Nz<OCSPNoCheck()>r,   r6   r,   r,   r-   r`     s    zOCSPNoCheck.__repr__r    c                 C  s
   t | S r$   rw   r6   r,   r,   r-   r&     s    zOCSPNoCheck.public_bytesN)
rJ   rK   rL   r   ZOCSP_NO_CHECKrB   rq   rt   r`   r&   r,   r,   r,   r-   r     s
   r   c                   @  sL   e Zd ZejZdddddZdddd	Zd
dddZddddZ	dS )PrecertPoisonrk   rl   rm   c                 C  s   t |tstS dS r   )r%   r   ro   rp   r,   r,   r-   rq     s    
zPrecertPoison.__eq__r2   r3   c                 C  s   t tS r$   )rs   r   r6   r,   r,   r-   rt     s    zPrecertPoison.__hash__r/   c                 C  s   dS )Nz<PrecertPoison()>r,   r6   r,   r,   r-   r`     s    zPrecertPoison.__repr__r    c                 C  s
   t | S r$   rw   r6   r,   r,   r-   r&     s    zPrecertPoison.public_bytesN)
rJ   rK   rL   r   ZPRECERT_POISONrB   rq   rt   r`   r&   r,   r,   r,   r-   r     s
   r   c                   @  sj   e Zd ZejZdddddZed\ZZ	Z
ddd	d
ZdddddZddddZddddZdS )
TLSFeatureztyping.Iterable[TLSFeatureType]r?   )featuresr#   c                 C  s8   t |}tdd |D r&t|dkr.td|| _d S )Nc                 s  s   | ]}t |tV  qd S r$   )r%   TLSFeatureTyper   r,   r,   r-   r     s     z&TLSFeature.__init__.<locals>.<genexpr>r   z@features must be a list of elements from the TLSFeatureType enum)rT   r   r4   r\   	_features)r7   r  r,   r,   r-   rE     s    
zTLSFeature.__init__r  r/   r3   c                 C  s   d| j  dS )Nz<TLSFeature(features=r_   )r  r6   r,   r,   r-   r`   !  s    zTLSFeature.__repr__rk   rl   rm   c                 C  s   t |tstS | j|jkS r$   )r%   r   ro   r  rp   r,   r,   r-   rq   $  s    
zTLSFeature.__eq__r2   c                 C  s   t t| jS r$   )rs   r   r  r6   r,   r,   r-   rt   *  s    zTLSFeature.__hash__r    c                 C  s
   t | S r$   rw   r6   r,   r,   r-   r&   -  s    zTLSFeature.public_bytesN)rJ   rK   rL   r   ZTLS_FEATURErB   rE   r=   ra   rb   rc   r`   rq   rt   r&   r,   r,   r,   r-   r     s   r   c                   @  s   e Zd ZdZdZdS )r  r      N)rJ   rK   rL   Zstatus_requestZstatus_request_v2r,   r,   r,   r-   r  1  s   r  c                 C  s   i | ]}|j |qS r,   r]   r   r,   r,   r-   
<dictcomp><  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 )InhibitAnyPolicyr2   r?   )
skip_certsr#   c                 C  s,   t |tstd|dk r"td|| _d S )Nzskip_certs must be an integerr   z)skip_certs must be a non-negative integer)r%   r2   r\   r   _skip_certs)r7   r  r,   r,   r-   rE   B  s
    
zInhibitAnyPolicy.__init__r/   r3   c                 C  s   d| j  dS )Nz<InhibitAnyPolicy(skip_certs=r_   )r  r6   r,   r,   r-   r`   K  s    zInhibitAnyPolicy.__repr__rk   rl   rm   c                 C  s   t |tstS | j|jkS r$   )r%   r  ro   r  rp   r,   r,   r-   rq   N  s    
zInhibitAnyPolicy.__eq__c                 C  s
   t | jS r$   )rs   r  r6   r,   r,   r-   rt   T  s    zInhibitAnyPolicy.__hash__c                 C  s   | j S r$   )r	  r6   r,   r,   r-   r  W  s    zInhibitAnyPolicy.skip_certsr    c                 C  s
   t | S r$   rw   r6   r,   r,   r-   r&   [  s    zInhibitAnyPolicy.public_bytesN)rJ   rK   rL   r   ZINHIBIT_ANY_POLICYrB   rE   r`   rq   rt   ry   r  r&   r,   r,   r,   r-   r  ?  s   	r  c                   @  s  e Zd ZejZddddddddddd
ddZeddddZeddd	d
Z	eddddZ
eddddZeddddZeddddZeddddZeddddZeddddZddddZdddddZd dd!d"Zd#dd$d%Zd&S )'KeyUsagerl   r?   )
digital_signaturecontent_commitmentkey_enciphermentdata_enciphermentkey_agreementkey_cert_signcrl_signencipher_onlydecipher_onlyr#   c
           
      C  sN   |s|s|	rt d|| _|| _|| _|| _|| _|| _|| _|| _|	| _	d S )NzKencipher_only and decipher_only can only be true when key_agreement is true)
r   _digital_signature_content_commitment_key_encipherment_data_encipherment_key_agreement_key_cert_sign	_crl_sign_encipher_only_decipher_only)
r7   r  r  r  r  r  r  r  r  r  r,   r,   r-   rE   b  s    zKeyUsage.__init__r3   c                 C  s   | j S r$   )r  r6   r,   r,   r-   r  ~  s    zKeyUsage.digital_signaturec                 C  s   | j S r$   )r  r6   r,   r,   r-   r    s    zKeyUsage.content_commitmentc                 C  s   | j S r$   )r  r6   r,   r,   r-   r    s    zKeyUsage.key_enciphermentc                 C  s   | j S r$   )r  r6   r,   r,   r-   r    s    zKeyUsage.data_enciphermentc                 C  s   | j S r$   )r  r6   r,   r,   r-   r    s    zKeyUsage.key_agreementc                 C  s   | j S r$   )r  r6   r,   r,   r-   r    s    zKeyUsage.key_cert_signc                 C  s   | j S r$   )r  r6   r,   r,   r-   r    s    zKeyUsage.crl_signc                 C  s   | j stdn| jS d S )Nz7encipher_only is undefined unless key_agreement is true)r  r   r  r6   r,   r,   r-   r    s
    zKeyUsage.encipher_onlyc                 C  s   | j stdn| jS d S )Nz7decipher_only is undefined unless key_agreement is true)r  r   r  r6   r,   r,   r-   r    s
    zKeyUsage.decipher_onlyr/   c                 C  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  )r7   r  r  r,   r,   r-   r`     s    

HzKeyUsage.__repr__rk   rm   c                 C  sz   t |tstS | j|jkox| j|jkox| j|jkox| j|jkox| j|jkox| j|jkox| j	|j	kox| j
|j
kox| j|jkS r$   )r%   r
  ro   r  r  r  r  r  r  r  r  r  rp   r,   r,   r-   rq     s&    








zKeyUsage.__eq__r2   c              
   C  s,   t | j| j| j| j| j| j| j| j| j	f	S r$   )
rs   r  r  r  r  r  r  r  r  r  r6   r,   r,   r-   rt     s    zKeyUsage.__hash__r    c                 C  s
   t | S r$   rw   r6   r,   r,   r-   r&     s    zKeyUsage.public_bytesN)rJ   rK   rL   r   Z	KEY_USAGErB   rE   ry   r  r  r  r  r  r  r  r  r  r`   rq   rt   r&   r,   r,   r,   r-   r
  _  s0    r
  c                   @  s   e Zd ZejZddddddZdddd	d
ZdddddZdddddZ	dddddZ
ddddZddddZeddddZeddddZddd d!Zd"S )#NameConstraintsr{   r?   )permitted_subtreesexcluded_subtreesr#   c                 C  s   |d 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     s     z+NameConstraints.__init__.<locals>.<genexpr>z@permitted_subtrees must be a list of GeneralName objects or Nonez2excluded_subtrees must be a non-empty list or Nonec                 s  s   | ]}t |tV  qd S r$   r   r   r,   r,   r-   r      s     z?excluded_subtrees must be a list of GeneralName objects or NonezIAt least one of permitted_subtrees and excluded_subtrees must not be None)rT   r   r   r\   _validate_tree_permitted_subtrees_excluded_subtrees)r7   r  r  r,   r,   r-   rE     s8    

zNameConstraints.__init__rk   rl   rm   c                 C  s&   t |tstS | j|jko$| j|jkS r$   )r%   r  ro   r  r  rp   r,   r,   r-   rq     s
    

zNameConstraints.__eq__typing.Iterable[GeneralName])treer#   c                 C  s   |  | | | d S r$   )_validate_ip_name_validate_dns_namer7   r$  r,   r,   r-   r     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     s   
 
z4NameConstraints._validate_ip_name.<locals>.<genexpr>zGIPAddress name constraints must be an IPv4Network or IPv6Network object)anyr\   r'  r,   r,   r-   r%    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]   r+  r,   r,   r-   r   ,  s    z5NameConstraints._validate_dns_name.<locals>.<genexpr>zDDNSName name constraints must not contain the '*' wildcard character)r-  r   r'  r,   r,   r-   r&  +  s    z"NameConstraints._validate_dns_namer/   r3   c                 C  s   d| j  d| j dS )Nz$<NameConstraints(permitted_subtrees=z, excluded_subtrees=r_   )r  r  r6   r,   r,   r-   r`   4  s    zNameConstraints.__repr__r2   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  rs   )r7   Zpsesr,   r,   r-   rt   :  s    

zNameConstraints.__hash__r   c                 C  s   | j S r$   )r!  r6   r,   r,   r-   r  G  s    z"NameConstraints.permitted_subtreesc                 C  s   | j S r$   )r"  r6   r,   r,   r-   r  M  s    z!NameConstraints.excluded_subtreesr    c                 C  s
   t | S r$   rw   r6   r,   r,   r-   r&   S  s    zNameConstraints.public_bytesN)rJ   rK   rL   r   ZNAME_CONSTRAINTSrB   rE   rq   r   r%  r&  r`   rt   ry   r  r  r&   r,   r,   r,   r-   r    s   *		r  c                   @  s   e Zd ZdddddddZeddd	d
ZeddddZeddddZddddZdddddZ	ddddZ
dS )	Extensionr   rl   r   r?   )rB   criticalr]   r#   c                 C  s:   t |tstdt |ts$td|| _|| _|| _d S )Nz2oid argument must be an ObjectIdentifier instance.z critical must be a boolean value)r%   r   r\   rl   _oid	_critical_value)r7   rB   r1  r]   r,   r,   r-   rE   X  s    

zExtension.__init__r3   c                 C  s   | j S r$   r2  r6   r,   r,   r-   rB   g  s    zExtension.oidc                 C  s   | j S r$   )r3  r6   r,   r,   r-   r1  k  s    zExtension.criticalc                 C  s   | j S r$   r4  r6   r,   r,   r-   r]   o  s    zExtension.valuer/   c                 C  s   d| j  d| j d| j dS )Nz<Extension(oid=z, critical=, value=r_   )rB   r1  r]   r6   r,   r,   r-   r`   s  s    zExtension.__repr__rk   rm   c                 C  s2   t |tstS | j|jko0| j|jko0| j|jkS r$   )r%   r0  ro   rB   r1  r]   rp   r,   r,   r-   rq   y  s    


zExtension.__eq__r2   c                 C  s   t | j| j| jfS r$   )rs   rB   r1  r]   r6   r,   r,   r-   rt     s    zExtension.__hash__N)rJ   rK   rL   rE   ry   rB   r1  r]   r`   rq   rt   r,   r,   r,   r-   r0  W  s   
r0  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)rT   r   r\   _general_namesr7   r:  r,   r,   r-   rE     s    zGeneralNames.__init__r;  Btype[DNSName] | type[UniformResourceIdentifier] | type[RFC822Name]	list[str]typer#   c                 C  s   d S r$   r,   r7   r@  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,   rA  r,   r,   r-   rB    s    type[RegisteredID]list[ObjectIdentifier]c                 C  s   d S r$   r,   rA  r,   r,   r-   rB    s    type[IPAddress]list[_IPAddressTypes]c                 C  s   d S r$   r,   rA  r,   r,   r-   rB    s    type[OtherName]list[OtherName]c                 C  s   d S r$   r,   rA  r,   r,   r-   rB    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r@  r,   r-   r     s     
 z3GeneralNames.get_values_for_type.<locals>.<genexpr>c                 S  s   g | ]
}|j qS r,   r  rM  r,   r,   r-   
<listcomp>  s     z4GeneralNames.get_values_for_type.<locals>.<listcomp>)r   rT   )r7   r@  objsr,   rO  r-   rB    s    r/   r3   c                 C  s   d| j  dS )Nz<GeneralNames(r_   r;  r6   r,   r,   r-   r`     s    zGeneralNames.__repr__rk   rl   rm   c                 C  s   t |tstS | j|jkS r$   )r%   r8  ro   r;  rp   r,   r,   r-   rq     s    
zGeneralNames.__eq__r2   c                 C  s   t t| jS r$   )rs   r   r;  r6   r,   r,   r-   rt     s    zGeneralNames.__hash__N)rJ   rK   rL   rE   r=   ra   rb   rc   typingoverloadrB  r`   rq   rt   r,   r,   r,   r-   r8    s    
r8  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?   r9  c                 C  s   t || _d S r$   r8  r;  r<  r,   r,   r-   rE     s    zSubjectAlternativeName.__init__r;  r=  r>  r?  c                 C  s   d S r$   r,   rA  r,   r,   r-   rB    s    z*SubjectAlternativeName.get_values_for_typerC  rD  c                 C  s   d S r$   r,   rA  r,   r,   r-   rB    s    rE  rF  c                 C  s   d S r$   r,   rA  r,   r,   r-   rB    s    rG  rH  c                 C  s   d S r$   r,   rA  r,   r,   r-   rB    s    rI  rJ  c                 C  s   d S r$   r,   rA  r,   r,   r-   rB    s    rK  rL  c                 C  s   | j |S r$   r;  rB  rA  r,   r,   r-   rB    s    r/   r3   c                 C  s   d| j  dS )Nz<SubjectAlternativeName(r_   rR  r6   r,   r,   r-   r`     s    zSubjectAlternativeName.__repr__rk   rl   rm   c                 C  s   t |tstS | j|jkS r$   )r%   rU  ro   r;  rp   r,   r,   r-   rq     s    
zSubjectAlternativeName.__eq__r2   c                 C  s
   t | jS r$   rs   r;  r6   r,   r,   r-   rt     s    zSubjectAlternativeName.__hash__r    c                 C  s
   t | S r$   rw   r6   r,   r,   r-   r&   !  s    z#SubjectAlternativeName.public_bytesN)rJ   rK   rL   r   ZSUBJECT_ALTERNATIVE_NAMErB   rE   r=   ra   rb   rc   rS  rT  rB  r`   rq   rt   r&   r,   r,   r,   r-   rU    s$   rU  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?   r9  c                 C  s   t || _d S r$   rV  r<  r,   r,   r-   rE   (  s    zIssuerAlternativeName.__init__r;  r=  r>  r?  c                 C  s   d S r$   r,   rA  r,   r,   r-   rB  -  s    z)IssuerAlternativeName.get_values_for_typerC  rD  c                 C  s   d S r$   r,   rA  r,   r,   r-   rB  6  s    rE  rF  c                 C  s   d S r$   r,   rA  r,   r,   r-   rB  =  s    rG  rH  c                 C  s   d S r$   r,   rA  r,   r,   r-   rB  D  s    rI  rJ  c                 C  s   d S r$   r,   rA  r,   r,   r-   rB  J  s    rK  rL  c                 C  s   | j |S r$   rW  rA  r,   r,   r-   rB  N  s    r/   r3   c                 C  s   d| j  dS )Nz<IssuerAlternativeName(r_   rR  r6   r,   r,   r-   r`   `  s    zIssuerAlternativeName.__repr__rk   rl   rm   c                 C  s   t |tstS | j|jkS r$   )r%   rY  ro   r;  rp   r,   r,   r-   rq   c  s    
zIssuerAlternativeName.__eq__r2   c                 C  s
   t | jS r$   rX  r6   r,   r,   r-   rt   i  s    zIssuerAlternativeName.__hash__r    c                 C  s
   t | S r$   rw   r6   r,   r,   r-   r&   l  s    z"IssuerAlternativeName.public_bytesN)rJ   rK   rL   r   ZISSUER_ALTERNATIVE_NAMErB   rE   r=   ra   rb   rc   rS  rT  rB  r`   rq   rt   r&   r,   r,   r,   r-   rY  %  s$   rY  c                   @  s   e Zd ZejZdddddZed\ZZ	Z
ejddd	d
dZejddd	ddZejddd	ddZejddd	ddZejddd	ddZddd	ddZddddZdd d!d"d#Zd$dd%d&Zd'dd(d)Zd*S )+CertificateIssuerr#  r?   r9  c                 C  s   t || _d S r$   rV  r<  r,   r,   r-   rE   s  s    zCertificateIssuer.__init__r;  r=  r>  r?  c                 C  s   d S r$   r,   rA  r,   r,   r-   rB  x  s    z%CertificateIssuer.get_values_for_typerC  rD  c                 C  s   d S r$   r,   rA  r,   r,   r-   rB    s    rE  rF  c                 C  s   d S r$   r,   rA  r,   r,   r-   rB    s    rG  rH  c                 C  s   d S r$   r,   rA  r,   r,   r-   rB    s    rI  rJ  c                 C  s   d S r$   r,   rA  r,   r,   r-   rB    s    rK  rL  c                 C  s   | j |S r$   rW  rA  r,   r,   r-   rB    s    r/   r3   c                 C  s   d| j  dS )Nz<CertificateIssuer(r_   rR  r6   r,   r,   r-   r`     s    zCertificateIssuer.__repr__rk   rl   rm   c                 C  s   t |tstS | j|jkS r$   )r%   rZ  ro   r;  rp   r,   r,   r-   rq     s    
zCertificateIssuer.__eq__r2   c                 C  s
   t | jS r$   rX  r6   r,   r,   r-   rt     s    zCertificateIssuer.__hash__r    c                 C  s
   t | S r$   rw   r6   r,   r,   r-   r&     s    zCertificateIssuer.public_bytesN)rJ   rK   rL   r   ZCERTIFICATE_ISSUERrB   rE   r=   ra   rb   rc   rS  rT  rB  r`   rq   rt   r&   r,   r,   r,   r-   rZ  p  s$   rZ  c                   @  sn   e Zd ZejZdddddZdddd	Zd
ddddZddddZ	e
ddddZddddZdS )	CRLReasonr   r?   )reasonr#   c                 C  s   t |tstd|| _d S )Nz*reason must be an element from ReasonFlags)r%   r   r\   _reason)r7   r\  r,   r,   r-   rE     s    
zCRLReason.__init__r/   r3   c                 C  s   d| j  dS )Nz<CRLReason(reason=r_   r]  r6   r,   r,   r-   r`     s    zCRLReason.__repr__rk   rl   rm   c                 C  s   t |tstS | j|jkS r$   )r%   r[  ro   r\  rp   r,   r,   r-   rq     s    
zCRLReason.__eq__r2   c                 C  s
   t | jS r$   )rs   r\  r6   r,   r,   r-   rt     s    zCRLReason.__hash__c                 C  s   | j S r$   r^  r6   r,   r,   r-   r\    s    zCRLReason.reasonr    c                 C  s
   t | S r$   rw   r6   r,   r,   r-   r&     s    zCRLReason.public_bytesN)rJ   rK   rL   r   Z
CRL_REASONrB   rE   r`   rq   rt   ry   r\  r&   r,   r,   r,   r-   r[    s   r[  c                   @  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 )InvalidityDatezdatetime.datetimer?   )invalidity_dater#   c                 C  s   t |tjstd|| _d S )Nz+invalidity_date must be a datetime.datetime)r%   datetimer\   _invalidity_date)r7   r`  r,   r,   r-   rE     s    zInvalidityDate.__init__r/   r3   c                 C  s   d| j  dS )Nz <InvalidityDate(invalidity_date=r_   rb  r6   r,   r,   r-   r`     s    zInvalidityDate.__repr__rk   rl   rm   c                 C  s   t |tstS | j|jkS r$   )r%   r_  ro   r`  rp   r,   r,   r-   rq     s    
zInvalidityDate.__eq__r2   c                 C  s
   t | jS r$   )rs   r`  r6   r,   r,   r-   rt     s    zInvalidityDate.__hash__c                 C  s   | j S r$   rc  r6   r,   r,   r-   r`    s    zInvalidityDate.invalidity_dater    c                 C  s
   t | S r$   rw   r6   r,   r,   r-   r&     s    zInvalidityDate.public_bytesN)rJ   rK   rL   r   ZINVALIDITY_DATErB   rE   r`   rq   rt   ry   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ZdddddZddddZdS ))PrecertificateSignedCertificateTimestamps+typing.Iterable[SignedCertificateTimestamp]r?   signed_certificate_timestampsr#   c                 C  s,   t |}tdd |D s"td|| _d S )Nc                 s  s   | ]}t |tV  qd S r$   r%   r   r   Zsctr,   r,   r-   r     s   zEPrecertificateSignedCertificateTimestamps.__init__.<locals>.<genexpr>YEvery item in the signed_certificate_timestamps list must be a SignedCertificateTimestamprT   r   r\   _signed_certificate_timestampsr7   rg  r,   r,   r-   rE     s    z2PrecertificateSignedCertificateTimestamps.__init__rl  r/   r3   c                 C  s   dt |  dS )Nz+<PrecertificateSignedCertificateTimestamps(r_   rT   r6   r,   r,   r-   r`     s    z2PrecertificateSignedCertificateTimestamps.__repr__r2   c                 C  s   t t| jS r$   rs   r   rl  r6   r,   r,   r-   rt     s    z2PrecertificateSignedCertificateTimestamps.__hash__rk   rl   rm   c                 C  s   t |tstS | j|jkS r$   )r%   rd  ro   rl  rp   r,   r,   r-   rq     s    
z0PrecertificateSignedCertificateTimestamps.__eq__r    c                 C  s
   t | S r$   rw   r6   r,   r,   r-   r&     s    z6PrecertificateSignedCertificateTimestamps.public_bytesN)rJ   rK   rL   r   Z%PRECERT_SIGNED_CERTIFICATE_TIMESTAMPSrB   rE   r=   ra   rb   rc   r`   rt   rq   r&   r,   r,   r,   r-   rd    s   
	rd  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 )SignedCertificateTimestampsre  r?   rf  c                 C  s,   t |}tdd |D s"td|| _d S )Nc                 s  s   | ]}t |tV  qd S r$   rh  ri  r,   r,   r-   r   *  s   z7SignedCertificateTimestamps.__init__.<locals>.<genexpr>rj  rk  rm  r,   r,   r-   rE   #  s    z$SignedCertificateTimestamps.__init__rl  r/   r3   c                 C  s   dt |  dS )Nz<SignedCertificateTimestamps(r_   rn  r6   r,   r,   r-   r`   8  s    z$SignedCertificateTimestamps.__repr__r2   c                 C  s   t t| jS r$   ro  r6   r,   r,   r-   rt   ;  s    z$SignedCertificateTimestamps.__hash__rk   rl   rm   c                 C  s   t |tstS | j|jkS r$   )r%   rp  ro   rl  rp   r,   r,   r-   rq   >  s    
z"SignedCertificateTimestamps.__eq__r    c                 C  s
   t | S r$   rw   r6   r,   r,   r-   r&   G  s    z(SignedCertificateTimestamps.public_bytesN)rJ   rK   rL   r   ZSIGNED_CERTIFICATE_TIMESTAMPSrB   rE   r=   ra   rb   rc   r`   rt   rq   r&   r,   r,   r,   r-   rp     s   
	rp  c                   @  sn   e Zd ZejZdddddZdddd	d
ZddddZddddZ	e
ddddZddddZdS )	OCSPNoncer    r?   )noncer#   c                 C  s   t |tstd|| _d S )Nznonce must be bytes)r%   r    r\   _nonce)r7   rr  r,   r,   r-   rE   N  s    
zOCSPNonce.__init__rk   rl   rm   c                 C  s   t |tstS | j|jkS r$   )r%   rq  ro   rr  rp   r,   r,   r-   rq   T  s    
zOCSPNonce.__eq__r2   r3   c                 C  s
   t | jS r$   )rs   rr  r6   r,   r,   r-   rt   Z  s    zOCSPNonce.__hash__r/   c                 C  s   d| j dS )Nz<OCSPNonce(nonce=r_   )rr  r6   r,   r,   r-   r`   ]  s    zOCSPNonce.__repr__c                 C  s   | j S r$   )rs  r6   r,   r,   r-   rr  `  s    zOCSPNonce.noncec                 C  s
   t | S r$   rw   r6   r,   r,   r-   r&   d  s    zOCSPNonce.public_bytesN)rJ   rK   rL   r   ZNONCErB   rE   rq   rt   r`   ry   rr  r&   r,   r,   r,   r-   rq  K  s   rq  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   m  s     z3OCSPAcceptableResponses.__init__.<locals>.<genexpr>z'All responses must be ObjectIdentifiers)rT   r-  r\   
_responses)r7   ru  r,   r,   r-   rE   k  s    z OCSPAcceptableResponses.__init__rk   rl   rm   c                 C  s   t |tstS | j|jkS r$   )r%   rt  ro   rw  rp   r,   r,   r-   rq   r  s    
zOCSPAcceptableResponses.__eq__r2   r3   c                 C  s   t t| jS r$   )rs   r   rw  r6   r,   r,   r-   rt   x  s    z OCSPAcceptableResponses.__hash__r/   c                 C  s   d| j  dS )Nz#<OCSPAcceptableResponses(responses=r_   )rw  r6   r,   r,   r-   r`   {  s    z OCSPAcceptableResponses.__repr__z!typing.Iterator[ObjectIdentifier]c                 C  s
   t | jS r$   )r9   rw  r6   r,   r,   r-   rb   ~  s    z OCSPAcceptableResponses.__iter__r    c                 C  s
   t | S r$   rw   r6   r,   r,   r-   r&     s    z$OCSPAcceptableResponses.public_bytesN)rJ   rK   rL   r   ZACCEPTABLE_RESPONSESrB   rE   rq   rt   r`   rb   r&   r,   r,   r,   r-   rt  h  s   rt  c                	   @  s   e Zd ZejZdddddddddddZd	d
ddZdddddZdd
ddZ	e
dd
ddZe
dd
ddZe
dd
ddZe
dd
ddZe
dd
ddZe
dd
dd Ze
dd
d!d"Zd#d
d$d%Zd&S )'IssuingDistributionPointr{   r   rl   r   r?   )r   r   only_contains_user_certsonly_contains_ca_certsonly_some_reasonsindirect_crlonly_contains_attribute_certsr#   c           	      C  s   |d 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-   rP    s      z5IssuingDistributionPoint.__init__.<locals>.<listcomp>r   zOnly one of the following can be set to True: only_contains_user_certs, only_contains_ca_certs, indirect_crl, 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.)rT   r%   r   r   r\   r   r   r   r   rl   r4   r-  _only_contains_user_certs_only_contains_ca_certs_indirect_crl_only_contains_attribute_certs_only_some_reasonsr   r   )	r7   r   r   ry  rz  r{  r|  r}  Zcrl_constraintsr,   r,   r-   rE     st    
z!IssuingDistributionPoint.__init__r/   r3   c                 C  s>   d| j  d| j d| j d| j d| j d| j d| j dS )	Nz$<IssuingDistributionPoint(full_name=z, relative_name=z, only_contains_user_certs=z, only_contains_ca_certs=z, only_some_reasons=z, indirect_crl=z , only_contains_attribute_certs=r_   )r   r   ry  rz  r{  r|  r}  r6   r,   r,   r-   r`     s    <z!IssuingDistributionPoint.__repr__rk   rm   c                 C  sb   t |tstS | j|jko`| j|jko`| j|jko`| j|jko`| j|jko`| j|jko`| j	|j	kS r$   )
r%   rx  ro   r   r   ry  rz  r{  r|  r}  rp   r,   r,   r-   rq     s"    





zIssuingDistributionPoint.__eq__r2   c                 C  s$   t | j| j| j| j| j| j| jfS r$   )rs   r   r   ry  rz  r{  r|  r}  r6   r,   r,   r-   rt     s    z!IssuingDistributionPoint.__hash__r   c                 C  s   | j S r$   r   r6   r,   r,   r-   r     s    z"IssuingDistributionPoint.full_namec                 C  s   | j S r$   r   r6   r,   r,   r-   r     s    z&IssuingDistributionPoint.relative_namec                 C  s   | j S r$   )r~  r6   r,   r,   r-   ry    s    z1IssuingDistributionPoint.only_contains_user_certsc                 C  s   | j S r$   )r  r6   r,   r,   r-   rz    s    z/IssuingDistributionPoint.only_contains_ca_certsc                 C  s   | j S r$   )r  r6   r,   r,   r-   r{    s    z*IssuingDistributionPoint.only_some_reasonsc                 C  s   | j S r$   )r  r6   r,   r,   r-   r|    s    z%IssuingDistributionPoint.indirect_crlc                 C  s   | j S r$   )r  r6   r,   r,   r-   r}    s    z6IssuingDistributionPoint.only_contains_attribute_certsr    c                 C  s
   t | S r$   rw   r6   r,   r,   r-   r&   !  s    z%IssuingDistributionPoint.public_bytesN)rJ   rK   rL   r   ZISSUING_DISTRIBUTION_POINTrB   rE   r`   rq   rt   ry   r   r   ry  rz  r{  r|  r}  r&   r,   r,   r,   r-   rx    s(   Srx  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_idr2   _major_version_minor_version)r7   r  r  r  r,   r,   r-   rE   (  s     
zMSCertificateTemplate.__init__r3   c                 C  s   | j S r$   )r  r6   r,   r,   r-   r  <  s    z!MSCertificateTemplate.template_idc                 C  s   | j S r$   )r  r6   r,   r,   r-   r  @  s    z#MSCertificateTemplate.major_versionc                 C  s   | j S r$   )r  r6   r,   r,   r-   r  D  s    z#MSCertificateTemplate.minor_versionr/   c                 C  s   d| j  d| j d| j dS )Nz#<MSCertificateTemplate(template_id=z, major_version=z, minor_version=r_   )r  r  r  r6   r,   r,   r-   r`   H  s    zMSCertificateTemplate.__repr__rk   rl   rm   c                 C  s2   t |tstS | j|jko0| j|jko0| j|jkS r$   )r%   r  ro   r  r  r  rp   r,   r,   r-   rq   O  s    


zMSCertificateTemplate.__eq__r2   c                 C  s   t | j| j| jfS r$   )rs   r  r  r  r6   r,   r,   r-   rt   Y  s    zMSCertificateTemplate.__hash__r    c                 C  s
   t | S r$   rw   r6   r,   r,   r-   r&   \  s    z"MSCertificateTemplate.public_bytesN)rJ   rK   rL   r   ZMS_CERTIFICATE_TEMPLATErB   rE   ry   r  r  r  r`   rq   rt   r&   r,   r,   r,   r-   r  %  s   
r  c                   @  s|   e Zd ZddddddZedddd	Zeddd
dZddddZdddddZddddZ	ddddZ
dS )r[   r   r    r?   )rB   r]   r#   c                 C  s"   t |tstd|| _|| _d S )Nr  )r%   r   r\   r2  r4  )r7   rB   r]   r,   r,   r-   rE   a  s    
zUnrecognizedExtension.__init__r3   c                 C  s   | j S r$   r5  r6   r,   r,   r-   rB   g  s    zUnrecognizedExtension.oidc                 C  s   | j S r$   r6  r6   r,   r,   r-   r]   k  s    zUnrecognizedExtension.valuer/   c                 C  s   d| j  d| jdS )Nz<UnrecognizedExtension(oid=r7  r_   )rB   r]   r6   r,   r,   r-   r`   o  s    zUnrecognizedExtension.__repr__rk   rl   rm   c                 C  s&   t |tstS | j|jko$| j|jkS r$   )r%   r[   ro   rB   r]   rp   r,   r,   r-   rq   u  s    
zUnrecognizedExtension.__eq__r2   c                 C  s   t | j| jfS r$   )rs   rB   r]   r6   r,   r,   r-   rt   {  s    zUnrecognizedExtension.__hash__c                 C  s   | j S r$   r  r6   r,   r,   r-   r&   ~  s    z"UnrecognizedExtension.public_bytesN)rJ   rK   rL   rE   ry   rB   r]   r`   rq   rt   r&   r,   r,   r,   r-   r[   `  s   r[   )i
__future__r   abcra  r(   r(  rS  Zcryptographyr   Z"cryptography.hazmat.bindings._rustr   r   rx   Zcryptography.hazmat.primitivesr   r   Z,cryptography.hazmat.primitives.asymmetric.ecr   Z-cryptography.hazmat.primitives.asymmetric.rsar	   Z/cryptography.hazmat.primitives.asymmetric.typesr
   r   Z*cryptography.x509.certificate_transparencyr   Zcryptography.x509.general_namer   r   r   r   r   r   r   r   r   Zcryptography.x509.namer   r   Zcryptography.x509.oidr   r   r   r   TypeVarr   r.   r=   	Exceptionr>   rN   ABCMetar   rR   rd   rz   r   r   r   r   r   r   r   r   r   Enumr   r   r   r   r   r   r   r   r   Z_REASON_BIT_MAPPINGZ_CRLREASONFLAGSr   r   r   r   r   r   r   r   r   r  Z_TLS_FEATURE_TYPE_TO_ENUMr  r
  r  Genericr0  r8  rU  rY  rZ  r[  r_  rd  rp  rq  rt  rx  r  r[   r,   r,   r,   r-   <module>   s   ,  'l$!!(.%%k        A;+("  s0SKKK++ !;