o
    b                  	   @   s  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
mZ d dlmZ d dlmZ d dl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Z'dede(fddZ)de*fddZ+G dd de,Z-G dd de,Z.G dd de j/dZ0G dd de1Z2G dd de0Z3G d d! d!e0Z4G d"d# d#e0Z5G d$d% d%e0Z6G d&d' d'e0Z7G d(d) d)e1Z8G d*d+ d+e0Z9G d,d- d-e0Z:G d.d/ d/e0Z;G d0d1 d1e0Z<G d2d3 d3e1Z=G d4d5 d5ej>Z?e?j@e?jAe?jBe?jCe?jDe?jEe?jFe?jGd6ZHG d7d8 d8e0ZIG d9d: d:e0ZJG d;d< d<e1ZKG d=d> d>e1ZLG d?d@ d@e1ZMG dAdB dBe0ZNG dCdD dDe0ZOG dEdF dFe0ZPG dGdH dHe0ZQG dIdJ dJej>ZRdKdL eRD ZSG dMdN dNe0ZTG dOdP dPe0ZUG dQdR dRe0ZVG dSdT dTejWe' ZXG dUdV dVe1ZYG dWdX dXe0ZZG dYdZ dZe0Z[G d[d\ d\e0Z\G d]d^ d^e0Z]G d_d` d`e0Z^G dadb dbe0Z_G dcdd dde0Z`G dedf dfe0ZaG dgdh dhe0ZbG didj dje0ZcdS )k    N)utils)asn1)constant_timeserialization)EllipticCurvePublicKey)RSAPublicKey)PUBLIC_KEY_TYPES)SignedCertificateTimestamp)	DNSNameDirectoryNameGeneralName	IPAddress	OtherName
RFC822NameRegisteredIDUniformResourceIdentifier_IPADDRESS_TYPES)NameRelativeDistinguishedName)CRLEntryExtensionOIDExtensionOIDOCSPExtensionOIDObjectIdentifierExtensionTypeVarExtensionType)bound
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&   [/var/www/secure340b-portal/env/lib/python3.10/site-packages/cryptography/x509/extensions.py_key_identifier_from_public_key+   s    


r(   
field_namec                    s4   dt f fdd} fdd} fdd}|||fS )Nr   c                       t t|  S r   )lengetattrselfr)   r&   r'   
len_methodB      z*_make_sequence_methods.<locals>.len_methodc                    r*   r   )iterr,   r-   r/   r&   r'   iter_methodE   r1   z+_make_sequence_methods.<locals>.iter_methodc                    s   t |  | S r   )r,   )r.   idxr/   r&   r'   getitem_methodH   r1   z._make_sequence_methods.<locals>.getitem_method)int)r)   r0   r3   r5   r&   r/   r'   _make_sequence_methodsA   s   
r7   c                       *   e Zd Zdededdf fddZ  ZS )DuplicateExtensionmsgoidr   Nc                       t t| | || _d S r   )superr9   __init__r;   r.   r:   r;   	__class__r&   r'   r>   O      
zDuplicateExtension.__init____name__
__module____qualname__strr   r>   __classcell__r&   r&   r@   r'   r9   N       "r9   c                       r8   )ExtensionNotFoundr:   r;   r   Nc                    r<   r   )r=   rJ   r>   r;   r?   r@   r&   r'   r>   U   rB   zExtensionNotFound.__init__rC   r&   r&   r@   r'   rJ   T   rI   rJ   c                   @   s   e Zd ZU eje ed< dS )r   r;   N)rD   rE   rF   typingClassVarr   __annotations__r&   r&   r&   r'   r   Z   s   
 )	metaclassc                   @   sj   e Zd Zdejd ddfddZdeddfdd	Zd
eje	 ddfddZ
ed\ZZZdefddZdS )
Extensions
extensionszExtension[ExtensionType]r   Nc                 C      t || _d S r   )list_extensions)r.   rP   r&   r&   r'   r>   _   s   zExtensions.__init__r;   c                 C   s,   | D ]}|j |kr|  S qtd||)NNo {} extension was found)r;   rJ   format)r.   r;   extr&   r&   r'   get_extension_for_oidd   s
   
z Extensions.get_extension_for_oidextclasszExtension[ExtensionTypeVar]c                 C   s@   |t u rtd| D ]}t|j|r|  S q
td||j)Nz|UnrecognizedExtension can't be used with get_extension_for_class because more than one instance of the class may be present.rT   )UnrecognizedExtension	TypeErrorr   valuerJ   rU   r;   )r.   rX   rV   r&   r&   r'   get_extension_for_classm   s   z"Extensions.get_extension_for_classrS   c                 C      d | jS )Nz<Extensions({})>)rU   rS   r-   r&   r&   r'   __repr__      zExtensions.__repr__)rD   rE   rF   rK   Iterabler>   r   rW   Typer   r\   r7   __len____iter____getitem__rG   r^   r&   r&   r&   r'   rO   ^   s$    

	
rO   c                   @   sz   e Zd ZejZdeddfddZdej	de
fddZdej	de
fd	d
ZdefddZdefddZedefddZdS )	CRLNumber
crl_numberr   Nc                 C      t |ts	td|| _d S Nzcrl_number must be an integerr   r6   rZ   _crl_numberr.   rf   r&   r&   r'   r>         

zCRLNumber.__init__otherc                 C      t |tstS | j|jkS r   )r   re   NotImplementedrf   r.   rm   r&   r&   r'   __eq__      
zCRLNumber.__eq__c                 C   
   | |k S r   r&   rp   r&   r&   r'   __ne__      
zCRLNumber.__ne__c                 C   
   t | jS r   hashrf   r-   r&   r&   r'   __hash__   ru   zCRLNumber.__hash__c                 C   r]   )Nz<CRLNumber({})>)rU   rf   r-   r&   r&   r'   r^      r_   zCRLNumber.__repr__c                 C      | j S r   rj   r-   r&   r&   r'   rf         zCRLNumber.crl_number)rD   rE   rF   r   Z
CRL_NUMBERr;   r6   r>   rK   Anyboolrq   rt   ry   rG   r^   propertyrf   r&   r&   r&   r'   re          re   c                   @   s  e Zd ZejZdeje dejej	e
  deje ddfddZededd fd	d
Ze				 dddZdefddZdejdefddZdejdefddZdefddZedeje fddZedejeje
  fddZedeje fddZdS )AuthorityKeyIdentifierkey_identifierauthority_cert_issuerauthority_cert_serial_numberr   Nc                 C   sr   |d u |d u krt d|d ur!t|}tdd |D s!t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       | ]}t |tV  qd S r   r   r   .0xr&   r&   r'   	<genexpr>       

z2AuthorityKeyIdentifier.__init__.<locals>.<genexpr>z;authority_cert_issuer must be a list of GeneralName objectsz/authority_cert_serial_number must be an integer)	
ValueErrorrR   allrZ   r   r6   _key_identifier_authority_cert_issuer_authority_cert_serial_number)r.   r   r   r   r&   r&   r'   r>      s*   

zAuthorityKeyIdentifier.__init__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skiSubjectKeyIdentifierc                 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_identifierc                 C   
   d | S )Nz<AuthorityKeyIdentifier(key_identifier={0.key_identifier!r}, authority_cert_issuer={0.authority_cert_issuer}, authority_cert_serial_number={0.authority_cert_serial_number})>rU   r-   r&   r&   r'   r^      s   zAuthorityKeyIdentifier.__repr__rm   c                 C   2   t |tstS | j|jko| j|jko| j|jkS r   )r   r   ro   r   r   r   rp   r&   r&   r'   rq      s   

zAuthorityKeyIdentifier.__eq__c                 C   rs   r   r&   rp   r&   r&   r'   rt      ru   zAuthorityKeyIdentifier.__ne__c                 C   s,   | j d u rd }nt| j }t| j|| jfS r   )r   tuplerx   r   r   )r.   Zacir&   r&   r'   ry      s   

zAuthorityKeyIdentifier.__hash__c                 C   rz   r   )r   r-   r&   r&   r'   r      r|   z%AuthorityKeyIdentifier.key_identifierc                 C   rz   r   )r   r-   r&   r&   r'   r         z,AuthorityKeyIdentifier.authority_cert_issuerc                 C   rz   r   )r   r-   r&   r&   r'   r     r|   z3AuthorityKeyIdentifier.authority_cert_serial_number)r   r   r   r   )rD   rE   rF   r   ZAUTHORITY_KEY_IDENTIFIERr;   rK   Optionalbytesr`   r   r6   r>   classmethodr   r   r   rG   r^   r}   r~   rq   rt   ry   r   r   Listr   r   r&   r&   r&   r'   r      sF    
!
		r   c                   @   s   e Zd ZejZdeddfddZede	dd fddZ
