o
    g~)                    @  s  d dl mZ d dlZd dlZd dlZd dlZd dlZd dlmZ d dl	m
Z
 d dl	mZ d dlmZmZ d dlmZ d dlmZ d d	lmZmZ d d
lmZ d dlmZmZmZmZmZmZm Z m!Z!m"Z" d dl#m$Z$m%Z% d dl&m'Z'm(Z(m)Z)m*Z* ej+ddddZ,dddZ-dd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ZKeAjLd eAjBd=eAjCd>eAjDd?eAjEd@eAjFdAeAjGdBeAjMdDeAjHdEeAjIdFi
ZNG dGdH dHe3ZOG dIdJ dJe3ZPG dKdL dLZQG dMdN dNZRG dOdP dPZSG dQdR dRe3ZTG dSdT dTe3ZUG dUdV dVe3ZVG dWdX dXe3ZWG dYdZ dZej@ZXd[d\ eXD ZYG d]d^ d^e3ZZG d_d` d`e3Z[G dadb dbe3Z\G dcdd ddej]e, Z^G dedf dfZ_G dgdh dhe3Z`G didj dje3ZaG dkdl dle3ZbG dmdn dne3ZcG dodp dpe3ZdG dqdr dre3ZeG dsdt dte3ZfG dudv dve3ZgG dwdx dxe3ZhG dydz dze3ZiG d{d| d|e3ZjG d}d~ d~ZkG dd dZlG dd dZmG dd de3ZnG dd de3Zod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   EncodingDERPublicFormatPKCS1r   X962UncompressedPointSubjectPublicKeyInfor   parse_spki_for_datahashlibsha1digest)r    data
serialized r3   V/var/www/html/api-tag/env/lib/python3.10/site-packages/cryptography/x509/extensions.py_key_identifier_from_public_key2   s    


r5   
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r6   r3   r4   
len_methodK      z*_make_sequence_methods.<locals>.len_methodc                   r9   r#   )iterr;   r<   r>   r3   r4   iter_methodN   r@   z+_make_sequence_methods.<locals>.iter_methodc                   s   t |  | S r#   )r;   )r=   idxr>   r3   r4   getitem_methodQ   r@   z._make_sequence_methods.<locals>.getitem_methodr!   r8   r3   )r6   r?   rB   rD   r3   r>   r4   _make_sequence_methodsJ   s   
rF   c                         e Zd Zd	 fddZ  ZS )
DuplicateExtensionmsgr7   oidr   r!   Nonec                      t  | || _d S r#   super__init__rJ   r=   rI   rJ   	__class__r3   r4   rO   X      
zDuplicateExtension.__init__rI   r7   rJ   r   r!   rK   __name__
__module____qualname__rO   __classcell__r3   r3   rQ   r4   rH   W       rH   c                      rG   )
ExtensionNotFoundrI   r7   rJ   r   r!   rK   c                   rL   r#   rM   rP   rQ   r3   r4   rO   ^   rS   zExtensionNotFound.__init__rT   rU   r3   r3   rQ   r4   r[   ]   rZ   r[   c                   @  s    e Zd ZU ded< dddZdS )	r   z!typing.ClassVar[ObjectIdentifier]rJ   r!   r"   c                 C  s   t d| )z7
        Serializes the extension type to DER.
        z3public_bytes is not implemented for extension type )NotImplementedErrorr<   r3   r3   r4   r%   f   s   zExtensionType.public_bytesNr!   r"   )rV   rW   rX   __annotations__r%   r3   r3   r3   r4   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!   rK   c                 C     t || _d S r#   )list_extensions)r=   ra   r3   r3   r4   rO   p   s   zExtensions.__init__rJ   r   Extension[ExtensionType]c                 C  s.   | D ]}|j |kr|  S qtd| d|)NNo  extension was found)rJ   r[   )r=   rJ   extr3   r3   r4   get_extension_for_oidu   s
   
z Extensions.get_extension_for_oidextclass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.rg   rh   )UnrecognizedExtension	TypeErrorr$   valuer[   rJ   )r=   rk   ri   r3   r3   r4   get_extension_for_class~   s   z"Extensions.get_extension_for_classre   r7   c                 C     d| j  dS )Nz<Extensions()>)re   r<   r3   r3   r4   __repr__   r@   zExtensions.__repr__N)ra   rb   r!   rK   )rJ   r   r!   rf   )rk   rl   r!   rm   r!   r7   )rV   rW   rX   rO   rj   rq   rF   __len____iter____getitem__rt   r3   r3   r3   r4   r`   o   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 )	CRLNumber
crl_numberr8   r!   rK   c                 C     t |ts	td|| _d S Nzcrl_number must be an integerr$   r8   ro   _crl_numberr=   rz   r3   r3   r4   rO         

zCRLNumber.__init__otherobjectboolc                 C     t |tstS | j|jkS r#   )r$   ry   NotImplementedrz   r=   r   r3   r3   r4   __eq__      
zCRLNumber.__eq__c                 C  
   t | jS r#   hashrz   r<   r3   r3   r4   __hash__      
zCRLNumber.__hash__r7   c                 C  rr   )Nz<CRLNumber(rs   rz   r<   r3   r3   r4   rt      r@   zCRLNumber.__repr__c                 C     | j S r#   r~   r<   r3   r3   r4   rz         zCRLNumber.crl_numberr"   c                 C  
   t | S r#   	rust_x509encode_extension_valuer<   r3   r3   r4   r%      r   zCRLNumber.public_bytesNrz   r8   r!   rK   r   r   r!   r   rE   ru   r]   )rV   rW   rX   r   
CRL_NUMBERrJ   rO   r   r   rt   propertyrz   r%   r3   r3   r3   r4   ry          



ry   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bytes | Noneauthority_cert_issuer#typing.Iterable[GeneralName] | Noneauthority_cert_serial_number
int | Noner!   rK   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xr3   r3   r4   	<genexpr>       

z2AuthorityKeyIdentifier.__init__.<locals>.<genexpr>z;authority_cert_issuer must be a list of GeneralName objectsz/authority_cert_serial_number must be an integer)	
ValueErrorrd   allro   r$   r8   _key_identifier_authority_cert_issuer_authority_cert_serial_number)r=   r   r   r   r3   r3   r4   rO      s*   

zAuthorityKeyIdentifier.__init__r    r
   c                 C  s   t |}| |d d dS Nr   r   r   r5   )clsr    r0   r3   r3   r4   from_issuer_public_key   s   z-AuthorityKeyIdentifier.from_issuer_public_keyskiSubjectKeyIdentifierc                 C  s   | |j d d dS r   r0   )r   r   r3   r3   r4   "from_issuer_subject_key_identifier   s
   z9AuthorityKeyIdentifier.from_issuer_subject_key_identifierr7   c                 C  s   d| j d| j d| j dS )Nz'<AuthorityKeyIdentifier(key_identifier=z, authority_cert_issuer=z, authority_cert_serial_number=rs   r   r<   r3   r3   r4   rt         
zAuthorityKeyIdentifier.__repr__r   r   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   r3   r3   r4   r      s   

zAuthorityKeyIdentifier.__eq__r8   c                 C  s,   | j d u rd }nt| j }t| j|| jfS r#   )r   tupler   r   r   )r=   acir3   r3   r4   r     s   

zAuthorityKeyIdentifier.__hash__c                 C  r   r#   )r   r<   r3   r3   r4   r     r   z%AuthorityKeyIdentifier.key_identifierlist[GeneralName] | Nonec                 C  r   r#   )r   r<   r3   r3   r4   r        z,AuthorityKeyIdentifier.authority_cert_issuerc                 C  r   r#   )r   r<   r3   r3   r4   r     r   z3AuthorityKeyIdentifier.authority_cert_serial_numberr"   c                 C  r   r#   r   r<   r3   r3   r4   r%     r   z#AuthorityKeyIdentifier.public_bytesN)r   r   r   r   r   r   r!   rK   )r    r
   r!   r   )r   r   r!   r   ru   r   rE   r!   r   r!   r   r!   r   r]   )rV   rW   rX   r   AUTHORITY_KEY_IDENTIFIERrJ   rO   classmethodr   r   rt   r   r   r   r   r   r   r%   r3   r3   r3   r4   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   r0   r"   r!   rK   c                 C  s
   || _ d S r#   _digest)r=   r0   r3   r3   r4   rO   "  r   zSubjectKeyIdentifier.__init__r    r   c                 C  s   | t |S r#   r   )r   r    r3   r3   r4   from_public_key%  s   z$SubjectKeyIdentifier.from_public_keyc                 C  r   r#   r   r<   r3   r3   r4   r0   +  r   zSubjectKeyIdentifier.digestc                 C  r   r#   r   r<   r3   r3   r4   r   /  r   z#SubjectKeyIdentifier.key_identifierr7   c                 C     d| j dS )Nz<SubjectKeyIdentifier(digest=rs   r   r<   r3   r3   r4   rt   3  r@   zSubjectKeyIdentifier.__repr__r   r   r   c                 C  s   t |tstS t| j|jS r#   )r$   r   r   r   bytes_eqr0   r   r3   r3   r4   r   6  s   
