o
    e                    @  s0  d dl mZ d dlZd dlZd dlZd dlZd dlZd dlmZ d dl	m
Z
 d dl	mZ d dlmZmZ d dlmZ d dlmZ d d	lmZmZ d d
lmZ d dlmZmZmZmZmZmZm Z m!Z!m"Z" d dl#m$Z$m%Z% d dl&m'Z'm(Z(m)Z)m*Z* ej+ddddZ,d}ddZ-d~ddZ.G dd de/Z0G dd de/Z1G d d dej2d!Z3G d"d# d#Z4G d$d% d%e3Z5G d&d' d'e3Z6G d(d) d)e3Z7G d*d+ d+e3Z8G d,d- d-e3Z9G d.d/ d/Z:G d0d1 d1e3Z;G d2d3 d3e3Z<G d4d5 d5e3Z=G d6d7 d7e3Z>G d8d9 d9Z?G d:d; d;ej@ZAeAjBeAjCeAjDeAjEeAjFeAjGeAjHeAjId<ZJeAjBd=eAjCd>eAjDd?eAjEd@eAjFdAeAjGdBeAjHdCeAjIdDiZKG dEdF dFe3ZLG dGdH dHe3ZMG dIdJ dJZNG dKdL dLZOG dMdN dNZPG dOdP dPe3ZQG dQdR dRe3ZRG dSdT dTe3ZSG dUdV dVe3ZTG dWdX dXej@ZUdYdZ eUD ZVG d[d\ d\e3ZWG d]d^ d^e3ZXG d_d` d`e3ZYG dadb dbejZe, Z[G dcdd ddZ\G dedf dfe3Z]G dgdh dhe3Z^G didj dje3Z_G dkdl dle3Z`G dmdn dne3ZaG dodp dpe3ZbG dqdr dre3ZcG dsdt dte3ZdG dudv dve3ZeG dwdx dxe3ZfG dydz dze3ZgG d{d| d|e3ZhdS )    )annotationsN)utils)asn1)x509)constant_timeserialization)EllipticCurvePublicKey)RSAPublicKey)CertificateIssuerPublicKeyTypesCertificatePublicKeyTypes)SignedCertificateTimestamp)	DirectoryNameDNSNameGeneralName	IPAddress	OtherNameRegisteredID
RFC822NameUniformResourceIdentifier_IPAddressTypes)NameRelativeDistinguishedName)CRLEntryExtensionOIDExtensionOIDObjectIdentifierOCSPExtensionOIDExtensionTypeVarExtensionTypeT)bound	covariant
public_keyr   returnbytesc                 C  sl   t | tr| tjjtjj}nt | tr | tjj	tjj
}n| tjjtjj}t|}t| S N)
isinstancer	   public_bytesr   ZEncodingZDERZPublicFormatZPKCS1r   ZX962ZUncompressedPointZSubjectPublicKeyInfor   Zparse_spki_for_datahashlibsha1digest)r    dataZ
serialized r*   LD:\Projects\ConvertPro\env\Lib\site-packages\cryptography/x509/extensions.py_key_identifier_from_public_key2   s    


r,   
field_namestrc                   s0   d	 fdd} fdd} fdd}|||fS )
Nr!   intc                      t t|  S r#   )lengetattrselfr-   r*   r+   
len_methodK      z*_make_sequence_methods.<locals>.len_methodc                   r0   r#   )iterr2   r3   r5   r*   r+   iter_methodN   r7   z+_make_sequence_methods.<locals>.iter_methodc                   s   t |  | S r#   )r2   )r4   idxr5   r*   r+   getitem_methodQ   r7   z._make_sequence_methods.<locals>.getitem_methodr!   r/   r*   )r-   r6   r9   r;   r*   r5   r+   _make_sequence_methodsJ   s   
r=   c                         e Zd Zd	 fddZ  ZS )
DuplicateExtensionmsgr.   oidr   r!   Nonec                      t  | || _d S r#   super__init__rA   r4   r@   rA   	__class__r*   r+   rF   X      
zDuplicateExtension.__init__r@   r.   rA   r   r!   rB   __name__
__module____qualname__rF   __classcell__r*   r*   rH   r+   r?   W       r?   c                      r>   )
ExtensionNotFoundr@   r.   rA   r   r!   rB   c                   rC   r#   rD   rG   rH   r*   r+   rF   ^   rJ   zExtensionNotFound.__init__rK   rL   r*   r*   rH   r+   rR   ]   rQ   rR   c                   @  s    e Zd ZU ded< dddZdS )	r   z!typing.ClassVar[ObjectIdentifier]rA   r!   r"   c                 C  s   t d| )z7
        Serializes the extension type to DER.
        z7public_bytes is not implemented for extension type {!r})NotImplementedErrorformatr3   r*   r*   r+   r%   f   s
   zExtensionType.public_bytesNr!   r"   )rM   rN   rO   __annotations__r%   r*   r*   r*   r+   r   c   s   
 )	metaclassc                   @  sB   e Zd ZdddZdd
dZdddZed\ZZZ	dddZ
dS )
Extensions
extensions)typing.Iterable[Extension[ExtensionType]]r!   rB   c                 C     t || _d S r#   )list_extensions)r4   rY   r*   r*   r+   rF   r   s   zExtensions.__init__rA   r   Extension[ExtensionType]c                 C  s.   | D ]}|j |kr|  S qtd| d|)NNo  extension was found)rA   rR   )r4   rA   extr*   r*   r+   get_extension_for_oidw   s
   
z Extensions.get_extension_for_oidextclasstyping.Type[ExtensionTypeVar]Extension[ExtensionTypeVar]c                 C  sB   |t u rtd| D ]}t|j|r|  S q
td| d|j)Nz|UnrecognizedExtension can't be used with get_extension_for_class because more than one instance of the class may be present.r_   r`   )UnrecognizedExtension	TypeErrorr$   valuerR   rA   )r4   rc   ra   r*   r*   r+   get_extension_for_class   s   z"Extensions.get_extension_for_classr]   r.   c                 C     d| j  dS )Nz<Extensions()>)r]   r3   r*   r*   r+   __repr__   r7   zExtensions.__repr__N)rY   rZ   r!   rB   )rA   r   r!   r^   )rc   rd   r!   re   r!   r.   )rM   rN   rO   rF   rb   ri   r=   __len____iter____getitem__rl   r*   r*   r*   r+   rX   q   s    


	rX   c                   @  sR   e Zd ZejZdddZdd
dZdddZdddZ	e
dddZdddZdS )	CRLNumber
crl_numberr/   r!   rB   c                 C     t |ts	td|| _d S Nzcrl_number must be an integerr$   r/   rg   _crl_numberr4   rr   r*   r*   r+   rF         

zCRLNumber.__init__otherobjectboolc                 C     t |tstS | j|jkS r#   )r$   rq   NotImplementedrr   r4   ry   r*   r*   r+   __eq__      
zCRLNumber.__eq__c                 C  
   t | jS r#   hashrr   r3   r*   r*   r+   __hash__      
zCRLNumber.__hash__r.   c                 C  rj   )Nz<CRLNumber(rk   rr   r3   r*   r*   r+   rl      r7   zCRLNumber.__repr__c                 C     | j S r#   rv   r3   r*   r*   r+   rr         zCRLNumber.crl_numberr"   c                 C  
   t | S r#   	rust_x509Zencode_extension_valuer3   r*   r*   r+   r%      r   zCRLNumber.public_bytesNrr   r/   r!   rB   ry   rz   r!   r{   r<   rm   rU   )rM   rN   rO   r   Z
CRL_NUMBERrA   rF   r   r   rl   propertyrr   r%   r*   r*   r*   r+   rq          



rq   c                   @  s   e Zd ZejZd)d	d
Zed*ddZed+ddZ	d,ddZ
d-ddZd.ddZed/ddZed0d!d"Zed1d#d$Zd2d&d'Zd(S )3AuthorityKeyIdentifierkey_identifiertyping.Optional[bytes]authority_cert_issuer-typing.Optional[typing.Iterable[GeneralName]]authority_cert_serial_numbertyping.Optional[int]r!   rB   c                 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)	
ValueErrorr\   allrg   r$   r/   _key_identifier_authority_cert_issuer_authority_cert_serial_number)r4   r   r   r   r*   r*   r+   rF      s*   

