B
    ]\'                 @   sj  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
mZ d dl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 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#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,e*G dd de)Z-e,e*G dd de)Z.e,e*G dd de)Z/e,e*G dd de)Z0G dd  d e)Z1e,e*G d!d" d"e)Z2e,e*G d#d$ d$e)Z3e,e*G d%d& d&e)Z4e,e*G d'd( d(e)Z5G d)d* d*e)Z6G d+d, d,e	Z7e,e*G d-d. d.e)Z8e,e*G d/d0 d0e)Z9G d1d2 d2e)Z:G d3d4 d4e)Z;G d5d6 d6e)Z<e,e*G d7d8 d8e)Z=e,e*G d9d: d:e)Z>e,e*G d;d< d<e)Z?e,e*G d=d> d>e)Z@G d?d@ d@e	ZAeBdAdB eAD ZCe,e*G dCdD dDe)ZDe,e*G dEdF dFe)ZEe,e*G dGdH dHe)ZFG dIdJ dJe)ZGG dKdL dLe)ZHe,e*G dMdN dNe)ZIe,e*G dOdP dPe)ZJe,e*G dQdR dRe)ZKe,e*G dSdT dTe)ZLe,e*G dUdV dVe)ZMe,e*G dWdX dXe)ZNe,e*G dYdZ dZe)ZOe,e*G d[d\ d\e)ZPe,e*G d]d^ d^e)ZQdS )_    )absolute_importdivisionprint_functionN)Enum)PublicKeyInfo)utils)constant_timeserialization)EllipticCurvePublicKey)RSAPublicKey)SignedCertificateTimestamp)GeneralName	IPAddress	OtherName)RelativeDistinguishedName)CRLEntryExtensionOIDExtensionOIDOCSPExtensionOIDObjectIdentifierc             C   st   t | tr | tjjtjj}nFt | tr@| tjj	tjj
}n&| tjjtjj}tt|d }t| S )N
public_key)
isinstancer   public_bytesr	   EncodingDERPublicFormatPKCS1r
   X962UncompressedPointSubjectPublicKeyInfobytesr   loadhashlibsha1digest)r   dataZ
serialized r%   b/Users/stiphol/Desktop/Flask_blog/venv/lib/python3.7/site-packages/cryptography/x509/extensions.py_key_identifier_from_public_key   s    


r'   c                   s   e Zd Z fddZ  ZS )DuplicateExtensionc                s   t t| | || _d S )N)superr(   __init__oid)selfmsgr+   )	__class__r%   r&   r*   7   s    zDuplicateExtension.__init__)__name__
__module____qualname__r*   __classcell__r%   r%   )r.   r&   r(   6   s   r(   c                   s   e Zd Z fddZ  ZS )ExtensionNotFoundc                s   t t| | || _d S )N)r)   r3   r*   r+   )r,   r-   r+   )r.   r%   r&   r*   =   s    zExtensionNotFound.__init__)r/   r0   r1   r*   r2   r%   r%   )r.   r&   r3   <   s   r3   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&   r+   D   s    zExtensionType.oidN)r/   r0   r1   abcabstractpropertyr+   r%   r%   r%   r&   r4   B   s   r4   c               @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )
Extensionsc             C   s
   || _ d S )N)_extensions)r,   
extensionsr%   r%   r&   r*   L   s    zExtensions.__init__c             C   s0   x| D ]}|j |kr|S qW td||d S )NzNo {} extension was found)r+   r3   format)r,   r+   extr%   r%   r&   get_extension_for_oidO   s    

z Extensions.get_extension_for_oidc             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   valuer3   r:   r+   )r,   Zextclassr;   r%   r%   r&   get_extension_for_classV   s    
z"Extensions.get_extension_for_classc             C   s
   t | jS )N)iterr8   )r,   r%   r%   r&   __iter__f   s    zExtensions.__iter__c             C   s
   t | jS )N)lenr8   )r,   r%   r%   r&   __len__i   s    zExtensions.__len__c             C   s
   | j | S )N)r8   )r,   idxr%   r%   r&   __getitem__l   s    zExtensions.__getitem__c             C   s   d | jS )Nz<Extensions({})>)r:   r8   )r,   r%   r%   r&   __repr__o   s    zExtensions.__repr__N)
r/   r0   r1   r*   r<   r@   rB   rD   rF   rG   r%   r%   r%   r&   r7   K   s   r7   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_typesr>   _crl_number)r,   
crl_numberr%   r%   r&   r*   y   s    zCRLNumber.__init__c             C   s   t |tstS | j|jkS )N)r   rH   NotImplementedrL   )r,   otherr%   r%   r&   __eq__   s    
zCRLNumber.__eq__c             C   s
   | |k S )Nr%   )r,   rN   r%   r%   r&   __ne__   s    zCRLNumber.__ne__c             C   s
   t | jS )N)hashrL   )r,   r%   r%   r&   __hash__   s    zCRLNumber.__hash__c             C   s   d | jS )Nz<CRLNumber({})>)r:   rL   )r,   r%   r%   r&   rG      s    zCRLNumber.__repr__rK   N)r/   r0   r1   r   Z
CRL_NUMBERr+   r*   rO   rP   rR   rG   r   read_only_propertyrL   r%   r%   r%   r&   rH   u   s   rH   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 )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)

ValueErrorlistallr>   r   rI   rJ   _key_identifier_authority_cert_issuer_authority_cert_serial_number)r,   key_identifierauthority_cert_issuerauthority_cert_serial_numberr%   r%   r&   r*      s"    