edefd	d
ZedefddZdefddZdejdefddZdejdefddZdefddZdS )r   r$   r   Nc                 C   s
   || _ d S r   Z_digest)r.   r$   r&   r&   r'   r>     ru   zSubjectKeyIdentifier.__init__r   c                 C   s   | t |S r   r   )r   r   r&   r&   r'   from_public_key  s   z$SubjectKeyIdentifier.from_public_keyc                 C   rz   r   r   r-   r&   r&   r'   r$     r|   zSubjectKeyIdentifier.digestc                 C   rz   r   r   r-   r&   r&   r'   r     r|   z#SubjectKeyIdentifier.key_identifierc                 C   r]   )Nz$<SubjectKeyIdentifier(digest={0!r})>)rU   r$   r-   r&   r&   r'   r^     r_   zSubjectKeyIdentifier.__repr__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      s   
zSubjectKeyIdentifier.__eq__c                 C   rs   r   r&   rp   r&   r&   r'   rt   &  ru   zSubjectKeyIdentifier.__ne__c                 C   rv   r   )rx   r$   r-   r&   r&   r'   ry   )  ru   zSubjectKeyIdentifier.__hash__)rD   rE   rF   r   ZSUBJECT_KEY_IDENTIFIERr;   r   r>   r   r   r   r   r$   r   rG   r^   rK   r}   r~   rq   rt   r6   ry   r&   r&   r&   r'   r   	  s"    r   c                   @   |   e Zd ZejZdejd ddfddZe	d\Z
ZZdefdd	Zd
ejdefddZd
ejdefddZdefddZdS )AuthorityInformationAccessdescriptionsAccessDescriptionr   Nc                 C   ,   t |}tdd |D std|| _d S )Nc                 s   r   r   r   r   r   r&   r&   r'   r   4      z6AuthorityInformationAccess.__init__.<locals>.<genexpr>@Every item in the descriptions list must be an AccessDescriptionrR   r   rZ   _descriptionsr.   r   r&   r&   r'   r>   0     
z#AuthorityInformationAccess.__init__r   c                 C   r]   )Nz <AuthorityInformationAccess({})>rU   r   r-   r&   r&   r'   r^   >  r_   z#AuthorityInformationAccess.__repr__rm   c                 C   rn   r   )r   r   ro   r   rp   r&   r&   r'   rq   A  rr   z!AuthorityInformationAccess.__eq__c                 C   rs   r   r&   rp   r&   r&   r'   rt   G  ru   z!AuthorityInformationAccess.__ne__c                 C      t t| jS r   rx   r   r   r-   r&   r&   r'   ry   J  r1   z#AuthorityInformationAccess.__hash__)rD   rE   rF   r   ZAUTHORITY_INFORMATION_ACCESSr;   rK   r`   r>   r7   rb   rc   rd   rG   r^   r}   r~   rq   rt   r6   ry   r&   r&   r&   r'   r   -      
r   c                   @   r   )SubjectInformationAccessr   r   r   Nc                 C   r   )Nc                 s   r   r   r   r   r&   r&   r'   r   U  r   z4SubjectInformationAccess.__init__.<locals>.<genexpr>r   r   r   r&   r&   r'   r>   Q  r   z!SubjectInformationAccess.__init__r   c                 C   r]   )Nz<SubjectInformationAccess({})>r   r-   r&   r&   r'   r^   _  r_   z!SubjectInformationAccess.__repr__rm   c                 C   rn   r   )r   r   ro   r   rp   r&   r&   r'   rq   b  rr   zSubjectInformationAccess.__eq__c                 C   rs   r   r&   rp   r&   r&   r'   rt   h  ru   zSubjectInformationAccess.__ne__c                 C   r   r   r   r-   r&   r&   r'   ry   k  r1   z!SubjectInformationAccess.__hash__)rD   rE   rF   r   ZSUBJECT_INFORMATION_ACCESSr;   rK   r`   r>   r7   rb   rc   rd   rG   r^   r}   r~   rq   rt   r6   ry   r&   r&   r&   r'   r   N  r   r   c                   @   s   e Zd ZdededdfddZdefddZd	ej	de
fd
dZd	ej	de
fddZdefddZedefddZedefddZdS )r   access_methodaccess_locationr   Nc                 C   s4   t |ts	tdt |tstd|| _|| _d S )Nz)access_method must be an ObjectIdentifierz%access_location must be a GeneralName)r   r   rZ   r   _access_method_access_location)r.   r   r   r&   r&   r'   r>   p  s   


zAccessDescription.__init__c                 C   r   )NzY<AccessDescription(access_method={0.access_method}, access_location={0.access_location})>r   r-   r&   r&   r'   r^   |     zAccessDescription.__repr__rm   c                 C   &   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AccessDescription.__eq__c                 C   rs   r   r&   rp   r&   r&   r'   rt     ru   zAccessDescription.__ne__c                 C      t | j| jfS r   )rx   r   r   r-   r&   r&   r'   ry        zAccessDescription.__hash__c                 C   rz   r   )r   r-   r&   r&   r'   r     r|   zAccessDescription.access_methodc                 C   rz   r   )r   r-   r&   r&   r'   r     r|   z!AccessDescription.access_location)rD   rE   rF   r   r   r>   rG   r^   rK   r}   r~   rq   rt   r6   ry   r   r   r   r&   r&   r&   r'   r   o  s     
	r   c                   @   s   e Zd ZejZdedeje	 ddfddZ
edefddZedeje	 fd	d
ZdefddZdejdefddZdejdefddZde	fddZdS )BasicConstraintscapath_lengthr   Nc                 C   sX   t |ts	td|d ur|std|d ur$t |tr |dk r$t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   r~   rZ   r   r6   _ca_path_length)r.   r   r   r&   r&   r'   r>     s   

zBasicConstraints.__init__c                 C   rz   r   )r   r-   r&   r&   r'   r     r|   zBasicConstraints.cac                 C   rz   r   )r   r-   r&   r&   r'   r     r|   zBasicConstraints.path_lengthc                 C   r   )Nz:<BasicConstraints(ca={0.ca}, path_length={0.path_length})>r   r-   r&   r&   r'   r^     r   zBasicConstraints.__repr__rm   c                 C   r   r   )r   r   ro   r   r   rp   r&   r&   r'   rq        
zBasicConstraints.__eq__c                 C   rs   r   r&   rp   r&   r&   r'   rt     ru   zBasicConstraints.__ne__c                 C   r   r   )rx   r   r   r-   r&   r&   r'   ry     r   zBasicConstraints.__hash__)rD   rE   rF   r   ZBASIC_CONSTRAINTSr;   r~   rK   r   r6   r>   r   r   r   rG   r^   r}   rq   rt   ry   r&   r&   r&   r'   r     s    r   c                   @   sz   e Zd ZejZdeddfddZedefddZ	de
jdefd	d
Zde
jdefddZdefddZdefddZdS )DeltaCRLIndicatorrf   r   Nc                 C   rg   rh   ri   rk   r&   r&   r'   r>     rl   zDeltaCRLIndicator.__init__c                 C   rz   r   r{   r-   r&   r&   r'   rf     r|   zDeltaCRLIndicator.crl_numberrm   c                 C   rn   r   )r   r   ro   rf   rp   r&   r&   r'   rq     rr   zDeltaCRLIndicator.__eq__c                 C   rs   r   r&   rp   r&   r&   r'   rt     ru   zDeltaCRLIndicator.__ne__c                 C   rv   r   rw   r-   r&   r&   r'   ry     ru   zDeltaCRLIndicator.__hash__c                 C   r   )Nz.<DeltaCRLIndicator(crl_number={0.crl_number})>r   r-   r&   r&   r'   r^     ru   zDeltaCRLIndicator.__repr__)rD   rE   rF   r   ZDELTA_CRL_INDICATORr;   r6   r>   r   rf   rK   r}   r~   rq   rt   ry   rG   r^   r&   r&   r&   r'   r     s    r   c                   @   r   )CRLDistributionPointsdistribution_pointsDistributionPointr   Nc                 C   r   )Nc                 s   r   r   r   r   r   r&   r&   r'   r     r   z1CRLDistributionPoints.__init__.<locals>.<genexpr>?distribution_points must be a list of DistributionPoint objectsrR   r   rZ   _distribution_pointsr.   r   r&   r&   r'   r>        
zCRLDistributionPoints.__init__r   c                 C   r]   )Nz<CRLDistributionPoints({})>rU   r   r-   r&   r&   r'   r^     r_   zCRLDistributionPoints.__repr__rm   c                 C   rn   r   )r   r   ro   r   rp   r&   r&   r'   rq     rr   zCRLDistributionPoints.__eq__c                 C   rs   r   r&   rp   r&   r&   r'   rt     ru   zCRLDistributionPoints.__ne__c                 C   r   r   rx   r   r   r-   r&   r&   r'   ry     r1   zCRLDistributionPoints.__hash__)rD   rE   rF   r   ZCRL_DISTRIBUTION_POINTSr;   rK   r`   r>   r7   rb   rc   rd   rG   r^   r}   r~   rq   rt   r6   ry   r&   r&   r&   r'   r         

