VULN_CHECK_I913V6 jLddlZddlZddlZddlmZddlmZdZGddZy)N)ProxySchemeUnsupported)sixi@ceZdZdZedZ ddZdZdZdZ ddZ dd Z dd Z d d Z d d Z d!d ZdZdZd"dZdZdZdZdZdZdZdZdZdZd#dZdZy)$ SSLTransportaL The SSLTransport wraps an existing socket and establishes an SSL connection. Contrary to Python's implementation of SSLSocket, it allows you to chain multiple TLS connections together. It's particularly useful if you need to implement TLS within TLS. The class supports most of the socket API operations. cht|ds&tjr tdtdy)z Raises a ProxySchemeUnsupported if the provided ssl_context can't be used for TLS in TLS. The only requirement is that the ssl_context provides the 'wrap_bio' methods. wrap_biozKTLS in TLS requires SSLContext.wrap_bio() which isn't supported on Python 2zXTLS in TLS requires SSLContext.wrap_bio() which isn't available on non-native SSLContextN)hasattrrPY2r) ssl_contexts J/usr/lib/python3.12/site-packages/pip/_vendor/urllib3/util/ssltransport.py$_validate_ssl_context_for_tls_in_tlsz1SSLTransport._validate_ssl_context_for_tls_in_tlss@{J/ww,, -90Nc(tj|_tj|_||_||_|j |j|j||_|j|jjy)zV Create an SSLTransport around socket using the provided ssl_context. )server_hostnameN) ssl MemoryBIOincomingoutgoingsuppress_ragged_eofssocketr sslobj _ssl_io_loop do_handshake)selfrr rrs r __init__zSSLTransport.__init__,sm     $8! !** MM4==/+  $++223rc|SNrs r __enter__zSSLTransport.__enter__?s rc$|jyr)close)r_s r __exit__zSSLTransport.__exit__Bs  rc6|jjSr)rfilenor s r r'zSSLTransport.filenoE{{!!##rc&|j||Sr)_wrap_ssl_read)rlenbuffers r readzSSLTransport.readHs""3//rcD|dk7r td|j|S)Nrz+non-zero flags not allowed in calls to recv) ValueErrorr*)rr+flagss r recvzSSLTransport.recvKs& A:JK K""3''rcn|dk7r td|r| t|}n|d}|j||S)Nrz0non-zero flags not allowed in calls to recv_into)r/r+r-)rr,nbytesr0s r recv_intozSSLTransport.recv_intoPs@ A:OP P v~[F ^Fyy((rc|dk7r tdd}t|5}|jd5}t|}||kr|j ||d}||z }||krddddddy#1swYxYw#1swYyxYw)Nrz.non-zero flags not allowed in calls to sendallB)r/ memoryviewcastr+send)rdatar0countview byte_viewamountvs r sendallzSSLTransport.sendallYs~ A:MN N  tyy~^F&.IIi/0 &.(6  ~~  s"A=/A1 A=1A: 6A==Bcr|dk7r td|j|jj|}|S)Nrz+non-zero flags not allowed in calls to send)r/rrwrite)rr;r0responses r r:zSSLTransport.sendcs6 A:JK K$$T[[%6%6=rc:t|hdkstd|dd|v}d|vxs| }|s|sJd|v}d} |r| dz } |r| dz } tj|| } |jxjdz c_|d }|d krt j }|d k(r|s td | S|r|rt j| | |} n3|rt j| |} n|sJt j| |} |r| St j| |||} || _ | S) a Python's httpclient uses makefile and buffered io when reading HTTP messages and we need to support it. This is unfortunately a copy and paste of socket.py makefile with small changes to point to the socket directly. >brwz invalid mode z (only r, w, b allowed)rHrGrFrz!unbuffered streams must be binary) setr/rSocketIO_io_refsioDEFAULT_BUFFER_SIZEBufferedRWPairBufferedReaderBufferedWriter TextIOWrappermode) rrU bufferingencodingerrorsnewlinewritingreadingbinaryrawmoderawr,texts r makefilezSSLTransport.makefileis64yO+OP P++,W'!!  sNG  sNGoodG, !  I q=..I > !DEEJ w&&sC;F &&sI6FN7&&sI6F M&'B  rcN|j|jjyr)rrunwrapr s r rbzSSLTransport.unwraps $++,,-rc8|jjyr)rr#r s r r#zSSLTransport.closes rc8|jj|Sr)r getpeercert)r binary_forms r rezSSLTransport.getpeercerts{{&&{33rc6|jjSr)rversionr s r rhzSSLTransport.versions{{""$$rc6|jjSr)rcipherr s r rjzSSLTransport.cipherr(rc6|jjSr)rselected_alpn_protocolr s r rlz#SSLTransport.selected_alpn_protocols{{1133rc6|jjSr)rselected_npn_protocolr s r rnz"SSLTransport.selected_npn_protocols{{0022rc6|jjSr)rshared_ciphersr s r rpzSSLTransport.shared_cipherss{{))++rc6|jjSr)r compressionr s r rrzSSLTransport.compressions{{&&((rc:|jj|yr)r settimeout)rvalues r rtzSSLTransport.settimeouts u%rc6|jjSr)r gettimeoutr s r rwzSSLTransport.gettimeouts{{%%''rc8|jjyr)r_decref_socketiosr s r ryzSSLTransport._decref_socketioss %%'rc |j|jj||S#tj$r4}|j tj k(r|jrYd}~yd}~wwxYwNr)rrr-rSSLErrorerrno SSL_ERROR_EOFr)rr+r,es r r*zSSLTransport._wrap_ssl_readsZ $$T[[%5%5sFC C|| ww#+++0I0I  s&)A0)A+*A++A0c$d}d}|rd} ||}|j j }|jj||d}nj|tjk(rW|jjt}|r|jj|n|jj|r|S#tj$rD}|jtjtjfvr||j}Yd}~d}~wwxYw)z>Performs an I/O loop between incoming/outgoing and the socket.TNF)rr|r}SSL_ERROR_WANT_READSSL_ERROR_WANT_WRITErr-rrAr1 SSL_BLOCKSIZErrC write_eof)rfuncargs should_loopretr}rbufs r rzSSLTransport._ssl_io_loops E Dk--$$&C KK   $}# #111kk&&}5MM'',MM++-)* #<< 773#:#:Crs% / RRr