zAuthorityKeyIdentifier.__init__c             C   s   t |}| |d d dS )N)r^   r_   r`   )r'   )clsr   r#   r%   r%   r&   from_issuer_public_key   s
    z-AuthorityKeyIdentifier.from_issuer_public_keyc             C   s   | |j jd d dS )N)r^   r_   r`   )r?   r#   )ra   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})>)r:   )r,   r%   r%   r&   rG      s    zAuthorityKeyIdentifier.__repr__c             C   s2   t |tstS | j|jko0| j|jko0| j|jkS )N)r   rT   rM   r^   r_   r`   )r,   rN   r%   r%   r&   rO      s    
zAuthorityKeyIdentifier.__eq__c             C   s
   | |k S )Nr%   )r,   rN   r%   r%   r&   rP      s    zAuthorityKeyIdentifier.__ne__c             C   s,   | j d krd }n
t| j }t| j|| jfS )N)r_   tuplerQ   r^   r`   )r,   Zacir%   r%   r&   rR      s
    

zAuthorityKeyIdentifier.__hash__r[   r\   r]   N)r/   r0   r1   r   AUTHORITY_KEY_IDENTIFIERr+   r*   classmethodrb   rc   rG   rO   rP   rR   r   rS   r^   r_   r`   r%   r%   r%   r&   rT      s   		

rT   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 )N)_digest)r,   r#   r%   r%   r&   r*      s    zSubjectKeyIdentifier.__init__c             C   s   | t |S )N)r'   )ra   r   r%   r%   r&   from_public_key   s    z$SubjectKeyIdentifier.from_public_keyrh   c             C   s   d | jS )Nz$<SubjectKeyIdentifier(digest={0!r})>)r:   r#   )r,   r%   r%   r&   rG      s    zSubjectKeyIdentifier.__repr__c             C   s   t |tstS t| j|jS )N)r   rg   rM   r   bytes_eqr#   )r,   rN   r%   r%   r&   rO      s    
zSubjectKeyIdentifier.__eq__c             C   s
   | |k S )Nr%   )r,   rN   r%   r%   r&   rP     s    zSubjectKeyIdentifier.__ne__c             C   s
   t | jS )N)rQ   r#   )r,   r%   r%   r&   rR     s    zSubjectKeyIdentifier.__hash__N)r/   r0   r1   r   SUBJECT_KEY_IDENTIFIERr+   r*   rf   ri   r   rS   r#   rG   rO   rP   rR   r%   r%   r%   r&   rg      s   
rg   c               @   sR   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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 )N)r   AccessDescription)rU   rV   r%   r%   r&   rW     s    z6AuthorityInformationAccess.__init__.<locals>.<genexpr>z@Every item in the descriptions list must be an AccessDescription)rY   rZ   r>   _descriptions)r,   Zdescriptionsr%   r%   r&   r*     s
    z#AuthorityInformationAccess.__init__c             C   s
   t | jS )N)rA   rn   )r,   r%   r%   r&   rB     s    z#AuthorityInformationAccess.__iter__c             C   s
   t | jS )N)rC   rn   )r,   r%   r%   r&   rD     s    z"AuthorityInformationAccess.__len__c             C   s   d | jS )Nz <AuthorityInformationAccess({})>)r:   rn   )r,   r%   r%   r&   rG     s    z#AuthorityInformationAccess.__repr__c             C   s   t |tstS | j|jkS )N)r   rl   rM   rn   )r,   rN   r%   r%   r&   rO     s    
z!AuthorityInformationAccess.__eq__c             C   s
   | |k S )Nr%   )r,   rN   r%   r%   r&   rP   %  s    z!AuthorityInformationAccess.__ne__c             C   s
   | j | S )N)rn   )r,   rE   r%   r%   r&   rF   (  s    z&AuthorityInformationAccess.__getitem__c             C   s   t t| jS )N)rQ   rd   rn   )r,   r%   r%   r&   rR   +  s    z#AuthorityInformationAccess.__hash__N)r/   r0   r1   r   AUTHORITY_INFORMATION_ACCESSr+   r*   rB   rD   rG   rO   rP   rF   rR   r%   r%   r%   r&   rl     s   
rl   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 )rm   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   r>   r   _access_method_access_location)r,   access_methodaccess_locationr%   r%   r&   r*   0  s    

zAccessDescription.__init__c             C   s
   d | S )NzY<AccessDescription(access_method={0.access_method}, access_location={0.access_location})>)r:   )r,   r%   r%   r&   rG   :  s    zAccessDescription.__repr__c             C   s&   t |tstS | j|jko$| j|jkS )N)r   rm   rM   rr   rs   )r,   rN   r%   r%   r&   rO   @  s    
zAccessDescription.__eq__c             C   s
   | |k S )Nr%   )r,   rN   r%   r%   r&   rP   I  s    zAccessDescription.__ne__c             C   s   t | j| jfS )N)rQ   rr   rs   )r,   r%   r%   r&   rR   L  s    zAccessDescription.__hash__rp   rq   N)r/   r0   r1   r*   rG   rO   rP   rR   r   rS   rr   rs   r%   r%   r%   r&   rm   /  s   
	
rm   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   boolr>   rX   rI   rJ   _ca_path_length)r,   capath_lengthr%   r%   r&   r*   W  s    
zBasicConstraints.__init__rv   rw   c             C   s
   d | S )Nz:<BasicConstraints(ca={0.ca}, path_length={0.path_length})>)r:   )r,   r%   r%   r&   rG   l  s    zBasicConstraints.__repr__c             C   s&   t |tstS | j|jko$| j|jkS )N)r   rt   rM   rx   ry   )r,   rN   r%   r%   r&   rO   p  s    