zAuthorityKeyIdentifier.__init__r    r
   c                 C  s   t |}| |d d dS N)r   r   r   r,   )clsr    r(   r*   r*   r+   from_issuer_public_key   s   z-AuthorityKeyIdentifier.from_issuer_public_key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_identifierr.   c                 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})>rT   r3   r*   r*   r+   rl      s   zAuthorityKeyIdentifier.__repr__ry   rz   r{   c                 C  2   t |tstS | j|jko| j|jko| j|jkS r#   )r$   r   r}   r   r   r   r~   r*   r*   r+   r      s   

zAuthorityKeyIdentifier.__eq__r/   c                 C  s,   | j d u rd }nt| j }t| j|| jfS r#   )r   tupler   r   r   )r4   Zacir*   r*   r+   r     s   

zAuthorityKeyIdentifier.__hash__c                 C  r   r#   )r   r3   r*   r*   r+   r     r   z%AuthorityKeyIdentifier.key_identifier)typing.Optional[typing.List[GeneralName]]c                 C  r   r#   )r   r3   r*   r*   r+   r        z,AuthorityKeyIdentifier.authority_cert_issuerc                 C  r   r#   )r   r3   r*   r*   r+   r     r   z3AuthorityKeyIdentifier.authority_cert_serial_numberr"   c                 C  r   r#   r   r3   r*   r*   r+   r%     r   z#AuthorityKeyIdentifier.public_bytesN)r   r   r   r   r   r   r!   rB   )r    r
   r!   r   )r   r   r!   r   rm   r   r<   )r!   r   r!   r   r!   r   rU   )rM   rN   rO   r   ZAUTHORITY_KEY_IDENTIFIERrA   rF   classmethodr   r   rl   r   r   r   r   r   r   r%   r*   r*   r*   r+   r      s"    
&

	

	r   c                   @  sn   e Zd ZejZdddZedd	d
Ze	dddZ
e	dddZd ddZd!ddZd"ddZdddZdS )#r   r(   r"   r!   rB   c                 C  s
   || _ d S r#   Z_digest)r4   r(   r*   r*   r+   rF   $  r   zSubjectKeyIdentifier.__init__r    r   c                 C  s   | t |S r#   r   )r   r    r*   r*   r+   from_public_key'  s   z$SubjectKeyIdentifier.from_public_keyc                 C  r   r#   r   r3   r*   r*   r+   r(   -  r   zSubjectKeyIdentifier.digestc                 C  r   r#   r   r3   r*   r*   r+   r   1  r   z#SubjectKeyIdentifier.key_identifierr.   c                 C     d| j dS )Nz<SubjectKeyIdentifier(digest=rk   r   r3   r*   r*   r+   rl   5  r7   zSubjectKeyIdentifier.__repr__ry   rz   r{   c                 C  s   t |tstS t| j|jS r#   )r$   r   r}   r   Zbytes_eqr(   r~   r*   r*   r+   r   8  s   
zSubjectKeyIdentifier.__eq__r/   c                 C  r   r#   )r   r(   r3   r*   r*   r+   r   >  r   zSubjectKeyIdentifier.__hash__c                 C  r   r#   r   r3   r*   r*   r+   r%   A  r   z!SubjectKeyIdentifier.public_bytesN)r(   r"   r!   rB   )r    r   r!   r   rU   rm   r   r<   )rM   rN   rO   r   ZSUBJECT_KEY_IDENTIFIERrA   rF   r   r   r   r(   r   rl   r   r   r%   r*   r*   r*   r+   r   !  s    



r   c                   @  R   e Zd ZejZdddZed\ZZ	Z
dd	d
ZdddZdddZdddZdS )AuthorityInformationAccessdescriptions"typing.Iterable[AccessDescription]r!   rB   c                 C  ,   t |}tdd |D std|| _d S )Nc                 s  r   r#   r$   AccessDescriptionr   r*   r*   r+   r   L      z6AuthorityInformationAccess.__init__.<locals>.<genexpr>@Every item in the descriptions list must be an AccessDescriptionr\   r   rg   _descriptionsr4   r   r*   r*   r+   rF   H     
z#AuthorityInformationAccess.__init__r   r.   c                 C  rj   )Nz<AuthorityInformationAccess(rk   r   r3   r*   r*   r+   rl   V  r7   z#AuthorityInformationAccess.__repr__ry   rz   r{   c                 C  r|   r#   )r$   r   r}   r   r~   r*   r*   r+   r   Y  r   z!AuthorityInformationAccess.__eq__r/   c                 C     t t| jS r#   r   r   r   r3   r*   r*   r+   r   _  r7   z#AuthorityInformationAccess.__hash__r"   c                 C  r   r#   r   r3   r*   r*   r+   r%   b  r   z'AuthorityInformationAccess.public_bytesNr   r   r!   rB   rm   r   r<   rU   )rM   rN   rO   r   ZAUTHORITY_INFORMATION_ACCESSrA   rF   r=   rn   ro   rp   rl   r   r   r%   r*   r*   r*   r+   r   E      



r   c                   @  r   )SubjectInformationAccessr   r   r!   rB   c                 C  r   )Nc                 s  r   r#   r   r   r*   r*   r+   r   m  r   z4SubjectInformationAccess.__init__.<locals>.<genexpr>r   r   r   r*   r*   r+   rF   i  r   z!SubjectInformationAccess.__init__r   r.   c                 C  rj   )Nz<SubjectInformationAccess(rk   r   r3   r*   r*   r+   rl   w  r7   z!SubjectInformationAccess.__repr__ry   rz   r{   c                 C  r|   r#   )r$   r   r}   r   r~   r*   r*   r+   r   z  r   zSubjectInformationAccess.__eq__r/   c                 C  r   r#   r   r3   r*   r*   r+   r     r7   z!SubjectInformationAccess.__hash__r"   c                 C  r   r#   r   r3   r*   r*   r+   r%     r   z%SubjectInformationAccess.public_bytesNr   rm   r   r<   rU   )rM   rN   rO   r   ZSUBJECT_INFORMATION_ACCESSrA   rF   r=   rn   ro   rp   rl   r   r   r%   r*   r*   r*   r+   r   f  r   r   c                   @  P   e Zd ZdddZdd
dZdddZdddZedddZedddZ	dS )r   access_methodr   access_locationr   r!   rB   c                 C  s4   t |ts	tdt |tstd|| _|| _d S )Nz)access_method must be an ObjectIdentifierz%access_location must be a GeneralName)r$   r   rg   r   _access_method_access_location)r4   r   r   r*   r*   r+   rF     s   


