a
     `                  
   @   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__ @/usr/lib/python3/dist-packages/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   sf   t |tjr8z|d W q@ ty4   tdY q@0 ntdt|\}}|sT|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"   nameZ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"   classmethodr6   r9   r=   r>   rA   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   sJ   t |tjr8z|d W q@ ty4   tdY q@0 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   r1   r3   r   r   r   r6   p   s    
z DNSName._init_without_validationc                 C   s   d | jS )Nz<DNSName(value={0!r})>r7   r!   r   r   r   r9   v   s    zDNSName.__repr__c                 C   s   t |tstS | j|jkS r   )r(   rE   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   rA      s    zDNSName.__hash__NrB   r   r   r   r   rE   ]   s   

rE   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   sJ   t |tjr8z|d W q@ ty4   tdY q@0 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'   rF   rG   r   r   r   r      s    z"UniformResourceIdentifier.__init__r/   c                 C   s   |  | }||_|S r   r1   r3   r   r   r   r6      s    
z2UniformResourceIdentifier._init_without_validationc                 C   s   d | jS )Nz(<UniformResourceIdentifier(value={0!r})>r7   r!   r   r   r   r9      s    z"UniformResourceIdentifier.__repr__c                 C   s   t |tstS | j|jkS r   )r(   rH   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   rA      s    z"UniformResourceIdentifier.__hash__NrB   r   r   r   r   rH      s   

rH   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/   rG   r   r   r   r      s    
zDirectoryName.__init__r/   c                 C   s   d | jS )Nz<DirectoryName(value={})>r7   r!   r   r   r   r9      s    zDirectoryName.__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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   rA      s    zDirectoryName.__hash__Nr   r   r   r   r   rC   r"   r9   r=   r>   rA   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 )RegisteredIDc                 C   s   t |tstd|| _d S )Nz!value must be an ObjectIdentifier)r(   r   r.   r/   rG   r   r   r   r      s    
zRegisteredID.__init__r/   c                 C   s   d | jS )Nz<RegisteredID(value={})>r7   r!   r   r   r   r9      s    zRegisteredID.__repr__c                 C   s   t |tstS | j|jkS r   )r(   rK   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   rA      s    zRegisteredID.__hash__NrJ   r   r   r   r   rK      s   
rK   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(   	ipaddressZIPv4AddressZIPv6AddressZIPv4NetworkZIPv6Networkr.   r/   rG   r   r   r   r      s    	zIPAddress.__init__r/   c                 C   s   d | jS )Nz<IPAddress(value={})>r7   r!   r   r   r   r9      s    zIPAddress.__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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   rA     s    zIPAddress.__hash__NrJ   r   r   r   r   rL      s   
rL   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__rP   r/   c                 C   s   d | j| jS )Nz#<OtherName(type_id={}, value={!r})>)r8   rQ   r"   r!   r   r   r   r9     s    zOtherName.__repr__c                 C   s&   t |tstS | j|jko$| j|jkS r   )r(   rN   r:   rQ   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   )r@   rQ   r"   r!   r   r   r   rA   %  s    zOtherName.__hash__N)r   r   r   r   r   rC   rQ   r"   r9   r=   r>   rA   r   r   r   r   rN   	  s   	

rN   )Z
__future__r   r   r   r#   rM   Zemail.utilsr   r)   Zcryptographyr   Zcryptography.x509.namer   Zcryptography.x509.oidr   Z_GENERAL_NAMES	Exceptionr   Zadd_metaclassABCMetaobjectr    Zregister_interfacer%   rE   rH   rI   rK   rL   rN   r   r   r   r   <module>   sD   
.((%