U
    *}f                     @   s  d dl mZmZm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
Z
d dlmZ d dlmZmZmZmZ d dlmZmZ d dlmZ d dlmZ d d	lmZ d d
lmZmZmZ d dlm Z  d dl!m"Z"m#Z#m$Z$m%Z% dd Z&dd Z'G dd de(Z)G dd de(Z*e
+ej,G dd de-Z.G dd de-Z/e0e.G dd de-Z1e0e.G dd de-Z2e0e.G dd de-Z3e0e.G dd  d e-Z4e0e.G d!d" d"e-Z5G d#d$ d$e-Z6e0e.G d%d& d&e-Z7e0e.G d'd( d(e-Z8e0e.G d)d* d*e-Z9e0e.G d+d, d,e-Z:G d-d. d.e-Z;G d/d0 d0e	Z<e0e.G d1d2 d2e-Z=e0e.G d3d4 d4e-Z>G d5d6 d6e-Z?G d7d8 d8e-Z@G d9d: d:e-ZAe0e.G d;d< d<e-ZBe0e.G d=d> d>e-ZCe0e.G d?d@ d@e-ZDe0e.G dAdB dBe-ZEG dCdD dDe	ZFdEdF eFD ZGe0e.G dGdH dHe-ZHe0e.G dIdJ dJe-ZIe0e.G dKdL dLe-ZJG dMdN dNe-ZKG dOdP dPe-ZLe0e.G dQdR dRe-ZMe0e.G dSdT dTe-ZNe0e.G dUdV dVe-ZOe0e.G dWdX dXe-ZPe0e.G dYdZ dZe-ZQe0e.G d[d\ d\e-ZRe0e.G d]d^ d^e-ZSe0e.G d_d` d`e-ZTe0e.G dadb dbe-ZUe0e.G dcdd dde-ZVdS )e    )absolute_importdivisionprint_functionN)Enum)utils)
BIT_STRING	DERReaderOBJECT_IDENTIFIERSEQUENCE)constant_timeserialization)EllipticCurvePublicKey)RSAPublicKey)SignedCertificateTimestamp)GeneralName	IPAddress	OtherName)RelativeDistinguishedName)CRLEntryExtensionOIDExtensionOIDOCSPExtensionOIDObjectIdentifierc              	   C   s   t | tr | tjjtjj}nt | tr@| tjj	tjj
}n| tjjtjj}t|}|t}|t}|t} W 5 Q R X |  |t | s|  W 5 Q R X |  dkrtd| j}t| S )Nr   zInvalid public key encoding)
isinstancer   Zpublic_bytesr   EncodingZDERZPublicFormatZPKCS1r   ZX962ZUncompressedPointZSubjectPublicKeyInfor   Zread_single_elementr
   Zread_elementr   r	   Zis_emptyZread_any_elementZ	read_byte
ValueErrordatahashlibsha1digest)
public_keyr   Z
serializedreaderZpublic_key_info	algorithm r"   @/tmp/pip-unpacked-wheel-x36vw73o/cryptography/x509/extensions.py_key_identifier_from_public_key&   s4    



r$   c                    s.    fdd} fdd} fdd}|||fS )Nc                    s   t t|  S N)lengetattrself
field_namer"   r#   
len_methodO   s    z*_make_sequence_methods.<locals>.len_methodc                    s   t t|  S r%   )iterr'   r(   r*   r"   r#   iter_methodR   s    z+_make_sequence_methods.<locals>.iter_methodc                    s   t |  | S r%   )r'   )r)   idxr*   r"   r#   getitem_methodU   s    z._make_sequence_methods.<locals>.getitem_methodr"   )r+   r,   r.   r0   r"   r*   r#   _make_sequence_methodsN   s    r1   c                       s   e Zd Z fddZ  ZS )DuplicateExtensionc                    s   t t| | || _d S r%   )superr2   __init__oidr)   msgr5   	__class__r"   r#   r4   \   s    zDuplicateExtension.__init____name__
__module____qualname__r4   __classcell__r"   r"   r8   r#   r2   [   s   r2   c                       s   e Zd Z fddZ  ZS )ExtensionNotFoundc                    s   t t| | || _d S r%   )r3   r?   r4   r5   r6   r8   r"   r#   r4   b   s    zExtensionNotFound.__init__r:   r"   r"   r8   r#   r?   a   s   r?   c                   @   s   e Zd Zejdd ZdS )ExtensionTypec                 C   s   dS )zK
        Returns the oid associated with the given extension type.
        Nr"   r(   r"   r"   r#   r5   i   s    zExtensionType.oidN)r;   r<   r=   abcabstractpropertyr5   r"   r"   r"   r#   r@   g   s   r@   c                   @   s:   e Zd Zdd Zdd Zdd Zed\ZZZ	dd	 Z
d
S )
Extensionsc                 C   s
   || _ d S r%   )_extensions)r)   
extensionsr"   r"   r#   r4   q   s    zExtensions.__init__c                 C   s0   | D ]}|j |kr|  S qtd||d S )NNo {} extension was found)r5   r?   format)r)   r5   extr"   r"   r#   get_extension_for_oidt   s    

z Extensions.get_extension_for_oidc                 C   sD   |t krtd| D ]}t|j|r|  S q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.rF   )UnrecognizedExtension	TypeErrorr   valuer?   rG   r5   )r)   ZextclassrH   r"   r"   r#   get_extension_for_class{   s    
 z"Extensions.get_extension_for_classrD   c                 C   s   d | jS )Nz<Extensions({})>)rG   rD   r(   r"   r"   r#   __repr__   s    zExtensions.__repr__N)r;   r<   r=   r4   rI   rM   r1   __len____iter____getitem__rN   r"   r"   r"   r#   rC   p   s
   rC   c                   @   sD   e Zd ZejZdd Zdd Zdd Zdd Z	d	d
 Z
edZdS )	CRLNumberc                 C   s   t |tjstd|| _d S Nzcrl_number must be an integerr   sixinteger_typesrK   _crl_numberr)   
crl_numberr"   r"   r#   r4      s    zCRLNumber.__init__c                 C   s   t |tstS | j|jkS r%   )r   rR   NotImplementedrY   r)   otherr"   r"   r#   __eq__   s    
zCRLNumber.__eq__c                 C   s
   | |k S r%   r"   r[   r"   r"   r#   __ne__   s    zCRLNumber.__ne__c                 C   s
   t | jS r%   hashrY   r(   r"   r"   r#   __hash__   s    zCRLNumber.__hash__c                 C   s   d | jS )Nz<CRLNumber({})>)rG   rY   r(   r"   r"   r#   rN      s    zCRLNumber.__repr__rW   N)r;   r<   r=   r   Z
CRL_NUMBERr5   r4   r]   r^   ra   rN   r   read_only_propertyrY   r"   r"   r"   r#   rR      s   rR   c                   @   sp   e Zd ZejZdd Zedd Zedd Z	dd Z
d	d
 Zdd Zdd ZedZedZedZdS )AuthorityKeyIdentifierc                 C   st   |d k|d kkrt d|d k	rBt|}tdd |D sBtd|d k	r^t|tj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 r%   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)
