o
    c$                     @   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
 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ede+fddZ,de-f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,d- d-e3Z;G d.d/ d/e3Z<G d0d1 d1e3Z=G d2d3 d3e3Z>G d4d5 d5Z?G d6d7 d7ej@ZAeAjBeAjCeAjDeAjEeAjFeAjGeAjHeAjId8ZJeAjBd9eAjCd:eAjDd;eAjEd<eAjFd=eAjGd>eAjHd?eAjId@iZKG dAdB dBe3ZLG dCdD dDe3ZMG dEdF dFZNG dGdH dHZOG dIdJ dJZPG dKdL dLe3ZQG dMdN dNe3ZRG dOdP dPe3ZSG dQdR dRe3ZTG dSdT dTej@ZUdUdV eUD ZVG dWdX dXe3ZWG dYdZ dZe3ZXG d[d\ d\e3ZYG d]d^ d^ejZe* Z[G d_d` d`Z\G dadb dbe3Z]G dcdd dde3Z^G dedf dfe3Z_G dgdh dhe3Z`G didj dje3ZaG dkdl dle3ZbG dmdn dne3ZcG dodp dpe3ZdG dqdr dre3ZeG dsdt dte3ZfdS )u    N)utils)asn1)x509)constant_timeserialization)EllipticCurvePublicKey)RSAPublicKey)#CERTIFICATE_ISSUER_PUBLIC_KEY_TYPESCERTIFICATE_PUBLIC_KEY_TYPES)SignedCertificateTimestamp)	DNSNameDirectoryNameGeneralName	IPAddress	OtherName
RFC822NameRegisteredIDUniformResourceIdentifier_IPADDRESS_TYPES)NameRelativeDistinguishedName)CRLEntryExtensionOIDExtensionOIDOCSPExtensionOIDObjectIdentifierExtensionTypeVarExtensionTypeT)bound	covariant
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hashlibZsha1digest)r   dataZ
serialized r'   @usr/lib/python3.10/site-packages/cryptography/x509/extensions.py_key_identifier_from_public_key1   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_methodJ      z*_make_sequence_methods.<locals>.len_methodc                    r+   r!   )iterr-   r.   r0   r'   r(   iter_methodM   r2   z+_make_sequence_methods.<locals>.iter_methodc                    s   t |  | S r!   )r-   )r/   idxr0   r'   r(   getitem_methodP   r2   z._make_sequence_methods.<locals>.getitem_method)int)r*   r1   r4   r6   r'   r0   r(   _make_sequence_methodsI   s   
r8   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!   )superr:   __init__r<   r/   r;   r<   	__class__r'   r(   r?   W      
zDuplicateExtension.__init____name__
__module____qualname__strr   r?   __classcell__r'   r'   rA   r(   r:   V       "r:   c                       r9   )ExtensionNotFoundr;   r<   r    Nc                    r=   r!   )r>   rK   r?   r<   r@   rA   r'   r(   r?   ]   rC   zExtensionNotFound.__init__rD   r'   r'   rA   r(   rK   \   rJ   rK   c                   @   s*   e Zd ZU eje ed< defddZdS )r   r<   r    c                 C   s   t d| )z7
        Serializes the extension type to DER.
        z8public_bytes is not implemented for extension type {0!r})NotImplementedErrorformatr.   r'   r'   r(   r#   e   s
   zExtensionType.public_bytesN)	rE   rF   rG   typingClassVarr   __annotations__bytesr#   r'   r'   r'   r(   r   b   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/   rT   r'   r'   r(   r?   q   s   zExtensions.__init__r<   c                 C   s,   | D ]}|j |kr|  S qtd||)NNo {} extension was found)r<   rK   rM   )r/   r<   extr'   r'   r(   get_extension_for_oidv   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.rX   )UnrecognizedExtension	TypeErrorr"   valuerK   rM   r<   )r/   r[   rY   r'   r'   r(   get_extension_for_class   s   z"Extensions.get_extension_for_classrW   c                 C      d | jS )Nz<Extensions({})>)rM   rW   r.   r'   r'   r(   __repr__      zExtensions.__repr__)rE   rF   rG   rN   Iterabler?   r   rZ   Typer   r_   r8   __len____iter____getitem__rH   ra   r'   r'   r'   r(   rS   p   s$    

	
rS   c                   @   sr   e Zd ZejZdeddfddZde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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"   r7   r]   _crl_numberr/   ri   r'   r'   r(   r?         

zCRLNumber.__init__otherc                 C      t |tstS | j|jkS r!   )r"   rh   NotImplementedri   r/   rp   r'   r'   r(   __eq__      
zCRLNumber.__eq__c                 C   
   t | jS r!   hashri   r.   r'   r'   r(   __hash__      
zCRLNumber.__hash__c                 C   r`   )Nz<CRLNumber({})>)rM   ri   r.   r'   r'   r(   ra      rb   zCRLNumber.__repr__c                 C      | j S r!   rm   r.   r'   r'   r(   ri         zCRLNumber.crl_numberc                 C   
   t | S r!   	rust_x509Zencode_extension_valuer.   r'   r'   r(   r#      rz   zCRLNumber.public_bytes)rE   rF   rG   r   Z
CRL_NUMBERr<   r7   r?   objectboolrt   ry   rH   ra   propertyri   rQ   r#   r'   r'   r'   r(   rh          rh   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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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)	
ValueErrorrV   allr]   r"   r7   _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})>rM   r.   r'   r'   r(   ra      s   zAuthorityKeyIdentifier.__repr__rp   c                 C   2   t |tstS | j|jko| j|jko| j|jkS r!   )r"   r   rr   r   r   r   rs   r'   r'   r(   rt      s   

zAuthorityKeyIdentifier.__eq__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   r{   r!   )r   r.   r'   r'   r(   r     r}   z%AuthorityKeyIdentifier.key_identifierc                 C   r{   r!   )r   r.   r'   r'   r(   r        z,AuthorityKeyIdentifier.authority_cert_issuerc                 C   r{   r!   )r   r.   r'   r'   r(   r     r}   z3AuthorityKeyIdentifier.authority_cert_serial_numberc                 C   r~   r!   r   r.   r'   r'   r(   r#     rz   z#AuthorityKeyIdentifier.public_bytes)r   r   r    r   )rE   rF   rG   r   ZAUTHORITY_KEY_IDENTIFIERr<   rN   OptionalrQ   rc   r   r7   r?   classmethodr	   r   r   rH   ra   r   r   rt   ry   r   r   Listr   r   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defddZ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?   #  rz   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   r{   r!   r   r.   r'   r'   r(   r%   ,  r}   zSubjectKeyIdentifier.digestc                 C   r{   r!   r   r.   r'   r'   r(   r   0  r}   z#SubjectKeyIdentifier.key_identifierc                 C   r`   )Nz$<SubjectKeyIdentifier(digest={0!r})>)rM   r%   r.   r'   r'   r(   ra   4  rb   zSubjectKeyIdentifier.__repr__rp   c                 C   s   t |tstS t| j|jS r!   )r"   r   rr   r   Zbytes_eqr%   rs   r'   r'   r(   rt   7  s   
zSubjectKeyIdentifier.__eq__c                 C   rv   r!   )rx   r%   r.   r'   r'   r(   ry   =  rz   zSubjectKeyIdentifier.__hash__c                 C   r~   r!   r   r.   r'   r'   r(   r#   @  rz   z!SubjectKeyIdentifier.public_bytes)rE   rF   rG   r   ZSUBJECT_KEY_IDENTIFIERr<   rQ   r?   r   r
   r   r   r%   r   rH   ra   r   r   rt   r7   ry   r#   r'   r'   r'   r(   r      s"    r   c                   @   t   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defddZ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   K      z6AuthorityInformationAccess.__init__.<locals>.<genexpr>@Every item in the descriptions list must be an AccessDescriptionrV   r   r]   _descriptionsr/   r   r'   r'   r(   r?   G     
z#AuthorityInformationAccess.__init__r   c                 C   r`   )Nz <AuthorityInformationAccess({})>rM   r   r.   r'   r'   r(   ra   U  rb   z#AuthorityInformationAccess.__repr__rp   c                 C   rq   r!   )r"   r   rr   r   rs   r'   r'   r(   rt   X  ru   z!AuthorityInformationAccess.__eq__c                 C      t t| jS r!   rx   r   r   r.   r'   r'   r(   ry   ^  r2   z#AuthorityInformationAccess.__hash__c                 C   r~   r!   r   r.   r'   r'   r(   r#   a  rz   z'AuthorityInformationAccess.public_bytes)rE   rF   rG   r   ZAUTHORITY_INFORMATION_ACCESSr<   rN   rc   r?   r8   re   rf   rg   rH   ra   r   r   rt   r7   ry   rQ   r#   r'   r'   r'   r(   r   D      
r   c                   @   r   )SubjectInformationAccessr   r   r    Nc                 C   r   )Nc                 s   r   r!   r   r   r'   r'   r(   r   l  r   z4SubjectInformationAccess.__init__.<locals>.<genexpr>r   r   r   r'   r'   r(   r?   h  r   z!SubjectInformationAccess.__init__r   c                 C   r`   )Nz<SubjectInformationAccess({})>r   r.   r'   r'   r(   ra   v  rb   z!SubjectInformationAccess.__repr__rp   c                 C   rq   r!   )r"   r   rr   r   rs   r'   r'   r(   rt   y  ru   zSubjectInformationAccess.__eq__c                 C   r   r!   r   r.   r'   r'   r(   ry     r2   z!SubjectInformationAccess.__hash__c                 C   r~   r!   r   r.   r'   r'   r(   r#     rz   z%SubjectInformationAccess.public_bytes)rE   rF   rG   r   ZSUBJECT_INFORMATION_ACCESSr<   rN   rc   r?   r8   re   rf   rg   rH   ra   r   r   rt   r7   ry   rQ   r#   r'   r'   r'   r(   r   e  r   r   c                   @   st   e Zd ZdededdfddZdefddZd	e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   r]   r   _access_method_access_location)r/   r   r   r'   r'   r(   r?     s   


zAccessDescription.__init__c                 C   r   )NzY<AccessDescription(access_method={0.access_method}, access_location={0.access_location})>r   r.   r'   r'   r(   ra        zAccessDescription.__repr__rp   c                 C   &   t |tstS | j|jko| j|jkS r!   )r"   r   rr   r   r   rs   r'   r'   r(   rt     
   

zAccessDescription.__eq__c                 C      t | j| jfS r!   )rx   r   r   r.   r'   r'   r(   ry        zAccessDescription.__hash__c                 C   r{   r!   )r   r.   r'   r'   r(   r     r}   zAccessDescription.access_methodc                 C   r{   r!   )r   r.   r'   r'   r(   r     r}   z!AccessDescription.access_location)rE   rF   rG   r   r   r?   rH   ra   r   r   rt   r7   ry   r   r   r   r'   r'   r'   r(   r     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defddZ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   r]   r   r7   _ca_path_length)r/   r   r   r'   r'   r(   r?     s   

zBasicConstraints.__init__c                 C   r{   r!   )r   r.   r'   r'   r(   r     r}   zBasicConstraints.cac                 C   r{   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(   ra     r   zBasicConstraints.__repr__rp   c                 C   r   r!   )r"   r   rr   r   r   rs   r'   r'   r(   rt        
zBasicConstraints.__eq__c                 C   r   r!   )rx   r   r   r.   r'   r'   r(   ry     r   zBasicConstraints.__hash__c                 C   r~   r!   r   r.   r'   r'   r(   r#     rz   zBasicConstraints.public_bytes)rE   rF   rG   r   ZBASIC_CONSTRAINTSr<   r   rN   r   r7   r?   r   r   r   rH   ra   r   rt   ry   rQ   r#   r'   r'   r'   r(   r     s    r   c                   @   sr   e Zd ZejZdeddfddZedefddZ	de
defd	d
ZdefddZdefddZdefddZdS )DeltaCRLIndicatorri   r    Nc                 C   rj   rk   rl   rn   r'   r'   r(   r?     ro   zDeltaCRLIndicator.__init__c                 C   r{   r!   r|   r.   r'   r'   r(   ri     r}   zDeltaCRLIndicator.crl_numberrp   c                 C   rq   r!   )r"   r   rr   ri   rs   r'   r'   r(   rt     ru   zDeltaCRLIndicator.__eq__c                 C   rv   r!   rw   r.   r'   r'   r(   ry     rz   zDeltaCRLIndicator.__hash__c                 C   r   )Nz.<DeltaCRLIndicator(crl_number={0.crl_number})>r   r.   r'   r'   r(   ra     rz   zDeltaCRLIndicator.__repr__c                 C   r~   r!   r   r.   r'   r'   r(   r#     rz   zDeltaCRLIndicator.public_bytes)rE   rF   rG   r   ZDELTA_CRL_INDICATORr<   r7   r?   r   ri   r   r   rt   ry   rH   ra   rQ   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rV   r   r]   _distribution_pointsr/   r   r'   r'   r(   r?        
zCRLDistributionPoints.__init__r   c                 C   r`   )Nz<CRLDistributionPoints({})>rM   r   r.   r'   r'   r(   ra     rb   zCRLDistributionPoints.__repr__rp   c                 C   rq   r!   )r"   r   rr   r   rs   r'   r'   r(   rt     ru   zCRLDistributionPoints.__eq__c                 C   r   r!   rx   r   r   r.   r'   r'   r(   ry     r2   zCRLDistributionPoints.__hash__c                 C   r~   r!   r   r.   r'   r'   r(   r#     rz   z"CRLDistributionPoints.public_bytes)rE   rF   rG   r   ZCRL_DISTRIBUTION_POINTSr<   rN   rc   r?   r8   re   rf   rg   rH   ra   r   r   rt   r7   ry   rQ   r#   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(   ra   3  rb   zFreshestCRL.__repr__rp   c                 C   rq   r!   )r"   r   rr   r   rs   r'   r'   r(   rt   6  ru   zFreshestCRL.__eq__c                 C   r   r!   r   r.   r'   r'   r(   ry   <  r2   zFreshestCRL.__hash__c                 C   r~   r!   r   r.   r'   r'   r(   r#   ?  rz   zFreshestCRL.public_bytes)rE   rF   rG   r   ZFRESHEST_CRLr<   rN   rc   r?   r8   re   rf   rg   rH   ra   r   r   rt   r7   ry   rQ   r#   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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   S  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   `  r   z2crl_issuer must be None or a list of general namesc                 s   r   r!   r"   r   r   r'   r'   r(   r   g  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   rV   r   r]   r"   r   	frozensetr   unspecifiedremove_from_crl
_full_name_relative_name_reasons_crl_issuer)r/   r   r   r   r   r'   r'   r(   r?   D  sR   



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(   ra        zDistributionPoint.__repr__rp   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   rr   r   r   r   r   rs   r'   r'   r(   rt     s   



zDistributionPoint.__eq__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   r{   r!   r   r.   r'   r'   r(   r     r}   zDistributionPoint.full_namec                 C   r{   r!   r   r.   r'   r'   r(   r     r}   zDistributionPoint.relative_namec                 C   r{   r!   )r   r.   r'   r'   r(   r     r}   zDistributionPoint.reasonsc                 C   r{   r!   )r   r.   r'   r'   r(   r     r}   zDistributionPoint.crl_issuer)rE   rF   rG   rN   r   rc   r   r   	FrozenSetr?   rH   ra   r   r   rt   r7   ry   r   r   r   r   r   r   r'   r'   r'   r(   r   C  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)rE   rF   rG   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eje deje ddfddZ	de
fddZd	e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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"   r7   r]   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(   ra     r   zPolicyConstraints.__repr__rp   c                 C   r   r!   )r"   r   rr   r   r   rs   r'   r'   r(   rt   
  r   zPolicyConstraints.__eq__c                 C   r   r!   )rx   r   r   r.   r'   r'   r(   ry     s   
zPolicyConstraints.__hash__c                 C   r{   r!   )r   r.   r'   r'   r(   r     r}   z)PolicyConstraints.require_explicit_policyc                 C   r{   r!   )r   r.   r'   r'   r(   r     r}   z(PolicyConstraints.inhibit_policy_mappingc                 C   r~   r!   r   r.   r'   r'   r(   r#      rz   zPolicyConstraints.public_bytes)rE   rF   rG   r   ZPOLICY_CONSTRAINTSr<   rN   r   r7   r?   rH   ra   r   r   rt   ry   r   r   r   rQ   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)rV   r   r]   	_policies)r/   r   r'   r'   r(   r?   '     
zCertificatePolicies.__init__r   c                 C   r`   )Nz<CertificatePolicies({})>)rM   r   r.   r'   r'   r(   ra   3  rb   zCertificatePolicies.__repr__rp   c                 C   rq   r!   )r"   r   rr   r   rs   r'   r'   r(   rt   6  ru   zCertificatePolicies.__eq__c                 C   r   r!   )rx   r   r   r.   r'   r'   r(   ry   <  r2   zCertificatePolicies.__hash__c                 C   r~   r!   r   r.   r'   r'   r(   r#   ?  rz   z CertificatePolicies.public_bytes)rE   rF   rG   r   ZCERTIFICATE_POLICIESr<   rN   rc   r?   r8   re   rf   rg   rH   ra   r   r   rt   r7   ry   rQ   r#   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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"   rH   r  r   r'   r'   r(   r   R  s    
z-PolicyInformation.__init__.<locals>.<genexpr>zMpolicy_qualifiers must be a list of strings and/or UserNotice objects or None)r"   r   r]   _policy_identifierrV   r   _policy_qualifiers)r/   r   r  r'   r'   r(   r?   D  s   

zPolicyInformation.__init__c                 C   r   )Nze<PolicyInformation(policy_identifier={0.policy_identifier}, policy_qualifiers={0.policy_qualifiers})>r   r.   r'   r'   r(   ra   \  r   zPolicyInformation.__repr__rp   c                 C   r   r!   )r"   r   rr   r   r  rs   r'   r'   r(   rt   b  r   zPolicyInformation.__eq__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   k  s
   
zPolicyInformation.__hash__c                 C   r{   r!   )r  r.   r'   r'   r(   r   u  r}   z#PolicyInformation.policy_identifierc                 C   r{   r!   )r  r.   r'   r'   r(   r  y  r   z#PolicyInformation.policy_qualifiers)rE   rF   rG   r   rN   r   rc   UnionrH   r?   ra   r   r   rt   r7   ry   r   r   r   r  r'   r'   r'   r(   r   C  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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  r]   _notice_reference_explicit_text)r/   r  r  r'   r'   r(   r?     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(   ra     r   zUserNotice.__repr__rp   c                 C   r   r!   )r"   r  rr   r  r  rs   r'   r'   r(   rt     r   zUserNotice.__eq__c                 C   r   r!   )rx   r  r  r.   r'   r'   r(   ry     r   zUserNotice.__hash__c                 C   r{   r!   )r	  r.   r'   r'   r(   r    r}   zUserNotice.notice_referencec                 C   r{   r!   )r
  r.   r'   r'   r(   r    r}   zUserNotice.explicit_text)rE   rF   rG   rN   r   rH   r?   ra   r   r   rt   r7   ry   r   r  r  r'   r'   r'   r(   r    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
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"   r7   r   r'   r'   r(   r     r   z+NoticeReference.__init__.<locals>.<genexpr>z)notice_numbers must be a list of integers)_organizationrV   r   r]   _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(   ra     r   zNoticeReference.__repr__rp   c                 C   r   r!   )r"   r  rr   r  r  rs   r'   r'   r(   rt     r   zNoticeReference.__eq__c                 C   s   t | jt| jfS r!   )rx   r  r   r  r.   r'   r'   r(   ry        zNoticeReference.__hash__c                 C   r{   r!   )r  r.   r'   r'   r(   r    r}   zNoticeReference.organizationc                 C   r{   r!   )r  r.   r'   r'   r(   r    r}   zNoticeReference.notice_numbers)rE   rF   rG   rN   r   rH   rc   r7   r?   ra   r   r   rt   ry   r   r  r   r  r'   r'   r'   r(   r    s    
	r  c                   @   st   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defd
dZ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)rV   r   r]   _usages)r/   r  r'   r'   r(   r?     s   
zExtendedKeyUsage.__init__r  c                 C   r`   )Nz<ExtendedKeyUsage({})>)rM   r  r.   r'   r'   r(   ra     rb   zExtendedKeyUsage.__repr__rp   c                 C   rq   r!   )r"   r  rr   r  rs   r'   r'   r(   rt     ru   zExtendedKeyUsage.__eq__c                 C   r   r!   )rx   r   r  r.   r'   r'   r(   ry     r2   zExtendedKeyUsage.__hash__c                 C   r~   r!   r   r.   r'   r'   r(   r#     rz   zExtendedKeyUsage.public_bytes)rE   rF   rG   r   ZEXTENDED_KEY_USAGEr<   rN   rc   r   r?   r8   re   rf   rg   rH   ra   r   r   rt   r7   ry   rQ   r#   r'   r'   r'   r(   r    s    	r  c                   @   N   e Zd ZejZdedefddZde	fddZ
defddZdefd	d
ZdS )OCSPNoCheckrp   r    c                 C      t |tstS dS NT)r"   r  rr   rs   r'   r'   r(   rt        
zOCSPNoCheck.__eq__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(   ra        zOCSPNoCheck.__repr__c                 C   r~   r!   r   r.   r'   r'   r(   r#      rz   zOCSPNoCheck.public_bytesN)rE   rF   rG   r   ZOCSP_NO_CHECKr<   r   r   rt   r7   ry   rH   ra   rQ   r#   r'   r'   r'   r(   r        r  c                   @   r  )PrecertPoisonrp   r    c                 C   r  r  )r"   r  rr   rs   r'   r'   r(   rt     r  zPrecertPoison.__eq__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(   ra     r  zPrecertPoison.__repr__c                 C   r~   r!   r   r.   r'   r'   r(   r#     rz   zPrecertPoison.public_bytesN)rE   rF   rG   r   ZPRECERT_POISONr<   r   r   rt   r7   ry   rH   ra   rQ   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)rV   r   r,   r]   	_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(   ra   )  rz   zTLSFeature.__repr__rp   c                 C   rq   r!   )r"   r  rr   r!  rs   r'   r'   r(   rt   ,  ru   zTLSFeature.__eq__c                 C   r   r!   )rx   r   r!  r.   r'   r'   r(   ry   2  r2   zTLSFeature.__hash__c                 C   r~   r!   r   r.   r'   r'   r(   r#   5  rz   zTLSFeature.public_bytes)rE   rF   rG   r   ZTLS_FEATUREr<   rN   rc   r?   r8   re   rf   rg   rH   ra   r   r   rt   r7   ry   rQ   r#   r'   r'   r'   r(   r    s    r  c                   @   s   e Zd ZdZdZdS )r   r      N)rE   rF   rG   Zstatus_requestZstatus_request_v2r'   r'   r'   r(   r   9  s    r   c                 C   s   i | ]}|j |qS r'   r^   r   r'   r'   r(   
<dictcomp>D      r$  c                   @   sr   e Zd ZejZdeddfddZdefddZ	de
defd	d
ZdefddZedefddZ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"   r7   r]   r   _skip_certs)r/   r'  r'   r'   r(   r?   J  s
   

zInhibitAnyPolicy.__init__c                 C   r   )Nz-<InhibitAnyPolicy(skip_certs={0.skip_certs})>r   r.   r'   r'   r(   ra   S  rz   zInhibitAnyPolicy.__repr__rp   c                 C   rq   r!   )r"   r&  rr   r'  rs   r'   r'   r(   rt   V  ru   zInhibitAnyPolicy.__eq__c                 C   rv   r!   )rx   r'  r.   r'   r'   r(   ry   \  rz   zInhibitAnyPolicy.__hash__c                 C   r{   r!   )r(  r.   r'   r'   r(   r'  _  r}   zInhibitAnyPolicy.skip_certsc                 C   r~   r!   r   r.   r'   r'   r(   r#   c  rz   zInhibitAnyPolicy.public_bytes)rE   rF   rG   r   ZINHIBIT_ANY_POLICYr<   r7   r?   rH   ra   r   r   rt   ry   r   r'  rQ   r#   r'   r'   r'   r(   r&  G  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d
efd#d$Z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/  r0  r1  r2  r'   r'   r(   r?   j  s   
zKeyUsage.__init__c                 C   r{   r!   )r3  r.   r'   r'   r(   r*    r}   zKeyUsage.digital_signaturec                 C   r{   r!   )r4  r.   r'   r'   r(   r+    r}   zKeyUsage.content_commitmentc                 C   r{   r!   )r5  r.   r'   r'   r(   r,    r}   zKeyUsage.key_enciphermentc                 C   r{   r!   )r6  r.   r'   r'   r(   r-    r}   zKeyUsage.data_enciphermentc                 C   r{   r!   )r7  r.   r'   r'   r(   r.    r}   zKeyUsage.key_agreementc                 C   r{   r!   )r8  r.   r'   r'   r(   r/    r}   zKeyUsage.key_cert_signc                 C   r{   r!   )r9  r.   r'   r'   r(   r0    r}   zKeyUsage.crl_signc                 C      | j std| jS )Nz7encipher_only is undefined unless key_agreement is true)r.  r   r:  r.   r'   r'   r(   r1    
   zKeyUsage.encipher_onlyc                 C   r<  )Nz7decipher_only is undefined unless key_agreement is true)r.  r   r;  r.   r'   r'   r(   r2    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})>)r1  r2  r   rM   )r/   r1  r2  r'   r'   r(   ra     s   

zKeyUsage.__repr__rp   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)  rr   r*  r+  r,  r-  r.  r/  r0  r:  r;  rs   r'   r'   r(   rt     s&   








zKeyUsage.__eq__c              
   C   s,   t | j| j| j| j| j| j| j| j| j	f	S r!   )
