<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
3
ꅭh>                 @   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
j+ej,G dd de-Z.G dd de-Z/ej0e.G dd de-Z1ej0e.G dd de-Z2ej0e.G dd de-Z3ej0e.G dd  d e-Z4ej0e.G d!d" d"e-Z5G d#d$ d$e-Z6ej0e.G d%d& d&e-Z7ej0e.G d'd( d(e-Z8ej0e.G d)d* d*e-Z9ej0e.G d+d, d,e-Z:G d-d. d.e-Z;G d/d0 d0e	Z<ej0e.G d1d2 d2e-Z=ej0e.G d3d4 d4e-Z>G d5d6 d6e-Z?G d7d8 d8e-Z@G d9d: d:e-ZAej0e.G d;d< d<e-ZBej0e.G d=d> d>e-ZCej0e.G d?d@ d@e-ZDej0e.G dAdB dBe-ZEG dCdD dDe	ZFdEdF eFD ZGej0e.G dGdH dHe-ZHej0e.G dIdJ dJe-ZIej0e.G dKdL dLe-ZJG dMdN dNe-ZKG dOdP dPe-ZLej0e.G dQdR dRe-ZMej0e.G dSdT dTe-ZNej0e.G dUdV dVe-ZOej0e.G dWdX dXe-ZPej0e.G dYdZ dZe-ZQej0e.G d[d\ d\e-ZRej0e.G d]d^ d^e-ZSej0e.G d_d` d`e-ZTej0e.G dadb dbe-ZUej0e.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 | jtjjtjj}nt | tr@| jtjj	tjj
}n| jtjjtjj}t|}|jt}|jt}|jt} W d Q R X |  |jt |j s|j  W d Q R X | j dkrtd| j}tj|j S )Nr   zInvalid public key encoding)
isinstancer   Zpublic_bytesr   Z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hashlibZsha1digest)
public_keyr   Z
serializedreaderZpublic_key_info	algorithm r    "/usr/lib64/python3.6/extensions.py_key_identifier_from_public_key&   s.    




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 )N)iterr$   )r%   )r&   r    r!   iter_methodR   s    z+_make_sequence_methods.<locals>.iter_methodc                s   t |  | S )N)r$   )r%   idx)r&   r    r!   getitem_methodU   s    z._make_sequence_methods.<locals>.getitem_methodr    )r&   r'   r)   r+   r    )r&   r!   _make_sequence_methodsN   s    r,   c                   s   e Zd Z fddZ  ZS )DuplicateExtensionc                s   t t| j| || _d S )N)superr-   __init__oid)r%   msgr0   )	__class__r    r!   r/   \   s    zDuplicateExtension.__init__)__name__
__module____qualname__r/   __classcell__r    r    )r2   r!   r-   [   s   r-   c                   s   e Zd Z fddZ  ZS )ExtensionNotFoundc                s   t t| j| || _d S )N)r.   r7   r/   r0   )r%   r1   r0   )r2   r    r!   r/   b   s    zExtensionNotFound.__init__)r3   r4   r5   r/   r6   r    r    )r2   r!   r7   a   s   r7   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!   r0   i   s    zExtensionType.oidN)r3   r4   r5   abcabstractpropertyr0   r    r    r    r!   r8   g   s   r8   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 )N)_extensions)r%   
extensionsr    r    r!   r/   q   s    zExtensions.__init__c             C   s0   x| D ]}|j |kr|S qW tdj||d S )NzNo {} extension was found)r0   r7   format)r%   r0   extr    r    r!   get_extension_for_oidt   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||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   valuer7   r>   r0   )r%   Zextclassr?   r    r    r!   get_extension_for_class{   s    
z"Extensions.get_extension_for_classr<   c             C   s   dj | jS )Nz<Extensions({})>)r>   r<   )r%   r    r    r!   __repr__   s    zExtensions.__repr__N)r3   r4   r5   r/   r@   rD   r,   __len____iter____getitem__rE   r    r    r    r!   r;   p   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j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_typesrB   _crl_number)r%   
crl_numberr    r    r!   r/      s    zCRLNumber.__init__c             C   s   t |tstS | j|jkS )N)r   rI   NotImplementedrM   )r%   otherr    r    r!   __eq__   s    
zCRLNumber.__eq__c             C   s
   | |k S )Nr    )r%   rO   r    r    r!   __ne__   s    zCRLNumber.__ne__c             C   s
   t | jS )N)hashrM   )r%   r    r    r!   __hash__   s    zCRLNumber.__hash__c             C   s   dj | jS )Nz<CRLNumber({})>)r>   rM   )r%   r    r    r!   rE      s    zCRLNumber.__repr__rL   N)r3   r4   r5   r   Z
CRL_NUMBERr0   r/   rP   rQ   rS   rE   r   read_only_propertyrM   r    r    r    r!   rI      s   rI   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jdZejdZejdZdS )AuthorityKeyIdentifierc             C   sv   |d k|d kkrt d|d k	rBt|}tdd |D sBtd|d k	r`t|tj r`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)
r   listallrB   r   rJ   rK   _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(   t |tr|j}n|jj}| |d d dS )N)r^   r_   r`   )r   SubjectKeyIdentifierr   rC   )ra   Zskir   r    r    r!   "from_issuer_subject_key_identifier   s    
z9AuthorityKeyIdentifier.from_issuer_subject_key_identifierc             C   s
   dj | 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!   rE      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   rU   rN   r^   r_   r`   )r%   rO   r    r    r!   rP      s    
