o
     `c                      @   s  d dl mZmZm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mZ G dd deZd	d
 eD Ze ZejejejejejejejejejejejejiZejdejdejdejdejdejdej dejdej!di	Z"dd Z#G dd deZ$G dd deZ%G dd deZ&dS )    )absolute_importdivisionprint_function)EnumN)utils)_get_backend)NameOIDObjectIdentifierc                   @   s4   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 )	_ASN1Type                              N)__name__
__module____qualname__
UTF8StringZNumericStringPrintableStringZ	T61String	IA5StringZUTCTimeZGeneralizedTimeZVisibleStringZUniversalStringZ	BMPString r   r   lhome/ych/rk3568/buildroot/output/rockchip_rk3568/host/lib/python3.10/site-packages/cryptography/x509/name.pyr
      s    r
   c                 C   s   i | ]}|j |qS r   )value.0ir   r   r   
<dictcomp>   s    r!   ZCNLZSTOZOUCZSTREETZDCUIDc                 C   s   | sdS |  dd} |  dd} |  dd} |  dd	} |  d
d} |  dd} |  dd} |  dd} | d dv r>d|  } | d dkrL| dd d } | S )z>Escape special characters in RFC4514 Distinguished Name value. \z\\"z\"+z\+,z\,;z\;<z\<>z\> z\00r   )# r0   Nz\ )replace)valr   r   r   _escape_dn_value7   s   r4   c                   @   sT   e Zd ZefddZedZedZdd Z	dd Z
d	d
 Zdd Zdd ZdS )NameAttributec                 C   s   t |ts	tdt |tjstd|tjks|tjkr*t|	ddkr*t
d|tkr5t|tj}t |ts>td|| _|| _|| _d S )Nz2oid argument must be an ObjectIdentifier instance.z#value argument must be a text type.utf8   z/Country name must be a 2 character country codez%_type must be from the _ASN1Type enum)
isinstancer	   	TypeErrorsixZ	text_typer   COUNTRY_NAMEJURISDICTION_COUNTRY_NAMElenencode
ValueError	_SENTINEL_NAMEOID_DEFAULT_TYPEgetr
   r   _oid_value_type)selfoidr   rE   r   r   r   __init__P   s*   



zNameAttribute.__init__rC   rD   c                 C   s$   t | j| jj}d|t| jf S )z
        Format as RFC4514 Distinguished Name string.

        Use short attribute name if available, otherwise fall back to OID
        dotted string.
        z%s=%s)_NAMEOID_TO_NAMErB   rG   Zdotted_stringr4   r   )rF   keyr   r   r   rfc4514_stringu   s   zNameAttribute.rfc4514_stringc                 C   s&   t |tstS | j|jko| j|jkS N)r8   r5   NotImplementedrG   r   rF   otherr   r   r   __eq__   s   
zNameAttribute.__eq__c                 C   
   | |k S rL   r   rN   r   r   r   __ne__      
zNameAttribute.__ne__c                 C   s   t | j| jfS rL   )hashrG   r   rF   r   r   r   __hash__   s   zNameAttribute.__hash__c                 C   s
   d | S )Nz/<NameAttribute(oid={0.oid}, value={0.value!r})>)formatrU   r   r   r   __repr__   rS   zNameAttribute.__repr__N)r   r   r   r@   rH   r   Zread_only_propertyrG   r   rK   rP   rR   rV   rX   r   r   r   r   r5   O   s    
"

r5   c                   @   sT   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d ZdS )RelativeDistinguishedNamec                 C   s\   t |}|s
tdtdd |D std|| _t|| _t| jt|kr,tdd S )Nz-a relative distinguished name cannot be emptyc                 s       | ]}t |tV  qd S rL   r8   r5   r   xr   r   r   	<genexpr>       z5RelativeDistinguishedName.__init__.<locals>.<genexpr>z/attributes must be an iterable of NameAttributez$duplicate attributes are not allowed)listr?   allr9   _attributes	frozenset_attribute_setr=   rF   Z
attributesr   r   r   rH      s   
z"RelativeDistinguishedName.__init__c                        fdd| D S )Nc                       g | ]	}|j  kr|qS r   rG   r   rh   r   r   
<listcomp>       zDRelativeDistinguishedName.get_attributes_for_oid.<locals>.<listcomp>r   rF   rG   r   rh   r   get_attributes_for_oid      z0RelativeDistinguishedName.get_attributes_for_oidc                 C   s   d dd | jD S )z
        Format as RFC4514 Distinguished Name string.

        Within each RDN, attributes are joined by '+', although that is rarely
        used in certificates.
        r)   c                 s       | ]}|  V  qd S rL   rK   r   attrr   r   r   r^          z;RelativeDistinguishedName.rfc4514_string.<locals>.<genexpr>)joinrb   rU   r   r   r   rK      s   z(RelativeDistinguishedName.rfc4514_stringc                 C      t |tstS | j|jkS rL   )r8   rY   rM   rd   rN   r   r   r   rP         
z RelativeDistinguishedName.__eq__c                 C   rQ   rL   r   rN   r   r   r   rR      rS   z RelativeDistinguishedName.__ne__c                 C   
   t | jS rL   )rT   rd   rU   r   r   r   rV      rS   z"RelativeDistinguishedName.__hash__c                 C   rv   rL   )iterrb   rU   r   r   r   __iter__   rS   z"RelativeDistinguishedName.__iter__c                 C   rv   rL   )r=   rb   rU   r   r   r   __len__   rS   z!RelativeDistinguishedName.__len__c                 C   s   d |  S )Nz<RelativeDistinguishedName({})>)rW   rK   rU   r   r   r   rX      s   z"RelativeDistinguishedName.__repr__N)r   r   r   rH   rl   rK   rP   rR   rV   rx   ry   rX   r   r   r   r   rY      s    	rY   c                   @   sj   e Zd Zdd Zdd Zdd Zedd Zdd
dZdd Z	dd Z
dd Zdd Zdd Zdd Zd	S )Namec                 C   sR   t |}tdd |D rdd |D | _d S tdd |D r%|| _d S td)Nc                 s   rZ   rL   r[   r\   r   r   r   r^      r_   z Name.__init__.<locals>.<genexpr>c                 S   s   g | ]}t |gqS r   )rY   r\   r   r   r   ri      s    
z!Name.__init__.<locals>.<listcomp>c                 s   rZ   rL   )r8   rY   r\   r   r   r   r^      r_   zNattributes must be a list of NameAttribute or a list RelativeDistinguishedName)r`   ra   rb   r9   re   r   r   r   rH      s   
zName.__init__c                 C   s   d dd t| jD S )a  
        Format as RFC4514 Distinguished Name string.
        For example 'CN=foobar.com,O=Foo Corp,C=US'

        An X.509 name is a two-level structure: a list of sets of attributes.
        Each list element is separated by ',' and within each list element, set
        elements are separated by '+'. The latter is almost never used in
        real world certificates. According to RFC4514 section 2.1 the
        RDNSequence must be reversed when converting to string representation.
        r*   c                 s   rn   rL   ro   rp   r   r   r   r^      s    