r   listallrK   r   rU   rV   _key_identifier_authority_cert_issuer_authority_cert_serial_number)r)   key_identifierauthority_cert_issuerauthority_cert_serial_numberr"   r"   r#   r4      s,    
 zAuthorityKeyIdentifier.__init__c                 C   s   t |}| |d d dS N)rn   ro   rp   r$   )clsr   r   r"   r"   r#   from_issuer_public_key   s    z-AuthorityKeyIdentifier.from_issuer_public_keyc                 C   s   | |j d d dS rq   )r   )rs   Zskir"   r"   r#   "from_issuer_subject_key_identifier   s
    z9AuthorityKeyIdentifier.from_issuer_subject_key_identifierc                 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})>rG   r(   r"   r"   r#   rN      s    zAuthorityKeyIdentifier.__repr__c                 C   s2   t |tstS | j|jko0| j|jko0| j|jkS r%   )r   rc   rZ   rn   ro   rp   r[   r"   r"   r#   r]      s    

zAuthorityKeyIdentifier.__eq__c                 C   s
   | |k S r%   r"   r[   r"   r"   r#   r^      s    zAuthorityKeyIdentifier.__ne__c                 C   s,   | j d krd }n
t| j }t| j|| jfS r%   )ro   tupler`   rn   rp   )r)   Zacir"   r"   r#   ra      s    

zAuthorityKeyIdentifier.__hash__rk   rl   rm   N)r;   r<   r=   r   ZAUTHORITY_KEY_IDENTIFIERr5   r4   classmethodrt   ru   rN   r]   r^   ra   r   rb   rn   ro   rp   r"   r"   r"   r#   rc      s   !

	

rc   c                   @   sP   e Zd ZejZdd Zedd Ze	
dZdd Zdd	 Zd
d Zdd ZdS )SubjectKeyIdentifierc                 C   s
   || _ d S r%   )_digest)r)   r   r"   r"   r#   r4     s    zSubjectKeyIdentifier.__init__c                 C   s   | t |S r%   rr   )rs   r   r"   r"   r#   from_public_key  s    z$SubjectKeyIdentifier.from_public_keyrz   c                 C   s   d | jS )Nz$<SubjectKeyIdentifier(digest={0!r})>)rG   r   r(   r"   r"   r#   rN     s    zSubjectKeyIdentifier.__repr__c                 C   s   t |tstS t| j|jS r%   )r   ry   rZ   r   Zbytes_eqr   r[   r"   r"   r#   r]     s    
zSubjectKeyIdentifier.__eq__c                 C   s
   | |k S r%   r"   r[   r"   r"   r#   r^     s    zSubjectKeyIdentifier.__ne__c                 C   s
   t | jS r%   )r`   r   r(   r"   r"   r#   ra   "  s    zSubjectKeyIdentifier.__hash__N)r;   r<   r=   r   ZSUBJECT_KEY_IDENTIFIERr5   r4   rx   r{   r   rb   r   rN   r]   r^   ra   r"   r"   r"   r#   ry   	  s   

ry   c                   @   sH   e Zd ZejZdd Zed\ZZ	Z
dd Zdd Zdd	 Zd
d ZdS )AuthorityInformationAccessc                 C   s,   t |}tdd |D s"td|| _d S )Nc                 s   s   | ]}t |tV  qd S r%   r   AccessDescriptionre   r"   r"   r#   rh   ,  s     z6AuthorityInformationAccess.__init__.<locals>.<genexpr>@Every item in the descriptions list must be an AccessDescriptionri   rj   rK   _descriptionsr)   Zdescriptionsr"   r"   r#   r4   *  s    z#AuthorityInformationAccess.__init__r   c                 C   s   d | jS )Nz <AuthorityInformationAccess({})>rG   r   r(   r"   r"   r#   rN   6  s    z#AuthorityInformationAccess.__repr__c                 C   s   t |tstS | j|jkS r%   )r   r|   rZ   r   r[   r"   r"   r#   r]   9  s    
z!AuthorityInformationAccess.__eq__c                 C   s
   | |k S r%   r"   r[   r"   r"   r#   r^   ?  s    z!AuthorityInformationAccess.__ne__c                 C   s   t t| jS r%   r`   rw   r   r(   r"   r"   r#   ra   B  s    z#AuthorityInformationAccess.__hash__N)r;   r<   r=   r   ZAUTHORITY_INFORMATION_ACCESSr5   r4   r1   rO   rP   rQ   rN   r]   r^   ra   r"   r"   r"   r#   r|   &  s   
r|   c                   @   sH   e Zd ZejZdd Zed\ZZ	Z
dd Zdd Zdd	 Zd
d ZdS )SubjectInformationAccessc                 C   s,   t |}tdd |D s"td|| _d S )Nc                 s   s   | ]}t |tV  qd S r%   r}   re   r"   r"   r#   rh   L  s     z4SubjectInformationAccess.__init__.<locals>.<genexpr>r   r   r   r"   r"   r#   r4   J  s    z!SubjectInformationAccess.__init__r   c                 C   s   d | jS )Nz<SubjectInformationAccess({})>r   r(   r"   r"   r#   rN   V  s    z!SubjectInformationAccess.__repr__c                 C   s   t |tstS | j|jkS r%   )r   r   rZ   r   r[   r"   r"   r#   r]   Y  s    
zSubjectInformationAccess.__eq__c                 C   s
   | |k S r%   r"   r[   r"   r"   r#   r^   _  s    zSubjectInformationAccess.__ne__c                 C   s   t t| jS r%   r   r(   r"   r"   r#   ra   b  s    z!SubjectInformationAccess.__hash__N)r;   r<   r=   r   ZSUBJECT_INFORMATION_ACCESSr5   r4   r1   rO   rP   rQ   rN   r]   r^   ra   r"   r"   r"   r#   r   F  s   
r   c                   @   sH   e Zd Zdd Zdd Zdd Zdd Zd	d
 Ze	dZ
e	dZdS )r~   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   rK   r   _access_method_access_location)r)   access_methodaccess_locationr"   r"   r#   r4   g  s    