r   c                   @   r   )FreshestCRLr   r   r   Nc                 C   r   )Nc                 s   r   r   r   r   r&   r&   r'   r     r   z'FreshestCRL.__init__.<locals>.<genexpr>r   r   r   r&   r&   r'   r>     r   zFreshestCRL.__init__r   c                 C   r]   )Nz<FreshestCRL({})>r   r-   r&   r&   r'   r^     r_   zFreshestCRL.__repr__rm   c                 C   rn   r   )r   r   ro   r   rp   r&   r&   r'   rq   "  rr   zFreshestCRL.__eq__c                 C   rs   r   r&   rp   r&   r&   r'   rt   (  ru   zFreshestCRL.__ne__c                 C   r   r   r   r-   r&   r&   r'   ry   +  r1   zFreshestCRL.__hash__)rD   rE   rF   r   ZFRESHEST_CRLr;   rK   r`   r>   r7   rb   rc   rd   rG   r^   r}   r~   rq   rt   r6   ry   r&   r&   r&   r'   r   
  r   r   c                
   @   s
  e Zd Zdejeje  deje dejejd  dejeje  ddf
dd	Z	de
fd
dZdejdefddZdejdefddZdefddZedejeje  fddZedeje fddZedejejd  fddZedejeje  fddZdS )r   	full_namerelative_namereasonsReasonFlags
crl_issuerr   Nc                 C   s   |r|rt d|d urt|}tdd |D std|r(t|ts(td|d ur=t|}tdd |D s=td|rQt|trMtdd |D sQtd	|ratj|v s]tj	|v rat d
|rm|sm|sm|smt d|| _
|| _|| _|| _d S )NzOYou cannot provide both full_name and relative_name, at least one must be None.c                 s   r   r   r   r   r&   r&   r'   r   ?  r   z-DistributionPoint.__init__.<locals>.<genexpr>z/full_name must be a list of GeneralName objectsz1relative_name must be a RelativeDistinguishedNamec                 s   r   r   r   r   r&   r&   r'   r   L  r   z2crl_issuer must be None or a list of general namesc                 s   r   r   r   r   r   r&   r&   r'   r   S  r   z0reasons must be None or frozenset of ReasonFlagszLunspecified and remove_from_crl are not valid reasons in a DistributionPointzPYou must supply crl_issuer, full_name, or relative_name when reasons is not None)r   rR   r   rZ   r   r   	frozensetr   unspecifiedremove_from_crl
_full_name_relative_name_reasons_crl_issuer)r.   r   r   r   r   r&   r&   r'   r>   0  sV   

zDistributionPoint.__init__c                 C   r   )Nz}<DistributionPoint(full_name={0.full_name}, relative_name={0.relative_name}, reasons={0.reasons}, crl_issuer={0.crl_issuer})>r   r-   r&   r&   r'   r^   k     zDistributionPoint.__repr__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   r  s   



zDistributionPoint.__eq__c                 C   rs   r   r&   rp   r&   r&   r'   rt   }  ru   zDistributionPoint.__ne__c                 C   sH   | j d urt| j }nd }| jd urt| j}nd }t|| j| j|fS r   )r   r   r   rx   r   r   )r.   fnr   r&   r&   r'   ry     s   

zDistributionPoint.__hash__c                 C   rz   r   r   r-   r&   r&   r'   r     r|   zDistributionPoint.full_namec                 C   rz   r   r   r-   r&   r&   r'   r     r|   zDistributionPoint.relative_namec                 C   rz   r   )r   r-   r&   r&   r'   r     r|   zDistributionPoint.reasonsc                 C   rz   r   )r   r-   r&   r&   r'   r     r|   zDistributionPoint.crl_issuer)rD   rE   rF   rK   r   r`   r   r   	FrozenSetr>   rG   r^   r}   r~   rq   rt   r6   ry   r   r   r   r   r   r   r&   r&   r&   r'   r   /  s0    
; 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)rD   rE   rF   r   key_compromiseca_compromiseaffiliation_changedr   cessation_of_operationcertificate_holdprivilege_withdrawnaa_compromiser   r&   r&   r&   r'   r     s    r   )                        c                   @   s   e Zd ZejZdeje deje ddfddZ	de
fddZd	ejdefd
dZd	ejdefddZdefddZedeje fddZedeje fddZdS )PolicyConstraintsrequire_explicit_policyinhibit_policy_mappingr   Nc                 C   s\   |d urt |tstd|d urt |tstd|d u r&|d u r&t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   r6   rZ   r   _require_explicit_policy_inhibit_policy_mapping)r.   r   r   r&   r&   r'   r>     s$   


zPolicyConstraints.__init__c                 C   r   )Nz{<PolicyConstraints(require_explicit_policy={0.require_explicit_policy}, inhibit_policy_mapping={0.inhibit_policy_mapping})>r   r-   r&   r&   r'   r^     r   zPolicyConstraints.__repr__rm   c                 C   r   r   )r   r   ro   r   r   rp   r&   r&   r'   rq     r   zPolicyConstraints.__eq__c                 C   rs   r   r&   rp   r&   r&   r'   rt     ru   zPolicyConstraints.__ne__c                 C   r   r   )rx   r   r   r-   r&   r&   r'   ry     s   
zPolicyConstraints.__hash__c                 C   rz   r   )r   r-   r&   r&   r'   r     r|   z)PolicyConstraints.require_explicit_policyc                 C   rz   r   )r   r-   r&   r&   r'   r     r|   z(PolicyConstraints.inhibit_policy_mapping)rD   rE   rF   r   ZPOLICY_CONSTRAINTSr;   rK   r   r6   r>   rG   r^   r}   r~   rq   rt   ry   r   r   r   r&   r&   r&   r'   r     s"    
	r   c                   @   r   )CertificatePoliciespoliciesPolicyInformationr   Nc                 C   r   )Nc                 s   r   r   )r   r   r   r&   r&   r'   r     r   z/CertificatePolicies.__init__.<locals>.<genexpr>z;Every item in the policies list must be a PolicyInformation)rR   r   rZ   	_policies)r.   r   r&   r&   r'   r>        
zCertificatePolicies.__init__r   c                 C   r]   )Nz<CertificatePolicies({})>)rU   r   r-   r&   r&   r'   r^     r_   zCertificatePolicies.__repr__rm   c                 C   rn   r   )r   r   ro   r   rp   r&   r&   r'   rq     rr   zCertificatePolicies.__eq__c                 C   rs   r   r&   rp   r&   r&   r'   rt      ru   zCertificatePolicies.__ne__c                 C   r   r   )rx   r   r   r-   r&   r&   r'   ry   #  r1   zCertificatePolicies.__hash__)rD   rE   rF   r   ZCERTIFICATE_POLICIESr;   rK   r`   r>   r7   rb   rc   rd   rG   r^   r}   r~   rq   rt   r6   ry   r&   r&   r&   r'   r     s    
r   c                   @   s   e Zd Zdedejejejedf   ddfddZ	defdd	Z
d
ejdefddZd
ejdefddZdefddZedefddZedejejejedf   fddZdS )r   policy_identifierpolicy_qualifiers
UserNoticer   Nc                 C   sL   t |ts	td|| _|d ur!t|}tdd |D s!td|| _d S )Nz-policy_identifier must be an ObjectIdentifierc                 s   s    | ]
}t |ttfV  qd S r   )r   rG   r   r   r&   r&   r'   r   6  s    
z-PolicyInformation.__init__.<locals>.<genexpr>zMpolicy_qualifiers must be a list of strings and/or UserNotice objects or None)r   r   rZ   _policy_identifierrR   r   _policy_qualifiers)r.   r   r   r&   r&   r'   r>   (  s   