zAuthorityKeyIdentifier.__eq__c             C   s
   | |k S )Nr    )r%   rO   r    r    r!   rQ      s    zAuthorityKeyIdentifier.__ne__c             C   s,   | j d krd }n
t| j }t| j|| jfS )N)r_   tuplerR   r^   r`   )r%   Zacir    r    r!   rS      s
    

zAuthorityKeyIdentifier.__hash__r[   r\   r]   N)r3   r4   r5   r   ZAUTHORITY_KEY_IDENTIFIERr0   r/   classmethodrb   rd   rE   rP   rQ   rS   r   rT   r^   r_   r`   r    r    r    r!   rU      s   !		

rU   c               @   sP   e Zd ZejZdd Zedd Ze	j
dZdd Zdd	 Zd
d Zdd ZdS )rc   c             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_keyrg   c             C   s   dj | jS )Nz$<SubjectKeyIdentifier(digest={0!r})>)r>   r   )r%   r    r    r!   rE     s    zSubjectKeyIdentifier.__repr__c             C   s   t |tstS tj| j|jS )N)r   rc   rN   r   Zbytes_eqr   )r%   rO   r    r    r!   rP     s    
zSubjectKeyIdentifier.__eq__c             C   s
   | |k S )Nr    )r%   rO   r    r    r!   rQ   #  s    zSubjectKeyIdentifier.__ne__c             C   s
   t | jS )N)rR   r   )r%   r    r    r!   rS   &  s    zSubjectKeyIdentifier.__hash__N)r3   r4   r5   r   ZSUBJECT_KEY_IDENTIFIERr0   r/   rf   rh   r   rT   r   rE   rP   rQ   rS   r    r    r    r!   rc     s   
rc   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 )N)r   AccessDescription)rV   rW   r    r    r!   rX   0  s    z6AuthorityInformationAccess.__init__.<locals>.<genexpr>z@Every item in the descriptions list must be an AccessDescription)rY   rZ   rB   _descriptions)r%   descriptionsr    r    r!   r/   .  s
    z#AuthorityInformationAccess.__init__rk   c             C   s   dj | jS )Nz <AuthorityInformationAccess({})>)r>   rk   )r%   r    r    r!   rE   :  s    z#AuthorityInformationAccess.__repr__c             C   s   t |tstS | j|jkS )N)r   ri   rN   rk   )r%   rO   r    r    r!   rP   =  s    
z!AuthorityInformationAccess.__eq__c             C   s
   | |k S )Nr    )r%   rO   r    r    r!   rQ   C  s    z!AuthorityInformationAccess.__ne__c             C   s   t t| jS )N)rR   re   rk   )r%   r    r    r!   rS   F  s    z#AuthorityInformationAccess.__hash__N)r3   r4   r5   r   ZAUTHORITY_INFORMATION_ACCESSr0   r/   r,   rF   rG   rH   rE   rP   rQ   rS   r    r    r    r!   ri   *  s   
ri   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 )N)r   rj   )rV   rW   r    r    r!   rX   P  s    z4SubjectInformationAccess.__init__.<locals>.<genexpr>z@Every item in the descriptions list must be an AccessDescription)rY   rZ   rB   rk   )r%   rl   r    r    r!   r/   N  s
    z!SubjectInformationAccess.__init__rk   c             C   s   dj | jS )Nz<SubjectInformationAccess({})>)r>   rk   )r%   r    r    r!   rE   Z  s    z!SubjectInformationAccess.__repr__c             C   s   t |tstS | j|jkS )N)r   rm   rN   rk   )r%   rO   r    r    r!   rP   ]  s    
zSubjectInformationAccess.__eq__c             C   s
   | |k S )Nr    )r%   rO   r    r    r!   rQ   c  s    zSubjectInformationAccess.__ne__c             C   s   t t| jS )N)rR   re   rk   )r%   r    r    r!   rS   f  s    z!SubjectInformationAccess.__hash__N)r3   r4   r5   r   ZSUBJECT_INFORMATION_ACCESSr0   r/   r,   rF   rG   rH   rE   rP   rQ   rS   r    r    r    r!   rm   J  s   
rm   c               @   sH   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zej	dZ
ej	dZdS )rj   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   rB   r   _access_method_access_location)r%   access_methodaccess_locationr    r    r!   r/   k  s    

zAccessDescription.__init__c             C   s
   dj | S )NzY<AccessDescription(access_method={0.access_method}, access_location={0.access_location})>)r>   )r%   r    r    r!   rE   u  s    zAccessDescription.__repr__c             C   s&   t |tstS | j|jko$| j|jkS )N)r   rj   rN   rp   rq   )r%   rO   r    r    r!   rP   {  s    
zAccessDescription.__eq__c             C   s
   | |k S )Nr    )r%   rO   r    r    r!   rQ     s    zAccessDescription.__ne__c             C   s   t | j| jfS )N)rR   rp   rq   )r%   r    r    r!   rS     s    zAccessDescription.__hash__rn   ro   N)r3   r4   r5   r/   rE   rP   rQ   rS   r   rT   rp   rq   r    r    r    r!   rj   j  s   
	