zAccessDescription.__init__r.   c                 C  r   )NzY<AccessDescription(access_method={0.access_method}, access_location={0.access_location})>r   r3   r*   r*   r+   rl        zAccessDescription.__repr__ry   rz   r{   c                 C  &   t |tstS | j|jko| j|jkS r#   )r$   r   r}   r   r   r~   r*   r*   r+   r     
   

zAccessDescription.__eq__r/   c                 C     t | j| jfS r#   )r   r   r   r3   r*   r*   r+   r        zAccessDescription.__hash__c                 C  r   r#   )r   r3   r*   r*   r+   r     r   zAccessDescription.access_methodc                 C  r   r#   )r   r3   r*   r*   r+   r     r   z!AccessDescription.access_locationN)r   r   r   r   r!   rB   rm   r   r<   r!   r   )r!   r   )
rM   rN   rO   rF   rl   r   r   r   r   r   r*   r*   r*   r+   r         



	r   c                   @  s`   e Zd ZejZdddZedd	d
ZedddZ	dddZ
dddZd ddZd!ddZdS )"BasicConstraintscar{   path_lengthr   r!   rB   c                 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{   rg   r   r/   _ca_path_length)r4   r   r   r*   r*   r+   rF     s   

zBasicConstraints.__init__c                 C  r   r#   )r   r3   r*   r*   r+   r     r   zBasicConstraints.cac                 C  r   r#   )r   r3   r*   r*   r+   r     r   zBasicConstraints.path_lengthr.   c                 C  r   )Nz:<BasicConstraints(ca={0.ca}, path_length={0.path_length})>r   r3   r*   r*   r+   rl     r   zBasicConstraints.__repr__ry   rz   c                 C  r   r#   )r$   r   r}   r   r   r~   r*   r*   r+   r        
zBasicConstraints.__eq__r/   c                 C  r   r#   )r   r   r   r3   r*   r*   r+   r     r   zBasicConstraints.__hash__r"   c                 C  r   r#   r   r3   r*   r*   r+   r%     r   zBasicConstraints.public_bytesN)r   r{   r   r   r!   rB   r!   r{   r   rm   r   r<   rU   )rM   rN   rO   r   ZBASIC_CONSTRAINTSrA   rF   r   r   r   rl   r   r   r%   r*   r*   r*   r+   r     s    



r   c                   @  sR   e Zd ZejZdddZedddZdddZ	dddZ
dddZdddZdS )DeltaCRLIndicatorrr   r/   r!   rB   c                 C  rs   rt   ru   rw   r*   r*   r+   rF     rx   zDeltaCRLIndicator.__init__c                 C  r   r#   r   r3   r*   r*   r+   rr     r   zDeltaCRLIndicator.crl_numberry   rz   r{   c                 C  r|   r#   )r$   r   r}   rr   r~   r*   r*   r+   r     r   zDeltaCRLIndicator.__eq__c                 C  r   r#   r   r3   r*   r*   r+   r     r   zDeltaCRLIndicator.__hash__r.   c                 C  rj   )Nz<DeltaCRLIndicator(crl_number=rk   r   r3   r*   r*   r+   rl     r7   zDeltaCRLIndicator.__repr__r"   c                 C  r   r#   r   r3   r*   r*   r+   r%     r   zDeltaCRLIndicator.public_bytesNr   r<   r   rm   rU   )rM   rN   rO   r   ZDELTA_CRL_INDICATORrA   rF   r   rr   r   r   rl   r%   r*   r*   r*   r+   r     s    



r   c                   @  r   )CRLDistributionPointsdistribution_points"typing.Iterable[DistributionPoint]r!   rB   c                 C  r   )Nc                 s  r   r#   r$   DistributionPointr   r*   r*   r+   r     r   z1CRLDistributionPoints.__init__.<locals>.<genexpr>?distribution_points must be a list of DistributionPoint objectsr\   r   rg   _distribution_pointsr4   r   r*   r*   r+   rF        
zCRLDistributionPoints.__init__r   r.   c                 C  rj   )Nz<CRLDistributionPoints(rk   r   r3   r*   r*   r+   rl     r7   zCRLDistributionPoints.__repr__ry   rz   r{   c                 C  r|   r#   )r$   r   r}   r   r~   r*   r*   r+   r     r   zCRLDistributionPoints.__eq__r/   c                 C  r   r#   r   r   r   r3   r*   r*   r+   r     r7   zCRLDistributionPoints.__hash__r"   c                 C  r   r#   r   r3   r*   r*   r+   r%     r   z"CRLDistributionPoints.public_bytesNr   r   r!   rB   rm   r   r<   rU   )rM   rN   rO   r   ZCRL_DISTRIBUTION_POINTSrA   rF   r=   rn   ro   rp   rl   r   r   r%   r*   r*   r*   r+   r         




r   c                   @  r   )FreshestCRLr   r   r!   rB   c                 C  r   )Nc                 s  r   r#   r   r   r*   r*   r+   r   &  r   z'FreshestCRL.__init__.<locals>.<genexpr>r   r   r   r*   r*   r+   rF   "  r   zFreshestCRL.__init__r   r.   c                 C  rj   )Nz<FreshestCRL(rk   r   r3   r*   r*   r+   rl   4  r7   zFreshestCRL.__repr__ry   rz   r{   c                 C  r|   r#   )r$   r   r}   r   r~   r*   r*   r+   r   7  r   zFreshestCRL.__eq__r/   c                 C  r   r#   r   r3   r*   r*   r+   r   =  r7   zFreshestCRL.__hash__r"   c                 C  r   r#   r   r3   r*   r*   r+   r%   @  r   zFreshestCRL.public_bytesNr   rm   r   r<   rU   )rM   rN   rO   r   ZFRESHEST_CRLrA   rF   r=   rn   ro   rp   rl   r   r   r%   r*   r*   r*   r+   r     r   r   c                   @  sl   e Zd Zd!d
dZd"ddZd#ddZd$ddZed%ddZed&ddZ	ed'ddZ
ed%ddZd S )(r   	full_namer   relative_name*typing.Optional[RelativeDistinguishedName]reasons.typing.Optional[typing.FrozenSet[ReasonFlags]]
crl_issuerr!   rB   c                 C  s   |r|rt d|s|s|st d|d ur't|}tdd |D s'td|r2t|ts2td|d urGt|}tdd |D sGtd|r[t|trWtd	d |D s[td
|rktj|v sgtj	|v rkt d|| _
|| _|| _|| _d S )NzOYou cannot provide both full_name and relative_name, at least one must be None.z?Either full_name, relative_name or crl_issuer must be provided.c                 s  r   r#   r   r   r*   r*   r+   r   Y  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   f  r   z2crl_issuer must be None or a list of general namesc                 s  r   r#   r$   ReasonFlagsr   r*   r*   r+   r   m  r   z0reasons must be None or frozenset of ReasonFlagszLunspecified and remove_from_crl are not valid reasons in a DistributionPoint)r   r\   r   rg   r$   r   	frozensetr   unspecifiedremove_from_crl
_full_name_relative_name_reasons_crl_issuer)r4   r   r   r   r   r*   r*   r+   rF   E  sR   



zDistributionPoint.__init__r.   c                 C  r   )Nz}<DistributionPoint(full_name={0.full_name}, relative_name={0.relative_name}, reasons={0.reasons}, crl_issuer={0.crl_issuer})>r   r3   r*   r*   r+   rl        zDistributionPoint.__repr__ry   rz   r{   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   r}   r   r   r   r   r~   r*   r*   r+   r     s   



zDistributionPoint.__eq__r/   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   r   r   r   )r4   fnr   r*   r*   r+   r     s   

zDistributionPoint.__hash__r   c                 C  r   r#   r   r3   r*   r*   r+   r     r   zDistributionPoint.full_namec                 C  r   r#   r   r3   r*   r*   r+   r     r   zDistributionPoint.relative_namec                 C  r   r#   )r   r3   r*   r*   r+   r     r   zDistributionPoint.reasonsc                 C  r   r#   )r   r3   r*   r*   r+   r     r   zDistributionPoint.crl_issuerN)
r   r   r   r   r   r   r   r   r!   rB   rm   r   r<   r   r!   r   r!   r   )rM   rN   rO   rF   rl   r   r   r   r   r   r   r   r*   r*   r*   r+   r   D  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)rM   rN   rO   r   key_compromiseca_compromiseaffiliation_changedr  cessation_of_operationcertificate_holdprivilege_withdrawnaa_compromiser   r*   r*   r*   r+   r     s    r   )                        r  r  r  r  r  r  r  r  c                   @  s`   e Zd ZejZdddZdd	d
ZdddZdddZ	e
dddZe
dddZd ddZdS )!PolicyConstraintsrequire_explicit_policyr   inhibit_policy_mappingr!   rB   c                 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$   r/   rg   r   _require_explicit_policy_inhibit_policy_mapping)r4   r  r  r*   r*   r+   rF     s$   


