B
    `              
   @   s   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mZ d dl	m
Z
 dddd	d
ddddd	ZG dd deZG dd de jdZG dd deZG dd deZG dd deZG dd deZG dd deZG dd  d eZG d!d" d"eZdS )#    N)	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__ M/home/dcms/DCMS/lib/python3.7/site-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   )	metaclassc               @   sl   e Zd ZedddZedZedd Z	eddd	Z
eed
ddZeed
ddZedddZdS )
RFC822Name)r   c             C   sf   t |tr8y|d W q@ tk
r4   tdY q@X 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.zvalue must be stringzInvalid rfc822name value)
isinstancestrencodeUnicodeEncodeError
ValueError	TypeErrorr   _value)r   r   nameaddressr   r   r   r   ,   s    
zRFC822Name.__init__r(   c             C   s   |  | }||_|S )N)__new__r(   )clsr   instancer   r   r   _init_without_validationC   s    
z#RFC822Name._init_without_validation)returnc             C   s   d | jS )Nz<RFC822Name(value={0!r})>)formatr   )r   r   r   r   __repr__I   s    zRFC822Name.__repr__)otherr/   c             C   s   t |tstS | j|jkS )N)r"   r    NotImplementedr   )r   r2   r   r   r   __eq__L   s    
zRFC822Name.__eq__c             C   s
   | |k S )Nr   )r   r2   r   r   r   __ne__R   s    zRFC822Name.__ne__c             C   s
   t | jS )N)hashr   )r   r   r   r   __hash__U   s    zRFC822Name.__hash__N)r   r   r   r#   r   r   read_only_propertyr   classmethodr.   r1   objectboolr4   r5   intr7   r   r   r   r   r    +   s   
r    c               @   sf   e Zd ZedddZedZedd Z	dd Z
eed	d
dZeed	ddZedddZdS )DNSName)r   c             C   sJ   t |tr8y|d W q@ tk
r4   tdY q@X 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.zvalue must be string)r"   r#   r$   r%   r&   r'   r(   )r   r   r   r   r   r   Z   s    
zDNSName.__init__r(   c             C   s   |  | }||_|S )N)r+   r(   )r,   r   r-   r   r   r   r.   k   s    
z DNSName._init_without_validationc             C   s   d | jS )Nz<DNSName(value={0!r})>)r0   r   )r   r   r   r   r1   q   s    zDNSName.__repr__)r2   r/   c             C   s   t |tstS | j|jkS )N)r"   r=   r3   r   )r   r2   r   r   r   r4   t   s    
zDNSName.__eq__c             C   s
   | |k S )Nr   )r   r2   r   r   r   r5   z   s    zDNSName.__ne__)r/   c             C   s
   t | jS )N)r6   r   )r   r   r   r   r7   }   s    zDNSName.__hash__N)r   r   r   r#   r   r   r8   r   r9   r.   r1   r:   r;   r4   r5   r<   r7   r   r   r   r   r=   Y   s   
r=   c               @   sl   e Zd ZedddZedZedd Z	eddd	Z
eed
ddZeed
ddZedddZdS )UniformResourceIdentifier)r   c             C   sJ   t |tr8y|d W q@ tk
r4   tdY q@X 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.zvalue must be string)r"   r#   r$   r%   r&   r'   r(   )r   r   r   r   r   r      s    
z"UniformResourceIdentifier.__init__r(   c             C   s   |  | }||_|S )N)r+   r(   )r,   r   r-   r   r   r   r.      s    
z2UniformResourceIdentifier._init_without_validation)r/   c             C   s   d | jS )Nz(<UniformResourceIdentifier(value={0!r})>)r0   r   )r   r   r   r   r1      s    z"UniformResourceIdentifier.__repr__)r2   r/   c             C   s   t |tstS | j|jkS )N)r"   r>   r3   r   )r   r2   r   r   r   r4      s    
z UniformResourceIdentifier.__eq__c             C   s
   | |k S )Nr   )r   r2   r   r   r   r5      s    z UniformResourceIdentifier.__ne__c             C   s
   t | jS )N)r6   r   )r   r   r   r   r7      s    z"UniformResourceIdentifier.__hash__N)r   r   r   r#   r   r   r8   r   r9   r.   r1   r:   r;   r4   r5   r<   r7   r   r   r   r   r>      s   
r>   c               @   s`   e Zd ZedddZedZedddZ	e
edd	d
Ze
edddZedddZdS )DirectoryName)r   c             C   s   t |tstd|| _d S )Nzvalue must be a Name)r"   r   r'   r(   )r   r   r   r   r   r      s    
zDirectoryName.__init__r(   )r/   c             C   s   d | jS )Nz<DirectoryName(value={})>)r0   r   )r   r   r   r   r1      s    zDirectoryName.__repr__)r2   r/   c             C   s   t |tstS | j|jkS )N)r"   r?   r3   r   )r   r2   r   r   r   r4      s    
zDirectoryName.__eq__c             C   s
   | |k S )Nr   )r   r2   r   r   r   r5      s    zDirectoryName.__ne__c             C   s
   t | jS )N)r6   r   )r   r   r   r   r7      s    zDirectoryName.__hash__N)r   r   r   r   r   r   r8   r   r#   r1   r:   r;   r4   r5   r<   r7   r   r   r   r   r?      s   
