ó
    EñiÇ;  ã                  ó"  • % S SK Jr  SrS SKrS SKrS SKrS SKrS SKJrJ	r	  S SK
Jr  S SKJr  S SKJr  S SKJrJrJr  S	S
KJrJrJrJrJr  S	SKJrJr  S	SKJrJrJrJ r J!r!J"r"  \RF                  S:¼  a	  S SKJ$r$J%r%  OS SK&J$r$J%r%  \RF                  S:¼  a  S SKJ'r'  OS SK&J'r'  \" S5      r(\$" S5      r)\*\*\+\+4   S4   r,S\-S'   \*\,S4   r.S\-S'    " S S\5      r/\" SS9 " S S\5      5       r0\" SS9 " S S\!\0   5      5       r1 " S S \ 5      r2g)!é    )Úannotations)ÚTLSAttributeÚTLSConnectableÚTLSListenerÚ	TLSStreamN)ÚCallableÚMapping)Ú	dataclass)Úwraps)Ú
SSLContext)ÚAnyÚ	TypeAliasÚTypeVaré   )ÚBrokenResourceErrorÚEndOfStreamÚaclose_forcefullyÚget_cancelled_exc_classÚ	to_thread)ÚTypedAttributeSetÚtyped_attribute)ÚAnyByteStreamÚAnyByteStreamConnectableÚ
ByteStreamÚByteStreamConnectableÚListenerÚ	TaskGroup)é   é   )ÚTypeVarTupleÚUnpack)r   é   )ÚoverrideÚT_RetvalÚPosArgsT.r   Ú_PCTRTTÚ_PCTRTTTc                  ó
  • \ rS rSr% Sr\" 5       rS\S'   \" 5       rS\S'   \" 5       r	S\S'   \" 5       r
S	\S
'   \" 5       rS\S'   \" 5       rS\S'   \" 5       rS\S'   \" 5       rS\S'   \" 5       rS\S'   \" 5       rS\S'   Srg)r   é5   z5Contains Transport Layer Security related attributes.ú
str | NoneÚalpn_protocolÚbytesÚchannel_binding_tls_uniqueztuple[str, str, int]Úcipherz*None | dict[str, str | _PCTRTTT | _PCTRTT]Úpeer_certificatezbytes | NoneÚpeer_certificate_binaryÚboolÚserver_sidez!list[tuple[str, str, int]] | NoneÚshared_ciphersússl.SSLObjectÚ
ssl_objectÚstandard_compatibleÚstrÚtls_version© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r+   Ú__annotations__r-   r.   r/   r0   r2   r3   r5   r6   r8   Ú__static_attributes__r9   ó    ÚN/home/mande/repo/quber/.venv/lib/python3.13/site-packages/anyio/streams/tls.pyr   r   5   s™   ‡ Ù?ñ !0Ó 1€M�:Ó1á(7Ó(9Ð Ó9á#2Ó#4€FÐ Ó4ñ FUÓEVÐÐBÓVá,;Ó,=Ð˜\Ó=á'Ó)€K�Ó)ñ 9HÓ8I€NÐ5ÓIá /Ó 1€J�Ó1ñ !0Ó 1Ð˜Ó1á&Ó(€K�Ö(rA   r   F)Úeqc                  óä   • \ rS rSr% SrS\S'   S\S'   S\S'   S	\S
'   S	\S'   \SSSSS.           SS jj5       r      SS jrSS jr	SS jr
SSS jjrSS jrSS jr\SS j5       rSrg) r   éQ   a  
A stream wrapper that encrypts all sent data and decrypts received data.

This class has no public initializer; use :meth:`wrap` instead.
All extra attributes from :class:`~TLSAttribute` are supported.

:var AnyByteStream transport_stream: the wrapped stream

r   Útransport_streamr1   r6   r4   Ú_ssl_objectzssl.MemoryBIOÚ	_read_bioÚ
_write_bioNT)r2   ÚhostnameÚssl_contextr6   c             ƒ  ó®  #   • Uc  U(       + nU(       dŠ  U(       a  [         R                  R                  O[         R                  R                  n[         R                  " U5      n[        [         S5      (       a$  U=R                  [         R                  ) -  sl        [         R                  " 5       n[         R                  " 5       n[        U5      [         R                  L a  UR                  XxX#S9n	O-[        R                  " UR                  UUUUS5      I Sh  v•N n	U " UUU	UUS9n
U
R                  U	R                  5      I Sh  v•N   U
$  N3 N7f)a\  
Wrap an existing stream with Transport Layer Security.