rj   c               @   sN   e Zd ZejZdd ZejdZ	ejdZ
dd Zdd Zd	d
 Zdd ZdS )BasicConstraintsc             C   s^   t |tstd|d k	r(| r(td|d k	rNt |tj sF|dk rNt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   boolrB   r   rJ   rK   _ca_path_length)r%   capath_lengthr    r    r!   r/     s    
zBasicConstraints.__init__rt   ru   c             C   s
   dj | S )Nz:<BasicConstraints(ca={0.ca}, path_length={0.path_length})>)r>   )r%   r    r    r!   rE     s    zBasicConstraints.__repr__c             C   s&   t |tstS | j|jko$| j|jkS )N)r   rr   rN   rv   rw   )r%   rO   r    r    r!   rP     s    
zBasicConstraints.__eq__c             C   s
   | |k S )Nr    )r%   rO   r    r    r!   rQ     s    zBasicConstraints.__ne__c             C   s   t | j| jfS )N)rR   rv   rw   )r%   r    r    r!   rS     s    zBasicConstraints.__hash__N)r3   r4   r5   r   ZBASIC_CONSTRAINTSr0   r/   r   rT   rv   rw   rE   rP   rQ   rS   r    r    r    r!   rr     s   

rr   c               @   sD   e Zd ZejZdd Zej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   rJ   rK   rB   rL   )r%   rM   r    r    r!   r/     s    zDeltaCRLIndicator.__init__rL   c             C   s   t |tstS | j|jkS )N)r   rx   rN   rM   )r%   rO   r    r    r!   rP     s    
zDeltaCRLIndicator.__eq__c             C   s
   | |k S )Nr    )r%   rO   r    r    r!   rQ     s    zDeltaCRLIndicator.__ne__c             C   s
   t | jS )N)rR   rM   )r%   r    r    r!   rS     s    zDeltaCRLIndicator.__hash__c             C   s
   dj | S )Nz.<DeltaCRLIndicator(crl_number={0.crl_number})>)r>   )r%   r    r    r!   rE     s    zDeltaCRLIndicator.__repr__N)r3   r4   r5   r   ZDELTA_CRL_INDICATORr0   r/   r   rT   rM   rP   rQ   rS   rE   r    r    r    r!   rx     s   
rx   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 )N)r   DistributionPoint)rV   rW   r    r    r!   rX     s    z1CRLDistributionPoints.__init__.<locals>.<genexpr>z?distribution_points must be a list of DistributionPoint objects)rY   rZ   rB   _distribution_points)r%   distribution_pointsr    r    r!   r/     s    zCRLDistributionPoints.__init__r{   c             C   s   dj | jS )Nz<CRLDistributionPoints({})>)r>   r{   )r%   r    r    r!   rE     s    zCRLDistributionPoints.__repr__c             C   s   t |tstS | j|jkS )N)r   ry   rN   r{   )r%   rO   r    r    r!   rP     s    
zCRLDistributionPoints.__eq__c             C   s
   | |k S )Nr    )r%   rO   r    r    r!   rQ     s    zCRLDistributionPoints.__ne__c             C   s   t t| jS )N)rR   re   r{   )r%   r    r    r!   rS     s    zCRLDistributionPoints.__hash__N)r3   r4   r5   r   ZCRL_DISTRIBUTION_POINTSr0   r/   r,   rF   rG   rH   rE   rP   rQ   rS   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 )FreshestCRLc             C   s,   t |}tdd |D s"td|| _d S )Nc             s   s   | ]}t |tV  qd S )N)r   rz   )rV   rW   r    r    r!   rX     s    z'FreshestCRL.__init__.<locals>.<genexpr>z?distribution_points must be a list of DistributionPoint objects)rY   rZ   rB   r{   )r%   r|   r    r    r!   r/     s    zFreshestCRL.__init__r{   c             C   s   dj | jS )Nz<FreshestCRL({})>)r>   r{   )r%   r    r    r!   rE     s    zFreshestCRL.__repr__c             C   s   t |tstS | j|jkS )N)r   r}   rN   r{   )r%   rO   r    r    r!   rP     s    
zFreshestCRL.__eq__c             C   s
   | |k S )Nr    )r%   rO   r    r    r!   rQ     s    zFreshestCRL.__ne__c             C   s   t t| jS )N)rR   re   r{   )r%   r    r    r!   rS     s    zFreshestCRL.__hash__N)r3   r4   r5   r   ZFRESHEST_CRLr0   r/   r,   rF   rG   rH   rE   rP   rQ   rS   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j	dZ
ej	dZej	dZej	dZdS )rz   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 stdd |D  rtd	|rtj|kstj	|krt d
|r| r|p| rt 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   )rV   rW   r    r    r!   rX   &  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   )rV   rW   r    r    r!   rX   3  s    z2crl_issuer must be None or a list of general namesc             s   s   | ]}t |tV  qd S )N)r   ReasonFlags)rV   rW   r    r    r!   rX   :  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   rY   rZ   rB   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/     sB    


zDistributionPoint.__init__c             C   s
   dj | 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!   rE   R  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   rz   rN   r   r   r   r   )r%   rO   r    r    r!   rP   Y  s    
