
    ӝgh;                       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eD  ci c]  } | j(                  |  c} Zej,                  ej.                  ej0                  ej.                  ej2                  ej.                  ej4                  ej.                  ej6                  ej8                  ej:                  ej8                  iZd	ed
<   ej@                  ee!f   Z"ej@                  e!ef   Z#ejH                  dejJ                  dejL                  dejN                  dejP                  dej,                  dejR                  dej:                  dejT                  di	Z+ded<   e+jY                         D ci c]  \  }}||
 c}}Z-ej,                  dej0                  dejH                  diZ.d%dZ/d&dZ0 ejb                  dejd                  e!e3f   e!e3d      Z4 G d dejj                  e4         Z6 G d d       Z7 G d! d"      Z8 G d# d$      Z9yc c} w c c}}w )'    )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y)	_ASN1Type                                    N)__name__
__module____qualname__	BitStringOctetString
UTF8StringNumericStringPrintableString	T61String	IA5StringUTCTimeGeneralizedTimeVisibleStringUniversalString	BMPString     Z/var/www/enzed_healthcare/enzed_env/lib/python3.12/site-packages/cryptography/x509/name.pyr   r      s>    IKJMOIIGOMOIr(   r   z!dict[ObjectIdentifier, _ASN1Type]_NAMEOID_DEFAULT_TYPECNLSTOOUCSTREETDCUID_OidNameMap_NAMEOID_TO_NAME)   r6   )   @   c                   | syt        | t              r'dt        j                  |       j	                  d      z   S | j                  dd      } | j                  dd      } | j                  dd	      } | j                  d
d      } | j                  dd      } | j                  dd      } | j                  dd      } | j                  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   )r;    rE   Nz\ )
isinstancebytesbinasciihexlifydecodereplace)vals    r)   _escape_dn_valuerN   F   s      #uX%%c*11&999 ++dF
#C
++c5
!C
++c5
!C
++c5
!C
++c5
!C
++c5
!C
++c5
!C
++dF
#C
1vSj
2w#~#2hJr(   c                N    | syd }t         j                  j                  ||       S )Nr:   c                n    | j                  d      }t        |      dk(  r|S t        t        |d            S )Nr7      )grouplenchrint)mrM   s     r)   subz_unescape_dn_value.<locals>.subk   s0    ggajs8q=J3sB<  r(   )_RFC4514NameParser_PAIR_RErW   )rM   rW   s     r)   _unescape_dn_valuerZ   c   s(    ! &&**3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y)NameAttributeNT)	_validatec                  t        |t              st        d      |t        j                  k(  r9|t
        j                  k7  rt        d      t        |t              s&t        d      t        |t              st        d      t        j                  |      }|l|\  }}t        |t              sJ t        |j                  d            }||k  s||kD  r1d| d| d| }	|d	u rt        |	      t        j                  |	d
       |$t         j                  |t        j"                        }t        |t              st        d      || _        || _        || _        y )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 strr<   zAttribute's length must be >= z and <= z, but it was Tr6   )
stacklevelz%_type must be from the _ASN1Type enum)rG   r	   	TypeErrorr   r   r   X500_UNIQUE_IDENTIFIERrH   str_NAMEOID_LENGTH_LIMITgetrS   encode
ValueErrorwarningswarnr*   r   _oid_value_type)
selfoidvaluerm   r_   length_limits
min_length
max_lengthc_lenmsgs
             r)   __init__zNameAttribute.__init__   s[    #/0D  I'''g444L  eU+ CDDeS) >??-11#6$%2"J
eS)))V,-Ez!UZ%74ZL A$]5';  $$S/)MM#!4 =)--c93G3GHE%+CDD	.3 %
r(   c                    | j                   S N)rk   rn   s    r)   ro   zNameAttribute.oid   s    yyr(   c                    | j                   S rx   )rl   ry   s    r)   rp   zNameAttribute.value   s    {{r(   c                j    t         j                  | j                  | j                  j                        S )zt
        The short attribute name (for example "CN") if available,
        otherwise the OID dotted string.
        )r5   rf   ro   dotted_stringry   s    r)   rfc4514_attribute_namez$NameAttribute.rfc4514_attribute_name   s%      ##DHHdhh.D.DEEr(   c                    |r|j                  | 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=)rf   ro   r}   rN   rp   )rn   attr_name_overrides	attr_names      r)   rfc4514_stringzNameAttribute.rfc4514_string   sP     2E##DHH-$ 	 33IA.tzz:;<<r(   c                    t        |t              st        S | j                  |j                  k(  xr | j                  |j                  k(  S rx   )rG   r^   NotImplementedro   rp   rn   others     r)   __eq__zNameAttribute.__eq__   s7    %/!!xx599$Bu{{)BBr(   c                D    t        | j                  | j                  f      S rx   )hashro   rp   ry   s    r)   __hash__zNameAttribute.__hash__   s    TXXtzz*++r(   c                <    d| j                    d| j                  dS )Nz<NameAttribute(oid=z, value=)>)ro   rp   ry   s    r)   __repr__zNameAttribute.__repr__   s    $TXXJhtzznBGGr(   rx   )