zPolicyInformation.__init__c                 C   r   )Nze<PolicyInformation(policy_identifier={0.policy_identifier}, policy_qualifiers={0.policy_qualifiers})>r   r-   r&   r&   r'   r^   @  r   zPolicyInformation.__repr__rm   c                 C   r   r   )r   r   ro   r   r   rp   r&   r&   r'   rq   F  r   zPolicyInformation.__eq__c                 C   rs   r   r&   rp   r&   r&   r'   rt   O  ru   zPolicyInformation.__ne__c                 C   s(   | j d urt| j }nd }t| j|fS r   )r   r   rx   r   )r.   Zpqr&   r&   r'   ry   R  s
   
zPolicyInformation.__hash__c                 C   rz   r   )r   r-   r&   r&   r'   r   \  r|   z#PolicyInformation.policy_identifierc                 C   rz   r   )r  r-   r&   r&   r'   r   `  r   z#PolicyInformation.policy_qualifiers)rD   rE   rF   r   rK   r   r`   UnionrG   r>   r^   r}   r~   rq   rt   r6   ry   r   r   r   r   r&   r&   r&   r'   r   '  s(    
	
r   c                   @   s   e Zd Zdejd deje ddfddZdefdd	Zd
ejde	fddZ
d
ejde	fddZdefddZedejd fddZedeje fddZdS )r   notice_referenceNoticeReferenceexplicit_textr   Nc                 C   s&   |rt |tstd|| _|| _d S )Nz2notice_reference must be None or a NoticeReference)r   r  rZ   _notice_reference_explicit_text)r.   r  r  r&   r&   r'   r>   h  s   
zUserNotice.__init__c                 C   r   )NzV<UserNotice(notice_reference={0.notice_reference}, explicit_text={0.explicit_text!r})>r   r-   r&   r&   r'   r^   w  r   zUserNotice.__repr__rm   c                 C   r   r   )r   r   ro   r  r  rp   r&   r&   r'   rq   }  r   zUserNotice.__eq__c                 C   rs   r   r&   rp   r&   r&   r'   rt     ru   zUserNotice.__ne__c                 C   r   r   )rx   r  r  r-   r&   r&   r'   ry     r   zUserNotice.__hash__c                 C   rz   r   )r  r-   r&   r&   r'   r    r|   zUserNotice.notice_referencec                 C   rz   r   )r  r-   r&   r&   r'   r    r|   zUserNotice.explicit_text)rD   rE   rF   rK   r   rG   r>   r^   r}   r~   rq   rt   r6   ry   r   r  r  r&   r&   r&   r'   r   g  s     
	r   c                   @   s   e Zd Zdeje deje ddfddZdefddZ	d	ej
defd
dZd	ej
defddZdefddZedeje fddZedeje fddZdS )r  organizationnotice_numbersr   Nc                 C   s2   || _ t|}tdd |D std|| _d S )Nc                 s   r   r   )r   r6   r   r&   r&   r'   r     r   z+NoticeReference.__init__.<locals>.<genexpr>z)notice_numbers must be a list of integers)_organizationrR   r   rZ   _notice_numbers)r.   r  r	  r&   r&   r'   r>     s
   
zNoticeReference.__init__c                 C   r   )NzU<NoticeReference(organization={0.organization!r}, notice_numbers={0.notice_numbers})>r   r-   r&   r&   r'   r^     r   zNoticeReference.__repr__rm   c                 C   r   r   )r   r  ro   r  r	  rp   r&   r&   r'   rq     r   zNoticeReference.__eq__c                 C   rs   r   r&   rp   r&   r&   r'   rt     ru   zNoticeReference.__ne__c                 C   s   t | jt| jfS r   )rx   r  r   r	  r-   r&   r&   r'   ry        zNoticeReference.__hash__c                 C   rz   r   )r
  r-   r&   r&   r'   r    r|   zNoticeReference.organizationc                 C   rz   r   )r  r-   r&   r&   r'   r	    r|   zNoticeReference.notice_numbers)rD   rE   rF   rK   r   rG   r`   r6   r>   r^   r}   r~   rq   rt   ry   r   r  r   r	  r&   r&   r&   r'   r    s     
	r  c                   @   s|   e Zd ZejZdeje ddfddZ	e
d\ZZZdefddZd	ejdefd
dZd	ejdefddZdefddZdS )ExtendedKeyUsageusagesr   Nc                 C   r   )Nc                 s   r   r   )r   r   r   r&   r&   r'   r     r   z,ExtendedKeyUsage.__init__.<locals>.<genexpr>z9Every item in the usages list must be an ObjectIdentifier)rR   r   rZ   _usages)r.   r  r&   r&   r'   r>     s   
zExtendedKeyUsage.__init__r  c                 C   r]   )Nz<ExtendedKeyUsage({})>)rU   r  r-   r&   r&   r'   r^     r_   zExtendedKeyUsage.__repr__rm   c                 C   rn   r   )r   r  ro   r  rp   r&   r&   r'   rq     rr   zExtendedKeyUsage.__eq__c                 C   rs   r   r&   rp   r&   r&   r'   rt     ru   zExtendedKeyUsage.__ne__c                 C   r   r   )rx   r   r  r-   r&   r&   r'   ry     r1   zExtendedKeyUsage.__hash__)rD   rE   rF   r   ZEXTENDED_KEY_USAGEr;   rK   r`   r   r>   r7   rb   rc   rd   rG   r^   r}   r~   rq   rt   r6   ry   r&   r&   r&   r'   r    s    	r  c                   @   V   e Zd ZejZdejdefddZ	dejdefddZ
defddZdefd	d
ZdS )OCSPNoCheckrm   r   c                 C      t |tstS dS NT)r   r  ro   rp   r&   r&   r'   rq        
zOCSPNoCheck.__eq__c                 C   rs   r   r&   rp   r&   r&   r'   rt     ru   zOCSPNoCheck.__ne__c                 C      t tS r   )rx   r  r-   r&   r&   r'   ry        zOCSPNoCheck.__hash__c                 C      dS )Nz<OCSPNoCheck()>r&   r-   r&   r&   r'   r^        zOCSPNoCheck.__repr__N)rD   rE   rF   r   ZOCSP_NO_CHECKr;   rK   r}   r~   rq   rt   r6   ry   rG   r^   r&   r&   r&   r'   r        r  c                   @   r  )PrecertPoisonrm   r   c                 C   r  r  )r   r  ro   rp   r&   r&   r'   rq     r  zPrecertPoison.__eq__c                 C   rs   r   r&   rp   r&   r&   r'   rt     ru   zPrecertPoison.__ne__c                 C   r  r   )rx   r  r-   r&   r&   r'   ry     r  zPrecertPoison.__hash__c                 C   r  )Nz<PrecertPoison()>r&   r-   r&   r&   r'   r^      r  zPrecertPoison.__repr__N)rD   rE   rF   r   ZPRECERT_POISONr;   rK   r}   r~   rq   rt   r6   ry   rG   r^   r&   r&   r&   r'   r    r  r  c                   @   r   )
TLSFeaturefeaturesTLSFeatureTyper   Nc                 C   s8   t |}tdd |D rt|dkrtd|| _d S )Nc                 s   r   r   )r   r  r   r&   r&   r'   r   
  r   z&TLSFeature.__init__.<locals>.<genexpr>r   z@features must be a list of elements from the TLSFeatureType enum)rR   r   r+   rZ   	_features)r.   r  r&   r&   r'   r>     s   

