
    .Ph;                    V   U d dl mZ d dlZd dlZd dlZd dlZd dlZd dlmZm	Z	 d dl
mZ d dlmZ d dlmZmZ  G d dej                  Zd	 eD             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d
ed<   ej        ee f         Z!ej        e ef         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ed<   d e*+                                D             Z,ej        dej        dej#        diZ-d+dZ.d,dZ/ ej0        d ej1        e e2f         e e2d!"          Z3 G d# d$ej4        e3                   Z5 G d% d&          Z6 G d' d(          Z7 G d) d*          Z8dS )-    )annotationsN)IterableIterator)utils)x509)NameOIDObjectIdentifierc                  >    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ZdZdS )	_ASN1Type                                    N)__name__
__module____qualname__	BitStringOctetString
UTF8StringNumericStringPrintableString	T61String	IA5StringUTCTimeGeneralizedTimeVisibleStringUniversalString	BMPString     V/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/cryptography/x509/name.pyr   r      sJ        IKJMOIIGOMOIIIr(   r   c                    i | ]
}|j         |S r'   )value).0is     r)   
<dictcomp>r.   "   s    444Qagq444r(   z!dict[ObjectIdentifier, _ASN1Type]_NAMEOID_DEFAULT_TYPECNLSTOOUCSTREETDCUID_OidNameMap_NAMEOID_TO_NAMEc                    i | ]\  }}||	S r'   r'   )r,   kvs      r)   r.   r.   =   s    >>>TQAq>>>r(   )   r>   )   @   valstr | bytesreturnstrc                <   | sdS t          | t                    r*dt          j        |                               d          z   S |                     dd          } |                     dd          } |                     dd	          } |                     d
d          } |                     dd          } |                     dd          } |                     dd          } |                     dd          } | d         dv rd| z   } | d         dk    r| dd         dz   } | S )z>Escape special characters in RFC4514 Distinguished Name value. #utf8\z\\"z\"+z\+,z\,;z\;<z\<>z\> z\00r   )rG    rQ   Nz\ )
isinstancebytesbinasciihexlifydecodereplace)rA   s    r)   _escape_dn_valuerY   F   s     r #u :X%c**11&9999 ++dF
#
#C
++c5
!
!C
++c5
!
!C
++c5
!
!C
++c5
!
!C
++c5
!
!C
++c5
!
!C
++dF
#
#C
1vSj
2w#~~#2#hJr(   c                P    | sdS d }t           j                            ||           S )NrF   c                    |                      d          }t          |          dk    r|S t          t          |d                    S )Nr?      )grouplenchrint)mrA   s     r)   subz_unescape_dn_value.<locals>.subk   s;    ggajjs88q==J3sB<<   r(   )_RFC4514NameParser_PAIR_RErb   )rA   rb   s     r)   _unescape_dn_valuere   c   s9     r! ! ! &**3444r(   NameAttributeValueTypeT)	covariantc                      e Zd Z	 dddddZedd            Zedd            Zed d            Z	 dd!dZd"dZ	d#dZ
d dZdS )$NameAttributeNT)	_validateoidr	   r+   rf   _type_ASN1Type | Nonerj   boolrC   Nonec               2   t          |t                    st          d          |t          j        k    rD|t
          j        k    rt          d          t          |t                    st          d          n$t          |t                    st          d          t          
                    |          }|~|\  }}t          |t                    sJ t          |                    d                    }||k     s||k    r4d| d| d| }	|d	u rt          |	          t          j        |	d
           |%t           
                    |t          j                  }t          |t                    st          d          || _        || _        || _        d S )Nz2oid argument must be an ObjectIdentifier instance.z6oid must be X500_UNIQUE_IDENTIFIER for BitString type.z!value must be bytes for BitStringzvalue argument must be a strrH   zAttribute's length must be >= z and <= z, but it was Tr>   )