zAccessDescription.__init__c                 C   s
   d | S )NzY<AccessDescription(access_method={0.access_method}, access_location={0.access_location})>rv   r(   r"   r"   r#   rN   q  s    zAccessDescription.__repr__c                 C   s&   t |tstS | j|jko$| j|jkS r%   )r   r~   rZ   r   r   r[   r"   r"   r#   r]   w  s
    

zAccessDescription.__eq__c                 C   s
   | |k S r%   r"   r[   r"   r"   r#   r^     s    zAccessDescription.__ne__c                 C   s   t | j| jfS r%   )r`   r   r   r(   r"   r"   r#   ra     s    zAccessDescription.__hash__r   r   N)r;   r<   r=   r4   rN   r]   r^   ra   r   rb   r   r   r"   r"   r"   r#   r~   f  s   
	
r~   c                   @   sN   e Zd ZejZdd ZedZ	edZ
dd Zdd Zd	d
 Zdd ZdS )BasicConstraintsc                 C   sZ   t |tstd|d k	r&|s&td|d k	rJt |tjrB|dk rJt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   boolrK   r   rU   rV   _ca_path_length)r)   capath_lengthr"   r"   r#   r4     s    

zBasicConstraints.__init__r   r   c                 C   s
   d | S )Nz:<BasicConstraints(ca={0.ca}, path_length={0.path_length})>rv   r(   r"   r"   r#   rN     s    zBasicConstraints.__repr__c                 C   s&   t |tstS | j|jko$| j|jkS r%   )r   r   rZ   r   r   r[   r"   r"   r#   r]     s    
zBasicConstraints.__eq__c                 C   s
   | |k S r%   r"   r[   r"   r"   r#   r^     s    zBasicConstraints.__ne__c                 C   s   t | j| jfS r%   )r`   r   r   r(   r"   r"   r#   ra     s    zBasicConstraints.__hash__N)r;   r<   r=   r   ZBASIC_CONSTRAINTSr5   r4   r   rb   r   r   rN   r]   r^   ra   r"   r"   r"   r#   r     s   

r   c                   @   sD   e Zd ZejZdd ZedZ	dd Z
dd Zdd	 Zd
d ZdS )DeltaCRLIndicatorc                 C   s   t |tjstd|| _d S rS   rT   rX   r"   r"   r#   r4     s    zDeltaCRLIndicator.__init__rW   c                 C   s   t |tstS | j|jkS r%   )r   r   rZ   rY   r[   r"   r"   r#   r]     s    
zDeltaCRLIndicator.__eq__c                 C   s
   | |k S r%   r"   r[   r"   r"   r#   r^     s    zDeltaCRLIndicator.__ne__c                 C   s
   t | jS r%   r_   r(   r"   r"   r#   ra     s    zDeltaCRLIndicator.__hash__c                 C   s
   d | S )Nz.<DeltaCRLIndicator(crl_number={0.crl_number})>rv   r(   r"   r"   r#   rN     s    zDeltaCRLIndicator.__repr__N)r;   r<   r=   r   ZDELTA_CRL_INDICATORr5   r4   r   rb   rY   r]   r^   ra   rN   r"   r"   r"   r#   r     s   
r   c                   @   sH   e Zd ZejZdd Zed\ZZ	Z
dd Zdd Zdd	 Zd
d ZdS )CRLDistributionPointsc                 C   s,   t |}tdd |D s"td|| _d S )Nc                 s   s   | ]}t |tV  qd S r%   r   DistributionPointre   r"   r"   r#   rh     s    z1CRLDistributionPoints.__init__.<locals>.<genexpr>?distribution_points must be a list of DistributionPoint objectsri   rj   rK   _distribution_pointsr)   Zdistribution_pointsr"   r"   r#   r4     s    zCRLDistributionPoints.__init__r   c                 C   s   d | jS )Nz<CRLDistributionPoints({})>rG   r   r(   r"   r"   r#   rN     s    zCRLDistributionPoints.__repr__c                 C   s   t |tstS | j|jkS r%   )r   r   rZ   r   r[   r"   r"   r#   r]     s    
zCRLDistributionPoints.__eq__c                 C   s
   | |k S r%   r"   r[   r"   r"   r#   r^     s    zCRLDistributionPoints.__ne__c                 C   s   t t| jS r%   r`   rw   r   r(   r"   r"   r#   ra     s    zCRLDistributionPoints.__hash__N)r;   r<   r=   r   ZCRL_DISTRIBUTION_POINTSr5   r4   r1   rO   rP   rQ   rN   r]   r^   ra   r"   r"   r"   r#   r     s   
r   c                   @   sH   e Zd ZejZdd Zed\ZZ	Z
dd Zdd Zdd	 Zd
d ZdS )FreshestCRLc                 C   s,   t |}tdd |D s"td|| _d S )Nc                 s   s   | ]}t |tV  qd S r%   r   re   r"   r"   r#   rh     s    z'FreshestCRL.__init__.<locals>.<genexpr>r   r   r   r"   r"   r#   r4     s    zFreshestCRL.__init__r   c                 C   s   d | jS )Nz<FreshestCRL({})>r   r(   r"   r"   r#   rN     s    zFreshestCRL.__repr__c                 C   s   t |tstS | j|jkS r%   )r   r   rZ   r   r[   r"   r"   r#   r]     s    
zFreshestCRL.__eq__c                 C   s
   | |k S r%   r"   r[   r"   r"   r#   r^     s    zFreshestCRL.__ne__c                 C   s   t t| jS r%   r   r(   r"   r"   r#   ra     s    zFreshestCRL.__hash__N)r;   r<   r=   r   ZFRESHEST_CRLr5   r4   r1   rO   rP   rQ   rN   r]   r^   ra   r"   r"   r"   r#   r     s   
r   c                   @   s\   e Zd Zdd Zdd Zdd Zdd Zd	d
 Ze	dZ
e	dZe	dZe	dZdS )r   c                 C   s   |r|rt d|r6t|}tdd |D s6td|rLt|tsLtd|rrt|}tdd |D srt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 r%   rd   re   r"   r"   r#   rh   "  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 r%   rd   re   r"   r"   r#   rh   /  s     z2crl_issuer must be None or a list of general namesc                 s   s   | ]}t |tV  qd S r%   r   ReasonFlagsre   r"   r"   r#   rh   6  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)r   ri   rj   rK   r   r   	frozensetr   unspecifiedremove_from_crl
_full_name_relative_name_reasons_crl_issuer)r)   	full_namerelative_namereasons
crl_issuerr"   r"   r#   r4     sV    
zDistributionPoint.__init__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})>rv   r(   r"   r"   r#   rN   N  s    zDistributionPoint.__repr__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   rZ   r   r   r   r   r[   r"   r"   r#   r]   U  s    



zDistributionPoint.__eq__c                 C   s
   | |k S r%   r"   r[   r"   r"   r#   r^   `  s    zDistributionPoint.__ne__c                 C   sH   | j d k	rt| j }nd }| jd k	r0t| j}nd }t|| j| j|fS r%   )r   rw   r   r`   r   r   )r)   fnr   r"   r"   r#   ra   c  s    

zDistributionPoint.__hash__r   r   r   r   N)r;   r<   r=   r4   rN   r]   r^   ra   r   rb   r   r   r   r   r"   r"   r"   r#   r     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)r;   r<   r=   r   Zkey_compromiseZca_compromiseZaffiliation_changedr   Zcessation_of_operationZcertificate_holdZprivilege_withdrawnZaa_compromiser   r"   r"   r"   r#   r   v  s   r   c                   @   sN   e Zd ZejZdd Zdd Zdd Zdd Z	d	d
 Z
