U
    *}f                  
   @   sZ  d dl mZmZm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 d dlmZ ddd	d
dddddd	ZG dd deZeejG dd deZe
eG dd deZe
eG dd deZe
eG dd deZe
eG dd deZe
eG dd deZe
eG dd  d eZe
eG d!d" d"eZdS )#    )absolute_importdivisionprint_functionN)	parseaddr)utils)Name)ObjectIdentifierZ	otherNameZ
rfc822NameZdNSNameZx400AddressZdirectoryNameZediPartyNameZuniformResourceIdentifierZ	iPAddressZregisteredID)	r                           c                       s   e Zd Z fddZ  ZS )UnsupportedGeneralNameTypec                    s   t t| | || _d S N)superr   __init__type)selfmsgr   	__class__ B/tmp/pip-unpacked-wheel-x36vw73o/cryptography/x509/general_name.pyr       s    z#UnsupportedGeneralNameType.__init__)__name__
__module____qualname__r   __classcell__r   r   r   r   r      s   r   c                   @   s   e Zd Zejdd ZdS )GeneralNamec                 C   s   dS )z0
        Return the value of the object
        Nr   r   r   r   r   value'   s    zGeneralName.valueN)r   r   r   abcabstractpropertyr"   r   r   r   r   r    %   s   r    c                   @   sJ   e Zd Zdd ZedZedd Zdd Z	dd	 Z
d
d Zdd ZdS )
RFC822Namec                 C   sh   t |tjr:z|d W qB tk
r6   tdY qBX ntdt|\}}|sV|s^td|| _d S )NasciizRFC822Name values should be passed as an A-label string. This means unicode characters should be encoded via a library like idna.value must be stringzInvalid rfc822name value)	
isinstancesix	text_typeencodeUnicodeEncodeError
ValueError	TypeErrorr   _value)r   r"   nameaddressr   r   r   r   0   s    zRFC822Name.__init__r/   c                 C   s   |  | }||_|S r   __new__r/   clsr"   instancer   r   r   _init_without_validationG   s    
z#RFC822Name._init_without_validationc                 C   s   d | jS )Nz<RFC822Name(value={0!r})>formatr"   r!   r   r   r   __repr__M   s    zRFC822Name.__repr__c                 C   s   t |tstS | j|jkS r   )r(   r%   NotImplementedr"   r   otherr   r   r   __eq__P   s    
zRFC822Name.__eq__c                 C   s
   | |k S r   r   r<   r   r   r   __ne__V   s    zRFC822Name.__ne__c                 C   s
   t | jS r   hashr"   r!   r   r   r   __hash__Y   s    zRFC822Name.__hash__Nr   r   r   r   r   read_only_propertyr"   classmethodr7   r:   r>   r?   rB   r   r   r   r   r%   .   s   

r%   c                   @   sJ   e Zd Zdd ZedZedd Zdd Z	dd	 Z
d
d Zdd ZdS )DNSNamec                 C   sL   t |tjr:z|d W qB tk
r6   tdY qBX ntd|| _d S )Nr&   z~DNSName values should be passed as an A-label string. This means unicode characters should be encoded via a library like idna.r'   r(   r)   r*   r+   r,   r-   r.   r/   r   r"   r   r   r   r   _   s    zDNSName.__init__r/   c                 C   s   |  | }||_|S r   r2   r4   r   r   r   r7   p   s    
z DNSName._init_without_validationc                 C   s   d | jS )Nz<DNSName(value={0!r})>r8   r!   r   r   r   r:   v   s    zDNSName.__repr__c                 C   s   t |tstS | j|jkS r   )r(   rF   r;   r"   r<   r   r   r   r>   y   s    
zDNSName.__eq__c                 C   s
   | |k S r   r   r<   r   r   r   r?      s    zDNSName.__ne__c                 C   s
   t | jS r   r@   r!   r   r   r   rB      s    zDNSName.__hash__NrC   r   r   r   r   rF   ]   s   

