B
    QUc$                 @   s  d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZ d dlm	Z
 d dlmZmZ d dlmZ d dlmZ d dlmZmZ d d	lmZ d d
lmZmZmZmZmZmZmZmZm Z  d dl!m"Z"m#Z# d dl$m%Z%m&Z&m'Z'm(Z( ej)ddddZ*ee+dddZ,e-dddZ.G dd de/Z0G dd de/Z1G dd de j2dZ3G dd dZ4G dd  d e3Z5G d!d" d"e3Z6G d#d$ d$e3Z7G d%d& d&e3Z8G d'd( d(e3Z9G d)d* d*Z:G d+d, d,e3Z;G d-d. d.e3Z<G d/d0 d0e3Z=G d1d2 d2e3Z>G d3d4 d4Z?G d5d6 d6ej@ZAeAjBeAjCeAjDeAjEeAjFeAjGeAjHeAjId7ZJeAjBd8eAjCd9eAjDd:eAjEd;eAjFd<eAjGd=eAjHd>eAjId?iZKG d@dA dAe3ZLG dBdC dCe3ZMG dDdE dEZNG dFdG dGZOG dHdI dIZPG dJdK dKe3ZQG dLdM dMe3ZRG dNdO dOe3ZSG dPdQ dQe3ZTG dRdS dSej@ZUdTdU eUD ZVG dVdW dWe3ZWG dXdY dYe3ZXG dZd[ d[e3ZYG d\d] d]ejZe* Z[G d^d_ d_Z\G d`da dae3Z]G dbdc dce3Z^G ddde dee3Z_G dfdg dge3Z`G dhdi die3ZaG djdk dke3ZbG dldm dme3ZcG dndo doe3ZdG dpdq dqe3ZeG drds dse3ZfdS )t    N)utils)asn1)x509)constant_timeserialization)EllipticCurvePublicKey)RSAPublicKey)#CERTIFICATE_ISSUER_PUBLIC_KEY_TYPESCERTIFICATE_PUBLIC_KEY_TYPES)SignedCertificateTimestamp)	DNSNameDirectoryNameGeneralName	IPAddress	OtherName
RFC822NameRegisteredIDUniformResourceIdentifier_IPADDRESS_TYPES)NameRelativeDistinguishedName)CRLEntryExtensionOIDExtensionOIDOCSPExtensionOIDObjectIdentifierExtensionTypeVarExtensionTypeT)ZboundZ	covariant)
public_keyreturnc             C   sl   t | tr | tjjtjj}n>t | tr@| tjj	tjj
}n| tjjtjj}t|}t| S )N)
isinstancer   public_bytesr   ZEncodingZDERZPublicFormatZPKCS1r   ZX962ZUncompressedPointZSubjectPublicKeyInfor   Zparse_spki_for_datahashlibZsha1digest)r   dataZ
serialized r$   ;lib/python3.7/site-packages/cryptography/x509/extensions.py_key_identifier_from_public_key1   s    



r&   )
field_namec                s4   t d fdd} fdd} fdd}|||fS )N)r   c                s   t t|  S )N)lengetattr)self)r'   r$   r%   
len_methodJ   s    z*_make_sequence_methods.<locals>.len_methodc                s   t t|  S )N)iterr)   )r*   )r'   r$   r%   iter_methodM   s    z+_make_sequence_methods.<locals>.iter_methodc                s   t |  | S )N)r)   )r*   idx)r'   r$   r%   getitem_methodP   s    z._make_sequence_methods.<locals>.getitem_method)int)r'   r+   r-   r/   r$   )r'   r%   _make_sequence_methodsI   s    r1   c                   s&   e Zd Zeedd fddZ  ZS )DuplicateExtensionN)msgoidr   c                s   t t| | || _d S )N)superr2   __init__r4   )r*   r3   r4   )	__class__r$   r%   r6   W   s    zDuplicateExtension.__init__)__name__
__module____qualname__strr   r6   __classcell__r$   r$   )r7   r%   r2   V   s   r2   c                   s&   e Zd Zeedd fddZ  ZS )ExtensionNotFoundN)r3   r4   r   c                s   t t| | || _d S )N)r5   r=   r6   r4   )r*   r3   r4   )r7   r$   r%   r6   ]   s    zExtensionNotFound.__init__)r8   r9   r:   r;   r   r6   r<   r$   r$   )r7   r%   r=   \   s   r=   c               @   s*   e Zd ZU eje ed< edddZdS )r   r4   )r   c             C   s   t d| dS )z7
        Serializes the extension type to DER.
        z8public_bytes is not implemented for extension type {0!r}N)NotImplementedErrorformat)r*   r$   r$   r%   r    e   s    zExtensionType.public_bytesN)	r8   r9   r:   typingZClassVarr   __annotations__bytesr    r$   r$   r$   r%   r   b   s   
)	metaclassc               @   sd   e Zd Zejd ddddZeddddZeje	 d	d
ddZ
ed\ZZZedddZdS )
ExtensionszExtension[ExtensionType]N)
extensionsr   c             C   s   t || _d S )N)list_extensions)r*   rE   r$   r$   r%   r6   q   s    zExtensions.__init__)r4   r   c             C   s0   x| D ]}|j |kr|S qW td||d S )NzNo {} extension was found)r4   r=   r?   )r*   r4   extr$   r$   r%   get_extension_for_oidv   s    

z Extensions.get_extension_for_oidzExtension[ExtensionTypeVar])extclassr   c             C   sD   |t krtdx| D ]}t|j|r|S qW td||jd S )Nz|UnrecognizedExtension can't be used with get_extension_for_class because more than one instance of the class may be present.zNo {} extension was found)UnrecognizedExtension	TypeErrorr   valuer=   r?   r4   )r*   rJ   rH   r$   r$   r%   get_extension_for_class   s    
z"Extensions.get_extension_for_classrG   )r   c             C   s   d | jS )Nz<Extensions({})>)r?   rG   )r*   r$   r$   r%   __repr__   s    zExtensions.__repr__)r8   r9   r:   r@   Iterabler6   r   rI   Typer   rN   r1   __len____iter____getitem__r;   rO   r$   r$   r$   r%   rD   p   s   rD   c               @   sn   e Zd ZejZeddddZee	dddZ
edd	d
ZedddZeedddZedddZdS )	CRLNumberN)
crl_numberr   c             C   s   t |tstd|| _d S )Nzcrl_number must be an integer)r   r0   rL   _crl_number)r*   rV   r$   r$   r%   r6      s    
zCRLNumber.__init__)otherr   c             C   s   t |tstS | j|jkS )N)r   rU   NotImplementedrV   )r*   rX   r$   r$   r%   __eq__   s    
zCRLNumber.__eq__)r   c             C   s
   t | jS )N)hashrV   )r*   r$   r$   r%   __hash__   s    zCRLNumber.__hash__c             C   s   d | jS )Nz<CRLNumber({})>)r?   rV   )r*   r$   r$   r%   rO      s    zCRLNumber.__repr__c             C   s   | j S )N)rW   )r*   r$   r$   r%   rV      s    zCRLNumber.crl_numberc             C   s
   t | S )N)	rust_x509encode_extension_value)r*   r$   r$   r%   r       s    zCRLNumber.public_bytes)r8   r9   r:   r   Z
CRL_NUMBERr4   r0   r6   objectboolrZ   r\   r;   rO   propertyrV   rB   r    r$   r$   r$   r%   rU      s   rU   c               @   s   e Zd ZejZeje ejej	e
  eje ddddZeed dddZedd d	d
dZedddZeedddZedddZeeje dddZeejeje
  dddZeeje dddZedddZdS )AuthorityKeyIdentifierN)key_identifierauthority_cert_issuerauthority_cert_serial_numberr   c             C   sr   |d k|d kkrt d|d k	rBt|}tdd |D sBtd|d k	r\t|ts\td|| _|| _|| _d S )NzXauthority_cert_issuer and authority_cert_serial_number must both be present or both Nonec             s   s   | ]}t |tV  qd S )N)r   r   ).0xr$   r$   r%   	<genexpr>   s    z2AuthorityKeyIdentifier.__init__.<locals>.<genexpr>z;authority_cert_issuer must be a list of GeneralName objectsz/authority_cert_serial_number must be an integer)	
ValueErrorrF   allrL   r   r0   _key_identifier_authority_cert_issuer_authority_cert_serial_number)r*   rc   rd   re   r$   r$   r%   r6      s     

