Ë
    Bü´jÀE  ã            
      óJ  — 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Zd dlZd dl	m
Z d dl	mZ ddlmZmZ ddlmZmZ dZdZd	Zd	Zd
gZeeeeeef   ZdD � �ci c]  \  } }|  ee|d«      “Œ c}} Z	 	 	 	 d)d„Zej>                  rd dl m!Z! d dlm"Z" ddl#mZ$  G d„ de"d	¬«      Z%i Z&de'd<   	 d dl Z d dl m(Z(mZm)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1mZm2Z2 e,Z3er
 ee+«      sd	ZdD ]  Z4	  ee2e4«      e& ee de4› �«      <   Œ ddl#mZ ejn                  de8df   Z9d*d„Z:d+d „Z;d,d!„Z<	 	 	 	 	 	 	 d-	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d.d"„Z=ej|                  	 	 	 	 	 	 	 	 	 	 	 	 d/	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d0d#„«       Z?ej|                  	 	 	 	 	 	 	 	 	 	 	 	 d/	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d1d$„«       Z?	 	 	 	 	 	 	 	 	 	 	 	 d2	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d1d%„Z?d3d&„Z@d4d'„ZA	 d5	 	 	 	 	 	 	 	 	 d6d(„ZByc c}} w # e5$ r Y �Œ#w xY w# e6$ r dZ)dZ*dZ0dZ1dxZ3Z,dZ-dZ.dZ/Y �Œw xY w)7é    )ÚannotationsN)ÚError)Ú	unhexlifyé   )ÚProxySchemeUnsupportedÚSSLErroré   )Ú_BRACELESS_IPV6_ADDRZ_REÚ_IPV4_REFzhttp/1.1))é    Úmd5)é(   Úsha1)é@   Úsha256c                ó(   — | j                  d«      }|S )NzOpenSSL )Ú
startswith)Úopenssl_versionÚ
is_openssls     úO/root/workspace/ytshorts/venv/lib/python3.12/site-packages/urllib3/util/ssl_.pyÚ(_is_has_never_check_common_name_reliabler      s   € ð
 !×+Ñ+¨JÓ7€JàÐó    )Ú
VerifyMode)Ú	TypedDict)ÚSSLTransportc                  ó,   — e Zd ZU ded<   ded<   ded<   y)Ú_TYPE_PEER_CERT_RET_DICTztuple[tuple[str, str], ...]ÚsubjectAltNamez'tuple[tuple[tuple[str, str], ...], ...]ÚsubjectÚstrÚserialNumberN)Ú__name__Ú
__module__Ú__qualname__Ú__annotations__© r   r   r   r   /   s   … Ø3Ó3Ø8Ó8ØÔr   r   )Útotalzdict[int, int]Ú_SSL_VERSION_TO_TLS_VERSION)ÚCERT_REQUIREDÚHAS_NEVER_CHECK_COMMON_NAMEÚOP_NO_COMPRESSIONÚOP_NO_TICKETÚOPENSSL_VERSIONÚPROTOCOL_TLSÚPROTOCOL_TLS_CLIENTÚVERIFY_X509_PARTIAL_CHAINÚVERIFY_X509_STRICTÚOP_NO_SSLv2ÚOP_NO_SSLv3Ú
SSLContextÚ
TLSVersion)ÚTLSv1ÚTLSv1_1ÚTLSv1_2Ú	PROTOCOL_i   i @  i   i   é   i   r   c                óð  — | €t        d«      ‚|j                  dd«      j                  «       }t        |«      }|t        vrt        d|› �«      ‚t        j                  |«      }|€t        d|› �«      ‚	 t        |j                  «       «      } || «      j                  «       }t        j                  ||«      s t        d|› d|j                  «       › d	�«      ‚y# t        $ r}t        |«      |‚d}~ww xY w)
zá
    Checks if given fingerprint matches the supplied certificate.

    :param cert:
        Certificate as bytes object.
    :param fingerprint:
        Fingerprint as string of hexdigits, can be interspersed by colons.
    NzNo certificate for the peer.ú:Ú zFingerprint of invalid length: zAHash function implementation unavailable for fingerprint length: z&Fingerprints did not match. Expected "z", got "ú")r   ÚreplaceÚlowerÚlenÚHASHFUNC_MAPÚgetr   ÚencodeÚBinasciiErrorÚdigestÚhmacÚcompare_digestÚhex)ÚcertÚfingerprintÚdigest_lengthÚhashfuncÚfingerprint_bytesÚeÚcert_digests          r   Úassert_fingerprintrQ   l   s  € ð €|ÜÐ5Ó6Ð6à×%Ñ% c¨2Ó.×4Ñ4Ó6€KÜ˜Ó$€MØœLÑ(ÜÐ8¸¸ÐFÓGÐGÜ×Ñ Ó.€HØÐÜØOÐP]ÈÐ_ó