stacklevelz%_type must be from the _ASN1Type enum)rS   r	   	TypeErrorr   r   r   X500_UNIQUE_IDENTIFIERrT   rD   _NAMEOID_LENGTH_LIMITgetr^   encode
ValueErrorwarningswarnr/   r   _oid_valuerl   )
selfrk   r+   rl   rj   length_limits
min_length
max_lengthc_lenmsgs
             r)   __init__zNameAttribute.__init__   s    #/00 	D   I'''g444L   eU++ E CDDDE eS)) @ >???-11#66$%2"J
eS)))))V,,--Ez!!UZ%7%7;Z ; ;$; ;38; ;  $$$S//)M#!4444 =)--c93GHHE%++ 	ECDDD	.3 %


r(   c                    | j         S N)rz   r|   s    r)   rk   zNameAttribute.oid   s
    yr(   c                    | j         S r   )r{   r   s    r)   r+   zNameAttribute.value   s
    {r(   rD   c                V    t                               | j        | j        j                  S )zt
        The short attribute name (for example "CN") if available,
        otherwise the OID dotted string.
        )r:   ru   rk   dotted_stringr   s    r)   rfc4514_attribute_namez$NameAttribute.rfc4514_attribute_name   s!      ##DHdh.DEEEr(   attr_name_overrides_OidNameMap | Nonec                    |r|                     | j                  nd}|| j        }| dt          | j                   S )z
        Format as RFC4514 Distinguished Name string.

        Use short attribute name if available, otherwise fall back to OID
        dotted string.
        N=)ru   rk   r   rY   r+   )r|   r   	attr_names      r)   rfc4514_stringzNameAttribute.rfc4514_string   sW     2EN##DH---$ 	 3I<<.tz::<<<r(   otherobjectc                z    t          |t                    st          S | j        |j        k    o| j        |j        k    S r   )rS   ri   NotImplementedrk   r+   r|   r   s     r)   __eq__zNameAttribute.__eq__   s7    %// 	"!!x59$Bu{)BBr(   r`   c                8    t          | j        | j        f          S r   )hashrk   r+   r   s    r)   __hash__zNameAttribute.__hash__   s    TXtz*+++r(   c                (    d| j          d| j        dS )Nz<NameAttribute(oid=z, value=)>)rk   r+   r   s    r)   __repr__zNameAttribute.__repr__   s    GTXGGtzGGGGr(   r   )
rk   r	   r+   rf   rl   rm   rj   rn   rC   ro   )rC   r	   )rC   rf   rC   rD   r   r   rC   rD   r   r   rC   rn   rC   r`   )r   r   r   r   propertyrk   r+   r   r   r   r   r   r'   r(   r)   ri   ri      s
       
 #'	4& 4& 4& 4& 4& 4& 4&l    X    X F F F XF 9== = = = ="C C C C, , , ,H H H H H Hr(   ri   c                  R    e Zd ZddZddZ	 dddZddZddZddZddZ	ddZ
d	S ) RelativeDistinguishedName
attributesIterable[NameAttribute]c                4   t          |          }|st          d          t          d |D                       st          d          || _        t          |          | _        t          | j                  t          |          k    rt          d          d S )Nz-a relative distinguished name cannot be emptyc              3  @   K   | ]}t          |t                    V  d S r   rS   ri   r,   xs     r)   	<genexpr>z5RelativeDistinguishedName.__init__.<locals>.<genexpr>   s,      DDA:a//DDDDDDr(   z/attributes must be an iterable of NameAttributez$duplicate attributes are not allowed)listrw   allrr   _attributes	frozenset_attribute_setr^   r|   r   s     r)   r   z"RelativeDistinguishedName.__init__   s    *%%
 	NLMMMDDDDDDD 	OMNNN &'
33t"##s:66CDDD 76r(   rk   r	   rC    list[NameAttribute[str | bytes]]c                     fd| D             S )Nc                *    g | ]}|j         k    |S r'   rk   r,   r-   rk   s     r)   
<listcomp>zDRelativeDistinguishedName.get_attributes_for_oid.<locals>.<listcomp>        000a15C<<<<<r(   r'   r|   rk   s    `r)   get_attributes_for_oidz0RelativeDistinguishedName.get_attributes_for_oid        100040000r(   Nr   r   rD   c                P    d                     f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.
        rK   c              3  B   K   | ]}|                               V  d S r   r   r,   attrr   s     r)   r   z;RelativeDistinguishedName.rfc4514_string.<locals>.<genexpr>  F       
 
  344
 
 
 
 
 