edZedZdS )PolicyConstraintsc                 C   s`   |d k	rt |tjstd|d k	r8t |tjs8td|d krP|d krPt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   rU   rV   rK   r   _require_explicit_policy_inhibit_policy_mapping)r)   require_explicit_policyinhibit_policy_mappingr"   r"   r#   r4     s(    
 
 zPolicyConstraints.__init__c                 C   s
   d | S )Nz{<PolicyConstraints(require_explicit_policy={0.require_explicit_policy}, inhibit_policy_mapping={0.inhibit_policy_mapping})>rv   r(   r"   r"   r#   rN     s    zPolicyConstraints.__repr__c                 C   s&   t |tstS | j|jko$| j|jkS r%   )r   r   rZ   r   r   r[   r"   r"   r#   r]     s
    

zPolicyConstraints.__eq__c                 C   s
   | |k S r%   r"   r[   r"   r"   r#   r^     s    zPolicyConstraints.__ne__c                 C   s   t | j| jfS r%   )r`   r   r   r(   r"   r"   r#   ra     s    
zPolicyConstraints.__hash__r   r   N)r;   r<   r=   r   ZPOLICY_CONSTRAINTSr5   r4   rN   r]   r^   ra   r   rb   r   r   r"   r"   r"   r#   r     s   	r   c                   @   sH   e Zd ZejZdd Zed\ZZ	Z
dd Zdd Zdd	 Zd
d ZdS )CertificatePoliciesc                 C   s,   t |}tdd |D s"td|| _d S )Nc                 s   s   | ]}t |tV  qd S r%   )r   PolicyInformationre   r"   r"   r#   rh     s     z/CertificatePolicies.__init__.<locals>.<genexpr>z;Every item in the policies list must be a PolicyInformation)ri   rj   rK   	_policies)r)   Zpoliciesr"   r"   r#   r4     s    zCertificatePolicies.__init__r   c                 C   s   d | jS )Nz<CertificatePolicies({})>)rG   r   r(   r"   r"   r#   rN     s    zCertificatePolicies.__repr__c                 C   s   t |tstS | j|jkS r%   )r   r   rZ   r   r[   r"   r"   r#   r]     s    
zCertificatePolicies.__eq__c                 C   s
   | |k S r%   r"   r[   r"   r"   r#   r^     s    zCertificatePolicies.__ne__c                 C   s   t t| jS r%   )r`   rw   r   r(   r"   r"   r#   ra     s    zCertificatePolicies.__hash__N)r;   r<   r=   r   ZCERTIFICATE_POLICIESr5   r4   r1   rO   rP   rQ   rN   r]   r^   ra   r"   r"   r"   r#   r     s   
r   c                   @   sH   e Zd Zdd Zdd Zdd Zdd Zd	d
 Ze	dZ
e	dZdS )r   c                 C   sH   t |tstd|| _|r>t|}tdd |D s>td|| _d S )Nz-policy_identifier must be an ObjectIdentifierc                 s   s   | ]}t |tjtfV  qd S r%   )r   rU   	text_type
UserNoticere   r"   r"   r#   rh     s   z-PolicyInformation.__init__.<locals>.<genexpr>zMpolicy_qualifiers must be a list of strings and/or UserNotice objects or None)r   r   rK   _policy_identifierri   rj   _policy_qualifiers)r)   policy_identifierpolicy_qualifiersr"   r"   r#   r4     s    
zPolicyInformation.__init__c                 C   s
   d | S )Nze<PolicyInformation(policy_identifier={0.policy_identifier}, policy_qualifiers={0.policy_qualifiers})>rv   r(   r"   r"   r#   rN     s    zPolicyInformation.__repr__c                 C   s&   t |tstS | j|jko$| j|jkS r%   )r   r   rZ   r   r   r[   r"   r"   r#   r]     s
    

zPolicyInformation.__eq__c                 C   s
   | |k S r%   r"   r[   r"   r"   r#   r^     s    zPolicyInformation.__ne__c                 C   s(   | j d k	rt| j }nd }t| j|fS r%   )r   rw   r`   r   )r)   Zpqr"   r"   r#   ra     s    
zPolicyInformation.__hash__r   r   N)r;   r<   r=   r4   rN   r]   r^   ra   r   rb   r   r   r"   r"   r"   r#   r     s   	
r   c                   @   sH   e Zd Zdd Zdd Zdd Zdd Zd	d
 Ze	dZ