zPolicyConstraints.__init__r.   c                 C  r   )Nz{<PolicyConstraints(require_explicit_policy={0.require_explicit_policy}, inhibit_policy_mapping={0.inhibit_policy_mapping})>r   r3   r*   r*   r+   rl     r   zPolicyConstraints.__repr__ry   rz   r{   c                 C  r   r#   )r$   r  r}   r  r  r~   r*   r*   r+   r   
  r   zPolicyConstraints.__eq__r/   c                 C  r   r#   )r   r  r  r3   r*   r*   r+   r     s   
zPolicyConstraints.__hash__c                 C  r   r#   )r  r3   r*   r*   r+   r    r   z)PolicyConstraints.require_explicit_policyc                 C  r   r#   )r  r3   r*   r*   r+   r    r   z(PolicyConstraints.inhibit_policy_mappingr"   c                 C  r   r#   r   r3   r*   r*   r+   r%      r   zPolicyConstraints.public_bytesN)r  r   r  r   r!   rB   rm   r   r<   r   rU   )rM   rN   rO   r   ZPOLICY_CONSTRAINTSrA   rF   rl   r   r   r   r  r  r%   r*   r*   r*   r+   r    s    



	r  c                   @  r   )CertificatePoliciespolicies"typing.Iterable[PolicyInformation]r!   rB   c                 C  r   )Nc                 s  r   r#   )r$   PolicyInformationr   r*   r*   r+   r   )  r   z/CertificatePolicies.__init__.<locals>.<genexpr>z;Every item in the policies list must be a PolicyInformation)r\   r   rg   	_policies)r4   r  r*   r*   r+   rF   '     
zCertificatePolicies.__init__r  r.   c                 C  rj   )Nz<CertificatePolicies(rk   )r  r3   r*   r*   r+   rl   3  r7   zCertificatePolicies.__repr__ry   rz   r{   c                 C  r|   r#   )r$   r  r}   r  r~   r*   r*   r+   r   6  r   zCertificatePolicies.__eq__r/   c                 C  r   r#   )r   r   r  r3   r*   r*   r+   r   <  r7   zCertificatePolicies.__hash__r"   c                 C  r   r#   r   r3   r*   r*   r+   r%   ?  r   z CertificatePolicies.public_bytesN)r  r  r!   rB   rm   r   r<   rU   )rM   rN   rO   r   ZCERTIFICATE_POLICIESrA   rF   r=   rn   ro   rp   rl   r   r   r%   r*   r*   r*   r+   r  $  s    




r  c                   @  P   e Zd ZdddZdd
dZdddZdddZedddZedddZ	dS ) r  policy_identifierr   policy_qualifiers?typing.Optional[typing.Iterable[typing.Union[str, UserNotice]]]r!   rB   c                 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$   r.   
UserNoticer   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   rg   _policy_identifierr\   r   _policy_qualifiers)r4   r  r   r*   r*   r+   rF   D  s   

zPolicyInformation.__init__r.   c                 C  r   )Nze<PolicyInformation(policy_identifier={0.policy_identifier}, policy_qualifiers={0.policy_qualifiers})>r   r3   r*   r*   r+   rl   \  r   zPolicyInformation.__repr__ry   rz   r{   c                 C  r   r#   )r$   r  r}   r  r   r~   r*   r*   r+   r   b  r   zPolicyInformation.__eq__r/   c                 C  s(   | j d urt| j }nd }t| j|fS r#   )r   r   r   r  )r4   Zpqr*   r*   r+   r   k  s
   
zPolicyInformation.__hash__c                 C  r   r#   )r#  r3   r*   r*   r+   r  u  r   z#PolicyInformation.policy_identifier;typing.Optional[typing.List[typing.Union[str, UserNotice]]]c                 C  r   r#   )r$  r3   r*   r*   r+   r   y  r   z#PolicyInformation.policy_qualifiersN)r  r   r   r!  r!   rB   rm   r   r<   r   )r!   r%  )
rM   rN   rO   rF   rl   r   r   r   r  r   r*   r*   r*   r+   r  C  s    



	
r  c                   @  r   )r"  notice_reference typing.Optional[NoticeReference]explicit_texttyping.Optional[str]r!   rB   c                 C  s&   |rt |tstd|| _|| _d S )Nz2notice_reference must be None or a NoticeReference)r$   NoticeReferencerg   _notice_reference_explicit_text)r4   r&  r(  r*   r*   r+   rF     s   
zUserNotice.__init__r.   c                 C  r   )NzV<UserNotice(notice_reference={0.notice_reference}, explicit_text={0.explicit_text!r})>r   r3   r*   r*   r+   rl     r   zUserNotice.__repr__ry   rz   r{   c                 C  r   r#   )r$   r"  r}   r&  r(  r~   r*   r*   r+   r     r   zUserNotice.__eq__r/   c                 C  r   r#   )r   r&  r(  r3   r*   r*   r+   r     r   zUserNotice.__hash__c                 C  r   r#   )r+  r3   r*   r*   r+   r&    r   zUserNotice.notice_referencec                 C  r   r#   )r,  r3   r*   r*   r+   r(    r   zUserNotice.explicit_textN)r&  r'  r(  r)  r!   rB   rm   r   r<   )r!   r'  r!   r)  )
rM   rN   rO   rF   rl   r   r   r   r&  r(  r*   r*   r*   r+   r"    s    



	r"  c                   @  r  ) r*  organizationr)  notice_numberstyping.Iterable[int]r!   rB   c                 C  s2   || _ t|}tdd |D std|| _d S )Nc                 s  r   r#   )r$   r/   r   r*   r*   r+   r     r   z+NoticeReference.__init__.<locals>.<genexpr>z)notice_numbers must be a list of integers)_organizationr\   r   rg   _notice_numbers)r4   r.  r/  r*   r*   r+   rF     s
   
zNoticeReference.__init__r.   c                 C  r   )NzU<NoticeReference(organization={0.organization!r}, notice_numbers={0.notice_numbers})>r   r3   r*   r*   r+   rl     r   zNoticeReference.__repr__ry   rz   r{   c                 C  r   r#   )r$   r*  r}   r.  r/  r~   r*   r*   r+   r     r   zNoticeReference.__eq__r/   c                 C  s   t | jt| jfS r#   )r   r.  r   r/  r3   r*   r*   r+   r        zNoticeReference.__hash__c                 C  r   r#   )r1  r3   r*   r*   r+   r.    r   zNoticeReference.organizationtyping.List[int]c                 C  r   r#   )r2  r3   r*   r*   r+   r/    r   zNoticeReference.notice_numbersN)r.  r)  r/  r0  r!   rB   rm   r   r<   r-  )r!   r4  )
rM   rN   rO   rF   rl   r   r   r   r.  r/  r*   r*   r*   r+   r*    r   r*  c                   @  r   )ExtendedKeyUsageusages!typing.Iterable[ObjectIdentifier]r!   rB   c                 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)r\   r   rg   _usages)r4   r6  r*   r*   r+   rF     s   
zExtendedKeyUsage.__init__r9  r.   c                 C  rj   )Nz<ExtendedKeyUsage(rk   )r9  r3   r*   r*   r+   rl     r7   zExtendedKeyUsage.__repr__ry   rz   r{   c                 C  r|   r#   )r$   r5  r}   r9  r~   r*   r*   r+   r     r   zExtendedKeyUsage.__eq__r/   c                 C  r   r#   )r   r   r9  r3   r*   r*   r+   r     r7   zExtendedKeyUsage.__hash__r"   c                 C  r   r#   r   r3   r*   r*   r+   r%     r   zExtendedKeyUsage.public_bytesN)r6  r7  r!   rB   rm   r   r<   rU   )rM   rN   rO   r   ZEXTENDED_KEY_USAGErA   rF   r=   rn   ro   rp   rl   r   r   r%   r*   r*   r*   r+   r5    s    
	


r5  c                   @  :   e Zd ZejZdddZddd	ZdddZdddZ	dS )OCSPNoCheckry   rz   r!   r{   c                 C     t |tstS dS NT)r$   r;  r}   r~   r*   r*   r+   r        
zOCSPNoCheck.__eq__r/   c                 C     t tS r#   )r   r;  r3   r*   r*   r+   r        zOCSPNoCheck.__hash__r.   c                 C     dS )Nz<OCSPNoCheck()>r*   r3   r*   r*   r+   rl        zOCSPNoCheck.__repr__r"   c                 C  r   r#   r   r3   r*   r*   r+   r%      r   zOCSPNoCheck.public_bytesNr   r<   rm   rU   )
rM   rN   rO   r   ZOCSP_NO_CHECKrA   r   r   rl   r%   r*   r*   r*   r+   r;        


