
    : j;                    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     jC:\Users\Terasoftware\OneDrive\Desktop\faahhh\fyndo\fyndo\venv\Lib\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k    s| d         dk    rt          |           dk    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?   Nz\ )
isinstancebytesbinasciihexlifydecodereplacelen)rA   s    r)   _escape_dn_valuerZ   F   sC     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} Q3 3s88a< Sj
2w#~ #2#hJr(   c                P    | sdS d }t           j                            ||           S )NrF   c                    |                      d          }t          |          dk    r
|dd          S t          j        |                    dd                                                    S )Nr   r>   r?   rI   rF   )grouprY   rU   	unhexlifyrX   rW   )mrA   s     r)   subz_unescape_dn_value.<locals>.subk   s]    ggajjs88q= 	qrr7N !#++dB"7"788??AAAr(   )_RFC4514NameParser_PAIR_MULTI_REr`   )rA   r`   s     r)   _unescape_dn_valuerc   c   s<     rB B B ,00c:::r(   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+   rd   _type_ASN1Type | Nonerh   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getrY   encode
ValueErrorwarningswarnr/   r   _oid_valuerj   )
selfri   r+   rj   rh   length_limits
min_length
max_lengthc_lenmsgs
             r)   __init__zNameAttribute.__init__   s    #/00 	D   I'' 	<g44 L   eU++ E CDDDEE3'' 	<:;;;-11#66 	5%2"J
eS)))))V,,--Ez! 5UZ%7 5;Z ; ;$; ;38; ;  $ 5$S//)M#!4444  	I)--c93GHHE%++ 	ECDDD	.3 %


r(   c                    | j         S N)rx   rz   s    r)   ri   zNameAttribute.oid   s
    yr(   c                    | j         S r   )ry   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:   rs   ri   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=)rs   ri   r   rZ   r+   )rz   r   	attr_names      r)   rfc4514_stringzNameAttribute.rfc4514_string   sY     2EN##DH---$ 	  	43I<<.tz::<<<r(   otherobjectc                z    t          |t                    st          S | j        |j        k    o| j        |j        k    S r   )rS   rg   NotImplementedri   r+   rz   r   s     r)   __eq__zNameAttribute.__eq__   s7    %// 	"!!x59$Bu{)BBr(   intc                8    t          | j        | j        f          S r   )hashri   r+   r   s    r)   __hash__zNameAttribute.__hash__   s    TXtz*+++r(   c                (    d| j          d| j        dS )Nz<NameAttribute(oid=z, value=)>)ri   r+   r   s    r)   __repr__zNameAttribute.__repr__   s    GTXGGtzGGGGr(   r   )
ri   r	   r+   rd   rj   rk   rh   rl   rC   rm   )rC   r	   )rC   rd   rC   rD   r   r   rC   rD   r   r   rC   rl   rC   r   )r   r   r   r   propertyri   r+   r   r   r   r   r   r'   r(   r)   rg   rg      s
       
 #'	3& 3& 3& 3& 3& 3& 3&j    X    X F F F XF 9== = = = ="C C C C, , , ,H H H H H Hr(   rg   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[str | bytes]]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   rg   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)listru   allrp   _attributes	frozenset_attribute_setrY   rz   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 	ECDDD	E 	Er(   ri   r	   rC    list[NameAttribute[str | bytes]]c                     fd| D             S )Nc                *    g | ]}|j         k    |S r'   ri   r,   r-   ri   s     r)   
