
,Y=                 @   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
 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 m Z m Z d  d
 l m Z d  d l m Z m Z m Z d d   Z  Gd d   d e!  Z" Gd d   d e!  Z# Gd d   d e!  Z$ e j% e j&  Gd d   d e'   Z( Gd d   d e'  Z) e j* e(  Gd d   d e'   Z+ e j* e(  Gd d   d e'   Z, e j* e(  Gd d   d e'   Z- e j* e(  Gd d   d e'   Z. Gd  d!   d! e'  Z/ e j* e(  Gd" d#   d# e'   Z0 e j* e(  Gd$ d%   d% e'   Z1 Gd& d'   d' e'  Z2 Gd( d)   d) e	  Z3 e j* e(  Gd* d+   d+ e'   Z4 e j* e(  Gd, d-   d- e'   Z5 Gd. d/   d/ e'  Z6 Gd0 d1   d1 e'  Z7 Gd2 d3   d3 e'  Z8 e j* e(  Gd4 d5   d5 e'   Z9 e j* e(  Gd6 d7   d7 e'   Z: e j* e(  Gd8 d9   d9 e'   Z; e j* e(  Gd: d;   d; e'   Z< e j* e(  Gd< d=   d= e'   Z= Gd> d?   d? e'  Z> Gd@ dA   dA e'  Z? e j* e(  GdB dC   dC e'   Z@ e j* e(  GdD dE   dE e'   ZA e j* e(  GdF dG   dG e'   ZB e j* e(  GdH dI   dI e'   ZC e j* e(  GdJ dK   dK e'   ZD e j* e(  GdL dM   dM e'   ZE d S)N    )absolute_importdivisionprint_functionN)Enum)PublicKeyInfo)utils)constant_timeserialization)EllipticCurvePublicKey)RSAPublicKey)GeneralName	IPAddress	OtherName)RelativeDistinguishedName)CRLEntryExtensionOIDExtensionOIDObjectIdentifierc             C   s   t  |  t  r0 |  j t j j t j j  } n^ t  |  t  rT |  j	   j
   } n: |  j t j j t j j  } t j t j |  d  } t j |  j   S)N
public_key)
isinstancer   Zpublic_bytesr	   ZEncodingZDERZPublicFormatZPKCS1r
   Zpublic_numbersZencode_pointZSubjectPublicKeyInfosixZbinary_typer   loadhashlibZsha1digest)r   dataZ
serialized r   >/usr/lib/python3/dist-packages/cryptography/x509/extensions.py_key_identifier_from_public_key   s    		r   c                   s"   e  Z d  Z   f d d   Z   S)DuplicateExtensionc                s#   t  t |   j |  | |  _ d  S)N)superr   __init__oid)selfmsgr    )	__class__r   r   r   1   s    zDuplicateExtension.__init__)__name__
__module____qualname__r   r   r   )r#   r   r   0   s   r   c               @   s   e  Z d  Z d S)UnsupportedExtensionN)r$   r%   r&   r   r   r   r   r'   6   s   r'   c                   s"   e  Z d  Z   f d d   Z   S)ExtensionNotFoundc                s#   t  t |   j |  | |  _ d  S)N)r   r(   r   r    )r!   r"   r    )r#   r   r   r   ;   s    zExtensionNotFound.__init__)r$   r%   r&   r   r   r   )r#   r   r(   :   s   r(   c               @   s%   e  Z d  Z e j d d    Z d S)ExtensionTypec             C   s   d S)zK
        Returns the oid associated with the given extension type.
        Nr   )r!   r   r   r   r    B   s    zExtensionType.oidN)r$   r%   r&   abcabstractpropertyr    r   r   r   r   r)   @   s   r)   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   J   s    zExtensions.__init__c             C   s@   x! |  D] } | j  | k r | Sq Wt d j |  |   d  S)NzNo {0} extension was found)r    r(   format)r!   r    extr   r   r   get_extension_for_oidM   s    z Extensions.get_extension_for_oidc             C   s^   | t  k r t d   x$ |  D] } t | j |  r | Sq Wt 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 {0} extension was found)UnrecognizedExtension	TypeErrorr   valuer(   r/   r    )r!   Zextclassr0   r   r   r   get_extension_for_classT   s    	z"Extensions.get_extension_for_classc             C   s   t  |  j  S)N)iterr-   )r!   r   r   r   __iter__d   s    zExtensions.__iter__c             C   s   t  |  j  S)N)lenr-   )r!   r   r   r   __len__g   s    zExtensions.__len__c             C   s   |  j  | S)N)r-   )r!   idxr   r   r   __getitem__j   s    zExtensions.__getitem__c             C   s   d j  |  j  S)Nz<Extensions({0})>)r/   r-   )r!   r   r   r   __repr__m   s    zExtensions.__repr__N)