r;  c                   @  r:  )PrecertPoisonry   rz   r!   r{   c                 C  r<  r=  )r$   rD  r}   r~   r*   r*   r+   r     r>  zPrecertPoison.__eq__r/   c                 C  r?  r#   )r   rD  r3   r*   r*   r+   r     r@  zPrecertPoison.__hash__r.   c                 C  rA  )Nz<PrecertPoison()>r*   r3   r*   r*   r+   rl     rB  zPrecertPoison.__repr__r"   c                 C  r   r#   r   r3   r*   r*   r+   r%     r   zPrecertPoison.public_bytesNr   r<   rm   rU   )
rM   rN   rO   r   ZPRECERT_POISONrA   r   r   rl   r%   r*   r*   r*   r+   rD    rC  rD  c                   @  r   )
TLSFeaturefeaturestyping.Iterable[TLSFeatureType]r!   rB   c                 C  s8   t |}tdd |D rt|dkrtd|| _d S )Nc                 s  r   r#   )r$   TLSFeatureTyper   r*   r*   r+   r     r   z&TLSFeature.__init__.<locals>.<genexpr>r   z@features must be a list of elements from the TLSFeatureType enum)r\   r   r1   rg   	_features)r4   rF  r*   r*   r+   rF     s   
zTLSFeature.__init__rI  r.   c                 C  rj   )Nz<TLSFeature(features=rk   )rI  r3   r*   r*   r+   rl   )  r7   zTLSFeature.__repr__ry   rz   r{   c                 C  r|   r#   )r$   rE  r}   rI  r~   r*   r*   r+   r   ,  r   zTLSFeature.__eq__r/   c                 C  r   r#   )r   r   rI  r3   r*   r*   r+   r   2  r7   zTLSFeature.__hash__r"   c                 C  r   r#   r   r3   r*   r*   r+   r%   5  r   zTLSFeature.public_bytesN)rF  rG  r!   rB   rm   r   r<   rU   )rM   rN   rO   r   ZTLS_FEATURErA   rF   r=   rn   ro   rp   rl   r   r   r%   r*   r*   r*   r+   rE    s    



rE  c                   @  s   e Zd ZdZdZdS )rH  r     N)rM   rN   rO   Zstatus_requestZstatus_request_v2r*   r*   r*   r+   rH  9  s    rH  c                 C  s   i | ]}|j |qS r*   rh   r   r*   r*   r+   
<dictcomp>D      rL  c                   @  sR   e Zd ZejZdddZddd	ZdddZdddZ	e
dddZdddZdS )InhibitAnyPolicy
skip_certsr/   r!   rB   c                 C  s,   t |ts	td|dk rtd|| _d S )Nzskip_certs must be an integerr   z)skip_certs must be a non-negative integer)r$   r/   rg   r   _skip_certs)r4   rO  r*   r*   r+   rF   J  s
   

zInhibitAnyPolicy.__init__r.   c                 C  rj   )Nz<InhibitAnyPolicy(skip_certs=rk   )rO  r3   r*   r*   r+   rl   S  r7   zInhibitAnyPolicy.__repr__ry   rz   r{   c                 C  r|   r#   )r$   rN  r}   rO  r~   r*   r*   r+   r   V  r   zInhibitAnyPolicy.__eq__c                 C  r   r#   )r   rO  r3   r*   r*   r+   r   \  r   zInhibitAnyPolicy.__hash__c                 C  r   r#   )rP  r3   r*   r*   r+   rO  _  r   zInhibitAnyPolicy.skip_certsr"   c                 C  r   r#   r   r3   r*   r*   r+   r%   c  r   zInhibitAnyPolicy.public_bytesN)rO  r/   r!   rB   rm   r   r<   rU   )rM   rN   rO   r   ZINHIBIT_ANY_POLICYrA   rF   rl   r   r   r   rO  r%   r*   r*   r*   r+   rN  G  s    

	

rN  c                   @  s   e Zd ZejZd/ddZed0ddZed0ddZ	ed0ddZ
ed0ddZed0ddZed0ddZed0ddZed0ddZed0dd Zd1d"d#Zd2d&d'Zd3d)d*Zd4d,d-Zd.S )5KeyUsagedigital_signaturer{   content_commitmentkey_enciphermentdata_enciphermentkey_agreementkey_cert_signcrl_signencipher_onlydecipher_onlyr!   rB   c
           
      C  sN   |s
|s|	r
t d|| _|| _|| _|| _|| _|| _|| _|| _|	| _	d S )NzKencipher_only and decipher_only can only be true when key_agreement is true)
r   _digital_signature_content_commitment_key_encipherment_data_encipherment_key_agreement_key_cert_sign	_crl_sign_encipher_only_decipher_only)
r4   rR  rS  rT  rU  rV  rW  rX  rY  rZ  r*   r*   r+   rF   j  s   
zKeyUsage.__init__c                 C  r   r#   )r[  r3   r*   r*   r+   rR    r   zKeyUsage.digital_signaturec                 C  r   r#   )r\  r3   r*   r*   r+   rS    r   zKeyUsage.content_commitmentc                 C  r   r#   )r]  r3   r*   r*   r+   rT    r   zKeyUsage.key_enciphermentc                 C  r   r#   )r^  r3   r*   r*   r+   rU    r   zKeyUsage.data_enciphermentc                 C  r   r#   )r_  r3   r*   r*   r+   rV    r   zKeyUsage.key_agreementc                 C  r   r#   )r`  r3   r*   r*   r+   rW    r   zKeyUsage.key_cert_signc                 C  r   r#   )ra  r3   r*   r*   r+   rX    r   zKeyUsage.crl_signc                 C     | j std| jS )Nz7encipher_only is undefined unless key_agreement is true)rV  r   rb  r3   r*   r*   r+   rY    
   zKeyUsage.encipher_onlyc                 C  rd  )Nz7decipher_only is undefined unless key_agreement is true)rV  r   rc  r3   r*   r*   r+   rZ    re  zKeyUsage.decipher_onlyr.   c                 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})>)rY  rZ  r   rT   )r4   rY  rZ  r*   r*   r+   rl     s   

zKeyUsage.__repr__ry   rz   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$   rQ  r}   rR  rS  rT  rU  rV  rW  rX  rb  rc  r~   r*   r*   r+   r     s&   








zKeyUsage.__eq__r/   c              
   C  s,   t | j| j| j| j| j| j| j| j| j	f	S r#   )
r   rR  rS  rT  rU  rV  rW  rX  rb  rc  r3   r*   r*   r+   r     s   zKeyUsage.__hash__r"   c                 C  r   r#   r   r3   r*   r*   r+   r%     r   zKeyUsage.public_bytesN)rR  r{   rS  r{   rT  r{   rU  r{   rV  r{   rW  r{   rX  r{   rY  r{   rZ  r{   r!   rB   r   rm   r   r<   rU   )rM   rN   rO   r   Z	KEY_USAGErA   rF   r   rR  rS  rT  rU  rV  rW  rX  rY  rZ  rl   r   r   r%   r*   r*   r*   r+   rQ  g  s2    



rQ  c                   @  s~   e Zd ZejZd$ddZd%ddZd&ddZd&ddZ	d&ddZ
d'ddZd(ddZed)ddZed)ddZd*d!d"Zd#S )+NameConstraintspermitted_subtreesr   excluded_subtreesr!   rB   c                 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)r\   r   r   rg   _validate_tree_permitted_subtrees_excluded_subtrees)r4   rg  rh  r*   r*   r+   rF     s8   


zNameConstraints.__init__ry   rz   r{   c                 C  r   r#   )r$   rf  r}   rh  rg  r~   r*   r*   r+   r     r   zNameConstraints.__eq__treetyping.Iterable[GeneralName]c                 C  s   |  | | | d S r#   )_validate_ip_name_validate_dns_namer4   rl  r*   r*   r+   ri  "  s   
zNameConstraints._validate_treec                 C     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   rh   	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)anyrg   rp  r*   r*   r+   rn  &  s   z!NameConstraints._validate_ip_namec                 C  rq  )Nc                 s  s$    | ]}t |tod |jv V  qdS )*N)r$   r   rh   ru  r*   r*   r+   r   4  s    
z5NameConstraints._validate_dns_name.<locals>.<genexpr>zDDNSName name constraints must not contain the '*' wildcard character)rw  r   rp  r*   r*   r+   ro  3  s   z"NameConstraints._validate_dns_namer.   c                 C  r   )Nze<NameConstraints(permitted_subtrees={0.permitted_subtrees}, excluded_subtrees={0.excluded_subtrees})>r   r3   r*   r*   r+   rl   <  r   zNameConstraints.__repr__r/   c                 C  s@   | j d urt| j }nd }| jd urt| j}nd }t||fS r#   )rg  r   rh  r   )r4   Zpsesr*   r*   r+   r   B  s   