rF   c                   @   sJ   e Zd Zdd ZedZedd Zdd Z	dd	 Z
d
d Zdd ZdS )UniformResourceIdentifierc                 C   sL   t |tjr:z|d W qB tk
r6   tdY qBX ntd|| _d S )Nr&   zzURI values should be passed as an A-label string. This means unicode characters should be encoded via a library like idna.r'   rG   rH   r   r   r   r      s    z"UniformResourceIdentifier.__init__r/   c                 C   s   |  | }||_|S r   r2   r4   r   r   r   r7      s    
z2UniformResourceIdentifier._init_without_validationc                 C   s   d | jS )Nz(<UniformResourceIdentifier(value={0!r})>r8   r!   r   r   r   r:      s    z"UniformResourceIdentifier.__repr__c                 C   s   t |tstS | j|jkS r   )r(   rI   r;   r"   r<   r   r   r   r>      s    
z UniformResourceIdentifier.__eq__c                 C   s
   | |k S r   r   r<   r   r   r   r?      s    z UniformResourceIdentifier.__ne__c                 C   s
   t | jS r   r@   r!   r   r   r   rB      s    z"UniformResourceIdentifier.__hash__NrC   r   r   r   r   rI      s   

rI   c                   @   s>   e Zd Zdd ZedZdd Zdd Zdd	 Z	d
d Z
dS )DirectoryNamec                 C   s   t |tstd|| _d S )Nzvalue must be a Name)r(   r   r.   r/   rH   r   r   r   r      s    
zDirectoryName.__init__r/   c                 C   s   d | jS )Nz<DirectoryName(value={})>r8   r!   r   r   r   r:      s    zDirectoryName.__repr__c                 C   s   t |tstS | j|jkS r   )r(   rJ   r;   r"   r<   r   r   r   r>      s    
zDirectoryName.__eq__c                 C   s
   | |k S r   r   r<   r   r   r   r?      s    zDirectoryName.__ne__c                 C   s
   t | jS r   r@   r!   r   r   r   rB      s    zDirectoryName.__hash__Nr   r   r   r   r   rD   r"   r:   r>   r?   rB   r   r   r   r   rJ      s   
rJ   c                   @   s>   e Zd Zdd ZedZdd Zdd Zdd	 Z	d
d Z
dS )RegisteredIDc                 C   s   t |tstd|| _d S )Nz!value must be an ObjectIdentifier)r(   r   r.   r/   rH   r   r   r   r      s    
zRegisteredID.__init__r/   c                 C   s   d | jS )Nz<RegisteredID(value={})>r8   r!   r   r   r   r:      s    zRegisteredID.__repr__c                 C   s   t |tstS | j|jkS r   )r(   rL   r;   r"   r<   r   r   r   r>      s    
zRegisteredID.__eq__c                 C   s
   | |k S r   r   r<   r   r   r   r?      s    zRegisteredID.__ne__c                 C   s
   t | jS r   r@   r!   r   r   r   rB      s    zRegisteredID.__hash__NrK   r   r   r   r   rL      s   
rL   c                   @   s>   e Zd Zdd ZedZdd Zdd Zdd	 Z	d
d Z
dS )	IPAddressc                 C   s,   t |tjtjtjtjfs"td|| _d S )Nzzvalue must be an instance of ipaddress.IPv4Address, ipaddress.IPv6Address, ipaddress.IPv4Network, or ipaddress.IPv6Network)r(   	ipaddressIPv4AddressIPv6AddressIPv4NetworkIPv6Networkr.   r/   rH   r   r   r   r      s    	zIPAddress.__init__r/   c                 C   s   d | jS )Nz<IPAddress(value={})>r8   r!   r   r   r   r:      s    zIPAddress.__repr__c                 C   s   t |tstS | j|jkS r   )r(   rM   r;   r"   r<   r   r   r   r>      s    
zIPAddress.__eq__c                 C   s
   | |k S r   r   r<   r   r   r   r?     s    zIPAddress.__ne__c                 C   s
   t | jS r   r@   r!   r   r   r   rB     s    zIPAddress.__hash__NrK   r   r   r   r   rM      s   
rM   c                   @   sH   e Zd Zdd ZedZedZdd Zdd Z	d	d
 Z
dd ZdS )	OtherNamec                 C   s4   t |tstdt |ts$td|| _|| _d S )Nz#type_id must be an ObjectIdentifierzvalue must be a binary string)r(   r   r.   bytes_type_idr/   )r   type_idr"   r   r   r   r     s    

zOtherName.__init__rU   r/   c                 C   s   d | j| jS )Nz#<OtherName(type_id={}, value={!r})>)r9   rV   r"   r!   r   r   r   r:     s     zOtherName.__repr__c                 C   s&   t |tstS | j|jko$| j|jkS r   )r(   rS   r;   rV   r"   r<   r   r   r   r>     s    
zOtherName.__eq__c                 C   s
   | |k S r   r   r<   r   r   r   r?   "  s    zOtherName.__ne__c                 C   s   t | j| jfS r   )rA   rV   r"   r!   r   r   r   rB   %  s    zOtherName.__hash__N)r   r   r   r   r   rD   rV   r"   r:   r>   r?   rB   r   r   r   r   rS   	  s   	

rS   )
__future__r   r   r   r#   rN   email.utilsr   r)   Zcryptographyr   Zcryptography.x509.namer   Zcryptography.x509.oidr   Z_GENERAL_NAMES	Exceptionr   add_metaclassABCMetaobjectr    Zregister_interfacer%   rF   rI   rJ   rL   rM   rS   r   r   r   r   <module>   sD   
.((%