r$   r%   r&   r   r1   r5   r7   r9   r;   r<   r   r   r   r   r,   I   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   r   integer_typesr3   _crl_number)r!   
crl_numberr   r   r   r   w   s    zCRLNumber.__init__c             C   s#   t  | t  s t S|  j | j k S)N)r   r=   NotImplementedr@   )r!   otherr   r   r   __eq__}   s    zCRLNumber.__eq__c             C   s   |  | k S)Nr   )r!   rB   r   r   r   __ne__   s    zCRLNumber.__ne__c             C   s   t  |  j  S)N)hashr@   )r!   r   r   r   __hash__   s    zCRLNumber.__hash__c             C   s   d j  |  j  S)Nz<CRLNumber({0})>)r/   r@   )r!   r   r   r   r<      s    zCRLNumber.__repr__r?   N)r$   r%   r&   r   Z
CRL_NUMBERr    r   rC   rD   rF   r<   r   read_only_propertyr@   r   r   r   r   r=   s   s   	r=   c               @   s   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 e j d  Z e j d  Z e j d  Z d S)AuthorityKeyIdentifierc             C   s   | d  k | d  k k r$ t  d   | d  k	 ra t |  } t d d   | D  sa t 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)

ValueErrorlistallr3   r   r   r>   _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  d d   S)NrR   rS   rT   )r   )clsr   r   r   r   r   from_issuer_public_key   s
    z-AuthorityKeyIdentifier.from_issuer_public_keyc             C   s   |  d | j  j d d  d d   S)NrR   rS   rT   )r4   r   )rU   Zskir   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   r<      s    zAuthorityKeyIdentifier.__repr__c             C   sG   t  | t  s t S|  j | j k oF |  j | j k oF |  j | j k S)N)r   rH   rA   rR   rS   rT   )r!   rB   r   r   r   rC      s    zAuthorityKeyIdentifier.__eq__c             C   s   |  | k S)Nr   )r!   rB   r   r   r   rD      s    zAuthorityKeyIdentifier.__ne__rO   rP   rQ   N)r$   r%   r&   r   ZAUTHORITY_KEY_IDENTIFIERr    r   classmethodrV   rW   r<   rC   rD   r   rG   rR   rS   rT   r   r   r   r   rH      s   		rH   c               @   sv   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)SubjectKeyIdentifierc             C   s   | |  _  d  S)N)_digest)r!   r   r   r   r   r      s    zSubjectKeyIdentifier.__init__c             C   s   |  t  |   S)N)r   )rU   r   r   r   r   from_public_key   s    z$SubjectKeyIdentifier.from_public_keyrZ   c             C   s   d j  |  j  S)Nz$<SubjectKeyIdentifier(digest={0!r})>)r/   r   )r!   r   r   r   r<      s    zSubjectKeyIdentifier.__repr__c             C   s)   t  | t  s t St j |  j | j  S)N)r   rY   rA   r   Zbytes_eqr   )r!   rB   r   r   r   rC      s    zSubjectKeyIdentifier.__eq__c             C   s   |  | k S)Nr   )r!   rB   r   r   r   rD      s    zSubjectKeyIdentifier.__ne__c             C   s   t  |  j  S)N)rE   r   )r!   r   r   r   rF      s    zSubjectKeyIdentifier.__hash__N)r$   r%   r&   r   ZSUBJECT_KEY_IDENTIFIERr    r   rX   r[   r   rG   r   r<   rC   rD   rF   r   r   r   r   rY      s   	rY   c               @   sm   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)AuthorityInformationAccessc             C   s>   t  |  } t d d   | D  s1 t d   | |  _ d  S)Nc             s   s   |  ] } t  | t  Vq d  S)N)r   AccessDescription)rI   rJ   r   r   r   rK     s    z6AuthorityInformationAccess.__init__.<locals>.<genexpr>z@Every item in the descriptions list must be an AccessDescription)rM   rN   r3   _descriptions)r!   Zdescriptionsr   r   r   r     s
    	z#AuthorityInformationAccess.__init__c             C   s   t  |  j  S)N)r6   r^   )r!   r   r   r   r7     s    z#AuthorityInformationAccess.__iter__c             C   s   t  |  j  S)N)r8   r^   )r!   r   r   r   r9     s    z"AuthorityInformationAccess.__len__c             C   s   d j  |  j  S)Nz!<AuthorityInformationAccess({0})>)r/   r^   )r!   r   r   r   r<     s    z#AuthorityInformationAccess.__repr__c             C   s#   t  | t  s t S|  j | j k S)N)r   r\   rA   r^   )r!   rB   r   r   r   rC     s    z!AuthorityInformationAccess.__eq__c             C   s   |  | k S)Nr   )r!   rB   r   r   r   rD     s    z!AuthorityInformationAccess.__ne__c             C   s   |  j  | S)N)r^   )r!   r:   r   r   r   r;     s    z&AuthorityInformationAccess.__getitem__N)r$   r%   r&   r   ZAUTHORITY_INFORMATION_ACCESSr    r   r7   r9   r<   rC   rD   r;   r   r   r   r   r\      s   	