zBasicConstraints.__eq__c             C   s
   | |k S )Nr%   )r,   rN   r%   r%   r&   rP   v  s    zBasicConstraints.__ne__c             C   s   t | j| jfS )N)rQ   rx   ry   )r,   r%   r%   r&   rR   y  s    zBasicConstraints.__hash__N)r/   r0   r1   r   BASIC_CONSTRAINTSr+   r*   r   rS   rx   ry   rG   rO   rP   rR   r%   r%   r%   r&   rt   S  s   

rt   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 )Nzcrl_number must be an integer)r   rI   rJ   r>   rK   )r,   rL   r%   r%   r&   r*     s    zDeltaCRLIndicator.__init__rK   c             C   s   t |tstS | j|jkS )N)r   r{   rM   rL   )r,   rN   r%   r%   r&   rO     s    
zDeltaCRLIndicator.__eq__c             C   s
   | |k S )Nr%   )r,   rN   r%   r%   r&   rP     s    zDeltaCRLIndicator.__ne__c             C   s
   t | jS )N)rQ   rL   )r,   r%   r%   r&   rR     s    zDeltaCRLIndicator.__hash__c             C   s
   d | S )Nz.<DeltaCRLIndicator(crl_number={0.crl_number})>)r:   )r,   r%   r%   r&   rG     s    zDeltaCRLIndicator.__repr__N)r/   r0   r1   r   ZDELTA_CRL_INDICATORr+   r*   r   rS   rL   rO   rP   rR   rG   r%   r%   r%   r&   r{   }  s   
r{   c               @   sR   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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 )N)r   DistributionPoint)rU   rV   r%   r%   r&   rW     s    z1CRLDistributionPoints.__init__.<locals>.<genexpr>z?distribution_points must be a list of DistributionPoint objects)rY   rZ   r>   _distribution_points)r,   distribution_pointsr%   r%   r&   r*     s    zCRLDistributionPoints.__init__c             C   s
   t | jS )N)rA   r~   )r,   r%   r%   r&   rB     s    zCRLDistributionPoints.__iter__c             C   s
   t | jS )N)rC   r~   )r,   r%   r%   r&   rD     s    zCRLDistributionPoints.__len__c             C   s   d | jS )Nz<CRLDistributionPoints({})>)r:   r~   )r,   r%   r%   r&   rG     s    zCRLDistributionPoints.__repr__c             C   s   t |tstS | j|jkS )N)r   r|   rM   r~   )r,   rN   r%   r%   r&   rO     s    
zCRLDistributionPoints.__eq__c             C   s
   | |k S )Nr%   )r,   rN   r%   r%   r&   rP     s    zCRLDistributionPoints.__ne__c             C   s
   | j | S )N)r~   )r,   rE   r%   r%   r&   rF     s    z!CRLDistributionPoints.__getitem__c             C   s   t t| jS )N)rQ   rd   r~   )r,   r%   r%   r&   rR     s    zCRLDistributionPoints.__hash__N)r/   r0   r1   r   CRL_DISTRIBUTION_POINTSr+   r*   rB   rD   rG   rO   rP   rF   rR   r%   r%   r%   r&   r|     s   r|   c               @   sR   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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 )N)r   r}   )rU   rV   r%   r%   r&   rW     s    z'FreshestCRL.__init__.<locals>.<genexpr>z?distribution_points must be a list of DistributionPoint objects)rY   rZ   r>   r~   )r,   r   r%   r%   r&   r*     s    zFreshestCRL.__init__c             C   s
   t | jS )N)rA   r~   )r,   r%   r%   r&   rB     s    zFreshestCRL.__iter__c             C   s
   t | jS )N)rC   r~   )r,   r%   r%   r&   rD     s    zFreshestCRL.__len__c             C   s   d | jS )Nz<FreshestCRL({})>)r:   r~   )r,   r%   r%   r&   rG     s    zFreshestCRL.__repr__c             C   s   t |tstS | j|jkS )N)r   r   rM   r~   )r,   rN   r%   r%   r&   rO     s    
zFreshestCRL.__eq__c             C   s
   | |k S )Nr%   )r,   rN   r%   r%   r&   rP     s    zFreshestCRL.__ne__c             C   s
   | j | S )N)r~   )r,   rE   r%   r%   r&   rF     s    zFreshestCRL.__getitem__c             C   s   t t| jS )N)rQ   rd   r~   )r,   r%   r%   r&   rR     s    zFreshestCRL.__hash__N)r/   r0   r1   r   FRESHEST_CRLr+   r*   rB   rD   rG   rO   rP   rF   rR   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 )N)r   r   )rU   rV   r%   r%   r&   rW     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   )rU   rV   r%   r%   r&   rW     s    z2crl_issuer must be None or a list of general namesc             s   s   | ]}t |tV  qd S )N)r   ReasonFlags)rU   rV   r%   r%   r&   rW     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)rX   rY   rZ   r>   r   r   	frozensetr   unspecifiedremove_from_crl
_full_name_relative_name_reasons_crl_issuer)r,   	full_namerelative_namereasons
crl_issuerr%   r%   r&   r*     s@    


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})>)r:   )r,   r%   r%   r&   rG      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 )N)r   r}   rM   r   r   r   r   )r,   rN   r%   r%   r&   rO   '  s    
zDistributionPoint.__eq__c             C   s
   | |k S )Nr%   )r,   rN   r%   r%   r&   rP   2  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 )N)r   rd   r   rQ   r   r   )r,   fnr   r%   r%   r&   rR   5  s    