zTLSFeature.__init__r  c                 C   r   )Nz$<TLSFeature(features={0._features})>r   r-   r&   r&   r'   r^     ru   zTLSFeature.__repr__rm   c                 C   rn   r   )r   r  ro   r  rp   r&   r&   r'   rq     rr   zTLSFeature.__eq__c                 C   rs   r   r&   rp   r&   r&   r'   rt     ru   zTLSFeature.__ne__c                 C   r   r   )rx   r   r  r-   r&   r&   r'   ry   "  r1   zTLSFeature.__hash__)rD   rE   rF   r   ZTLS_FEATUREr;   rK   r`   r>   r7   rb   rc   rd   rG   r^   r}   r~   rq   rt   r6   ry   r&   r&   r&   r'   r    s    r  c                   @   s   e Zd ZdZdZdS )r  r      N)rD   rE   rF   Zstatus_requestZstatus_request_v2r&   r&   r&   r'   r  &  s    r  c                 C   s   i | ]}|j |qS r&   r[   r   r&   r&   r'   
<dictcomp>1      r!  c                   @   sz   e Zd ZejZdeddfddZdefddZ	de
jdefd	d
Zde
jdefddZdefddZedefddZdS )InhibitAnyPolicy
skip_certsr   Nc                 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   r6   rZ   r   _skip_certs)r.   r$  r&   r&   r'   r>   7  s
   

zInhibitAnyPolicy.__init__c                 C   r   )Nz-<InhibitAnyPolicy(skip_certs={0.skip_certs})>r   r-   r&   r&   r'   r^   @  ru   zInhibitAnyPolicy.__repr__rm   c                 C   rn   r   )r   r#  ro   r$  rp   r&   r&   r'   rq   C  rr   zInhibitAnyPolicy.__eq__c                 C   rs   r   r&   rp   r&   r&   r'   rt   I  ru   zInhibitAnyPolicy.__ne__c                 C   rv   r   )rx   r$  r-   r&   r&   r'   ry   L  ru   zInhibitAnyPolicy.__hash__c                 C   rz   r   )r%  r-   r&   r&   r'   r$  O  r|   zInhibitAnyPolicy.skip_certs)rD   rE   rF   r   ZINHIBIT_ANY_POLICYr;   r6   r>   rG   r^   rK   r}   r~   rq   rt   ry   r   r$  r&   r&   r&   r'   r#  4  s    	r#  c                   @   s*  e Zd ZejZdedededededededed	ed
dfddZed
efddZ	ed
efddZ
ed
efddZed
efddZed
efddZed
efddZed
efddZed
efddZed
efddZd
efd d!Zd"ejd
efd#d$Zd"ejd
efd%d&Zd
efd'd(ZdS ))KeyUsagedigital_signaturecontent_commitmentkey_enciphermentdata_enciphermentkey_agreementkey_cert_signcrl_signencipher_onlydecipher_onlyr   Nc
           
      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)
r.   r'  r(  r)  r*  r+  r,  r-  r.  r/  r&   r&   r'   r>   W  s   
zKeyUsage.__init__c                 C   rz   r   )r0  r-   r&   r&   r'   r'  s  r|   zKeyUsage.digital_signaturec                 C   rz   r   )r1  r-   r&   r&   r'   r(  w  r|   zKeyUsage.content_commitmentc                 C   rz   r   )r2  r-   r&   r&   r'   r)  {  r|   zKeyUsage.key_enciphermentc                 C   rz   r   )r3  r-   r&   r&   r'   r*    r|   zKeyUsage.data_enciphermentc                 C   rz   r   )r4  r-   r&   r&   r'   r+    r|   zKeyUsage.key_agreementc                 C   rz   r   )r5  r-   r&   r&   r'   r,    r|   zKeyUsage.key_cert_signc                 C   rz   r   )r6  r-   r&   r&   r'   r-    r|   zKeyUsage.crl_signc                 C      | j std| jS )Nz7encipher_only is undefined unless key_agreement is true)r+  r   r7  r-   r&   r&   r'   r.    
   zKeyUsage.encipher_onlyc                 C   r9  )Nz7decipher_only is undefined unless key_agreement is true)r+  r   r8  r-   r&   r&   r'   r/    r:  zKeyUsage.decipher_onlyc                 C   s:   z| j }| j}W n ty   d}d}Y nw d| ||S )NFa-  <KeyUsage(digital_signature={0.digital_signature}, content_commitment={0.content_commitment}, key_encipherment={0.key_encipherment}, data_encipherment={0.data_encipherment}, key_agreement={0.key_agreement}, key_cert_sign={0.key_cert_sign}, crl_sign={0.crl_sign}, encipher_only={1}, decipher_only={2})>)r.  r/  r   rU   )r.   r.  r/  r&   r&   r'   r^     s   

zKeyUsage.__repr__rm   c                 C   sz   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o<| j
|j
ko<| j|jkS r   )r   r&  ro   r'  r(  r)  r*  r+  r,  r-  r7  r8  rp   r&   r&   r'   rq     s&   








zKeyUsage.__eq__c                 C   rs   r   r&   rp   r&   r&   r'   rt     ru   zKeyUsage.__ne__c              
   C   s,   t | j| j| j| j| j| j| j| j| j	f	S r   )
rx   r'  r(  r)  r*  r+  r,  r-  r7  r8  r-   r&   r&   r'   ry     s   zKeyUsage.__hash__)rD   rE   rF   r   Z	KEY_USAGEr;   r~   r>   r   r'  r(  r)  r*  r+  r,  r-  r.  r/  rG   r^   rK   r}   rq   rt   r6   ry   r&   r&   r&   r'   r&  T  sZ    	