ro   r	   rp   r[   rm   z_ASN1Type | Noner_   boolreturnNone)r   r	   )r   r[   r   rd   r   z_OidNameMap | Noner   rd   r   objectr   r   r   rU   )r   r   r   rv   propertyro   rp   r}   r   r   r   r   r'   r(   r)   r^   r^      s    
 #'	4& 4&4& &4&  	4& 4& 
4&l     F F 9==#5=	="C,Hr(   r^   c                  ^    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
y)RelativeDistinguishedNamec                    t        |      }|st        d      t        d |D              st        d      || _        t        |      | _        t        | j                        t        |      k7  rt        d      y )Nz-a relative distinguished name cannot be emptyc              3  <   K   | ]  }t        |t                y wrx   rG   r^   .0xs     r)   	<genexpr>z5RelativeDistinguishedName.__init__.<locals>.<genexpr>   s     DA:a/D   z/attributes must be an iterable of NameAttributez$duplicate attributes are not allowed)listrh   allrb   _attributes	frozenset_attribute_setrS   rn   
attributess     r)   rv   z"RelativeDistinguishedName.__init__   st    *%
LMMDDDMNN &'
3t""#s:6CDD 7r(   c                L    | D cg c]  }|j                   |k(  s| c}S c c}w rx   ro   rn   ro   is      r)   get_attributes_for_oidz0RelativeDistinguishedName.get_attributes_for_oid   "      0a155C<000   !!Nc                L    dj                  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.
        r?   c              3  @   K   | ]  }|j                          y wrx   r   r   attrr   s     r)   r   z;RelativeDistinguishedName.rfc4514_string.<locals>.<genexpr>  %      
  34
   joinr   rn   r   s    `r)   r   z(RelativeDistinguishedName.rfc4514_string   s)     xx 
((
 
 	
r(   c                `    t        |t              st        S | j                  |j                  k(  S rx   )rG   r   r   r   r   s     r)   r   z RelativeDistinguishedName.__eq__  s*    %!:;!!""e&:&:::r(   c                ,    t        | j                        S rx   )r   r   ry   s    r)   r   z"RelativeDistinguishedName.__hash__  s    D''((r(   c                ,    t        | j                        S rx   )iterr   ry   s    r)   __iter__z"RelativeDistinguishedName.__iter__  s    D$$%%r(   c                ,    t        | j                        S rx   )rS   r   ry   s    r)   __len__z!RelativeDistinguishedName.__len__  s    4##$$r(   c                *    d| j                          dS )Nz<RelativeDistinguishedName(r   r   ry   s    r)   r   z"RelativeDistinguishedName.__repr__  s    ,T-@-@-B,C2FFr(   )r   Iterable[NameAttribute]ro   r	   r   z list[NameAttribute[str | bytes]]rx   r   r   r   r   zIterator[NameAttribute]r   )r   r   r   rv   r   r   r   r   r   r   r   r'   r(   r)   r   r      sS    E11 
*1 9=
#5
	