r?   c               @   s`   e Zd ZedddZedZedddZ	e
edd	d
Ze
edddZedddZdS )RegisteredID)r   c             C   s   t |tstd|| _d S )Nz!value must be an ObjectIdentifier)r"   r   r'   r(   )r   r   r   r   r   r      s    
zRegisteredID.__init__r(   )r/   c             C   s   d | jS )Nz<RegisteredID(value={})>)r0   r   )r   r   r   r   r1      s    zRegisteredID.__repr__)r2   r/   c             C   s   t |tstS | j|jkS )N)r"   r@   r3   r   )r   r2   r   r   r   r4      s    
zRegisteredID.__eq__c             C   s
   | |k S )Nr   )r   r2   r   r   r   r5      s    zRegisteredID.__ne__c             C   s
   t | jS )N)r6   r   )r   r   r   r   r7      s    zRegisteredID.__hash__N)r   r   r   r   r   r   r8   r   r#   r1   r:   r;   r4   r5   r<   r7   r   r   r   r   r@      s   
r@   c               @   sv   e Zd Zejejejejej	f dddZ
edZedddZeedd	d
ZeedddZedddZdS )	IPAddress)r   c             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(   )r   r   r   r   r   r      s    	
zIPAddress.__init__r(   )r/   c             C   s   d | jS )Nz<IPAddress(value={})>)r0   r   )r   r   r   r   r1      s    zIPAddress.__repr__)r2   r/   c             C   s   t |tstS | j|jkS )N)r"   rA   r3   r   )r   r2   r   r   r   r4      s    
zIPAddress.__eq__c             C   s
   | |k S )Nr   )r   r2   r   r   r   r5     s    zIPAddress.__ne__c             C   s
   t | jS )N)r6   r   )r   r   r   r   r7     s    zIPAddress.__hash__N)r   r   r   typingUnionrB   rC   rD   rE   rF   r   r   r8   r   r#   r1   r:   r;   r4   r5   r<   r7   r   r   r   r   rA      s   
rA   c               @   sl   e Zd ZeedddZedZedZ	e
dddZeed	d
dZeed	ddZedddZdS )	OtherName)type_idr   c             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   rJ   r   r   r   r   r   	  s    

zOtherName.__init__rL   r(   )r/   c             C   s   d | j| jS )Nz#<OtherName(type_id={}, value={!r})>)r0   rJ   r   )r   r   r   r   r1     s    zOtherName.__repr__)r2   r/   c             C   s&   t |tstS | j|jko$| j|jkS )N)r"   rI   r3   rJ   r   )r   r2   r   r   r   r4     s    
zOtherName.__eq__c             C   s
   | |k S )Nr   )r   r2   r   r   r   r5      s    zOtherName.__ne__c             C   s   t | j| jfS )N)r6   rJ   r   )r   r   r   r   r7   #  s    zOtherName.__hash__N)r   r   r   r   rK   r   r   r8   rJ   r   r#   r1   r:   r;   r4   r5   r<   r7   r   r   r   r   rI     s   	

rI   )r   rB   rG   email.utilsr   Zcryptographyr   Zcryptography.x509.namer   Zcryptography.x509.oidr   Z_GENERAL_NAMES	Exceptionr   ABCMetar   r    r=   r>   r?   r@   rA   rI   r   r   r   r   <module>   s0   .((-