o
    .j                     @  s   d dl m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 ddlmZmZ ddlmZ d	d
lmZmZmZmZmZ G dd dZG dd deZe Z																			d2d3d0d1ZdS )4    )annotationsN)Path   )sslIS_NONSTDLIB)load_cert_chain)AsyncSocketSSLAsyncSocket)SSLError   )ALPN_PROTOCOLS_CacheableSSLContext_is_key_file_encryptedcreate_urllib3_context_KnownCallerc                   @  s    e Zd ZdddZd	ddZdS )
	DummyLockreturnc                 C  s   | S N )selfr   r   T/home/thesage/.local/lib/python3.10/site-packages/urllib3_future/util/_async/ssl_.py	__enter__      zDummyLock.__enter__Nonec                 C  s   d S r   r   )r   exc_typeexc_valexc_tbr   r   r   __exit__   r   zDummyLock.__exit__N)r   r   )r   r   )__name__
__module____qualname__r   r   r   r   r   r   r      s    
r   c                      s$   e Zd ZdZdd fddZ  ZS )	_NoLock_CacheableSSLContextzrDeprecated: we no longer avoid the lock in the async part because we want to allow many loop within many thread...    maxsize
int | Nonec                   s   t  j|d t | _d S )N)r#   )super__init__r   _lock)r   r#   	__class__r   r   r&   !   s   z$_NoLock_CacheableSSLContext.__init__)r"   )r#   r$   )r   r   r    __doc__r&   __classcell__r   r   r(   r   r!      s    r!   Fsockr   keyfile
str | Nonecertfile	cert_reqsr$   ca_certsserver_hostnamessl_versionciphersssl_contextssl.SSLContext | Noneca_cert_dirkey_passwordca_cert_dataNone | str | bytes
tls_in_tlsboolalpn_protocolslist[str] | Nonecertdatastr | bytes | Nonekeydatacheck_hostnamebool | Nonessl_minimum_versionssl_maximum_versionech_config_listbytes | Noner   r	   c                   s  |}|du}t ||du r|nt||||||	du r|	nt|	||||
|tdd||| |s7t  nd}|du r+|du rMt|||tj||d}|durT||_	|dur[||_
|sa|	sa|r|rlt|trl| }z	|||	| W n4 ty } zt||d}~ww t|drz| }d|vs|d s|  W n ttfy   Y nw |r|
du rt|rtd|r|
du r||| n@||||
 n8|r|rtr||||
 n(z	t||||
 W n tjy } ztd| dt W Y d}~nd}~ww z
||pt  W n
 ty   Y nw |r"|!| |s*t "| n|}W d   n	1 s8w   Y  |rKt|d	rK|#|}| j$||d
I dH S )aJ  
    All arguments except for server_hostname, ssl_context, and ca_cert_dir have
    the same meaning as they do when using :func:`ssl.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:
        No-op in asynchronous mode. Call wrap_socket of the SSLAsyncSocket later.
    :param alpn_protocols:
        Manually specify other protocols to be announced during tls handshake.
    :param certdata:
        Specify an in-memory client intermediary certificate for mTLS.
    :param keydata:
        Specify an in-memory client intermediary key for mTLS.
    NSSLKEYLOGFILE)r4   	caller_idrD   rE   load_default_certsx509_caz5Client private key is encrypted, password is requiredzdPassing in-memory client/intermediary certificate for mTLS is unsupported on your platform. Reason: zr. It will be picked out if you upgrade to a QUIC connection or if you install alternative ssl backend (rtls/utls).set_ech_configs)r2   )%_SSLContextCachelockr   osgetenvgetr   r   NIQUESTSverify_moderB   
isinstancebytesdecodeload_verify_locationsOSErrorr
   hasattrcert_store_statsrJ   AttributeErrorNotImplementedErrorr   r   r   _ctx_load_cert_chainioUnsupportedOperationwarningswarnUserWarningset_alpn_protocolsr   set_cipherssaverL   wrap_socket)r,   r-   r/   r0   r1   r2   r3   r4   r5   r7   r8   r9   r;   r=   r?   rA   rB   rD   rE   rF   contextcache_disabled
cached_ctxestore_statsr   r   r   ssl_wrap_socket)   s   3

	


	


c
rl   )NNNNNNNNNNNFNNNNNNN)*r,   r   r-   r.   r/   r.   r0   r$   r1   r.   r2   r.   r3   r$   r4   r.   r5   r6   r7   r.   r8   r.   r9   r:   r;   r<   r=   r>   r?   r@   rA   r@   rB   rC   rD   r$   rE   r$   rF   rG   r   r	   )
__future__r   r^   rO   r`   pathlibr   contrib.anytlsr   r   contrib.imccr   r]   contrib.ssar   r	   
exceptionsr
   ssl_r   r   r   r   r   r   r!   rM   rl   r   r   r   r   <module>   sB    	