zSubjectKeyIdentifier.__eq__r8   c                 C  r   r#   )r   r0   r<   r3   r3   r4   r   <  r   zSubjectKeyIdentifier.__hash__c                 C  r   r#   r   r<   r3   r3   r4   r%   ?  r   z!SubjectKeyIdentifier.public_bytesN)r0   r"   r!   rK   )r    r   r!   r   r]   ru   r   rE   )rV   rW   rX   r   SUBJECT_KEY_IDENTIFIERrJ   rO   r   r   r   r0   r   rt   r   r   r%   r3   r3   r3   r4   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!   rK   c                 C  ,   t |}tdd |D std|| _d S )Nc                 s  r   r#   r$   AccessDescriptionr   r3   r3   r4   r   J      z6AuthorityInformationAccess.__init__.<locals>.<genexpr>@Every item in the descriptions list must be an AccessDescriptionrd   r   ro   _descriptionsr=   r   r3   r3   r4   rO   F     
z#AuthorityInformationAccess.__init__r   r7   c                 C  rr   )Nz<AuthorityInformationAccess(rs   r   r<   r3   r3   r4   rt   T  r@   z#AuthorityInformationAccess.__repr__r   r   r   c                 C  r   r#   )r$   r   r   r   r   r3   r3   r4   r   W  r   z!AuthorityInformationAccess.__eq__r8   c                 C     t t| jS r#   r   r   r   r<   r3   r3   r4   r   ]  r@   z#AuthorityInformationAccess.__hash__r"   c                 C  r   r#   r   r<   r3   r3   r4   r%   `  r   z'AuthorityInformationAccess.public_bytesNr   r   r!   rK   ru   r   rE   r]   )rV   rW   rX   r   AUTHORITY_INFORMATION_ACCESSrJ   rO   rF   rv   rw   rx   rt   r   r   r%   r3   r3   r3   r4   r   C      



r   c                   @  r   )SubjectInformationAccessr   r   r!   rK   c                 C  r   )Nc                 s  r   r#   r   r   r3   r3   r4   r   k  r   z4SubjectInformationAccess.__init__.<locals>.<genexpr>r   r   r   r3   r3   r4   rO   g  r   z!SubjectInformationAccess.__init__r   r7   c                 C  rr   )Nz<SubjectInformationAccess(rs   r   r<   r3   r3   r4   rt   u  r@   z!SubjectInformationAccess.__repr__r   r   r   c                 C  r   r#   )r$   r   r   r   r   r3   r3   r4   r   x  r   zSubjectInformationAccess.__eq__r8   c                 C  r   r#   r   r<   r3   r3   r4   r   ~  r@   z!SubjectInformationAccess.__hash__r"   c                 C  r   r#   r   r<   r3   r3   r4   r%     r   z%SubjectInformationAccess.public_bytesNr   ru   r   rE   r]   )rV   rW   rX   r   SUBJECT_INFORMATION_ACCESSrJ   rO   rF   rv   rw   rx   rt   r   r   r%   r3   r3   r3   r4   r   d  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!   rK   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   ro   r   _access_method_access_location)r=   r   r   r3   r3   r4   rO     s   


zAccessDescription.__init__r7   c                 C     d| j  d| j dS )Nz!<AccessDescription(access_method=z, access_location=rs   )r   r   r<   r3   r3   r4   rt        
zAccessDescription.__repr__r   r   r   c                 C  &   t |tstS | j|jko| j|jkS r#   )r$   r   r   r   r   r   r3   r3   r4   r     
   

zAccessDescription.__eq__r8   c                 C     t | j| jfS r#   )r   r   r   r<   r3   r3   r4   r        zAccessDescription.__hash__c                 C  r   r#   )r   r<   r3   r3   r4   r     r   zAccessDescription.access_methodc                 C  r   r#   )r   r<   r3   r3   r4   r     r   z!AccessDescription.access_locationN)r   r   r   r   r!   rK   ru   r   rE   r!   r   )r!   r   )
rV   rW   rX   rO   rt   r   r   r   r   r   r3   r3   r3   r4   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!   rK   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   ro   r   r8   _ca_path_length)r=   r   r   r3   r3   r4   rO     s   

zBasicConstraints.__init__c                 C  r   r#   )r   r<   r3   r3   r4   r     r   zBasicConstraints.cac                 C  r   r#   )r   r<   r3   r3   r4   r     r   zBasicConstraints.path_lengthr7   c                 C  r   )Nz<BasicConstraints(ca=z, path_length=rs   )r   r   r<   r3   r3   r4   rt     r   zBasicConstraints.__repr__r   r   c                 C  r   r#   )r$   r   r   r   r   r   r3   r3   r4   r        
zBasicConstraints.__eq__r8   c                 C  r   r#   )r   r   r   r<   r3   r3   r4   r     r   zBasicConstraints.__hash__r"   c                 C  r   r#   r   r<   r3   r3   r4   r%     r   zBasicConstraints.public_bytesN)r   r   r   r   r!   rK   r!   r   r   ru   r   rE   r]   )rV   rW   rX   r   BASIC_CONSTRAINTSrJ   rO   r   r   r   rt   r   r   r%   r3   r3   r3   r4   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 )DeltaCRLIndicatorrz   r8   r!   rK   c                 C  r{   r|   r}   r   r3   r3   r4   rO     r   zDeltaCRLIndicator.__init__c                 C  r   r#   r   r<   r3   r3   r4   rz     r   zDeltaCRLIndicator.crl_numberr   r   r   c                 C  r   r#   )r$   r   r   rz   r   r3   r3   r4   r     r   zDeltaCRLIndicator.__eq__c                 C  r   r#   r   r<   r3   r3   r4   r     r   zDeltaCRLIndicator.__hash__r7   c                 C  rr   )Nz<DeltaCRLIndicator(crl_number=rs   r   r<   r3   r3   r4   rt     r@   zDeltaCRLIndicator.__repr__r"   c                 C  r   r#   r   r<   r3   r3   r4   r%     r   zDeltaCRLIndicator.public_bytesNr   rE   r   ru   r]   )rV   rW   rX   r   DELTA_CRL_INDICATORrJ   rO   r   rz   r   r   rt   r%   r3   r3   r3   r4   r     s    



r   c                   @  r   )CRLDistributionPointsdistribution_points"typing.Iterable[DistributionPoint]r!   rK   c                 C  r   )Nc                 s  r   r#   r$   DistributionPointr   r3   r3   r4   r      r   z1CRLDistributionPoints.__init__.<locals>.<genexpr>?distribution_points must be a list of DistributionPoint objectsrd   r   ro   _distribution_pointsr=   r   r3   r3   r4   rO        
zCRLDistributionPoints.__init__r   r7   c                 C  rr   )Nz<CRLDistributionPoints(rs   r   r<   r3   r3   r4   rt     r@   zCRLDistributionPoints.__repr__r   r   r   c                 C  r   r#   )r$   r   r   r   r   r3   r3   r4   r     r   zCRLDistributionPoints.__eq__r8   c                 C  r   r#   r   r   r   r<   r3   r3   r4   r     r@   zCRLDistributionPoints.__hash__r"   c                 C  r   r#   r   r<   r3   r3   r4   r%     r   z"CRLDistributionPoints.public_bytesNr   r   r!   rK   ru   r   rE   r]   )rV   rW   rX   r   CRL_DISTRIBUTION_POINTSrJ   rO   rF   rv   rw   rx   rt   r   r   r%   r3   r3   r3   r4   r         




r   c                   @  r   )FreshestCRLr   r   r!   rK   c                 C  r   )Nc                 s  r   r#   r   r   r3   r3   r4   r   %  r   z'FreshestCRL.__init__.<locals>.<genexpr>r   r   r   r3   r3   r4   rO   !  r   zFreshestCRL.__init__r   r7   c                 C  rr   )Nz<FreshestCRL(rs   r   r<   r3   r3   r4   rt   3  r@   zFreshestCRL.__repr__r   r   r   c                 C  r   r#   )r$   r  r   r   r   r3   r3   r4   r   6  r   zFreshestCRL.__eq__r8   c                 C  r   r#   r   r<   r3   r3   r4   r   <  r@   zFreshestCRL.__hash__r"   c                 C  r   r#   r   r<   r3   r3   r4   r%   ?  r   zFreshestCRL.public_bytesNr   ru   r   rE   r]   )rV   rW   rX   r   FRESHEST_CRLrJ   rO   rF   rv   rw   rx   rt   r   r   r%   r3   r3   r3   r4   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 RelativeDistinguishedName | Nonereasonsfrozenset[ReasonFlags] | None
crl_issuerr!   rK   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   r3   r3   r4   r   X  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   r3   r3   r4   r   e  r   z2crl_issuer must be None or a list of general namesc                 s  r   r#   r$   ReasonFlagsr   r3   r3   r4   r   l  r   z0reasons must be None or frozenset of ReasonFlagszLunspecified and remove_from_crl are not valid reasons in a DistributionPoint)r   rd   r   ro   r$   r   	frozensetr  unspecifiedremove_from_crl
_full_name_relative_name_reasons_crl_issuer)r=   r  r  r  r
  r3   r3   r4   rO   D  sR   