r&  c                   @   s   e Zd ZejZdejeje	  dejeje	  ddfddZ
dejdefdd	Zdejdefd
dZdeje	 ddfddZdefddZdefddZedejeje	  fddZedejeje	  fddZdS )NameConstraintspermitted_subtreesexcluded_subtreesr   Nc                 C   s   |d urt |}tdd |D std| | |d ur4t |}tdd |D s/td| | |d u r@|d u r@td|| _|| _d S )Nc                 s   r   r   r   r   r&   r&   r'   r     r   z+NameConstraints.__init__.<locals>.<genexpr>z@permitted_subtrees must be a list of GeneralName objects or Nonec                 s   r   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)rR   r   rZ   _validate_ip_namer   _permitted_subtrees_excluded_subtrees)r.   r<  r=  r&   r&   r'   r>     s(   


zNameConstraints.__init__rm   c                 C   r   r   )r   r;  ro   r=  r<  rp   r&   r&   r'   rq     r   zNameConstraints.__eq__c                 C   rs   r   r&   rp   r&   r&   r'   rt     ru   zNameConstraints.__ne__treec                 C   s   t dd |D rtdd S )Nc                 s   s0    | ]}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)anyrZ   )r.   rA  r&   r&   r'   r>  
  s   z!NameConstraints._validate_ip_namec                 C   r   )Nze<NameConstraints(permitted_subtrees={0.permitted_subtrees}, excluded_subtrees={0.excluded_subtrees})>r   r-   r&   r&   r'   r^     r   zNameConstraints.__repr__c                 C   s@   | j d urt| j }nd }| jd urt| j}nd }t||fS r   )r<  r   r=  rx   )r.   Zpsesr&   r&   r'   ry     s   

zNameConstraints.__hash__c                 C   rz   r   )r?  r-   r&   r&   r'   r<  .  r   z"NameConstraints.permitted_subtreesc                 C   rz   r   )r@  r-   r&   r&   r'   r=  4  r   z!NameConstraints.excluded_subtrees)rD   rE   rF   r   ZNAME_CONSTRAINTSr;   rK   r   r`   r   r>   r}   r~   rq   rt   r>  rG   r^   r6   ry   r   r   r<  r=  r&   r&   r&   r'   r;    s,    
"	r;  c                   @   s   e Zd ZdedededdfddZedefdd	Zedefd
dZ	edefddZ
defddZdejdefddZdejdefddZdefddZdS )	Extensionr;   criticalr[   r   Nc                 C   s:   t |ts	tdt |tstd|| _|| _|| _d S )Nz2oid argument must be an ObjectIdentifier instance.z critical must be a boolean value)r   r   rZ   r~   _oid	_critical_value)r.   r;   rI  r[   r&   r&   r'   r>   <  s   


zExtension.__init__c                 C   rz   r   rJ  r-   r&   r&   r'   r;   K  r|   zExtension.oidc                 C   rz   r   )rK  r-   r&   r&   r'   rI  O  r|   zExtension.criticalc                 C   rz   r   rL  r-   r&   r&   r'   r[   S  r|   zExtension.valuec                 C   r   )Nz@<Extension(oid={0.oid}, critical={0.critical}, value={0.value})>r   r-   r&   r&   r'   r^   W  r   zExtension.__repr__rm   c                 C   r   r   )r   rH  ro   r;   rI  r[   rp   r&   r&   r'   rq   ]  s   


zExtension.__eq__c                 C   rs   r   r&   rp   r&   r&   r'   rt   g  ru   zExtension.__ne__c                 C   s   t | j| j| jfS r   )rx   r;   rI  r[   r-   r&   r&   r'   ry   j  r  zExtension.__hash__)rD   rE   rF   r   r~   r   r>   r   r;   rI  r[   rG   r^   rK   r}   rq   rt   r6   ry   r&   r&   r&   r'   rH  ;  s(    

rH  c                
   @   s  e Zd Zdeje ddfddZed\ZZ	Z
ejdejeje eje eje f deje fdd	Zejdeje deje fd
d	Zejdeje deje fdd	Zejdeje deje fdd	Zejdeje deje fdd	Zdejeje eje eje eje eje eje eje f dejeje eje eje eje eje f fdd	ZdefddZdejdefddZdejdefddZde fddZ!dS )GeneralNamesgeneral_namesr   Nc                 C   r   )Nc                 s   r   r   r   r   r&   r&   r'   r   q  r   z(GeneralNames.__init__.<locals>.<genexpr>z^Every item in the general_names list must be an object conforming to the GeneralName interface)rR   r   rZ   _general_namesr.   rP  r&   r&   r'   r>   o  r   zGeneralNames.__init__rQ  typec                 C      d S r   r&   r.   rS  r&   r&   r'   get_values_for_type{     	z GeneralNames.get_values_for_typec                 C   rT  r   r&   rU  r&   r&   r'   rV       c                 C   rT  r   r&   rU  r&   r&   r'   rV    rX  c                 C   rT  r   r&   rU  r&   r&   r'   rV       c                 C   rT  r   r&   rU  r&   r&   r'   rV    rY  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rS  r&   r'   r     s    z3GeneralNames.get_values_for_type.<locals>.<genexpr>c                 S   s   g | ]}|j qS r&   r   rZ  r&   r&   r'   
<listcomp>  s    z4GeneralNames.get_values_for_type.<locals>.<listcomp>)r   rR   )r.   rS  objsr&   r\  r'   rV    s   c                 C   r]   )Nz<GeneralNames({})>rU   rQ  r-   r&   r&   r'   r^     r_   zGeneralNames.__repr__rm   c                 C   rn   r   )r   rO  ro   rQ  rp   r&   r&   r'   rq     rr   zGeneralNames.__eq__c                 C   rs   r   r&   rp   r&   r&   r'   rt     ru   zGeneralNames.__ne__c                 C   r   r   )rx   r   rQ  r-   r&   r&   r'   ry     r1   zGeneralNames.__hash__)"rD   rE   rF   rK   r`   r   r>   r7   rb   rc   rd   overloadr  ra   r
   r   r   r   rG   rV  r   r   r   r   r   r   r   r^   r}   r~   rq   rt   r6   ry   r&   r&   r&   r'   rO  n  s~    


rO  c                
   @     e Zd ZejZdeje ddfddZ	e
d\ZZZejdejeje eje eje f deje fdd	Zejdeje deje fd
d	Zejdeje deje fdd	Zejdeje deje fdd	Zejdeje deje fdd	Zdejeje eje eje eje eje eje eje f dejeje eje eje eje eje f fdd	ZdefddZdejde fddZ!dejde fddZ"de#fddZ$dS )SubjectAlternativeNamerP  r   Nc                 C   rQ   r   rO  rQ  rR  r&   r&   r'   r>     r1   zSubjectAlternativeName.__init__rQ  rS  c                 C   rT  r   r&   rU  r&   r&   r'   rV    rW  z*SubjectAlternativeName.get_values_for_typec                 C   rT  r   r&   rU  r&   r&   r'   rV    rX  c                 C   rT  r   r&   rU  r&   r&   r'   rV    rX  c                 C   rT  r   r&   rU  r&   r&   r'   rV    rY  c                 C   rT  r   r&   rU  r&   r&   r'   rV    rY  c                 C      | j |S r   rQ  rV  rU  r&   r&   r'   rV       c                 C   r]   )Nz<SubjectAlternativeName({})>r_  r-   r&   r&   r'   r^     r_   zSubjectAlternativeName.__repr__rm   c                 C   rn   r   )r   rb  ro   rQ  rp   r&   r&   r'   rq     rr   zSubjectAlternativeName.__eq__c                 C   rs   r   r&   rp   r&   r&   r'   rt     ru   zSubjectAlternativeName.__ne__c                 C   rv   r   rx   rQ  r-   r&   r&   r'   ry     ru   zSubjectAlternativeName.__hash__)%rD   rE   rF   r   ZSUBJECT_ALTERNATIVE_NAMEr;   rK   r`   r   r>   r7   rb   rc   rd   r`  r  ra   r
   r   r   r   rG   rV  r   r   r   r   r   r   r   r^   r}   r~   rq   rt   r6   ry   r&   r&   r&   r'   rb        