zAuthorityKeyIdentifier.__init__)r   r   c             C   s   t |}| |d d dS )N)rc   rd   re   )r&   )clsr   r"   r$   r$   r%   from_issuer_public_key   s
    z-AuthorityKeyIdentifier.from_issuer_public_keySubjectKeyIdentifier)skir   c             C   s   | |j d d dS )N)rc   rd   re   )r"   )rn   rq   r$   r$   r%   "from_issuer_subject_key_identifier   s    z9AuthorityKeyIdentifier.from_issuer_subject_key_identifier)r   c             C   s
   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})>)r?   )r*   r$   r$   r%   rO      s    zAuthorityKeyIdentifier.__repr__)rX   r   c             C   s2   t |tstS | j|jko0| j|jko0| j|jkS )N)r   rb   rY   rc   rd   re   )r*   rX   r$   r$   r%   rZ      s    
zAuthorityKeyIdentifier.__eq__c             C   s,   | j d krd }n
t| j }t| j|| jfS )N)rd   tupler[   rc   re   )r*   Zacir$   r$   r%   r\     s
    

zAuthorityKeyIdentifier.__hash__c             C   s   | j S )N)rk   )r*   r$   r$   r%   rc     s    z%AuthorityKeyIdentifier.key_identifierc             C   s   | j S )N)rl   )r*   r$   r$   r%   rd     s    z,AuthorityKeyIdentifier.authority_cert_issuerc             C   s   | j S )N)rm   )r*   r$   r$   r%   re     s    z3AuthorityKeyIdentifier.authority_cert_serial_numberc             C   s
   t | S )N)r]   r^   )r*   r$   r$   r%   r      s    z#AuthorityKeyIdentifier.public_bytes)r8   r9   r:   r   ZAUTHORITY_KEY_IDENTIFIERr4   r@   OptionalrB   rP   r   r0   r6   classmethodr	   ro   rr   r;   rO   r_   r`   rZ   r\   ra   rc   Listrd   re   r    r$   r$   r$   r%   rb      s*   !	rb   c               @   s   e Zd ZejZeddddZee	d dddZ
eedd	d
ZeedddZedddZeedddZedddZedddZdS )rp   N)r"   r   c             C   s
   || _ d S )N)_digest)r*   r"   r$   r$   r%   r6   #  s    zSubjectKeyIdentifier.__init__)r   r   c             C   s   | t |S )N)r&   )rn   r   r$   r$   r%   from_public_key&  s    z$SubjectKeyIdentifier.from_public_key)r   c             C   s   | j S )N)rw   )r*   r$   r$   r%   r"   ,  s    zSubjectKeyIdentifier.digestc             C   s   | j S )N)rw   )r*   r$   r$   r%   rc   0  s    z#SubjectKeyIdentifier.key_identifierc             C   s   d | jS )Nz$<SubjectKeyIdentifier(digest={0!r})>)r?   r"   )r*   r$   r$   r%   rO   4  s    zSubjectKeyIdentifier.__repr__)rX   r   c             C   s   t |tstS t| j|jS )N)r   rp   rY   r   Zbytes_eqr"   )r*   rX   r$   r$   r%   rZ   7  s    
zSubjectKeyIdentifier.__eq__c             C   s
   t | jS )N)r[   r"   )r*   r$   r$   r%   r\   =  s    zSubjectKeyIdentifier.__hash__c             C   s
   t | S )N)r]   r^   )r*   r$   r$   r%   r    @  s    z!SubjectKeyIdentifier.public_bytes)r8   r9   r:   r   ZSUBJECT_KEY_IDENTIFIERr4   rB   r6   ru   r
   rx   ra   r"   rc   r;   rO   r_   r`   rZ   r0   r\   r    r$   r$   r$   r%   rp      s   rp   c               @   sp   e Zd ZejZejd ddddZe	d\Z
ZZeddd	Zeed
ddZedddZedddZdS )AuthorityInformationAccessAccessDescriptionN)descriptionsr   c             C   s,   t |}tdd |D s"td|| _d S )Nc             s   s   | ]}t |tV  qd S )N)r   rz   )rf   rg   r$   r$   r%   rh   K  s    z6AuthorityInformationAccess.__init__.<locals>.<genexpr>z@Every item in the descriptions list must be an AccessDescription)rF   rj   rL   _descriptions)r*   r{   r$   r$   r%   r6   G  s
    z#AuthorityInformationAccess.__init__r|   )r   c             C   s   d | jS )Nz <AuthorityInformationAccess({})>)r?   r|   )r*   r$   r$   r%   rO   U  s    z#AuthorityInformationAccess.__repr__)rX   r   c             C   s   t |tstS | j|jkS )N)r   ry   rY   r|   )r*   rX   r$   r$   r%   rZ   X  s    
z!AuthorityInformationAccess.__eq__c             C   s   t t| jS )N)r[   rs   r|   )r*   r$   r$   r%   r\   ^  s    z#AuthorityInformationAccess.__hash__c             C   s
   t | S )N)r]   r^   )r*   r$   r$   r%   r    a  s    z'AuthorityInformationAccess.public_bytes)r8   r9   r:   r   ZAUTHORITY_INFORMATION_ACCESSr4   r@   rP   r6   r1   rR   rS   rT   r;   rO   r_   r`   rZ   r0   r\   rB   r    r$   r$   r$   r%   ry   D  s   
ry   c               @   sp   e Zd ZejZejd ddddZe	d\Z
ZZeddd	Zeed
ddZedddZedddZdS )SubjectInformationAccessrz   N)r{   r   c             C   s,   t |}tdd |D s"td|| _d S )Nc             s   s   | ]}t |tV  qd S )N)r   rz   )rf   rg   r$   r$   r%   rh   l  s    z4SubjectInformationAccess.__init__.<locals>.<genexpr>z@Every item in the descriptions list must be an AccessDescription)rF   rj   rL   r|   )r*   r{   r$   r$   r%   r6   h  s
    z!SubjectInformationAccess.__init__r|   )r   c             C   s   d | jS )Nz<SubjectInformationAccess({})>)r?   r|   )r*   r$   r$   r%   rO   v  s    z!SubjectInformationAccess.__repr__)rX   r   c             C   s   t |tstS | j|jkS )N)r   r}   rY   r|   )r*   rX   r$   r$   r%   rZ   y  s    
zSubjectInformationAccess.__eq__c             C   s   t t| jS )N)r[   rs   r|   )r*   r$   r$   r%   r\     s    z!SubjectInformationAccess.__hash__c             C   s
   t | S )N)r]   r^   )r*   r$   r$   r%   r      s    z%SubjectInformationAccess.public_bytes)r8   r9   r:   r   ZSUBJECT_INFORMATION_ACCESSr4   r@   rP   r6   r1   rR   rS   rT   r;   rO   r_   r`   rZ   r0   r\   rB   r    r$   r$   r$   r%   r}   e  s   
r}   c               @   sn   e Zd ZeeddddZedddZee	dd	d
Z
edddZeedddZeedddZdS )rz   N)access_methodaccess_locationr   c             C   s4   t |tstdt |ts$td|| _|| _d S )Nz)access_method must be an ObjectIdentifierz%access_location must be a GeneralName)r   r   rL   r   _access_method_access_location)r*   r~   r   r$   r$   r%   r6     s    

zAccessDescription.__init__)r   c             C   s
   d | S )NzY<AccessDescription(access_method={0.access_method}, access_location={0.access_location})>)r?   )r*   r$   r$   r%   rO     s    zAccessDescription.__repr__)rX   r   c             C   s&   t |tstS | j|jko$| j|jkS )N)r   rz   rY   r~   r   )r*   rX   r$   r$   r%   rZ     s    
zAccessDescription.__eq__c             C   s   t | j| jfS )N)r[   r~   r   )r*   r$   r$   r%   r\     s    zAccessDescription.__hash__c             C   s   | j S )N)r   )r*   r$   r$   r%   r~     s    zAccessDescription.access_methodc             C   s   | j S )N)r   )r*   r$   r$   r%   r     s    z!AccessDescription.access_location)r8   r9   r:   r   r   r6   r;   rO   r_   r`   rZ   r0   r\   ra   r~   r   r$   r$   r$   r%   rz     s   
	rz   c               @   s   e Zd ZejZeeje	 ddddZ