zDistributionPoint.__eq__c             C   s
   | |k S )Nr    )r%   rO   r    r    r!   rQ   d  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   re   r   rR   r   r   )r%   fnr   r    r    r!   rS   g  s    

zDistributionPoint.__hash__r   r   r   r   N)r3   r4   r5   r/   rE   rP   rQ   rS   r   rT   r   r   r   r   r    r    r    r!   rz     s   5


rz   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)r3   r4   r5   r   Zkey_compromiseZca_compromiseZaffiliation_changedr   Zcessation_of_operationZcertificate_holdZprivilege_withdrawnZaa_compromiser   r    r    r    r!   r~   z  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jdZejdZdS )PolicyConstraintsc             C   sd   |d k	rt |tj rtd|d k	r<t |tj r<td|d krT|d krTt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   rJ   rK   rB   r   _require_explicit_policy_inhibit_policy_mapping)r%   require_explicit_policyinhibit_policy_mappingr    r    r!   r/     s    

zPolicyConstraints.__init__c             C   s
   dj | S )Nz{<PolicyConstraints(require_explicit_policy={0.require_explicit_policy}, inhibit_policy_mapping={0.inhibit_policy_mapping})>)r>   )r%   r    r    r!   rE     s    zPolicyConstraints.__repr__c             C   s&   t |tstS | j|jko$| j|jkS )N)r   r   rN   r   r   )r%   rO   r    r    r!   rP     s    
zPolicyConstraints.__eq__c             C   s
   | |k S )Nr    )r%   rO   r    r    r!   rQ     s    zPolicyConstraints.__ne__c             C   s   t | j| jfS )N)rR   r   r   )r%   r    r    r!   rS     s    zPolicyConstraints.__hash__r   r   N)r3   r4   r5   r   ZPOLICY_CONSTRAINTSr0   r/   rE   rP   rQ   rS   r   rT   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 )N)r   PolicyInformation)rV   rW   r    r    r!   rX     s    z/CertificatePolicies.__init__.<locals>.<genexpr>z;Every item in the policies list must be a PolicyInformation)rY   rZ   rB   	_policies)r%   Zpoliciesr    r    r!   r/     s
    zCertificatePolicies.__init__r   c             C   s   dj | jS )Nz<CertificatePolicies({})>)r>   r   )r%   r    r    r!   rE     s    zCertificatePolicies.__repr__c             C   s   t |tstS | j|jkS )N)r   r   rN   r   )r%   rO   r    r    r!   rP     s    
zCertificatePolicies.__eq__c             C   s
   | |k S )Nr    )r%   rO   r    r    r!   rQ     s    zCertificatePolicies.__ne__c             C   s   t t| jS )N)rR   re   r   )r%   r    r    r!   rS     s    zCertificatePolicies.__hash__N)r3   r4   r5   r   ZCERTIFICATE_POLICIESr0   r/   r,   rF   rG   rH   rE   rP   rQ   rS   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j	dZ
ej	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   rJ   Z	text_type
UserNotice)rV   rW   r    r    r!   rX     s   z-PolicyInformation.__init__.<locals>.<genexpr>zMpolicy_qualifiers must be a list of strings and/or UserNotice objects or None)r   r   rB   _policy_identifierrY   rZ   _policy_qualifiers)r%   policy_identifierpolicy_qualifiersr    r    r!   r/     s    

zPolicyInformation.__init__c             C   s
   dj | S )Nze<PolicyInformation(policy_identifier={0.policy_identifier}, policy_qualifiers={0.policy_qualifiers})>)r>   )r%   r    r    r!   rE     s    zPolicyInformation.__repr__c             C   s&   t |tstS | j|jko$| j|jkS )N)r   r   rN   r   r   )r%   rO   r    r    r!   rP     s    
zPolicyInformation.__eq__c             C   s
   | |k S )Nr    )r%   rO   r    r    r!   rQ     s    zPolicyInformation.__ne__c             C   s(   | j d k	rt| j }nd }t| j|fS )N)r   re   rR   r   )r%   Zpqr    r    r!   rS   
  s    
zPolicyInformation.__hash__r   r   N)r3   r4   r5   r/   rE   rP   rQ   rS   r   rT   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j	dZ
ej	dZdS )r   c             C   s(   |rt |t rtd|| _|| _d S )Nz2notice_reference must be None or a NoticeReference)r   NoticeReferencerB   _notice_reference_explicit_text)r%   notice_referenceexplicit_textr    r    r!   r/     s    
zUserNotice.__init__c             C   s
   dj | S )NzV<UserNotice(notice_reference={0.notice_reference}, explicit_text={0.explicit_text!r})>)r>   )r%   r    r    r!   rE   "  s    zUserNotice.__repr__c             C   s&   t |tstS | j|jko$| j|jkS )N)r   r   rN   r   r   )r%   rO   r    r    r!   rP   (  s    
zUserNotice.__eq__c             C   s
   | |k S )Nr    )r%   rO   r    r    r!   rQ   1  s    zUserNotice.__ne__c             C   s   t | j| jfS )N)rR   r   r   )r%   r    r    r!   rS   4  s    zUserNotice.__hash__r   r   N)r3   r4   r5   r/   rE   rP   rQ   rS   r   rT   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j	dZ
