o
    jNE                  	   @  s  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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 dD Zd]ddZejrxd dlmZ d dlmZ ddl mZ! G dd deddZ"i Z#de$d< zQd dlZd dlm%Z%mZm&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.mZm/Z/ e)Z0eree(sdZdD ]Z1ze2e/e1e#e2ede1 < W q e3y   Y qw ddl mZ W n e4y   dZ&dZ'd Z-d!Z.d Z0Z)d"Z*d#Z+d$Z,Y nw ej5de6df Z7d^d)d*Z8d_d.d/Z9d`d1d2Z:							dadbd=d>Z;ej<	?	?	?	?	?	?	?	?	?	?	?	?dcdddOdPZ=ej<	?	?	?	?	?	?	?	?	?	?	?	?dcdedRdPZ=												dfdedSdPZ=dgdVdWZ>dhdYdZZ?	didjd[d\Z@dS )k    )annotationsN)	unhexlify   )ProxySchemeUnsupportedSSLError   )_BRACELESS_IPV6_ADDRZ_RE_IPV4_REFzhttp/1.1c                 C  s   i | ]\}}|t t|d qS N)getattrhashlib).0length	algorithm r   R/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/urllib3/util/ssl_.py
<dictcomp>   s    r   ))    md5)(   sha1)@   sha256openssl_versionstrreturnboolc                 C  s   |  d}|S )NzOpenSSL )
startswith)r   
is_opensslr   r   r   (_is_has_never_check_common_name_reliable   s   
r   )
VerifyMode)	TypedDict)SSLTransportc                   @  s&   e Zd ZU ded< ded< ded< dS )_TYPE_PEER_CERT_RET_DICTztuple[tuple[str, str], ...]subjectAltNamez'tuple[tuple[tuple[str, str], ...], ...]subjectr   ZserialNumberN)__name__
__module____qualname____annotations__r   r   r   r   r#   .   s   
 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   certbytes | NonefingerprintNonec                 C  s   | du rt d|dd }t|}|tvrt d| t|}|du r/t d| t| }||  }t	
||sNt d| d|  d	dS )
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digesthmaccompare_digesthex)r>   r@   digest_lengthhashfuncfingerprint_bytescert_digestr   r   r   assert_fingerprintk   s$   

rS   	candidateNone | int | strr    c                 C  s@   | du rt S t| trtt| d}|du rttd|  }|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   r   sslrT   resr   r   r   resolve_cert_reqs   s   
r[   intc                 C  sH   | du rt S t| tr"tt| d}|du rttd|  }tt|S | S )z 
    like resolve_cert_reqs
    Nr<   )r1   rW   r   r   rX   typingcastr\   rY   r   r   r   resolve_ssl_version   s   
r_   ssl_version
int | None	cert_reqsoptionsciphers
str | Nonessl_minimum_versionssl_maximum_versionverify_flagsssl.SSLContextc           	      C  s  t du rtd| dttfvr1|dus|durtdt| tj}t| tj	}t
jdtdd t t}|dur=||_ntj|_|durH||_|rO|| |du rVtjn|}|du rnd}|tO }|tO }|tO }|tO }| j|O  _|du rd}tjdkr|tO }|tO }| j|O  _t|d	ddurd
|_|tjkrts||_ d
|_!nd|_!||_ d|_"dt#j$v rt#j%&t#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)(r7   	TypeErrorr1   r2   
ValueErrorr+   rI   r8   MINIMUM_SUPPORTEDMAXIMUM_SUPPORTEDwarningswarnFutureWarningminimum_versionr;   maximum_versionset_ciphersrX   r,   r5   r6   r.   r/   rc   sysversion_infor3   r4   rh   r   rn   IS_PYOPENSSLverify_modecheck_hostnamehostname_checks_common_nameosenvironpath
expandvarskeylog_filename)	r`   rb   rc   rd   rf   rg   rh   contextsslkeylogfiler   r   r   create_urllib3_context   sl   '


r   .socksocket.socketkeyfilecertfileca_certsserver_hostnamessl_contextssl.SSLContext | Noneca_cert_dirkey_passwordca_cert_dataNone | str | bytes
tls_in_tlstyping.Literal[False]ssl.SSLSocketc                 C     d S r
   r   r   r   r   rb   r   r   r`   rd   r   r   r   r   r   r   r   r   ssl_wrap_socketG     r    ssl.SSLSocket | SSLTransportTypec                 C  r   r
   r   r   r   r   r   r   Y  r   c              
   C  s   |}|du rt |||d}|s|	s|r.z	|||	| W n ty- } zt||d}~ww |du r;t|dr;|  |rI|
du rIt|rItd|r]|
du rV||| n||||
 |t	 t
| |||}|S )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)rd   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   rb   r   r   r`   rd   r   r   r   r   r   r   essl_sockr   r   r   r   k  s*   (

hostnamestr | bytesc                 C  s,   t | tr
| d} tt| pt| S )zDetects 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)rW   bytesdecoder   r	   matchr   )r   r   r   r   is_ipaddress  s   

r   key_filec                 C  sR   t | }|D ]}d|v r W d   dS qW d   dS 1 s"w   Y  dS )z*Detects if a key file is encrypted or not.	ENCRYPTEDNTF)open)r   fliner   r   r   r     s   

r   c                 C  s4   |rt stdt | t | ||S |j| |d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   r   r   r   r     s   
r   )r   r   r   r   )r>   r?   r@   r   r   rA   )rT   rU   r   r    )rT   rU   r   r\   )NNNNNNN)r`   ra   rb   ra   rc   ra   rd   re   rf   ra   rg   ra   rh   ra   r   ri   )............)r   r   r   re   r   re   rb   ra   r   re   r   re   r`   ra   rd   re   r   r   r   re   r   re   r   r   r   r   r   r   )r   r   r   re   r   re   rb   ra   r   re   r   re   r`   ra   rd   re   r   r   r   re   r   re   r   r   r   r   r   r   )NNNNNNNNNNNF)r   r   r   r   )r   r   r   r   r
   )
r   r   r   ri   r   r   r   re   r   r   )A
__future__r   r   rL   r   socketrz   r]   rt   binasciir   
exceptionsr   r   urlr   r	   r7   r"   r-   r|   r   tupler\   r   _TYPE_VERSION_INFOrH   r   TYPE_CHECKINGrX   r    r!   ssltransportZSSLTransportTyper#   r+   r)   r,   r.   r/   r0   r1   r2   r3   r4   r5   r6   r8   PROTOCOL_SSLv23attrr   AttributeErrorImportErrorUnionr   _TYPE_PEER_CERT_RETrS   r[   r_   r   overloadr   r   r   r   r   r   r   r   <module>   s    

<

"
 
J