ð 	
ð
!Ü% k×&8Ñ&8Ó&:Ó;Ðñ ˜4“.×'Ñ'Ó)€Kä×Ñ˜{Ð,=Ô>ÜØ4°[°MÀÈ+Ï/É/ÓJ[ÐI\Ð\]Ð^ó
ð 	
ð ?øô ò !Ü�q‹k˜qÐ ûð!ús   Á5C Ã	C5Ã$C0Ã0C5c                ó†   — | €t         S t        | t        «      r(t        t        | d«      }|€t        t        d| z   «      }|S | S )aë  
    Resolves the argument to a numeric constant, which can be passed to
    the wrap_socket function/method from the ssl module.
    Defaults to :data:`ssl.CERT_REQUIRED`.
    If given a string it is assumed to be the name of the constant in the
    :mod:`ssl` module or its abbreviation.
    (So you can specify `REQUIRED` instead of `CERT_REQUIRED`.
    If it's neither `None` nor a string we assume it is already the numeric
    constant which can directly be passed to wrap_socket.
    NÚCERT_)r)   Ú
isinstancer    ÚgetattrÚssl©Ú	candidateÚress     r   Úresolve_cert_reqsrZ   ‘   sI   € ð ÐÜÐä�)œSÔ!Ü”c˜9 dÓ+ˆØˆ;Üœ#˜w¨Ñ2Ó3ˆCØˆ
àÐr   c                ó¶   — | €t         S t        | t        «      r@t        t        | d«      }|€t        t        d| z   «      }t        j                  t        |«      S | S )z 
    like resolve_cert_reqs
    Nr9   )r.   rT   r    rU   rV   ÚtypingÚcastÚintrW   s     r   Úresolve_ssl_versionr_   ¨   sU   € ð ÐÜÐä�)œSÔ!Ü”c˜9 dÓ+ˆØˆ;Üœ#˜{¨YÑ6Ó7ˆCÜ�{‰{œ3 Ó$Ð$àÐr   c                ó4  — t         €t        d«      ‚| dt        t        fvrs|€|�t	        d«      ‚t
        j                  | t        j                  «      }t
        j                  | t        j                  «      }t        j                  dt        d¬«       t        t        «      }|�||_        nt        j                  |_        |�||_        |r|j!                  |«       |€t"        j$                  n|}|€&d}|t&        z  }|t(        z  }|t*        z  }|t,        z  }|xj.                  |z  c_        |€'d}t0        j2                  dk\  r|t4        z  }|t6        z  }|xj8                  |z  c_        t;        |d	d«      �d