r\   c               @   sj   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   sL   t  | t  s t d   t  | t  s6 t d   | |  _ | |  _ d  S)Nz)access_method must be an ObjectIdentifierz%access_location must be a GeneralName)r   r   r3   r   _access_method_access_location)r!   access_methodaccess_locationr   r   r   r   "  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   r<   ,  s    zAccessDescription.__repr__c             C   s5   t  | t  s t S|  j | j k o4 |  j | j k S)N)r   r]   rA   ra   rb   )r!   rB   r   r   r   rC   2  s    zAccessDescription.__eq__c             C   s   |  | k S)Nr   )r!   rB   r   r   r   rD   ;  s    zAccessDescription.__ne__c             C   s   t  |  j |  j f  S)N)rE   ra   rb   )r!   r   r   r   rF   >  s    zAccessDescription.__hash__r_   r`   N)r$   r%   r&   r   r<   rC   rD   rF   r   rG   ra   rb   r   r   r   r   r]   !  s   
	r]   c               @   ss   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	 rq t  | t j  se | d k  rq t d   | |  _ | |  _ d  S)Nzca must be a boolean valuez)path_length must be None when ca is Falser   z2path_length must be a non-negative integer or None)r   boolr3   rL   r   r>   _ca_path_length)r!   capath_lengthr   r   r   r   I  s    		zBasicConstraints.__init__re   rf   c             C   s   d j  |   S)Nz:<BasicConstraints(ca={0.ca}, path_length={0.path_length})>)r/   )r!   r   r   r   r<   ^  s    zBasicConstraints.__repr__c             C   s5   t  | t  s t S|  j | j k o4 |  j | j k S)N)r   rc   rA   rg   rh   )r!   rB   r   r   r   rC   b  s    zBasicConstraints.__eq__c             C   s   |  | k S)Nr   )r!   rB   r   r   r   rD   h  s    zBasicConstraints.__ne__c             C   s   t  |  j |  j f  S)N)rE   rg   rh   )r!   r   r   r   rF   k  s    zBasicConstraints.__hash__N)r$   r%   r&   r   ZBASIC_CONSTRAINTSr    r   r   rG   rg   rh   r<   rC   rD   rF   r   r   r   r   rc   E  s   	rc   c               @   sm   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)CRLDistributionPointsc             C   s>   t  |  } t d d   | D  s1 t d   | |  _ d  S)Nc             s   s   |  ] } t  | t  Vq d  S)N)r   DistributionPoint)rI   rJ   r   r   r   rK   v  s    z1CRLDistributionPoints.__init__.<locals>.<genexpr>z?distribution_points must be a list of DistributionPoint objects)rM   rN   r3   _distribution_points)r!   Zdistribution_pointsr   r   r   r   s  s    	zCRLDistributionPoints.__init__c             C   s   t  |  j  S)N)r6   rk   )r!   r   r   r   r7     s    zCRLDistributionPoints.__iter__c             C   s   t  |  j  S)N)r8   rk   )r!   r   r   r   r9     s    zCRLDistributionPoints.__len__c             C   s   d j  |  j  S)Nz<CRLDistributionPoints({0})>)r/   rk   )r!   r   r   r   r<     s    zCRLDistributionPoints.__repr__c             C   s#   t  | t  s t S|  j | j k S)N)r   ri   rA   rk   )r!   rB   r   r   r   rC     s    zCRLDistributionPoints.__eq__c             C   s   |  | k S)Nr   )r!   rB   r   r   r   rD     s    zCRLDistributionPoints.__ne__c             C   s   |  j  | S)N)rk   )r!   r:   r   r   r   r;     s    z!CRLDistributionPoints.__getitem__N)r$   r%   r&   r   ZCRL_DISTRIBUTION_POINTSr    r   r7   r9   r<   rC   rD   r;   r   r   r   r   ri   o  s   	ri   c               @   s|   e  Z 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)rj   c             C   sa  | r | r t  d   | rO t |  } t d d   | D  sO t d   | rp t | t  sp t d   | r t |  } t d d   | D  s t d   | r t | t  s t d d   | D  r t d	   | rt j | k st j	 | k rt  d
   | r9| r9| p)| r9t  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   )rI   rJ   r   r   r   rK     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   )rI   rJ   r   r   r   rK     s    z2crl_issuer must be None or a list of general namesc             s   s   |  ] } t  | t  Vq d  S)N)r   ReasonFlags)rI   rJ   r   r   r   rK     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)rL   rM   rN   r3   r   r   	frozensetrl   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 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   r<     s    zDistributionPoint.__repr__c             C   sY   t  | t  s t S|  j | j k oX |  j | j k oX |  j | j k oX |  j | j k S)N)r   rj   rA   rt   ru   rv   rw   )r!   rB   r   r   r   rC     s    zDistributionPoint.__eq__c             C   s   |  | k S)Nr   )r!   rB   r   r   r   rD     s    zDistributionPoint.__ne__rp   rq   rr   rs   N)r$   r%   r&   r   r<   rC   rD   r   rG   rt   ru   rv   rw   r   r   r   r   rj     s   4rj   c               @   sL   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)rl   rn   ZkeyCompromiseZcACompromiseZaffiliationChanged
