a
    ϏPf)                    @  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   ZEncodingZDERZPublicFormatZPKCS1r   ZX962ZUncompressedPointZSubjectPublicKeyInfor   Zparse_spki_for_datahashlibsha1digest)r"   dataZ
serialized r+   ]/var/www/html/python-backend/venv/lib/python3.9/site-packages/cryptography/x509/extensions.py_key_identifier_from_public_key2   s     


r-   str
field_namec                   s4   dd fdd} fdd} fdd}|||fS )	Nintr#   c                   s   t t|  S r$   )lengetattrselfr/   r+   r,   
len_methodK   s    z*_make_sequence_methods.<locals>.len_methodc                   s   t t|  S r$   )iterr4   r5   r/   r+   r,   iter_methodN   s    z+_make_sequence_methods.<locals>.iter_methodc                   s   t |  | S r$   )r4   )r6   idxr/   r+   r,   getitem_methodQ   s    z._make_sequence_methods.<locals>.getitem_methodr+   )r0   r7   r9   r;   r+   r/   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__rA   r6   r@   rA   	__class__r+   r,   rD   X   s    zDuplicateExtension.__init____name__
__module____qualname__rD   __classcell__r+   r+   rF   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$   rB   rE   rF   r+   r,   rD   ^   s    zExtensionNotFound.__init__rH   r+   r+   rF   r,   rM   ]   s   rM   c                   @  s$   e Zd ZU ded< ddddZdS )r   z!typing.ClassVar[ObjectIdentifier]rA   r    r2   c                 C  s   t d| dS )z7
        Serializes the extension type to DER.
        z3public_bytes is not implemented for extension type N)NotImplementedErrorr5   r+   r+   r,   r&   f   s    zExtensionType.public_bytesN)rI   rJ   rK   __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)r6   rR   r+   r+   r,   rD   p   s    zExtensions.__init__r   zExtension[ExtensionType])rA   r#   c                 C  s2   | D ]}|j |kr|  S qtd| d|d S )NNo  extension was found)rA   rM   )r6   rA   extr+   r+   r,   get_extension_for_oidu   s    

z Extensions.get_extension_for_oidztype[ExtensionTypeVar]zExtension[ExtensionTypeVar])extclassr#   c                 C  sF   |t u rtd| D ]}t|j|r|  S qtd| d|jd S )Nz|UnrecognizedExtension can't be used with get_extension_for_class because more than one instance of the class may be present.rU   rV   )UnrecognizedExtension	TypeErrorr%   valuerM   rA   )r6   rY   rW   r+   r+   r,   get_extension_for_class~   s    
z"Extensions.get_extension_for_classrT   r.   r2   c                 C  s   d| j  dS )Nz<Extensions()>)rT   r5   r+   r+   r,   __repr__   s    zExtensions.__repr__N)rI   rJ   rK   rD   rX   r]   r<   __len____iter____getitem__r_   r+   r+   r+   r,   rQ   o   s
   	rQ   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 )	CRLNumberr1   r>   
crl_numberr#   c                 C  s   t |tstd|| _d S Nzcrl_number must be an integerr%   r1   r[   _crl_numberr6   re   r+   r+   r,   rD      s    
zCRLNumber.__init__objectboolotherr#   c                 C  s   t |tstS | j|jkS r$   )r%   rc   NotImplementedre   r6   rm   r+   r+   r,   __eq__   s    
zCRLNumber.__eq__r2   c                 C  s
   t | jS r$   hashre   r5   r+   r+   r,   __hash__   s    zCRLNumber.__hash__r.   c                 C  s   d| j  dS )Nz<CRLNumber(r^   re   r5   r+   r+   r,   r_      s    zCRLNumber.__repr__c                 C  s   | j S r$   rh   r5   r+   r+   r,   re      s    zCRLNumber.crl_numberr    c                 C  s
   t | S r$   	rust_x509Zencode_extension_valuer5   r+   r+   r,   r&      s    zCRLNumber.public_bytesN)rI   rJ   rK   r   Z
CRL_NUMBERrA   rD   rp   rs   r_   propertyre   r&   r+   r+   r+   r,   rc      s   rc   c                   @  s   e Zd ZejZdddddddZedd d	d
dZedd dddZ	ddddZ
dddddZddddZeddddZedddd Zeddd!d"Zd#dd$d%Zd&S )'AuthorityKeyIdentifierzbytes | None#typing.Iterable[GeneralName] | None
int | Noner>   )key_identifierauthority_cert_issuerauthority_cert_serial_numberr#   c                 C  sr   |d u |d u krt d|d urBt|}tdd |D sBtd|d ur\t|ts\td|| _|| _|| _d S )NzXauthority_cert_issuer and authority_cert_serial_number must both be present or both Nonec                 s  s   | ]}t |tV  qd S r$   r%   r   .0xr+   r+   r,   	<genexpr>   s   z2AuthorityKeyIdentifier.__init__.<locals>.<genexpr>z;authority_cert_issuer must be a list of GeneralName objectsz/authority_cert_serial_number must be an integer)	
ValueErrorrS   allr[   r%   r1   _key_identifier_authority_cert_issuer_authority_cert_serial_number)r6   r|   r}   r~   r+   r+   r,   rD      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.   r2   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   r5   r+   r+   r,   r_      s    
zAuthorityKeyIdentifier.__repr__rj   rk   rl   c                 C  s2   t |tstS | j|jko0| j|jko0| j|jkS r$   )r%   ry   rn   r|   r}   r~   ro   r+   r+   r,   rp      s    

zAuthorityKeyIdentifier.__eq__r1   c                 C  s,   | j d u rd }n
t| j }t| j|| jfS r$   )r}   tuplerr   r|   r~   )r6   Zacir+   r+   r,   rs     s    

zAuthorityKeyIdentifier.__hash__c                 C  s   | j S r$   )r   r5   r+   r+   r,   r|     s    z%AuthorityKeyIdentifier.key_identifierlist[GeneralName] | Nonec                 C  s   | j S r$   )r   r5   r+   r+   r,   r}     s    z,AuthorityKeyIdentifier.authority_cert_issuerc                 C  s   | j S r$   )r   r5   r+   r+   r,   r~     s    z3AuthorityKeyIdentifier.authority_cert_serial_numberr    c                 C  s
   t | S r$   rv   r5   r+   r+   r,   r&     s    z#AuthorityKeyIdentifier.public_bytesN)rI   rJ   rK   r   ZAUTHORITY_KEY_IDENTIFIERrA   rD   classmethodr   r   r_   rp   rs   rx   r|   r}   r~   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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)r6   r)   r+   r+   r,   rD   "  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_keyr2   c                 C  s   | j S r$   r   r5   r+   r+   r,   r)   +  s    zSubjectKeyIdentifier.digestc                 C  s   | j S r$   r   r5   r+   r+   r,   r|   /  s    z#SubjectKeyIdentifier.key_identifierr.   c                 C  s   d| j dS )Nz<SubjectKeyIdentifier(digest=r^   r   r5   r+   r+   r,   r_   3  s    zSubjectKeyIdentifier.__repr__rj   rk   rl   c                 C  s   t |tstS t| j|jS r$   )r%   r   rn   r   Zbytes_eqr)   ro   r+   r+   r,   rp   6  s    
