
    &gC                       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'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      r0 SSK1r1Sr2\Rh                  r5\Rl                  r6\Rn                  r7\Rp                  r8\9" \SS5      r:Sr;Sr<\Rz                  r>\R~                  \R                  \R                  \R                  \R                  \R                  \R                  -  0rE\ER                  5        V Vs0 s H  u  pX_M	     snn rGSS jrH\R                  \R                  \R                  4rL\R                  rM\R                  rN\R                  rOSS jrP " S S\R                  5      rR " S S5      rS " S S5      rTg! \3 a    Sr2 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)_load_trusted_ca_certs_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    ^C:\Suresh\moveshuttle\MDcreated\moveengine\venv\Lib\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)	r0   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*   )rH   r.   do_handshake)r0   r"   rD   r3   s      r   rK   _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%   )rH   r.   recvr?   SysCallErrorr-   r$   r0   r"   rD   r#   r3   s       r   rN   _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   )rH   r.   	recv_intor?   rO   r-   r$   rP   s       r   rU   _sslConn.recv_into   sU    	::eg/A$A&AA   	(([-=-=		rR   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lenrH   r.   sendOSErrorr   _EINTR)	r0   bufflagsviewtotal_length
total_sentsentr#   r3   s	           r   sendall_sslConn.sendall   s    #3x
'zz%',[0A5I qy122J '  (-7s   A 
B%A?>A??B)r,   r-   )r1   z_SSL.Contextr2   zOptional[_socket.socket]r-   bool)rC   zCallable[..., _T]r"   r   rD   r   returnr   )r"   r   rD   r   rf   None)r"   r   rD   r   rf   bytes)r"   r   rD   r   rf   int)r   )r]   rh   r^   ri   rf   rg   )__name__
__module____qualname____firstlineno__r/   rH   rK   rN   rU   rc   __static_attributes____classcell__)r3   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r0   s    r   r/   _CallbackData.__init__   s    BF37 #-< r%   )ru   rv   rt   Nrf   rg   )rj   rk   rl   rm   __doc__r/   rn    r%   r   rq   rq      s
    :0r%   rq   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   rq   r   r   ru   set_ocsp_client_callbackr   )r0   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   rw   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_moderw   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*   )re   )_connobj_x509obj_errnum	_errdepthretcodes        r   _cb)SSLContext.__set_verify_mode.<locals>._cb   s     = r%   N)r   z_SSL.Connectionr   z_crypto.X509r   ri   r   ri   r   ri   rf   re   )r   
set_verify_VERIFY_MAP)r0   valuer   s      r   __set_verify_modeSSLContext.__set_verify_mode   sZ    	!%	!"	! 	! 		!
 	! 	!  			[/5r%   c                    U R                   $ r*   )r   rw   s    r   __get_check_hostnameSSLContext.__get_check_hostname   s    ###r%   c                (    [        SU5        Xl        g )Ncheck_hostname)r   r   r0   r   s     r   __set_check_hostnameSSLContext.__set_check_hostname  s    )51$r%   c                .    U R                   R                  $ r*   )r   ru   rw   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   ru   r   s     r   __set_check_ocsp_endpoint$SSLContext.__set_check_ocsp_endpoint  s    u-27/r%   c                8    U R                   R                  S5      $ rT   )r   set_optionsrw   s    r   __get_optionsSSLContext.__get_options  s     yy$$Q''r%   c                L    U R                   R                  [        U5      5        g r*   )r   r   ri   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   ri   r   re   r   zOptional[bytes]rf   rh   )r   set_passwd_cbuse_certificate_chain_fileuse_privatekey_filecheck_privatekey)r0   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        [        [        R                  S5      (       d   Uc   e[        U5      U R                  l        gg)zLoad a set of "certification authority"(CA) certificates used to
validate other peers' certificates when `~verify_mode` is other than
ssl.CERT_NONE.
get_verified_chainN)r   load_verify_locationshasattrr?   
Connectionr   r   rt   )r0   cafilecapaths      r   r    SSLContext.load_verify_locations=  sL     			''7t(<==%%%3I&3QD0 >r%   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_ConfigurationErrorrw   s    r   _load_certifiSSLContext._load_certifiJ  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)r0   store
cert_storer   certencodingtrusts          r   _load_wincertsSSLContext._load_wincertsV  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)r0   	storenames     r   load_default_certsSSLContext.load_default_certsc  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   rw   s    r   r   #SSLContext.set_default_verify_pathss  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_staterK   r   service_identityr   verify_ip_addressverify_hostnameSICertificateErrorSIVerificationErrorr   str)
r0   r2   server_sidedo_handshake_on_connectr-   server_hostnamesessionssl_connr   r#   s
             r   wrap_socketSSLContext.wrap_socket{  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	 %77$88 @ ,CH54?	@s   ,!D% D% %$E#	EE#)r   r   r   r   )r   ri   )rf   ri   )rf   r   )r   r   rf   rg   )rf   re   )r   r   rf   rg   )rf   zOptional[bool])r   re   rf   rg   )r   ri   rf   rg   )NN)r   zUnion[str, bytes]r   zUnion[str, bytes, None]r   Optional[str]rf   rg   )r   r  r   r  rf   rg   ry   )r   r  rf   rg   )FTTNN)r2   z_socket.socketr  re   r	  re   r-   re   r
  r  r  zOptional[_SSL.Session]rf   r'   )rj   rk   rl   rm   rz   	__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_endpointru   _SSLContext__get_options_SSLContext__set_optionsoptionsr   r   r   r   r   r   r  rn   r{   r%   r   r}   r}      s_    KI
^  @6* ,.?@K$% 24HIN78 ##<>WX(* }m4G
 ,0"&	%#% )%  	%
 
%> EIR#R4AR	R
- - "(,%))-*.11 1 "&	1
 #1 '1 (1 
1 1r%   r}   )r   r   rf   re   )r#   BaseExceptionrf   re   )Urz   
__future__r   socketr;   sslr   sysr   timer7   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   r   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@   rA   WantX509LookupErrorr9   BLOCKING_IO_READ_ERRORBLOCKING_IO_WRITE_ERRORBLOCKING_IO_LOOKUP_ERRORr$   r   r'   rq   r}   )keyr   s   00r   <module>r@     s  
 #     ! / I I     % D , ) G 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e ee  M2 Is   G GGG