eedddZeeje	 ddd	Zedd
dZeedddZe	dddZedddZdS )BasicConstraintsN)capath_lengthr   c             C   sX   t |tstd|d k	r&|s&td|d k	rHt |tr@|dk rHtd|| _|| _d S )Nzca must be a boolean valuez)path_length must be None when ca is Falser   z2path_length must be a non-negative integer or None)r   r`   rL   ri   r0   _ca_path_length)r*   r   r   r$   r$   r%   r6     s    
zBasicConstraints.__init__)r   c             C   s   | j S )N)r   )r*   r$   r$   r%   r     s    zBasicConstraints.cac             C   s   | j S )N)r   )r*   r$   r$   r%   r     s    zBasicConstraints.path_lengthc             C   s
   d | S )Nz:<BasicConstraints(ca={0.ca}, path_length={0.path_length})>)r?   )r*   r$   r$   r%   rO     s    zBasicConstraints.__repr__)rX   r   c             C   s&   t |tstS | j|jko$| j|jkS )N)r   r   rY   r   r   )r*   rX   r$   r$   r%   rZ     s    
zBasicConstraints.__eq__c             C   s   t | j| jfS )N)r[   r   r   )r*   r$   r$   r%   r\     s    zBasicConstraints.__hash__c             C   s
   t | S )N)r]   r^   )r*   r$   r$   r%   r      s    zBasicConstraints.public_bytes)r8   r9   r:   r   ZBASIC_CONSTRAINTSr4   r`   r@   rt   r0   r6   ra   r   r   r;   rO   r_   rZ   r\   rB   r    r$   r$   r$   r%   r     s   r   c               @   sn   e Zd ZejZeddddZeedddZ	e
edd	d
ZedddZedddZedddZdS )DeltaCRLIndicatorN)rV   r   c             C   s   t |tstd|| _d S )Nzcrl_number must be an integer)r   r0   rL   rW   )r*   rV   r$   r$   r%   r6     s    
zDeltaCRLIndicator.__init__)r   c             C   s   | j S )N)rW   )r*   r$   r$   r%   rV     s    zDeltaCRLIndicator.crl_number)rX   r   c             C   s   t |tstS | j|jkS )N)r   r   rY   rV   )r*   rX   r$   r$   r%   rZ     s    
zDeltaCRLIndicator.__eq__c             C   s
   t | jS )N)r[   rV   )r*   r$   r$   r%   r\     s    zDeltaCRLIndicator.__hash__c             C   s
   d | S )Nz.<DeltaCRLIndicator(crl_number={0.crl_number})>)r?   )r*   r$   r$   r%   rO     s    zDeltaCRLIndicator.__repr__c             C   s
   t | S )N)r]   r^   )r*   r$   r$   r%   r      s    zDeltaCRLIndicator.public_bytes)r8   r9   r:   r   ZDELTA_CRL_INDICATORr4   r0   r6   ra   rV   r_   r`   rZ   r\   r;   rO   rB   r    r$   r$   r$   r%   r     s   r   c               @   sp   e Zd ZejZejd ddddZe	d\Z
ZZeddd	Zeed
ddZedddZedddZdS )CRLDistributionPointsDistributionPointN)distribution_pointsr   c             C   s,   t |}tdd |D s"td|| _d S )Nc             s   s   | ]}t |tV  qd S )N)r   r   )rf   rg   r$   r$   r%   rh     s    z1CRLDistributionPoints.__init__.<locals>.<genexpr>z?distribution_points must be a list of DistributionPoint objects)rF   rj   rL   _distribution_points)r*   r   r$   r$   r%   r6     s    zCRLDistributionPoints.__init__r   )r   c             C   s   d | jS )Nz<CRLDistributionPoints({})>)r?   r   )r*   r$   r$   r%   rO     s    zCRLDistributionPoints.__repr__)rX   r   c             C   s   t |tstS | j|jkS )N)r   r   rY   r   )r*   rX   r$   r$   r%   rZ     s    
zCRLDistributionPoints.__eq__c             C   s   t t| jS )N)r[   rs   r   )r*   r$   r$   r%   r\     s    zCRLDistributionPoints.__hash__c             C   s
   t | S )N)r]   r^   )r*   r$   r$   r%   r      s    z"CRLDistributionPoints.public_bytes)r8   r9   r:   r   ZCRL_DISTRIBUTION_POINTSr4   r@   rP   r6   r1   rR   rS   rT   r;   rO   r_   r`   rZ   r0   r\   rB   r    r$   r$   r$   r%   r     s   r   c               @   sp   e Zd ZejZejd ddddZe	d\Z
ZZeddd	Zeed
ddZedddZedddZdS )FreshestCRLr   N)r   r   c             C   s,   t |}tdd |D s"td|| _d S )Nc             s   s   | ]}t |tV  qd S )N)r   r   )rf   rg   r$   r$   r%   rh   &  s    z'FreshestCRL.__init__.<locals>.<genexpr>z?distribution_points must be a list of DistributionPoint objects)rF   rj   rL   r   )r*   r   r$   r$   r%   r6   !  s    zFreshestCRL.__init__r   )r   c             C   s   d | jS )Nz<FreshestCRL({})>)r?   r   )r*   r$   r$   r%   rO   3  s    zFreshestCRL.__repr__)rX   r   c             C   s   t |tstS | j|jkS )N)r   r   rY   r   )r*   rX   r$   r$   r%   rZ   6  s    
zFreshestCRL.__eq__c             C   s   t t| jS )N)r[   rs   r   )r*   r$   r$   r%   r\   <  s    zFreshestCRL.__hash__c             C   s
   t | S )N)r]   r^   )r*   r$   r$   r%   r    ?  s    zFreshestCRL.public_bytes)r8   r9   r:   r   ZFRESHEST_CRLr4   r@   rP   r6   r1   rR   rS   rT   r;   rO   r_   r`   rZ   r0   r\   rB   r    r$   r$   r$   r%   r     s   r   c               @   s   e Zd Zejeje  eje ejejd  ejeje  ddddZ	e
dddZeed	d
dZedddZeejeje  dddZeeje dddZeejejd  dddZeejeje  dddZdS )r   ReasonFlagsN)	full_namerelative_namereasons
crl_issuerr   c             C   s   |r|rt d|d k	r:t|}tdd |D s:td|rPt|tsPtd|d k	rzt|}tdd |D sztd|rt|trtdd |D std	|rtj|kstj	|krt d
|r|s|s|st d|| _
|| _|| _|| _d S )NzOYou cannot provide both full_name and relative_name, at least one must be None.c             s   s   | ]}t |tV  qd S )N)r   r   )rf   rg   r$   r$   r%   rh   S  s    z-DistributionPoint.__init__.<locals>.<genexpr>z/full_name must be a list of GeneralName objectsz1relative_name must be a RelativeDistinguishedNamec             s   s   | ]}t |tV  qd S )N)r   r   )rf   rg   r$   r$   r%   rh   `  s    z2crl_issuer must be None or a list of general namesc             s   s   | ]}t |tV  qd S )N)r   r   )rf   rg   r$   r$   r%   rh   g  s    z0reasons must be None or frozenset of ReasonFlagszLunspecified and remove_from_crl are not valid reasons in a DistributionPointzPYou must supply crl_issuer, full_name, or relative_name when reasons is not None)ri   rF   rj   rL   r   r   	frozensetr   unspecifiedremove_from_crl
_full_name_relative_name_reasons_crl_issuer)r*   r   r   r   r   r$   r$   r%   r6   D  sB    



zDistributionPoint.__init__)r   c             C   s
   d | S )Nz}<DistributionPoint(full_name={0.full_name}, relative_name={0.relative_name}, reasons={0.reasons}, crl_issuer={0.crl_issuer})>)r?   )r*   r$   r$   r%   rO     s    zDistributionPoint.__repr__)rX   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 )N)r   r   rY   r   r   r   r   )r*   rX   r$   r$   r%   rZ     s    
zDistributionPoint.__eq__c             C   sH   | j d k	rt| j }nd }| jd k	r0t| j}nd }t|| j| j|fS )N)r   rs   r   r[   r   r   )r*   fnr   r$   r$   r%   r\     s    