zDistributionPoint.__init__r7   c                 C  
   d | S )Nz}<DistributionPoint(full_name={0.full_name}, relative_name={0.relative_name}, reasons={0.reasons}, crl_issuer={0.crl_issuer})>formatr<   r3   r3   r4   rt   ~     zDistributionPoint.__repr__r   r   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   r3   r3   r4   r     s   



zDistributionPoint.__eq__r8   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  )r=   fnr
  r3   r3   r4   r     s   

zDistributionPoint.__hash__r   c                 C  r   r#   r  r<   r3   r3   r4   r    r   zDistributionPoint.full_namec                 C  r   r#   r  r<   r3   r3   r4   r    r   zDistributionPoint.relative_namec                 C  r   r#   )r  r<   r3   r3   r4   r    r   zDistributionPoint.reasonsc                 C  r   r#   )r  r<   r3   r3   r4   r
    r   zDistributionPoint.crl_issuerN)
r  r   r  r  r  r	  r
  r   r!   rK   ru   r   rE   r   r!   r  r!   r	  )rV   rW   rX   rO   rt   r   r   r   r  r  r  r
  r3   r3   r3   r4   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  keyCompromisecACompromiseaffiliationChanged
supersededcessationOfOperationcertificateHoldprivilegeWithdrawnaACompromiseremoveFromCRLN)rV   rW   rX   r  key_compromiseca_compromiseaffiliation_changedr   cessation_of_operationcertificate_holdprivilege_withdrawnaa_compromiser  r3   r3   r3   r4   r    s    r  )                        r-  r.  r/  r0  r1  r2  r3  r4  	   
   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!   rK   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$   r8   ro   r   _require_explicit_policy_inhibit_policy_mapping)r=   r8  r9  r3   r3   r4   rO     s$   


zPolicyConstraints.__init__r7   c                 C  r  )Nz{<PolicyConstraints(require_explicit_policy={0.require_explicit_policy}, inhibit_policy_mapping={0.inhibit_policy_mapping})>r  r<   r3   r3   r4   rt     r  zPolicyConstraints.__repr__r   r   r   c                 C  r   r#   )r$   r7  r   r8  r9  r   r3   r3   r4   r     r   zPolicyConstraints.__eq__r8   c                 C  r   r#   )r   r8  r9  r<   r3   r3   r4   r   '  s   
zPolicyConstraints.__hash__c                 C  r   r#   )r:  r<   r3   r3   r4   r8  ,  r   z)PolicyConstraints.require_explicit_policyc                 C  r   r#   )r;  r<   r3   r3   r4   r9  0  r   z(PolicyConstraints.inhibit_policy_mappingr"   c                 C  r   r#   r   r<   r3   r3   r4   r%   4  r   zPolicyConstraints.public_bytesN)r8  r   r9  r   r!   rK   ru   r   rE   r   r]   )rV   rW   rX   r   POLICY_CONSTRAINTSrJ   rO   rt   r   r   r   r8  r9  r%   r3   r3   r3   r4   r7    s    



	r7  c                   @  r   )CertificatePoliciespolicies"typing.Iterable[PolicyInformation]r!   rK   c                 C  r   )Nc                 s  r   r#   )r$   PolicyInformationr   r3   r3   r4   r   =  r   z/CertificatePolicies.__init__.<locals>.<genexpr>z;Every item in the policies list must be a PolicyInformation)rd   r   ro   	_policies)r=   r>  r3   r3   r4   rO   ;     
zCertificatePolicies.__init__rA  r7   c                 C  rr   )Nz<CertificatePolicies(rs   )rA  r<   r3   r3   r4   rt   G  r@   zCertificatePolicies.__repr__r   r   r   c                 C  r   r#   )r$   r=  r   rA  r   r3   r3   r4   r   J  r   zCertificatePolicies.__eq__r8   c                 C  r   r#   )r   r   rA  r<   r3   r3   r4   r   P  r@   zCertificatePolicies.__hash__r"   c                 C  r   r#   r   r<   r3   r3   r4   r%   S  r   z CertificatePolicies.public_bytesN)r>  r?  r!   rK   ru   r   rE   r]   )rV   rW   rX   r   CERTIFICATE_POLICIESrJ   rO   rF   rv   rw   rx   rt   r   r   r%   r3   r3   r3   r4   r=  8  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.Iterable[str | UserNotice] | Noner!   rK   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$   r7   
UserNoticer   r3   r3   r4   r   d  s    
z-PolicyInformation.__init__.<locals>.<genexpr>zMpolicy_qualifiers must be a list of strings and/or UserNotice objects or None)r$   r   ro   _policy_identifierrd   r   _policy_qualifiers)r=   rE  rF  r3   r3   r4   rO   X  s   

zPolicyInformation.__init__r7   c                 C  r   )Nz%<PolicyInformation(policy_identifier=z, policy_qualifiers=rs   )rE  rF  r<   r3   r3   r4   rt   n  r   zPolicyInformation.__repr__r   r   r   c                 C  r   r#   )r$   r@  r   rE  rF  r   r3   r3   r4   r   t  r   zPolicyInformation.__eq__r8   c                 C  s(   | j d urt| j }nd }t| j|fS r#   )rF  r   r   rE  )r=   pqr3   r3   r4   r   }  s   
zPolicyInformation.__hash__c                 C  r   r#   )rI  r<   r3   r3   r4   rE    r   z#PolicyInformation.policy_identifierlist[str | UserNotice] | Nonec                 C  r   r#   )rJ  r<   r3   r3   r4   rF    r   z#PolicyInformation.policy_qualifiersN)rE  r   rF  rG  r!   rK   ru   r   rE   r   )r!   rL  )
rV   rW   rX   rO   rt   r   r   r   rE  rF  r3   r3   r3   r4   r@  W  s    



	r@  c                   @  r   )rH  notice_referenceNoticeReference | Noneexplicit_text
str | Noner!   rK   c                 C  s&   |rt |tstd|| _|| _d S )Nz2notice_reference must be None or a NoticeReference)r$   NoticeReferencero   _notice_reference_explicit_text)r=   rM  rO  r3   r3   r4   rO     s   
zUserNotice.__init__r7   c                 C     d| j  d| jdS )Nz<UserNotice(notice_reference=z, explicit_text=rs   )rM  rO  r<   r3   r3   r4   rt     r   zUserNotice.__repr__r   r   r   c                 C  r   r#   )r$   rH  r   rM  rO  r   r3   r3   r4   r     r   zUserNotice.__eq__r8   c                 C  r   r#   )r   rM  rO  r<   r3   r3   r4   r     r   zUserNotice.__hash__c                 C  r   r#   )rR  r<   r3   r3   r4   rM    r   zUserNotice.notice_referencec                 C  r   r#   )rS  r<   r3   r3   r4   rO    r   zUserNotice.explicit_textN)rM  rN  rO  rP  r!   rK   ru   r   rE   )r!   rN  r!   rP  )
rV   rW   rX   rO   rt   r   r   r   rM  rO  r3   r3   r3   r4   rH    s    



	rH  c                   @  rD  ) rQ  organizationrP  notice_numberstyping.Iterable[int]r!   rK   c                 C  s2   || _ t|}tdd |D std|| _d S )Nc                 s  r   r#   )r$   r8   r   r3   r3   r4   r     r   z+NoticeReference.__init__.<locals>.<genexpr>z)notice_numbers must be a list of integers)_organizationrd   r   ro   _notice_numbers)r=   rV  rW  r3   r3   r4   rO     s
   