zSubjectKeyIdentifier.__eq__r1   c                 C  s
   t | jS r$   )rr   r)   r5   r+   r+   r,   rs   <  s    zSubjectKeyIdentifier.__hash__c                 C  s
   t | S r$   rv   r5   r+   r+   r,   r&   ?  s    z!SubjectKeyIdentifier.public_bytesN)rI   rJ   rK   r   ZSUBJECT_KEY_IDENTIFIERrA   rD   r   r   rx   r)   r|   r_   rp   rs   r&   r+   r+   r+   r,   r     s   r   c                   @  sj   e Zd ZejZdddddZed\ZZ	Z
ddd	d
ZdddddZddddZddddZdS )AuthorityInformationAccess"typing.Iterable[AccessDescription]r>   descriptionsr#   c                 C  s,   t |}tdd |D s"td|| _d S )Nc                 s  s   | ]}t |tV  qd S r$   r%   AccessDescriptionr   r+   r+   r,   r   J      z6AuthorityInformationAccess.__init__.<locals>.<genexpr>@Every item in the descriptions list must be an AccessDescriptionrS   r   r[   _descriptionsr6   r   r+   r+   r,   rD   F  s    z#AuthorityInformationAccess.__init__r   r.   r2   c                 C  s   d| j  dS )Nz<AuthorityInformationAccess(r^   r   r5   r+   r+   r,   r_   T  s    z#AuthorityInformationAccess.__repr__rj   rk   rl   c                 C  s   t |tstS | j|jkS r$   )r%   r   rn   r   ro   r+   r+   r,   rp   W  s    
z!AuthorityInformationAccess.__eq__r1   c                 C  s   t t| jS r$   rr   r   r   r5   r+   r+   r,   rs   ]  s    z#AuthorityInformationAccess.__hash__r    c                 C  s
   t | S r$   rv   r5   r+   r+   r,   r&   `  s    z'AuthorityInformationAccess.public_bytesN)rI   rJ   rK   r   ZAUTHORITY_INFORMATION_ACCESSrA   rD   r<   r`   ra   rb   r_   rp   rs   r&   r+   r+   r+   r,   r   C  s   r   c                   @  sj   e Zd ZejZdddddZed\ZZ	Z
ddd	d
ZdddddZddddZddddZdS )SubjectInformationAccessr   r>   r   c                 C  s,   t |}tdd |D s"td|| _d S )Nc                 s  s   | ]}t |tV  qd S r$   r   r   r+   r+   r,   r   k  r   z4SubjectInformationAccess.__init__.<locals>.<genexpr>r   r   r   r+   r+   r,   rD   g  s    z!SubjectInformationAccess.__init__r   r.   r2   c                 C  s   d| j  dS )Nz<SubjectInformationAccess(r^   r   r5   r+   r+   r,   r_   u  s    z!SubjectInformationAccess.__repr__rj   rk   rl   c                 C  s   t |tstS | j|jkS r$   )r%   r   rn   r   ro   r+   r+   r,   rp   x  s    
zSubjectInformationAccess.__eq__r1   c                 C  s   t t| jS r$   r   r5   r+   r+   r,   rs   ~  s    z!SubjectInformationAccess.__hash__r    c                 C  s
   t | S r$   rv   r5   r+   r+   r,   r&     s    z%SubjectInformationAccess.public_bytesN)rI   rJ   rK   r   ZSUBJECT_INFORMATION_ACCESSrA   rD   r<   r`   ra   rb   r_   rp   rs   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)r6   r   r   r+   r+   r,   rD     s    

zAccessDescription.__init__r.   r2   c                 C  s
   d | S )NzY<AccessDescription(access_method={0.access_method}, access_location={0.access_location})>formatr5   r+   r+   r,   r_     s    zAccessDescription.__repr__rj   rk   rl   c                 C  s&   t |tstS | j|jko$| j|jkS r$   )r%   r   rn   r   r   ro   r+   r+   r,   rp     s
    

zAccessDescription.__eq__r1   c                 C  s   t | j| jfS r$   )rr   r   r   r5   r+   r+   r,   rs     s    zAccessDescription.__hash__c                 C  s   | j S r$   )r   r5   r+   r+   r,   r     s    zAccessDescription.access_methodc                 C  s   | j S r$   )r   r5   r+   r+   r,   r     s    z!AccessDescription.access_locationN)
rI   rJ   rK   rD   r_   rp   rs   rx   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 )BasicConstraintsrk   r{   r>   )capath_lengthr#   c                 C  sX   t |tstd|d ur&|s&td|d urHt |tr@|dk rHtd|| _|| _d S )Nzca must be a boolean valuez)path_length must be None when ca is Falser   z2path_length must be a non-negative integer or None)r%   rk   r[   r   r1   _ca_path_length)r6   r   r   r+   r+   r,   rD     s    
zBasicConstraints.__init__r2   c                 C  s   | j S r$   )r   r5   r+   r+   r,   r     s    zBasicConstraints.cac                 C  s   | j S r$   )r   r5   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   r5   r+   r+   r,   r_     s    zBasicConstraints.__repr__rj   rl   c                 C  s&   t |tstS | j|jko$| j|jkS r$   )r%   r   rn   r   r   ro   r+   r+   r,   rp     s    
zBasicConstraints.__eq__r1   c                 C  s   t | j| jfS r$   )rr   r   r   r5   r+   r+   r,   rs     s    zBasicConstraints.__hash__r    c                 C  s
   t | S r$   rv   r5   r+   r+   r,   r&     s    zBasicConstraints.public_bytesN)rI   rJ   rK   r   ZBASIC_CONSTRAINTSrA   rD   rx   r   r   r_   rp   rs   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 )DeltaCRLIndicatorr1   r>   rd   c                 C  s   t |tstd|| _d S rf   rg   ri   r+   r+   r,   rD     s    
zDeltaCRLIndicator.__init__r2   c                 C  s   | j S r$   ru   r5   r+   r+   r,   re     s    zDeltaCRLIndicator.crl_numberrj   rk   rl   c                 C  s   t |tstS | j|jkS r$   )r%   r   rn   re   ro   r+   r+   r,   rp     s    
zDeltaCRLIndicator.__eq__c                 C  s
   t | jS r$   rq   r5   r+   r+   r,   rs     s    zDeltaCRLIndicator.__hash__r.   c                 C  s   d| j  dS )Nz<DeltaCRLIndicator(crl_number=r^   rt   r5   r+   r+   r,   r_     s    zDeltaCRLIndicator.__repr__r    c                 C  s
   t | S r$   rv   r5   r+   r+   r,   r&     s    zDeltaCRLIndicator.public_bytesN)rI   rJ   rK   r   ZDELTA_CRL_INDICATORrA   rD   rx   re   rp   rs   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rS   r   r[   _distribution_pointsr6   r   r+   r+   r,   rD     s    zCRLDistributionPoints.__init__r   r.   r2   c                 C  s   d| j  dS )Nz<CRLDistributionPoints(r^   r   r5   r+   r+   r,   r_     s    zCRLDistributionPoints.__repr__rj   rk   rl   c                 C  s   t |tstS | j|jkS r$   )r%   r   rn   r   ro   r+   r+   r,   rp     s    
zCRLDistributionPoints.__eq__r1   c                 C  s   t t| jS r$   rr   r   r   r5   r+   r+   r,   rs     s    zCRLDistributionPoints.__hash__r    c                 C  s
   t | S r$   rv   r5   r+   r+   r,   r&     s    z"CRLDistributionPoints.public_bytesN)rI   rJ   rK   r   ZCRL_DISTRIBUTION_POINTSrA   rD   r<   r`   ra   rb   r_   rp   rs   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,   rD      s    zFreshestCRL.__init__r   r.   r2   c                 C  s   d| j  dS )Nz<FreshestCRL(r^   r   r5   r+   r+   r,   r_   2  s    zFreshestCRL.__repr__rj   rk   rl   c                 C  s   t |tstS | j|jkS r$   )r%   r   rn   r   ro   r+   r+   r,   rp   5  s    