zNameConstraints.__hash__r   c                 C  r   r#   )rj  r3   r*   r*   r+   rg  S  r   z"NameConstraints.permitted_subtreesc                 C  r   r#   )rk  r3   r*   r*   r+   rh  Y  r   z!NameConstraints.excluded_subtreesr"   c                 C  r   r#   r   r3   r*   r*   r+   r%   _  r   zNameConstraints.public_bytesN)rg  r   rh  r   r!   rB   r   )rl  rm  r!   rB   rm   r<   r   rU   )rM   rN   rO   r   ZNAME_CONSTRAINTSrA   rF   r   ri  rn  ro  rl   r   r   rg  rh  r%   r*   r*   r*   r+   rf    s    

*
	


	
rf  c                   @  s^   e Zd Zdd	d
ZedddZedddZedddZd ddZd!ddZ	d"ddZ
dS )#	ExtensionrA   r   criticalr{   rh   r   r!   rB   c                 C  s:   t |ts	tdt |tstd|| _|| _|| _d S )Nz2oid argument must be an ObjectIdentifier instance.z critical must be a boolean value)r$   r   rg   r{   _oid	_critical_value)r4   rA   r{  rh   r*   r*   r+   rF   d  s   


zExtension.__init__c                 C  r   r#   r|  r3   r*   r*   r+   rA   s  r   zExtension.oidc                 C  r   r#   )r}  r3   r*   r*   r+   r{  w  r   zExtension.criticalc                 C  r   r#   r~  r3   r*   r*   r+   rh   {  r   zExtension.valuer.   c                 C  r   )Nz@<Extension(oid={0.oid}, critical={0.critical}, value={0.value})>r   r3   r*   r*   r+   rl     r   zExtension.__repr__ry   rz   c                 C  r   r#   )r$   rz  r}   rA   r{  rh   r~   r*   r*   r+   r        


zExtension.__eq__r/   c                 C     t | j| j| jfS r#   )r   rA   r{  rh   r3   r*   r*   r+   r     r3  zExtension.__hash__N)rA   r   r{  r{   rh   r   r!   rB   r   r   )r!   r   rm   r   r<   )rM   rN   rO   rF   r   rA   r{  rh   rl   r   r   r*   r*   r*   r+   rz  c  s    