zNoticeReference.__init__r7   c                 C  s   d| j d| j dS )Nz<NoticeReference(organization=z, notice_numbers=rs   )rV  rW  r<   r3   r3   r4   rt     r   zNoticeReference.__repr__r   r   r   c                 C  r   r#   )r$   rQ  r   rV  rW  r   r3   r3   r4   r     r   zNoticeReference.__eq__r8   c                 C     t | jt| jfS r#   )r   rV  r   rW  r<   r3   r3   r4   r        zNoticeReference.__hash__c                 C  r   r#   )rY  r<   r3   r3   r4   rV    r   zNoticeReference.organization	list[int]c                 C  r   r#   )rZ  r<   r3   r3   r4   rW    r   zNoticeReference.notice_numbersN)rV  rP  rW  rX  r!   rK   ru   r   rE   rU  )r!   r]  )
rV   rW   rX   rO   rt   r   r   r   rV  rW  r3   r3   r3   r4   rQ    r   rQ  c                   @  r   )ExtendedKeyUsageusages!typing.Iterable[ObjectIdentifier]r!   rK   c                 C  r   )Nc                 s  r   r#   r$   r   r   r3   r3   r4   r     r   z,ExtendedKeyUsage.__init__.<locals>.<genexpr>z9Every item in the usages list must be an ObjectIdentifier)rd   r   ro   _usages)r=   r_  r3   r3   r4   rO     s   
zExtendedKeyUsage.__init__rb  r7   c                 C  rr   )Nz<ExtendedKeyUsage(rs   )rb  r<   r3   r3   r4   rt     r@   zExtendedKeyUsage.__repr__r   r   r   c                 C  r   r#   )r$   r^  r   rb  r   r3   r3   r4   r     r   zExtendedKeyUsage.__eq__r8   c                 C  r   r#   )r   r   rb  r<   r3   r3   r4   r     r@   zExtendedKeyUsage.__hash__r"   c                 C  r   r#   r   r<   r3   r3   r4   r%     r   zExtendedKeyUsage.public_bytesN)r_  r`  r!   rK   ru   r   rE   r]   )rV   rW   rX   r   EXTENDED_KEY_USAGErJ   rO   rF   rv   rw   rx   rt   r   r   r%   r3   r3   r3   r4   r^    s    
	


r^  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 )OCSPNoCheckr   r   r!   r   c                 C     t |tstS dS NT)r$   re  r   r   r3   r3   r4   r        
zOCSPNoCheck.__eq__r8   c                 C     t tS r#   )r   re  r<   r3   r3   r4   r   
     zOCSPNoCheck.__hash__r7   c                 C     dS )Nz<OCSPNoCheck()>r3   r<   r3   r3   r4   rt        zOCSPNoCheck.__repr__r"   c                 C  r   r#   r   r<   r3   r3   r4   r%     r   zOCSPNoCheck.public_bytesNr   rE   ru   r]   )
rV   rW   rX   r   OCSP_NO_CHECKrJ   r   r   rt   r%   r3   r3   r3   r4   re        


re  c                   @  rd  )PrecertPoisonr   r   r!   r   c                 C  rf  rg  )r$   ro  r   r   r3   r3   r4   r     rh  zPrecertPoison.__eq__r8   c                 C  ri  r#   )r   ro  r<   r3   r3   r4   r     rj  zPrecertPoison.__hash__r7   c                 C  rk  )Nz<PrecertPoison()>r3   r<   r3   r3   r4   rt      rl  zPrecertPoison.__repr__r"   c                 C  r   r#   r   r<   r3   r3   r4   r%   #  r   zPrecertPoison.public_bytesNr   rE   ru   r]   )
rV   rW   rX   r   PRECERT_POISONrJ   r   r   rt   r%   r3   r3   r3   r4   ro    rn  ro  c                   @  r   )
TLSFeaturefeaturestyping.Iterable[TLSFeatureType]r!   rK   c                 C  s8   t |}tdd |D rt|dkrtd|| _d S )Nc                 s  r   r#   )r$   TLSFeatureTyper   r3   r3   r4   r   -  r   z&TLSFeature.__init__.<locals>.<genexpr>r   z@features must be a list of elements from the TLSFeatureType enum)rd   r   r:   ro   	_features)r=   rr  r3   r3   r4   rO   *  s   
zTLSFeature.__init__ru  r7   c                 C  rr   )Nz<TLSFeature(features=rs   )ru  r<   r3   r3   r4   rt   9  r@   zTLSFeature.__repr__r   r   r   c                 C  r   r#   )r$   rq  r   ru  r   r3   r3   r4   r   <  r   zTLSFeature.__eq__r8   c                 C  r   r#   )r   r   ru  r<   r3   r3   r4   r   B  r@   zTLSFeature.__hash__r"   c                 C  r   r#   r   r<   r3   r3   r4   r%   E  r   zTLSFeature.public_bytesN)rr  rs  r!   rK   ru   r   rE   r]   )rV   rW   rX   r   TLS_FEATURErJ   rO   rF   rv   rw   rx   rt   r   r   r%   r3   r3   r3   r4   rq  '  s    



rq  c                   @  s   e Zd ZdZdZdS )rt  r1     N)rV   rW   rX   status_requeststatus_request_v2r3   r3   r3   r4   rt  I  s    rt  c                 C  s   i | ]}|j |qS r3   rp   r   r3   r3   r4   
<dictcomp>T      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 )InhibitAnyPolicy
skip_certsr8   r!   rK   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$   r8   ro   r   _skip_certs)r=   r~  r3   r3   r4   rO   Z  s
   

zInhibitAnyPolicy.__init__r7   c                 C  rr   )Nz<InhibitAnyPolicy(skip_certs=rs   )r~  r<   r3   r3   r4   rt   c  r@   zInhibitAnyPolicy.__repr__r   r   r   c                 C  r   r#   )r$   r}  r   r~  r   r3   r3   r4   r   f  r   zInhibitAnyPolicy.__eq__c                 C  r   r#   )r   r~  r<   r3   r3   r4   r   l  r   zInhibitAnyPolicy.__hash__c                 C  r   r#   )r  r<   r3   r3   r4   r~  o  r   zInhibitAnyPolicy.skip_certsr"   c                 C  r   r#   r   r<   r3   r3   r4   r%   s  r   zInhibitAnyPolicy.public_bytesN)r~  r8   r!   rK   ru   r   rE   r]   )rV   rW   rX   r   INHIBIT_ANY_POLICYrJ   rO   rt   r   r   r   r~  r%   r3   r3   r3   r4   r}  W  s    

	

r}  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!   rK   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)
r=   r  r  r  r  r  r  r  r  r  r3   r3   r4   rO   z  s   
zKeyUsage.__init__c                 C  r   r#   )r  r<   r3   r3   r4   r    r   zKeyUsage.digital_signaturec                 C  r   r#   )r  r<   r3   r3   r4   r    r   zKeyUsage.content_commitmentc                 C  r   r#   )r  r<   r3   r3   r4   r    r   zKeyUsage.key_enciphermentc                 C  r   r#   )r  r<   r3   r3   r4   r    r   zKeyUsage.data_enciphermentc                 C  r   r#   )r  r<   r3   r3   r4   r    r   zKeyUsage.key_agreementc                 C  r   r#   )r  r<   r3   r3   r4   r    r   zKeyUsage.key_cert_signc                 C  r   r#   )r  r<   r3   r3   r4   r    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<   r3   r3   r4   r    
   zKeyUsage.encipher_onlyc                 C  r  )Nz7decipher_only is undefined unless key_agreement is true)r  r   r  r<   r3   r3   r4   r    r  zKeyUsage.decipher_onlyr7   c                 C  sv   z| j }| j}W n ty   d}d}Y nw d| j d| j d| j d| j d| j d| j d| j	 d	| d
| dS )NFz<KeyUsage(digital_signature=z, content_commitment=z, key_encipherment=z, data_encipherment=z, key_agreement=z, key_cert_sign=z, crl_sign=z, encipher_only=z, decipher_only=rs   )
r  r  r   r  r  r  r  r  r  r  )r=   r  r  r3   r3   r4   rt     s2   