ej	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)rV   rW   r    r    r!   rX   ?  s    z+NoticeReference.__init__.<locals>.<genexpr>z)notice_numbers must be a list of integers)_organizationrY   rZ   rB   _notice_numbers)r%   organizationnotice_numbersr    r    r!   r/   <  s
    zNoticeReference.__init__c             C   s
   dj | S )NzU<NoticeReference(organization={0.organization!r}, notice_numbers={0.notice_numbers})>)r>   )r%   r    r    r!   rE   D  s    zNoticeReference.__repr__c             C   s&   t |tstS | j|jko$| j|jkS )N)r   r   rN   r   r   )r%   rO   r    r    r!   rP   J  s    
zNoticeReference.__eq__c             C   s
   | |k S )Nr    )r%   rO   r    r    r!   rQ   S  s    zNoticeReference.__ne__c             C   s   t | jt| jfS )N)rR   r   re   r   )r%   r    r    r!   rS   V  s    zNoticeReference.__hash__r   r   N)r3   r4   r5   r/   rE   rP   rQ   rS   r   rT   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 )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   )rV   rW   r    r    r!   rX   c  s    z,ExtendedKeyUsage.__init__.<locals>.<genexpr>z9Every item in the usages list must be an ObjectIdentifier)rY   rZ   rB   _usages)r%   Zusagesr    r    r!   r/   a  s
    zExtendedKeyUsage.__init__r   c             C   s   dj | jS )Nz<ExtendedKeyUsage({})>)r>   r   )r%   r    r    r!   rE   l  s    zExtendedKeyUsage.__repr__c             C   s   t |tstS | j|jkS )N)r   r   rN   r   )r%   rO   r    r    r!   rP   o  s    
zExtendedKeyUsage.__eq__c             C   s
   | |k S )Nr    )r%   rO   r    r    r!   rQ   u  s    zExtendedKeyUsage.__ne__c             C   s   t t| jS )N)rR   re   r   )r%   r    r    r!   rS   x  s    zExtendedKeyUsage.__hash__N)r3   r4   r5   r   ZEXTENDED_KEY_USAGEr0   r/   r,   rF   rG   rH   rE   rP   rQ   rS   r    r    r    r!   r   ]  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   rN   )r%   rO   r    r    r!   rP     s    
zOCSPNoCheck.__eq__c             C   s
   | |k S )Nr    )r%   rO   r    r    r!   rQ     s    zOCSPNoCheck.__ne__c             C   s   t tS )N)rR   r   )r%   r    r    r!   rS     s    zOCSPNoCheck.__hash__c             C   s   dS )Nz<OCSPNoCheck()>r    )r%   r    r    r!   rE     s    zOCSPNoCheck.__repr__N)
r3   r4   r5   r   ZOCSP_NO_CHECKr0   rP   rQ   rS   rE   r    r    r    r!   r   |  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 )NT)r   r   rN   )r%   rO   r    r    r!   rP     s    
zPrecertPoison.__eq__c             C   s
   | |k S )Nr    )r%   rO   r    r    r!   rQ     s    zPrecertPoison.__ne__c             C   s   t tS )N)rR   r   )r%   r    r    r!   rS     s    zPrecertPoison.__hash__c             C   s   dS )Nz<PrecertPoison()>r    )r%   r    r    r!   rE     s    zPrecertPoison.__repr__N)
r3   r4   r5   r   ZPRECERT_POISONr0   rP   rQ   rS   rE   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   s:   t |}tdd |D  s(t|dkr0td|| _d S )Nc             s   s   | ]}t |tV  qd S )N)r   TLSFeatureType)rV   rW   r    r    r!   rX     s    z&TLSFeature.__init__.<locals>.<genexpr>r   z@features must be a list of elements from the TLSFeatureType enum)rY   rZ   r#   rB   	_features)r%   Zfeaturesr    r    r!   r/     s    zTLSFeature.__init__r   c             C   s
   dj | S )Nz$<TLSFeature(features={0._features})>)r>   )r%   r    r    r!   rE     s    zTLSFeature.__repr__c             C   s   t |tstS | j|jkS )N)r   r   rN   r   )r%   rO   r    r    r!   rP     s    
zTLSFeature.__eq__c             C   s
   | |k S )Nr    )r%   rO   r    r    r!   rQ     s    zTLSFeature.__ne__c             C   s   t t| jS )N)rR   re   r   )r%   r    r    r!   rS     s    zTLSFeature.__hash__N)r3   r4   r5   r   ZTLS_FEATUREr0   r/   r,   rF   rG   rH   rE   rP   rQ   rS   r    r    r    r!   r     s   r   c               @   s   e Zd ZdZdZdS )r         N)r3   r4   r5   Zstatus_requestZstatus_request_v2r    r    r    r!   r     s   r   c             C   s   i | ]}||j qS r    )rC   )rV   rW   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j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   rJ   rK   rB   r   _skip_certs)r%   
skip_certsr    r    r!   r/     s
    zInhibitAnyPolicy.__init__c             C   s
   dj | S )Nz-<InhibitAnyPolicy(skip_certs={0.skip_certs})>)r>   )r%   r    r    r!   rE     s    zInhibitAnyPolicy.__repr__c             C   s   t |tstS | j|jkS )N)r   r   rN   r   )r%   rO   r    r    r!   rP     s    
