
    F2ji                        U d Z 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	 dZ
dZded	<   d
d
d
d
d
ddddddddZd
dddZddZddZddZddZdS ) z>Internal resolution helpers for :mod:`urllib3.contrib.anytls`.    )annotationsN)
ModuleType)TupleURLLIB3_FUTURE_SSL_BACKEND)rtlsutlssslzTuple[str, ...]_DEFAULT_ORDERr   r   r	   )r   rustlszaws-lcaws_lcawslcr   	boringsslz
boring-ssl
boring_sslr	   stdlib
stdlib_sslvalue
str | Nonereturn	list[str]c                <   g }| rt|                                                                  }|t          v r!|                    t          |                    n$|r"t	          j        d| dt           dd           t          D ]}||vr|                    |           |S )zBuild the ordered list of backends to attempt.

    The user-requested backend (if any) is tried first, then the remaining
    defaults in the default order, de-duplicated.
    zUnknown value z for environment variable zI; falling back to default backend resolution order (rtls -> utls -> ssl).   )
stacklevel)striplower
_TOKEN_MAPappendwarningswarnENV_VARr
   )r   ordertokennames       g/home/thesage/.hermes/hermes-agent/venv/lib/python3.11/site-packages/urllib3/contrib/anytls/_backend.py_parse_prefr$   (   s     E 
##%%JLLE*++++ 	M0 0 00 0 0 	      uLLL    r"   strModuleType | Nonec                |    	 t          j        t          |                    S # t          $ r Y d S t          $ r Y d S w xY w)N)	importlibimport_module_IMPORT_NAMEImportError	Exception)r"   s    r#   _try_importr.   C   sZ    &|D'9:::   tt    tts   ! 
;	;;backendtype | Nonec                "   | dv r7	 t          j        |           }t          |dd          S # t          $ r Y dS w xY w	 t          j        d          }t          |dd          }||S n# t          $ r Y nw xY w	 ddlm} |S # t          $ r Y dS w xY w)zBest-effort import of the Certificate type used for peer-cert chain
    extraction. rtls/utls expose it directly; for stdlib ssl, fall back to the
    private ``_ssl.Certificate`` (used by ``backend/hface.py``).
    )r   r   CertificateN_sslr   )r2   )r)   r*   getattrr,   _cffi_ssl._stdssl.certificater2   )r/   modr3   certr2   s        r#   _load_certificater8   N   s    
 """	)'22C3t444 	 	 	44	&v..t]D11K    ======   tts/   $+ 
99(A' '
A43A48B   
BB?tuple[ModuleType | None, ModuleType | None, str, object | None]c                 .   	 t          j        d          } n# t          $ r d} Y nw xY wt          t          j                            t                              }d}d}|D ]}t          |          }||}|} n|d| ddfS t          |          }|| ||fS )z;Resolve and return (ssl, stdlib_ssl, BACKEND, Certificate).r	   Nnone)
r)   r*   r,   r$   osenvirongetr   r.   r8   )r   r    chosen_name
chosen_modr"   r6   certificates          r#   _resolverB   j   s    (1(?(F(F

   


 
w//00EK$(J  $?KJE 
 Z--#K00Kz;;;s    &&)r   r   r   r   )r"   r&   r   r'   )r/   r&   r   r0   )r   r9   )__doc__
__future__r   r)   r<   r   typesr   typingr   r   r
   __annotations__r   r+   r$   r.   r8   rB    r%   r#   <module>rI      s   D D D " " " " " "     				             
& #: 9 9 9 9  
"     6      8< < < < < <r%   