zDistributionPoint.__hash__r   r   r   r   N)r/   r0   r1   r*   rG   rO   rP   rR   r   rS   r   r   r   r   r%   r%   r%   r&   r}     s   4


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/   r0   r1   r   Zkey_compromiseZca_compromiseZaffiliation_changedr   Zcessation_of_operationZcertificate_holdZprivilege_withdrawnZaa_compromiser   r%   r%   r%   r&   r   H  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   rI   rJ   r>   rX   _require_explicit_policy_inhibit_policy_mapping)r,   require_explicit_policyinhibit_policy_mappingr%   r%   r&   r*   Y  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})>)r:   )r,   r%   r%   r&   rG   r  s    zPolicyConstraints.__repr__c             C   s&   t |tstS | j|jko$| j|jkS )N)r   r   rM   r   r   )r,   rN   r%   r%   r&   rO   y  s    
zPolicyConstraints.__eq__c             C   s
   | |k S )Nr%   )r,   rN   r%   r%   r&   rP     s    zPolicyConstraints.__ne__c             C   s   t | j| jfS )N)rQ   r   r   )r,   r%   r%   r&   rR     s    zPolicyConstraints.__hash__r   r   N)r/   r0   r1   r   POLICY_CONSTRAINTSr+   r*   rG   rO   rP   rR   r   rS   r   r   r%   r%   r%   r&   r   U  s   	r   c               @   sR   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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 )N)r   PolicyInformation)rU   rV   r%   r%   r&   rW     s    z/CertificatePolicies.__init__.<locals>.<genexpr>z;Every item in the policies list must be a PolicyInformation)rY   rZ   r>   	_policies)r,   policiesr%   r%   r&   r*     s
    zCertificatePolicies.__init__c             C   s
   t | jS )N)rA   r   )r,   r%   r%   r&   rB     s    zCertificatePolicies.__iter__c             C   s
   t | jS )N)rC   r   )r,   r%   r%   r&   rD     s    zCertificatePolicies.__len__c             C   s   d | jS )Nz<CertificatePolicies({})>)r:   r   )r,   r%   r%   r&   rG     s    zCertificatePolicies.__repr__c             C   s   t |tstS | j|jkS )N)r   r   rM   r   )r,   rN   r%   r%   r&   rO     s    
zCertificatePolicies.__eq__c             C   s
   | |k S )Nr%   )r,   rN   r%   r%   r&   rP     s    zCertificatePolicies.__ne__c             C   s
   | j | S )N)r   )r,   rE   r%   r%   r&   rF     s    zCertificatePolicies.__getitem__c             C   s   t t| jS )N)rQ   rd   r   )r,   r%   r%   r&   rR     s    zCertificatePolicies.__hash__N)r/   r0   r1   r   CERTIFICATE_POLICIESr+   r*   rB   rD   rG   rO   rP   rF   rR   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 )N)r   rI   	text_type
UserNotice)rU   rV   r%   r%   r&   rW     s   z-PolicyInformation.__init__.<locals>.<genexpr>zMpolicy_qualifiers must be a list of strings and/or UserNotice objects or None)r   r   r>   _policy_identifierrY   rZ   _policy_qualifiers)r,   policy_identifierpolicy_qualifiersr%   r%   r&   r*     s    

zPolicyInformation.__init__c             C   s
   d | S )Nze<PolicyInformation(policy_identifier={0.policy_identifier}, policy_qualifiers={0.policy_qualifiers})>)r:   )r,   r%   r%   r&   rG     s    zPolicyInformation.__repr__c             C   s&   t |tstS | j|jko$| j|jkS )N)r   r   rM   r   r   )r,   rN   r%   r%   r&   rO     s    
zPolicyInformation.__eq__c             C   s
   | |k S )Nr%   )r,   rN   r%   r%   r&   rP     s    zPolicyInformation.__ne__c             C   s(   | j d k	rt| j }nd }t| j|fS )N)r   rd   rQ   r   )r,   Zpqr%   r%   r&   rR     s    
zPolicyInformation.__hash__r   r   N)r/   r0   r1   r*   rG   rO   rP   rR   r   rS   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   NoticeReferencer>   _notice_reference_explicit_text)r,   notice_referenceexplicit_textr%   r%   r&   r*     s    zUserNotice.__init__c             C   s
   d | S )NzV<UserNotice(notice_reference={0.notice_reference}, explicit_text={0.explicit_text!r})>)r:   )r,   r%   r%   r&   rG     s    zUserNotice.__repr__c             C   s&   t |tstS | j|jko$| j|jkS )N)r   r   rM   r   r   )r,   rN   r%   r%   r&   rO     s    
zUserNotice.__eq__c             C   s
   | |k S )Nr%   )r,   rN   r%   r%   r&   rP     s    zUserNotice.__ne__c             C   s   t | j| jfS )N)rQ   r   r   )r,   r%   r%   r&   rR   	  s    zUserNotice.__hash__r   r   N)r/   r0   r1   r*   rG   rO   rP   rR   r   rS   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 )N)r   int)rU   rV   r%   r%   r&   rW     s    z+NoticeReference.__init__.<locals>.<genexpr>z)notice_numbers must be a list of integers)_organizationrY   rZ   r>   _notice_numbers)r,   organizationnotice_numbersr%   r%   r&   r*     s    zNoticeReference.__init__c             C   s
   d | S )NzU<NoticeReference(organization={0.organization!r}, notice_numbers={0.notice_numbers})>)r:   )r,   r%   r%   r&   rG     s    zNoticeReference.__repr__c             C   s&   t |tstS | j|jko$| j|jkS )N)r   r   rM   r   r   )r,   rN   r%   r%   r&   rO   !  s    