This performs a TLS handshake with the peer.

:param transport_stream: a bytes-transporting stream to wrap
:param server_side: ``True`` if this is the server side of the connection,
    ``False`` if this is the client side (if omitted, will be set to ``False``
    if ``hostname`` has been provided, ``False`` otherwise). Used only to create
    a default context when an explicit context has not been provided.
:param hostname: host name of the peer (if host name checking is desired)
:param ssl_context: the SSLContext object to use (if not provided, a secure
    default will be created)
:param standard_compatible: if ``False``, skip the closing handshake when
    closing the connection, and don't raise an exception if the peer does the
    same
:raises ~ssl.SSLError: if the TLS handshake fails

NÚOP_IGNORE_UNEXPECTED_EOF)r2   Úserver_hostname)rF   r6   rG   rH   rI   )ÚsslÚPurposeÚCLIENT_AUTHÚSERVER_AUTHÚcreate_default_contextÚhasattrÚoptionsrM   Ú	MemoryBIOÚtyper   Úwrap_bior   Úrun_syncÚ_call_sslobject_methodÚdo_handshake)ÚclsrF   r2   rJ   rK   r6   ÚpurposeÚbio_inÚbio_outr5   Úwrappers              rB   ÚwrapÚTLSStream.wrapc   s,  é € ð: ÑØ&œ,ˆKææ+6”—‘×'Ò'¼C¿K¹K×<SÑ<Sð ô ×4Ò4°WÓ=ˆKô ”sÐ6×7Ñ7Ø×#Ò#¬×(DÑ(DÐ'DÑDÕ#ä—’“ˆÜ—-’-“/ˆô �Ó¤§¡Ò.Ø$×-Ñ-Ø¨[ð .ð ‰Jô  )×1Ò1Ø×$Ñ$ØØØØØó ÷ ˆJñ Ø-Ø 3Ø"ØØñ
ˆð ×,Ñ,¨Z×-DÑ-DÓE×EÐEØˆñ#ñ  	Fùs$   ‚DEÄEÄ,EÅ
EÅEÅEc              ‡  ó¼  #   •   U" U6 nU R                   R                  (       a;  U R                  R                  U R                   R	                  5       5      I S h  v•N   U$  N! [
        R                   Ga     U R                   R                  (       a<  U R                  R                  U R                   R	                  5       5      I S h  v•N    U R                  R                  5       I S h  v•N  nU R                  R                  U5         GOÇ! [         a    U R                  R                  5           GOŸ[         a@  nU R                  R                  5         U R                   R                  5         [        UeS nAff = f[
        R                   a@    U R                  R                  U R                   R	                  5       5      I S h  v•N     GO[
        R                   a@  nU R                  R                  5         U R                   R                  5         [        UeS nAf[
        R                    a™  nU R                  R                  5         U R                   R                  5         [#        U[
        R$                  5      (       d!  UR&                  (       a/  SUR&                  ;   a  U R(                  (       a  [        Ue[        S ee S nAff = fGMØ  7f)NÚUNEXPECTED_EOF_WHILE_READING)rI   ÚpendingrF   ÚsendÚreadrO   ÚSSLWantReadErrorÚreceiverH   Úwriter   Ú	write_eofÚOSErrorr   ÚSSLWantWriteErrorÚSSLSyscallErrorÚSSLErrorÚ
isinstanceÚSSLEOFErrorÚstrerrorr6   )ÚselfÚfuncÚargsÚresultÚdataÚexcs         rB   rZ   Ú TLSStream._call_sslobject_methodª   s  é € ð ð(Ù˜t˜�ðH —?‘?×*×*Ø×/Ñ/×4Ñ4°T·_±_×5IÑ5IÓ5KÓL×LÐLà�ñ MøôI ×'Ñ'ô /ð/à—‘×.×.Ø"×3Ñ3×8Ñ8¸¿¹×9MÑ9MÓ9OÓP×PÑPà!%×!6Ñ!6×!>Ñ!>Ó!@×@Ð@�Dð —N‘N×(Ñ(¨×.øô #ó /Ø—N‘N×,Ñ,×.Ð.Üó 7Ø—N‘N×,Ñ,Ô.Ø—O‘O×-Ñ-Ô/Ü-°3Ð6ûð7úô ×(Ñ(ó IØ×+Ñ+×0Ñ0°·±×1EÑ1EÓ1GÓH×HÔHÜ×&Ñ&ó 3Ø—‘×(Ñ(Ô*Ø—‘×)Ñ)Ô+Ü)¨sÐ2ûÜ—<‘<ó Ø—‘×(Ñ(Ô*Ø—‘×)Ñ)Ô+Ü˜c¤3§?¡?×3Ñ3Ø—L—LÐ%CÀsÇ|Á|Ó%Sà×/×/Ü1°sÐ:ä)¨tÐ3àûðúò1 ùs¯   ‚K…A$ ŠAKÁA"ÁKÁ$KÁ:ADÃCÃ"DÃ.C1Ã/DÃ4KÄKÄ$FÄ6KÄ7KÄ:	FÅ;E>Å>FÆAKÇGÇKÇKÇKÇ+;H&È&KÈ=BKËKËKc              ƒ  ó  #   • U R                  U R                  R                  5      I Sh  v•N   U R                  R	                  5         U R
                  R	                  5         U R                  U R                  R                  5       4$  N^7f)zl
Does the TLS closing handshake.

:return: a tuple of (wrapped byte stream, bytes left in the read buffer)

N)rZ   rG   ÚunwraprH   rk   rI   rF   rg   ©rs   s    rB   r{   ÚTLSStream.unwrapØ   sk   é € ð ×)Ñ)¨$×*:Ñ*:×*AÑ*AÓB×BÐBØ�‰× Ñ Ô"Ø�‰×!Ñ!Ô#Ø×$Ñ$ d§n¡n×&9Ñ&9Ó&;Ð;Ð;ñ 	Cùs   ‚)B«B
¬ABc              ƒ  ó  #   • U R                   (       a   U R                  5       I S h  v•N   U R                  R                  5       I S h  v•N   g  N'! [         a     [        U R                  5      I S h  v•N    e f = f N47f©N)r6   r{   ÚBaseExceptionr   rF   Úacloser|   s    rB   r�   ÚTLSStream.acloseä   sl   é € Ø×#×#ðØ—k‘k“m×#Ð#ð
 ×#Ñ#×*Ñ*Ó,×,Ñ,ñ $øÜ ó Ü'¨×(=Ñ(=Ó>×>Ñ>Øðúñ 	-ùsC   ‚B•A ¨A©A ­BÁ
A?ÁBÁA Á"A<Á4A7Á5A<Á<Bc              ƒ  óˆ   #   • U R                  U R                  R                  U5      I S h  v•N nU(       d  [        eU$  N7fr   )rZ   rG   rg   r   )rs   Ú	max_bytesrw   s      rB   ri   ÚTLSStream.receiveî   s:   é € Ø×0Ñ0°×1AÑ1A×1FÑ1FÈ	ÓR×RˆÞÜÐàˆñ	 Sùs   ‚*A¬A ­Ac              ƒ  ól   #   • U R                  U R                  R                  U5      I S h  v•N   g  N7fr   )rZ   rG   rj   )rs   Úitems     rB   rf   ÚTLSStream.sendõ   s'   é € Ø×)Ñ)¨$×*:Ñ*:×*@Ñ*@À$ÓG×GÓGùs   ‚*4¬2­4c              ƒ  ó<  #   • U R                  [        R                  5      n[        R                  " SU5      nU(       aQ  [        UR                  S5      5      [        UR                  S5      =(       d    S5      pCX44S:  a  [        SU 35      e[        S5      e7f)NzTLSv(\d+)(?:\.(\d+))?é   r   r   )rŠ   r   z;send_eof() requires at least TLSv1.3; current session uses z7send_eof() has not yet been implemented for TLS streams)Úextrar   r8   ÚreÚmatchÚintÚgroupÚNotImplementedError)rs   r8   r�   ÚmajorÚminors        rB   Úsend_eofÚTLSStream.send_eofø   s‹   é € Ø—j‘j¤×!9Ñ!9Ó:ˆÜ—’Ð1°;Ó?ˆÞÜ˜uŸ{™{¨1›~Ó.´°E·K±KÀ³N×4GÀaÓ0H�5Øˆ~ Ó&Ü)ð$Ø$/ =ð2óð ô
 "ØEó
ð 	
ùs   ‚BBc                óH  ^ • 0 T R                   R                  E[        R                  T R                  R
                  [        R                  T R                  R                  [        R                  T R                  R                  [        R                  U 4S j[        R                  U 4S j[        R                  U 4S j[        R                  U 4S j[        R                  U 4S j[        R                  U 4S j[        R                  T R                  R                   0
E$ )Nc                 ó:   >• T R                   R                  S5      $ )NF©rG   Úgetpeercertr|   s   €rB   Ú<lambda>Ú,TLSStream.extra_attributes.<locals>.<lambda>  s   ø€ °4×3CÑ3C×3OÑ3OÐPUÔ3VrA   c                 ó:   >• T R                   R                  S5      $ )NTr—   r|   s   €rB   r™   rš     s   ø€ ¸$×:JÑ:J×:VÑ:VØô;rA   c                 ó0   >• T R                   R                  $ r   )rG   r2   r|   s   €rB   r™   rš     s   ø€ ¨d×.>Ñ.>×.JÒ.JrA   c                 ór   >• T R                   R                  (       a  T R                   R                  5       $ S $ r   )rG   r2   r3   r|   s   €rB   r™   rš     s3   ø€ à×#Ñ#×/×/ð × Ñ ×/Ñ/Ó1ð àðrA   c                 ó   >• T R                   $ r   ©r6   r|   s   €rB   r™   rš     ó   ø€ °d×6NÒ6NrA   c                 ó   >• T R                   $ r   )rG   r|   s   €rB   r™   rš     s   ø€ ¨T×-=Ò-=rA   )rF   Úextra_attributesr   r+   rG   Úselected_alpn_protocolr-   Úget_channel_bindingr.   r/   r0   r2   r3   r6   r5   r8   Úversionr|   s   `rB   r¢   ÚTLSStream.extra_attributes  sÓ   ø€ ð
Ø×#Ñ#×4Ñ4ð
ä×&Ñ&¨×(8Ñ(8×(OÑ(OÜ×3Ñ3Ø× Ñ ×4Ñ4ä×Ñ ×!1Ñ!1×!8Ñ!8Ü×)Ñ)Ô+VÜ×0Ñ0ô 3ô ×$Ñ$Ô&JÜ×'Ñ'ô *ô
 ×,Ñ,Ô.NÜ×#Ñ#Ô%=Ü×$Ñ$ d×&6Ñ&6×&>Ñ&>ñ'
ð 	
rA   r9   )rF   r   r2   zbool | NonerJ   r*   rK   ússl.SSLContext | Noner6   r1   Úreturnr   )rt   z&Callable[[Unpack[PosArgsT]], T_Retval]ru   zUnpack[PosArgsT]r¨   r$   )r¨   ztuple[AnyByteStream, bytes]©r¨   ÚNone)i   )r„   rŽ   r¨   r,   )r‡   r,   r¨   rª   ©r¨   zMapping[Any, Callable[[], Any]])r:   r;   r<   r=   r>   r?   Úclassmethodra   rZ   r{   r�   ri   rf   r“   Úpropertyr¢   r@   r9   rA   rB   r   r   Q   sÖ   ‡ ñð $Ó#ØÓØÓØÓØÓàð
 $(Ø#Ø-1Ø$(ñDà'ðDð !ð	Dð
 ðDð +ðDð "ðDð 
ôDó ðDðL,Ø:ð,ØCSð,à	ô,ô\
<ô-öôHô
ð ó
ó ó
rA   r   c                  ó–   • \ rS rSr% SrS\S'   S\S'   SrS\S	'   S
rS\S'   \SS j5       r	 S     SS jjr
SS jr\SS j5       rSrg)r   i   aj  
A convenience listener that wraps another listener and auto-negotiates a TLS session
on every accepted connection.

If the TLS handshake times out or raises an exception,
:meth:`handle_handshake_error` is called to do whatever post-mortem processing is
deemed necessary.

Supports only the :attr:`~TLSAttribute.standard_compatible` extra attribute.

:param Listener listener: the listener to wrap
:param ssl_context: the SSL context object
:param standard_compatible: a flag passed through to :meth:`TLSStream.wrap`
:param handshake_timeout: time limit for the TLS handshake
    (passed to :func:`~anyio.fail_after`)
zListener[Any]Úlistenerzssl.SSLContextrK   Tr1   r6   é   ÚfloatÚhandshake_timeoutc              ƒ  ó  #   • [        U5      I Sh  v•N   [        U [        5       5      (       d(  [        R                  " [
        5      R                  SU S9  [        U [        5      (       a  [        U [        5       5      (       a  e g Nu7f)au  
Handle an exception raised during the TLS handshake.

This method does 3 things:

#. Forcefully closes the original stream
#. Logs the exception (unless it was a cancellation exception) using the
   ``anyio.streams.tls`` logger
#. Reraises the exception if it was a base exception or a cancellation exception

:param exc: the exception
:param stream: the original stream

NzError during TLS handshake)Úexc_info)r   rp   r   ÚloggingÚ	getLoggerr:   Ú	exceptionÚ	Exception)rx   Ústreams     rB   Úhandle_handshake_errorÚ"TLSListener.handle_handshake_error8  sz   é € ô    Ó'×'Ð'ô ˜#Ô6Ó8×9Ñ9ô
 ×ÒœhÓ'×1Ñ1Ø,°sð 2ñ ô
 ˜#œy×)Ñ)¬Z¸Ô=TÓ=V×-WÑ-WØð .Xñ 	(ùs   ‚B	‘B’A6B	Nc              ƒ  óˆ   ^ ^#   • [        T5      SUU 4S jj5       nT R                  R                  X25      I S h  v•N   g  N7f)Nc              “  ó`  >#   • SSK Jn   U" TR                  5         [        R	                  U TR
                  TR                  S9I S h  v•N nS S S 5        T" W5      I S h  v•N   g  N! , (       d  f       N!= f N! [         a$  nTR                  X05      I S h  v•N     S nAg S nAff = f7f)Nr   )Ú
fail_after)rK   r6   )	Ú r¾   r²   r   ra   rK   r6   r€   rº   )r¹   r¾   Úwrapped_streamrx   Úhandlerrs   s       €€rB   Úhandler_wrapperÚ*TLSListener.serve.<locals>.handler_wrapper]  s–   øé € å%ð
.Ù × 6Ñ 6Õ7Ü+4¯>©>ØØ$(×$4Ñ$4Ø,0×,DÑ,Dð ,:ð ,÷ &�N÷ 8ñ ˜nÓ-×-Ñ-ñ&÷ 8Õ7úñ .øô !ó ?Ø×1Ñ1°#Ó>×>Ö>ûð?üsu   ƒB.‹A= �-A*Á
A(ÁA*ÁA= ÁB.Á"A;Á#B.Á(A*Á*
A8Á4A= Á;B.Á=
B+ÂB&ÂBÂB&Â!B.Â&B+Â+B.)r¹   r   r¨   rª   )r   r¯   Úserve)rs   rÁ   Ú
task_grouprÂ   s   ``  rB   rÄ   ÚTLSListener.serveX  s8   ùé € ô
 
ˆw‹÷	.ó 
ð	.ð �m‰m×!Ñ! /Ó>×>Ó>ùs   „6AºA »Ac              ƒ  óT   #   • U R                   R                  5       I S h  v•N   g  N7fr   )r¯   r�   r|   s    rB   r�   ÚTLSListener.acloseo  s   é € Ø�m‰m×"Ñ"Ó$×$Ó$ùs   ‚( &¡(c                ó0   ^ • [         R                  U 4S j0$ )Nc                 ó   >• T R                   $ r   rŸ   r|   s   €rB   r™   Ú.TLSListener.extra_attributes.<locals>.<lambda>u  r    rA   )r   r6   r|   s   `rB   r¢   ÚTLSListener.extra_attributesr  s   ø€ ô ×,Ñ,Ô.Nð
ð 	
rA   r9   )rx   r€   r¹   r   r¨   rª   r   )rÁ   zCallable[[TLSStream], Any]rÅ   zTaskGroup | Noner¨   rª   r©   r«   )r:   r;   r<   r=   r>   r?   r6   r²   Ústaticmethodrº   rÄ   r�   r­   r¢   r@   r9   rA   rB   r   r      s}   ‡ ñð" ÓØÓØ $Ð˜Ó$Ø!Ð�uÓ!àóó ððD (,ð?à+ð?ð %ð?ð 
õ	?ô.%ð ó
ó ó
rA   r   c                  óT   • \ rS rSrSrSSSS.         S	S jjr\S
S j5       rSrg)r   iy  aÔ  
Wraps another connectable and does TLS negotiation after a successful connection.

:param connectable: the connectable to wrap
:param hostname: host name of the server (if host name checking is desired)
:param ssl_context: the SSLContext object to use (if not provided, a secure default
    will be created)
:param standard_compatible: if ``False``, skip the closing handshake when closing
    the connection, and don't raise an exception if the server does the same
NT©rJ   rK   r6   c               óH  • Xl         U=(       d.    [        R                  " [        R                  R                  5      U l        [        U R
                  [        R                  5      (       d+  [        S[        U R
                  5      R                   35      eX l        X@l        g )Nz7ssl_context must be an instance of ssl.SSLContext, not )ÚconnectablerO   rS   rP   rR   rK   rp   r   Ú	TypeErrorrW   r:   rJ   r6   )rs   rÑ   rJ   rK   r6   s        rB   Ú__init__ÚTLSConnectable.__init__…  sƒ   € ð 'ÔØ'2÷ (
´c×6PÒ6PÜ�K‰K×#Ñ#ó7
ˆÔô ˜$×*Ñ*¬C¯N©N×;Ñ;ÜØIÜ˜×(Ñ(Ó)×2Ñ2Ð3ð5óð ð !ŒØ#6Õ rA   c              ƒ  ó  #   • U R                   R                  5       I S h  v•N n [        R                  UU R                  U R
                  U R                  S9I S h  v•N $  NA N! [         a    [        U5      I S h  v•N    e f = f7f)NrÏ   )	rÑ   Úconnectr   ra   rJ   rK   r6   r€   r   )rs   r¹   s     rB   rÖ   ÚTLSConnectable.connect™  sƒ   é € à×'Ñ'×/Ñ/Ó1×1ˆð		Ü"Ÿ™ØØŸ™Ø ×,Ñ,Ø$(×$<Ñ$<ð	 (ð ÷ ð ñ 2ñøô ó 	Ü# FÓ+×+Ñ+Øð	üsD   ‚B	 A"¡B	¦7A& ÁA$ÁA& Á!B	Á$A& Á&BÁ>BÁ?BÂB	)rÑ   rJ   rK   r6   )
rÑ   r   rJ   r*   rK   r§   r6   r1   r¨   rª   )r¨   r   )	r:   r;   r<   r=   r>   rÓ   r#   rÖ   r@   r9   rA   rB   r   r   y  s[   † ñ	ð  $Ø-1Ø$(ñ7à-ð7ð ð	7ð
 +ð7ð "ð7ð 
õ7ð( óó órA   r   )3Ú
__future__r   Ú__all__rµ   rŒ   rO   ÚsysÚcollections.abcr   r	   Údataclassesr
   Ú	functoolsr   r   Útypingr   r   r   r¿   r   r   r   r   r   Ú_core._typedattrr   r   Úabcr   r   r   r   r   r   Úversion_infor    r!   Útyping_extensionsr#   r$   r%   Útupler7   r&   r?   r'   r   r   r   r   r9   rA   rB   Ú<module>rä      s   ðÞ "ð€ó Û 	Û 
Û 
ß -Ý !Ý Ý ß *Ñ *÷õ ÷ B÷÷ ð ×Ñ�wÓß+Ð+ç6à×Ñ�wÓÞå*á�:Ó€Ù˜
Ó#€Ø˜5  c ™?¨CÐ/Ñ0€ˆÓ 0Ø˜G S˜LÑ)€ˆ)Ó )ô)Ð$ô )ñ8 ˆeÑôK
�
ó K
ó ðK
ñ\ ˆeÑôU
�(˜9Ñ%ó U
ó ðU
ôp,Ð*õ ,rA   