zInhibitAnyPolicy.__eq__c             C   s
   | |k S )Nr    )r%   rO   r    r    r!   rQ     s    zInhibitAnyPolicy.__ne__c             C   s
   t | jS )N)rR   r   )r%   r    r    r!   rS     s    zInhibitAnyPolicy.__hash__r   N)r3   r4   r5   r   ZINHIBIT_ANY_POLICYr0   r/   rE   rP   rQ   rS   r   rT   r   r    r    r    r!   r     s   	r   c               @   s   e Zd ZejZdd ZejdZ	ejdZ
ejdZejdZejdZejdZej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   sP   | r|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!   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   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<   y| j }| j}W n tk
r,   d}d}Y nX dj| ||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   r>   )r%   r   r   r    r    r!   rE   .  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   rN   r   r   r   r   r   r   r   r   r   )r%   rO   r    r    r!   rP   C  s    
zKeyUsage.__eq__c             C   s
   | |k S )Nr    )r%   rO   r    r    r!   rQ   S  s    zKeyUsage.__ne__c          
   C   s,   t | j| j| j| j| j| j| j| j| j	f	S )N)
rR   r   r   r   r   r   r   r   r   r   )r%   r    r    r!   rS   V  s    zKeyUsage.__hash__N)r3   r4   r5   r   Z	KEY_USAGEr0   r/   r   rT   r   r   r   r   r   r   r   propertyr   r   rE   rP   rQ   rS   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jdZejdZdS )NameConstraintsc             C   s   |d k	r4t |}tdd |D s*td| j| |d k	rht |}tdd |D s^td| j| |d kr|d krtd|| _|| _d S )Nc             s   s   | ]}t |tV  qd S )N)r   r   )rV   rW   r    r    r!   rX   m  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   )rV   rW   r    r    r!   rX   w  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   rB   _validate_ip_namer   _permitted_subtrees_excluded_subtrees)r%   permitted_subtreesexcluded_subtreesr    r    r!   r/   j  s"    

zNameConstraints.__init__c             C   s&   t |tstS | j|jko$| j|jkS )N)r   r   rN   r   r   )r%   rO   r    r    r!   rP     s    
zNameConstraints.__eq__c             C   s
   | |k S )Nr    )r%   rO   r    r    r!   rQ     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   rC   	ipaddressZIPv4NetworkZIPv6Network)rV   namer    r    r!   rX     s   z4NameConstraints._validate_ip_name.<locals>.<genexpr>zGIPAddress name constraints must be an IPv4Network or IPv6Network object)anyrB   )r%   Ztreer    r    r!   r     s
    
z!NameConstraints._validate_ip_namec             C   s
   dj | S )Nze<NameConstraints(permitted_subtrees={0.permitted_subtrees}, excluded_subtrees={0.excluded_subtrees})>)r>   )r%   r    r    r!   rE     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   re   r   rR   )r%   ZpsZesr    r    r!   rS     s    

zNameConstraints.__hash__r   r   N)r3   r4   r5   r   ZNAME_CONSTRAINTSr0   r/   rP   rQ   r   rE   rS   r   rT   r   r   r    r    r    r!   r   f  s   	
r   c               @   sR   e Zd Zdd ZejdZejdZej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   rB   rs   _oid	_critical_value)r%   r0   criticalrC   r    r    r!   r/     s    

zExtension.__init__r   r   r   c             C   s
   dj | S )Nz@<Extension(oid={0.oid}, critical={0.critical}, value={0.value})>)r>   )r%   r    r    r!   rE     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   rN   r0   r   rC   )r%   rO   r    r    r!   rP     s
    
zExtension.__eq__c             C   s
   | |k S )Nr    )r%   rO   r    r    r!   rQ     s    zExtension.__ne__c             C   s   t | j| j| jfS )N)rR   r0   r   rC   )r%   r    r    r!   rS     s    zExtension.__hash__N)r3   r4   r5   r/   r   rT   r0   r   rC   rE   rP   rQ   rS   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 )N)r   r   )rV   rW   r    r    r!   rX     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   rB   _general_names)r%   general_namesr    r    r!   r/     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 )N)r   )rV   i)typer    r!   rX     s    z3GeneralNames.get_values_for_type.<locals>.<genexpr>c             s   s   | ]}|j V  qd S )N)rC   )rV   r   r    r    r!   rX     s    )r   rY   )r%   r   Zobjsr    )r   r!   get_values_for_type  s    z GeneralNames.get_values_for_typec             C   s   dj | jS )Nz<GeneralNames({})>)r>   r   )r%   r    r    r!   rE     s    zGeneralNames.__repr__c             C   s   t |tstS | j|jkS )N)r   r   rN   r   )r%   rO   r    r    r!   rP     s    
zGeneralNames.__eq__c             C   s
   | |k S )Nr    )r%   rO   r    r    r!   rQ      s    zGeneralNames.__ne__c             C   s   t t| jS )N)rR   re   r   )r%   r    r    r!   rS     s    zGeneralNames.__hash__N)r3   r4   r5   r/   r,   rF   rG   rH   r   rE   rP   rQ   rS   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 )N)r   r   )r%   r   r    r    r!   r/     s    zSubjectAlternativeName.__init__r   c             C   s   | j j|S )N)r   r   )r%   r   r    r    r!   r     s    z*SubjectAlternativeName.get_values_for_typec             C   s   dj | jS )Nz<SubjectAlternativeName({})>)r>   r   )r%   r    r    r!   rE     s    zSubjectAlternativeName.__repr__c             C   s   t |tstS | j|jkS )N)r   r   rN   r   )r%   rO   r    r    r!   rP     s    