rz  c                   @  s   e Zd Zd(ddZed\ZZZej	d)ddZ
ej	d*ddZ
ej	d+ddZ
ej	d,ddZ
ej	d-ddZ
d.ddZ
d/ddZd0d"d#Zd1d%d&Zd'S )2GeneralNamesgeneral_namesrm  r!   rB   c                 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)r\   r   rg   _general_namesr4   r  r*   r*   r+   rF     r  zGeneralNames.__init__r  typectyping.Union[typing.Type[DNSName], typing.Type[UniformResourceIdentifier], typing.Type[RFC822Name]]typing.List[str]c                 C     d S r#   r*   r4   r  r*   r*   r+   get_values_for_type     	z GeneralNames.get_values_for_typetyping.Type[DirectoryName]typing.List[Name]c                 C  r  r#   r*   r  r*   r*   r+   r       typing.Type[RegisteredID]typing.List[ObjectIdentifier]c                 C  r  r#   r*   r  r*   r*   r+   r    r  typing.Type[IPAddress]typing.List[_IPAddressTypes]c                 C  r  r#   r*   r  r*   r*   r+   r       typing.Type[OtherName]typing.List[OtherName]c                 C  r  r#   r*   r  r*   r*   r+   r    r  typing.Union[typing.Type[DNSName], typing.Type[DirectoryName], typing.Type[IPAddress], typing.Type[OtherName], typing.Type[RFC822Name], typing.Type[RegisteredID], typing.Type[UniformResourceIdentifier]]typing.Union[typing.List[_IPAddressTypes], typing.List[str], typing.List[OtherName], typing.List[Name], typing.List[ObjectIdentifier]]c                   s0    fdd| D } t krdd |D S t|S )Nc                 3  s    | ]
}t | r|V  qd S r#   )r$   r   ir  r*   r+   r     s    z3GeneralNames.get_values_for_type.<locals>.<genexpr>c                 S  s   g | ]}|j qS r*   rK  r  r*   r*   r+   
<listcomp>  s    z4GeneralNames.get_values_for_type.<locals>.<listcomp>)r   r\   )r4   r  Zobjsr*   r  r+   r    s   r.   c                 C  rj   )Nz<GeneralNames(rk   r  r3   r*   r*   r+   rl     r7   zGeneralNames.__repr__ry   rz   r{   c                 C  r|   r#   )r$   r  r}   r  r~   r*   r*   r+   r     r   zGeneralNames.__eq__r/   c                 C  r   r#   )r   r   r  r3   r*   r*   r+   r     r7   zGeneralNames.__hash__Nr  rm  r!   rB   r  r  r!   r  r  r  r!   r  r  r  r!   r  r  r  r!   r  r  r  r!   r  r  r  r!   r  rm   r   r<   )rM   rN   rO   rF   r=   rn   ro   rp   typingoverloadr  rl   r   r   r*   r*   r*   r+   r    s"    





r  c                   @     e Zd ZejZd+ddZed\ZZ	Z
ejd,ddZejd-ddZejd.ddZejd/ddZejd0ddZd1ddZd2ddZd3d"d#Zd4d%d&Zd5d(d)Zd*S )6SubjectAlternativeNamer  rm  r!   rB   c                 C  r[   r#   r  r  r  r*   r*   r+   rF     r7   zSubjectAlternativeName.__init__r  r  r  r  c                 C  r  r#   r*   r  r*   r*   r+   r    r  z*SubjectAlternativeName.get_values_for_typer  r  c                 C  r  r#   r*   r  r*   r*   r+   r    r  r  r  c                 C  r  r#   r*   r  r*   r*   r+   r    r  r  r  c                 C  r  r#   r*   r  r*   r*   r+   r    r  r  r  c                 C  r  r#   r*   r  r*   r*   r+   r    r  r  r  c                 C     | j |S r#   r  r  r  r*   r*   r+   r       r.   c                 C  rj   )Nz<SubjectAlternativeName(rk   r  r3   r*   r*   r+   rl   -  r7   zSubjectAlternativeName.__repr__ry   rz   r{   c                 C  r|   r#   )r$   r  r}   r  r~   r*   r*   r+   r   0  r   zSubjectAlternativeName.__eq__r/   c                 C  r   r#   r   r  r3   r*   r*   r+   r   6  r   zSubjectAlternativeName.__hash__r"   c                 C  r   r#   r   r3   r*   r*   r+   r%   9  r   z#SubjectAlternativeName.public_bytesNr  r  r  r  r  r  r  rm   r   r<   rU   )rM   rN   rO   r   ZSUBJECT_ALTERNATIVE_NAMErA   rF   r=   rn   ro   rp   r  r  r  rl   r   r   r%   r*   r*   r*   r+   r    &    





r  c                   @  r  )6IssuerAlternativeNamer  rm  r!   rB   c                 C  r[   r#   r  r  r*   r*   r+   rF   @  r7   zIssuerAlternativeName.__init__r  r  r  r  c                 C  r  r#   r*   r  r*   r*   r+   r  E  r  z)IssuerAlternativeName.get_values_for_typer  r  c                 C  r  r#   r*   r  r*   r*   r+   r  P  r  r  r  c                 C  r  r#   r*   r  r*   r*   r+   r  W  r  r  r  c                 C  r  r#   r*   r  r*   r*   r+   r  ^  r  r  r  c                 C  r  r#   r*   r  r*   r*   r+   r  d  r  r  r  c                 C  r  r#   r  r  r*   r*   r+   r  j  r  r.   c                 C  rj   )Nz<IssuerAlternativeName(rk   r  r3   r*   r*   r+   rl   ~  r7   zIssuerAlternativeName.__repr__ry   rz   r{   c                 C  r|   r#   )r$   r  r}   r  r~   r*   r*   r+   r     r   zIssuerAlternativeName.__eq__r/   c                 C  r   r#   r  r3   r*   r*   r+   r     r   zIssuerAlternativeName.__hash__r"   c                 C  r   r#   r   r3   r*   r*   r+   r%     r   z"IssuerAlternativeName.public_bytesNr  r  r  r  r  r  r  rm   r   r<   rU   )rM   rN   rO   r   ZISSUER_ALTERNATIVE_NAMErA   rF   r=   rn   ro   rp   r  r  r  rl   r   r   r%   r*   r*   r*   r+   r  =  r  r  c                   @  r  )6CertificateIssuerr  rm  r!   rB   c                 C  r[   r#   r  r  r*   r*   r+   rF     r7   zCertificateIssuer.__init__r  r  r  r  c                 C  r  r#   r*   r  r*   r*   r+   r    r  z%CertificateIssuer.get_values_for_typer  r  c                 C  r  r#   r*   r  r*   r*   r+   r    r  r  r  c                 C  r  r#   r*   r  r*   r*   r+   r    r  r  r  c                 C  r  r#   r*   r  r*   r*   r+   r    r  r  r  c                 C  r  r#   r*   r  r*   r*   r+   r    r  r  r  c                 C  r  r#   r  r  r*   r*   r+   r    r  r.   c                 C  rj   )Nz<CertificateIssuer(rk   r  r3   r*   r*   r+   rl     r7   zCertificateIssuer.__repr__ry   rz   r{   c                 C  r|   r#   )r$   r  r}   r  r~   r*   r*   r+   r     r   zCertificateIssuer.__eq__r/   c                 C  r   r#   r  r3   r*   r*   r+   r     r   zCertificateIssuer.__hash__r"   c                 C  r   r#   r   r3   r*   r*   r+   r%     r   zCertificateIssuer.public_bytesNr  r  r  r  r  r  r  rm   r   r<   rU   )rM   rN   rO   r   ZCERTIFICATE_ISSUERrA   rF   r=   rn   ro   rp   r  r  r  rl   r   r   r%   r*   r*   r*   r+   r    r  r  c                   @  R   e Zd ZejZdddZddd	ZdddZdddZ	e
dddZdddZdS )	CRLReasonreasonr   r!   rB   c                 C  rs   )Nz*reason must be an element from ReasonFlags)r$   r   rg   _reason)r4   r  r*   r*   r+   rF     rx   zCRLReason.__init__r.   c                 C  rj   )Nz<CRLReason(reason=rk   r  r3   r*   r*   r+   rl     r7   zCRLReason.__repr__ry   rz   r{   c                 C  r|   r#   )r$   r  r}   r  r~   r*   r*   r+   r     r   zCRLReason.__eq__r/   c                 C  r   r#   )r   r  r3   r*   r*   r+   r     r   zCRLReason.__hash__c                 C  r   r#   r  r3   r*   r*   r+   r    r   zCRLReason.reasonr"   c                 C  r   r#   r   r3   r*   r*   r+   r%     r   zCRLReason.public_bytesN)r  r   r!   rB   rm   r   r<   )r!   r   rU   )rM   rN   rO   r   Z
CRL_REASONrA   rF   rl   r   r   r   r  r%   r*   r*   r*   r+   r    s    



r  c                   @  r  )InvalidityDateinvalidity_datedatetime.datetimer!   rB   c                 C  s   t |tjs
td|| _d S )Nz+invalidity_date must be a datetime.datetime)r$   datetimerg   _invalidity_date)r4   r  r*   r*   r+   rF     s   
zInvalidityDate.__init__r.   c                 C  s   d | jS )Nz$<InvalidityDate(invalidity_date={})>)rT   r  r3   r*   r*   r+   rl     s   zInvalidityDate.__repr__ry   rz   r{   c                 C  r|   r#   )r$   r  r}   r  r~   r*   r*   r+   r   
  r   zInvalidityDate.__eq__r/   c                 C  r   r#   )r   r  r3   r*   r*   r+   r     r   zInvalidityDate.__hash__c                 C  r   r#   )r  r3   r*   r*   r+   r    r   zInvalidityDate.invalidity_dater"   c                 C  r   r#   r   r3   r*   r*   r+   r%     r   zInvalidityDate.public_bytesN)r  r  r!   rB   rm   r   r<   )r!   r  rU   )rM   rN   rO   r   ZINVALIDITY_DATErA   rF   rl   r   r   r   r  r%   r*   r*   r*   r+   r    s    



r  c                   @  R   e Zd ZejZdddZed\ZZ	Z
dd	d
ZdddZdddZdddZdS ))PrecertificateSignedCertificateTimestampssigned_certificate_timestamps+typing.Iterable[SignedCertificateTimestamp]r!   rB   c                 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r\   r   rg   _signed_certificate_timestampsr4   r  r*   r*   r+   rF        
z2PrecertificateSignedCertificateTimestamps.__init__r  r.   c                 C  s   d t| S )Nz/<PrecertificateSignedCertificateTimestamps({})>)rT   r\   r3   r*   r*   r+   rl   3  s   z2PrecertificateSignedCertificateTimestamps.__repr__r/   c                 C  r   r#   r   r   r  r3   r*   r*   r+   r   8  r7   z2PrecertificateSignedCertificateTimestamps.__hash__ry   rz   r{   c                 C  r|   r#   )r$   r  r}   r  r~   r*   r*   r+   r   ;     
z0PrecertificateSignedCertificateTimestamps.__eq__r"   c                 C  r   r#   r   r3   r*   r*   r+   r%   D  r   z6PrecertificateSignedCertificateTimestamps.public_bytesNr  r  r!   rB   rm   r<   r   rU   )rM   rN   rO   r   Z%PRECERT_SIGNED_CERTIFICATE_TIMESTAMPSrA   rF   r=   rn   ro   rp   rl   r   r   r%   r*   r*   r*   r+   r    s    




	r  c                   @  r  )SignedCertificateTimestampsr  r  r!   rB   c                 C  r   )Nc                 s  r   r#   r  r  r*   r*   r+   r   R  r  z7SignedCertificateTimestamps.__init__.<locals>.<genexpr>r  r  r  r*   r*   r+   rF   K  r  z$SignedCertificateTimestamps.__init__r  r.   c                 C  s   dt |  dS )Nz<SignedCertificateTimestamps(rk   )r\   r3   r*   r*   r+   rl   `  r   z$SignedCertificateTimestamps.__repr__r/   c                 C  r   r#   r  r3   r*   r*   r+   r   c  r7   z$SignedCertificateTimestamps.__hash__ry   rz   r{   c                 C  r|   r#   )r$   r  r}   r  r~   r*   r*   r+   r   f  r  z"SignedCertificateTimestamps.__eq__r"   c                 C  r   r#   r   r3   r*   r*   r+   r%   o  r   z(SignedCertificateTimestamps.public_bytesNr  rm   r<   r   rU   )rM   rN   rO   r   ZSIGNED_CERTIFICATE_TIMESTAMPSrA   rF   r=   rn   ro   rp   rl   r   r   r%   r*   r*   r*   r+   r  H  s    




	r  c                   @  sR   e Zd ZejZdddZdd