zNoticeReference.__eq__c             C   s
   | |k S )Nr%   )r,   rN   r%   r%   r&   rP   *  s    zNoticeReference.__ne__c             C   s   t | jt| jfS )N)rQ   r   rd   r   )r,   r%   r%   r&   rR   -  s    zNoticeReference.__hash__r   r   N)r/   r0   r1   r*   rG   rO   rP   rR   r   rS   r   r   r%   r%   r%   r&   r     s   
	
r   c               @   sJ   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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 )N)r   r   )rU   rV   r%   r%   r&   rW   :  s    z,ExtendedKeyUsage.__init__.<locals>.<genexpr>z9Every item in the usages list must be an ObjectIdentifier)rY   rZ   r>   _usages)r,   Zusagesr%   r%   r&   r*   8  s
    zExtendedKeyUsage.__init__c             C   s
   t | jS )N)rA   r   )r,   r%   r%   r&   rB   A  s    zExtendedKeyUsage.__iter__c             C   s
   t | jS )N)rC   r   )r,   r%   r%   r&   rD   D  s    zExtendedKeyUsage.__len__c             C   s   d | jS )Nz<ExtendedKeyUsage({})>)r:   r   )r,   r%   r%   r&   rG   G  s    zExtendedKeyUsage.__repr__c             C   s   t |tstS | j|jkS )N)r   r   rM   r   )r,   rN   r%   r%   r&   rO   J  s    
zExtendedKeyUsage.__eq__c             C   s
   | |k S )Nr%   )r,   rN   r%   r%   r&   rP   P  s    zExtendedKeyUsage.__ne__c             C   s   t t| jS )N)rQ   rd   r   )r,   r%   r%   r&   rR   S  s    zExtendedKeyUsage.__hash__N)r/   r0   r1   r   EXTENDED_KEY_USAGEr+   r*   rB   rD   rG   rO   rP   rR   r%   r%   r%   r&   r   4  s   	r   c               @   s   e Zd ZejZdS )OCSPNoCheckN)r/   r0   r1   r   OCSP_NO_CHECKr+   r%   r%   r%   r&   r   W  s   r   c               @   s   e Zd ZejZdS )PrecertPoisonN)r/   r0   r1   r   ZPRECERT_POISONr+   r%   r%   r%   r&   r   \  s   r   c               @   sR   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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 )N)r   TLSFeatureType)rU   rV   r%   r%   r&   rW   h  s    z&TLSFeature.__init__.<locals>.<genexpr>r   z@features must be a list of elements from the TLSFeatureType enum)rY   rZ   rC   r>   	_features)r,   featuresr%   r%   r&   r*   e  s    zTLSFeature.__init__c             C   s
   t | jS )N)rA   r   )r,   r%   r%   r&   rB   r  s    zTLSFeature.__iter__c             C   s
   t | jS )N)rC   r   )r,   r%   r%   r&   rD   u  s    zTLSFeature.__len__c             C   s
   d | S )Nz$<TLSFeature(features={0._features})>)r:   )r,   r%   r%   r&   rG   x  s    zTLSFeature.__repr__c             C   s   t |tstS | j|jkS )N)r   r   rM   r   )r,   rN   r%   r%   r&   rO   {  s    
zTLSFeature.__eq__c             C   s
   | j | S )N)r   )r,   rE   r%   r%   r&   rF     s    zTLSFeature.__getitem__c             C   s
   | |k S )Nr%   )r,   rN   r%   r%   r&   rP     s    zTLSFeature.__ne__c             C   s   t t| jS )N)rQ   rd   r   )r,   r%   r%   r&   rR     s    zTLSFeature.__hash__N)r/   r0   r1   r   ZTLS_FEATUREr+   r*   rB   rD   rG   rO   rF   rP   rR   r%   r%   r%   r&   r   a  s   r   c               @   s   e Zd ZdZdZdS )r         N)r/   r0   r1   Zstatus_requestZstatus_request_v2r%   r%   r%   r&   r     s   r   c             c   s   | ]}|j |fV  qd S )N)r?   )rU   rV   r%   r%   r&   rW     s    rW   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   rI   rJ   r>   rX   _skip_certs)r,   
skip_certsr%   r%   r&   r*     s
    zInhibitAnyPolicy.__init__c             C   s
   d | S )Nz-<InhibitAnyPolicy(skip_certs={0.skip_certs})>)r:   )r,   r%   r%   r&   rG     s    zInhibitAnyPolicy.__repr__c             C   s   t |tstS | j|jkS )N)r   r   rM   r   )r,   rN   r%   r%   r&   rO     s    
zInhibitAnyPolicy.__eq__c             C   s
   | |k S )Nr%   )r,   rN   r%   r%   r&   rP     s    zInhibitAnyPolicy.__ne__c             C   s
   t | jS )N)rQ   r   )r,   r%   r%   r&   rR     s    zInhibitAnyPolicy.__hash__r   N)r/   r0   r1   r   INHIBIT_ANY_POLICYr+   r*   rG   rO   rP   rR   r   rS   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)
rX   _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&   r*     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   rX   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   rX   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 )Na-  <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   rX   r:   )r,   r   r   r%   r%   r&   rG     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 )N)r   r   rM   r   r   r   r   r   r   r   r   r   )r,   rN   r%   r%   r&   rO     s    
zKeyUsage.__eq__c             C   s
   | |k S )Nr%   )r,   rN   r%   r%   r&   rP   
  s    zKeyUsage.__ne__c          
   C   s,   t | j| j| j| j| j| j| j| j| j	f	S )N)