supersededZcessationOfOperationZcertificateHoldZprivilegeWithdrawnZaACompromiseZremoveFromCRLN)r$   r%   r&   rn   Zkey_compromiseZca_compromiseZaffiliation_changedrx   Zcessation_of_operationZcertificate_holdZprivilege_withdrawnZaa_compromisero   r   r   r   r   rl     s   rl   c               @   sg   e  Z d  Z e j 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   s   | d  k	 r+ t  | t j  r+ t d   | d  k	 rV t  | t j  rV t d   | d  k rz | d  k rz t d   | |  _ | |  _ d  S)Nz>require_explicit_policy must be a non-negative integer or Nonez=inhibit_policy_mapping must be a non-negative integer or NonezSAt least one of require_explicit_policy and inhibit_policy_mapping must not be None)r   r   r>   r3   rL   _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   r<     s    zPolicyConstraints.__repr__c             C   s5   t  | t  s t S|  j | j k o4 |  j | j k S)N)r   ry   rA   r|   r}   )r!   rB   r   r   r   rC     s    zPolicyConstraints.__eq__c             C   s   |  | k S)Nr   )r!   rB   r   r   r   rD     s    zPolicyConstraints.__ne__rz   r{   N)r$   r%   r&   r   ZPOLICY_CONSTRAINTSr    r   r<   rC   rD   r   rG   r|   r}   r   r   r   r   ry     s   			ry   c               @   sm   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)CertificatePoliciesc             C   s>   t  |  } t d d   | D  s1 t d   | |  _ d  S)Nc             s   s   |  ] } t  | t  Vq d  S)N)r   PolicyInformation)rI   rJ   r   r   r   rK   0  s    z/CertificatePolicies.__init__.<locals>.<genexpr>z;Every item in the policies list must be a PolicyInformation)rM   rN   r3   	_policies)r!   Zpoliciesr   r   r   r   .  s
    	zCertificatePolicies.__init__c             C   s   t  |  j  S)N)r6   r   )r!   r   r   r   r7   8  s    zCertificatePolicies.__iter__c             C   s   t  |  j  S)N)r8   r   )r!   r   r   r   r9   ;  s    zCertificatePolicies.__len__c             C   s   d j  |  j  S)Nz<CertificatePolicies({0})>)r/   r   )r!   r   r   r   r<   >  s    zCertificatePolicies.__repr__c             C   s#   t  | t  s t S|  j | j k S)N)r   r~   rA   r   )r!   rB   r   r   r   rC   A  s    zCertificatePolicies.__eq__c             C   s   |  | k S)Nr   )r!   rB   r   r   r   rD   G  s    zCertificatePolicies.__ne__c             C   s   |  j  | S)N)r   )r!   r:   r   r   r   r;   J  s    zCertificatePolicies.__getitem__N)r$   r%   r&   r   ZCERTIFICATE_POLICIESr    r   r7   r9   r<   rC   rD   r;   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 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   r   Z	text_type