;)&%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ddZddZddZddZy)Namec                     y rx   r'   r   s     r)   rv   zName.__init__  s    EHr(   c                     y rx   r'   r   s     r)   rv   zName.__init__  s     r(   c           	     R   t        |      }t        d |D              r8|D cg c]&  }t        t        j                  t
        |      g      ( c}| _        y t        d |D              r1t        j                  t        j                  t           |      | _        y t        d      c c}w )Nc              3  <   K   | ]  }t        |t                y wrx   r   r   s     r)   r   z Name.__init__.<locals>.<genexpr>(  s     @z!]+@r   c              3  <   K   | ]  }t        |t                y wrx   )rG   r   r   s     r)   r   z Name.__init__.<locals>.<genexpr>-  s     NaA89Nr   zNattributes must be a list of NameAttribute or a list RelativeDistinguishedName)	r   r   r   typingcastr^   r   Listrb   )rn   r   r   s      r)   rv   zName.__init__#  s     *%
@Z@@ $  *6;;}a+H*IJ D N:NN%{{56
 D 7  s   +B$Nc                >    t        ||xs i       j                         S rx   )rX   parse)clsdatar   s      r)   from_rfc4514_stringzName.from_rfc4514_string7  s      "$(;(ArBHHJJr(   c                ^    dj                  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.
        r@   c              3  @   K   | ]  }|j                          y wrx   r   r   s     r)   r   z&Name.rfc4514_string.<locals>.<genexpr>L  r   r   )r   reversedr   r   s    `r)   r   zName.rfc4514_string?  s.     xx 
 !1!12
 
 	
r(   c                L    | D cg c]  }|j                   |k(  s| c}S c c}w rx   r   r   s      r)   r   zName.get_attributes_for_oidQ  r   r   c                    | j                   S rx   r   ry   s    r)   rdnsz	Name.rdnsW  s    r(   c                ,    t        j                  |       S rx   )	rust_x509encode_name_bytes)rn   backends     r)   public_byteszName.public_bytes[  s    **400r(   c                `    t        |t              st        S | j                  |j                  k(  S rx   )rG   r   r   r   r   s     r)   r   zName.__eq__^  s)    %&!!5#4#444r(   c                >    t        t        | j                              S rx   )r   tupler   ry   s    r)   r   zName.__hash__d  s     E$**+,,r(   c              #  F   K   | j                   D ]  }|E d {     y 7 wrx   r   )rn   rdns     r)   r   zName.__iter__i  s%     ## 	CNN	s   !!c                :    t        d | j                  D              S )Nc              3  2   K   | ]  }t        |        y wrx   )rS   )r   r   s     r)   r   zName.__len__.<locals>.<genexpr>n  s     83s88s   )sumr   ry   s    r)   r   zName.__len__m  s    8t'7'7888r(   c                R    dj                  d | j                  D              }d| dS )Nr@   c              3  <   K   | ]  }|j                           y wrx   r   )r   r   s     r)   r   z Name.__repr__.<locals>.<genexpr>q  s     K$++-Kr   z<Name(r   r   rn   r   s     r)   r   zName.__repr__p  s+    xxK$:J:JKKvR  r(   )r   r   r   r   )r   z#Iterable[RelativeDistinguishedName]r   r   )r   z3Iterable[NameAttribute | RelativeDistinguishedName]r   r   rx   )r   rd   r   z_NameOidMap | Noner   r   r   r   )r   zlist[RelativeDistinguishedName])r   z
typing.Anyr   rH   r   r   r   r   )r   r   r   r   overloadrv   classmethodr   r   r   r   r   r   r   r   r   r   r   r'   r(   r)   r   r     s    __H H__=	 G 
(  37KK 0K 
	K K 9=
#5
	
$11 
*1    15-
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y) rX   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})+c                .    || _         d| _        || _        y )Nr   )_data_idx_attr_name_overrides)rn   r   r   s      r)   rv   z_RFC4514NameParser.__init__  s    
	$7!r(   c                F    | j                   t        | j                        k  S rx   )r   rS   r   ry   s    r)   	_has_dataz_RFC4514NameParser._has_data  s    yy3tzz?**r(   c                V    | j                         r| j                  | j                     S y rx   )r   r   r   ry   s    r)   _peekz_RFC4514NameParser._peek  s"    >>::dii((r(   c                `    | j                         |k7  rt        | xj                  dz  c_        y )Nr7   )r   rh   r   )rn   chs     r)   