r(   joinr   r|   r   s    `r)   r   z(RelativeDistinguishedName.rfc4514_string   sD     xx 
 
 
 
(
 
 
 
 
 	
r(   r   r   rn   c                Z    t          |t                    st          S | j        |j        k    S r   )rS   r   r   r   r   s     r)   r   z RelativeDistinguishedName.__eq__  s,    %!:;; 	"!!"e&:::r(   r`   c                *    t          | j                  S r   )r   r   r   s    r)   r   z"RelativeDistinguishedName.__hash__  s    D'(((r(   Iterator[NameAttribute]c                *    t          | j                  S r   )iterr   r   s    r)   __iter__z"RelativeDistinguishedName.__iter__  s    D$%%%r(   c                *    t          | j                  S r   )r^   r   r   s    r)   __len__z!RelativeDistinguishedName.__len__  s    4#$$$r(   c                2    d|                                   dS )Nz<RelativeDistinguishedName(r   r   r   s    r)   r   z"RelativeDistinguishedName.__repr__  s    FT-@-@-B-BFFFFr(   )r   r   rk   r	   rC   r   r   r   r   r   rC   r   r   )r   r   r   r   r   r   r   r   r   r   r   r'   r(   r)   r   r      s        E E E E1 1 1 1 9=
 
 
 
 
; ; ; ;) ) ) )& & & &% % % %G G G G G Gr(   r   c                      e Zd Zej        d&d            Zej        d'd            Zd(d	Ze	 d)d*d            Z	 d)d+dZd,dZ	e
d-d            Zd)d.dZd/dZd0d!Zd1d#Zd0d$Zd2d%Zd
S )3Namer   r   rC   ro   c                    d S r   r'   r   s     r)   r   zName.__init__  s    EHSr(   #Iterable[RelativeDistinguishedName]c                    d S r   r'   r   s     r)   r   zName.__init__  s	     sr(   3Iterable[NameAttribute | RelativeDistinguishedName]c                *   t          |          }t          d |D                       rd |D             | _        d S t          d |D                       r1t          j        t          j        t                   |          | _        d S t          d          )Nc              3  @   K   | ]}t          |t                    V  d S r   r   r   s     r)   r   z Name.__init__.<locals>.<genexpr>(  s,      @@z!]++@@@@@@r(   c                ^    g | ]*}t          t          j        t          |          g          +S r'   )r   typingcastri   r   s     r)   r   z!Name.__init__.<locals>.<listcomp>)  s?           *6;}a+H+H*IJJ     r(   c              3  @   K   | ]}t          |t                    V  d S r   )rS   r   r   s     r)   r   z Name.__init__.<locals>.<genexpr>-  s-      NNaA899NNNNNNr(   zNattributes must be a list of NameAttribute or a list RelativeDistinguishedName)r   r   r   r   r   Listr   rr   r   s     r)   r   zName.__init__#  s     *%%
@@Z@@@@@ 	   #     D NN:NNNNN 	%{56
   D 7  r(   NdatarD   r   _NameOidMap | Nonec                J    t          ||pi                                           S r   )rc   parse)clsr   r   s      r)   from_rfc4514_stringzName.from_rfc4514_string7  s&     "$(;(ArBBHHJJJr(   r   c                j    d                     f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.
        rL   c              3  B   K   | ]}|                               V  d S r   r   r   s     r)   r   z&Name.rfc4514_string.<locals>.<genexpr>L  r   r(   )r   reversedr   r   s    `r)   r   zName.rfc4514_string?  sL     xx 
 
 
 
 !122
 
 
 
 
 	
r(   rk   r	   r   c                     fd| D             S )Nc                *    g | ]}|j         k    |S r'   r   r   s     r)   r   z/Name.get_attributes_for_oid.<locals>.<listcomp>U  r   r(   r'   r   s    `r)   r   zName.get_attributes_for_oidQ  r   r(   list[RelativeDistinguishedName]c                    | j         S r   r   r   s    r)   rdnsz	Name.rdnsW  s    r(   backend
typing.AnyrT   c                *    t          j        |           S r   )	rust_x509encode_name_bytes)r|   r   s     r)   public_byteszName.public_bytes[  s    *4000r(   r   r   rn   c                Z    t          |t                    st          S | j        |j        k    S r   )rS   r   r   r   r   s     r)   r   zName.__eq__^  s+    %&& 	"!!5#444r(   r`   c                D    t          t          | j                            S r   )r   tupler   r   s    r)   r   zName.__hash__d  s     E$*++,,,r(   r   c              #  .   K   | j         D ]
}|E d {V  d S r   r   )r|   rdns     r)   r   zName.__iter__i  s5      # 	 	CNNNNNNNN	 	r(   c                >    t          d | j        D                       S )Nc              3  4   K   | ]}t          |          V  d S r   )r^   )r,   r   s     r)   r   zName.__len__.<locals>.<genexpr>n  s(      883s88888888r(   )sumr   r   s    r)   r   zName.__len__m  s"    88t'7888888r(   c                V    d                     d | j        D                       }d| dS )NrL   c              3  >   K   | ]}|                                 V  d S r   r   )r,   r   s     r)   r   z Name.__repr__.<locals>.<genexpr>q  s.      KK$++--KKKKKKr(   z<Name(r   r   r|   r   s     r)   r   zName.__repr__p  s6    xxKK$:JKKKKK     r(   )r   r   rC   ro   )r   r   rC   ro   )r   r   rC   ro   r   )r   rD   r   r   rC   r   r   r   )rC   r   )r   r   rC   rT   r   r   r   r   )r   r   r   r   overloadr   classmethodr   r   r   r   r   r   r   r   r   r   r   r'   r(   r)   r   r     s^       _HHH _H_   _   (  37K K K K [K 9=
 
 
 
 
$1 1 1 1       X 1 1 1 1 15 5 5 5- - - -
   9 9 9 9! ! ! ! ! !r(   r   c                     e Zd Z ej        d          Z ej        d          ZdZ ej        e          ZdZ	dZ
dZd eej                   dZe	 d	e Ze
 d	e Ze d	e Z ej        d
e d	e de d	e de d	e dej                  Z ej        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 ),rc   z!(0|([1-9]\d*))(\.(0|([1-9]\d*)))+z[a-zA-Z][a-zA-Z\d-]*z!\\([\\ #=\"\+,;<>]|[\da-zA-Z]{2})z7[\x01-\x1f\x21\x24-\x2A\x2D-\x3A\x3D\x3F-\x5B\x5D-\x7F]z3[\x01-\x21\x23-\x2A\x2D-\x3A\x3D\x3F-\x5B\x5D-\x7F]z7[\x01-\x1F\x21\x23-\x2A\x2D-\x3A\x3D\x3F-\x5B\x5D-\x7F]z[\x80-]|z
        (
            (z!)
            (
                (z)*
                (z$)
            )?
        )?
        z#([\da-zA-Z]{2})+r   rD   r   _NameOidMaprC   ro   c                0    || _         d| _        || _        d S )Nr   )_data_idx_attr_name_overrides)r|   r   r   s      r)   r   z_RFC4514NameParser.__init__  s    
	$7!!!r(   rn   c                <    | j         t          | j                  k     S r   )r  r^   r  r   s    r)   	_has_dataz_RFC4514NameParser._has_data  s    y3tz??**r(   
str | Nonec                R    |                                  r| j        | j                 S d S r   )r  r  r  r   s    r)   _peekz_RFC4514NameParser._peek  s(    >> 	):di((tr(   chc                d    |                                  |k    rt          | xj        dz  c_        d S )Nr?   )r
  rw   r  )r|   r  s     r)   