zDistributionPoint.__hash__c             C   s   | j S )N)r   )r*   r$   r$   r%   r     s    zDistributionPoint.full_namec             C   s   | j S )N)r   )r*   r$   r$   r%   r     s    zDistributionPoint.relative_namec             C   s   | j S )N)r   )r*   r$   r$   r%   r     s    zDistributionPoint.reasonsc             C   s   | j S )N)r   )r*   r$   r$   r%   r     s    zDistributionPoint.crl_issuer)r8   r9   r:   r@   rt   rP   r   r   	FrozenSetr6   r;   rO   r_   r`   rZ   r0   r\   ra   rv   r   r   r   r   r$   r$   r$   r%   r   C  s    5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)r8   r9   r:   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eje eje ddddZ	e
dddZeedd	d
ZedddZeeje dddZeeje dddZedddZdS )PolicyConstraintsN)require_explicit_policyinhibit_policy_mappingr   c             C   s\   |d k	rt |tstd|d k	r4t |ts4td|d krL|d krLtd|| _|| _d S )Nz>require_explicit_policy must be a non-negative integer or Nonez=inhibit_policy_mapping must be a non-negative integer or NonezSAt least one of require_explicit_policy and inhibit_policy_mapping must not be None)r   r0   rL   ri   _require_explicit_policy_inhibit_policy_mapping)r*   r   r   r$   r$   r%   r6     s    

zPolicyConstraints.__init__)r   c             C   s
   d | S )Nz{<PolicyConstraints(require_explicit_policy={0.require_explicit_policy}, inhibit_policy_mapping={0.inhibit_policy_mapping})>)r?   )r*   r$   r$   r%   rO     s    zPolicyConstraints.__repr__)rX   r   c             C   s&   t |tstS | j|jko$| j|jkS )N)r   r   rY   r   r   )r*   rX   r$   r$   r%   rZ   
  s    
zPolicyConstraints.__eq__c             C   s   t | j| jfS )N)r[   r   r   )r*   r$   r$   r%   r\     s    zPolicyConstraints.__hash__c             C   s   | j S )N)r   )r*   r$   r$   r%   r     s    z)PolicyConstraints.require_explicit_policyc             C   s   | j S )N)r   )r*   r$   r$   r%   r     s    z(PolicyConstraints.inhibit_policy_mappingc             C   s
   t | S )N)r]   r^   )r*   r$   r$   r%   r       s    zPolicyConstraints.public_bytes)r8   r9   r:   r   ZPOLICY_CONSTRAINTSr4   r@   rt   r0   r6   r;   rO   r_   r`   rZ   r\   ra   r   r   rB   r    r$   r$   r$   r%   r     s   	r   c               @   sp   e Zd ZejZejd ddddZe	d\Z
ZZeddd	Zeed
ddZedddZedddZdS )CertificatePoliciesPolicyInformationN)policiesr   c             C   s,   t |}tdd |D s"td|| _d S )Nc             s   s   | ]}t |tV  qd S )N)r   r   )rf   rg   r$   r$   r%   rh   )  s    z/CertificatePolicies.__init__.<locals>.<genexpr>z;Every item in the policies list must be a PolicyInformation)rF   rj   rL   	_policies)r*   r   r$   r$   r%   r6   '  s
    zCertificatePolicies.__init__r   )r   c             C   s   d | jS )Nz<CertificatePolicies({})>)r?   r   )r*   r$   r$   r%   rO   3  s    zCertificatePolicies.__repr__)rX   r   c             C   s   t |tstS | j|jkS )N)r   r   rY   r   )r*   rX   r$   r$   r%   rZ   6  s    
zCertificatePolicies.__eq__c             C   s   t t| jS )N)r[   rs   r   )r*   r$   r$   r%   r\   <  s    zCertificatePolicies.__hash__c             C   s
   t | S )N)r]   r^   )r*   r$   r$   r%   r    ?  s    z CertificatePolicies.public_bytes)r8   r9   r:   r   ZCERTIFICATE_POLICIESr4   r@   rP   r6   r1   rR   rS   rT   r;   rO   r_   r`   rZ   r0   r\   rB   r    r$   r$   r$   r%   r   $  s   
r   c               @   s   e Zd Zeejejejedf   ddddZ	edddZ
eed	d
dZedddZeedddZeejejejedf   dddZdS )r   
UserNoticeN)policy_identifierpolicy_qualifiersr   c             C   sL   t |tstd|| _|d k	rBt|}tdd |D sBtd|| _d S )Nz-policy_identifier must be an ObjectIdentifierc             s   s   | ]}t |ttfV  qd S )N)r   r;   r   )rf   rg   r$   r$   r%   rh   S  s    z-PolicyInformation.__init__.<locals>.<genexpr>zMpolicy_qualifiers must be a list of strings and/or UserNotice objects or None)r   r   rL   _policy_identifierrF   rj   _policy_qualifiers)r*   r   r   r$   r$   r%   r6   D  s    
zPolicyInformation.__init__)r   c             C   s
   d | S )Nze<PolicyInformation(policy_identifier={0.policy_identifier}, policy_qualifiers={0.policy_qualifiers})>)r?   )r*   r$   r$   r%   rO   \  s    zPolicyInformation.__repr__)rX   r   c             C   s&   t |tstS | j|jko$| j|jkS )N)r   r   rY   r   r   )r*   rX   r$   r$   r%   rZ   b  s    
zPolicyInformation.__eq__c             C   s(   | j d k	rt| j }nd }t| j|fS )N)r   rs   r[   r   )r*   Zpqr$   r$   r%   r\   k  s    
zPolicyInformation.__hash__c             C   s   | j S )N)r   )r*   r$   r$   r%   r   u  s    z#PolicyInformation.policy_identifierc             C   s   | j S )N)r   )r*   r$   r$   r%   r   y  s    z#PolicyInformation.policy_qualifiers)r8   r9   r:   r   r@   rt   rP   Unionr;   r6   rO   r_   r`   rZ   r0   r\   ra   r   rv   r   r$   r$   r$   r%   r   C  s   	
r   c               @   s   e Zd Zejd eje ddddZedddZee	d	d
dZ
edddZeejd dddZeeje dddZdS )r   NoticeReferenceN)notice_referenceexplicit_textr   c             C   s&   |rt |tstd|| _|| _d S )Nz2notice_reference must be None or a NoticeReference)r   r   rL   _notice_reference_explicit_text)r*   r   r   r$   r$   r%   r6     s    zUserNotice.__init__)r   c             C   s
   d | S )NzV<UserNotice(notice_reference={0.notice_reference}, explicit_text={0.explicit_text!r})>)r?   )r*   r$   r$   r%   rO     s    zUserNotice.__repr__)rX   r   c             C   s&   t |tstS | j|jko$| j|jkS )N)r   r   rY   r   r   )r*   rX   r$   r$   r%   rZ     s    
zUserNotice.__eq__c             C   s   t | j| jfS )N)r[   r   r   )r*   r$   r$   r%   r\     s    zUserNotice.__hash__c             C   s   | j S )N)r   )r*   r$   r$   r%   r     s    zUserNotice.notice_referencec             C   s   | j S )N)r   )r*   r$   r$   r%   r     s    zUserNotice.explicit_text)r8   r9   r:   r@   rt   r;   r6   rO   r_   r`   rZ   r0   r\   ra   r   r   r$   r$   r$   r%   r     s   	r   c               @   s   e Zd Zeje eje ddddZedddZ	e
edd	d
ZedddZeeje dddZeeje dddZdS )r   N)organizationnotice_numbersr   c             C   s2   || _ t|}tdd |D s(td|| _d S )Nc             s   s   | ]}t |tV  qd S )N)r   r0   )rf   rg   r$   r$   r%   rh     s    z+NoticeReference.__init__.<locals>.<genexpr>z)notice_numbers must be a list of integers)_organizationrF   rj   rL   _notice_numbers)r*   r   r   r$   r$   r%   r6     s
    zNoticeReference.__init__)r   c             C   s
   d | S )NzU<NoticeReference(organization={0.organization!r}, notice_numbers={0.notice_numbers})>)r?   )r*   r$   r$   r%   rO     s    zNoticeReference.__repr__)rX   r   c             C   s&   t |tstS | j|jko$| j|jkS )N)r   r   rY   r   r   )r*   rX   r$   r$   r%   rZ     s    
zNoticeReference.__eq__c             C   s   t | jt| jfS )N)r[   r   rs   r   )r*   r$   r$   r%   r\     s    zNoticeReference.__hash__c             C   s   | j S )N)r   )r*   r$   r$   r%   r     s    zNoticeReference.organizationc             C   s   | j S )N)r   )r*   r$   r$   r%   r     s    zNoticeReference.notice_numbers)r8   r9   r:   r@   rt   r;   rP   r0   r6   rO   r_   r`   rZ   r\   ra   r   rv   r   r$   r$   r$   r%   r     s   	r   c               @   sp   e Zd ZejZeje ddddZ	e
d\ZZZedddZeed	d
dZedddZedddZdS )ExtendedKeyUsageN)usagesr   c             C   s,   t |}tdd |D s"td|| _d S )Nc             s   s   | ]}t |tV  qd S )N)r   r   )rf   rg   r$   r$   r%   rh     s    z,ExtendedKeyUsage.__init__.<locals>.<genexpr>z9Every item in the usages list must be an ObjectIdentifier)rF   rj   rL   _usages)r*   r   r$   r$   r%   r6     s
    zExtendedKeyUsage.__init__r   )r   c             C   s   d | jS )Nz<ExtendedKeyUsage({})>)r?   r   )r*   r$   r$   r%   rO     s    zExtendedKeyUsage.__repr__)rX   r   c             C   s   t |tstS | j|jkS )N)r   r   rY   r   )r*   rX   r$   r$   r%   rZ     s    