dZdddZdddZ	e
dddZdddZdS )	OCSPNoncenoncer"   r!   rB   c                 C  rs   )Nznonce must be bytes)r$   r"   rg   _nonce)r4   r  r*   r*   r+   rF   v  rx   zOCSPNonce.__init__ry   rz   r{   c                 C  r|   r#   )r$   r  r}   r  r~   r*   r*   r+   r   |  r   zOCSPNonce.__eq__r/   c                 C  r   r#   )r   r  r3   r*   r*   r+   r     r   zOCSPNonce.__hash__r.   c                 C  r   )Nz<OCSPNonce(nonce=rk   )r  r3   r*   r*   r+   rl     r7   zOCSPNonce.__repr__c                 C  r   r#   )r  r3   r*   r*   r+   r    r   zOCSPNonce.noncec                 C  r   r#   r   r3   r*   r*   r+   r%     r   zOCSPNonce.public_bytesN)r  r"   r!   rB   r   r<   rm   rU   )rM   rN   rO   r   ZNONCErA   rF   r   r   rl   r   r  r%   r*   r*   r*   r+   r  s  r   r  c                   @  sN   e Zd ZejZdddZdd
dZdddZdddZ	dddZ
dddZdS )OCSPAcceptableResponses	responsesr7  r!   rB   c                 C  s,   t |}tdd |D rtd|| _d S )Nc                 s  s    | ]	}t |t V  qd S r#   r8  )r   rr*   r*   r+   r     s    z3OCSPAcceptableResponses.__init__.<locals>.<genexpr>z'All responses must be ObjectIdentifiers)r\   rw  rg   
_responses)r4   r  r*   r*   r+   rF     s   
z OCSPAcceptableResponses.__init__ry   rz   r{   c                 C  r|   r#   )r$   r  r}   r  r~   r*   r*   r+   r     r   zOCSPAcceptableResponses.__eq__r/   c                 C  r   r#   )r   r   r  r3   r*   r*   r+   r     r7   z OCSPAcceptableResponses.__hash__r.   c                 C  rj   )Nz#<OCSPAcceptableResponses(responses=rk   )r  r3   r*   r*   r+   rl     r7   z OCSPAcceptableResponses.__repr__!typing.Iterator[ObjectIdentifier]c                 C  r   r#   )r8   r  r3   r*   r*   r+   ro     r   z OCSPAcceptableResponses.__iter__r"   c                 C  r   r#   r   r3   r*   r*   r+   r%     r   z$OCSPAcceptableResponses.public_bytesN)r  r7  r!   rB   r   r<   rm   )r!   r  rU   )rM   rN   rO   r   ZACCEPTABLE_RESPONSESrA   rF   r   r   rl   ro   r%   r*   r*   r*   r+   r    s    




r  c                   @  s   e Zd ZejZd-ddZd.ddZd/ddZd0ddZ	e
d1ddZe
d2ddZe
d3dd Ze
d3d!d"Ze
d4d#d$Ze
d3d%d&Ze
d3d'd(Zd5d*d+Zd,S )6IssuingDistributionPointr   r   r   r   only_contains_user_certsr{   only_contains_ca_certsonly_some_reasonsr   indirect_crlonly_contains_attribute_certsr!   rB   c           	      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    rM  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.)r\   r$   r   r   rg   r   r   r   r   r{   r1   rw  _only_contains_user_certs_only_contains_ca_certs_indirect_crl_only_contains_attribute_certs_only_some_reasonsr   r   )	r4   r   r   r  r  r  r  r  Zcrl_constraintsr*   r*   r+   rF     sp   



z!IssuingDistributionPoint.__init__r.   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   r3   r*   r*   r+   rl     s   z!IssuingDistributionPoint.__repr__ry   rz   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  r}   r   r   r  r  r  r  r  r~   r*   r*   r+   r     s"   





zIssuingDistributionPoint.__eq__r/   c                 C  s$   t | j| j| j| j| j| j| jfS r#   )r   r   r   r  r  r  r  r  r3   r*   r*   r+   r     s   z!IssuingDistributionPoint.__hash__r   c                 C  r   r#   r   r3   r*   r*   r+   r   +  r   z"IssuingDistributionPoint.full_namec                 C  r   r#   r   r3   r*   r*   r+   r   /  r   z&IssuingDistributionPoint.relative_namec                 C  r   r#   )r  r3   r*   r*   r+   r  3  r   z1IssuingDistributionPoint.only_contains_user_certsc                 C  r   r#   )r  r3   r*   r*   r+   r  7  r   z/IssuingDistributionPoint.only_contains_ca_certsc                 C  r   r#   )r  r3   r*   r*   r+   r  ;  r   z*IssuingDistributionPoint.only_some_reasonsc                 C  r   r#   )r  r3   r*   r*   r+   r  A  r   z%IssuingDistributionPoint.indirect_crlc                 C  r   r#   )r  r3   r*   r*   r+   r  E  r   z6IssuingDistributionPoint.only_contains_attribute_certsr"   c                 C  r   r#   r   r3   r*   r*   r+   r%   I  r   z%IssuingDistributionPoint.public_bytesN)r   r   r   r   r  r{   r  r{   r  r   r  r{   r  r{   r!   rB   rm   r   r<   r   r  r   r  rU   )rM   rN   rO   r   ZISSUING_DISTRIBUTION_POINTrA   rF   rl   r   r   r   r   r   r  r  r  r  r  r%   r*   r*   r*   r+   r    s*    

S

r  c                   @  sn   e Zd ZejZddd	Zed d
dZed!ddZ	ed!ddZ
d"ddZd#ddZd$ddZd%ddZdS )&MSCertificateTemplatetemplate_idr   major_versionr   minor_versionr!   rB   c                 C  sT   t |ts	td|| _|d urt |tr|d ur"t |ts"td|| _|| _d S )Noid must be an ObjectIdentifierz8major_version and minor_version must be integers or None)r$   r   rg   _template_idr/   _major_version_minor_version)r4   r  r  r  r*   r*   r+   rF   P  s   

zMSCertificateTemplate.__init__c                 C  r   r#   )r  r3   r*   r*   r+   r  d  r   z!MSCertificateTemplate.template_idc                 C  r   r#   )r  r3   r*   r*   r+   r  h  r   z#MSCertificateTemplate.major_versionc                 C  r   r#   )r  r3   r*   r*   r+   r  l  r   z#MSCertificateTemplate.minor_versionr.   c                 C  s   d| j  d| j d| j dS )Nz#<MSCertificateTemplate(template_id=z, major_version=z, minor_version=rk   )r  r  r  r3   r*   r*   r+   rl   p  s   
zMSCertificateTemplate.__repr__ry   rz   r{   c                 C  r   r#   )r$   r  r}   r  r  r  r~   r*   r*   r+   r   w  r  zMSCertificateTemplate.__eq__r/   c                 C  r  r#   )r   r  r  r  r3   r*   r*   r+   r     r3  zMSCertificateTemplate.__hash__r"   c                 C  r   r#   r   r3   r*   r*   r+   r%     r   z"MSCertificateTemplate.public_bytesN)r  r   r  r   r  r   r!   rB   r   r   rm   r   r<   rU   )rM   rN   rO   r   ZMS_CERTIFICATE_TEMPLATErA   rF   r   r  r  r  rl   r   r   r%   r*   r*   r*   r+   r  M  s    




r  c                   @  sZ   e Zd ZdddZedd	d
ZedddZdddZdddZd ddZ	dddZ
dS )!rf   rA   r   rh   r"   r!   rB   c                 C  s"   t |ts	td|| _|| _d S )Nr  )r$   r   rg   r|  r~  )r4   rA   rh   r*   r*   r+   rF     s   

zUnrecognizedExtension.__init__c                 C  r   r#   r  r3   r*   r*   r+   rA     r   zUnrecognizedExtension.oidc                 C  r   r#   r  r3   r*   r*   r+   rh     r   zUnrecognizedExtension.valuer.   c                 C  r   )Nz7<UnrecognizedExtension(oid={0.oid}, value={0.value!r})>r   r3   r*   r*   r+   rl     r   zUnrecognizedExtension.__repr__ry   rz   r{   c                 C  r   r#   )r$   rf   r}   rA   rh   r~   r*   r*   r+   r     r   zUnrecognizedExtension.__eq__r/   c                 C  r   r#   )r   rA   rh   r3   r*   r*   r+   r     r   zUnrecognizedExtension.__hash__c                 C  r   r#   rK  r3   r*   r*   r+   r%     s   z"UnrecognizedExtension.public_bytesN)rA   r   rh   r"   r!   rB   r   rU   rm   r   r<   )rM   rN   rO   rF   r   rA   rh   rl   r   r   r%   r*   r*   r*   r+   rf     s    



rf   )r    r   r!   r"   )r-   r.   )i
__future__r   abcr  r&   rr  r  Z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   r,   r=   	Exceptionr?   rR   ABCMetar   rX   rq   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*  r5  r;  rD  rE  rH  Z_TLS_FEATURE_TYPE_TO_ENUMrN  rQ  rf  Genericrz  r  r  r  r  r  r  r  r  r  r  r  r  rf   r*   r*   r*   r+   <module>   s   ,

'l$!!(.%%oA=+("  w0YQQQ-+ !;