zKeyUsage.__repr__r   r   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  r   r  r  r  r  r  r  r  r  r  r   r3   r3   r4   r     s&   








zKeyUsage.__eq__r8   c              
   C  s,   t | j| j| j| j| j| j| j| j| j	f	S r#   )
r   r  r  r  r  r  r  r  r  r  r<   r3   r3   r4   r     s   zKeyUsage.__hash__r"   c                 C  r   r#   r   r<   r3   r3   r4   r%     r   zKeyUsage.public_bytesN)r  r   r  r   r  r   r  r   r  r   r  r   r  r   r  r   r  r   r!   rK   r   ru   r   rE   r]   )rV   rW   rX   r   	KEY_USAGErJ   rO   r   r  r  r  r  r  r  r  r  r  rt   r   r   r%   r3   r3   r3   r4   r  w  s2    



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	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!   rK   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   r3   r3   r4   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   r3   r3   r4   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)rd   r   r   ro   _validate_tree_permitted_subtrees_excluded_subtrees)r=   r  r  r3   r3   r4   rO     s8   


zNameConstraints.__init__r   r   r   c                 C  r   r#   )r$   r  r   r  r  r   r3   r3   r4   r   )  r   zNameConstraints.__eq__treetyping.Iterable[GeneralName]c                 C  s   |  | | | d S r#   )_validate_ip_name_validate_dns_namer=   r  r3   r3   r4   r  2  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   rp   	ipaddressIPv4NetworkIPv6Networkr   namer3   r3   r4   r   7  s    

z4NameConstraints._validate_ip_name.<locals>.<genexpr>zGIPAddress name constraints must be an IPv4Network or IPv6Network object)anyro   r  r3   r3   r4   r  6  s   z!NameConstraints._validate_ip_namec                 C  r  )Nc                 s  s$    | ]}t |tod |jv V  qdS )*N)r$   r   rp   r  r3   r3   r4   r   D  s    
z5NameConstraints._validate_dns_name.<locals>.<genexpr>zDDNSName name constraints must not contain the '*' wildcard character)r  r   r  r3   r3   r4   r  C  s   z"NameConstraints._validate_dns_namer7   c                 C  r   )Nz$<NameConstraints(permitted_subtrees=z, excluded_subtrees=rs   )r  r  r<   r3   r3   r4   rt   L  r   zNameConstraints.__repr__r8   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  r   )r=   psesr3   r3   r4   r   R  s   

zNameConstraints.__hash__r   c                 C  r   r#   )r  r<   r3   r3   r4   r  _  r   z"NameConstraints.permitted_subtreesc                 C  r   r#   )r  r<   r3   r3   r4   r  e  r   z!NameConstraints.excluded_subtreesr"   c                 C  r   r#   r   r<   r3   r3   r4   r%   k  r   zNameConstraints.public_bytesN)r  r   r  r   r!   rK   r   )r  r  r!   rK   ru   rE   r   r]   )rV   rW   rX   r   NAME_CONSTRAINTSrJ   rO   r   r  r  r  rt   r   r   r  r  r%   r3   r3   r3   r4   r    s    

*
	


	
r  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 )#	ExtensionrJ   r   criticalr   rp   r   r!   rK   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   ro   r   _oid	_critical_value)r=   rJ   r  rp   r3   r3   r4   rO   p  s   


zExtension.__init__c                 C  r   r#   r  r<   r3   r3   r4   rJ     r   zExtension.oidc                 C  r   r#   )r  r<   r3   r3   r4   r    r   zExtension.criticalc                 C  r   r#   r  r<   r3   r3   r4   rp     r   zExtension.valuer7   c                 C     d| j  d| j d| j dS )Nz<Extension(oid=z, critical=, value=rs   )rJ   r  rp   r<   r3   r3   r4   rt     s   zExtension.__repr__r   r   c                 C  r   r#   )r$   r  r   rJ   r  rp   r   r3   r3   r4   r        


zExtension.__eq__r8   c                 C     t | j| j| jfS r#   )r   rJ   r  rp   r<   r3   r3   r4   r     r\  zExtension.__hash__N)rJ   r   r  r   rp   r   r!   rK   r   r   )r!   r   ru   r   rE   )rV   rW   rX   rO   r   rJ   r  rp   rt   r   r   r3   r3   r3   r4   r  o  s    



