o
    ïT·jW,  ã                   @   s�  U 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Zd dlZddl	m
Z
mZmZmZ e ¡ dkr@ddlmZmZ ne ¡ dkrOddlmZmZ nddlmZmZ ejr`d dlmZ eeB eje B eje B Zejed< eeB ejg eeB f B Zejed	< ddd„Zddd„Z G dd„ deƒZ!ej"dkr©dej#d
e$e fdd„Z%ndej#d
e$e fdd„Z%dej&ej#B dedB d
dfdd„Z'dS )é    Né   )Ú_original_SSLContextÚ_original_super_SSLContextÚ#_truststore_SSLContext_dunder_classÚ"_truststore_SSLContext_super_classÚWindows)Ú_configure_contextÚ_verify_peercerts_implÚDarwin)ÚBufferÚ_StrOrBytesPathÚ_PasswordTypeÚreturnc                  C   s–   t tdtƒ zddlm  m}  t | dtƒ W n	 ty    Y nw zddl}t|j	ddƒ}|dur>t |j	dttj
ƒƒ W dS W dS  tyJ   Y dS w )zqInjects the :class:`truststore.SSLContext` into the ``ssl``
    module by replacing :class:`ssl.SSLContext`.
    Ú
SSLContextr   NÚ_preloaded_ssl_context)ÚsetattrÚsslr   Úurllib3.util.ssl_ÚutilÚssl_ÚImportErrorÚrequests.adaptersÚgetattrÚadaptersÚPROTOCOL_TLS_CLIENT)Úurllib3_sslÚrequestsÚpreloaded_context© r   úR/home/dinkstrade/pdmp-scanner/venv/lib/python3.10/site-packages/truststore/_api.pyÚinject_into_ssl"   s(   ÿ
ýÿÿr    c                  C   s@   t tdtƒ zddlm  m}  t| _W dS  ty   Y dS w )z@Restores the :class:`ssl.SSLContext` class to its original stater   r   N)r   r   r   r   r   r   r   r   )r   r   r   r   Úextract_from_sslB   s   ÿr!   c                   @   s   e Zd ZdZedefdd„ƒZd]deddfdd„Z			
	
		d^de	j	de
de
de
dedB dejdB dejfdd„Z				d_dejdejde
dedB dejdB dejfdd„Z			d`deeB eje B eje B dB deeB eje B eje B dB dejeddf ddfdd„Z		dadededB dedB ddfd d!„Zejjfd"ejddfd#d$„Zd%eje ddfd&d'„Z d(eje ddfd)d*„Z!d+eddfd,d-„Z"dej#fd.d/„Z$de%eef fd0d1„Z&de%eef fd2d3„Z'dbd4d5„Z(ej)	6dcd7ej*d	 de+ej# fd8d9„ƒZ,ej)dcd7ej*d
 de+e fd:d9„ƒZ,ej)dcd7e