e	dZdS )r   c                 C   s&   |rt |tstd|| _|| _d S )Nz2notice_reference must be None or a NoticeReference)r   NoticeReferencerK   _notice_reference_explicit_text)r)   notice_referenceexplicit_textr"   r"   r#   r4     s     zUserNotice.__init__c                 C   s
   d | S )NzV<UserNotice(notice_reference={0.notice_reference}, explicit_text={0.explicit_text!r})>rv   r(   r"   r"   r#   rN     s    zUserNotice.__repr__c                 C   s&   t |tstS | j|jko$| j|jkS r%   )r   r   rZ   r   r   r[   r"   r"   r#   r]   $  s
    

zUserNotice.__eq__c                 C   s
   | |k S r%   r"   r[   r"   r"   r#   r^   -  s    zUserNotice.__ne__c                 C   s   t | j| jfS r%   )r`   r   r   r(   r"   r"   r#   ra   0  s    zUserNotice.__hash__r   r   N)r;   r<   r=   r4   rN   r]   r^   ra   r   rb   r   r   r"   r"   r"   r#   r     s   	
r   c                   @   sH   e Zd Zdd Zdd Zdd Zdd Zd	d
 Ze	dZ
e	dZdS )r   c                 C   s2   || _ t|}tdd |D s(td|| _d S )Nc                 s   s   | ]}t |tV  qd S r%   )r   intre   r"   r"   r#   rh   ;  s     z+NoticeReference.__init__.<locals>.<genexpr>z)notice_numbers must be a list of integers)_organizationri   rj   rK   _notice_numbers)r)   organizationnotice_numbersr"   r"   r#   r4   8  s
    zNoticeReference.__init__c                 C   s
   d | S )NzU<NoticeReference(organization={0.organization!r}, notice_numbers={0.notice_numbers})>rv   r(   r"   r"   r#   rN   @  s    zNoticeReference.__repr__c                 C   s&   t |tstS | j|jko$| j|jkS r%   )r   r   rZ   r   r   r[   r"   r"   r#   r]   F  s
    

zNoticeReference.__eq__c                 C   s
   | |k S r%   r"   r[   r"   r"   r#   r^   O  s    zNoticeReference.__ne__c                 C   s   t | jt| jfS r%   )r`   r   rw   r   r(   r"   r"   r#   ra   R  s    zNoticeReference.__hash__r   r   N)r;   r<   r=   r4   rN   r]   r^   ra   r   rb   r   r   r"   r"   r"   r#   r   7  s   	
r   c                   @   sH   e Zd ZejZdd Zed\ZZ	Z
dd Zdd Zdd	 Zd
d ZdS )ExtendedKeyUsagec                 C   s,   t |}tdd |D s"td|| _d S )Nc                 s   s   | ]}t |tV  qd S r%   )r   r   re   r"   r"   r#   rh   _  s     z,ExtendedKeyUsage.__init__.<locals>.<genexpr>z9Every item in the usages list must be an ObjectIdentifier)ri   rj   rK   _usages)r)   Zusagesr"   r"   r#   r4   ]  s    zExtendedKeyUsage.__init__r   c                 C   s   d | jS )Nz<ExtendedKeyUsage({})>)rG   r   r(   r"   r"   r#   rN   h  s    zExtendedKeyUsage.__repr__c                 C   s   t |tstS | j|jkS r%   )r   r   rZ   r   r[   r"   r"   r#   r]   k  s    
zExtendedKeyUsage.__eq__c                 C   s
   | |k S r%   r"   r[   r"   r"   r#   r^   q  s    zExtendedKeyUsage.__ne__c                 C   s   t t| jS r%   )r`   rw   r   r(   r"   r"   r#   ra   t  s    zExtendedKeyUsage.__hash__N)r;   r<   r=   r   ZEXTENDED_KEY_USAGEr5   r4   r1   rO   rP   rQ   rN   r]   r^   ra   r"   r"   r"   r#   r   Y  s   	r   c                   @   s2   e Zd ZejZdd Zdd Zdd Zdd Z	d	S )
OCSPNoCheckc                 C   s   t |tstS dS NT)r   r   rZ   r[   r"   r"   r#   r]   |  s    
zOCSPNoCheck.__eq__c                 C   s
   | |k S r%   r"   r[   r"   r"   r#   r^     s    zOCSPNoCheck.__ne__c                 C   s   t tS r%   )r`   r   r(   r"   r"   r#   ra     s    zOCSPNoCheck.__hash__c                 C   s   dS )Nz<OCSPNoCheck()>r"   r(   r"   r"   r#   rN     s    zOCSPNoCheck.__repr__N)
r;   r<   r=   r   ZOCSP_NO_CHECKr5   r]   r^   ra   rN   r"   r"   r"   r#   r   x  s
   r   c                   @   s2   e Zd ZejZdd Zdd Zdd Zdd Z	d	S )
PrecertPoisonc                 C   s   t |tstS dS r   )r   r   rZ   r[   r"   r"   r#   r]     s    
zPrecertPoison.__eq__c                 C   s
   | |k S r%   r"   r[   r"   r"   r#   r^     s    zPrecertPoison.__ne__c                 C   s   t tS r%   )r`   r   r(   r"   r"   r#   ra     s    zPrecertPoison.__hash__c                 C   s   dS )Nz<PrecertPoison()>r"   r(   r"   r"   r#   rN     s    zPrecertPoison.__repr__N)
r;   r<   r=   r   ZPRECERT_POISONr5   r]   r^   ra   rN   r"   r"   r"   r#   r     s
   r   c                   @   sH   e Zd ZejZdd Zed\ZZ	Z
dd Zdd Zdd	 Zd
d ZdS )
TLSFeaturec                 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 r%   )r   TLSFeatureTypere   r"   r"   r#   rh     s     z&TLSFeature.__init__.<locals>.<genexpr>r   z@features must be a list of elements from the TLSFeatureType enum)ri   rj   r&   rK   	_features)r)   featuresr"   r"   r#   r4     s    
zTLSFeature.__init__r   c                 C   s
   d | S )Nz$<TLSFeature(features={0._features})>rv   r(   r"   r"   r#   rN     s    zTLSFeature.__repr__c                 C   s   t |tstS | j|jkS r%   )r   r   rZ   r   r[   r"   r"   r#   r]     s    
zTLSFeature.__eq__c                 C   s
   | |k S r%   r"   r[   r"   r"   r#   r^     s    zTLSFeature.__ne__c                 C   s   t t| jS r%   )r`   rw   r   r(   r"   r"   r#   ra     s    zTLSFeature.__hash__N)r;   r<   r=   r   ZTLS_FEATUREr5   r4   r1   rO   rP   rQ   rN   r]   r^   ra   r"   r"   r"   r#   r     s   r   c                   @   s   e Zd ZdZdZdS )r         N)r;   r<   r=   Zstatus_requestZstatus_request_v2r"   r"   r"   r#   r     s   r   c                 C   s   i | ]}|j |qS r"   rL   re   r"   r"   r#   
<dictcomp>  s      r   c                   @   sD   e Zd ZejZdd Zdd Zdd Zdd Z	d	d
 Z
edZdS )InhibitAnyPolicyc                 C   s.   t |tj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   rU   rV   rK   r   _skip_certs)r)   
skip_certsr"   r"   r#   r4     s
    zInhibitAnyPolicy.__init__c                 C   s
   d | S )Nz-<InhibitAnyPolicy(skip_certs={0.skip_certs})>rv   r(   r"   r"   r#   rN     s    zInhibitAnyPolicy.__repr__c                 C   s   t |tstS | j|jkS r%   )r   r   rZ   r   r[   r"   r"   r#   r]     s    
zInhibitAnyPolicy.__eq__c                 C   s
   | |k S r%   r"   r[   r"   r"   r#   r^     s    zInhibitAnyPolicy.__ne__c                 C   s
   t | jS r%   )r`   r   r(   r"   r"   r#   ra     s    zInhibitAnyPolicy.__hash__r   N)r;   r<   r=   r   ZINHIBIT_ANY_POLICYr5   r4   rN   r]   r^   ra   r   rb   r   r"   r"   r"   r#   r     s   	r   c                   @   s   e Zd ZejZdd ZedZ	edZ
edZedZedZedZed	Zed
d Zedd Zdd Zdd Zdd Zdd ZdS )KeyUsagec
           
      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)   digital_signaturecontent_commitmentkey_enciphermentdata_enciphermentkey_agreementkey_cert_signcrl_signencipher_onlydecipher_onlyr"   r"   r#   r4     s    zKeyUsage.__init__r   r   r   r   r   r   r   c                 C   s   | j stdn| jS d S )Nz7encipher_only is undefined unless key_agreement is true)r   r   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   r   r   r(   r"   r"   r#   r   !  s
    zKeyUsage.decipher_onlyc                 C   s<   z| 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   r   rG   )r)   r   r   r"   r"   r#   rN   *  s    

  zKeyUsage.__repr__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 r%   )r   r   rZ   r   r   r   r   r   r   r   r   r   r[   r"   r"   r#   r]   ?  s&    








zKeyUsage.__eq__c                 C   s
   | |k S r%   r"   r[   r"   r"   r#   r^   O  s    zKeyUsage.__ne__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(   r"   r"   r#   ra   R  s    zKeyUsage.__hash__N)r;   r<   r=   r   Z	KEY_USAGEr5   r4   r   rb   r   r   r   r   r   r   r   propertyr   r   rN   r]   r^   ra   r"   r"   r"   r#   r     s"   








r   c                   @   sV   e Zd ZejZdd Zdd Zdd Zdd Z	d	d
 Z
dd ZedZedZdS )NameConstraintsc                 C   s   |d k	r4t |}tdd |D s*td| | |d k	rht |}tdd |D s^td| | |d kr|d krtd|| _|| _d S )Nc                 s   s   | ]}t |tV  qd S r%   rd   re   r"   r"   r#   rh   i  s     z+NameConstraints.__init__.<locals>.<genexpr>z@permitted_subtrees must be a list of GeneralName objects or Nonec                 s   s   | ]}t |tV  qd S r%   rd   re   r"   r"   r#   rh   s  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)ri   rj   rK   _validate_ip_namer   _permitted_subtrees_excluded_subtrees)r)   permitted_subtreesexcluded_subtreesr"   r"   r#   r4   f  s(    

zNameConstraints.__init__c                 C   s&   t |tstS | j|jko$| j|jkS r%   )r   r   rZ   r   r   r[   r"   r"   r#   r]     s
    

zNameConstraints.__eq__c                 C   s
   | |k S r%   r"   r[   r"   r"   r#   r^     s    zNameConstraints.__ne__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 r%   )r   r   rL   	ipaddressIPv4NetworkIPv6Network)rf   namer"   r"   r#   rh     s   
 
z4NameConstraints._validate_ip_name.<locals>.<genexpr>zGIPAddress name constraints must be an IPv4Network or IPv6Network object)anyrK   )r)   treer"   r"   r#   r     s    z!NameConstraints._validate_ip_namec                 C   s
   d | S )Nze<NameConstraints(permitted_subtrees={0.permitted_subtrees}, excluded_subtrees={0.excluded_subtrees})>rv   r(   r"   r"   r#   rN     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 r%   )r   rw   r   r`   )r)   Zpsesr"   r"   r#   ra     s    