UserNotice)rI   rJ   r   r   r   rK   X  s   z-PolicyInformation.__init__.<locals>.<genexpr>zMpolicy_qualifiers must be a list of strings and/or UserNotice objects or None)r   r   r3   _policy_identifierrM   rN   _policy_qualifiers)r!   policy_identifierpolicy_qualifiersr   r   r   r   O  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   r<   b  s    zPolicyInformation.__repr__c             C   s5   t  | t  s t S|  j | j k o4 |  j | j k S)N)r   r   rA   r   r   )r!   rB   r   r   r   rC   h  s    zPolicyInformation.__eq__c             C   s   |  | k S)Nr   )r!   rB   r   r   r   rD   q  s    zPolicyInformation.__ne__r   r   N)r$   r%   r&   r   r<   rC   rD   r   rG   r   r   r   r   r   r   r   N  s   	r   c               @   s^   e  Z 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   s8   | r" t  | t  r" t d   | |  _ | |  _ d  S)Nz2notice_reference must be None or a NoticeReference)r   NoticeReferencer3   _notice_reference_explicit_text)r!   notice_referenceexplicit_textr   r   r   r   y  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   r<     s    zUserNotice.__repr__c             C   s5   t  | t  s t S|  j | j k o4 |  j | j k S)N)r   r   rA   r   r   )r!   rB   r   r   r   rC     s    zUserNotice.__eq__c             C   s   |  | k S)Nr   )r!   rB   r   r   r   rD     s    zUserNotice.__ne__r   r   N)r$   r%   r&   r   r<   rC   rD   r   rG   r   r   r   r   r   r   r   x  s   	r   c               @   s^   e  Z 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   sG   | |  _  t |  } t d d   | D  s: t d   | |  _ d  S)Nc             s   s   |  ] } t  | t  Vq d  S)N)r   int)rI   rJ   r   r   r   rK     s    z+NoticeReference.__init__.<locals>.<genexpr>z)notice_numbers must be a list of integers)_organizationrM   rN   r3   _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   r<     s    zNoticeReference.__repr__c             C   s5   t  | t  s t S|  j | j k o4 |  j | j k S)N)r   r   rA   r   r   )r!   rB   r   r   r   rC     s    zNoticeReference.__eq__c             C   s   |  | k S)Nr   )r!   rB   r   r   r   rD     s    zNoticeReference.__ne__r   r   N)r$   r%   r&   r   r<   rC   rD   r   rG   r   r   r   r   r   r   r     s   
	r   c               @   sa   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 S)ExtendedKeyUsagec             C   s>   t  |  } t d d   | D  s1 t d   | |  _ d  S)Nc             s   s   |  ] } t  | t  Vq d  S)N)r   r   )rI   rJ   r   r   r   rK     s    z,ExtendedKeyUsage.__init__.<locals>.<genexpr>z9Every item in the usages list must be an ObjectIdentifier)rM   rN   r3   _usages)r!   Zusagesr   r   r   r     s
    	zExtendedKeyUsage.__init__c             C   s   t  |  j  S)N)r6   r   )r!   r   r   r   r7     s    zExtendedKeyUsage.__iter__c             C   s   t  |  j  S)N)r8   r   )r!   r   r   r   r9     s    zExtendedKeyUsage.__len__c             C   s   d j  |  j  S)Nz<ExtendedKeyUsage({0})>)r/   r   )r!   r   r   r   r<     s    zExtendedKeyUsage.__repr__c             C   s#   t  | t  s t S|  j | j k S)N)r   r   rA   r   )r!   rB   r   r   r   rC     s    zExtendedKeyUsage.__eq__c             C   s   |  | k S)Nr   )r!   rB   r   r   r   rD     s    zExtendedKeyUsage.__ne__N)r$   r%   r&   r   ZEXTENDED_KEY_USAGEr    r   r7   r9   r<   rC   rD   r   r   r   r   r     s   		r   c               @   s   e  Z d  Z e j Z d S)OCSPNoCheckN)r$   r%   r&   r   ZOCSP_NO_CHECKr    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)InhibitAnyPolicyc             C   sC   t  | t j  s t d   | d k  r6 t d   | |  _ d  S)Nzskip_certs must be an integerr   z)skip_certs must be a non-negative integer)r   r   r>   r3   rL   _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   r<     s    zInhibitAnyPolicy.__repr__c             C   s#   t  | t  s t S|  j | j k S)N)r   r   rA   r   )r!   rB   r   r   r   rC     s    zInhibitAnyPolicy.__eq__c             C   s   |  | k S)Nr   )r!   rB   r   r   r   rD     s    zInhibitAnyPolicy.__ne__c             C   s   t  |  j  S)N)rE   r   )r!   r   r   r   rF     s    zInhibitAnyPolicy.__hash__r   N)r$   r%   r&   r   ZINHIBIT_ANY_POLICYr    r   r<   rC   rD   rF   r   rG   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 S)KeyUsagec
       
      C   st   | r | s |	 r t  d   | |  _ | |  _ | |  _ | |  _ | |  _ | |  _ | |  _ | |  _ |	 |  _	 d  S)NzKencipher_only and decipher_only can only be true when key_agreement is true)