rx   r*  r+  r,  r-  r.  r/  r0  r:  r;  r.   r'   r'   r(   ry     s   zKeyUsage.__hash__c                 C   r~   r!   r   r.   r'   r'   r(   r#     rz   zKeyUsage.public_bytes)rE   rF   rG   r   Z	KEY_USAGEr<   r   r?   r   r*  r+  r,  r-  r.  r/  r0  r1  r2  rH   ra   r   rt   r7   ry   rQ   r#   r'   r'   r'   r(   r)  g  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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efddZdS )NameConstraintspermitted_subtreesexcluded_subtreesr    Nc                 C   s   |d ur t |}|stdtdd |D std| | |d ur@t |}|s.tdtdd |D s;td| | |d u rL|d u rLtd|| _|| _d S )	Nz3permitted_subtrees must be a non-empty list or Nonec                 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 Nonez2excluded_subtrees must be a non-empty list 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)rV   r   r   r]   _validate_ip_name_permitted_subtrees_excluded_subtrees)r/   r?  r@  r'   r'   r(   r?     s8   


zNameConstraints.__init__rp   c                 C   r   r!   )r"   r>  rr   r@  r?  rs   r'   r'   r(   rt     r   zNameConstraints.__eq__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^   	ipaddressZIPv4NetworkZ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/   rD  r'   r'   r(   rA  "  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(   ra   /  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/   psesr'   r'   r(   ry   5  s   

zNameConstraints.__hash__c                 C   r{   r!   )rB  r.   r'   r'   r(   r?  F  r   z"NameConstraints.permitted_subtreesc                 C   r{   r!   )rC  r.   r'   r'   r(   r@  L  r   z!NameConstraints.excluded_subtreesc                 C   r~   r!   r   r.   r'   r'   r(   r#   R  rz   zNameConstraints.public_bytes)rE   rF   rG   r   ZNAME_CONSTRAINTSr<   rN   r   rc   r   r?   r   r   rt   rA  rH   ra   r7   ry   r   r   r?  r@  rQ   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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   r]   r   _oid	_critical_value)r/   r<   rK  r^   r'   r'   r(   r?   W  s   


zExtension.__init__c                 C   r{   r!   rL  r.   r'   r'   r(   r<   f  r}   zExtension.oidc                 C   r{   r!   )rM  r.   r'   r'   r(   rK  j  r}   zExtension.criticalc                 C   r{   r!   rN  r.   r'   r'   r(   r^   n  r}   zExtension.valuec                 C   r   )Nz@<Extension(oid={0.oid}, critical={0.critical}, value={0.value})>r   r.   r'   r'   r(   ra   r  r   zExtension.__repr__rp   c                 C   r   r!   )r"   rJ  rr   r<   rK  r^   rs   r'   r'   r(   rt   x  s   


zExtension.__eq__c                 C   s   t | j| j| jfS r!   )rx   r<   rK  r^   r.   r'   r'   r(   ry     r  zExtension.__hash__)rE   rF   rG   r   r   r   r?   r   r<   rK  r^   rH   ra   r   rt   r7   ry   r'   r'   r'   r(   rJ  V  s&    

rJ  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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     r   z(GeneralNames.__init__.<locals>.<genexpr>z^Every item in the general_names list must be an object conforming to the GeneralName interface)rV   r   r]   _general_namesr/   rR  r'   r'   r(   r?     r   zGeneralNames.__init__rS  typec                 C      d S r!   r'   r/   rU  r'   r'   r(   get_values_for_type     	z GeneralNames.get_values_for_typec                 C   rV  r!   r'   rW  r'   r'   r(   rX       c                 C   rV  r!   r'   rW  r'   r'   r(   rX    rZ  c                 C   rV  r!   r'   rW  r'   r'   r(   rX       c                 C   rV  r!   r'   rW  r'   r'   r(   rX    r[  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rU  r'   r(   r     s    z3GeneralNames.get_values_for_type.<locals>.<genexpr>c                 S   s   g | ]}|j qS r'   r#  r\  r'   r'   r(   
<listcomp>  s    z4GeneralNames.get_values_for_type.<locals>.<listcomp>)r   rV   )r/   rU  Zobjsr'   r^  r(   rX    s   c                 C   r`   )Nz<GeneralNames({})>rM   rS  r.   r'   r'   r(   ra     rb   zGeneralNames.__repr__rp   c                 C   rq   r!   )r"   rQ  rr   rS  rs   r'   r'   r(   rt     ru   zGeneralNames.__eq__c                 C   r   r!   )rx   r   rS  r.   r'   r'   r(   ry     r2   zGeneralNames.__hash__)!rE   rF   rG   rN   rc   r   r?   r8   re   rf   rg   overloadr  rd   r   r   r   r   rH   rX  r   r   r   r   r   r   r   ra   r   r   rt   r7   ry   r'   r'   r'   r(   rQ    s|    


rQ  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de fddZ!de"fddZ#de$fddZ%dS )SubjectAlternativeNamerR  r    Nc                 C   rU   r!   rQ  rS  rT  r'   r'   r(   r?     r2   zSubjectAlternativeName.__init__rS  rU  c                 C   rV  r!   r'   rW  r'   r'   r(   rX    rY  z*SubjectAlternativeName.get_values_for_typec                 C   rV  r!   r'   rW  r'   r'   r(   rX    rZ  c                 C   rV  r!   r'   rW  r'   r'   r(   rX    rZ  c                 C   rV  r!   r'   rW  r'   r'   r(   rX     r[  c                 C   rV  r!   r'   rW  r'   r'   r(   rX    r[  c                 C      | j |S r!   rS  rX  rW  r'   r'   r(   rX       c                 C   r`   )Nz<SubjectAlternativeName({})>r`  r.   r'   r'   r(   ra      rb   zSubjectAlternativeName.__repr__rp   c                 C   rq   r!   )r"   rc  rr   rS  rs   r'   r'   r(   rt   #  ru   zSubjectAlternativeName.__eq__c                 C   rv   r!   rx   rS  r.   r'   r'   r(   ry   )  rz   zSubjectAlternativeName.__hash__c                 C   r~   r!   r   r.   r'   r'   r(   r#   ,  rz   z#SubjectAlternativeName.public_bytes)&rE   rF   rG   r   ZSUBJECT_ALTERNATIVE_NAMEr<   rN   rc   r   r?   r8   re   rf   rg   ra  r  rd   r   r   r   r   rH   rX  r   r   r   r   r   r   r   ra   r   r   rt   r7   ry   rQ   r#   r'   r'   r'   r(   rc        

rc  c                
   @   rb  )IssuerAlternativeNamerR  r    Nc                 C   rU   r!   rd  rT  r'   r'   r(   r?   3  r2   zIssuerAlternativeName.__init__rS  rU  c                 C   rV  r!   r'   rW  r'   r'   r(   rX  8  rY  z)IssuerAlternativeName.get_values_for_typec                 C   rV  r!   r'   rW  r'   r'   r(   rX  C  rZ  c                 C   rV  r!   r'   rW  r'   r'   r(   rX  J  rZ  c                 C   rV  r!   r'   rW  r'   r'   r(   rX  Q  r[  c                 C   rV  r!   r'   rW  r'   r'   r(   rX  W  r[  c                 C   re  r!   rf  rW  r'   r'   r(   rX  ]  rg  c                 C   r`   )Nz<IssuerAlternativeName({})>r`  r.   r'   r'   r(   ra   q  rb   zIssuerAlternativeName.__repr__rp   c                 C   rq   r!   )r"   rj  rr   rS  rs   r'   r'   r(   rt   t  ru   zIssuerAlternativeName.__eq__c                 C   rv   r!   rh  r.   r'   r'   r(   ry   z  rz   zIssuerAlternativeName.__hash__c                 C   r~   r!   r   r.   r'   r'   r(   r#   }  rz   z"IssuerAlternativeName.public_bytes)&rE   rF   rG   r   ZISSUER_ALTERNATIVE_NAMEr<   rN   rc   r   r?   r8   re   rf   rg   ra  r  rd   r   r   r   r   rH   rX  r   r   r   r   r   r   r   ra   r   r   rt   r7   ry   rQ   r#   r'   r'   r'   r(   rj  0  ri  rj  c                
   @   rb  )CertificateIssuerrR  r    Nc                 C   rU   r!   rd  rT  r'   r'   r(   r?     r2   zCertificateIssuer.__init__rS  rU  c                 C   rV  r!   r'   rW  r'   r'   r(   rX    rY  z%CertificateIssuer.get_values_for_typec                 C   rV  r!   r'   rW  r'   r'   r(   rX    rZ  c                 C   rV  r!   r'   rW  r'   r'   r(   rX    rZ  c                 C   rV  r!   r'   rW  r'   r'   r(   rX    r[  c                 C   rV  r!   r'   rW  r'   r'   r(   rX    r[  c                 C   re  r!   rf  rW  r'   r'   r(   rX    rg  c                 C   r`   )Nz<CertificateIssuer({})>r`  r.   r'   r'   r(   ra     rb   zCertificateIssuer.__repr__rp   c                 C   rq   r!   )r"   rk  rr   rS  rs   r'   r'   r(   rt     ru   zCertificateIssuer.__eq__c                 C   rv   r!   rh  r.   r'   r'   r(   ry     rz   zCertificateIssuer.__hash__c                 C   r~   r!   r   r.   r'   r'   r(   r#     rz   zCertificateIssuer.public_bytes)&rE   rF   rG   r   ZCERTIFICATE_ISSUERr<   rN   rc   r   r?   r8   re   rf   rg   ra  r  rd   r   r   r   r   rH   rX  r   r   r   r   r   r   r   ra   r   r   rt   r7   ry   rQ   r#   r'   r'   r'   r(   rk    ri  rk  c                   @   sr   e Zd ZejZdeddfddZdefddZ	de
defd	d
ZdefddZedefddZdefddZdS )	CRLReasonreasonr    Nc                 C   rj   )Nz*reason must be an element from ReasonFlags)r"   r   r]   _reason)r/   rm  r'   r'   r(   r?     ro   zCRLReason.__init__c                 C   r`   )Nz<CRLReason(reason={})>)rM   rn  r.   r'   r'   r(   ra     rb   zCRLReason.__repr__rp   c                 C   rq   r!   )r"   rl  rr   rm  rs   r'   r'   r(   rt     ru   zCRLReason.__eq__c                 C   rv   r!   )rx   rm  r.   r'   r'   r(   ry     rz   zCRLReason.__hash__c                 C   r{   r!   )rn  r.   r'   r'   r(   rm    r}   zCRLReason.reasonc                 C   r~   r!   r   r.   r'   r'   r(   r#     rz   zCRLReason.public_bytes)rE   rF   rG   r   Z
CRL_REASONr<   r   r?   rH   ra   r   r   rt   r7   ry   r   rm  rQ   r#   r'   r'   r'   r(   rl    s    rl  c                   @   sv   e Zd ZejZdejddfddZdefddZ	de
defd	d
ZdefddZedejfddZde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"   datetimer]   _invalidity_date)r/   rp  r'   r'   r(   r?     s   
zInvalidityDate.__init__c                 C   r`   )Nz$<InvalidityDate(invalidity_date={})>)rM   rr  r.   r'   r'   r(   ra     s   zInvalidityDate.__repr__rp   c                 C   rq   r!   )r"   ro  rr   rp  rs   r'   r'   r(   rt     ru   zInvalidityDate.__eq__c                 C   rv   r!   )rx   rp  r.   r'   r'   r(   ry     rz   zInvalidityDate.__hash__c                 C   r{   r!   )rr  r.   r'   r'   r(   rp    r}   zInvalidityDate.invalidity_datec                 C   r~   r!   r   r.   r'   r'   r(   r#   
  rz   zInvalidityDate.public_bytes)rE   rF   rG   r   ZINVALIDITY_DATEr<   rq  r?   rH   ra   r   r   rt   r7   ry   r   rp  rQ   r#   r'   r'   r'   r(   ro    s    ro  c                   @   t   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defddZ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rV   r   r]   _signed_certificate_timestampsr/   ru  r'   r'   r(   r?        
z2PrecertificateSignedCertificateTimestamps.__init__r{  c                 C      d t| S )Nz/<PrecertificateSignedCertificateTimestamps({})>rM   rV   r.   r'   r'   r(   ra   &  s   z2PrecertificateSignedCertificateTimestamps.__repr__c                 C   r   r!   rx   r   r{  r.   r'   r'   r(   ry   +  r2   z2PrecertificateSignedCertificateTimestamps.__hash__rp   c                 C   rq   r!   )r"   rt  rr   r{  rs   r'   r'   r(   rt   .     
z0PrecertificateSignedCertificateTimestamps.__eq__c                 C   r~   r!   r   r.   r'   r'   r(   r#   7  rz   z6PrecertificateSignedCertificateTimestamps.public_bytes)rE   rF   rG   r   Z%PRECERT_SIGNED_CERTIFICATE_TIMESTAMPSr<   rN   rc   r   r?   r8   re   rf   rg   rH   ra   r7   ry   r   r   rt   rQ   r#   r'   r'   r'   r(   rt    s     

	rt  c                   @   rs  )SignedCertificateTimestampsru  r    Nc                 C   r   )Nc                 s   r   r!   rv  rw  r'   r'   r(   r   E  rx  z7SignedCertificateTimestamps.__init__.<locals>.<genexpr>ry  rz  r|  r'   r'   r(   r?   >  r}  z$SignedCertificateTimestamps.__init__r{  c                 C   r~  )Nz!<SignedCertificateTimestamps({})>r  r.   r'   r'   r(   ra   S  r2   z$SignedCertificateTimestamps.__repr__c                 C   r   r!   r  r.   r'   r'   r(   ry   V  r2   z$SignedCertificateTimestamps.__hash__rp   c                 C   rq   r!   )r"   r  rr   r{  rs   r'   r'   r(   rt   Y  r  z"SignedCertificateTimestamps.__eq__c                 C   r~   r!   r   r.   r'   r'   r(   r#   b  rz   z(SignedCertificateTimestamps.public_bytes)rE   rF   rG   r   ZSIGNED_CERTIFICATE_TIMESTAMPSr<   rN   rc   r   r?   r8   re   rf   rg   rH   ra   r7   ry   r   r   rt   rQ   r#   r'   r'   r'   r(   r  ;  s     

	r  c                   @   sr   e Zd ZejZdeddfddZde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efddZdS )	OCSPNoncenoncer    Nc                 C   rj   )Nznonce must be bytes)r"   rQ   r]   _nonce)r/   r  r'   r'   r(   r?   i  ro   zOCSPNonce.__init__rp   c                 C   rq   r!   )r"   r  rr   r  rs   r'   r'   r(   rt   o  ru   zOCSPNonce.__eq__c                 C   rv   r!   )rx   r  r.   r'   r'   r(   ry   u  rz   zOCSPNonce.__hash__c                 C   r   )Nz<OCSPNonce(nonce={0.nonce!r})>r   r.   r'   r'   r(   ra   x  rz   zOCSPNonce.__repr__c                 C   r{   r!   )r  r.   r'   r'   r(   r  {  r}   zOCSPNonce.noncec                 C   r~   r!   r   r.   r'   r'   r(   r#     rz   zOCSPNonce.public_bytes)rE   rF   rG   r   ZNONCEr<   rQ   r?   r   r   rt   r7   ry   rH   ra   r   r  r#   r'   r'   r'   r(   r  f  r   r  c                   @   s2  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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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.)rV   r"   r   r   r]   r   r   r   r   r   r,   rG  _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?     sp   



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(   ra     s   z!IssuingDistributionPoint.__repr__rp   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  rr   r   r   r  r  r  r  r  rs   r'   r'   r(   rt     s"   





zIssuingDistributionPoint.__eq__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   r{   r!   r   r.   r'   r'   r(   r     r}   z"IssuingDistributionPoint.full_namec                 C   r{   r!   r   r.   r'   r'   r(   r     r}   z&IssuingDistributionPoint.relative_namec                 C   r{   r!   )r  r.   r'   r'   r(   r  	  r}   z1IssuingDistributionPoint.only_contains_user_certsc                 C   r{   r!   )r  r.   r'   r'   r(   r    r}   z/IssuingDistributionPoint.only_contains_ca_certsc                 C   r{   r!   )r  r.   r'   r'   r(   r    r   z*IssuingDistributionPoint.only_some_reasonsc                 C   r{   r!   )r  r.   r'   r'   r(   r    r}   z%IssuingDistributionPoint.indirect_crlc                 C   r{   r!   )r  r.   r'   r'   r(   r    r}   z6IssuingDistributionPoint.only_contains_attribute_certsc                 C   r~   r!   r   r.   r'   r'   r(   r#     rz   z%IssuingDistributionPoint.public_bytes) rE   rF   rG   r   ZISSUING_DISTRIBUTION_POINTr<   rN   r   rc   r   r   r   r   r   r?   rH   ra   r   rt   r7   ry   r   r   r   r   r  r  r  r  r  rQ   r#   r'   r'   r'   r(   r    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defddZdefddZdefddZdS )r\   r<   r^   r    Nc                 C   s"   t |ts	td|| _|| _d S )Nzoid must be an ObjectIdentifier)r"   r   r]   rL  rN  )r/   r<   r^   r'   r'   r(   r?   $  s   

zUnrecognizedExtension.__init__c                 C   r{   r!   rO  r.   r'   r'   r(   r<   *  r}   zUnrecognizedExtension.oidc                 C   r{   r!   rP  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(   ra   2  r   zUnrecognizedExtension.__repr__rp   c                 C   r   r!   )r"   r\   rr   r<   r^   rs   r'   r'   r(   rt   8  r   zUnrecognizedExtension.__eq__c                 C   r   r!   )rx   r<   r^   r.   r'   r'   r(   ry   >  r   zUnrecognizedExtension.__hash__c                 C   r{   r!   r#  r.   r'   r'   r(   r#   A  s   z"UnrecognizedExtension.public_bytes)rE   rF   rG   r   rQ   r?   r   r<   r^   rH   ra   r   r   rt   r7   ry   r#   r'   r'   r'   r(   r\   #  s    r\   )gabcrq  r$   rE  rN   cryptographyr   Z"cryptography.hazmat.bindings._rustr   r   r   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   rQ   r)   rH   r8   	Exceptionr:   rK   ABCMetar   rS   rh   r   r   r   r   r   r   r   r   r   r   Enumr   r   r   r   r   r   r   r   r   Z_REASON_BIT_MAPPINGZ_CRLREASONFLAGSr   r   r   r  r  r  r  r  r  r   Z_TLS_FEATURE_TYPE_TO_ENUMr&  r)  r>  GenericrJ  rQ  rc  rj  rk  rl  ro  rt  r  r  r  r\   r'   r'   r'   r(   <module>   s   ,
'l$!!(.%%pA=+("  j0YQQQ-+ !