zNameConstraints.__hash__r   r   N)r;   r<   r=   r   ZNAME_CONSTRAINTSr5   r4   r]   r^   r   rN   ra   r   rb   r   r   r"   r"   r"   r#   r   b  s   	
r   c                   @   sR   e Zd Zdd ZedZedZedZdd Z	dd	 Z
d
d Zdd ZdS )	Extensionc                 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   rK   r   _oid	_critical_value)r)   r5   criticalrL   r"   r"   r#   r4     s    

zExtension.__init__r   r   r   c                 C   s
   d | S )Nz@<Extension(oid={0.oid}, critical={0.critical}, value={0.value})>rv   r(   r"   r"   r#   rN     s    zExtension.__repr__c                 C   s2   t |tstS | j|jko0| j|jko0| j|jkS r%   )r   r   rZ   r5   r   rL   r[   r"   r"   r#   r]     s    


zExtension.__eq__c                 C   s
   | |k S r%   r"   r[   r"   r"   r#   r^     s    zExtension.__ne__c                 C   s   t | j| j| jfS r%   )r`   r5   r   rL   r(   r"   r"   r#   ra     s    zExtension.__hash__N)r;   r<   r=   r4   r   rb   r5   r   rL   rN   r]   r^   ra   r"   r"   r"   r#   r     s   



r   c                   @   sJ   e Zd Zdd Zed\ZZZdd Zdd Z	dd	 Z
d
d Zdd ZdS )GeneralNamesc                 C   s,   t |}tdd |D s"td|| _d S )Nc                 s   s   | ]}t |tV  qd S r%   rd   re   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)ri   rj   rK   _general_namesr)   Zgeneral_namesr"   r"   r#   r4     s    zGeneralNames.__init__r   c                    s0    fdd| D } t kr(dd |D }t|S )Nc                 3   s   | ]}t | r|V  qd S r%   )r   rf   ityper"   r#   rh     s     
 z3GeneralNames.get_values_for_type.<locals>.<genexpr>c                 s   s   | ]}|j V  qd S r%   r   r   r"   r"   r#   rh     s     )r   ri   )r)   r   objsr"   r   r#   get_values_for_type  s    z GeneralNames.get_values_for_typec                 C   s   d | jS )Nz<GeneralNames({})>rG   r   r(   r"   r"   r#   rN     s    zGeneralNames.__repr__c                 C   s   t |tstS | j|jkS r%   )r   r   rZ   r   r[   r"   r"   r#   r]     s    
zGeneralNames.__eq__c                 C   s
   | |k S r%   r"   r[   r"   r"   r#   r^     s    zGeneralNames.__ne__c                 C   s   t t| jS r%   )r`   rw   r   r(   r"   r"   r#   ra     s    zGeneralNames.__hash__N)r;   r<   r=   r4   r1   rO   rP   rQ   r   rN   r]   r^   ra   r"   r"   r"   r#   r     s   
	r   c                   @   sP   e Zd ZejZdd Zed\ZZ	Z