zSubjectAlternativeName.__eq__c             C   s
   | |k S )Nr    )r%   rO   r    r    r!   rQ     s    zSubjectAlternativeName.__ne__c             C   s
   t | jS )N)rR   r   )r%   r    r    r!   rS     s    zSubjectAlternativeName.__hash__N)r3   r4   r5   r   ZSUBJECT_ALTERNATIVE_NAMEr0   r/   r,   rF   rG   rH   r   rE   rP   rQ   rS   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 )N)r   r   )r%   r   r    r    r!   r/   '  s    zIssuerAlternativeName.__init__r   c             C   s   | j j|S )N)r   r   )r%   r   r    r    r!   r   ,  s    z)IssuerAlternativeName.get_values_for_typec             C   s   dj | jS )Nz<IssuerAlternativeName({})>)r>   r   )r%   r    r    r!   rE   /  s    zIssuerAlternativeName.__repr__c             C   s   t |tstS | j|jkS )N)r   r   rN   r   )r%   rO   r    r    r!   rP   2  s    
zIssuerAlternativeName.__eq__c             C   s
   | |k S )Nr    )r%   rO   r    r    r!   rQ   8  s    zIssuerAlternativeName.__ne__c             C   s
   t | jS )N)rR   r   )r%   r    r    r!   rS   ;  s    zIssuerAlternativeName.__hash__N)r3   r4   r5   r   ZISSUER_ALTERNATIVE_NAMEr0   r/   r,   rF   rG   rH   r   rE   rP   rQ   rS   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 )N)r   r   )r%   r   r    r    r!   r/   C  s    zCertificateIssuer.__init__r   c             C   s   | j j|S )N)r   r   )r%   r   r    r    r!   r   H  s    z%CertificateIssuer.get_values_for_typec             C   s   dj | jS )Nz<CertificateIssuer({})>)r>   r   )r%   r    r    r!   rE   K  s    zCertificateIssuer.__repr__c             C   s   t |tstS | j|jkS )N)r   r   rN   r   )r%   rO   r    r    r!   rP   N  s    
zCertificateIssuer.__eq__c             C   s
   | |k S )Nr    )r%   rO   r    r    r!   rQ   T  s    zCertificateIssuer.__ne__c             C   s
   t | jS )N)rR   r   )r%   r    r    r!   rS   W  s    zCertificateIssuer.__hash__N)r3   r4   r5   r   ZCERTIFICATE_ISSUERr0   r/   r,   rF   rG   rH   r   rE   rP   rQ   rS   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jdZdS )	CRLReasonc             C   s   t |tstd|| _d S )Nz*reason must be an element from ReasonFlags)r   r~   rB   _reason)r%   reasonr    r    r!   r/   _  s    
zCRLReason.__init__c             C   s   dj | jS )Nz<CRLReason(reason={})>)r>   r   )r%   r    r    r!   rE   e  s    zCRLReason.__repr__c             C   s   t |tstS | j|jkS )N)r   r   rN   r   )r%   rO   r    r    r!   rP   h  s    
zCRLReason.__eq__c             C   s
   | |k S )Nr    )r%   rO   r    r    r!   rQ   n  s    zCRLReason.__ne__c             C   s
   t | jS )N)rR   r   )r%   r    r    r!   rS   q  s    zCRLReason.__hash__r   N)r3   r4   r5   r   Z
CRL_REASONr0   r/   rE   rP   rQ   rS   r   rT   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jdZdS )InvalidityDatec             C   s   t |tjstd|| _d S )Nz+invalidity_date must be a datetime.datetime)r   datetimerB   _invalidity_date)r%   invalidity_dater    r    r!   r/   {  s    zInvalidityDate.__init__c             C   s   dj | jS )Nz$<InvalidityDate(invalidity_date={})>)r>   r   )r%   r    r    r!   rE     s    zInvalidityDate.__repr__c             C   s   t |tstS | j|jkS )N)r   r   rN   r   )r%   rO   r    r    r!   rP     s    
zInvalidityDate.__eq__c             C   s
   | |k S )Nr    )r%   rO   r    r    r!   rQ     s    zInvalidityDate.__ne__c             C   s
   t | jS )N)rR   r   )r%   r    r    r!   rS     s    zInvalidityDate.__hash__r   N)r3   r4   r5   r   ZINVALIDITY_DATEr0   r/   rE   rP   rQ   rS   r   rT   r   r    r    r    r!   r   w  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 )N)r   r   )rV   sctr    r    r!   rX     s   zEPrecertificateSignedCertificateTimestamps.__init__.<locals>.<genexpr>zYEvery item in the signed_certificate_timestamps list must be a SignedCertificateTimestamp)rY   rZ   rB   _signed_certificate_timestamps)r%   signed_certificate_timestampsr    r    r!   r/     s    