<listcomp>zDRelativeDistinguishedName.get_attributes_for_oid.<locals>.<listcomp>   $    000a15C<0000r(   r'   rz   ri   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   rz   r   s    `r)   r   z(RelativeDistinguishedName.rfc4514_string   sD     xx 
 
 
 
(
 
 
 
 
 	
r(   r   r   rl   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[str | bytes]]c                *    t          | j                  S r   )iterr   r   s    r)   __iter__z"RelativeDistinguishedName.__iter__  s    D$%%%r(   c                *    t          | j                  S r   )rY   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   ri   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   rm   c                    d S r   r'   r   s     r)   r   zName.__init__  	     sr(   #Iterable[RelativeDistinguishedName]c                    d S r   r'   r   s     r)   r   zName.__init__   r   r(   @Iterable[NameAttribute[str | bytes] | RelativeDistinguishedName]c                    t          |          }t          d |D                       rd |D             | _        d S t          d |D                       r,t          j        t           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castrg   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>1  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   r   rp   r   s     r)   r   zName.__init__%  s     *%%
@@Z@@@@@ 	   #     D NN:NNNNN 	%{./   D 7  r(   NdatarD   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.
        rL   c              3  B   K   | ]}|                               V  d S r   r   r   s     r)   r   z&Name.rfc4514_string.<locals>.<genexpr>P  r   r(   )r   reversedr   r   s    `r)   r   zName.rfc4514_stringC  sL     xx 
 
 
 
 !122
 
 
 
 
 	
r(   ri   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>Y  r   r(   r'   r   s    `r)   r   zName.get_attributes_for_oidU  r   r(   list[RelativeDistinguishedName]c                    | j         S r   r   r   s    r)   rdnsz	Name.rdns[  s    r(   backend
typing.AnyrT   c                *    t          j        |           S r   )	rust_x509encode_name_bytes)rz   r   s     r)   public_byteszName.public_bytes_  s    *4000r(   r   r   rl   c                Z    t          |t                    st          S | j        |j        k    S r   )rS   r   r   r   r   s     r)   r   zName.__eq__b  s+    %&& 	"!!5#444r(   r   c                D    t          t          | j                            S r   )r   tupler   r   s    r)   r   zName.__hash__h  s     E$*++,,,r(   r   c              #  .   K   | j         D ]
}|E d {V  d S r   r   )rz   rdns     r)   r   zName.__iter__m  s5      # 	 	CNNNNNNNN	 	r(   c                >    t          d | j        D                       S )Nc              3  4   K   | ]}t          |          V  d S r   )rY   )r,   r   s     r)   r   zName.__len__.<locals>.<genexpr>r  s(      883s88888888r(   )sumr   r   s    r)   r   zName.__len__q  s"    88t'7888888r(   c                2    d|                                   dS )Nz<Name(r   r   r   s    r)   r   zName.__repr__t  s    1++--1111r(   )r   r   rC   rm   )r   r   rC   rm   )r   r   rC   rm   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     sh       _   _ _   _   ,  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2 2 2 2 2 2r(   r   c                     e Zd Z ej        d          Z ej        d          ZdZdZde de dZ	 ej        de d	e d
          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d0d&Zd1d(Zd)S )2ra   z!(0|([1-9]\d*))(\.(0|([1-9]\d*)))+z[a-zA-Z][a-zA-Z\d-]*z[\\ #=\"\+,;<>]z[\da-zA-Z]{2}z\\(|)z(\\z)|((\\z)+)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   rm   c                0    || _         d| _        || _        d S )Nr   )_data_idx_attr_name_overrides)rz   r   r   s      r)   r   z_RFC4514NameParser.__init__  s    
	$7!!!r(   rl   c                <    | j         t          | j                  k     S r   )r  rY   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  ru   r  )rz   r  s     r)   
_read_charz_RFC4514NameParser._read_char  s0    ::<<2 			Q				r(   c                    |                     | j        | j                  }|t          |                                }| xj        t          |          z  c_        |S )N)pos)matchr   r  ru   r]   rY   )rz   patr  rA   s       r)   _read_rez_RFC4514NameParser._read_re  sQ    		$*$)	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   )rz   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   )rz   nass     r)   r  z_RFC4514NameParser._parse_rdn  s~    ~~ jjllc! 	)OOC   JJt~~''((( jjllc! 	) )---r(   NameAttribute[str]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	   ru   	_DESCR_REr  rs   _NAME_TO_NAMEOIDr
  r  _HEXSTRING_RErU   r^   rW   
_STRING_RErc   rg   )rz   	oid_valueri   namer+   	raw_values         r)   r  z_RFC4514NameParser._parse_na  s4   
	.dl33I #9--CC  	! 	! 	!==00D+//&**400 C  !  ! !	! 	::<<3 	2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   rm   )rC   rl   )rC   r  )r  rD   rC   rm   r   )rC   r   )rC   r   )rC   r  ) r   r   r   recompiler  r  _ESCAPE_SPECIAL_ESCAPE_HEX_PAIRrb   _LUTF1_SUTF1_TUTF1chrsys
maxunicode_UTFMB	_LEADCHAR_STRINGCHAR
_TRAILCHARVERBOSEr  r  r   r  r  r
  r  r   r  r  r'   r(   r)   ra   ra   x  s       bj=>>G
233I(O"K3?33[333ERZ N N Nk N N NOONGFCFGF-ss3>**---F%%V%%I''v''K&&f&&J		 		 	 		 	 !&		 	
 	 	
  %	 	 	 	
 J BJ344M8 8 8 8+ + + +   
   
   $ $ $ $*. . . .) ) ) ) ) )r(   ra   )rA   rB   rC   rD   )rA   rD   rC   rD   )9
__future__r   rU   r   r)  r   rv   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  rr   rZ   rc   TypeVarUnionrT   rd   Genericrg   r   r   ra   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    :; ; ; ;( (
Le	   aH aH aH aH aHFN#9: aH aH aHH3G 3G 3G 3G 3G 3G 3G 3Gl[2 [2 [2 [2 [2 [2 [2 [2|j) j) j) j) j) j) j) j) j) j)r(   