dej#fd;d9„ƒZ,ddd7e
de+ej# e+e B fd<d9„Z,ede
fd=d>„ƒZ-e-j.d?e
ddfd@d>„ƒZ-ede
fdAdB„ƒZ/e/j.d?e
ddfdCdB„ƒZ/edefdDdE„ƒZ0e0j.d?eddfdFdE„ƒZ0edej1fdGdH„ƒZ2e2j.d?ej1ddfdIdH„ƒZ2edej1fdJdK„ƒZ3e3j.d?ej1ddfdLdK„ƒZ3edej4fdMdN„ƒZ5e5j.d?ej4ddfdOdN„ƒZ5ede
fdPdQ„ƒZ6e6j.d?e
ddfdRdQ„ƒZ6edej7fdSdT„ƒZ8edefdUdV„ƒZ9edej:fdWdX„ƒZ;e;j.d?ej:ddfdYdX„ƒZ;edej<fdZd[„ƒZ=e=j.d?ej<ddfd\d[„ƒZ=dS )er   z=SSLContext API that uses system certificates on all platformsr   c                 C   s   t ptS ©N)r   r   ©Úselfr   r   r   Ú	__class__P   s   zSSLContext.__class__NÚprotocolc                 C   s2   t |ƒ| _t ¡ | _G dd„ dtjƒ}|| j_d S )Nc                       s   e Zd Zd‡ fdd„Z‡  ZS )z0SSLContext.__init__.<locals>.TruststoreSSLObjectr   Nc                    s   t ƒ  ¡ }t| | jd� |S )N©Úserver_hostname)ÚsuperÚdo_handshakeÚ_verify_peercertsr(   )r$   Úret©r%   r   r   r*   `   s   
z=SSLContext.__init__.<locals>.TruststoreSSLObject.do_handshake©r   N)Ú__name__Ú
__module__Ú__qualname__r*   Ú__classcell__r   r   r-   r   ÚTruststoreSSLObject[   s    r3   )r   Ú_ctxÚ	threadingÚLockÚ	_ctx_lockr   Ú	SSLObjectÚsslobject_class)r$   r&   r3   r   r   r   Ú__init__W   s   


zSSLContext.__init__FTÚsockÚserver_sideÚdo_handshake_on_connectÚsuppress_ragged_eofsr(   Úsessionc           	   	   C   s¢   t  ¡ �/}| j� | t| jƒ¡ W d   ƒ n1 sw   Y  | jj||||||d�}W d   ƒ n1 s6w   Y  z	t||d� W |S  tyP   | 	¡  ‚ w )N)r<   r(   r=   r>   r?   r'   )
Ú
contextlibÚ	ExitStackr7   Úenter_contextr   r4   Úwrap_socketr+   Ú	ExceptionÚclose)	r$   r;   r<   r=   r>   r(   r?   ÚstackÚssl_sockr   r   r   rC   g   s(   
ÿúüýþzSSLContext.wrap_socketÚincomingÚoutgoingc                 C   sF   t | jƒ� | jj|||||d�}W d   ƒ |S 1 sw   Y  |S )N)r(   r<   r?   )r   r4   Úwrap_bio)r$   rH   rI   r<   r(   r?   Ússl_objr   r   r   rJ   ˆ   s   û
ÿøzSSLContext.wrap_bioÚcafileÚcapathÚcadatar   c                 C   ó   | j j|||d�S )N)rL   rM   rN   )r4   Úload_verify_locations)r$   rL   rM   rN   r   r   r   rP   š   ó   ÿz SSLContext.load_verify_locationsÚcertfileÚkeyfileÚpasswordc                 C   rO   )N)rR   rS   rT   )r4   Úload_cert_chain)r$   rR   rS   rT   r   r   r   rU   ¤   rQ   zSSLContext.load_cert_chainÚpurposec                 C   ó   | j  |¡S r"   )r4   Úload_default_certs)r$   rV   r   r   r   rX   ®   s   zSSLContext.load_default_certsÚalpn_protocolsc                 C   rW   r"   )r4   Úset_alpn_protocols)r$   rY   r   r   r   rZ   ³   ó   zSSLContext.set_alpn_protocolsÚnpn_protocolsc                 C   rW   r"   )r4   Úset_npn_protocols)r$   r\   r   r   r   r]   ¶   r[   zSSLContext.set_npn_protocolsÚ_SSLContext__cipherlistc                 C   rW   r"   )r4   Úset_ciphers)r$   r^   r   r   r   r_   ¹   r[   zSSLContext.set_ciphersc                 C   ó
   | j  ¡ S r"   )r4   Úget_ciphersr#   r   r   r   ra   ¼   ó   
zSSLContext.get_ciphersc                 C   r`   r"   )r4   Úsession_statsr#   r   r   r   rc   ¿   rb   zSSLContext.session_statsc                 C   ó   t ƒ ‚r"   ©ÚNotImplementedErrorr#   r   r   r   Úcert_store_statsÂ   ó   zSSLContext.cert_store_statsc                 C   s   | j  ¡  d S r"   )r4   Úset_default_verify_pathsr#   r   r   r   ri   Å   s   z#SSLContext.set_default_verify_paths.Úbinary_formc                 C   ó   d S r"   r   ©r$   rj   r   r   r   Úget_ca_certsÈ   s   zSSLContext.get_ca_certsc                 C   rk   r"   r   rl   r   r   r   rm   Í   ó   c                 C   rk   r"   r   rl   r   r   r   rm   Ð   rn   c                 C   rd   r"   re   rl   r   r   r   rm   Ó   rh   c                 C   ó   | j jS r"   ©r4   Úcheck_hostnamer#   r   r   r   rq   Ö   ó   zSSLContext.check_hostnameÚvaluec                 C   ó   || j _d S r"   rp   ©r$   rs   r   r   r   rq   Ú   ó   c                 C   ro   r"   ©r4   Úhostname_checks_common_namer#   r   r   r   rx   Þ   rr   z&SSLContext.hostname_checks_common_namec                 C   rt   r"   rw   ru   r   r   r   rx   â   rv   c                 C   ro   r"   ©r4   Úkeylog_filenamer#   r   r   r   rz   æ   rr   zSSLContext.keylog_filenamec                 C   rt   r"   ry   ru   r   r   r   rz   ê   rv   c                 C   ro   r"   )r4   Úmaximum_versionr#   r   r   r   r{   î   rr   zSSLContext.maximum_versionc                 C   ó   t j | j|¡ d S r"   )r   r{   Ú__set__r4   ru   r   r   r   r{   ò   ó   ÿc                 C   ro   r"   )r4   Úminimum_versionr#   r   r   r   r   ø   rr   zSSLContext.minimum_versionc                 C   r|   r"   )r   r   r}   r4   ru   r   r   r   r   ü   r~   c                 C   ro   r"   )r4   Úoptionsr#   r   r   r   r€     rr   zSSLContext.optionsc                 C   r|   r"   )r   r€   r}   r4   ru   r   r   r   r€     r~   c                 C   ro   r"   ©r4   Úpost_handshake_authr#   r   r   r   r‚     rr   zSSLContext.post_handshake_authc                 C   rt   r"   r�   ru   r   r   r   r‚     rv   c                 C   ro   r"   )r4   r&   r#   r   r   r   r&     rr   zSSLContext.protocolc                 C   ro   r"   )r4   Úsecurity_levelr#   r   r   r   rƒ     rr   zSSLContext.security_levelc                 C   ro   r"   )r4   Úverify_flagsr#   r   r   r   r„     rr   zSSLContext.verify_flagsc                 C   r|   r"   )r   r„   r}   r4   ru   r   r   r   r„      r~   c                 C   ro   r"   )r4   Úverify_moder#   r   r   r   r…   &  rr   zSSLContext.verify_modec                 C   r|   r"   )r   r…   r}   r4   ru   r   r   r   r…   *  r~   r"   )FTTNN)FNN)NNN)NNr.   ).)F)>r/   r0   r1   Ú__doc__ÚpropertyÚtyper%   Úintr:   ÚsocketÚboolÚstrr   Ú
SSLSessionÚ	SSLSocketrC   Ú	MemoryBIOr8   rJ   ÚbytesÚosÚPathLikeÚtypingÚUnionrP   r   r   rU   ÚPurposeÚSERVER_AUTHrX   ÚIterablerZ   r]   r_   ÚAnyra   Údictrc   rg   ri   ÚoverloadÚLiteralÚlistrm   rq   Úsetterrx   rz   Ú
TLSVersionr{   r   ÚOptionsr€   r‚   Ú
_SSLMethodr&   rƒ   ÚVerifyFlagsr„   Ú
VerifyModer…   r   r   r   r   r   M   s   ùþýüûúù
ø%úþýüûú
ùüþýü
ûüþýü
ûÿÿ
þ
ÿÿþ "r   )é   é   Ússlobjc                 C   ó   |   ¡ pd}dd„ |D ƒS )Nr   c                 S   s&   g | ]}t |tƒr|n| tj¡‘qS r   )Ú
isinstancer�   Úpublic_bytesÚ_sslÚENCODING_DER©Ú.0Úcertr   r   r   Ú
<listcomp>8  s    ÿÿú/_get_unverified_chain_bytes.<locals>.<listcomp>©Úget_unverified_chain©r¥   Úunverified_chainr   r   r   Ú_get_unverified_chain_bytes6  s   þr´   c                 C   r¦   )Nr   c                 S   s   g | ]}|  tj¡‘qS r   )r¨   r©   rª   r«   r   r   r   r®   A  s    r¯   r°   r²   r   r   r   r´   ?  s   Úsock_or_sslobjr(   c                 C   sR   | }zt |dƒs|j}t |dƒrW n	 ty   Y nw t|ƒ}t| j||d� dS )z{
    Verifies the peer certificates from an SSLSocket or SSLObject
    against the certificates in the OS trust store.
    r±   r'   N)ÚhasattrÚ_sslobjÚAttributeErrorr´   r	   Úcontext)rµ   r(   r¥   Ú
cert_bytesr   r   r   r+   D  s   

ÿ€ÿ
ÿr+   r.   )(r@   r‘   ÚplatformrŠ   r   Úsysr5   r“   r©   Ú_ssl_constantsr   r   r   r   ÚsystemÚ_windowsr   r	   Ú_macosÚ_opensslÚTYPE_CHECKINGÚtyping_extensionsr   rŒ   r�   r’   r   Ú	TypeAliasÚ__annotations__ÚCallabler   r    r!   r   Úversion_infor8   rœ   r´   rŽ   r+   r   r   r   r   Ú<module>   sB   
 &$

  
h	
ÿÿþ