z2PrecertificateSignedCertificateTimestamps.__init__r   c             C   s   dj t| S )Nz/<PrecertificateSignedCertificateTimestamps({})>)r>   rY   )r%   r    r    r!   rE     s    z2PrecertificateSignedCertificateTimestamps.__repr__c             C   s   t t| jS )N)rR   re   r   )r%   r    r    r!   rS     s    z2PrecertificateSignedCertificateTimestamps.__hash__c             C   s   t |tstS | j|jkS )N)r   r   rN   r   )r%   rO   r    r    r!   rP     s    
z0PrecertificateSignedCertificateTimestamps.__eq__c             C   s
   | |k S )Nr    )r%   rO   r    r    r!   rQ     s    z0PrecertificateSignedCertificateTimestamps.__ne__N)r3   r4   r5   r   Z%PRECERT_SIGNED_CERTIFICATE_TIMESTAMPSr0   r/   r,   rF   rG   rH   rE   rS   rP   rQ   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 )N)r   r   )rV   r   r    r    r!   rX     s   z7SignedCertificateTimestamps.__init__.<locals>.<genexpr>zYEvery item in the signed_certificate_timestamps list must be a SignedCertificateTimestamp)rY   rZ   rB   r   )r%   r   r    r    r!   r/     s    
z$SignedCertificateTimestamps.__init__r   c             C   s   dj t| S )Nz!<SignedCertificateTimestamps({})>)r>   rY   )r%   r    r    r!   rE     s    z$SignedCertificateTimestamps.__repr__c             C   s   t t| jS )N)rR   re   r   )r%   r    r    r!   rS     s    z$SignedCertificateTimestamps.__hash__c             C   s   t |tstS | j|jkS )N)r   r   rN   r   )r%   rO   r    r    r!   rP     s    
z"SignedCertificateTimestamps.__eq__c             C   s
   | |k S )Nr    )r%   rO   r    r    r!   rQ     s    z"SignedCertificateTimestamps.__ne__N)r3   r4   r5   r   ZSIGNED_CERTIFICATE_TIMESTAMPSr0   r/   r,   rF   rG   rH   rE   rS   rP   rQ   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jdZdS )	OCSPNoncec             C   s   t |tstd|| _d S )Nznonce must be bytes)r   bytesrB   _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   rN   r   )r%   rO   r    r    r!   rP     s    
zOCSPNonce.__eq__c             C   s
   | |k S )Nr    )r%   rO   r    r    r!   rQ     s    zOCSPNonce.__ne__c             C   s
   t | jS )N)rR   r   )r%   r    r    r!   rS     s    zOCSPNonce.__hash__c             C   s
   dj | S )Nz<OCSPNonce(nonce={0.nonce!r})>)r>   )r%   r    r    r!   rE     s    zOCSPNonce.__repr__r   N)r3   r4   r5   r   ZNONCEr0   r/   rP   rQ   rS   rE   r   rT   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jdZejdZejdZejdZejdZejdZejdZdS )IssuingDistributionPointc       	      C   s   |r,t |t s$tdd |D  r,td|rLtj|ksDtj|krLtdt |tort |tort |tort |ts|t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~   )rV   rW   r    r    r!   rX     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    )rV   rW   r    r    r!   
<listcomp>3  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   rB   r~   r   r   r   rs   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!   r/     sP    






z!IssuingDistributionPoint.__init__c             C   s
   dj | 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!   rE   U  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   rN   r   r   r   r   r   r   r   )r%   rO   r    r    r!   rP   a  s    
zIssuingDistributionPoint.__eq__c             C   s
   | |k S )Nr    )r%   rO   r    r    r!   rQ   p  s    zIssuingDistributionPoint.__ne__c             C   s$   t | j| j| j| j| j| j| jfS )N)rR   r   r   r   r   r   r   r   )r%   r    r    r!   rS   s  s    z!IssuingDistributionPoint.__hash__r   r   r   r   r   r   r   N)r3   r4   r5   r   ZISSUING_DISTRIBUTION_POINTr0   r/   rE   rP   rQ   rS   r   rT   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jdZejdZdd Zdd Z	d	d
 Z
dd ZdS )rA   c             C   s"   t |tstd|| _|| _d S )Nzoid must be an ObjectIdentifier)r   r   rB   r   r   )r%   r0   rC   r    r    r!   r/     s    
zUnrecognizedExtension.__init__r   r   c             C   s
   dj | S )Nz7<UnrecognizedExtension(oid={0.oid}, value={0.value!r})>)r>   )r%   r    r    r!   rE     s    zUnrecognizedExtension.__repr__c             C   s&   t |tstS | j|jko$| j|jkS )N)r   rA   rN   r0   rC   )r%   rO   r    r    r!   rP     s    
zUnrecognizedExtension.__eq__c             C   s
   | |k S )Nr    )r%   rO   r    r    r!   rQ     s    zUnrecognizedExtension.__ne__c             C   s   t | j| jfS )N)rR   r0   rC   )r%   r    r    r!   rS     s    zUnrecognizedExtension.__hash__N)r3   r4   r5   r/   r   rT   r0   rC   rE   rP   rQ   rS   r    r    r    r!   rA     s   

rA   )WZ
__future__r   r   r   r9   r   r   r   enumr   rJ   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"   r,   	Exceptionr-   r7   Zadd_metaclassABCMetaobjectr8   r;   Zregister_interfacerI   rU   rc   ri   rm   rj   rr   rx   ry   r}   rz   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   rA   r    r    r    r!   <module>   s   (!_$)##^<2%""qQ)&(& 