zFreshestCRL.__eq__r1   c                 C  s   t t| jS r$   r   r5   r+   r+   r,   rs   ;  s    zFreshestCRL.__hash__r    c                 C  s
   t | S r$   rv   r5   r+   r+   r,   r&   >  s    zFreshestCRL.public_bytesN)rI   rJ   rK   r   ZFRESHEST_CRLrA   rD   r<   r`   ra   rb   r_   rp   rs   r&   r+   r+   r+   r,   r     s   
r   c                   @  s   e Zd ZddddddddZdd	d
dZdddddZdd	ddZedd	ddZedd	ddZ	edd	ddZ
edd	ddZdS )r   rz    RelativeDistinguishedName | Nonefrozenset[ReasonFlags] | Noner>   )	full_namerelative_namereasons
crl_issuerr#   c                 C  s   |r|rt d|s$|s$|s$t d|d urNt|}tdd |D sNtd|rdt|tsdtd|d urt|}tdd |D std|rt|trtd	d |D std
|rtj|v stj	|v 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  r   z-DistributionPoint.__init__.<locals>.<genexpr>z/full_name must be a list of GeneralName objectsz1relative_name must be a RelativeDistinguishedNamec                 s  s   | ]}t |tV  qd S r$   r   r   r+   r+   r,   r   d  r   z2crl_issuer must be None or a list of general namesc                 s  s   | ]}t |tV  qd S r$   r%   ReasonFlagsr   r+   r+   r,   r   k  r   z0reasons must be None or frozenset of ReasonFlagszLunspecified and remove_from_crl are not valid reasons in a DistributionPoint)r   rS   r   r[   r%   r   	frozensetr   unspecifiedremove_from_crl
_full_name_relative_name_reasons_crl_issuer)r6   r   r   r   r   r+   r+   r,   rD   C  sV    
zDistributionPoint.__init__r.   r2   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   r5   r+   r+   r,   r_   }  s    zDistributionPoint.__repr__rj   rk   rl   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   rn   r   r   r   r   ro   r+   r+   r,   rp     s    



zDistributionPoint.__eq__r1   c                 C  sH   | j d urt| j }nd }| jd ur0t| j}nd }t|| j| j|fS r$   )r   r   r   rr   r   r   )r6   fnr   r+   r+   r,   rs     s    

zDistributionPoint.__hash__r   c                 C  s   | j S r$   r   r5   r+   r+   r,   r     s    zDistributionPoint.full_namec                 C  s   | j S r$   r   r5   r+   r+   r,   r     s    zDistributionPoint.relative_namec                 C  s   | j S r$   )r   r5   r+   r+   r,   r     s    zDistributionPoint.reasonsc                 C  s   | j S r$   )r   r5   r+   r+   r,   r     s    zDistributionPoint.crl_issuerN)rI   rJ   rK   rD   r_   rp   rs   rx   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)rI   rJ   rK   r   key_compromiseca_compromiseaffiliation_changedr   cessation_of_operationcertificate_holdprivilege_withdrawnaa_compromiser   r+   r+   r+   r,   r     s   r   )                        r   r   r   r   r   r   r   r   c                   @  s   e Zd ZejZddddddZdddd	Zd
ddddZddddZ	e
ddddZe
ddddZddddZdS )PolicyConstraintsr{   r>   )require_explicit_policyinhibit_policy_mappingr#   c                 C  s\   |d urt |tstd|d ur4t |ts4td|d u rL|d u rLtd|| _|| _d S )Nz>require_explicit_policy must be a non-negative integer or Nonez=inhibit_policy_mapping must be a non-negative integer or NonezSAt least one of require_explicit_policy and inhibit_policy_mapping must not be None)r%   r1   r[   r   _require_explicit_policy_inhibit_policy_mapping)r6   r   r   r+   r+   r,   rD     s$    

zPolicyConstraints.__init__r.   r2   c                 C  s
   d | S )Nz{<PolicyConstraints(require_explicit_policy={0.require_explicit_policy}, inhibit_policy_mapping={0.inhibit_policy_mapping})>r   r5   r+   r+   r,   r_     s    zPolicyConstraints.__repr__rj   rk   rl   c                 C  s&   t |tstS | j|jko$| j|jkS r$   )r%   r   rn   r   r   ro   r+   r+   r,   rp     s
    

zPolicyConstraints.__eq__r1   c                 C  s   t | j| jfS r$   )rr   r   r   r5   r+   r+   r,   rs     s    
zPolicyConstraints.__hash__c                 C  s   | j S r$   )r   r5   r+   r+   r,   r     s    z)PolicyConstraints.require_explicit_policyc                 C  s   | j S r$   )r   r5   r+   r+   r,   r     s    z(PolicyConstraints.inhibit_policy_mappingr    c                 C  s
   t | S r$   rv   r5   r+   r+   r,   r&     s    zPolicyConstraints.public_bytesN)rI   rJ   rK   r   ZPOLICY_CONSTRAINTSrA   rD   r_   rp   rs   rx   r   r   r&   r+   r+   r+   r,   r     s   	r   c                   @  sj   e Zd ZejZdddddZed\ZZ	Z
ddd	d
ZdddddZddddZddddZdS )CertificatePoliciesz"typing.Iterable[PolicyInformation]r>   )policiesr#   c                 C  s,   t |}tdd |D s"td|| _d S )Nc                 s  s   | ]}t |tV  qd S r$   )r%   PolicyInformationr   r+   r+   r,   r   #  r   z/CertificatePolicies.__init__.<locals>.<genexpr>z;Every item in the policies list must be a PolicyInformation)rS   r   r[   	_policies)r6   r   r+   r+   r,   rD   !  s    zCertificatePolicies.__init__r   r.   r2   c                 C  s   d| j  dS )Nz<CertificatePolicies(r^   )r   r5   r+   r+   r,   r_   -  s    zCertificatePolicies.__repr__rj   rk   rl   c                 C  s   t |tstS | j|jkS r$   )r%   r   rn   r   ro   r+   r+   r,   rp   0  s    
zCertificatePolicies.__eq__r1   c                 C  s   t t| jS r$   )rr   r   r   r5   r+   r+   r,   rs   6  s    zCertificatePolicies.__hash__r    c                 C  s
   t | S r$   rv   r5   r+   r+   r,   r&   9  s    z CertificatePolicies.public_bytesN)rI   rJ   rK   r   ZCERTIFICATE_POLICIESrA   rD   r<   r`   ra   rb   r_   rp   rs   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 urBt|}tdd |D sBtd|| _d S )Nz-policy_identifier must be an ObjectIdentifierc                 s  s   | ]}t |ttfV  qd S r$   )r%   r.   