_read_charz_RFC4514NameParser._read_char  s#    ::<2		Q	r(   c                    |j                  | j                  | j                        }|t        |j	                         }| xj                  t        |      z  c_        |S )N)pos)matchr   r   rh   rR   rS   )rn   patr   rM   s       r)   _read_rez_RFC4514NameParser._read_re  sI    		$**$))	4=kkm		SX	
r(   c                $   | j                         st        g       S | j                         g}| j                         rA| j                  d       |j	                  | j                                | j                         rAt        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.
        r@   )r   r   
_parse_rdnr   appendr   r   s     r)   r   z_RFC4514NameParser.parse  sl     ~~8O!"nnOOC KK)* nn HTN##r(   c                    | j                         g}| j                         dk(  rD| j                  d       |j                  | j                                | j                         dk(  rDt	        |      S )Nr?   )	_parse_nar   r   r  r   )rn   nass     r)   r   z_RFC4514NameParser._parse_rdn  s[    ~~ jjlc!OOC JJt~~'( jjlc! )--r(   c                B   	 | j                  | j                        }t        |      }| j                  d       | j                         dk(  rB| j                  | j                        }t        j                  |dd        j                         }n&| j                  | j                        }t        |      }t!        ||      S # t        $ rU | j                  | j                        }| j
                  j                  |t        j                  |            }|t        Y w xY w)Nr   r;   r7   )r   _OID_REr	   rh   	_DESCR_REr   rf   _NAME_TO_NAMEOIDr   r   _HEXSTRING_RErI   	unhexlifyrK   
_STRING_RErZ   r^   )rn   	oid_valuero   namerp   	raw_values         r)   r  z_RFC4514NameParser._parse_na  s    
	.dll3I #9-C::<3MM$"4"45E&&uQRy188:Edoo6I&y1ES%((%  	!==0D++//&**40C {   	!s   C   ADDN)r   rd   r   _NameOidMapr   r   )r   r   )r   z
str | None)r   rd   r   r   r   )r   r   )r   r   )r   r^   )r   r   r   recompiler  r  _PAIRrY   _LUTF1_SUTF1_TUTF1rT   sys
maxunicode_UTFMB	_LEADCHAR_STRINGCHAR
_TRAILCHARVERBOSEr  r	  rv   r   r   r   r   r   r   r  r'   r(   r)   rX   rX   u  s   bjj=>G

23I0Erzz% HGFCFGFs3>>*+1-F81VH%IXQvh'KHAfX&J[% !aw 'Qug &		 	

J BJJ34M8+

$*.)r(   rX   )rM   zstr | bytesr   rd   )rM   rd   r   rd   ):
__future__r   rI   r  r  r   ri   collections.abcr   r   cryptographyr   "cryptography.hazmat.bindings._rustr   r   cryptography.x509.oidr   r	   Enumr   rp   _ASN1_TYPE_TO_ENUMCOUNTRY_NAMEr   JURISDICTION_COUNTRY_NAMESERIAL_NUMBERDN_QUALIFIEREMAIL_ADDRESSr!   DOMAIN_COMPONENTr*   __annotations__Mappingrd   r4   r  COMMON_NAMELOCALITY_NAMESTATE_OR_PROVINCE_NAMEORGANIZATION_NAMEORGANIZATIONAL_UNIT_NAMESTREET_ADDRESSUSER_IDr5   itemsr  re   rN   rZ   TypeVarUnionrH   r[   Genericr^   r   r   rX   )r   kvs   000r)   <module>r9     s6  
 #  	 
   .  @ ;

  +44Qaggqj4 )33%%y'@'@944)339..i11< 8  nn-s23nnS"223
 3""Ds$$d#HdOOU
! + 
 &6%;%;%=>TQAqD>  &%%v :5& (
LLe	 bHFNN#9: bHJ3G 3GlX! X!vh) h)g
 56 ?s   H7H<