rb  c                
   @   ra  )IssuerAlternativeNamerP  r   Nc                 C   rQ   r   rc  rR  r&   r&   r'   r>     r1   zIssuerAlternativeName.__init__rQ  rS  c                 C   rT  r   r&   rU  r&   r&   r'   rV  #  rW  z)IssuerAlternativeName.get_values_for_typec                 C   rT  r   r&   rU  r&   r&   r'   rV  .  rX  c                 C   rT  r   r&   rU  r&   r&   r'   rV  5  rX  c                 C   rT  r   r&   rU  r&   r&   r'   rV  <  rY  c                 C   rT  r   r&   rU  r&   r&   r'   rV  B  rY  c                 C   rd  r   re  rU  r&   r&   r'   rV  H  rf  c                 C   r]   )Nz<IssuerAlternativeName({})>r_  r-   r&   r&   r'   r^   \  r_   zIssuerAlternativeName.__repr__rm   c                 C   rn   r   )r   ri  ro   rQ  rp   r&   r&   r'   rq   _  rr   zIssuerAlternativeName.__eq__c                 C   rs   r   r&   rp   r&   r&   r'   rt   e  ru   zIssuerAlternativeName.__ne__c                 C   rv   r   rg  r-   r&   r&   r'   ry   h  ru   zIssuerAlternativeName.__hash__)%rD   rE   rF   r   ZISSUER_ALTERNATIVE_NAMEr;   rK   r`   r   r>   r7   rb   rc   rd   r`  r  ra   r
   r   r   r   rG   rV  r   r   r   r   r   r   r   r^   r}   r~   rq   rt   r6   ry   r&   r&   r&   r'   ri    rh  ri  c                
   @   ra  )CertificateIssuerrP  r   Nc                 C   rQ   r   rc  rR  r&   r&   r'   r>   o  r1   zCertificateIssuer.__init__rQ  rS  c                 C   rT  r   r&   rU  r&   r&   r'   rV  t  rW  z%CertificateIssuer.get_values_for_typec                 C   rT  r   r&   rU  r&   r&   r'   rV    rX  c                 C   rT  r   r&   rU  r&   r&   r'   rV    rX  c                 C   rT  r   r&   rU  r&   r&   r'   rV    rY  c                 C   rT  r   r&   rU  r&   r&   r'   rV    rY  c                 C   rd  r   re  rU  r&   r&   r'   rV    rf  c                 C   r]   )Nz<CertificateIssuer({})>r_  r-   r&   r&   r'   r^     r_   zCertificateIssuer.__repr__rm   c                 C   rn   r   )r   rj  ro   rQ  rp   r&   r&   r'   rq     rr   zCertificateIssuer.__eq__c                 C   rs   r   r&   rp   r&   r&   r'   rt     ru   zCertificateIssuer.__ne__c                 C   rv   r   rg  r-   r&   r&   r'   ry     ru   zCertificateIssuer.__hash__)%rD   rE   rF   r   ZCERTIFICATE_ISSUERr;   rK   r`   r   r>   r7   rb   rc   rd   r`  r  ra   r
   r   r   r   rG   rV  r   r   r   r   r   r   r   r^   r}   r~   rq   rt   r6   ry   r&   r&   r&   r'   rj  l  rh  rj  c                   @   sz   e Zd ZejZdeddfddZdefddZ	de
jdefd	d
Zde
jdefddZdefddZedefddZdS )	CRLReasonreasonr   Nc                 C   rg   )Nz*reason must be an element from ReasonFlags)r   r   rZ   _reason)r.   rl  r&   r&   r'   r>     rl   zCRLReason.__init__c                 C   r]   )Nz<CRLReason(reason={})>)rU   rm  r-   r&   r&   r'   r^     r_   zCRLReason.__repr__rm   c                 C   rn   r   )r   rk  ro   rl  rp   r&   r&   r'   rq     rr   zCRLReason.__eq__c                 C   rs   r   r&   rp   r&   r&   r'   rt     ru   zCRLReason.__ne__c                 C   rv   r   )rx   rl  r-   r&   r&   r'   ry     ru   zCRLReason.__hash__c                 C   rz   r   )rm  r-   r&   r&   r'   rl    r|   zCRLReason.reason)rD   rE   rF   r   Z
CRL_REASONr;   r   r>   rG   r^   rK   r}   r~   rq   rt   r6   ry   r   rl  r&   r&   r&   r'   rk    s    rk  c                   @   s~   e Zd ZejZdejddfddZdefddZ	de
jdefd	d
Zde
jdefddZdefddZedejfddZdS )InvalidityDateinvalidity_dater   Nc                 C   s   t |tjs
td|| _d S )Nz+invalidity_date must be a datetime.datetime)r   datetimerZ   _invalidity_date)r.   ro  r&   r&   r'   r>     s   
zInvalidityDate.__init__c                 C   r]   )Nz$<InvalidityDate(invalidity_date={})>)rU   rq  r-   r&   r&   r'   r^     s   zInvalidityDate.__repr__rm   c                 C   rn   r   )r   rn  ro   ro  rp   r&   r&   r'   rq     rr   zInvalidityDate.__eq__c                 C   rs   r   r&   rp   r&   r&   r'   rt     ru   zInvalidityDate.__ne__c                 C   rv   r   )rx   ro  r-   r&   r&   r'   ry     ru   zInvalidityDate.__hash__c                 C   rz   r   )rq  r-   r&   r&   r'   ro    r|   zInvalidityDate.invalidity_date)rD   rE   rF   r   ZINVALIDITY_DATEr;   rp  r>   rG   r^   rK   r}   r~   rq   rt   r6   ry   r   ro  r&   r&   r&   r'   rn    s    rn  c                   @   |   e Zd ZejZdeje ddfddZ	e
d\ZZZdefddZdefd	d
ZdejdefddZdejdefddZdS ))PrecertificateSignedCertificateTimestampssigned_certificate_timestampsr   Nc                 C   r   )Nc                 s   r   r   r   r	   r   Zsctr&   r&   r'   r     
    
zEPrecertificateSignedCertificateTimestamps.__init__.<locals>.<genexpr>YEvery item in the signed_certificate_timestamps list must be a SignedCertificateTimestamprR   r   rZ   _signed_certificate_timestampsr.   rt  r&   r&   r'   r>        
z2PrecertificateSignedCertificateTimestamps.__init__rz  c                 C      d t| S )Nz/<PrecertificateSignedCertificateTimestamps({})>rU   rR   r-   r&   r&   r'   r^     s   z2PrecertificateSignedCertificateTimestamps.__repr__c                 C   r   r   rx   r   rz  r-   r&   r&   r'   ry     r1   z2PrecertificateSignedCertificateTimestamps.__hash__rm   c                 C   rn   r   )r   rs  ro   rz  rp   r&   r&   r'   rq        
z0PrecertificateSignedCertificateTimestamps.__eq__c                 C   rs   r   r&   rp   r&   r&   r'   rt   "  ru   z0PrecertificateSignedCertificateTimestamps.__ne__)rD   rE   rF   r   Z%PRECERT_SIGNED_CERTIFICATE_TIMESTAMPSr;   rK   r`   r	   r>   r7   rb   rc   rd   rG   r^   r6   ry   r}   r~   rq   rt   r&   r&   r&   r'   rs    s     

	rs  c                   @   rr  )SignedCertificateTimestampsrt  r   Nc                 C   r   )Nc                 s   r   r   ru  rv  r&   r&   r'   r   0  rw  z7SignedCertificateTimestamps.__init__.<locals>.<genexpr>rx  ry  r{  r&   r&   r'   r>   )  r|  z$SignedCertificateTimestamps.__init__rz  c                 C   r}  )Nz!<SignedCertificateTimestamps({})>r~  r-   r&   r&   r'   r^   >  r1   z$SignedCertificateTimestamps.__repr__c                 C   r   r   r  r-   r&   r&   r'   ry   A  r1   z$SignedCertificateTimestamps.__hash__rm   c                 C   rn   r   )r   r  ro   rz  rp   r&   r&   r'   rq   D  r  z"SignedCertificateTimestamps.__eq__c                 C   rs   r   r&   rp   r&   r&   r'   rt   M  ru   z"SignedCertificateTimestamps.__ne__)rD   rE   rF   r   ZSIGNED_CERTIFICATE_TIMESTAMPSr;   rK   r`   r	   r>   r7   rb   rc   rd   rG   r^   r6   ry   r}   r~   rq   rt   r&   r&   r&   r'   r  &  s     

	r  c                   @   sz   e Zd ZejZdeddfddZdej	de