UserNoticer   r+   r+   r,   r   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_identifierrS   r   _policy_qualifiers)r6   r   r   r+   r+   r,   rD   >  s    
zPolicyInformation.__init__r.   r2   c                 C  s
   d | S )Nze<PolicyInformation(policy_identifier={0.policy_identifier}, policy_qualifiers={0.policy_qualifiers})>r   r5   r+   r+   r,   r_   T  s    zPolicyInformation.__repr__rj   rk   rl   c                 C  s&   t |tstS | j|jko$| j|jkS r$   )r%   r   rn   r   r   ro   r+   r+   r,   rp   Z  s
    

zPolicyInformation.__eq__r1   c                 C  s(   | j d urt| j }nd }t| j|fS r$   )r   r   rr   r   )r6   Zpqr+   r+   r,   rs   c  s    
zPolicyInformation.__hash__c                 C  s   | j S r$   )r   r5   r+   r+   r,   r   m  s    z#PolicyInformation.policy_identifierzlist[str | UserNotice] | Nonec                 C  s   | j S r$   )r   r5   r+   r+   r,   r   q  s    z#PolicyInformation.policy_qualifiersN)
rI   rJ   rK   rD   r_   rp   rs   rx   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)r6   r   r   r+   r+   r,   rD   y  s    zUserNotice.__init__r.   r2   c                 C  s
   d | S )NzV<UserNotice(notice_reference={0.notice_reference}, explicit_text={0.explicit_text!r})>r   r5   r+   r+   r,   r_     s    zUserNotice.__repr__rj   rk   rl   c                 C  s&   t |tstS | j|jko$| j|jkS r$   )r%   r   rn   r   r   ro   r+   r+   r,   rp     s
    

zUserNotice.__eq__r1   c                 C  s   t | j| jfS r$   )rr   r   r   r5   r+   r+   r,   rs     s    zUserNotice.__hash__c                 C  s   | j S r$   )r   r5   r+   r+   r,   r     s    zUserNotice.notice_referencec                 C  s   | j S r$   )r   r5   r+   r+   r,   r     s    zUserNotice.explicit_textN)
rI   rJ   rK   rD   r_   rp   rs   rx   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%   r1   r   r+   r+   r,   r     r   z+NoticeReference.__init__.<locals>.<genexpr>z)notice_numbers must be a list of integers)_organizationrS   r   r[   _notice_numbers)r6   r   r   r+   r+   r,   rD     s
    zNoticeReference.__init__r.   r2   c                 C  s
   d | S )NzU<NoticeReference(organization={0.organization!r}, notice_numbers={0.notice_numbers})>r   r5   r+   r+   r,   r_     s    zNoticeReference.__repr__rj   rk   rl   c                 C  s&   t |tstS | j|jko$| j|jkS r$   )r%   r   rn   r   r   ro   r+   r+   r,   rp     s
    

zNoticeReference.__eq__r1   c                 C  s   t | jt| jfS r$   )rr   r   r   r   r5   r+   r+   r,   rs     s    zNoticeReference.__hash__c                 C  s   | j S r$   )r   r5   r+   r+   r,   r     s    zNoticeReference.organizationz	list[int]c                 C  s   | j S r$   )r   r5   r+   r+   r,   r     s    zNoticeReference.notice_numbersN)
rI   rJ   rK   rD   r_   rp   rs   rx   r   r   r+   r+   r+   r,   r     s   	r   c                   @  sj   e Zd ZejZdddddZed\ZZ	Z
ddd	d
ZdddddZddddZddddZdS )ExtendedKeyUsage!typing.Iterable[ObjectIdentifier]r>   )usagesr#   c                 C  s,   t |}tdd |D s"td|| _d S )Nc                 s  s   | ]}t |tV  qd S r$   r%   r   r   r+   r+   r,   r     r   z,ExtendedKeyUsage.__init__.<locals>.<genexpr>z9Every item in the usages list must be an ObjectIdentifier)rS   r   r[   _usages)r6   r   r+   r+   r,   rD     s    zExtendedKeyUsage.__init__r   r.   r2   c                 C  s   d| j  dS )Nz<ExtendedKeyUsage(r^   )r   r5   r+   r+   r,   r_     s    zExtendedKeyUsage.__repr__rj   rk   rl   c                 C  s   t |tstS | j|jkS r$   )r%   r   rn   r   ro   r+   r+   r,   rp     s    
zExtendedKeyUsage.__eq__r1   c                 C  s   t t| jS r$   )rr   r   r   r5   r+   r+   r,   rs     s    zExtendedKeyUsage.__hash__r    c                 C  s
   t | S r$   rv   r5   r+   r+   r,   r&     s    zExtendedKeyUsage.public_bytesN)rI   rJ   rK   r   ZEXTENDED_KEY_USAGErA   rD   r<   r`   ra   rb   r_   rp   rs   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 )OCSPNoCheckrj   rk   rl   c                 C  s   t |tstS dS NT)r%   r   rn   ro   r+   r+   r,   rp     s    
zOCSPNoCheck.__eq__r1   r2   c                 C  s   t tS r$   )rr   r   r5   r+   r+   r,   rs     s    zOCSPNoCheck.__hash__r.   c                 C  s   dS )Nz<OCSPNoCheck()>r+   r5   r+   r+   r,   r_     s    zOCSPNoCheck.__repr__r    c                 C  s
   t | S r$   rv   r5   r+   r+   r,   r&     s    zOCSPNoCheck.public_bytesN)
rI   rJ   rK   r   ZOCSP_NO_CHECKrA   rp   rs   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 )PrecertPoisonrj   rk   rl   c                 C  s   t |tstS dS r   )r%   r   rn   ro   r+   r+   r,   rp     s    
zPrecertPoison.__eq__r1   r2   c                 C  s   t tS r$   )rr   r   r5   r+   r+   r,   rs     s    zPrecertPoison.__hash__r.   c                 C  s   dS )Nz<PrecertPoison()>r+   r5   r+   r+   r,   r_     s    zPrecertPoison.__repr__r    c                 C  s
   t | S r$   rv   r5   r+   r+   r,   r&     s    zPrecertPoison.public_bytesN)
rI   rJ   rK   r   ZPRECERT_POISONrA   rp   rs   r_   r&   r+   r+   r+   r,   r     s
   r   c                   @  sj   e Zd ZejZdddddZed\ZZ	Z
ddd	d
ZdddddZddddZddddZdS )
TLSFeatureztyping.Iterable[TLSFeatureType]r>   )featuresr#   c                 C  s8   t |}tdd |D r&t|dkr.td|| _d S )Nc                 s  s   | ]}t |tV  qd S r$   )r%   TLSFeatureTyper   r+   r+   r,   r     r   z&TLSFeature.__init__.<locals>.<genexpr>r   z@features must be a list of elements from the TLSFeatureType enum)rS   r   r3   r[   	_features)r6   r  r+   r+   r,   rD     s    
zTLSFeature.__init__r  r.   r2   c                 C  s   d| j  dS )Nz<TLSFeature(features=r^   )r  r5   r+   r+   r,   r_   !  s    zTLSFeature.__repr__rj   rk   rl   c                 C  s   t |tstS | j|jkS r$   )r%   r   rn   r  ro   r+   r+   r,   rp   $  s    
zTLSFeature.__eq__r1   c                 C  s   t t| jS r$   )rr   r   r  r5   r+   r+   r,   rs   *  s    zTLSFeature.__hash__r    c                 C  s
   t | S r$   rv   r5   r+   r+   r,   r&   -  s    zTLSFeature.public_bytesN)rI   rJ   rK   r   ZTLS_FEATURErA   rD   r<   r`   ra   rb   r_   rp   rs   r&   r+   r+   r+   r,   r     s   r   c                   @  s   e Zd ZdZdZdS )r  r      N)rI   rJ   rK   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><  r   r  c                   @  sn   e Zd ZejZdddddZdddd	Zd