dd Zdd Zdd	 Zd
d Zdd ZdS )SubjectAlternativeNamec                 C   s   t || _d S r%   r   r   r   r"   r"   r#   r4     s    zSubjectAlternativeName.__init__r   c                 C   s   | j |S r%   r   r   r)   r   r"   r"   r#   r     s    z*SubjectAlternativeName.get_values_for_typec                 C   s   d | jS )Nz<SubjectAlternativeName({})>r  r(   r"   r"   r#   rN     s    zSubjectAlternativeName.__repr__c                 C   s   t |tstS | j|jkS r%   )r   r  rZ   r   r[   r"   r"   r#   r]     s    
zSubjectAlternativeName.__eq__c                 C   s
   | |k S r%   r"   r[   r"   r"   r#   r^     s    zSubjectAlternativeName.__ne__c                 C   s
   t | jS r%   r`   r   r(   r"   r"   r#   ra     s    zSubjectAlternativeName.__hash__N)r;   r<   r=   r   ZSUBJECT_ALTERNATIVE_NAMEr5   r4   r1   rO   rP   rQ   r   rN   r]   r^   ra   r"   r"   r"   r#   r    s   r  c                   @   sP   e Zd ZejZdd Zed\ZZ	Z
dd Zdd Zdd	 Zd
d Zdd ZdS )IssuerAlternativeNamec                 C   s   t || _d S r%   r  r   r"   r"   r#   r4   #  s    zIssuerAlternativeName.__init__r   c                 C   s   | j |S r%   r  r  r"   r"   r#   r   (  s    z)IssuerAlternativeName.get_values_for_typec                 C   s   d | jS )Nz<IssuerAlternativeName({})>r  r(   r"   r"   r#   rN   +  s    zIssuerAlternativeName.__repr__c                 C   s   t |tstS | j|jkS r%   )r   r  rZ   r   r[   r"   r"   r#   r]   .  s    
zIssuerAlternativeName.__eq__c                 C   s
   | |k S r%   r"   r[   r"   r"   r#   r^   4  s    zIssuerAlternativeName.__ne__c                 C   s
   t | jS r%   r  r(   r"   r"   r#   ra   7  s    zIssuerAlternativeName.__hash__N)r;   r<   r=   r   ZISSUER_ALTERNATIVE_NAMEr5   r4   r1   rO   rP   rQ   r   rN   r]   r^   ra   r"   r"   r"   r#   r    s   r  c                   @   sP   e Zd ZejZdd Zed\ZZ	Z
dd Zdd Zdd	 Zd
d Zdd ZdS )CertificateIssuerc                 C   s   t || _d S r%   r  r   r"   r"   r#   r4   ?  s    zCertificateIssuer.__init__r   c                 C   s   | j |S r%   r  r  r"   r"   r#   r   D  s    z%CertificateIssuer.get_values_for_typec                 C   s   d | jS )Nz<CertificateIssuer({})>r  r(   r"   r"   r#   rN   G  s    zCertificateIssuer.__repr__c                 C   s   t |tstS | j|jkS r%   )r   r  rZ   r   r[   r"   r"   r#   r]   J  s    
zCertificateIssuer.__eq__c                 C   s
   | |k S r%   r"   r[   r"   r"   r#   r^   P  s    zCertificateIssuer.__ne__c                 C   s
   t | jS r%   r  r(   r"   r"   r#   ra   S  s    zCertificateIssuer.__hash__N)r;   r<   r=   r   ZCERTIFICATE_ISSUERr5   r4   r1   rO   rP   rQ   r   rN   r]   r^   ra   r"   r"   r"   r#   r  ;  s   r  c                   @   sD   e Zd ZejZdd Zdd Zdd Zdd Z	d	d
 Z
edZdS )	CRLReasonc                 C   s   t |tstd|| _d S )Nz*reason must be an element from ReasonFlags)r   r   rK   _reason)r)   reasonr"   r"   r#   r4   [  s    
zCRLReason.__init__c                 C   s   d | jS )Nz<CRLReason(reason={})>)rG   r
  r(   r"   r"   r#   rN   a  s    zCRLReason.__repr__c                 C   s   t |tstS | j|jkS r%   )r   r	  rZ   r  r[   r"   r"   r#   r]   d  s    
zCRLReason.__eq__c                 C   s
   | |k S r%   r"   r[   r"   r"   r#   r^   j  s    zCRLReason.__ne__c                 C   s
   t | jS r%   )r`   r  r(   r"   r"   r#   ra   m  s    zCRLReason.__hash__r
  N)r;   r<   r=   r   Z
CRL_REASONr5   r4   rN   r]   r^   ra   r   rb   r  r"   r"   r"   r#   r	  W  s   r	  c                   @   sD   e Zd ZejZdd Zdd Zdd Zdd Z	d	d
 Z
edZdS )InvalidityDatec                 C   s   t |tjstd|| _d S )Nz+invalidity_date must be a datetime.datetime)r   datetimerK   _invalidity_date)r)   invalidity_dater"   r"   r#   r4   w  s    zInvalidityDate.__init__c                 C   s   d | jS )Nz$<InvalidityDate(invalidity_date={})>)rG   r  r(   r"   r"   r#   rN   }  s    zInvalidityDate.__repr__c                 C   s   t |tstS | j|jkS r%   )r   r  rZ   r  r[   r"   r"   r#   r]     s    
zInvalidityDate.__eq__c                 C   s
   | |k S r%   r"   r[   r"   r"   r#   r^     s    zInvalidityDate.__ne__c                 C   s
   t | jS r%   )r`   r  r(   r"   r"   r#   ra     s    zInvalidityDate.__hash__r  N)r;   r<   r=   r   ZINVALIDITY_DATEr5   r4   rN   r]   r^   ra   r   rb   r  r"   r"   r"   r#   r  s  s   r  c                   @   sH   e Zd ZejZdd Zed\ZZ	Z
dd Zdd Zdd	 Zd
d ZdS ))PrecertificateSignedCertificateTimestampsc                 C   s,   t |}tdd |D s"td|| _d S )Nc                 s   s   | ]}t |tV  qd S r%   r   r   rf   Zsctr"   r"   r#   rh     s   zEPrecertificateSignedCertificateTimestamps.__init__.<locals>.<genexpr>YEvery item in the signed_certificate_timestamps list must be a SignedCertificateTimestampri   rj   rK   _signed_certificate_timestampsr)   Zsigned_certificate_timestampsr"   r"   r#   r4     s    z2PrecertificateSignedCertificateTimestamps.__init__r  c                 C   s   d t| S )Nz/<PrecertificateSignedCertificateTimestamps({})>rG   ri   r(   r"   r"   r#   rN     s    z2PrecertificateSignedCertificateTimestamps.__repr__c                 C   s   t t| jS r%   r`   rw   r  r(   r"   r"   r#   ra     s    z2PrecertificateSignedCertificateTimestamps.__hash__c                 C   s   t |tstS | j|jkS r%   )r   r  rZ   r  r[   r"   r"   r#   r]     s    
z0PrecertificateSignedCertificateTimestamps.__eq__c                 C   s
   | |k S r%   r"   r[   r"   r"   r#   r^     s    z0PrecertificateSignedCertificateTimestamps.__ne__N)r;   r<   r=   r   Z%PRECERT_SIGNED_CERTIFICATE_TIMESTAMPSr5   r4   r1   rO   rP   rQ   rN   ra   r]   r^   r"   r"   r"   r#   r    s   
	r  c                   @   sH   e Zd ZejZdd Zed\ZZ	Z
dd Zdd Zdd	 Zd
d ZdS )SignedCertificateTimestampsc                 C   s,   t |}tdd |D s"td|| _d S )Nc                 s   s   | ]}t |tV  qd S r%   r  r  r"   r"   r#   rh     s   z7SignedCertificateTimestamps.__init__.<locals>.<genexpr>r  r  r  r"   r"   r#   r4     s    z$SignedCertificateTimestamps.__init__r  c                 C   s   d t| S )Nz!<SignedCertificateTimestamps({})>r  r(   r"   r"   r#   rN     s    z$SignedCertificateTimestamps.__repr__c                 C   s   t t| jS r%   r  r(   r"   r"   r#   ra     s    z$SignedCertificateTimestamps.__hash__c                 C   s   t |tstS | j|jkS r%   )r   r  rZ   r  r[   r"   r"   r#   r]     s    
z"SignedCertificateTimestamps.__eq__c                 C   s
   | |k S r%   r"   r[   r"   r"   r#   r^     s    z"SignedCertificateTimestamps.__ne__N)r;   r<   r=   r   ZSIGNED_CERTIFICATE_TIMESTAMPSr5   r4   r1   rO   rP   rQ   rN   ra   r]   r^   r"   r"   r"   r#   r    s   
	r  c                   @   sD   e Zd ZejZdd Zdd Zdd Zdd Z	d	d
 Z