zExtendedKeyUsage.__eq__c             C   s   t t| jS )N)r[   rs   r   )r*   r$   r$   r%   r\     s    zExtendedKeyUsage.__hash__c             C   s
   t | S )N)r]   r^   )r*   r$   r$   r%   r      s    zExtendedKeyUsage.public_bytes)r8   r9   r:   r   ZEXTENDED_KEY_USAGEr4   r@   rP   r   r6   r1   rR   rS   rT   r;   rO   r_   r`   rZ   r0   r\   rB   r    r$   r$   r$   r%   r     s   	r   c               @   sL   e Zd ZejZeedddZe	dddZ
edddZedd	d
ZdS )OCSPNoCheck)rX   r   c             C   s   t |tstS dS )NT)r   r   rY   )r*   rX   r$   r$   r%   rZ     s    
zOCSPNoCheck.__eq__)r   c             C   s   t tS )N)r[   r   )r*   r$   r$   r%   r\     s    zOCSPNoCheck.__hash__c             C   s   dS )Nz<OCSPNoCheck()>r$   )r*   r$   r$   r%   rO     s    zOCSPNoCheck.__repr__c             C   s
   t | S )N)r]   r^   )r*   r$   r$   r%   r       s    zOCSPNoCheck.public_bytesN)r8   r9   r:   r   ZOCSP_NO_CHECKr4   r_   r`   rZ   r0   r\   r;   rO   rB   r    r$   r$   r$   r%   r     s
   r   c               @   sL   e Zd ZejZeedddZe	dddZ
edddZedd	d
ZdS )PrecertPoison)rX   r   c             C   s   t |tstS dS )NT)r   r   rY   )r*   rX   r$   r$   r%   rZ     s    
zPrecertPoison.__eq__)r   c             C   s   t tS )N)r[   r   )r*   r$   r$   r%   r\     s    zPrecertPoison.__hash__c             C   s   dS )Nz<PrecertPoison()>r$   )r*   r$   r$   r%   rO     s    zPrecertPoison.__repr__c             C   s
   t | S )N)r]   r^   )r*   r$   r$   r%   r      s    zPrecertPoison.public_bytesN)r8   r9   r:   r   ZPRECERT_POISONr4   r_   r`   rZ   r0   r\   r;   rO   rB   r    r$   r$   r$   r%   r     s
   r   c               @   sp   e Zd ZejZejd ddddZe	d\Z
ZZeddd	Zeed
ddZedddZedddZdS )
TLSFeatureTLSFeatureTypeN)featuresr   c             C   s8   t |}tdd |D r&t|dkr.td|| _d S )Nc             s   s   | ]}t |tV  qd S )N)r   r   )rf   rg   r$   r$   r%   rh     s    z&TLSFeature.__init__.<locals>.<genexpr>r   z@features must be a list of elements from the TLSFeatureType enum)rF   rj   r(   rL   	_features)r*   r   r$   r$   r%   r6     s    zTLSFeature.__init__r   )r   c             C   s
   d | S )Nz$<TLSFeature(features={0._features})>)r?   )r*   r$   r$   r%   rO   )  s    zTLSFeature.__repr__)rX   r   c             C   s   t |tstS | j|jkS )N)r   r   rY   r   )r*   rX   r$   r$   r%   rZ   ,  s    
zTLSFeature.__eq__c             C   s   t t| jS )N)r[   rs   r   )r*   r$   r$   r%   r\   2  s    zTLSFeature.__hash__c             C   s
   t | S )N)r]   r^   )r*   r$   r$   r%   r    5  s    zTLSFeature.public_bytes)r8   r9   r:   r   ZTLS_FEATUREr4   r@   rP   r6   r1   rR   rS   rT   r;   rO   r_   r`   rZ   r0   r\   rB   r    r$   r$   r$   r%   r     s   r   c               @   s   e Zd ZdZdZdS )r   r      N)r8   r9   r:   Zstatus_requestZstatus_request_v2r$   r$   r$   r%   r   9  s   r   c             C   s   i | ]}||j qS r$   )rM   )rf   rg   r$   r$   r%   
<dictcomp>D  s    r   c               @   sn   e Zd ZejZeddddZedddZ	e
edd	d
ZedddZeedddZedddZdS )InhibitAnyPolicyN)
skip_certsr   c             C   s,   t |tstd|dk r"td|| _d S )Nzskip_certs must be an integerr   z)skip_certs must be a non-negative integer)r   r0   rL   ri   _skip_certs)r*   r   r$   r$   r%   r6   J  s
    
zInhibitAnyPolicy.__init__)r   c             C   s
   d | S )Nz-<InhibitAnyPolicy(skip_certs={0.skip_certs})>)r?   )r*   r$   r$   r%   rO   S  s    zInhibitAnyPolicy.__repr__)rX   r   c             C   s   t |tstS | j|jkS )N)r   r   rY   r   )r*   rX   r$   r$   r%   rZ   V  s    
zInhibitAnyPolicy.__eq__c             C   s
   t | jS )N)r[   r   )r*   r$   r$   r%   r\   \  s    zInhibitAnyPolicy.__hash__c             C   s   | j S )N)r   )r*   r$   r$   r%   r   _  s    zInhibitAnyPolicy.skip_certsc             C   s
   t | S )N)r]   r^   )r*   r$   r$   r%   r    c  s    zInhibitAnyPolicy.public_bytes)r8   r9   r:   r   ZINHIBIT_ANY_POLICYr4   r0   r6   r;   rO   r_   r`   rZ   r\   ra   r   rB   r    r$   r$   r$   r%   r   G  s   	r   c               @   s  e Zd ZejZeeeeeeeeedd
ddZeedddZ	eeddd	Z
eedd
dZeedddZeedddZeedddZeedddZeedddZeedddZedddZeedddZedddZeddd ZdS )!KeyUsageN)
digital_signaturecontent_commitmentkey_enciphermentdata_enciphermentkey_agreementkey_cert_signcrl_signencipher_onlydecipher_onlyr   c
       
      C   sN   |s|s|	rt d|| _|| _|| _|| _|| _|| _|| _|| _|	| _	d S )NzKencipher_only and decipher_only can only be true when key_agreement is true)
ri   _digital_signature_content_commitment_key_encipherment_data_encipherment_key_agreement_key_cert_sign	_crl_sign_encipher_only_decipher_only)
r*   r   r   r   r   r   r   r   r   r   r$   r$   r%   r6   j  s    zKeyUsage.__init__)r   c             C   s   | j S )N)r   )r*   r$   r$   r%   r     s    zKeyUsage.digital_signaturec             C   s   | j S )N)r   )r*   r$   r$   r%   r     s    zKeyUsage.content_commitmentc             C   s   | j S )N)r   )r*   r$   r$   r%   r     s    zKeyUsage.key_enciphermentc             C   s   | j S )N)r   )r*   r$   r$   r%   r     s    zKeyUsage.data_enciphermentc             C   s   | j S )N)r   )r*   r$   r$   r%   r     s    zKeyUsage.key_agreementc             C   s   | j S )N)r   )r*   r$   r$   r%   r     s    zKeyUsage.key_cert_signc             C   s   | j S )N)r   )r*   r$   r$   r%   r     s    zKeyUsage.crl_signc             C   s   | j stdn| jS d S )Nz7encipher_only is undefined unless key_agreement is true)r   ri   r   )r*   r$   r$   r%   r     s    zKeyUsage.encipher_onlyc             C   s   | j stdn| jS d S )Nz7decipher_only is undefined unless key_agreement is true)r   ri   r   )r*   r$   r$   r%   r     s    zKeyUsage.decipher_onlyc             C   s<   y| j }| j}W n tk
r,   d}d}Y nX d| ||S )NFa-  <KeyUsage(digital_signature={0.digital_signature}, content_commitment={0.content_commitment}, key_encipherment={0.key_encipherment}, data_encipherment={0.data_encipherment}, key_agreement={0.key_agreement}, key_cert_sign={0.key_cert_sign}, crl_sign={0.crl_sign}, encipher_only={1}, decipher_only={2})>)r   r   ri   r?   )r*   r   r   r$   r$   r%   rO     s    

zKeyUsage.__repr__)rX   r   c             C   sz   t |tstS | j|jkox| j|jkox| j|jkox| j|jkox| j|jkox| j|jkox| j	|j	kox| j
|j
kox| j|jkS )N)r   r   rY   r   r   r   r   r   r   r   r   r   )r*   rX   r$   r$   r%   rZ     s    
zKeyUsage.__eq__c          
   C   s,   t | j| j| j| j| j| j| j| j| j	f	S )N)
r[   r   r   r   r   r   r   r   r   r   )r*   r$   r$   r%   r\     s    zKeyUsage.__hash__c             C   s
   t | S )N)r]   r^   )r*   r$   r$   r%   r      s    zKeyUsage.public_bytes)r8   r9   r:   r   Z	KEY_USAGEr4   r`   r6   ra   r   r   r   r   r   r   r   r   r   r;   rO   r_   rZ   r0   r\   rB   r    r$   r$   r$   r%   r   g  sB   r   c               @   s   e Zd ZejZejeje	  ejeje	  ddddZ