ddddZddddZ	e
ddddZddddZdS )InhibitAnyPolicyr1   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%   r1   r[   r   _skip_certs)r6   r  r+   r+   r,   rD   B  s
    
zInhibitAnyPolicy.__init__r.   r2   c                 C  s   d| j  dS )Nz<InhibitAnyPolicy(skip_certs=r^   )r  r5   r+   r+   r,   r_   K  s    zInhibitAnyPolicy.__repr__rj   rk   rl   c                 C  s   t |tstS | j|jkS r$   )r%   r  rn   r  ro   r+   r+   r,   rp   N  s    
zInhibitAnyPolicy.__eq__c                 C  s
   t | jS r$   )rr   r  r5   r+   r+   r,   rs   T  s    zInhibitAnyPolicy.__hash__c                 C  s   | j S r$   )r	  r5   r+   r+   r,   r  W  s    zInhibitAnyPolicy.skip_certsr    c                 C  s
   t | S r$   rv   r5   r+   r+   r,   r&   [  s    zInhibitAnyPolicy.public_bytesN)rI   rJ   rK   r   ZINHIBIT_ANY_POLICYrA   rD   r_   rp   rs   rx   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 )'KeyUsagerk   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)
r6   r  r  r  r  r  r  r  r  r  r+   r+   r,   rD   b  s    zKeyUsage.__init__r2   c                 C  s   | j S r$   )r  r5   r+   r+   r,   r  ~  s    zKeyUsage.digital_signaturec                 C  s   | j S r$   )r  r5   r+   r+   r,   r    s    zKeyUsage.content_commitmentc                 C  s   | j S r$   )r  r5   r+   r+   r,   r    s    zKeyUsage.key_enciphermentc                 C  s   | j S r$   )r  r5   r+   r+   r,   r    s    zKeyUsage.data_enciphermentc                 C  s   | j S r$   )r  r5   r+   r+   r,   r    s    zKeyUsage.key_agreementc                 C  s   | j S r$   )r  r5   r+   r+   r,   r    s    zKeyUsage.key_cert_signc                 C  s   | j S r$   )r  r5   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  r5   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  r5   r+   r+   r,   r    s
    zKeyUsage.decipher_onlyr.   c                 C  sv   z| j }| j}W n ty*   d}d}Y n0 d| j d| j d| j d| j d| j d| j d| j	 d	| d
| dS )NFz<KeyUsage(digital_signature=z, content_commitment=z, key_encipherment=z, data_encipherment=z, key_agreement=z, key_cert_sign=z, crl_sign=z, encipher_only=z, decipher_only=r^   )
r  r  r   r  r  r  r  r  r  r  )r6   r  r  r+   r+   r,   r_     s0    


zKeyUsage.__repr__rj   rl   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
  rn   r  r  r  r  r  r  r  r  r  ro   r+   r+   r,   rp     s&    








zKeyUsage.__eq__r1   c              
   C  s,   t | j| j| j| j| j| j| j| j| j	f	S r$   )
rr   r  r  r  r  r  r  r  r  r  r5   r+   r+   r,   rs     s    zKeyUsage.__hash__r    c                 C  s
   t | S r$   rv   r5   r+   r+   r,   r&     s    zKeyUsage.public_bytesN)rI   rJ   rK   r   Z	KEY_USAGErA   rD   rx   r  r  r  r  r  r  r  r  r  r_   rp   rs   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 )#NameConstraintsrz   r>   )permitted_subtreesexcluded_subtreesr#   c                 C  s   |d ur@t |}|stdtdd |D s6td| | |d urt |}|s\tdtdd |D svtd| | |d u r|d u 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     r   z+NameConstraints.__init__.<locals>.<genexpr>z@permitted_subtrees must be a list of GeneralName objects or Nonez2excluded_subtrees must be a non-empty list or Nonec                 s  s   | ]}t |tV  qd S r$   r   r   r+   r+   r,   r      r   z?excluded_subtrees must be a list of GeneralName objects or NonezIAt least one of permitted_subtrees and excluded_subtrees must not be None)rS   r   r   r[   _validate_tree_permitted_subtrees_excluded_subtrees)r6   r  r  r+   r+   r,   rD     s8    

zNameConstraints.__init__rj   rk   rl   c                 C  s&   t |tstS | j|jko$| j|jkS r$   )r%   r  rn   r  r  ro   r+   r+   r,   rp     s
    

