
    i@                       S r SSKJr  SSKrSSKrSSKrSSK	r
SSKJr  SSKJr  SSKJrJrJrJrJrJr  SSKJr  SSKrSSKJr  SSKJr  SS	K J!r"  SS
K J#r#  SSK$J%r%  SSK&J'r'  SSK(J)r*  SSK(J+r+  SSK,J-r-  \(       a  SSKJ.r.  \" S5      r/ SSK0r0Sr1\Rf                  r4\Rj                  r5\Rl                  r6\Rn                  r7\8" \SS5      r9Sr:Sr;\Rx                  r=\R|                  \R~                  \R                  \R                  \R                  \R                  \R                  -  0rD\DR                  5        V Vs0 s H  u  pX_M	     snn rFSS jrG\R                  \R                  \R                  4rK\R                  rL\R                  rM\R                  rNSS jrO " S S\R                  5      rQ " S S5      rR " S S5      rSg! \2 a    Sr1 GNFf = fs  snn f )zA CPython compatible SSLContext implementation wrapping PyOpenSSL's
context.

Due to limitations of the CPython asyncio.Protocol implementation for SSL, the async API does not support PyOpenSSL.
    )annotationsN)EINTR)
ip_address)TYPE_CHECKINGAnyCallableOptionalTypeVarUnion)SSL)crypto)ConfigurationError)_CertificateError)
_OCSPCache)_ocsp_callback)SocketChecker)_errno_from_exception)validate_boolean)
VerifyMode_TTFOP_NO_RENEGOTIATIONc                H     [        U 5        g! [        [        4 a     gf = f)NTF)_ip_address
ValueErrorUnicodeError)addresss    F/app/mltbenv/lib/python3.13/site-packages/pymongo/pyopenssl_context.py_is_ip_addressr   S   s)    G% s    !!c                     U R                   S:H  $ )z<Return True if the OpenSSL.SSL.SysCallError is a ragged EOF.)zUnexpected EOF)args)excs    r   _ragged_eofr#   c   s    88---    c                     ^  \ rS rSr      S	U 4S jjrS
S jrSU 4S jjrSU 4S jjrSU 4S jjrSSU 4S jjjr	Sr
U =r$ )_sslConnk   c                N   > [        5       U l        X0l        [        TU ]  X5        g N)_SocketCheckersocket_checkersuppress_ragged_eofssuper__init__)selfctxsockr,   	__class__s       r   r.   _sslConn.__init__l   s#     -.$8!#r$   c                   U R                  5       nU(       a  [        R                  " 5       n  U" U0 UD6$ ! [         Ga  nUS:X  a  UeU R	                  5       S:X  aF  U(       a3  [        R                  " 5       W-
  U:  a  [
        R                  " S5      S e[        S5      S e[        U[        R                  5      (       a  SnSnO([        U[        R                  5      (       a  SnSnOSnSnU R                  R                  XX5        U(       a3  [        R                  " 5       W-
  U:  a  [
        R                  " S5      S e S nAGM   S nAff = f)NTr   r    z	timed outz!Underlying socket has been closedF)
gettimeout_time	monotonicBLOCKING_IO_ERRORSfileno_sockettimeoutSSLError
isinstance_SSLWantReadErrorWantWriteErrorr+   select)	r/   callr!   kwargsr;   startr"   	want_read
want_writes	            r   _call_sslConn._callv   s   //#OO%ET,V,,% a<I;;=B&5??#4u#<w#F%ook:D"#FGTQc4#5#566 $I!&JT%8%899 %I!%J $I!%J##**4JPu0587B!//+6D@+s   7 EDEEc                @   > U R                   " [        TU ]  /UQ70 UD6$ r)   )rG   r-   do_handshake)r/   r!   rC   r2   s      r   rJ   _sslConn.do_handshake   s!    zz%'.@@@@r$   c                   >  U R                   " [        TU ]  /UQ70 UD6$ ! [        R                   a,  nU R
                  (       a  [        U5      (       a   S nAge S nAff = f)Nr$   )rG   r-   recvr>   SysCallErrorr,   r#   r/   r!   rC   r"   r2   s       r   rM   _sslConn.recv   sT    	::egl<T<V<<   	(([-=-=		   ! A!!AAA!c                   >  U R                   " [        TU ]  /UQ70 UD6$ ! [        R                   a,  nU R
                  (       a  [        U5      (       a   S nAge S nAff = fNr   )rG   r-   	recv_intor>   rN   r,   r#   rO   s       r   rT   _sslConn.recv_into   sU    	::eg/A$A&AA   	(([-=-=		rQ   c                  > [        U5      n[        U5      nSnXT:  a;   U R                  [        TU ]  X5S  U5      nUS::  a  [        S5      eXV-  nXT:  a  M:  g g ! [
         a  n[        U5      [        :X  a   S nAMd  e S nAff = f)Nr   zconnection closed)
memoryviewlenrG   r-   sendOSErrorr   _EINTR)	r/   bufflagsviewtotal_length
total_sentsentr"   r2   s	           r   sendall_sslConn.sendall   s    #3x
'zz%',[0A5I qy122J '  (-7s   A 
B%A?>A??B)r+   r,   )r0   z_SSL.Contextr1   zOptional[_socket.socket]r,   bool)rB   zCallable[..., _T]r!   r   rC   r   returnr   )r!   r   rC   r   re   None)r!   r   rC   r   re   bytes)r!   r   rC   r   re   int)r   )r\   rg   r]   rh   re   rf   )__name__
__module____qualname____firstlineno__r.   rG   rJ   rM   rT   rb   __static_attributes____classcell__)r2   s   @r   r&   r&   k   sC    $$ '$ #	$<A r$   r&   c                  "    \ rS rSrSrSS jrSrg)_CallbackData   z0Data class which is passed to the OCSP callback.c                >    S U l         S U l        [        5       U l        g r)   )trusted_ca_certscheck_ocsp_endpointr   ocsp_response_cacher/   s    r   r.   _CallbackData.__init__   s    BF37 #-< r$   )rt   ru   rs   Nre   rf   )ri   rj   rk   rl   __doc__r.   rm    r$   r   rp   rp      s
    :0r$   rp   c                  f   \ rS rSrSrSrSS jr\SS j5       rSS jr	SS jr