rQ   r   r   r   r   r   r   r   r   r   )r,   r%   r%   r&   rR     s    zKeyUsage.__hash__N)r/   r0   r1   r   	KEY_USAGEr+   r*   r   rS   r   r   r   r   r   r   r   propertyr   r   rG   rO   rP   rR   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 )N)r   r   )rU   rV   r%   r%   r&   rW     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 )N)r   r   )rU   rV   r%   r%   r&   rW   +  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)rY   rZ   r>   _validate_ip_namerX   _permitted_subtrees_excluded_subtrees)r,   permitted_subtreesexcluded_subtreesr%   r%   r&   r*     s&    

zNameConstraints.__init__c             C   s&   t |tstS | j|jko$| j|jkS )N)r   r   rM   r   r   )r,   rN   r%   r%   r&   rO   =  s    
zNameConstraints.__eq__c             C   s
   | |k S )Nr%   )r,   rN   r%   r%   r&   rP   F  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 )N)r   r   r?   	ipaddressZIPv4NetworkZIPv6Network)rU   namer%   r%   r&   rW   J  s   z4NameConstraints._validate_ip_name.<locals>.<genexpr>zGIPAddress name constraints must be an IPv4Network or IPv6Network object)anyr>   )r,   Ztreer%   r%   r&   r   I  s    
z!NameConstraints._validate_ip_namec             C   s
   d | S )Nze<NameConstraints(permitted_subtrees={0.permitted_subtrees}, excluded_subtrees={0.excluded_subtrees})>)r:   )r,   r%   r%   r&   rG   R  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   rd   r   rQ   )r,   psesr%   r%   r&   rR   X  s    

zNameConstraints.__hash__r   r   N)r/   r0   r1   r   NAME_CONSTRAINTSr+   r*   rO   rP   r   rG   rR   r   rS   r   r   r%   r%   r%   r&   r     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   r>   ru   _oid	_critical_value)r,   r+   criticalr?   r%   r%   r&   r*   j  s    

zExtension.__init__r   r   r   c             C   s
   d | S )Nz@<Extension(oid={0.oid}, critical={0.critical}, value={0.value})>)r:   )r,   r%   r%   r&   rG   {  s    zExtension.__repr__c             C   s2   t |tstS | j|jko0| j|jko0| j|jkS )N)r   r   rM   r+   r   r?   )r,   rN   r%   r%   r&   rO     s
    
zExtension.__eq__c             C   s
   | |k S )Nr%   )r,   rN   r%   r%   r&   rP     s    zExtension.__ne__c             C   s   t | j| j| jfS )N)rQ   r+   r   r?   )r,   r%   r%   r&   rR     s    zExtension.__hash__N)r/   r0   r1   r*   r   rS   r+   r   r?   rG   rO   rP   rR   r%   r%   r%   r&   r   i  s   



r   c               @   sT   e Zd Zdd Zdd Zdd Zdd 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 )N)r   r   )rU   rV   r%   r%   r&   rW     s    z(GeneralNames.__init__.<locals>.<genexpr>z^Every item in the general_names list must be an object conforming to the GeneralName interface)rY   rZ   r>   _general_names)r,   general_namesr%   r%   r&   r*     s
    zGeneralNames.__init__c             C   s
   t | jS )N)rA   r   )r,   r%   r%   r&   rB     s    zGeneralNames.__iter__c             C   s
   t | jS )N)rC   r   )r,   r%   r%   r&   rD     s    zGeneralNames.__len__c                s0    fdd| D } t kr(dd |D }t|S )Nc             3   s   | ]}t | r|V  qd S )N)r   )rU   i)typer%   r&   rW     s    z3GeneralNames.get_values_for_type.<locals>.<genexpr>c             s   s   | ]}|j V  qd S )N)r?   )rU   r   r%   r%   r&   rW     s    )r   rY   )r,   r   Zobjsr%   )r   r&   get_values_for_type  s    z GeneralNames.get_values_for_typec             C   s   d | jS )Nz<GeneralNames({})>)r:   r   )r,   r%   r%   r&   rG     s    zGeneralNames.__repr__c             C   s   t |tstS | j|jkS )N)r   r   rM   r   )r,   rN   r%   r%   r&   rO     s    
zGeneralNames.__eq__c             C   s
   | |k S )Nr%   )r,   rN   r%   r%   r&   rP     s    zGeneralNames.__ne__c             C   s
   | j | S )N)r   )r,   rE   r%   r%   r&   rF     s    zGeneralNames.__getitem__c             C   s   t t| jS )N)rQ   rd   r   )r,   r%   r%   r&   rR     s    zGeneralNames.__hash__N)r/   r0   r1   r*   rB   rD   r   rG   rO   rP   rF   rR   r%   r%   r%   r&   r     s   
	r   c               @   sZ   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dd Zdd Zdd ZdS )SubjectAlternativeNamec             C   s   t || _d S )N)r   r   )r,   r   r%   r%   r&   r*     s    zSubjectAlternativeName.__init__c             C   s
   t | jS )N)rA   r   )r,   r%   r%   r&   rB     s    zSubjectAlternativeName.__iter__c             C   s
   t | jS )N)rC   r   )r,   r%   r%   r&   rD     s    zSubjectAlternativeName.__len__c             C   s   | j |S )N)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%   r&   rG     s    zSubjectAlternativeName.__repr__c             C   s   t |tstS | j|jkS )N)r   r   rM   r   )r,   rN   r%   r%   r&   rO     s    