fddZdej	de
fd	d
ZdefddZdefddZedefddZdS )	OCSPNoncenoncer   Nc                 C   rg   )Nznonce must be bytes)r   r   rZ   _nonce)r.   r  r&   r&   r'   r>   T  rl   zOCSPNonce.__init__rm   c                 C   rn   r   )r   r  ro   r  rp   r&   r&   r'   rq   Z  rr   zOCSPNonce.__eq__c                 C   rs   r   r&   rp   r&   r&   r'   rt   `  ru   zOCSPNonce.__ne__c                 C   rv   r   )rx   r  r-   r&   r&   r'   ry   c  ru   zOCSPNonce.__hash__c                 C   r   )Nz<OCSPNonce(nonce={0.nonce!r})>r   r-   r&   r&   r'   r^   f  ru   zOCSPNonce.__repr__c                 C   rz   r   )r  r-   r&   r&   r'   r  i  r|   zOCSPNonce.nonce)rD   rE   rF   r   ZNONCEr;   r   r>   rK   r}   r~   rq   rt   r6   ry   rG   r^   r   r  r&   r&   r&   r'   r  Q  r   r  c                   @   s:  e Zd ZejZdejeje	  deje
 dededejeje  dededd	fd
dZdefddZdejdefddZdejdefddZdefddZedejeje	  fddZedeje
 fddZedefddZedefddZedejeje  fddZedefdd Zedefd!d"Zd	S )#IssuingDistributionPointr   r   only_contains_user_certsonly_contains_ca_certsonly_some_reasonsindirect_crlonly_contains_attribute_certsr   Nc           	      C   s   |d urt |}|rt|trtdd |D std|r,tj|v s(tj|v r,tdt|t	r@t|t	r@t|t	r@t|t	sDtd||||g}t
dd |D dkrYtd	t|||||||gshtd
|| _|| _|| _|| _|| _|| _|| _d S )Nc                 s   r   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'   r]    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.)rR   r   r   r   rZ   r   r   r   r   r~   r+   rF  _only_contains_user_certs_only_contains_ca_certs_indirect_crl_only_contains_attribute_certs_only_some_reasonsr   r   )	r.   r   r   r  r  r  r  r  Zcrl_constraintsr&   r&   r'   r>   q  st   

z!IssuingDistributionPoint.__init__c                 C   r   )NaG  <IssuingDistributionPoint(full_name={0.full_name}, relative_name={0.relative_name}, only_contains_user_certs={0.only_contains_user_certs}, only_contains_ca_certs={0.only_contains_ca_certs}, only_some_reasons={0.only_some_reasons}, indirect_crl={0.indirect_crl}, only_contains_attribute_certs={0.only_contains_attribute_certs})>r   r-   r&   r&   r'   r^     s   z!IssuingDistributionPoint.__repr__rm   c                 C   sb   t |tstS | j|jko0| j|jko0| j|jko0| j|jko0| j|jko0| j|jko0| j	|j	kS r   )
r   r  ro   r   r   r  r  r  r  r  rp   r&   r&   r'   rq     s"   





zIssuingDistributionPoint.__eq__c                 C   rs   r   r&   rp   r&   r&   r'   rt     ru   zIssuingDistributionPoint.__ne__c                 C   s$   t | j| j| j| j| j| j| jfS r   )rx   r   r   r  r  r  r  r  r-   r&   r&   r'   ry     s   z!IssuingDistributionPoint.__hash__c                 C   rz   r   r   r-   r&   r&   r'   r     r|   z"IssuingDistributionPoint.full_namec                 C   rz   r   r   r-   r&   r&   r'   r     r|   z&IssuingDistributionPoint.relative_namec                 C   rz   r   )r  r-   r&   r&   r'   r    r|   z1IssuingDistributionPoint.only_contains_user_certsc                 C   rz   r   )r  r-   r&   r&   r'   r    r|   z/IssuingDistributionPoint.only_contains_ca_certsc                 C   rz   r   )r  r-   r&   r&   r'   r    r   z*IssuingDistributionPoint.only_some_reasonsc                 C   rz   r   )r  r-   r&   r&   r'   r    r|   z%IssuingDistributionPoint.indirect_crlc                 C   rz   r   )r  r-   r&   r&   r'   r  	  r|   z6IssuingDistributionPoint.only_contains_attribute_certs)rD   rE   rF   r   ZISSUING_DISTRIBUTION_POINTr;   rK   r   r`   r   r   r~   r   r   r>   rG   r^   r}   rq   rt   r6   ry   r   r   r   r   r  r  r  r  r  r&   r&   r&   r'   r  n  sN    	
Sr  c                   @   s   e Zd ZdededdfddZedefddZedefd	d
Zde	fddZ
dejdefddZdejdefddZdefddZdS )rY   r;   r[   r   Nc                 C   s"   t |ts	td|| _|| _d S )Nzoid must be an ObjectIdentifier)r   r   rZ   rJ  rL  )r.   r;   r[   r&   r&   r'   r>     s   

zUnrecognizedExtension.__init__c                 C   rz   r   rM  r-   r&   r&   r'   r;     r|   zUnrecognizedExtension.oidc                 C   rz   r   rN  r-   r&   r&   r'   r[     r|   zUnrecognizedExtension.valuec                 C   r   )Nz7<UnrecognizedExtension(oid={0.oid}, value={0.value!r})>r   r-   r&   r&   r'   r^     r   zUnrecognizedExtension.__repr__rm   c                 C   r   r   )r   rY   ro   r;   r[   rp   r&   r&   r'   rq   #  r   zUnrecognizedExtension.__eq__c                 C   rs   r   r&   rp   r&   r&   r'   rt   )  ru   zUnrecognizedExtension.__ne__c                 C   r   r   )rx   r;   r[   r-   r&   r&   r'   ry   ,  r   zUnrecognizedExtension.__hash__)rD   rE   rF   r   r   r>   r   r;   r[   rG   r^   rK   r}   r~   rq   rt   r6   ry   r&   r&   r&   r'   rY     s    rY   )dabcrp  r"   rB  rK   Zcryptographyr   Z"cryptography.hazmat.bindings._rustr   Zcryptography.hazmat.primitivesr   r   Z,cryptography.hazmat.primitives.asymmetric.ecr   Z-cryptography.hazmat.primitives.asymmetric.rsar   Z/cryptography.hazmat.primitives.asymmetric.typesr   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(   rG   r7   	Exceptionr9   rJ   ABCMetar   objectrO   re   r   r   r   r   r   r   r   r   r   r   Enumr   r   r   r   r   r   r   r   r   Z_REASON_BIT_MAPPINGr   r   r   r   r  r  r  r  r  r  Z_TLS_FEATURE_TYPE_TO_ENUMr#  r&  r;  GenericrH  rO  rb  ri  rj  rk  rn  rs  r  r  r  rY   r&   r&   r&   r'   <module>   s   ,'g$!!+.%%sA@.+"  b3\QQQ-+ !