\" \	\
5      rSS jrSS	 jr\" \\5      rSS
 jrSS jr\" \\5      rSS jrSS jr\" \\5      r  S        S!S jjr S      S"S jjrS#S jrS$S jrS#S jrS#S jr     S%             S&S jjrSrg)'
SSLContext   zMA CPython compatible SSLContext implementation wrapping PyOpenSSL's
context.
)	_protocol_ctx_callback_data_check_hostnamec                    Xl         [        R                  " U R                   5      U l        [	        5       U l        SU l        SU R
                  l        U R                  R                  [        U R
                  S9  g )NT)callbackdata)
r~   r>   Contextr   rp   r   r   rt   set_ocsp_client_callbackr   )r/   protocols     r   r.   SSLContext.__init__   sZ    !LL0	+o#
 37/		**NI\I\*]r$   c                    U R                   $ )zXThe protocol version chosen when constructing the context.
This attribute is read-only.
)r~   rv   s    r   r   SSLContext.protocol   s    
 ~~r$   c                D    [         U R                  R                  5          $ )zWhether to try to verify other peers' certificates and how to
behave if verification fails. This attribute must be one of
ssl.CERT_NONE, ssl.CERT_OPTIONAL or ssl.CERT_REQUIRED.
)_REVERSE_VERIFY_MAPr   get_verify_moderv   s    r   __get_verify_modeSSLContext.__get_verify_mode   s    
 #499#<#<#>??r$   c                l                SS jnU R                   R                  [        U   U5        g)zSetter for verify_mode.c                    [        U5      $ r)   )rd   )_connobj_x509obj_errnum	_errdepthretcodes        r   _cb)SSLContext.__set_verify_mode.<locals>._cb   s     = r$   N)r   z_SSL.Connectionr   z_crypto.X509r   rh   r   rh   r   rh   re   rd   )r   