zSubjectAlternativeName.__eq__c             C   s
   | j | S )N)r   )r,   rE   r%   r%   r&   rF     s    z"SubjectAlternativeName.__getitem__c             C   s
   | |k S )Nr%   )r,   rN   r%   r%   r&   rP     s    zSubjectAlternativeName.__ne__c             C   s
   t | jS )N)rQ   r   )r,   r%   r%   r&   rR     s    zSubjectAlternativeName.__hash__N)r/   r0   r1   r   SUBJECT_ALTERNATIVE_NAMEr+   r*   rB   rD   r   rG   rO   rF   rP   rR   r%   r%   r%   r&   r     s   r   c               @   sZ   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dd Zdd Zdd ZdS )IssuerAlternativeNamec             C   s   t || _d S )N)r   r   )r,   r   r%   r%   r&   r*     s    zIssuerAlternativeName.__init__c             C   s
   t | jS )N)rA   r   )r,   r%   r%   r&   rB     s    zIssuerAlternativeName.__iter__c             C   s
   t | jS )N)rC   r   )r,   r%   r%   r&   rD     s    zIssuerAlternativeName.__len__c             C   s   | j |S )N)r   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%   r&   rG     s    zIssuerAlternativeName.__repr__c             C   s   t |tstS | j|jkS )N)r   r   rM   r   )r,   rN   r%   r%   r&   rO     s    
zIssuerAlternativeName.__eq__c             C   s
   | |k S )Nr%   )r,   rN   r%   r%   r&   rP     s    zIssuerAlternativeName.__ne__c             C   s
   | j | S )N)r   )r,   rE   r%   r%   r&   rF     s    z!IssuerAlternativeName.__getitem__c             C   s
   t | jS )N)rQ   r   )r,   r%   r%   r&   rR     s    zIssuerAlternativeName.__hash__N)r/   r0   r1   r   ISSUER_ALTERNATIVE_NAMEr+   r*   rB   rD   r   rG   rO   rP   rF   rR   r%   r%   r%   r&   r     s   r   c               @   sZ   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dd Zdd Zdd ZdS )CertificateIssuerc             C   s   t || _d S )N)r   r   )r,   r   r%   r%   r&   r*     s    zCertificateIssuer.__init__c             C   s
   t | jS )N)rA   r   )r,   r%   r%   r&   rB   
  s    zCertificateIssuer.__iter__c             C   s
   t | jS )N)rC   r   )r,   r%   r%   r&   rD     s    zCertificateIssuer.__len__c             C   s   | j |S )N)r   r   )r,   r   r%   r%   r&   r     s    z%CertificateIssuer.get_values_for_typec             C   s   d | jS )Nz<CertificateIssuer({})>)r:   r   )r,   r%   r%   r&   rG     s    zCertificateIssuer.__repr__c             C   s   t |tstS | j|jkS )N)r   r   rM   r   )r,   rN   r%   r%   r&   rO     s    
zCertificateIssuer.__eq__c             C   s
   | |k S )Nr%   )r,   rN   r%   r%   r&   rP     s    zCertificateIssuer.__ne__c             C   s
   | j | S )N)r   )r,   rE   r%   r%   r&   rF     s    zCertificateIssuer.__getitem__c             C   s
   t | jS )N)rQ   r   )r,   r%   r%   r&   rR   "  s    zCertificateIssuer.__hash__N)r/   r0   r1   r   CERTIFICATE_ISSUERr+   r*   rB   rD   r   rG   rO   rP   rF   rR   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   r>   _reason)r,   reasonr%   r%   r&   r*   *  s    
zCRLReason.__init__c             C   s   d | jS )Nz<CRLReason(reason={})>)r:   r   )r,   r%   r%   r&   rG   0  s    zCRLReason.__repr__c             C   s   t |tstS | j|jkS )N)r   r   rM   r   )r,   rN   r%   r%   r&   rO   3  s    
zCRLReason.__eq__c             C   s
   | |k S )Nr%   )r,   rN   r%   r%   r&   rP   9  s    zCRLReason.__ne__c             C   s
   t | jS )N)rQ   r   )r,   r%   r%   r&   rR   <  s    zCRLReason.__hash__r   N)r/   r0   r1   r   
CRL_REASONr+   r*   rG   rO   rP   rR   r   rS   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 )InvalidityDatec             C   s   t |tjstd|| _d S )Nz+invalidity_date must be a datetime.datetime)r   datetimer>   _invalidity_date)r,   invalidity_dater%   r%   r&   r*   F  s    zInvalidityDate.__init__c             C   s   d | jS )Nz$<InvalidityDate(invalidity_date={})>)r:   r   )r,   r%   r%   r&   rG   L  s    zInvalidityDate.__repr__c             C   s   t |tstS | j|jkS )N)r   r   rM   r   )r,   rN   r%   r%   r&   rO   Q  s    
zInvalidityDate.__eq__c             C   s
   | |k S )Nr%   )r,   rN   r%   r%   r&   rP   W  s    zInvalidityDate.__ne__c             C   s
   t | jS )N)rQ   r   )r,   r%   r%   r&   rR   Z  s    zInvalidityDate.__hash__r   N)r/   r0   r1   r   INVALIDITY_DATEr+   r*   rG   rO   rP   rR   r   rS   r   r%   r%   r%   r&   r   B  s   r   c               @   sR   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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 )N)r   r   )rU   Zsctr%   r%   r&   rW   g  s   zEPrecertificateSignedCertificateTimestamps.__init__.<locals>.<genexpr>zYEvery item in the signed_certificate_timestamps list must be a SignedCertificateTimestamp)rY   rZ   r>   _signed_certificate_timestamps)r,   Zsigned_certificate_timestampsr%   r%   r&   r*   d  s    