eedddZeje	 ddd	d
ZedddZedddZeejeje	  dddZeejeje	  dddZedddZdS )NameConstraintsN)permitted_subtreesexcluded_subtreesr   c             C   s   |d k	r@t |}|stdtdd |D s6td| | |d k	rt |}|s\tdtdd |D svtd| | |d kr|d krtd|| _|| _d S )	Nz3permitted_subtrees must be a non-empty list or Nonec             s   s   | ]}t |tV  qd S )N)r   r   )rf   rg   r$   r$   r%   rh     s    z+NameConstraints.__init__.<locals>.<genexpr>z@permitted_subtrees must be a list of GeneralName objects or Nonez2excluded_subtrees must be a non-empty list or Nonec             s   s   | ]}t |tV  qd S )N)r   r   )rf   rg   r$   r$   r%   rh     s    z?excluded_subtrees must be a list of GeneralName objects or NonezIAt least one of permitted_subtrees and excluded_subtrees must not be None)rF   ri   rj   rL   _validate_ip_name_permitted_subtrees_excluded_subtrees)r*   r   r   r$   r$   r%   r6     s.    

zNameConstraints.__init__)rX   r   c             C   s&   t |tstS | j|jko$| j|jkS )N)r   r   rY   r   r   )r*   rX   r$   r$   r%   rZ     s    
zNameConstraints.__eq__)treer   c             C   s   t dd |D rtdd S )Nc             s   s.   | ]&}t |to$t |jtjtjf V  qd S )N)r   r   rM   	ipaddressZIPv4NetworkZIPv6Network)rf   namer$   r$   r%   rh   $  s   z4NameConstraints._validate_ip_name.<locals>.<genexpr>zGIPAddress name constraints must be an IPv4Network or IPv6Network object)anyrL   )r*   r   r$   r$   r%   r   "  s
    
z!NameConstraints._validate_ip_name)r   c             C   s
   d | S )Nze<NameConstraints(permitted_subtrees={0.permitted_subtrees}, excluded_subtrees={0.excluded_subtrees})>)r?   )r*   r$   r$   r%   rO   /  s    zNameConstraints.__repr__c             C   s@   | j d k	rt| j }nd }| jd k	r0t| j}nd }t||fS )N)r   rs   r   r[   )r*   ZpsZesr$   r$   r%   r\   5  s    



zNameConstraints.__hash__c             C   s   | j S )N)r   )r*   r$   r$   r%   r   F  s    z"NameConstraints.permitted_subtreesc             C   s   | j S )N)r   )r*   r$   r$   r%   r   L  s    z!NameConstraints.excluded_subtreesc             C   s
   t | S )N)r]   r^   )r*   r$   r$   r%   r    R  s    zNameConstraints.public_bytes)r8   r9   r:   r   ZNAME_CONSTRAINTSr4   r@   rt   rP   r   r6   r_   r`   rZ   r   r;   rO   r0   r\   ra   rv   r   r   rB   r    r$   r$   r$   r%   r     s   &	r   c               @   s   e Zd ZeeeddddZeedddZeeddd	Z	eedd
dZ
edddZeedddZedddZdS )	ExtensionN)r4   criticalrM   r   c             C   s:   t |tstdt |ts$td|| _|| _|| _d S )Nz2oid argument must be an ObjectIdentifier instance.z critical must be a boolean value)r   r   rL   r`   _oid	_critical_value)r*   r4   r   rM   r$   r$   r%   r6   W  s    

zExtension.__init__)r   c             C   s   | j S )N)r   )r*   r$   r$   r%   r4   f  s    zExtension.oidc             C   s   | j S )N)r   )r*   r$   r$   r%   r   j  s    zExtension.criticalc             C   s   | j S )N)r   )r*   r$   r$   r%   rM   n  s    zExtension.valuec             C   s
   d | S )Nz@<Extension(oid={0.oid}, critical={0.critical}, value={0.value})>)r?   )r*   r$   r$   r%   rO   r  s    zExtension.__repr__)rX   r   c             C   s2   t |tstS | j|jko0| j|jko0| j|jkS )N)r   r   rY   r4   r   rM   )r*   rX   r$   r$   r%   rZ   x  s
    
zExtension.__eq__c             C   s   t | j| j| jfS )N)r[   r4   r   rM   )r*   r$   r$   r%   r\     s    zExtension.__hash__)r8   r9   r:   r   r`   r   r6   ra   r4   r   rM   r;   rO   r_   rZ   r0   r\   r$   r$   r$   r%   r   V  s   
r   c            	   @   s  e Zd Zeje ddddZed\ZZ	Z
ejejeje eje eje f eje dddZejeje eje dd	dZejeje eje dd
dZejeje eje dddZejeje eje dddZejeje eje eje eje eje eje eje f ejeje eje eje eje eje f dddZedddZeedddZedddZ dS )GeneralNamesN)general_namesr   c             C   s,   t |}tdd |D s"td|| _d S )Nc             s   s   | ]}t |tV  qd S )N)r   r   )rf   rg   r$   r$   r%   rh     s    z(GeneralNames.__init__.<locals>.<genexpr>z^Every item in the general_names list must be an object conforming to the GeneralName interface)rF   rj   rL   _general_names)r*   r   r$   r$   r%   r6     s
    zGeneralNames.__init__r   )typer   c             C   s   d S )Nr$   )r*   r   r$   r$   r%   get_values_for_type  s    	z GeneralNames.get_values_for_typec             C   s   d S )Nr$   )r*   r   r$   r$   r%   r     s    c             C   s   d S )Nr$   )r*   r   r$   r$   r%   r     s    c             C   s   d S )Nr$   )r*   r   r$   r$   r%   r     s    c             C   s   d S )Nr$   )r*   r   r$   r$   r%   r     s    c                s0    fdd| D } t kr(dd |D S t|S )Nc             3   s   | ]}t | r|V  qd S )N)r   )rf   i)r   r$   r%   rh     s    z3GeneralNames.get_values_for_type.<locals>.<genexpr>c             S   s   g | ]
}|j qS r$   )rM   )rf   r   r$   r$   r%   
<listcomp>  s    z4GeneralNames.get_values_for_type.<locals>.<listcomp>)r   rF   )r*   r   Zobjsr$   )r   r%   r     s    )r   c             C   s   d | jS )Nz<GeneralNames({})>)r?   r   )r*   r$   r$   r%   rO     s    zGeneralNames.__repr__)rX   r   c             C   s   t |tstS | j|jkS )N)r   r   rY   r   )r*   rX   r$   r$   r%   rZ     s    
zGeneralNames.__eq__c             C   s   t t| jS )N)r[   rs   r   )r*   r$   r$   r%   r\     s    zGeneralNames.__hash__)!r8   r9   r:   r@   rP   r   r6   r1   rR   rS   rT   overloadr   rQ   r   r   r   rv   r;   r   r   r   r   r   r   r   r   rO   r_   r`   rZ   r0   r\   r$   r$   r$   r%   r     sJ   

r   c            	   @   s  e Zd ZejZeje ddddZ	e
d\ZZZejejeje eje eje f eje dddZejeje eje dd	dZejeje eje dd
dZejeje eje dddZejeje eje dddZejeje eje eje eje eje eje eje f ejeje eje eje eje eje f dddZedddZee dddZ!e"dddZ#e$dddZ%dS )SubjectAlternativeNameN)r   r   c             C   s   t || _d S )N)r   r   )r*   r   r$   r$   r%   r6     s    zSubjectAlternativeName.__init__r   )r   r   c             C   s   d S )Nr$   )r*   r   r$   r$   r%   r     s    	z*SubjectAlternativeName.get_values_for_typec             C   s   d S )Nr$   )r*   r   r$   r$   r%   r     s    c             C   s   d S )Nr$   )r*   r   r$   r$   r%   r     s    c             C   s   d S )Nr$   )r*   r   r$   r$   r%   r      s    c             C   s   d S )Nr$   )r*   r   r$   r$   r%   r     s    c             C   s   | j |S )N)r   r   )r*   r   r$   r$   r%   r     s    )r   c             C   s   d | jS )Nz<SubjectAlternativeName({})>)r?   r   )r*   r$   r$   r%   rO      s    zSubjectAlternativeName.__repr__)rX   r   c             C   s   t |tstS | j|jkS )N)r   r   rY   r   )r*   rX   r$   r$   r%   rZ   #  s    
zSubjectAlternativeName.__eq__c             C   s
   t | jS )N)r[   r   )r*   r$   r$   r%   r\   )  s    zSubjectAlternativeName.__hash__c             C   s
   t | S )N)r]   r^   )r*   r$   r$   r%   r    ,  s    z#SubjectAlternativeName.public_bytes)&r8   r9   r:   r   ZSUBJECT_ALTERNATIVE_NAMEr4   r@   rP   r   r6   r1   rR   rS   rT   r   r   rQ   r   r   r   rv   r;   r   r   r   r   r   r   r   r   rO   r_   r`   rZ   r0   r\   rB   r    r$   r$   r$   r%   r     sN   r   c            	   @   s  e Zd ZejZeje ddddZ	e