edZdS )	OCSPNoncec                 C   s   t |tstd|| _d S )Nznonce must be bytes)r   bytesrK   _nonce)r)   noncer"   r"   r#   r4     s    
zOCSPNonce.__init__c                 C   s   t |tstS | j|jkS r%   )r   r  rZ   r  r[   r"   r"   r#   r]     s    
zOCSPNonce.__eq__c                 C   s
   | |k S r%   r"   r[   r"   r"   r#   r^     s    zOCSPNonce.__ne__c                 C   s
   t | jS r%   )r`   r  r(   r"   r"   r#   ra     s    zOCSPNonce.__hash__c                 C   s
   d | S )Nz<OCSPNonce(nonce={0.nonce!r})>rv   r(   r"   r"   r#   rN     s    zOCSPNonce.__repr__r  N)r;   r<   r=   r   ZNONCEr5   r4   r]   r^   ra   rN   r   rb   r  r"   r"   r"   r#   r    s   r  c                   @   s   e Zd ZejZdd Zdd Zdd Zdd Z	d	d
 Z
edZedZedZedZedZedZedZdS )IssuingDistributionPointc           	      C   s   |r(t |tr tdd |D s(td|rHtj|ks@tj|krHtdt |trpt |trpt |trpt |tsxt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 r%   r   re   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"   re   r"   r"   r#   
<listcomp>/  s      z5IssuingDistributionPoint.__init__.<locals>.<listcomp>   zOnly one of the following can be set to True: only_contains_user_certs, only_contains_ca_certs, indirect_crl, only_contains_attribute_certszCannot create empty extension: if only_contains_user_certs, only_contains_ca_certs, indirect_crl, and only_contains_attribute_certs are all False, then either full_name, relative_name, or only_some_reasons must have a value.)r   r   rj   rK   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   only_contains_user_certsonly_contains_ca_certsonly_some_reasonsindirect_crlonly_contains_attribute_certsZcrl_constraintsr"   r"   r#   r4     sp    
z!IssuingDistributionPoint.__init__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})>rv   r(   r"   r"   r#   rN   Q  s    z!IssuingDistributionPoint.__repr__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 r%   )
r   r  rZ   r   r   r&  r'  r(  r)  r*  r[   r"   r"   r#   r]   ]  s"    





zIssuingDistributionPoint.__eq__c                 C   s
   | |k S r%   r"   r[   r"   r"   r#   r^   l  s    zIssuingDistributionPoint.__ne__c                 C   s$   t | j| j| j| j| j| j| jfS r%   )r`   r   r   r&  r'  r(  r)  r*  r(   r"   r"   r#   ra   o  s    z!IssuingDistributionPoint.__hash__r   r   r!  r"  r%  r#  r$  N)r;   r<   r=   r   ZISSUING_DISTRIBUTION_POINTr5   r4   rN   r]   r^   ra   r   rb   r   r   r&  r'  r(  r)  r*  r"   r"   r"   r#   r    s&   P



r  c                   @   sH   e Zd Zdd ZedZedZdd Zdd Z	d	d
 Z
dd ZdS )rJ   c                 C   s"   t |tstd|| _|| _d S )Nzoid must be an ObjectIdentifier)r   r   rK   r   r   )r)   r5   rL   r"   r"   r#   r4     s    
zUnrecognizedExtension.__init__r   r   c                 C   s
   d | S )Nz7<UnrecognizedExtension(oid={0.oid}, value={0.value!r})>rv   r(   r"   r"   r#   rN     s    zUnrecognizedExtension.__repr__c                 C   s&   t |tstS | j|jko$| j|jkS r%   )r   rJ   rZ   r5   rL   r[   r"   r"   r#   r]     s    
zUnrecognizedExtension.__eq__c                 C   s
   | |k S r%   r"   r[   r"   r"   r#   r^     s    zUnrecognizedExtension.__ne__c                 C   s   t | j| jfS r%   )r`   r5   rL   r(   r"   r"   r#   ra     s    zUnrecognizedExtension.__hash__N)r;   r<   r=   r4   r   rb   r5   rL   rN   r]   r^   ra   r"   r"   r"   r#   rJ     s   

rJ   )W
__future__r   r   r   rA   r  r   r   enumr   rU   Zcryptographyr   Zcryptography.hazmat._derr   r   r	   r
   Zcryptography.hazmat.primitivesr   r   Z,cryptography.hazmat.primitives.asymmetric.ecr   Z-cryptography.hazmat.primitives.asymmetric.rsar   Z*cryptography.x509.certificate_transparencyr   Zcryptography.x509.general_namer   r   r   Zcryptography.x509.namer   Zcryptography.x509.oidr   r   r   r   r$   r1   	Exceptionr2   r?   add_metaclassABCMetaobjectr@   rC   Zregister_interfacerR   rc   ry   r|   r   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Z_TLS_FEATURE_TYPE_TO_ENUMr   r   r   r   r   r  r  r  r	  r  r  r  r  r  rJ   r"   r"   r"   r#   <module>   s   (
![$)##^<2%""qQ)&(& 