set_verify_VERIFY_MAP)r/   valuer   s      r   __set_verify_modeSSLContext.__set_verify_mode   sZ    	!%	!"	! 	! 		!
 	! 	!  			[/5r$   c                    U R                   $ r)   )r   rv   s    r   __get_check_hostnameSSLContext.__get_check_hostname   s    ###r$   c                (    [        SU5        Xl        g )Ncheck_hostname)r   r   r/   r   s     r   __set_check_hostnameSSLContext.__set_check_hostname  s    )51$r$   c                .    U R                   R                  $ r)   )r   rt   rv   s    r   __get_check_ocsp_endpoint$SSLContext.__get_check_ocsp_endpoint  s    ""666r$   c                <    [        SU5        XR                  l        g )N
check_ocsp)r   r   rt   r   s     r   __set_check_ocsp_endpoint$SSLContext.__set_check_ocsp_endpoint  s    u-27/r$   c                8    U R                   R                  S5      $ rS   )r   set_optionsrv   s    r   __get_optionsSSLContext.__get_options  s     yy$$Q''r$   c                L    U R                   R                  [        U5      5        g r)   )r   r   rh   r   s     r   __set_optionsSSLContext.__set_options  s     			c%j)r$   Nc                  ^ T(       a#  SU4S jjnU R                   R                  U5        U R                   R                  U5        U R                   R                  U=(       d    U5        U R                   R	                  5         g)a  Load a private key and the corresponding certificate. The certfile
string must be the path to a single file in PEM format containing the
certificate as well as any number of CA certificates needed to
establish the certificate's authenticity. The keyfile string, if
present, must point to a file containing the private key. Otherwise
the private key will be taken from certfile as well.
c                0   > Tc   eTR                  S5      $ )Nzutf-8)encode)_max_length_prompt_twice
_user_datapasswords      r   _pwcb)SSLContext.load_cert_chain.<locals>._pwcb1  s       +++w//r$   N)r   rh   r   rd   r   zOptional[bytes]re   rg   )r   set_passwd_cbuse_certificate_chain_fileuse_privatekey_filecheck_privatekey)r/   certfilekeyfiler   r   s      ` r   load_cert_chainSSLContext.load_cert_chain  sZ      0 II##E*		,,X6		%%g&9:		""$r$   c                :    U R                   R                  X5        g)zLoad a set of "certification authority"(CA) certificates used to
validate other peers' certificates when `~verify_mode` is other than
ssl.CERT_NONE.
N)r   load_verify_locations)r/   cafilecapaths      r   r    SSLContext.load_verify_locations=  s     			''7r$   c                x    [         (       a%  U R                  [        R                  " 5       5        g[	        S5      e)z&Attempt to load CA certs from certifi.ztlsAllowInvalidCertificates is False but no system CA certificates could be loaded. Please install the certifi package, or provide a path to a CA file using the tlsCAFile optionN)_HAVE_CERTIFIr   certifiwhere_ConfigurationErrorrv   s    r   _load_certifiSSLContext._load_certifiF  s-    =&&w}}7%' r$   c                v   U R                   R                  5       nUc   e[        R                  R                  R
                  n[        R                  " U5       H\  u  pEnUS:X  d  M  USL d  X6;   d  M  UR                  [        R                  R                  [        R                  " U5      5      5        M^     g)z2Attempt to load CA certs from Windows trust store.Nx509_asnT)r   get_cert_store
_stdlibsslPurposeSERVER_AUTHoidenum_certificatesadd_cert_cryptoX509from_cryptographyx509load_der_x509_certificate)r/   store
cert_storer   certencodingtrusts          r   _load_wincertsSSLContext._load_wincertsR  s    YY--/
%%%  ,,00%/%A%A%%H!DE:%D=CL''66t7U7UVZ7[\ &Ir$   c                    [         R                  S:X  a   S H  nU R                  U5        M     O$[         R                  S:X  a  U R	                  5         U R
                  R                  5         g! [         a    U R	                  5          N7f = f)z7A PyOpenSSL version of load_default_certs from CPython.win32)CAROOTdarwinN)_sysplatformr   PermissionErrorr   r   set_default_verify_paths)r/   	storenames     r   load_default_certsSSLContext.load_default_certs_  st    
 ==G#%!/I''	2 "0
 ]]h& 		**, # %""$%s   A0 0BBc                8    U R                   R                  5         g)z]Specify that the platform provided CA certificates are to be used