d\ZZZejejeje eje eje f eje dddZejeje eje dd	dZejeje eje dd
dZejeje eje dddZejeje eje dddZejeje eje eje eje eje eje eje f ejeje eje eje eje eje f dddZedddZee dddZ!e"dddZ#e$dddZ%dS )IssuerAlternativeNameN)r   r   c             C   s   t || _d S )N)r   r   )r*   r   r$   r$   r%   r6   3  s    zIssuerAlternativeName.__init__r   )r   r   c             C   s   d S )Nr$   )r*   r   r$   r$   r%   r   8  s    	z)IssuerAlternativeName.get_values_for_typec             C   s   d S )Nr$   )r*   r   r$   r$   r%   r   C  s    c             C   s   d S )Nr$   )r*   r   r$   r$   r%   r   J  s    c             C   s   d S )Nr$   )r*   r   r$   r$   r%   r   Q  s    c             C   s   d S )Nr$   )r*   r   r$   r$   r%   r   W  s    c             C   s   | j |S )N)r   r   )r*   r   r$   r$   r%   r   ]  s    )r   c             C   s   d | jS )Nz<IssuerAlternativeName({})>)r?   r   )r*   r$   r$   r%   rO   q  s    zIssuerAlternativeName.__repr__)rX   r   c             C   s   t |tstS | j|jkS )N)r   r   rY   r   )r*   rX   r$   r$   r%   rZ   t  s    
zIssuerAlternativeName.__eq__c             C   s
   t | jS )N)r[   r   )r*   r$   r$   r%   r\   z  s    zIssuerAlternativeName.__hash__c             C   s
   t | S )N)r]   r^   )r*   r$   r$   r%   r    }  s    z"IssuerAlternativeName.public_bytes)&r8   r9   r:   r   ZISSUER_ALTERNATIVE_NAMEr4   r@   rP   r   r6   r1   rR   rS   rT   r   r   rQ   r   r   r   rv   r;   r   r   r   r   r   r   r   r   rO   r_   r`   rZ   r0   r\   rB   r    r$   r$   r$   r%   r   0  sN   r   c            	   @   s  e Zd ZejZeje ddddZ	e
d\ZZZejejeje eje eje f eje dddZejeje eje dd	dZejeje eje dd
dZejeje eje dddZejeje eje dddZejeje eje eje eje eje eje eje f ejeje eje eje eje eje f dddZedddZee dddZ!e"dddZ#e$dddZ%dS )CertificateIssuerN)r   r   c             C   s   t || _d S )N)r   r   )r*   r   r$   r$   r%   r6     s    zCertificateIssuer.__init__r   )r   r   c             C   s   d S )Nr$   )r*   r   r$   r$   r%   r     s    	z%CertificateIssuer.get_values_for_typec             C   s   d S )Nr$   )r*   r   r$   r$   r%   r     s    c             C   s   d S )Nr$   )r*   r   r$   r$   r%   r     s    c             C   s   d S )Nr$   )r*   r   r$   r$   r%   r     s    c             C   s   d S )Nr$   )r*   r   r$   r$   r%   r     s    c             C   s   | j |S )N)r   r   )r*   r   r$   r$   r%   r     s    )r   c             C   s   d | jS )Nz<CertificateIssuer({})>)r?   r   )r*   r$   r$   r%   rO     s    zCertificateIssuer.__repr__)rX   r   c             C   s   t |tstS | j|jkS )N)r   r   rY   r   )r*   rX   r$   r$   r%   rZ     s    
zCertificateIssuer.__eq__c             C   s
   t | jS )N)r[   r   )r*   r$   r$   r%   r\     s    zCertificateIssuer.__hash__c             C   s
   t | S )N)r]   r^   )r*   r$   r$   r%   r      s    zCertificateIssuer.public_bytes)&r8   r9   r:   r   ZCERTIFICATE_ISSUERr4   r@   rP   r   r6   r1   rR   rS   rT   r   r   rQ   r   r   r   rv   r;   r   r   r   r   r   r   r   r   rO   r_   r`   rZ   r0   r\   rB   r    r$   r$   r$   r%   r     sN   r   c               @   sn   e Zd ZejZeddddZedddZ	e
edd	d
ZedddZeedddZedddZdS )	CRLReasonN)reasonr   c             C   s   t |tstd|| _d S )Nz*reason must be an element from ReasonFlags)r   r   rL   _reason)r*   r   r$   r$   r%   r6     s    
zCRLReason.__init__)r   c             C   s   d | jS )Nz<CRLReason(reason={})>)r?   r   )r*   r$   r$   r%   rO     s    zCRLReason.__repr__)rX   r   c             C   s   t |tstS | j|jkS )N)r   r   rY   r   )r*   rX   r$   r$   r%   rZ     s    
zCRLReason.__eq__c             C   s
   t | jS )N)r[   r   )r*   r$   r$   r%   r\     s    zCRLReason.__hash__c             C   s   | j S )N)r   )r*   r$   r$   r%   r     s    zCRLReason.reasonc             C   s
   t | S )N)r]   r^   )r*   r$   r$   r%   r      s    zCRLReason.public_bytes)r8   r9   r:   r   Z
CRL_REASONr4   r   r6   r;   rO   r_   r`   rZ   r0   r\   ra   r   rB   r    r$   r$   r$   r%   r     s   r   c               @   sr   e Zd ZejZejddddZedddZ	e
edd	d
ZedddZeejdddZedddZdS )InvalidityDateN)invalidity_dater   c             C   s   t |tjstd|| _d S )Nz+invalidity_date must be a datetime.datetime)r   datetimerL   _invalidity_date)r*   r  r$   r$   r%   r6     s    zInvalidityDate.__init__)r   c             C   s   d | jS )Nz$<InvalidityDate(invalidity_date={})>)r?   r  )r*   r$   r$   r%   rO     s    zInvalidityDate.__repr__)rX   r   c             C   s   t |tstS | j|jkS )N)r   r  rY   r  )r*   rX   r$   r$   r%   rZ     s    
zInvalidityDate.__eq__c             C   s
   t | jS )N)r[   r  )r*   r$   r$   r%   r\     s    zInvalidityDate.__hash__c             C   s   | j S )N)r  )r*   r$   r$   r%   r    s    zInvalidityDate.invalidity_datec             C   s
   t | S )N)r]   r^   )r*   r$   r$   r%   r    
  s    zInvalidityDate.public_bytes)r8   r9   r:   r   ZINVALIDITY_DATEr4   r  r6   r;   rO   r_   r`   rZ   r0   r\   ra   r  rB   r    r$   r$   r$   r%   r    s   r  c               @   sp   e Zd ZejZeje ddddZ	e
d\ZZZedddZedd	d
ZeedddZedddZdS ))PrecertificateSignedCertificateTimestampsN)signed_certificate_timestampsr   c             C   s,   t |}tdd |D s"td|| _d S )Nc             s   s   | ]}t |tV  qd S )N)r   r   )rf   sctr$   r$   r%   rh     s   zEPrecertificateSignedCertificateTimestamps.__init__.<locals>.<genexpr>zYEvery item in the signed_certificate_timestamps list must be a SignedCertificateTimestamp)rF   rj   rL   _signed_certificate_timestamps)r*   r  r$   r$   r%   r6     s    
z2PrecertificateSignedCertificateTimestamps.__init__r  )r   c             C   s   d t| S )Nz/<PrecertificateSignedCertificateTimestamps({})>)r?   rF   )r*   r$   r$   r%   rO   &  s    z2PrecertificateSignedCertificateTimestamps.__repr__c             C   s   t t| jS )N)r[   rs   r  )r*   r$   r$   r%   r\   +  s    z2PrecertificateSignedCertificateTimestamps.__hash__)rX   r   c             C   s   t |tstS | j|jkS )N)r   r  rY   r  )r*   rX   r$   r$   r%   rZ   .  s    
z0PrecertificateSignedCertificateTimestamps.__eq__c             C   s
   t | S )N)r]   r^   )r*   r$   r$   r%   r    7  s    z6PrecertificateSignedCertificateTimestamps.public_bytes)r8   r9   r:   r   Z%PRECERT_SIGNED_CERTIFICATE_TIMESTAMPSr4   r@   rP   r   r6   r1   rR   rS   rT   r;   rO   r0   r\   r_   r`   rZ   rB   r    r$   r$   r$   r%   r    s   	r  c               @   sp   e Zd ZejZeje ddddZ	e