zNameConstraints.__eq__typing.Iterable[GeneralName])treer#   c                 C  s   |  | | | d S r$   )_validate_ip_name_validate_dns_namer6   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v 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.   r2   c                 C  s   d| j  d| j dS )Nz$<NameConstraints(permitted_subtrees=z, excluded_subtrees=r^   )r  r  r5   r+   r+   r,   r_   4  s    
zNameConstraints.__repr__r1   c                 C  s@   | j d urt| j }nd }| jd ur0t| j}nd }t||fS r$   )r  r   r  rr   )r6   Zpsesr+   r+   r,   rs   :  s    

zNameConstraints.__hash__r   c                 C  s   | j S r$   )r!  r5   r+   r+   r,   r  G  s    z"NameConstraints.permitted_subtreesc                 C  s   | j S r$   )r"  r5   r+   r+   r,   r  M  s    z!NameConstraints.excluded_subtreesr    c                 C  s
   t | S r$   rv   r5   r+   r+   r,   r&   S  s    zNameConstraints.public_bytesN)rI   rJ   rK   r   ZNAME_CONSTRAINTSrA   rD   rp   r   r%  r&  r_   rs   rx   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   rk   r   r>   )rA   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[   rk   _oid	_critical_value)r6   rA   r1  r\   r+   r+   r,   rD   X  s    

zExtension.__init__r2   c                 C  s   | j S r$   r2  r5   r+   r+   r,   rA   g  s    zExtension.oidc                 C  s   | j S r$   )r3  r5   r+   r+   r,   r1  k  s    zExtension.criticalc                 C  s   | j S r$   r4  r5   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^   )rA   r1  r\   r5   r+   r+   r,   r_   s  s    zExtension.__repr__rj   rl   c                 C  s2   t |tstS | j|jko0| j|jko0| j|jkS r$   )r%   r0  rn   rA   r1  r\   ro   r+   r+   r,   rp   y  s    


zExtension.__eq__r1   c                 C  s   t | j| j| jfS r$   )rr   rA   r1  r\   r5   r+   r+   r,   rs     s    zExtension.__hash__N)rI   rJ   rK   rD   rx   rA   r1  r\   r_   rp   rs   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     r   z(GeneralNames.__init__.<locals>.<genexpr>z^Every item in the general_names list must be an object conforming to the GeneralName interface)rS   r   r[   _general_namesr6   r:  r+   r+   r,   rD     s    zGeneralNames.__init__r;  Btype[DNSName] | type[UniformResourceIdentifier] | type[RFC822Name]	list[str]typer#   c                 C  s   d S r$   r+   r6   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     r   z3GeneralNames.get_values_for_type.<locals>.<genexpr>c                 S  s   g | ]
}|j qS r+   r  rM  r+   r+   r,   
<listcomp>  r   z4GeneralNames.get_values_for_type.<locals>.<listcomp>)r   rS   )r6   r@  Zobjsr+   rO  r,   rB    s    r.   r2   c                 C  s   d| j  dS )Nz<GeneralNames(r^   r;  r5   r+   r+   r,   r_     s    zGeneralNames.__repr__rj   rk   rl   c                 C  s   t |tstS | j|jkS r$   )r%   r8  rn   r;  ro   r+   r+   r,   rp     s    
zGeneralNames.__eq__r1   c                 C  s   t t| jS r$   )rr   r   r;  r5   r+   r+   r,   rs     s    zGeneralNames.__hash__N)rI   rJ   rK   rD   r<   r`   ra   rb   typingoverloadrB  r_   rp   rs   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,   rD     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.   r2   c                 C  s   d| j  dS )Nz<SubjectAlternativeName(r^   rQ  r5   r+   r+   r,   r_     s    zSubjectAlternativeName.__repr__rj   rk   rl   c                 C  s   t |tstS | j|jkS r$   )r%   rT  rn   r;  ro   r+   r+   r,   rp     s    
zSubjectAlternativeName.__eq__r1   c                 C  s
   t | jS r$   rr   r;  r5   r+   r+   r,   rs     s    zSubjectAlternativeName.__hash__r    c                 C  s
   t | S r$   rv   r5   r+   r+   r,   r&   !  s    z#SubjectAlternativeName.public_bytesN)rI   rJ   rK   r   ZSUBJECT_ALTERNATIVE_NAMErA   rD   r<   r`   ra   rb   rR  rS  rB  r_   rp   rs   r&   r+   r+   r+   r,   rT    s$   rT  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$   rU  r<  r+   r+   r,   rD   (  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$   rV  rA  r+   r+   r,   rB  N  s    r.   r2   c                 C  s   d| j  dS )Nz<IssuerAlternativeName(r^   rQ  r5   r+   r+   r,   r_   `  s    zIssuerAlternativeName.__repr__rj   rk   rl   c                 C  s   t |tstS | j|jkS r$   )r%   rX  rn   r;  ro   r+   r+   r,   rp   c  s    
zIssuerAlternativeName.__eq__r1   c                 C  s
   t | jS r$   rW  r5   r+   r+   r,   rs   i  s    zIssuerAlternativeName.__hash__r    c                 C  s
   t | S r$   rv   r5   r+   r+   r,   r&   l  s    z"IssuerAlternativeName.public_bytesN)rI   rJ   rK   r   ZISSUER_ALTERNATIVE_NAMErA   rD   r<   r`   ra   rb   rR  rS  rB  r_   rp   rs   r&   r+   r+   r+   r,   rX  %  s$   rX  c                   @  s   e Zd ZejZdddddZed\ZZ	Z
ejddd	d
dZejddd	ddZejddd	ddZejddd	ddZejddd	ddZddd	ddZddddZdd d!d"d#Zd$dd%d&Zd'dd(d)Zd*S )+CertificateIssuerr#  r>   r9  c                 C  s   t || _d S r$   rU  r<  r+   r+   r,   rD   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$   rV  rA  r+   r+   r,   rB    s    r.   r2   c                 C  s   d| j  dS )Nz<CertificateIssuer(r^   rQ  r5   r+   r+   r,   r_     s    zCertificateIssuer.__repr__rj   rk   rl   c                 C  s   t |tstS | j|jkS r$   )r%   rY  rn   r;  ro   r+   r+   r,   rp     s    
zCertificateIssuer.__eq__r1   c                 C  s
   t | jS r$   rW  r5   r+   r+   r,   rs     s    zCertificateIssuer.__hash__r    c                 C  s
   t | S r$   rv   r5   r+   r+   r,   r&     s    zCertificateIssuer.public_bytesN)rI   rJ   rK   r   ZCERTIFICATE_ISSUERrA   rD   r<   r`   ra   rb   rR  rS  rB  r_   rp   rs   r&   r+   r+   r+   r,   rY  p  s$   rY  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)r6   r[  r+   r+   r,   rD     s    
zCRLReason.__init__r.   r2   c                 C  s   d| j  dS )Nz<CRLReason(reason=r^   r\  r5   r+   r+   r,   r_     s    zCRLReason.__repr__rj   rk   rl   c                 C  s   t |tstS | j|jkS r$   )r%   rZ  rn   r[  ro   r+   r+   r,   rp     s    
zCRLReason.__eq__r1   c                 C  s
   t | jS r$   )rr   r[  r5   r+   r+   r,   rs     s    zCRLReason.__hash__c                 C  s   | j S r$   r]  r5   r+   r+   r,   r[    s    zCRLReason.reasonr    c                 C  s
   t | S r$   rv   r5   r+   r+   r,   r&     s    zCRLReason.public_bytesN)rI   rJ   rK   r   Z
CRL_REASONrA   rD   r_   rp   rs   rx   r[  r&   r+   r+   r+   r,   rZ    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 )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)r6   r_  r+   r+   r,   rD     s    zInvalidityDate.__init__r.   r2   c                 C  s   d| j  dS )Nz <InvalidityDate(invalidity_date=r^   ra  r5   r+   r+   r,   r_     s    zInvalidityDate.__repr__rj   rk   rl   c                 C  s   t |tstS | j|jkS r$   )r%   r^  rn   r_  ro   r+   r+   r,   rp     s    
zInvalidityDate.__eq__r1   c                 C  s
   t | jS r$   )rr   r_  r5   r+   r+   r,   rs     s    zInvalidityDate.__hash__c                 C  s   | j S r$   rb  r5   r+   r+   r,   r_    s    zInvalidityDate.invalidity_dater    c                 C  s
   t | S r$   rv   r5   r+   r+   r,   r&     s    zInvalidityDate.public_bytesN)rI   rJ   rK   r   ZINVALIDITY_DATErA   rD   r_   rp   rs   rx   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rS   r   r[   _signed_certificate_timestampsr6   rf  r+   r+   r,   rD     s    z2PrecertificateSignedCertificateTimestamps.__init__rk  r.   r2   c                 C  s   dt |  dS )Nz+<PrecertificateSignedCertificateTimestamps(r^   rS   r5   r+   r+   r,   r_     s    z2PrecertificateSignedCertificateTimestamps.__repr__r1   c                 C  s   t t| jS r$   rr   r   rk  r5   r+   r+   r,   rs     s    z2PrecertificateSignedCertificateTimestamps.__hash__rj   rk   rl   c                 C  s   t |tstS | j|jkS r$   )r%   rc  rn   rk  ro   r+   r+   r,   rp     s    
z0PrecertificateSignedCertificateTimestamps.__eq__r    c                 C  s
   t | S r$   rv   r5   r+   r+   r,   r&     s    z6PrecertificateSignedCertificateTimestamps.public_bytesN)rI   rJ   rK   r   Z%PRECERT_SIGNED_CERTIFICATE_TIMESTAMPSrA   rD   r<   r`   ra   rb   r_   rs   rp   r&   r+   r+   r+   r,   rc    s   
	rc  c                   @  sj   e Zd ZejZdddddZed\ZZ	Z