z2PrecertificateSignedCertificateTimestamps.__init__c             C   s
   t | jS )N)rA   r   )r,   r%   r%   r&   rB   p  s    z2PrecertificateSignedCertificateTimestamps.__iter__c             C   s
   t | jS )N)rC   r   )r,   r%   r%   r&   rD   s  s    z1PrecertificateSignedCertificateTimestamps.__len__c             C   s
   | j | S )N)r   )r,   rE   r%   r%   r&   rF   v  s    z5PrecertificateSignedCertificateTimestamps.__getitem__c             C   s   d t| S )Nz/<PrecertificateSignedCertificateTimestamps({})>)r:   rY   )r,   r%   r%   r&   rG   y  s    z2PrecertificateSignedCertificateTimestamps.__repr__c             C   s   t t| jS )N)rQ   rd   r   )r,   r%   r%   r&   rR     s    z2PrecertificateSignedCertificateTimestamps.__hash__c             C   s   t |tstS | j|jkS )N)r   r   rM   r   )r,   rN   r%   r%   r&   rO     s    
z0PrecertificateSignedCertificateTimestamps.__eq__c             C   s
   | |k S )Nr%   )r,   rN   r%   r%   r&   rP     s    z0PrecertificateSignedCertificateTimestamps.__ne__N)r/   r0   r1   r   Z%PRECERT_SIGNED_CERTIFICATE_TIMESTAMPSr+   r*   rB   rD   rF   rG   rR   rO   rP   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   r   r>   _nonce)r,   noncer%   r%   r&   r*     s    
zOCSPNonce.__init__c             C   s   t |tstS | j|jkS )N)r   r   rM   r   )r,   rN   r%   r%   r&   rO     s    
zOCSPNonce.__eq__c             C   s
   | |k S )Nr%   )r,   rN   r%   r%   r&   rP     s    zOCSPNonce.__ne__c             C   s
   t | jS )N)rQ   r   )r,   r%   r%   r&   rR     s    zOCSPNonce.__hash__c             C   s
   d | S )Nz<OCSPNonce(nonce={0.nonce!r})>)r:   )r,   r%   r%   r&   rG     s    zOCSPNonce.__repr__r   N)r/   r0   r1   r   ZNONCEr+   r*   rO   rP   rR   rG   r   rS   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 )N)r   r   )rU   rV   r%   r%   r&   rW     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%   )rU   rV   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   rZ   r>   r   r   r   rX   ru   rC   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&   r*     sD    






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})>)r:   )r,   r%   r%   r&   rG     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 )N)
r   r   rM   r   r   r  r  r  r  r  )r,   rN   r%   r%   r&   rO     s    
zIssuingDistributionPoint.__eq__c             C   s
   | |k S )Nr%   )r,   rN   r%   r%   r&   rP     s    zIssuingDistributionPoint.__ne__c             C   s$   t | j| j| j| j| j| j| jfS )N)rQ   r   r   r  r  r  r  r  )r,   r%   r%   r&   rR     s    z!IssuingDistributionPoint.__hash__r   r   r   r   r  r  r  N)r/   r0   r1   r   ZISSUING_DISTRIBUTION_POINTr+   r*   rG   rO   rP   rR   r   rS   r   r   r  r  r  r  r  r%   r%   r%   r&   r     s    F



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 )r=   c             C   s"   t |tstd|| _|| _d S )Nzoid must be an ObjectIdentifier)r   r   r>   r   r   )r,   r+   r?   r%   r%   r&   r*   0  s    
zUnrecognizedExtension.__init__r   r   c             C   s
   d | S )Nz7<UnrecognizedExtension(oid={0.oid}, value={0.value!r})>)r:   )r,   r%   r%   r&   rG   9  s    zUnrecognizedExtension.__repr__c             C   s&   t |tstS | j|jko$| j|jkS )N)r   r=   rM   r+   r?   )r,   rN   r%   r%   r&   rO   @  s    
zUnrecognizedExtension.__eq__c             C   s
   | |k S )Nr%   )r,   rN   r%   r%   r&   rP   F  s    zUnrecognizedExtension.__ne__c             C   s   t | j| jfS )N)rQ   r+   r?   )r,   r%   r%   r&   rR   I  s    zUnrecognizedExtension.__hash__N)r/   r0   r1   r*   r   rS   r+   r?   rG   rO   rP   rR   r%   r%   r%   r&   r=   .  s   

r=   )R
__future__r   r   r   r5   r   r!   r   enumr   Zasn1crypto.keysr   rI   cryptographyr   cryptography.hazmat.primitivesr   r	   ,cryptography.hazmat.primitives.asymmetric.ecr
   Z-cryptography.hazmat.primitives.asymmetric.rsar   Z*cryptography.x509.certificate_transparencyr   cryptography.x509.general_namer   r   r   cryptography.x509.namer   cryptography.x509.oidr   r   r   r   r'   	Exceptionr(   r3   add_metaclassABCMetaobjectr4   r7   register_interfacerH   rT   rg   rl   rm   rt   r{   r|   r   r}   r   r   r   r   r   r   r   r   r   r   r   dictZ_TLS_FEATURE_TYPE_TO_ENUMr   r   r   r   r   r   r   r   r   r   r   r   r   r=   r%   r%   r%   r&   <module>   s   *Y&$)((]<&2%$")^Q'-"""/ 