|_        |t"        j$                  k(  rt>        s||_         d
|_!        nd|_!        ||_         d|_"        dtF        jH                  v r=tF        jJ                  jM                  tF        jH                  j                  d«      «      }nd}|r||_'        |S )a#  Creates and configures an :class:`ssl.SSLContext` instance for use with urllib3.

    :param ssl_version:
        The desired protocol version to use. This will default to
        PROTOCOL_SSLv23 which will negotiate the highest protocol that both
        the server and your installation of OpenSSL support.

        This parameter is deprecated instead use 'ssl_minimum_version'.
    :param ssl_minimum_version:
        The minimum version of TLS to be used. Use the 'ssl.TLSVersion' enum for specifying the value.
    :param ssl_maximum_version:
        The maximum version of TLS to be used. Use the 'ssl.TLSVersion' enum for specifying the value.
        Not recommended to set to anything other than 'ssl.TLSVersion.MAXIMUM_SUPPORTED' which is the
        default value.
    :param cert_reqs:
        Whether to require the certificate verification. This defaults to
        ``ssl.CERT_REQUIRED``.
    :param options:
        Specific OpenSSL options. These default to ``ssl.OP_NO_SSLv2``,
        ``ssl.OP_NO_SSLv3``, ``ssl.OP_NO_COMPRESSION``, and ``ssl.OP_NO_TICKET``.
    :param ciphers:
        Which cipher suites to allow the server to select. Defaults to either system configured
        ciphers if OpenSSL 1.1.1+, otherwise uses a secure default set of ciphers.
    :param verify_flags:
        The flags for certificate verification operations. These default to
        ``ssl.VERIFY_X509_PARTIAL_CHAIN`` and ``ssl.VERIFY_X509_STRICT`` for Python 3.13+.
    :returns:
        Constructed SSLContext object with specified options
    :rtype: SSLContext
    Nz7Can't create an SSLContext object without an ssl modulezZCan't specify both 'ssl_version' and either 'ssl_minimum_version' or 'ssl_maximum_version'zi'ssl_version' option is deprecated and will be removed in urllib3 v3.0. Instead use 'ssl_minimum_version'r   )ÚcategoryÚ