ddd	d
ZddddZdddddZddddZdS )SignedCertificateTimestampsrd  r>   re  c                 C  s,   t |}tdd |D s"td|| _d S )Nc                 s  s   | ]}t |tV  qd S r$   rg  rh  r+   r+   r,   r   *  s   z7SignedCertificateTimestamps.__init__.<locals>.<genexpr>ri  rj  rl  r+   r+   r,   rD   #  s    z$SignedCertificateTimestamps.__init__rk  r.   r2   c                 C  s   dt |  dS )Nz<SignedCertificateTimestamps(r^   rm  r5   r+   r+   r,   r_   8  s    z$SignedCertificateTimestamps.__repr__r1   c                 C  s   t t| jS r$   rn  r5   r+   r+   r,   rs   ;  s    z$SignedCertificateTimestamps.__hash__rj   rk   rl   c                 C  s   t |tstS | j|jkS r$   )r%   ro  rn   rk  ro   r+   r+   r,   rp   >  s    
z"SignedCertificateTimestamps.__eq__r    c                 C  s
   t | S r$   rv   r5   r+   r+   r,   r&   G  s    z(SignedCertificateTimestamps.public_bytesN)rI   rJ   rK   r   ZSIGNED_CERTIFICATE_TIMESTAMPSrA   rD   r<   r`   ra   rb   r_   rs   rp   r&   r+   r+   r+   r,   ro     s   
	ro  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)r6   rq  r+   r+   r,   rD   N  s    
zOCSPNonce.__init__rj   rk   rl   c                 C  s   t |tstS | j|jkS r$   )r%   rp  rn   rq  ro   r+   r+   r,   rp   T  s    
zOCSPNonce.__eq__r1   r2   c                 C  s
   t | jS r$   )rr   rq  r5   r+   r+   r,   rs   Z  s    zOCSPNonce.__hash__r.   c                 C  s   d| j dS )Nz<OCSPNonce(nonce=r^   )rq  r5   r+   r+   r,   r_   ]  s    zOCSPNonce.__repr__c                 C  s   | j S r$   )rr  r5   r+   r+   r,   rq  `  s    zOCSPNonce.noncec                 C  s
   t | S r$   rv   r5   r+   r+   r,   r&   d  s    zOCSPNonce.public_bytesN)rI   rJ   rK   r   ZNONCErA   rD   rp   rs   r_   rx   rq  r&   r+   r+   r+   r,   rp  K  s   rp  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  r   z3OCSPAcceptableResponses.__init__.<locals>.<genexpr>z'All responses must be ObjectIdentifiers)rS   r-  r[   
_responses)r6   rt  r+   r+   r,   rD   k  s    z OCSPAcceptableResponses.__init__rj   rk   rl   c                 C  s   t |tstS | j|jkS r$   )r%   rs  rn   rv  ro   r+   r+   r,   rp   r  s    
zOCSPAcceptableResponses.__eq__r1   r2   c                 C  s   t t| jS r$   )rr   r   rv  r5   r+   r+   r,   rs   x  s    z OCSPAcceptableResponses.__hash__r.   c                 C  s   d| j  dS )Nz#<OCSPAcceptableResponses(responses=r^   )rv  r5   r+   r+   r,   r_   {  s    z OCSPAcceptableResponses.__repr__z!typing.Iterator[ObjectIdentifier]c                 C  s
   t | jS r$   )r8   rv  r5   r+   r+   r,   ra   ~  s    z OCSPAcceptableResponses.__iter__r    c                 C  s
   t | S r$   rv   r5   r+   r+   r,   r&     s    z$OCSPAcceptableResponses.public_bytesN)rI   rJ   rK   r   ZACCEPTABLE_RESPONSESrA   rD   rp   rs   r_   ra   r&   r+   r+   r+   r,   rs  h  s   rs  c                	   @  s   e Zd ZejZdddddddddddZd	d
