
    tf9                       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 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, G d d           Z- G d! d"          Z. G d# d$          Z/ G d% d&          Z0dS ))    )annotationsN)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     U/var/www/surfInsights/venv3-11/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   )rE    rO   Nz\ )
isinstancebytesbinasciihexlifydecodereplace)r?   s    r'   _escape_dn_valuerW   E   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 )NrD   c                    |                      d          }t          |          dk    r|S t          t          |d                    S )Nr=      )grouplenchrint)mr?   s     r'   subz_unescape_dn_value.<locals>.subj   s;    ggajjs88q==J3sB<<   r&   )_RFC4514NameParser_PAIR_REr`   )r?   r`   s     r'   _unescape_dn_valuerc   b   s9     r! ! ! &**3444r&   c                      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)   r@   _type_ASN1Type | Nonerf   boolrA   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 strrF   zAttribute's length must be >= z and <= z, but it was Tr<   )
stacklevelz%_type must be from the _ASN1Type enum)rQ   r   	TypeErrorr	   r   r   X500_UNIQUE_IDENTIFIERrR   rB   _NAMEOID_LENGTH_LIMITgetr\   encode
ValueErrorwarningswarnr-   r   _oid_valuerh   )
selfrg   r)   rh   rf   length_limits
min_length
max_lengthc_lenmsgs
             r'   __init__zNameAttribute.__init__v   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	


r&   c                    | j         S N)rv   rx   s    r'   rg   zNameAttribute.oid   s
    yr&   c                    | j         S r   )rw   r   s    r'   r)   zNameAttribute.value   s
    {r&   rB   c                V    t                               | j        | j        j                  S )zt
        The short attribute name (for example "CN") if available,
        otherwise the OID dotted string.
        )r8   rq   rg   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=)rq   rg   r   rW   r)   )rx   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   )rQ   re   NotImplementedrg   r)   rx   r   s     r'   __eq__zNameAttribute.__eq__   s7    %// 	"!!x59$Bu{)BBr&   r^   c                8    t          | j        | j        f          S r   )hashrg   r)   r   s    r'   __hash__zNameAttribute.__hash__   s    TXtz*+++r&   c                (    d| j          d| j        dS )Nz<NameAttribute(oid=z, value=)>)rg   r)   r   s    r'   __repr__zNameAttribute.__repr__   s    GTXGGtzGGGGr&   r   )
rg   r   r)   r@   rh   ri   rf   rj   rA   rk   )rA   r   )rA   r@   rA   rB   r   r   rA   rB   r   r   rA   rj   rA   r^   )r   r   r   r~   propertyrg   r)   r   r   r   r   r   r%   r&   r'   re   re   u   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&   re   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typing.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   rQ   re   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)listrs   allrn   _attributes	frozenset_attribute_setr\   rx   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&   rg   r   rA   list[NameAttribute]c                     fd| D             S )Nc                *    g | ]}|j         k    |S r%   rg   r*   r+   rg   s     r'   
<listcomp>zDRelativeDistinguishedName.get_attributes_for_oid.<locals>.<listcomp>        000a15C<<<<<r&   r%   rx   rg   s    `r'   get_attributes_for_oidz0RelativeDistinguishedName.get_attributes_for_oid        100040000r&   Nr   r   rB   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.
        rI   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   rx   r   s    `r'   r   z(RelativeDistinguishedName.rfc4514_string   sD     xx 
 
 
 
(
 
 
 
 
 	
r&   r   r   rj   c                Z    t          |t                    st          S | j        |j        k    S r   )rQ   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&   typing.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   rg   r   rA   r   r   r   r   r   rA   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   rA   rk   c                    d S r   r%   r   s     r'   r~   zName.__init__  s    LOCr&   *typing.Iterable[RelativeDistinguishedName]c                    d S r   r%   r   s     r'   r~   zName.__init__  s	     sr&   :typing.Iterable[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castre   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   )rQ   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   rn   r   s     r'   r~   zName.__init__  s     *%%
@@Z@@@@@ 	   #     D NN:NNNNN 	%{56
   D 7  r&   NdatarB   r   _NameOidMap | Nonec                J    t          ||pi                                           S r   )ra   parse)clsr   r   s      r'   from_rfc4514_stringzName.from_rfc4514_string,  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.
        rJ   c              3  B   K   | ]}|                               V  d S r   r   r   s     r'   r   z&Name.rfc4514_string.<locals>.<genexpr>A  r   r&   )r   reversedr   r   s    `r'   r   zName.rfc4514_string4  sL     xx 
 
 
 
 !122
 
 
 
 
 	