rL   _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 Sd  S)Nz7encipher_only is undefined unless key_agreement is true)r   rL   r   )r!   r   r   r   r     s    	zKeyUsage.encipher_onlyc             C   s#   |  j  s t d   n |  j Sd  S)Nz7decipher_only is undefined unless key_agreement is true)r   rL   r   )r!   r   r   r   r   '  s    	zKeyUsage.decipher_onlyc             C   sJ   y |  j  } |  j } Wn t k
 r6 d  } d  } Yn Xd j |  | |  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   rL   r/   )r!   r   r   r   r   r   r<   0  s    	zKeyUsage.__repr__c             C   s   t  | t  s t S|  j | j k o |  j | j k o |  j | j k o |  j | j k o |  j | j k o |  j | j k o |  j	 | j	 k o |  j
 | j
 k o |  j | j k S)N)r   r   rA   r   r   r   r   r   r   r   r   r   )r!   rB   r   r   r   rC   A  s    zKeyUsage.__eq__c             C   s   |  | k S)Nr   )r!   rB   r   r   r   rD   Q  s    zKeyUsage.__ne__N)r$   r%   r&   r   Z	KEY_USAGEr    r   r   rG   r   r   r   r   r   r   r   propertyr   r   r<   rC   rD   r   r   r   r   r     s   			r   c               @   ss   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)NameConstraintsc             C   s   | d  k	 rJ t  |  } t d d   | D  s= t d   |  j |  | d  k	 r t  |  } t d d   | D  s t d   |  j |  | d  k r | d  k r t d   | |  _ | |  _ d  S)Nc             s   s   |  ] } t  | t  Vq d  S)N)r   r   )rI   rJ   r   r   r   rK   ]  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   )rI   rJ   r   r   r   rK   i  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)rM   rN   r3   _validate_ip_namerL   _permitted_subtrees_excluded_subtrees)r!   permitted_subtreesexcluded_subtreesr   r   r   r   Y  s&    				zNameConstraints.__init__c             C   s5   t  | t  s t S|  j | j k o4 |  j | j k S)N)r   r   rA   r   r   )r!   rB   r   r   r   rC   {  s    zNameConstraints.__eq__c             C   s   |  | k S)Nr   )r!   rB   r   r   r   rD     s    zNameConstraints.__ne__c             C   s)   t  d d   | D  r% t d   d  S)Nc             s   s=   |  ]3 } t  | t  o4 t  | j t j t j f  Vq d  S)N)r   r   r4   	ipaddressZIPv4NetworkZIPv6Network)rI   namer   r   r   rK     s   z4NameConstraints._validate_ip_name.<locals>.<genexpr>zGIPAddress name constraints must be an IPv4Network or IPv6Network object)anyr3   )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   r<     s    zNameConstraints.__repr__r   r   N)r$   r%   r&   r   ZNAME_CONSTRAINTSr    r   rC   rD   r   r<   r   rG   r   r   r   r   r   r   r   U  s   	"		r   c               @   sm   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 S)	Extensionc             C   sU   t  | t  s t d   t  | t  s6 t d   | |  _ | |  _ | |  _ d  S)Nz2oid argument must be an ObjectIdentifier instance.z critical must be a boolean value)r   r   r3   rd   _oid	_critical_value)r!   r    criticalr4   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   r<     s    zExtension.__repr__c             C   sG   t  | t  s t S|  j | j k oF |  j | j k oF |  j | j k S)N)r   r   rA   r    r   r4   )r!   rB   r   r   r   rC     s
    zExtension.__eq__c             C   s   |  | k S)Nr   )r!   rB   r   r   r   rD     s    zExtension.__ne__N)r$   r%   r&   r   r   rG   r    r   r4   r<   rC   rD   r   r   r   r   r     s   
