o
    )%a                  
   @   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)ObjectIdentifier	otherName
rfc822NamedNSNamex400AddressdirectoryNameediPartyNameuniformResourceIdentifier	iPAddress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&   )	metaclassc                   @   p   e Zd ZdefddZedZedd Z	defdd	Z
d
edefddZd
edefddZdefddZdS )
RFC822Namer(   c                 C   s^   t |trz|d W n ty   tdw tdt|\}}|s&|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strencodeUnicodeEncodeError
ValueError	TypeErrorr   _value)r   r(   nameaddressr    r    r!   r   ,   s   

zRFC822Name.__init__r6   c                 C      |  | }||_|S r   __new__r6   clsr(   instancer    r    r!   _init_without_validationC      
z#RFC822Name._init_without_validationreturnc                 C      d | jS )Nz<RFC822Name(value={0!r})>formatr(   r'   r    r    r!   __repr__I      zRFC822Name.__repr__otherc                 C      t |tstS | j|jkS r   )r0   r-   NotImplementedr(   r   rG   r    r    r!   __eq__L      
zRFC822Name.__eq__c                 C   
   | |k S r   r    rJ   r    r    r!   __ne__R      
zRFC822Name.__ne__c                 C   
   t | jS r   hashr(   r'   r    r    r!   __hash__U   rO   zRFC822Name.__hash__Nr"   r#   r$   r1   r   r   read_only_propertyr(   classmethodr?   rE   objectboolrK   rN   intrS   r    r    r    r!   r-   +   s    

r-   c                   @   sj   e Zd ZdefddZedZedd Z	dd Z
d	ed
efddZd	ed
efddZd
efddZdS )DNSNamer(   c                 C   B   t |trz|d W n ty   tdw 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/   r0   r1   r2   r3   r4   r5   r6   r   r(   r    r    r!   r   Z      

zDNSName.__init__r6   c                 C   r9   r   r:   r<   r    r    r!   r?   k   r@   z DNSName._init_without_validationc                 C   rB   )Nz<DNSName(value={0!r})>rC   r'   r    r    r!   rE   q   rF   zDNSName.__repr__rG   rA   c                 C   rH   r   )r0   rZ   rI   r(   rJ   r    r    r!   rK   t   rL   zDNSName.__eq__c                 C   rM   r   r    rJ   r    r    r!   rN   z   rO   zDNSName.__ne__c                 C   rP   r   rQ   r'   r    r    r!   rS   }   rO   zDNSName.__hash__NrT   r    r    r    r!   rZ   Y   s    

rZ   c                   @   r,   )UniformResourceIdentifierr(   c                 C   r[   )Nr.   zzURI 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^   z"UniformResourceIdentifier.__init__r6   c                 C   r9   r   r:   r<   r    r    r!   r?      r@   z2UniformResourceIdentifier._init_without_validationrA   c                 C   rB   )Nz(<UniformResourceIdentifier(value={0!r})>rC   r'   r    r    r!   rE      rF   z"UniformResourceIdentifier.__repr__rG   c                 C   rH   r   )r0   r_   rI   r(   rJ   r    r    r!   rK      rL   z UniformResourceIdentifier.__eq__c                 C   rM   r   r    rJ   r    r    r!   rN      rO   z UniformResourceIdentifier.__ne__c                 C   rP   r   rQ   r'   r    r    r!   rS      rO   z"UniformResourceIdentifier.__hash__NrT   r    r    r    r!   r_      s    

r_   c                   @   d   e Zd ZdefddZedZdefddZ	de
defd	d
Zde
defddZdefddZdS )DirectoryNamer(   c                 C      t |ts	td|| _d S )Nzvalue must be a Name)r0   r   r5   r6   r]   r    r    r!   r         

zDirectoryName.__init__r6   rA   c                 C   rB   )Nz<DirectoryName(value={})>rC   r'   r    r    r!   rE      rF   zDirectoryName.__repr__rG   c                 C   rH   r   )r0   ra   rI   r(   rJ   r    r    r!   rK      rL   zDirectoryName.__eq__c                 C   rM   r   r    rJ   r    r    r!   rN      rO   zDirectoryName.__ne__c                 C   rP   r   rQ   r'   r    r    r!   rS      rO   zDirectoryName.__hash__N)r"   r#   r$   r   r   r   rU   r(   r1   rE   rW   rX   rK   rN   rY   rS   r    r    r    r!   ra          
ra   c                   @   r`   )RegisteredIDr(   c                 C   rb   )Nz!value must be an ObjectIdentifier)r0   r   r5   r6   r]   r    r    r!   r      rc   zRegisteredID.__init__r6   rA   c                 C   rB   )Nz<RegisteredID(value={})>rC   r'   r    r    r!   rE      rF   zRegisteredID.__repr__rG   c                 C   rH   r   )r0   re   rI   r(   rJ   r    r    r!   rK      rL   zRegisteredID.__eq__c                 C   rM   r   r    rJ   r    r    r!   rN      rO   zRegisteredID.__ne__c                 C   rP   r   rQ   r'   r    r    r!   rS      rO   zRegisteredID.__hash__N)r"   r#   r$   r   r   r   rU   r(   r1   rE   rW   rX   rK   rN   rY   rS   r    r    r    r!   re      rd   re   c                   @   sz   e Zd Zdejejejejej	f fddZ
edZdefddZdedefd	d
ZdedefddZdefddZdS )	IPAddressr(   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)r0   	ipaddressIPv4AddressIPv6AddressIPv4NetworkIPv6Networkr5   r6   r]   r    r    r!   r      s   		
zIPAddress.__init__r6   rA   c                 C   rB   )Nz<IPAddress(value={})>rC   r'   r    r    r!   rE      rF   zIPAddress.__repr__rG   c                 C   rH   r   )r0   rf   rI   r(   rJ   r    r    r!   rK      rL   zIPAddress.__eq__c                 C   rM   r   r    rJ   r    r    r!   rN     rO   zIPAddress.__ne__c                 C   rP   r   rQ   r'   r    r    r!   rS     rO   zIPAddress.__hash__N)r"   r#   r$   typingUnionrg   rh   ri   rj   rk   r   r   rU   r(   r1   rE   rW   rX   rK   rN   rY   rS   r    r    r    r!   rf      s    

rf   c                   @   sr   e Zd ZdedefddZedZedZ	de
fdd	Zd
edefddZd
edefddZdef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)r0   r   r5   bytes_type_idr6   )r   ro   r(   r    r    r!   r   	  s   


zOtherName.__init__rq   r6   rA   c                 C   s   d | j| jS )Nz#<OtherName(type_id={}, value={!r})>)rD   ro   r(   r'   r    r    r!   rE     s   zOtherName.__repr__rG   c                 C   s&   t |tstS | j|jko| j|jkS r   )r0   rn   rI   ro   r(   rJ   r    r    r!   rK     s   
zOtherName.__eq__c                 C   rM   r   r    rJ   r    r    r!   rN      rO   zOtherName.__ne__c                 C   s   t | j| jfS r   )rR   ro   r(   r'   r    r    r!   rS   #  s   zOtherName.__hash__N)r"   r#   r$   r   rp   r   r   rU   ro   r(   r1   rE   rW   rX   rK   rN   rY   rS   r    r    r    r!   rn     s    
	
rn   )r)   rg   rl   email.utilsr   cryptographyr   cryptography.x509.namer   cryptography.x509.oidr   _GENERAL_NAMES	Exceptionr   ABCMetar&   r-   rZ   r_   ra   re   rf   rn   r    r    r    r!   <module>   s4   .((-