z&Name.rfc4514_string.<locals>.<genexpr>)rs   reversedrb   rU   r   r   r   rK      s   
zName.rfc4514_stringc                    rf   )Nc                    rg   r   rh   r   rh   r   r   ri      rj   z/Name.get_attributes_for_oid.<locals>.<listcomp>r   rk   r   rh   r   rl      rm   zName.get_attributes_for_oidc                 C   s   | j S rL   rb   rU   r   r   r   rdns   s   z	Name.rdnsNc                 C   s   t |}|| S rL   )r   Zx509_name_bytes)rF   backendr   r   r   public_bytes   s   
zName.public_bytesc                 C   rt   rL   )r8   rz   rM   rb   rN   r   r   r   rP      ru   zName.__eq__c                 C   rQ   rL   r   rN   r   r   r   rR      rS   zName.__ne__c                 C   s   t t| jS rL   )rT   tuplerb   rU   r   r   r   rV      s   zName.__hash__c                 c   s"    | j D ]
}|D ]}|V  qqd S rL   r|   )rF   rdnZavar   r   r   rx      s   
zName.__iter__c                 C   s   t dd | jD S )Nc                 s   s    | ]}t |V  qd S rL   )r=   )r   r   r   r   r   r^      rr   zName.__len__.<locals>.<genexpr>)sumrb   rU   r   r   r   ry      s   zName.__len__c                 C   s6   d dd | jD }tjrd|dS d|S )Nr*   c                 s   rn   rL   ro   rp   r   r   r   r^      rr   z Name.__repr__.<locals>.<genexpr>z
<Name({})>r6   )rs   rb   r:   ZPY2rW   r>   )rF   r}   r   r   r   rX      s   
zName.__repr__rL   )r   r   r   rH   rK   rl   propertyr}   r   rP   rR   rV   rx   ry   rX   r   r   r   r   rz      s    

rz   )'
__future__r   r   r   enumr   r:   cryptographyr   Zcryptography.hazmat.backendsr   Zcryptography.x509.oidr   r	   r
   Z_ASN1_TYPE_TO_ENUMobjectr@   r;   r   r<   ZSERIAL_NUMBERZDN_QUALIFIERZEMAIL_ADDRESSr   ZDOMAIN_COMPONENTrA   ZCOMMON_NAMEZLOCALITY_NAMEZSTATE_OR_PROVINCE_NAMEZORGANIZATION_NAMEZORGANIZATIONAL_UNIT_NAMEZSTREET_ADDRESSZUSER_IDrI   r4   r5   rY   rz   r   r   r   r   <module>   s<   @1