r  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_namesr  r!   rK   c                 C  r   )Nc                 s  r   r#   r   r   r3   r3   r4   r     r   z(GeneralNames.__init__.<locals>.<genexpr>z^Every item in the general_names list must be an object conforming to the GeneralName interface)rd   r   ro   _general_namesr=   r  r3   r3   r4   rO     rB  zGeneralNames.__init__r  typeBtype[DNSName] | type[UniformResourceIdentifier] | type[RFC822Name]	list[str]c                 C     d S r#   r3   r=   r  r3   r3   r4   get_values_for_type     z GeneralNames.get_values_for_typetype[DirectoryName]
list[Name]c                 C  r  r#   r3   r  r3   r3   r4   r       type[RegisteredID]list[ObjectIdentifier]c                 C  r  r#   r3   r  r3   r3   r4   r    r  type[IPAddress]list[_IPAddressTypes]c                 C  r  r#   r3   r  r3   r3   r4   r       type[OtherName]list[OtherName]c                 C  r  r#   r3   r  r3   r3   r4   r    r  type[DNSName] | type[DirectoryName] | type[IPAddress] | type[OtherName] | type[RFC822Name] | type[RegisteredID] | type[UniformResourceIdentifier]Ylist[_IPAddressTypes] | list[str] | list[OtherName] | list[Name] | list[ObjectIdentifier]c                   s0    fdd| D } t krdd |D S t|S )Nc                 3  s    | ]
}t | r|V  qd S r#   )r$   r   ir  r3   r4   r     s    z3GeneralNames.get_values_for_type.<locals>.<genexpr>c                 S  s   g | ]}|j qS r3   rz  r  r3   r3   r4   
<listcomp>  s    z4GeneralNames.get_values_for_type.<locals>.<listcomp>)r   rd   )r=   r  objsr3   r  r4   r    s   r7   c                 C  rr   )Nz<GeneralNames(rs   r  r<   r3   r3   r4   rt     r@   zGeneralNames.__repr__r   r   r   c                 C  r   r#   )r$   r  r   r  r   r3   r3   r4   r     r   zGeneralNames.__eq__r8   c                 C  r   r#   )r   r   r  r<   r3   r3   r4   r     r@   zGeneralNames.__hash__Nr  r  r!   rK   r  r  r!   r  r  r  r!   r  r  r  r!   r  r  r  r!   r  r  r  r!   r  r  r  r!   r  ru   r   rE   )rV   rW   rX   rO   rF   rv   rw   rx   typingoverloadr  rt   r   r   r3   r3   r3   r4   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  r  r!   rK   c                 C  rc   r#   r  r  r  r3   r3   r4   rO     r@   zSubjectAlternativeName.__init__r  r  r  r  c                 C  r  r#   r3   r  r3   r3   r4   r    r  z*SubjectAlternativeName.get_values_for_typer  r  c                 C  r  r#   r3   r  r3   r3   r4   r    r  r  r  c                 C  r  r#   r3   r  r3   r3   r4   r    r  r  r  c                 C  r  r#   r3   r  r3   r3   r4   r    r  r  r  c                 C  r  r#   r3   r  r3   r3   r4   r    r  r  r  c                 C     | j |S r#   r  r  r  r3   r3   r4   r       r7   c                 C  rr   )Nz<SubjectAlternativeName(rs   r  r<   r3   r3   r4   rt   '  r@   zSubjectAlternativeName.__repr__r   r   r   c                 C  r   r#   )r$   r  r   r  r   r3   r3   r4   r   *  r   zSubjectAlternativeName.__eq__r8   c                 C  r   r#   r   r  r<   r3   r3   r4   r   0  r   zSubjectAlternativeName.__hash__r"   c                 C  r   r#   r   r<   r3   r3   r4   r%   3  r   z#SubjectAlternativeName.public_bytesNr  r  r  r  r  r  r  ru   r   rE   r]   )rV   rW   rX   r   SUBJECT_ALTERNATIVE_NAMErJ   rO   rF   rv   rw   rx   r  r  r  rt   r   r   r%   r3   r3   r3   r4   r    &    




r  c                   @  r  )6IssuerAlternativeNamer  r  r!   rK   c                 C  rc   r#   r  r  r3   r3   r4   rO   :  r@   zIssuerAlternativeName.__init__r  r  r  r  c                 C  r  r#   r3   r  r3   r3   r4   r  ?  r  z)IssuerAlternativeName.get_values_for_typer  r  c                 C  r  r#   r3   r  r3   r3   r4   r  G  r  r  r  c                 C  r  r#   r3   r  r3   r3   r4   r  M  r  r  r  c                 C  r  r#   r3   r  r3   r3   r4   r  S  r  r  r  c                 C  r  r#   r3   r  r3   r3   r4   r  X  r  r  r  c                 C  r  r#   r  r  r3   r3   r4   r  ]  r  r7   c                 C  rr   )Nz<IssuerAlternativeName(rs   r  r<   r3   r3   r4   rt   o  r@   zIssuerAlternativeName.__repr__r   r   r   c                 C  r   r#   )r$   r  r   r  r   r3   r3   r4   r   r  r   zIssuerAlternativeName.__eq__r8   c                 C  r   r#   r  r<   r3   r3   r4   r   x  r   zIssuerAlternativeName.__hash__r"   c                 C  r   r#   r   r<   r3   r3   r4   r%   {  r   z"IssuerAlternativeName.public_bytesNr  r  r  r  r  r  r  ru   r   rE   r]   )rV   rW   rX   r   ISSUER_ALTERNATIVE_NAMErJ   rO   rF   rv   rw   rx   r  r  r  rt   r   r   r%   r3   r3   r3   r4   r  7  r  r  c                   @  r  )6CertificateIssuerr  r  r!   rK   c                 C  rc   r#   r  r  r3   r3   r4   rO     r@   zCertificateIssuer.__init__r  r  r  r  c                 C  r  r#   r3   r  r3   r3   r4   r    r  z%CertificateIssuer.get_values_for_typer  r  c                 C  r  r#   r3   r  r3   r3   r4   r    r  r  r  c                 C  r  r#   r3   r  r3   r3   r4   r    r  r  r  c                 C  r  r#   r3   r  r3   r3   r4   r    r  r  r  c                 C  r  r#   r3   r  r3   r3   r4   r    r  r  r  c                 C  r  r#   r  r  r3   r3   r4   r    r  r7   c                 C  rr   )Nz<CertificateIssuer(rs   r  r<   r3   r3   r4   rt     r@   zCertificateIssuer.__repr__r   r   r   c                 C  r   r#   )r$   r  r   r  r   r3   r3   r4   r     r   zCertificateIssuer.__eq__r8   c                 C  r   r#   r  r<   r3   r3   r4   r     r   zCertificateIssuer.__hash__r"   c                 C  r   r#   r   r<   r3   r3   r4   r%     r   zCertificateIssuer.public_bytesNr  r  r  r  r  r  r  ru   r   rE   r]   )rV   rW   rX   r   CERTIFICATE_ISSUERrJ   rO   rF   rv   rw   rx   r  r  r  rt   r   r   r%   r3   r3   r3   r4   r    r  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 )	CRLReasonreasonr  r!   rK   c                 C  r{   )Nz*reason must be an element from ReasonFlags)r$   r  ro   _reason)r=   r  r3   r3   r4   rO     r   zCRLReason.__init__r7   c                 C  rr   )Nz<CRLReason(reason=rs   r  r<   r3   r3   r4   rt     r@   zCRLReason.__repr__r   r   r   c                 C  r   r#   )r$   r  r   r  r   r3   r3   r4   r     r   zCRLReason.__eq__r8   c                 C  r   r#   )r   r  r<   r3   r3   r4   r     r   zCRLReason.__hash__c                 C  r   r#   r  r<   r3   r3   r4   r    r   zCRLReason.reasonr"   c                 C  r   r#   r   r<   r3   r3   r4   r%     r   zCRLReason.public_bytesN)r  r  r!   rK   ru   r   rE   )r!   r  r]   )rV   rW   rX   r   
CRL_REASONrJ   rO   rt   r   r   r   r  r%   r3   r3   r3   r4   r    s    



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 ) InvalidityDateinvalidity_datedatetime.datetimer!   rK   c                 C  s   t |tjs
td|| _d S )Nz+invalidity_date must be a datetime.datetime)r$   datetimero   _invalidity_date)r=   r  r3   r3   r4   rO     s   
zInvalidityDate.__init__r7   c                 C  rr   )Nz <InvalidityDate(invalidity_date=rs   r  r<   r3   r3   r4   rt     r@   zInvalidityDate.__repr__r   r   r   c                 C  r   r#   )r$   r  r   r  r   r3   r3   r4   r     r   zInvalidityDate.__eq__r8   c                 C  r   r#   )r   r  r<   r3   r3   r4   r     r   zInvalidityDate.__hash__c                 C  r   r#   r  r<   r3   r3   r4   r    r   zInvalidityDate.invalidity_datec                 C  s0   | j jd u r| j jtjjdS | j jtjjdS )N)tzinfo)tz)r  r  replacer  timezoneutc
astimezoner<   r3   r3   r4   invalidity_date_utc  s   z"InvalidityDate.invalidity_date_utcr"   c                 C  r   r#   r   r<   r3   r3   r4   r%     r   zInvalidityDate.public_bytesN)r  r  r!   rK   ru   r   rE   )r!   r  r]   )rV   rW   rX   r   INVALIDITY_DATErJ   rO   rt   r   r   r   r  r  r%   r3   r3   r3   r4   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!   rK   c                 C  r   )Nc                 s  r   r#   r$   r   r   sctr3   r3   r4   r     
    
zEPrecertificateSignedCertificateTimestamps.__init__.<locals>.<genexpr>YEvery item in the signed_certificate_timestamps list must be a SignedCertificateTimestamprd   r   ro   _signed_certificate_timestampsr=   r   r3   r3   r4   rO        
z2PrecertificateSignedCertificateTimestamps.__init__r  r7   c                 C     dt |  dS )Nz+<PrecertificateSignedCertificateTimestamps(rs   rd   r<   r3   r3   r4   rt      r   z2PrecertificateSignedCertificateTimestamps.__repr__r8   c                 C  r   r#   r   r   r  r<   r3   r3   r4   r   #  r@   z2PrecertificateSignedCertificateTimestamps.__hash__r   r   r   c                 C  r   r#   )r$   r  r   r  r   r3   r3   r4   r   &     
z0PrecertificateSignedCertificateTimestamps.__eq__r"   c                 C  r   r#   r   r<   r3   r3   r4   r%   /  r   z6PrecertificateSignedCertificateTimestamps.public_bytesNr   r  r!   rK   ru   rE   r   r]   )rV   rW   rX   r   %PRECERT_SIGNED_CERTIFICATE_TIMESTAMPSrJ   rO   rF   rv   rw   rx   rt   r   r   r%   r3   r3   r3   r4   r        




	r  c                   @  r  )SignedCertificateTimestampsr   r  r!   rK   c                 C  r   )Nc                 s  r   r#   r  r  r3   r3   r4   r   =  r  z7SignedCertificateTimestamps.__init__.<locals>.<genexpr>r  r  r	  r3   r3   r4   rO   6  r
  z$SignedCertificateTimestamps.__init__r  r7   c                 C  r  )Nz<SignedCertificateTimestamps(rs   r  r<   r3   r3   r4   rt   K  r   z$SignedCertificateTimestamps.__repr__r8   c                 C  r   r#   r  r<   r3   r3   r4   r   N  r@   z$SignedCertificateTimestamps.__hash__r   r   r   c                 C  r   r#   )r$   r  r   r  r   r3   r3   r4   r   Q  r  z"SignedCertificateTimestamps.__eq__r"   c                 C  r   r#   r   r<   r3   r3   r4   r%   Z  r   z(SignedCertificateTimestamps.public_bytesNr  ru   rE   r   r]   )rV   rW   rX   r   SIGNED_CERTIFICATE_TIMESTAMPSrJ   rO   rF   rv   rw   rx   rt   r   r   r%   r3   r3   r3   r4   r  3  r  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!   rK   c                 C  r{   )Nznonce must be bytes)r$   r"   ro   _nonce)r=   r  r3   r3   r4   rO   a  r   zOCSPNonce.__init__r   r   r   c                 C  r   r#   )r$   r  r   r  r   r3   r3   r4   r   g  r   zOCSPNonce.__eq__r8   c                 C  r   r#   )r   r  r<   r3   r3   r4   r   m  r   zOCSPNonce.__hash__r7   c                 C  r   )Nz<OCSPNonce(nonce=rs   )r  r<   r3   r3   r4   rt   p  r@   zOCSPNonce.__repr__c                 C  r   r#   )r  r<   r3   r3   r4   r  s  r   zOCSPNonce.noncec                 C  r   r#   r   r<   r3   r3   r4   r%   w  r   zOCSPNonce.public_bytesN)r  r"   r!   rK   r   rE   ru   r]   )rV   rW   rX   r   NONCErJ   rO   r   r   rt   r   r  r%   r3   r3   r3   r4   r  ^  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	responsesr`  r!   rK   c                 C  s,   t |}tdd |D rtd|| _d S )Nc                 s  s    | ]	}t |t V  qd S r#   ra  )r   rr3   r3   r4   r     s    z3OCSPAcceptableResponses.__init__.<locals>.<genexpr>z'All responses must be ObjectIdentifiers)rd   r  ro   
_responses)r=   r  r3   r3   r4   rO   ~  s   
z OCSPAcceptableResponses.__init__r   r   r   c                 C  r   r#   )r$   r  r   r  r   r3   r3   r4   r     r   zOCSPAcceptableResponses.__eq__r8   c                 C  r   r#   )r   r   r  r<   r3   r3   r4   r     r@   z OCSPAcceptableResponses.__hash__r7   c                 C  rr   )Nz#<OCSPAcceptableResponses(responses=rs   )r  r<   r3   r3   r4   rt     r@   z OCSPAcceptableResponses.__repr__!typing.Iterator[ObjectIdentifier]c                 C  r   r#   )rA   r  r<   r3   r3   r4   rw     r   z OCSPAcceptableResponses.__iter__r"   c                 C  r   r#   r   r<   r3   r3   r4   r%     r   z$OCSPAcceptableResponses.public_bytesN)r  r`  r!   rK   r   rE   ru   )r!   r  r]   )rV   rW   rX   r   ACCEPTABLE_RESPONSESrJ   rO   r   r   rt   rw   r%   r3   r3   r3   r4   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!   rK   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rXtd	t|||||||gsgtd
|| _|| _|| _|| _|| _|| _|| _d S )Nc                 s  r   r#   r  r   r3   r3   r4   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 r3   r3   r   r3   r3   r4   r    r|  z5IssuingDistributionPoint.__init__.<locals>.<listcomp>r-  z}Only one of the following can be set to True: only_contains_user_certs, only_contains_ca_certs, 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.)rd   r$   r  r   ro   r  r  r  r   r   r:   r  _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#  crl_constraintsr3   r3   r4   rO     sn   