ddZdddddZdd
ddZ	e
dd
ddZe
dd
ddZe
dd
ddZe
dd
ddZe
dd
ddZe
dd
dd Ze
dd
d!d"Zd#d
d$d%Zd&S )'IssuingDistributionPointrz   r   rk   r   r>   )r   r   only_contains_user_certsonly_contains_ca_certsonly_some_reasonsindirect_crlonly_contains_attribute_certsr#   c           	      C  s   |d urt |}|r8t|tr0tdd |D s8td|rXtj|v sPtj|v rXtdt|t	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     r   z4IssuingDistributionPoint.__init__.<locals>.<genexpr>z:only_some_reasons must be None or frozenset of ReasonFlagszTunspecified and remove_from_crl are not valid reasons in an IssuingDistributionPointzuonly_contains_user_certs, only_contains_ca_certs, indirect_crl and only_contains_attribute_certs must all be boolean.c                 S  s   g | ]}|r|qS r+   r+   r   r+   r+   r,   rP    r   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.)rS   r%   r   r   r[   r   r   r   r   rk   r3   r-  _only_contains_user_certs_only_contains_ca_certs_indirect_crl_only_contains_attribute_certs_only_some_reasonsr   r   )	r6   r   r   rx  ry  rz  r{  r|  Zcrl_constraintsr+   r+   r,   rD     st    
z!IssuingDistributionPoint.__init__r.   r2   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   rx  ry  rz  r{  r|  r5   r+   r+   r,   r_     s    
z!IssuingDistributionPoint.__repr__rj   rl   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%   rw  rn   r   r   rx  ry  rz  r{  r|  ro   r+   r+   r,   rp     s"    





zIssuingDistributionPoint.__eq__r1   c                 C  s$   t | j| j| j| j| j| j| jfS r$   )rr   r   r   rx  ry  rz  r{  r|  r5   r+   r+   r,   rs     s    z!IssuingDistributionPoint.__hash__r   c                 C  s   | j S r$   r   r5   r+   r+   r,   r     s    z"IssuingDistributionPoint.full_namec                 C  s   | j S r$   r   r5   r+   r+   r,   r     s    z&IssuingDistributionPoint.relative_namec                 C  s   | j S r$   )r}  r5   r+   r+   r,   rx    s    z1IssuingDistributionPoint.only_contains_user_certsc                 C  s   | j S r$   )r~  r5   r+   r+   r,   ry    s    z/IssuingDistributionPoint.only_contains_ca_certsc                 C  s   | j S r$   )r  r5   r+   r+   r,   rz    s    z*IssuingDistributionPoint.only_some_reasonsc                 C  s   | j S r$   )r  r5   r+   r+   r,   r{    s    z%IssuingDistributionPoint.indirect_crlc                 C  s   | j S r$   )r  r5   r+   r+   r,   r|    s    z6IssuingDistributionPoint.only_contains_attribute_certsr    c                 C  s
   t | S r$   rv   r5   r+   r+   r,   r&   !  s    z%IssuingDistributionPoint.public_bytesN)rI   rJ   rK   r   ZISSUING_DISTRIBUTION_POINTrA   rD   r_   rp   rs   rx   r   r   rx  ry  rz  r{  r|  r&   r+   r+   r+   r,   rw    s(   Srw  c                   @  s   e Zd ZejZdddddddZedddd	Zeddd
dZ	eddddZ
ddddZdddddZddddZddddZdS )MSCertificateTemplater   r{   r>   )template_idmajor_versionminor_versionr#   c                 C  sT   t |tstd|| _|d ur*t |tr<|d urDt |tsDtd|| _|| _d S )Noid must be an ObjectIdentifierz8major_version and minor_version must be integers or None)r%   r   r[   _template_idr1   _major_version_minor_version)r6   r  r  r  r+   r+   r,   rD   (  s     
zMSCertificateTemplate.__init__r2   c                 C  s   | j S r$   )r  r5   r+   r+   r,   r  <  s    z!MSCertificateTemplate.template_idc                 C  s   | j S r$   )r  r5   r+   r+   r,   r  @  s    z#MSCertificateTemplate.major_versionc                 C  s   | j S r$   )r  r5   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  r5   r+   r+   r,   r_   H  s    
zMSCertificateTemplate.__repr__rj   rk   rl   c                 C  s2   t |tstS | j|jko0| j|jko0| j|jkS r$   )r%   r  rn   r  r  r  ro   r+   r+   r,   rp   O  s    


zMSCertificateTemplate.__eq__r1   c                 C  s   t | j| j| jfS r$   )rr   r  r  r  r5   r+   r+   r,   rs   Y  s    zMSCertificateTemplate.__hash__r    c                 C  s
   t | S r$   rv   r5   r+   r+   r,   r&   \  s    z"MSCertificateTemplate.public_bytesN)rI   rJ   rK   r   ZMS_CERTIFICATE_TEMPLATErA   rD   rx   r  r  r  r_   rp   rs   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 )rZ   r   r    r>   )rA   r\   r#   c                 C  s"   t |tstd|| _|| _d S )Nr  )r%   r   r[   r2  r4  )r6   rA   r\   r+   r+   r,   rD   a  s    
zUnrecognizedExtension.__init__r2   c                 C  s   | j S r$   r5  r5   r+   r+   r,   rA   g  s    zUnrecognizedExtension.oidc                 C  s   | j S r$   r6  r5   r+   r+   r,   r\   k  s    zUnrecognizedExtension.valuer.   c                 C  s   d| j  d| jdS )Nz<UnrecognizedExtension(oid=r7  r^   )rA   r\   r5   r+   r+   r,   r_   o  s    
zUnrecognizedExtension.__repr__rj   rk   rl   c                 C  s&   t |tstS | j|jko$| j|jkS r$   )r%   rZ   rn   rA   r\   ro   r+   r+   r,   rp   u  s    
zUnrecognizedExtension.__eq__r1   c                 C  s   t | j| jfS r$   )rr   rA   r\   r5   r+   r+   r,   rs   {  s    zUnrecognizedExtension.__hash__c                 C  s   | j S r$   r  r5   r+   r+   r,   r&   ~  s    z"UnrecognizedExtension.public_bytesN)rI   rJ   rK   rD   rx   rA   r\   r_   rp   rs   r&   r+   r+   r+   r,   rZ   `  s   rZ   )i
__future__r   abcr`  r'   r(  rR  Zcryptographyr   Z"cryptography.hazmat.bindings._rustr   r   rw   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=   rM   ABCMetar   rQ   rc   ry   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  rT  rX  rY  rZ  r^  rc  ro  rp  rs  rw  r  rZ   r+   r+   r+   r,   <module>   s   ,'l$!!(.%%kA;+("  s0SKKK++ !;