for verification purposes.
N)r   r   rv   s    r   r   #SSLContext.set_default_verify_pathso  s     			**,r$   c                   [        U R                  X5      nU(       a  UR                  U5        USL a  UR                  5         OuU(       a0  [	        U5      (       d   UR                  UR                  S5      5        U R                  [        R                  :w  a  UR                  5         UR                  5         U(       ab  UR                  5         U R                  (       aA  Ub>  SSKJn   [	        U5      (       a  UR!                  Xu5        U$ UR#                  Xu5         U$ U$ ! [        R$                  [        R&                  4 a  n	[)        [+        U	5      5      SeSn	A	ff = f)zJWrap an existing Python socket connection and return a TLS socket
object.
TidnaNr   )	pyopenssl)r&   r   set_sessionset_accept_stater   set_tlsext_host_namer   verify_moder   	CERT_NONErequest_ocspset_connect_staterJ   r   service_identityr   verify_ip_addressverify_hostnameCertificateErrorVerificationErrorr   str)
r/   r1   server_sidedo_handshake_on_connectr,   server_hostnamesessionssl_connr   r"   s
             r   wrap_socketSSLContext.wrap_socketw  s1    DIItB  )$%%' ~o'F'F --o.D.DV.LM:#7#77%%'&&( # !!# ""'B6	@%o66!33HN  "11(L x	 %55$66 @ ,CH54?	@s   ,!D% D% %$E#	EE#)r   r   r   r~   )r   rh   )re   rh   )re   r   )r   r   re   rf   )re   rd   )r   r   re   rf   )re   zOptional[bool])r   rd   re   rf   )r   rh   re   rf   )NN)r   zUnion[str, bytes]r   zUnion[str, bytes, None]r   Optional[str]re   rf   )r   r  r   r  re   rf   rx   )r   r  re   rf   )FTTNN)r1   z_socket.socketr  rd   r  rd   r,   rd   r  r  r  zOptional[_SSL.Session]re   r&   )ri   rj   rk   rl   ry   	__slots__r.   propertyr   _SSLContext__get_verify_mode_SSLContext__set_verify_moder   _SSLContext__get_check_hostname_SSLContext__set_check_hostnamer   $_SSLContext__get_check_ocsp_endpoint$_SSLContext__set_check_ocsp_endpointrt   _SSLContext__get_options_SSLContext__set_optionsoptionsr   r   r   r   r   r   r	  rm   rz   r$   r   r|   r|      s[    KI
^  @6* ,.?@K$% 24HIN78 ##<>WX(* }m4G
 ,0"&	%#% )%  	%
 
%> EI8#84A8	8
- - "(,%))-*.11 1 "&	1
 #1 '1 (1 
1 1r$   r|   )r   r   re   rd   )r"   BaseExceptionre   rd   )Try   
__future__r   socketr:   sslr   sysr   timer6   errnor   r[   	ipaddressr   r   typingr   r   r   r	   r
   r   cryptography.x509r   r   OpenSSLr   r>   r   r   pymongo.errorsr   r   r   pymongo.ocsp_cacher   pymongo.ocsp_supportr   pymongo.socket_checkerr   r*   r   pymongo.write_concernr   r   r   r   r   ImportErrorSSLv23_METHODPROTOCOL_SSLv23OP_NO_SSLv2OP_NO_SSLv3OP_NO_COMPRESSIONgetattrr   HAS_SNIIS_PYOPENSSLErrorr<   r   VERIFY_NONECERT_OPTIONALVERIFY_PEERCERT_REQUIREDVERIFY_FAIL_IF_NO_PEER_CERTr   itemsr   r   r?   r@   WantX509LookupErrorr8   BLOCKING_IO_READ_ERRORBLOCKING_IO_WRITE_ERRORBLOCKING_IO_LOOKUP_ERRORr#   
Connectionr&   rp   r|   )keyr   s   00r   <module>r=     s  
 #     ! / I I     % D , ) / B 8 2 T]M $$** d$91=   :: $**d..d..1Q1QQ 5@4E4E4GH4Gjcuz4GH 
 (($*=*=t?W?WX ++ -- 33 .Pt Pf0 0a ae  M2 Is   G ?GGG