d\ZZZedddZedd	d
ZeedddZedddZdS )SignedCertificateTimestampsN)r  r   c             C   s,   t |}tdd |D s"td|| _d S )Nc             s   s   | ]}t |tV  qd S )N)r   r   )rf   r  r$   r$   r%   rh   F  s   z7SignedCertificateTimestamps.__init__.<locals>.<genexpr>zYEvery item in the signed_certificate_timestamps list must be a SignedCertificateTimestamp)rF   rj   rL   r  )r*   r  r$   r$   r%   r6   >  s    
z$SignedCertificateTimestamps.__init__r  )r   c             C   s   d t| S )Nz!<SignedCertificateTimestamps({})>)r?   rF   )r*   r$   r$   r%   rO   S  s    z$SignedCertificateTimestamps.__repr__c             C   s   t t| jS )N)r[   rs   r  )r*   r$   r$   r%   r\   V  s    z$SignedCertificateTimestamps.__hash__)rX   r   c             C   s   t |tstS | j|jkS )N)r   r	  rY   r  )r*   rX   r$   r$   r%   rZ   Y  s    
z"SignedCertificateTimestamps.__eq__c             C   s
   t | S )N)r]   r^   )r*   r$   r$   r%   r    b  s    z(SignedCertificateTimestamps.public_bytes)r8   r9   r:   r   ZSIGNED_CERTIFICATE_TIMESTAMPSr4   r@   rP   r   r6   r1   rR   rS   rT   r;   rO   r0   r\   r_   r`   rZ   rB   r    r$   r$   r$   r%   r	  ;  s   	r	  c               @   sn   e Zd ZejZeddddZee	dddZ
edd	d
ZedddZeedddZedddZdS )	OCSPNonceN)noncer   c             C   s   t |tstd|| _d S )Nznonce must be bytes)r   rB   rL   _nonce)r*   r  r$   r$   r%   r6   i  s    
zOCSPNonce.__init__)rX   r   c             C   s   t |tstS | j|jkS )N)r   r
  rY   r  )r*   rX   r$   r$   r%   rZ   o  s    
zOCSPNonce.__eq__)r   c             C   s
   t | jS )N)r[   r  )r*   r$   r$   r%   r\   u  s    zOCSPNonce.__hash__c             C   s
   d | S )Nz<OCSPNonce(nonce={0.nonce!r})>)r?   )r*   r$   r$   r%   rO   x  s    zOCSPNonce.__repr__c             C   s   | j S )N)r  )r*   r$   r$   r%   r  {  s    zOCSPNonce.noncec             C   s
   t | S )N)r]   r^   )r*   r$   r$   r%   r      s    zOCSPNonce.public_bytes)r8   r9   r:   r   ZNONCEr4   rB   r6   r_   r`   rZ   r0   r\   r;   rO   ra   r  r    r$   r$   r$   r%   r
  f  s   r
  c            	   @   s"  e Zd ZejZejeje	  eje
 eeejeje  eeddddZedddZeedd	d
ZedddZeejeje	  dddZeeje
 dddZeedddZeedddZeejeje  dddZeedddZeedddZedddZdS )IssuingDistributionPointN)r   r   only_contains_user_certsonly_contains_ca_certsonly_some_reasonsindirect_crlonly_contains_attribute_certsr   c       	      C   s   |d k	rt |}|r8t|tr0tdd |D s8td|rXtj|ksPtj|krXtdt|t	rt|t	rt|t	rt|t	std||||g}t
dd |D dkrtd	t|||||||gstd
|| _|| _|| _|| _|| _|| _|| _d S )Nc             s   s   | ]}t |tV  qd S )N)r   r   )rf   rg   r$   r$   r%   rh     s    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$   )rf   rg   r$   r$   r%   r     s    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.)rF   r   r   rj   rL   r   r   r   ri   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  Zcrl_constraintsr$   r$   r%   r6     sT    







z!IssuingDistributionPoint.__init__)r   c             C   s
   d | S )NaG  <IssuingDistributionPoint(full_name={0.full_name}, relative_name={0.relative_name}, only_contains_user_certs={0.only_contains_user_certs}, only_contains_ca_certs={0.only_contains_ca_certs}, only_some_reasons={0.only_some_reasons}, indirect_crl={0.indirect_crl}, only_contains_attribute_certs={0.only_contains_attribute_certs})>)r?   )r*   r$   r$   r%   rO     s    z!IssuingDistributionPoint.__repr__)rX   r   c             C   sb   t |tstS | j|jko`| j|jko`| j|jko`| j|jko`| j|jko`| j|jko`| j	|j	kS )N)
r   r  rY   r   r   r  r  r  r  r  )r*   rX   r$   r$   r%   rZ     s    
zIssuingDistributionPoint.__eq__c             C   s$   t | j| j| j| j| j| j| jfS )N)r[   r   r   r  r  r  r  r  )r*   r$   r$   r%   r\     s    z!IssuingDistributionPoint.__hash__c             C   s   | j S )N)r   )r*   r$   r$   r%   r     s    z"IssuingDistributionPoint.full_namec             C   s   | j S )N)r   )r*   r$   r$   r%   r     s    z&IssuingDistributionPoint.relative_namec             C   s   | j S )N)r  )r*   r$   r$   r%   r  	  s    z1IssuingDistributionPoint.only_contains_user_certsc             C   s   | j S )N)r  )r*   r$   r$   r%   r    s    z/IssuingDistributionPoint.only_contains_ca_certsc             C   s   | j S )N)r  )r*   r$   r$   r%   r    s    z*IssuingDistributionPoint.only_some_reasonsc             C   s   | j S )N)r  )r*   r$   r$   r%   r    s    z%IssuingDistributionPoint.indirect_crlc             C   s   | j S )N)r  )r*   r$   r$   r%   r    s    z6IssuingDistributionPoint.only_contains_attribute_certsc             C   s
   t | S )N)r]   r^   )r*   r$   r$   r%   r      s    z%IssuingDistributionPoint.public_bytes) r8   r9   r:   r   ZISSUING_DISTRIBUTION_POINTr4   r@   rt   rP   r   r   r`   r   r   r6   r;   rO   r_   rZ   r0   r\   ra   rv   r   r   r  r  r  r  r  rB   r    r$   r$   r$   r%   r    s6   Jr  c               @   s|   e Zd ZeeddddZeedddZeeddd	Ze	dd
dZ
eedddZedddZedddZdS )rK   N)r4   rM   r   c             C   s"   t |tstd|| _|| _d S )Nzoid must be an ObjectIdentifier)r   r   rL   r   r   )r*   r4   rM   r$   r$   r%   r6   $  s    
zUnrecognizedExtension.__init__)r   c             C   s   | j S )N)r   )r*   r$   r$   r%   r4   *  s    zUnrecognizedExtension.oidc             C   s   | j S )N)r   )r*   r$   r$   r%   rM   .  s    zUnrecognizedExtension.valuec             C   s
   d | S )Nz7<UnrecognizedExtension(oid={0.oid}, value={0.value!r})>)r?   )r*   r$   r$   r%   rO   2  s    zUnrecognizedExtension.__repr__)rX   r   c             C   s&   t |tstS | j|jko$| j|jkS )N)r   rK   rY   r4   rM   )r*   rX   r$   r$   r%   rZ   8  s    
zUnrecognizedExtension.__eq__c             C   s   t | j| jfS )N)r[   r4   rM   )r*   r$   r$   r%   r\   >  s    zUnrecognizedExtension.__hash__c             C   s   | j S )N)rM   )r*   r$   r$   r%   r    A  s    z"UnrecognizedExtension.public_bytes)r8   r9   r:   r   rB   r6   ra   r4   rM   r;   rO   r_   r`   rZ   r0   r\   r    r$   r$   r$   r%   rK   #  s   rK   )gabcr  r!   r   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   ZTypeVarr   rB   r&   r;   r1   	Exceptionr2   r=   ABCMetar   rD   rU   rb   rp   ry   r}   rz   r   r   r   r   r   Enumr   r   r   r   r   r   r   r   r   Z_REASON_BIT_MAPPINGZ_CRLREASONFLAGSr   r   r   r   r   r   r   r   r   r   Z_TLS_FEATURE_TYPE_TO_ENUMr   r   r   ZGenericr   r   r   r   r   r   r  r  r	  r
  r  rK   r$   r$   r$   r%   <module>   s   ,'l$!!(.%%p

A=+("  j0YQQQ-+ !