_read_charz_RFC4514NameParser._read_char  s.    ::<<2		Q				r(   c                    |                     | j        | j                  }|t          |                                }| xj        t          |          z  c_        |S )N)pos)matchr  r  rw   r]   r^   )r|   patr  rA   s       r)   _read_rez_RFC4514NameParser._read_re  sN    		$*$)	44=kkmm		SXX		
r(   r   c                r   |                                  st          g           S |                                 g}|                                  rP|                     d           |                    |                                            |                                  Pt          t          |                    S )a'  
        Parses the `data` string and converts it to a Name.

        According to RFC4514 section 2.1 the RDNSequence must be
        reversed when converting to string representation. So, when
        we parse it, we need to reverse again to get the RDNs on the
        correct order.
        rL   )r  r   
_parse_rdnr  appendr   r   s     r)   r   z_RFC4514NameParser.parse  s     ~~ 	88O!!"nn 	+OOC   KK))*** nn 	+ HTNN###r(   r   c                "   |                                  g}|                                 dk    rT|                     d           |                    |                                             |                                 dk    Tt	          |          S )NrK   )	_parse_nar
  r  r  r   )r|   nass     r)   r  z_RFC4514NameParser._parse_rdn  sz    ~~ jjllc!!OOC   JJt~~''((( jjllc!! )---r(   ri   c                   	 |                      | j                  }t          |          }nf# t          $ rY |                      | j                  }| j                            |t                              |                    }|t          Y nw xY w|                     d           | 	                                dk    rI|                      | j
                  }t          j        |dd                                                    }n)|                      | j                  }t          |          }t!          ||          S )Nr   rG   r?   )r  _OID_REr	   rw   	_DESCR_REr  ru   _NAME_TO_NAMEOIDr  r
  _HEXSTRING_RErU   	unhexlifyrW   