r   c               @   sp   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 S)GeneralNamesc             C   s>   t  |  } t d d   | D  s1 t d   | |  _ d  S)Nc             s   s   |  ] } t  | t  Vq d  S)N)r   r   )rI   rJ   r   r   r   rK     s    z(GeneralNames.__init__.<locals>.<genexpr>z^Every item in the general_names list must be an object conforming to the GeneralName interface)rM   rN   r3   _general_names)r!   general_namesr   r   r   r     s
    	zGeneralNames.__init__c             C   s   t  |  j  S)N)r6   r   )r!   r   r   r   r7     s    zGeneralNames.__iter__c             C   s   t  |  j  S)N)r8   r   )r!   r   r   r   r9     s    zGeneralNames.__len__c                sB     f d d   |  D }   t  k r8 d d   | D } t |  S)Nc             3   s$   |  ] } t  |    r | Vq d  S)N)r   )rI   i)typer   r   rK     s    z3GeneralNames.get_values_for_type.<locals>.<genexpr>c             s   s   |  ] } | j  Vq d  S)N)r4   )rI   r   r   r   r   rK     s    )r   rM   )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({0})>)r/   r   )r!   r   r   r   r<     s    zGeneralNames.__repr__c             C   s#   t  | t  s t S|  j | j k S)N)r   r   rA   r   )r!   rB   r   r   r   rC     s    zGeneralNames.__eq__c             C   s   |  | k S)Nr   )r!   rB   r   r   r   rD     s    zGeneralNames.__ne__c             C   s   |  j  | S)N)r   )r!   r:   r   r   r   r;     s    zGeneralNames.__getitem__N)r$   r%   r&   r   r7   r9   r   r<   rC   rD   r;   r   r   r   r   r     s   
	r   c               @   sy   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)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)r6   r   )r!   r   r   r   r7     s    zSubjectAlternativeName.__iter__c             C   s   t  |  j  S)N)r8   r   )r!   r   r   r   r9     s    zSubjectAlternativeName.__len__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({0})>)r/   r   )r!   r   r   r   r<     s    zSubjectAlternativeName.__repr__c             C   s#   t  | t  s t S|  j | j k S)N)r   r   rA   r   )r!   rB   r   r   r   rC     s    zSubjectAlternativeName.__eq__c             C   s   |  j  | S)N)r   )r!   r:   r   r   r   r;     s    z"SubjectAlternativeName.__getitem__c             C   s   |  | k S)Nr   )r!   rB   r   r   r   rD     s    zSubjectAlternativeName.__ne__N)r$   r%   r&   r   ZSUBJECT_ALTERNATIVE_NAMEr    r   r7   r9   r   r<   rC   r;   rD   r   r   r   r   r     s   	r   c               @   sy   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)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)r6   r   )r!   r   r   r   r7     s    zIssuerAlternativeName.__iter__c             C   s   t  |  j  S)N)r8   r   )r!   r   r   r   r9     s    zIssuerAlternativeName.__len__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({0})>)r/   r   )r!   r   r   r   r<     s    zIssuerAlternativeName.__repr__c             C   s#   t  | t  s t S|  j | j k S)N)r   r   rA   r   )r!   rB   r   r   r   rC     s    zIssuerAlternativeName.__eq__c             C   s   |  | k S)Nr   )r!   rB   r   r   r   rD   !  s    zIssuerAlternativeName.__ne__c             C   s   |  j  | S)N)r   )r!   r:   r   r   r   r;   $  s    z!IssuerAlternativeName.__getitem__N)r$   r%   r&   r   ZISSUER_ALTERNATIVE_NAMEr    r   r7   r9   r   r<   rC   rD   r;   r   r   r   r   r     s   	r   c               @   sy   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)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)r6   r   )r!   r   r   r   r7   /  s    zCertificateIssuer.__iter__c             C   s   t  |  j  S)N)r8   r   )r!   r   r   r   r9   2  s    zCertificateIssuer.__len__c             C   s   |  j  j |  S)N)r   r   )r!   r   r   r   r   r   5  s    z%CertificateIssuer.get_values_for_typec             C   s   d j  |  j  S)Nz<CertificateIssuer({0})>)r/   r   )r!   r   r   r   r<   8  s    zCertificateIssuer.__repr__c             C   s#   t  | t  s t S|  j | j k S)N)r   r   rA   r   )r!   rB   r   r   r   rC   ;  s    zCertificateIssuer.__eq__c             C   s   |  | k S)Nr   )r!   rB   r   r   r   rD   A  s    zCertificateIssuer.__ne__c             C   s   |  j  | S)N)r   )r!   r:   r   r   r   r;   D  s    zCertificateIssuer.__getitem__N)r$   r%   r&   r   ZCERTIFICATE_ISSUERr    r   r7   r9   r   r<   rC   rD   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)	CRLReasonc             C   s(   t  | t  s t d   | |  _ d  S)Nz*reason must be an element from ReasonFlags)r   rl   r3   _reason)r!   reasonr   r   r   r   L  s    zCRLReason.__init__c             C   s   d j  |  j  S)Nz<CRLReason(reason={0})>)r/   r   )r!   r   r   r   r<   R  s    zCRLReason.__repr__c             C   s#   t  | t  s t S|  j | j k S)N)r   r   rA   r   )r!   rB   r   r   r   rC   U  s    zCRLReason.__eq__c             C   s   |  | k S)Nr   )r!   rB   r   r   r   rD   [  s    zCRLReason.__ne__c             C   s   t  |  j  S)N)rE   r   )r!   r   r   r   rF   ^  s    zCRLReason.__hash__r   N)r$   r%   r&   r   Z