stacklevelr   )é   é   Úpost_handshake_authTFÚSSLKEYLOGFILE)(r4   Ú	TypeErrorr.   r/   Ú
ValueErrorr(   rC   r5   ÚMINIMUM_SUPPORTEDÚMAXIMUM_SUPPORTEDÚwarningsÚwarnÚFutureWarningÚminimum_versionr8   Úmaximum_versionÚset_ciphersrV   r)   r2   r3   r+   r,   ÚoptionsÚsysÚversion_infor0   r1   Úverify_flagsrU   re   ÚIS_PYOPENSSLÚverify_modeÚcheck_hostnameÚhostname_checks_common_nameÚosÚenvironÚpathÚ
expandvarsÚkeylog_filename)	Ússl_versionÚ	cert_reqsrq   ÚciphersÚssl_minimum_versionÚssl_maximum_versionrt   ÚcontextÚsslkeylogfiles	            r   Úcreate_urllib3_contextr…   ¸   s  € ôN ÐÜÐQÓRÐRð ˜4¤Ô/BÐCÑCð Ð*Ð.AÐ.MÜðAóð ô #>×"AÑ"AØœZ×9Ñ9ó#Ðô #>×"AÑ"AØœZ×9Ñ9ó#Ðô �M‰MðMä&Øõ	ô Ô,Ó-€GØÐ&Ø"5ˆÕä",×"4Ñ"4ˆÔàÐ&Ø"5ˆÔñ Ø×Ñ˜GÔ$ð &/Ð%6”×!Ò!¸I€Ià€Øˆà”;Ñˆà”;Ñˆð 	Ô$Ñ$ˆð
 	”<Ñˆà‡O‚O�wÑ…OàÐØˆô ×Ñ˜wÒ&ØÔ5Ñ5ˆLØÔ.Ñ.ˆLà×Ò˜LÑ(Õô ˆwÐ-¨tÓ4Ð@Ø&*ˆÔ#ð ”C×%Ñ%Ò%­lØ'ˆÔØ!%ˆÕà!&ˆÔØ'ˆÔà*/€GÔ'àœ"Ÿ*™*Ñ$ÜŸ™×*Ñ*¬2¯:©:¯>©>¸/Ó+JÓK‰àˆÙØ"/ˆÔà€Nr   c                 ó   — y ©Nr&   ©ÚsockÚkeyfileÚcertfiler   Úca_certsÚserver_hostnamer~   r€   Ússl_contextÚca_cert_dirÚkey_passwordÚca_cert_dataÚ
tls_in_tlss                r   Ússl_wrap_socketr“   K  s   € ð r   c                 ó   — y r‡   r&   rˆ   s                r   r“   r“   ]  s   € ð (+r   c                ó¤  — |}|€t        |||¬«      }|s|	s|r	 |j                  ||	|«       n|€t	        |d«      r|j                  «        |r|
€t        |«      rt        d«      ‚|r(|
€|j                  ||«       n|j                  |||
«       |j                  t        «       t        | |||«      }|S # t        $ r}t        |«      |‚d}~ww xY w)a´  
    All arguments except for server_hostname, ssl_context, tls_in_tls, ca_cert_data and
    ca_cert_dir have the same meaning as they do when using
    :func:`ssl.create_default_context`, :meth:`ssl.SSLContext.load_cert_chain`,
    :meth:`ssl.SSLContext.set_ciphers` and :meth:`ssl.SSLContext.wrap_socket`.

    :param server_hostname:
        When SNI is supported, the expected hostname of the certificate
    :param ssl_context:
        A pre-made :class:`SSLContext` object. If none is provided, one will
        be created using :func:`create_urllib3_context`.
    :param ciphers:
        A string of ciphers we wish the client to support.
    :param ca_cert_dir:
        A directory containing CA certificates in multiple separate files, as
        supported by OpenSSL's -CApath flag or the capath argument to
        SSLContext.load_verify_locations().
    :param key_password:
        Optional password if the keyfile is encrypted.
    :param ca_cert_data:
        Optional string containing CA certificates in PEM format suitable for
        passing as the cadata parameter to SSLContext.load_verify_locations()
    :param tls_in_tls:
        Use SSLTransport to wrap the existing socket.
    N)r€   Úload_default_certsz5Client private key is encrypted, password is required)r…   Úload_verify_locationsÚOSErrorr   Úhasattrr–   Ú_is_key_file_encryptedÚload_cert_chainÚset_alpn_protocolsÚALPN_PROTOCOLSÚ_ssl_wrap_socket_impl)r‰   rŠ   r‹   r   rŒ   r�   r~   r€   rŽ   r�   r�   r‘   r’   rƒ   rO   Ússl_socks                   r   r“   r“   o  så   € ðP €GØ€ô )¨°iÈÔQˆá‘;¡,ð	%Ø×)Ñ)¨(°KÀÕNð 
Ð	¤¨Ð2FÔ!Gà×"Ñ"Ô$ñ
 �<Ð'Ô,BÀ7Ô,KÜÐNÓOÐOáØÐØ×#Ñ# H¨gÕ6à×#Ñ# H¨g°|ÔDà×Ñœ~Ô.ä$ T¨7°JÀÓP€HØ€Oøô- ò 	%Ü˜1“+ 1Ð$ûð	%ús   šB5 Â5	CÂ>C
Ã
Cc                ó®   — t        | t        «      r| j                  d«      } t        t	        j
                  | «      xs t        j
                  | «      «      S )zæDetects whether the hostname given is an IPv4 or IPv6 address.
    Also detects IPv6 addresses with Zone IDs.

    :param str hostname: Hostname to examine.
    :return: True if the hostname is an IP address, False otherwise.
    Úascii)rT   ÚbytesÚdecodeÚboolr   Úmatchr
   )Úhostnames    r   Úis_ipaddressr§   ¹  sA   € ô �(œEÔ"à—?‘? 7Ó+ˆÜ”—‘˜xÓ(ÒTÔ,D×,JÑ,JÈ8Ó,TÓUÐUr   c                óp   — t        | «      5 }|D ]  }d|v sŒ ddd«       y 	 ddd«       y# 1 sw Y   yxY w)z*Detects if a key file is encrypted or not.Ú	ENCRYPTEDNTF)Úopen)Úkey_fileÚfÚlines      r   rš   rš   Æ  sI   € ä	ˆh‹ð ˜1Øò 	ˆDà˜dÒ"Ø÷	ð ñ	÷ð ÷ð ús   Œ
,—,¡,¬5c                ó’   — |r3t         st        d«      ‚t        j                  |«       t        | ||«      S |j                  | |¬«      S )Nz0TLS in TLS requires support for the 'ssl' module)r�   )r   r   Ú$_validate_ssl_context_for_tls_in_tlsÚwrap_socket)r‰   rŽ   r’   r�   s       r   rž   rž   Ñ  sO   € ñ Ýä(ØBóð ô 	×9Ñ9¸+ÔFÜ˜D +¨Ó?Ð?à×"Ñ" 4¸Ð"ÓIÐIr   )r   r    Úreturnr¤   )rJ   zbytes | NonerK   r    r±   ÚNone)rX   úNone | int | strr±   r   )rX   r³   r±   r^   )NNNNNNN)r~   ú
int | Noner   r´   rq   r´   r€   ú
str | Noner�   r´   r‚   r´   rt   r´   r±   ússl.SSLContext)............)r‰   úsocket.socketrŠ   rµ   r‹   rµ   r   r´   rŒ   rµ   r�   rµ   r~   r´   r€   rµ   rŽ   ússl.SSLContext | Noner�   rµ   r�   rµ   r‘   úNone | str | bytesr’   ztyping.Literal[False]r±   zssl.SSLSocket)r‰   r·   rŠ   rµ   r‹   rµ   r   r´   rŒ   rµ   r�   rµ   r~   r´   r€   rµ   rŽ   r¸   r�   rµ   r�   rµ   r‘   r¹   r’   r¤   r±   ú ssl.SSLSocket | SSLTransportType)NNNNNNNNNNNF)r¦   zstr | bytesr±   r¤   )r«   r    r±   r¤   r‡   )
r‰   r·   rŽ   r¶   r’   r¤   r�   rµ   r±   rº   )CÚ
__future__r   ÚhashlibrG   ry   Úsocketrr   r\   rk   Úbinasciir   rE   r   Ú
exceptionsr   r   Úurlr
   r   r4   r   r*   ru   r�   Útupler^   r    Ú_TYPE_VERSION_INFOrU   rB   r   ÚTYPE_CHECKINGrV   r   r   ÚssltransportÚSSLTransportTyper   r(   r%   r)   r+   r,   r-   r.   r/   r0   r1   r2   r3   r5   ÚPROTOCOL_SSLv23ÚattrÚAttributeErrorÚImportErrorÚUnionr¢   Ú_TYPE_PEER_CERT_RETrQ   rZ   r_   r…   Úoverloadr“   r§   rš   rž   )ÚlengthÚ	algorithms   00r   ú<module>rÏ      sÕ  ðÞ "ã Û Û 	Û Û 