_STRING_REre   ri   )r|   	oid_valuerk   namer+   	raw_values         r)   r  z_RFC4514NameParser._parse_na  s,   
	.dl33I #9--CC  	! 	! 	!==00D+//&**400 C {   {	! 	::<<3MM$"455E&uQRRy1188::EEdo66I&y11ES%(((s   , A BBN)r   rD   r   r  rC   ro   )rC   rn   )rC   r  )r  rD   rC   ro   r   )rC   r   )rC   r   )rC   ri   )r   r   r   recompiler  r  _PAIRrd   _LUTF1_SUTF1_TUTF1r_   sys
maxunicode_UTFMB	_LEADCHAR_STRINGCHAR
_TRAILCHARVERBOSEr  r  r   r  r
  r  r  r   r  r  r'   r(   r)   rc   rc   u  s       bj=>>G
233I0Erz%  HGFCFGF-ss3>**---F%%V%%I''v''K&&f&&J		 		 	 		 	 !&		 	
 	 	
  %	 	 	 	
 J BJ344M8 8 8 8+ + + +   
   
   $ $ $ $*. . . .) ) ) ) ) )r(   rc   )rA   rB   rC   rD   )rA   rD   rC   rD   )9
__future__r   rU   r#  r)  r   rx   collections.abcr   r   cryptographyr   "cryptography.hazmat.bindings._rustr   r   cryptography.x509.oidr   r	   Enumr   _ASN1_TYPE_TO_ENUMCOUNTRY_NAMEr   JURISDICTION_COUNTRY_NAMESERIAL_NUMBERDN_QUALIFIEREMAIL_ADDRESSr!   DOMAIN_COMPONENTr/   __annotations__MappingrD   r9   r  COMMON_NAMELOCALITY_NAMESTATE_OR_PROVINCE_NAMEORGANIZATION_NAMEORGANIZATIONAL_UNIT_NAMESTREET_ADDRESSUSER_IDr:   itemsr  rt   rY   re   TypeVarUnionrT   rf   Genericri   r   r   rc   r'   r(   r)   <module>rJ     sK  
 # " " " " " "  				 



   . . . . . . . .       @ @ @ @ @ @ ; ; ; ; ; ; ; ;    
    54)444 )3%y'@94)39.i1<      n-s23nS"223
 3"Ds$d#HdOU
!  
 
 
 
 ?>%5%;%;%=%=>>>  &%v    :5 5 5 5& (
Le	   bH bH bH bH bHFN#9: bH bH bHJ3G 3G 3G 3G 3G 3G 3G 3GlX! X! X! X! X! X! X! X!vh) h) h) h) h) h) h) h) h) h)r(   