CRL_REASONr    r   r<   rC   rD   rF   r   rG   r   r   r   r   r   r   H  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   datetimer3   _invalidity_date)r!   invalidity_dater   r   r   r   h  s    zInvalidityDate.__init__c             C   s   d j  |  j  S)Nz%<InvalidityDate(invalidity_date={0})>)r/   r   )r!   r   r   r   r<   n  s    zInvalidityDate.__repr__c             C   s#   t  | t  s t S|  j | j k S)N)r   r   rA   r   )r!   rB   r   r   r   rC   s  s    zInvalidityDate.__eq__c             C   s   |  | k S)Nr   )r!   rB   r   r   r   rD   y  s    zInvalidityDate.__ne__c             C   s   t  |  j  S)N)rE   r   )r!   r   r   r   rF   |  s    zInvalidityDate.__hash__r   N)r$   r%   r&   r   ZINVALIDITY_DATEr    r   r<   rC   rD   rF   r   rG   r   r   r   r   r   r   d  s   	r   c               @   sj   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)r2   c             C   s1   t  | t  s t d   | |  _ | |  _ d  S)Nzoid must be an ObjectIdentifier)r   r   r3   r   r   )r!   r    r4   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   r<     s    zUnrecognizedExtension.__repr__c             C   s5   t  | t  s t S|  j | j k o4 |  j | j k S)N)r   r2   rA   r    r4   )r!   rB   r   r   r   rC     s    zUnrecognizedExtension.__eq__c             C   s   |  | k S)Nr   )r!   rB   r   r   r   rD     s    zUnrecognizedExtension.__ne__c             C   s   t  |  j |  j f  S)N)rE   r    r4   )r!   r   r   r   rF     s    zUnrecognizedExtension.__hash__N)r$   r%   r&   r   r   rG   r    r4   r<   rC   rD   rF   r   r   r   r   r2     s   r2   )FZ
__future__r   r   r   r*   r   r   r   Zenumr   Zasn1crypto.keysr   r   Zcryptographyr   Zcryptography.hazmat.primitivesr   r	   Z,cryptography.hazmat.primitives.asymmetric.ecr
   Z-cryptography.hazmat.primitives.asymmetric.rsar   Zcryptography.x509.general_namer   r   r   Zcryptography.x509.namer   Zcryptography.x509.oidr   r   r   r   	Exceptionr   r'   r(   Zadd_metaclassABCMetaobjectr)   r,   Zregister_interfacer=   rH   rY   r\   r]   rc   ri   rj   rl   ry   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r2   r   r   r   r   <module>   s   *P#$)%P7#*"!UD$*