Û Û Ý +Ý ç 9ß 3à€
Ø€Ø#Ð Ø€Ø�€à˜3  S¨#¨sÐ2Ñ3Ð ð
 I÷áˆ�	ð ‰G�G˜Y¨Ó-Ñ-ó€ðØðà	óð 
×ÒÝÝ å>ô 9°Eõ ð /1Ð ˜^Ó 0ð.Û÷÷ ÷ õ ð  #€Oñ #Ñ+SØô,ð ',Ð#ð 0ò ˆð	ÙLSØ˜DóMÐ'©°°yÀÀÐ5GÓ(HÒIðõ +ð —l‘lÐ#=¸uÀdÐ#JÑKÐ ó"
óJó.ð" #Ø ØØØ&*Ø&*Ø#ðPØðPàðPð ðPð ð	Pð
 $ðPð $ðPð ðPð óPðf ‡�ð ØØØØ"%Ø!ØØ),Ø!Ø"Ø'*Ø(+ðØ
ðàðð ðð ð	ð
 ðð  ðð ðð ðð 'ðð ðð ðð %ðð &ðð òó ðð" ‡�ð ØØØØ"%Ø!ØØ),Ø!Ø"Ø'*Øð+Ø
ð+àð+ð ð+ð ð	+ð
 ð+ð  ð+ð ð+ð ð+ð 'ð+ð ð+ð ð+ð %ð+ð ð+ð &ò+ó ð+ð& ØØ ØØ"&Ø"ØØ)-Ø"Ø#Ø'+ØðGØ
ðGàðGð ðGð ð	Gð
 ðGð  ðGð ðGð ðGð 'ðGð ðGð ðGð %ðGð ðGð &óGóT
Vóð #'ð	JØ
ðJàðJð ðJð  ð	Jð
 &ôJùóqøðB ò 	Úð	ûð ò ØÐØ€LØ€KØ€KØ%&Ð&€O�lØÐØ 'ÐØÓðús<   ÁG5Â.5H Ã$G;Ã:H Ç;HÈ H ÈHÈH ÈH"È!H"