z!IssuingDistributionPoint.__init__r7   c                 C  s>   d| j  d| j d| j d| j d| j d| j d| j dS )	Nz$<IssuingDistributionPoint(full_name=z, relative_name=z, only_contains_user_certs=z, only_contains_ca_certs=z, only_some_reasons=z, indirect_crl=z , only_contains_attribute_certs=rs   )r  r  r  r   r!  r"  r#  r<   r3   r3   r4   rt     s   
z!IssuingDistributionPoint.__repr__r   r   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   r3   r3   r4   r     s"   





zIssuingDistributionPoint.__eq__r8   c                 C  s$   t | j| j| j| j| j| j| jfS r#   )r   r  r  r  r   r!  r"  r#  r<   r3   r3   r4   r     s   z!IssuingDistributionPoint.__hash__r   c                 C  r   r#   r  r<   r3   r3   r4   r    r   z"IssuingDistributionPoint.full_namec                 C  r   r#   r  r<   r3   r3   r4   r    r   z&IssuingDistributionPoint.relative_namec                 C  r   r#   )r$  r<   r3   r3   r4   r     r   z1IssuingDistributionPoint.only_contains_user_certsc                 C  r   r#   )r%  r<   r3   r3   r4   r   $  r   z/IssuingDistributionPoint.only_contains_ca_certsc                 C  r   r#   )r(  r<   r3   r3   r4   r!  (  r   z*IssuingDistributionPoint.only_some_reasonsc                 C  r   r#   )r&  r<   r3   r3   r4   r"  .  r   z%IssuingDistributionPoint.indirect_crlc                 C  r   r#   )r'  r<   r3   r3   r4   r#  2  r   z6IssuingDistributionPoint.only_contains_attribute_certsr"   c                 C  r   r#   r   r<   r3   r3   r4   r%   6  r   z%IssuingDistributionPoint.public_bytesN)r  r   r  r  r  r   r   r   r!  r	  r"  r   r#  r   r!   rK   ru   r   rE   r   r  r   r  r]   )rV   rW   rX   r   ISSUING_DISTRIBUTION_POINTrJ   rO   rt   r   r   r   r  r  r  r   r!  r"  r#  r%   r3   r3   r3   r4   r    s*    

U

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!   rK   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   ro   _template_idr8   _major_version_minor_version)r=   r,  r-  r.  r3   r3   r4   rO   =  s   

zMSCertificateTemplate.__init__c                 C  r   r#   )r0  r<   r3   r3   r4   r,  Q  r   z!MSCertificateTemplate.template_idc                 C  r   r#   )r1  r<   r3   r3   r4   r-  U  r   z#MSCertificateTemplate.major_versionc                 C  r   r#   )r2  r<   r3   r3   r4   r.  Y  r   z#MSCertificateTemplate.minor_versionr7   c                 C  r  )Nz#<MSCertificateTemplate(template_id=z, major_version=z, minor_version=rs   )r,  r-  r.  r<   r3   r3   r4   rt   ]  r   zMSCertificateTemplate.__repr__r   r   r   c                 C  r   r#   )r$   r+  r   r,  r-  r.  r   r3   r3   r4   r   d  r  zMSCertificateTemplate.__eq__r8   c                 C  r  r#   )r   r,  r-  r.  r<   r3   r3   r4   r   n  r\  zMSCertificateTemplate.__hash__r"   c                 C  r   r#   r   r<   r3   r3   r4   r%   q  r   z"MSCertificateTemplate.public_bytesN)r,  r   r-  r   r.  r   r!   rK   r   r   ru   r   rE   r]   )rV   rW   rX   r   MS_CERTIFICATE_TEMPLATErJ   rO   r   r,  r-  r.  rt   r   r   r%   r3   r3   r3   r4   r+  :  s    




r+  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 )"NamingAuthorityidObjectIdentifier | NoneurlrP  textr!   rK   c                 C  sd   |d urt |tstd|d urt |tstd|d ur't |ts'td|| _|| _|| _d S )Nzid must be an ObjectIdentifierzurl must be a strztext must be a str)r$   r   ro   r7   _id_url_text)r=   r5  r7  r8  r3   r3   r4   rO   v  s   
zNamingAuthority.__init__c                 C  r   r#   )r9  r<   r3   r3   r4   r5    r   zNamingAuthority.idc                 C  r   r#   )r:  r<   r3   r3   r4   r7    r   zNamingAuthority.urlc                 C  r   r#   )r;  r<   r3   r3   r4   r8    r   zNamingAuthority.textr7   c                 C  r  )Nz<NamingAuthority(id=z, url=z, text=rs   )r5  r7  r8  r<   r3   r3   r4   rt     s   zNamingAuthority.__repr__r   r   r   c                 C  r   r#   )r$   r4  r   r5  r7  r8  r   r3   r3   r4   r     r  zNamingAuthority.__eq__r8   c                 C  r  r#   )r   r5  r7  r8  r<   r3   r3   r4   r     s   zNamingAuthority.__hash__N)r5  r6  r7  rP  r8  rP  r!   rK   )r!   r6  rU  ru   r   rE   )rV   rW   rX   rO   r   r5  r7  r8  rt   r   r   r3   r3   r3   r4   r4  u  s    



r4  c                   @  sz   e Z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ed,ddZ	d-ddZ
d.d!d"Zd/d$d%Zd&S )0ProfessionInfonaming_authorityNamingAuthority | Noneprofession_itemstyping.Iterable[str]profession_oids(typing.Iterable[ObjectIdentifier] | Noneregistration_numberrP  add_profession_infor   r!   rK   c                 C  s   |d urt |tstdt|}tdd |D std|d ur3t|}tdd |D s3td|d ur@t |ts@td|d urMt |tsMtd|| _|| _|| _	|| _
|| _d S )	N*naming_authority must be a NamingAuthorityc                 s  r   r#   )r$   r7   )r   itemr3   r3   r4   r     r   z*ProfessionInfo.__init__.<locals>.<genexpr>z5Every item in the profession_items list must be a strc                 s  r   r#   ra  )r   rJ   r3   r3   r4   r     r   zBEvery item in the profession_oids list must be an ObjectIdentifierz!registration_number must be a strz!add_profession_info must be bytes)r$   r4  ro   rd   r   r7   r"   _naming_authority_profession_items_profession_oids_registration_number_add_profession_info)r=   r=  r?  rA  rC  rD  r3   r3   r4   rO     s<   