r&   rg   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>I  r   r&   r%   r   s    `r'   r   zName.get_attributes_for_oidF  r   r&   list[RelativeDistinguishedName]c                    | j         S r   r   r   s    r'   rdnsz	Name.rdnsK  s    r&   backend
typing.AnyrR   c                *    t          j        |           S r   )	rust_x509encode_name_bytes)rx   r   s     r'   public_byteszName.public_bytesO  s    *4000r&   r   r   rj   c                Z    t          |t                    st          S | j        |j        k    S r   )rQ   r   r   r   r   s     r'   r   zName.__eq__R  s+    %&& 	"!!5#444r&   r^   c                D    t          t          | j                            S r   )r   tupler   r   s    r'   r   zName.__hash__X  s     E$*++,,,r&   r   c              #  .   K   | j         D ]
}|E d {V  d S r   r   )rx   rdns     r'   r   zName.__iter__]  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>b  s(      883s88888888r&   )sumr   r   s    r'   r   zName.__len__a  s"    88t'7888888r&   c                V    d                     d | j        D                       }d| dS )NrJ   c              3  >   K   | ]}|                                 V  d S r   r   )r*   r   s     r'   r   z Name.__repr__.<locals>.<genexpr>e  s.      KK$++--KKKKKKr&   z<Name(r   r   rx   r   s     r'   r   zName.__repr__d  s6    xxKK$:JKKKKK     r&   )r   r   rA   rk   )r   r   rA   rk   )r   r   rA   rk   r   )r   rB   r   r   rA   r   r   r   )rA   r   )r   r   rA   rR   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^       _OOO _O_   _   (  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 ),ra   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   rB   r   _NameOidMaprA   rk   c                0    || _         d| _        || _        d S )Nr   )_data_idx_attr_name_overrides)rx   r   r   s      r'   r~   z_RFC4514NameParser.__init__  s    
	$7!!!r&   rj   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  rs   r   )rx   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   rs   r[   r\   )rx   patr  r?   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.
        rJ   )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 )NrI   )	_parse_nar  r	  r  r   )rx   nass     r'   r  z_RFC4514NameParser._parse_rdn  sz    ~~ jjllc!!OOC   JJt~~''((( jjllc!! )---r&   re   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   rE   r=   )r  _OID_REr   rs   	_DESCR_REr  rq   _NAME_TO_NAMEOIDr	  r  _HEXSTRING_RErS   	unhexlifyrU   
_STRING_RErc   re   )rx   	oid_valuerg   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   rB   r   r   rA   rk   )rA   rj   )rA   r  )r  rB   rA   rk   r   )rA   r   )rA   r   )rA   re   )r   r   r   recompiler  r  _PAIRrb   _LUTF1_SUTF1_TUTF1r]   sys
maxunicode_UTFMB	_LEADCHAR_STRINGCHAR
_TRAILCHARVERBOSEr  r  r~   r  r  r	  r  r   r  r  r%   r&   r'   ra   ra   i  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&   ra   )r?   r@   rA   rB   )r?   rB   rA   rB   )1
__future__r   rS   r  r%  r   rt   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__MappingrB   r7   r   COMMON_NAMELOCALITY_NAMESTATE_OR_PROVINCE_NAMEORGANIZATION_NAMEORGANIZATIONAL_UNIT_NAMESTREET_ADDRESSUSER_IDr8   itemsr  rp   rW   rc   re   r   r   ra   r%   r&   r'   <module>rB     s  
 # " " " " " "  				 



         @ @ @ @ @ @ ; ; ; ; ; ; ; ;    
    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&bH bH bH bH bH bH bH bHJ2G 2G 2G 2G 2G 2G 2G 2GjW! W! W! W! W! W! W! W!th) h) h) h) h) h) h) h) h) h)r&   