zProfessionInfo.__init__c                 C  r   r#   rG  r<   r3   r3   r4   r=    r   zProfessionInfo.naming_authorityr  c                 C  r   r#   )rH  r<   r3   r3   r4   r?    r   zProfessionInfo.profession_itemslist[ObjectIdentifier] | Nonec                 C  r   r#   )rI  r<   r3   r3   r4   rA    r   zProfessionInfo.profession_oidsc                 C  r   r#   )rJ  r<   r3   r3   r4   rC    r   z"ProfessionInfo.registration_numberc                 C  r   r#   )rK  r<   r3   r3   r4   rD    r   z"ProfessionInfo.add_profession_infor7   c                 C  s.   d| j  d| j d| j d| j d| jdS )Nz!<ProfessionInfo(naming_authority=z, profession_items=z, profession_oids=z, registration_number=z, add_profession_info=rs   )r=  r?  rA  rC  rD  r<   r3   r3   r4   rt     s   
zProfessionInfo.__repr__r   r   r   c                 C  sJ   t |tstS | j|jko$| j|jko$| j|jko$| j|jko$| j|jkS r#   )r$   r<  r   r=  r?  rA  rC  rD  r   r3   r3   r4   r     s   




zProfessionInfo.__eq__r8   c                 C  s8   | j d urt| j }nd }t| jt| j|| j| jfS r#   )rA  r   r   r=  r?  rC  rD  )r=   rA  r3   r3   r4   r   	  s   
zProfessionInfo.__hash__N)r=  r>  r?  r@  rA  rB  rC  rP  rD  r   r!   rK   r!   r>  )r!   r  )r!   rM  rU  r   ru   r   rE   )rV   rW   rX   rO   r   r=  r?  rA  rC  rD  rt   r   r   r3   r3   r3   r4   r<    s    
-

	r<  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 )%	Admissionadmission_authorityGeneralName | Noner=  r>  profession_infostyping.Iterable[ProfessionInfo]r!   rK   c                 C  sl   |d urt |tstd|d urt |tstdt|}tdd |D s+td|| _|| _|| _d S )Nz)admission_authority must be a GeneralNamerE  c                 s  r   r#   )r$   r<  )r   infor3   r3   r4   r   (	  r   z%Admission.__init__.<locals>.<genexpr>z@Every item in the profession_infos list must be a ProfessionInfo)	r$   r   ro   r4  rd   r   _admission_authorityrG  _profession_infos)r=   rP  r=  rR  r3   r3   r4   rO   	  s$   


zAdmission.__init__c                 C  r   r#   )rU  r<   r3   r3   r4   rP  4	  r   zAdmission.admission_authorityc                 C  r   r#   rL  r<   r3   r3   r4   r=  8	  r   zAdmission.naming_authoritylist[ProfessionInfo]c                 C  r   r#   )rV  r<   r3   r3   r4   rR  <	  r   zAdmission.profession_infosr7   c                 C  r  )Nz<Admission(admission_authority=z, naming_authority=z, profession_infos=rs   )rP  r=  rR  r<   r3   r3   r4   rt   @	  r   zAdmission.__repr__r   r   r   c                 C  r   r#   )r$   rO  r   rP  r=  rR  r   r3   r3   r4   r   G	  r  zAdmission.__eq__r8   c                 C  s   t | j| jt| jfS r#   )r   rP  r=  r   rR  r<   r3   r3   r4   r   Q	  s   zAdmission.__hash__N)rP  rQ  r=  r>  rR  rS  r!   rK   r!   rQ  rN  )r!   rW  ru   r   rE   )rV   rW   rX   rO   r   rP  r=  rR  rt   r   r   r3   r3   r3   r4   rO  	  s    



rO  c                   @  s`   e Zd ZejZdddZed	\ZZ	Z
edd
dZdddZdddZdddZd ddZdS )!
Admissions	authorityrQ  
admissionstyping.Iterable[Admission]r!   rK   c                 C  sL   |d urt |tstdt|}tdd |D std|| _|| _d S )Nzauthority must be a GeneralNamec                 s  r   r#   )r$   rO  )r   	admissionr3   r3   r4   r   g	  r   z&Admissions.__init__.<locals>.<genexpr>zBEvery item in the contents_of_admissions list must be an Admission)r$   r   ro   rd   r   
_authority_admissions)r=   rZ  r[  r3   r3   r4   rO   ^	  s   
zAdmissions.__init__r_  c                 C  r   r#   )r^  r<   r3   r3   r4   rZ  t	  r   zAdmissions.authorityr7   c                 C  r   )Nz<Admissions(authority=z, admissions=rs   )r^  r_  r<   r3   r3   r4   rt   x	  r   zAdmissions.__repr__r   r   r   c                 C  r   r#   )r$   rY  r   rZ  r_  r   r3   r3   r4   r   ~	  r   zAdmissions.__eq__r8   c                 C  r[  r#   )r   rZ  r   r_  r<   r3   r3   r4   r   	  r\  zAdmissions.__hash__r"   c                 C  r   r#   r   r<   r3   r3   r4   r%   	  r   zAdmissions.public_bytesN)rZ  rQ  r[  r\  r!   rK   rX  ru   r   rE   r]   )rV   rW   rX   r   
ADMISSIONSrJ   rO   rF   rv   rw   rx   r   rZ  rt   r   r   r%   r3   r3   r3   r4   rY  [	  s    



	rY  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 )!rn   rJ   r   rp   r"   r!   rK   c                 C  s"   t |ts	td|| _|| _d S )Nr/  )r$   r   ro   r  r  )r=   rJ   rp   r3   r3   r4   rO   	  s   

zUnrecognizedExtension.__init__c                 C  r   r#   r  r<   r3   r3   r4   rJ   	  r   zUnrecognizedExtension.oidc                 C  r   r#   r  r<   r3   r3   r4   rp   	  r   zUnrecognizedExtension.valuer7   c                 C  rT  )Nz<UnrecognizedExtension(oid=r  rs   )rJ   rp   r<   r3   r3   r4   rt   	  r   zUnrecognizedExtension.__repr__r   r   r   c                 C  r   r#   )r$   rn   r   rJ   rp   r   r3   r3   r4   r   	  r   zUnrecognizedExtension.__eq__r8   c                 C  r   r#   )r   rJ   rp   r<   r3   r3   r4   r   	  r   zUnrecognizedExtension.__hash__c                 C  r   r#   rz  r<   r3   r3   r4   r%   	  s   z"UnrecognizedExtension.public_bytesN)rJ   r   rp   r"   r!   rK   r   r]   ru   r   rE   )rV   rW   rX   rO   r   rJ   rp   rt   r   r   r%   r3   r3   r3   r4   rn   	  s    



rn   )r    r   r!   r"   )r6   r7   )p
__future__r   abcr  r.   r  r  cryptographyr   "cryptography.hazmat.bindings._rustr   r   r   cryptography.hazmat.primitivesr   r   ,cryptography.hazmat.primitives.asymmetric.ecr   -cryptography.hazmat.primitives.asymmetric.rsar	   /cryptography.hazmat.primitives.asymmetric.typesr
   r   *cryptography.x509.certificate_transparencyr   cryptography.x509.general_namer   r   r   r   r   r   r   r   r   cryptography.x509.namer   r   cryptography.x509.oidr   r   r   r   TypeVarr   r5   rF   	ExceptionrH   r[   ABCMetar   r`   ry   r   r   r   r   r   r   r   r   r  r   Enumr  r&  r'  r(  r   r)  r*  r+  r,  _REASON_BIT_MAPPING_CRLREASONFLAGSr  r  _CRL_ENTRY_REASON_ENUM_TO_CODEr7  r=  r@  rH  rQ  r^  re  ro  rq  rt  _TLS_FEATURE_TYPE_TO_ENUMr}  r  r  Genericr  r  r  r  r  r  r  r  r  r  r  r  r+  r4  r<  rO  rY  rn   r3   r3   r3   r4   <module>   s   ,

'l$!!(/%%kA9+("  s0PHHH$++ #;:gE3