ó
    Ö›‘h)2  ã            
       óZ  • S r SSKJrJrJr  SSKJrJr  SSKJ	r	J
r
  SSKJrJr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  SS	KJrJrJr  SS
KJr  SSKJ r J!r!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.J/r/J0r0   " S S5      r2 " S S5      r3\" \5       " S S5      5       r4 " S S\\35      r5 " S S5      r6 " S S\2\\5      r7 " S S \\35      r8 " S! S"\2\\3\\65      r9 " S# S$\2\3\6\!\"\5      r:\;" 5       Ry                  \9R{                  5       5        \;" 5       Ry                  \7R{                  5       5        \;" 5       Ry                  \:" 5       R{                  5       5         " S% S&\\ \35      r>\;" 5       Ry                  \>R{                  5       5        g! \1 a    Sr, GN%f = f)'z0
Tests for implementations of L{ITLSTransport}.
é    )ÚOptionalÚSequenceÚType)Ú	InterfaceÚimplementer)ÚDeferredÚDeferredList)ÚSSL4ClientEndpointÚSSL4ServerEndpointÚTCP4ClientEndpoint)ÚConnectionClosed)ÚIReactorSSLÚIStreamClientEndpointÚITLSTransport)ÚClientFactoryÚProtocolÚServerFactory)ÚBrokenContextFactoryÚConnectionTestsMixinÚEndpointCreator)ÚReactorBuilder)ÚAbortConnectionMixinÚConnectToTCPListenerMixinÚStreamTransportTestsMixin)ÚnetworkString)ÚFilePath)Úplatform)ÚSkipTest)ÚFILETYPE_PEM)ÚClientContextFactoryÚKeyPairÚPrivateCertificateNc                   óx   • \ rS rSr% \/r\\\\	         \
S'   \R                  " 5       (       a
  Sr\\S.rSrgSrg)ÚTLSMixiné2   ÚrequiredInterfaceszcFor some reason, these reactors don't deal with SSL disconnection correctly on Windows.  See #3371.)z*twisted.internet.glib2reactor.Glib2Reactorz(twisted.internet.gtk2reactor.Gtk2Reactor© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   r&   r   r   r   r   Ú__annotations__r   Ú	isWindowsÚmsgÚskippedReactorsÚ__static_attributes__r'   ó    ÚbC:\Users\psant\Downloads\Noiseback\school\venv\Lib\site-packages\twisted/internet/test/test_tls.pyr$   r$   2   sJ   ‡ Ø?J¸mÐ˜ ¨$¨y©/Ñ!:Ñ;ÓKà×Ò×Ñð>ð 	ð
 ;>Ø8;ñ
‹ò r1   r$   c                   ó–   • \ rS rSrSSKr\" \" \R                  5      5      R                  S5      R                  S5      r
CS rS rSrg)	ÚContextGeneratingMixiné@   r   Ns   tests
   server.pemc                 óÀ   • U R                   R                  5       n[        R                  " U[        R                  " U[
        5      [
        5      nUR                  5       $ )z=
Return a new SSL context suitable for use in a test server.
)Ú_pemÚ
getContentr"   Úloadr!   r   Úoptions)ÚselfÚpemÚcerts      r2   ÚgetServerContextÚ'ContextGeneratingMixin.getServerContextH   sF   € ð �i‰i×"Ñ"Ó$ˆÜ!×&Ò&Ø”—’˜c¤<Ó0´,ó
ˆð �|‰|‹~Ðr1   c                 ó   • [        5       $ ©N)r    ©r;   s    r2   ÚgetClientContextÚ'ContextGeneratingMixin.getClientContextR   s   € Ü#Ó%Ð%r1   r'   )r(   r)   r*   r+   Útwistedr   r   Ú__file__ÚsiblingÚchildr7   r>   rC   r0   r'   r1   r2   r4   r4   @   sD   † Ûñ 	‘˜w×/Ñ/Ó0Ó1×9Ñ9¸'ÓB×HÑHÈÓWð 	ð 	òõ&r1   r4   c                   ó$   • \ rS rSrSrS rS rSrg)ÚStartTLSClientEndpointéV   a	  
An endpoint which wraps another one and adds a TLS layer immediately when
connections are set up.

@ivar wrapped: A L{IStreamClientEndpoint} provider which will be used to
    really set up connections.

@ivar contextFactory: A L{ContextFactory} to use to do TLS.
c                 ó   • Xl         X l        g rA   )ÚwrappedÚcontextFactory)r;   rM   rN   s      r2   Ú__init__ÚStartTLSClientEndpoint.__init__b   s   € ØŒØ,Õr1   c                 ól   ^ ^•  " UU 4S jS[         5      nT R                  R                  U" 5       5      $ )zœ
Establish a connection using a protocol build by C{factory} and
immediately start TLS on it.  Return a L{Deferred} which fires with the
protocol instance.
c                   ó$   >• \ rS rSrU U4S jrSrg)Ú6StartTLSClientEndpoint.connect.<locals>.WrapperFactoryéo   c                 ób   >^• TR                  U5      mTR                  4UU4S jjnUTl        T$ )Nc                 ó^   >• TR                   R                  TR                  5        U " 5         g rA   )Ú	transportÚstartTLSrN   )ÚorigÚprotocolr;   s    €€r2   ÚconnectionMadeÚ\StartTLSClientEndpoint.connect.<locals>.WrapperFactory.buildProtocol.<locals>.connectionMades   s"   ø€ Ø×&Ñ&×/Ñ/°×0CÑ0CÔDÙ•Fr1   )ÚbuildProtocolr[   )ÚwrapperSelfÚaddrr[   rZ   Úfactoryr;   s      @€€r2   r]   ÚDStartTLSClientEndpoint.connect.<locals>.WrapperFactory.buildProtocolp   s5   ù€ Ø"×0Ñ0°Ó6�à(0×(?Ñ(?÷ ð ð +9�Ô'Ø�r1   r'   N)r(   r)   r*   r+   r]   r0   )r`   r;   s   €€r2   ÚWrapperFactoryrS   o   s   ø† ÷ ñ  r1   rb   )r   rM   Úconnect)r;   r`   rb   s   `` r2   rc   ÚStartTLSClientEndpoint.connectf   s.   ù€ ÷		 ð 		 œ]ô 		 ð �|‰|×#Ñ#¡NÓ$4Ó5Ð5r1   )rN   rM   N)r(   r)   r*   r+   Ú__doc__rO   rc   r0   r'   r1   r2   rJ   rJ   V   s   † ñò-õ6r1   rJ   c                   ó$   • \ rS rSrSrS rS rSrg)ÚStartTLSClientCreatoré}   zo
Create L{ITLSTransport.startTLS} endpoint for the client, and normal SSL
for server just because it's easier.
c                 ó8   • [        USU R                  5       5      $ )z•
Construct an SSL server endpoint.  This should be constructing a TCP
server endpoint which immediately calls C{startTLS} instead, but that
is hard.
r   ©r   r>   ©r;   Úreactors     r2   ÚserverÚStartTLSClientCreator.serverƒ   s   € ô " '¨1¨d×.CÑ.CÓ.EÓFÐFr1   c                 óT   • [        [        USUR                  5      [        5       5      $ )zC
Construct a TCP client endpoint wrapped to immediately start TLS.
ú	127.0.0.1)rJ   r   Úportr    ©r;   rl   ÚserverAddresss      r2   ÚclientÚStartTLSClientCreator.client‹   s)   € ô &Ü˜w¨°]×5GÑ5GÓHÜ Ó"ó
ð 	
r1   r'   N©r(   r)   r*   r+   re   rm   rt   r0   r'   r1   r2   rg   rg   }   s   † ñò
Gõ
r1   rg   c                   ó   • \ rS rSrSrS rSrg)ÚBadContextTestsMixiné•   zu
Mixin for L{ReactorBuilder} subclasses which defines a helper for testing
the handling of broken context factories.
c                 ó´   • U R                  5       nU R                  [        X[        5       5      nU R	                  [        R
                  [        U5      5        g)a�  
Assert that the exception raised by a broken context factory's
C{getContext} method is raised by some reactor method.  If it is not, an
exception will be raised to fail the test.

@param useIt: A two-argument callable which will be called with a
    reactor and a broken context factory and which is expected to raise
    the same exception as the broken context factory's C{getContext}
    method.
N)ÚbuildReactorÚassertRaisesÚ
ValueErrorr   ÚassertEqualÚmessageÚstr)r;   ÚuseItrl   Úexcs       r2   Ú_testBadContextÚ$BadContextTestsMixin._testBadContext›   sE   € ð ×#Ñ#Ó%ˆØ×Ñ¤
¨EÔ<PÓ<RÓSˆØ×ÑÔ-×5Ñ5´s¸3³xÕ@r1   r'   N)r(   r)   r*   r+   re   rƒ   r0   r'   r1   r2   rx   rx   •   s   † ñõ
Ar1   rx   c                   ó&   • \ rS rSrSr\" 5       rSrg)ÚStartTLSClientTestsMixiné«   zŽ
Tests for TLS connections established using L{ITLSTransport.startTLS} (as
opposed to L{IReactorSSL.connectSSL} or L{IReactorSSL.listenSSL}).
r'   N)r(   r)   r*   r+   re   rg   Ú	endpointsr0   r'   r1   r2   r†   r†   «   s   † ññ
 &Ó'ƒIr1   r†   c                   ó$   • \ rS rSrSrS rS rSrg)Ú
SSLCreatoré´   z
Create SSL endpoints.
c                 ó8   • [        USU R                  5       5      $ )zA
Create an SSL server endpoint on a TCP/IP-stack allocated port.
r   rj   rk   s     r2   rm   ÚSSLCreator.server¹   s   € ô " '¨1¨d×.CÑ.CÓ.EÓFÐFr1   c                 óB   • [        USUR                  [        5       5      $ )zˆ
Create an SSL client endpoint which will connect localhost on
the port given by C{serverAddress}.

@type serverAddress: L{IPv4Address}
rp   )r
   rq   r    rr   s      r2   rt   ÚSSLCreator.client¿   s$   € ô "Ø�[ -×"4Ñ"4Ô6JÓ6Ló
ð 	
r1   r'   Nrv   r'   r1   r2   rŠ   rŠ   ´   s   † ñòGõ	
r1   rŠ   c                   ó2   • \ rS rSrSr\" 5       rS rS rSr	g)ÚSSLClientTestsMixinéË   z4
Mixin defining tests relating to L{ITLSTransport}.
c                 ó,   • S nU R                  U5        g)z¦
If the context factory passed to L{IReactorSSL.connectSSL} raises an
exception from its C{getContext} method, that exception is raised by
L{IReactorSSL.connectSSL}.
c                 ó:   • U R                  SS[        5       U5      $ )Nrp   iÒ  )Ú
connectSSLr   ©rl   rN   s     r2   r�   Ú2SSLClientTestsMixin.test_badContext.<locals>.useItß   s    € Ø×%Ñ%Ø˜T¤=£?°Nóð r1   N©rƒ   ©r;   r�   s     r2   Útest_badContextÚ#SSLClientTestsMixin.test_badContextØ   s   € ò	ð
 	×Ñ˜UÕ#r1   c                 ó’  ^^	•  " S S[         5      nU R                  5       m	[        5       n[        5       Ul        Xl        U R                  5       Ul        [        5       n[        5       Ul        Xl        U R                  5       Ul        UR                  R                  UR                  l
        / m[        UR                  UR                  /SS9nU4S jnUR                  U5        T	R                  SUSS9nU R                  UR                  5        T	R!                  UR#                  5       R$                  UR#                  5       R&                  U5      nU R                  UR(                  5        UR                  U	4S	 j5        U R+                  T	5        TS   R-                  [.        5        TS
   R-                  [.        5        g)a  
L{ITCPTransport.loseConnection} ends a connection which was set up with
L{ITLSTransport.startTLS} and which has recently been written to.  This
is intended to verify that a socket send error masked by the TLS
implementation doesn't prevent the connection from being reported as
closed.
c                   ó&   • \ rS rSrS rS rS rSrg)ÚQSSLClientTestsMixin.test_disconnectAfterWriteAfterStartTLS.<locals>.ShortProtocoléï   c                 óf  • [         R                  " U R                  5      (       dB  U R                  R                  nS U R                  l        UR                  [        S5      5        g U R                  R                  U R                  R                  5        U R                  R                  S5        g )NzNo ITLSTransport supportó   x)
r   Ú
providedByrW   r`   ÚfinishedÚerrbackr   rX   ÚcontextÚwrite)r;   r£   s     r2   r[   Ú`SSLClientTestsMixin.test_disconnectAfterWriteAfterStartTLS.<locals>.ShortProtocol.connectionMadeð   s{   € Ü$×/Ò/°·±×?Ñ?à#Ÿ|™|×4Ñ4�HØ,0�D—L‘LÔ)Ø×$Ñ$¤XÐ.HÓ%IÔJØð —‘×'Ñ'¨¯©×(<Ñ(<Ô=ð —‘×$Ñ$ TÕ*r1   c                 ón   • U R                   R                  S5        U R                   R                  5         g )Nó   y)rW   r¦   ÚloseConnection)r;   Údatas     r2   ÚdataReceivedÚ^SSLClientTestsMixin.test_disconnectAfterWriteAfterStartTLS.<locals>.ShortProtocol.dataReceivedþ   s(   € ð
 —‘×$Ñ$ TÔ*ð —‘×-Ñ-Õ/r1   c                 ó|   • U R                   R                  nUb#  S U R                   l        UR                  U5        g g rA   )r`   r£   Úcallback)r;   Úreasonr£   s      r2   ÚconnectionLostÚ`SSLClientTestsMixin.test_disconnectAfterWriteAfterStartTLS.<locals>.ShortProtocol.connectionLost  s8   € ð  Ÿ<™<×0Ñ0�ØÑ'Ø,0�D—L‘LÔ)Ø×%Ñ% fÕ-ð (r1   r'   N)r(   r)   r*   r+   r[   r¬   r±   r0   r'   r1   r2   ÚShortProtocolrž   ï   s   † ò+ò0õ.r1   r³   T)ÚconsumeErrorsc                 óD   >• TR                  U S   S   U S   S   /5        g )Nr   é   )Úextend)ÚresultsÚlostConnectionResultss    €r2   Ú
cbFinishedÚNSSLClientTestsMixin.test_disconnectAfterWriteAfterStartTLS.<locals>.cbFinished"  s&   ø€ Ø!×(Ñ(¨'°!©*°Q©-¸À¹ÀA¹Ð)GÕHr1   r   rp   )Ú	interfacec                 ó$   >• TR                  5       $ rA   )Ústop)Úignrl   s    €r2   Ú<lambda>ÚLSSLClientTestsMixin.test_disconnectAfterWriteAfterStartTLS.<locals>.<lambda>/  s   ø€ ¨¯©¬r1   r¶   N)r   r{   r   r   r£   rZ   r>   r¥   r   rC   Úmethodr	   ÚaddCallbackÚ	listenTCPÚ
addCleanupÚstopListeningÚ
connectTCPÚgetHostÚhostrq   Ú
disconnectÚ
runReactorÚtrapr   )
r;   r³   ÚserverFactoryÚclientFactoryr£   rº   rq   Ú	connectorr¹   rl   s
           @@r2   Ú&test_disconnectAfterWriteAfterStartTLSÚ:SSLClientTestsMixin.test_disconnectAfterWriteAfterStartTLSæ   su  ù€ ô	.œHô 	.ðB ×#Ñ#Ó%ˆä%›ˆÜ!)£ˆÔØ!.ÔØ $× 5Ñ 5Ó 7ˆÔä%›ˆÜ!)£ˆÔØ!.ÔØ $× 5Ñ 5Ó 7ˆÔØ'4×'<Ñ'<×'CÑ'Cˆ×ÑÔ$à "ÐÜØ×#Ñ# ]×%;Ñ%;Ð<ÈDñ
ˆõ	Ið 	×Ñ˜ZÔ(à× Ñ   M¸[Ð ÐIˆØ�‰˜×*Ñ*Ô+à×&Ñ&Ø�L‰L‹N×Ñ §¡£×!4Ñ!4°mó
ˆ	ð 	�‰˜	×,Ñ,Ô-à×ÑÔ7Ô8Ø�‰˜Ô Ø˜aÑ ×%Ñ%Ô&6Ô7Ø˜aÑ ×%Ñ%Ô&6Õ7r1   r'   N)
r(   r)   r*   r+   re   rŠ   rˆ   rš   rÐ   r0   r'   r1   r2   r‘   r‘   Ë   s   † ññ “€Iò$õL8r1   r‘   c                   ó6   • \ rS rSrSrS rS rS rS rS r	Sr
g	)
ÚTLSPortTestsBuilderi5  z$
Tests for L{IReactorSSL.listenSSL}
c                 óB   • UR                  SX R                  5       5      $ )z 
Get a TLS port from a reactor.
r   )Ú	listenSSLr>   )r;   rl   r`   s      r2   ÚgetListeningPortÚ$TLSPortTestsBuilder.getListeningPortA  s    € ð × Ñ   G×-BÑ-BÓ-DÓEÐEr1   c                 ó>   • SX!R                  5       R                  4-  $ )zI
Get the message expected to be logged when a TLS port starts listening.
z%s (TLS) starting on %d©rÈ   rq   )r;   rq   r`   s      r2   Ú#getExpectedStartListeningLogMessageÚ7TLSPortTestsBuilder.getExpectedStartListeningLogMessageG  s   € ð )¨G·\±\³^×5HÑ5HÐ+IÑIÐIr1   c                 ó>   • SUR                  5       R                   S3$ )z:
Get the expected connection lost message for a TLS port.
z
(TLS Port z Closed)rÙ   )r;   rq   s     r2   ÚgetExpectedConnectionLostLogMsgÚ3TLSPortTestsBuilder.getExpectedConnectionLostLogMsgM  s    € ð ˜DŸL™L›N×/Ñ/Ð0°Ð9Ð9r1   c                 ó,   • S nU R                  U5        g)z¤
If the context factory passed to L{IReactorSSL.listenSSL} raises an
exception from its C{getContext} method, that exception is raised by
L{IReactorSSL.listenSSL}.
c                 ó8   • U R                  S[        5       U5      $ )Nr   )rÕ   r   r–   s     r2   r�   Ú2TLSPortTestsBuilder.test_badContext.<locals>.useItZ  s   € Ø×$Ñ$ Q¬«¸ÓHÐHr1   Nr˜   r™   s     r2   rš   Ú#TLSPortTestsBuilder.test_badContextS  s   € ò	Ið 	×Ñ˜UÕ#r1   c                 ón   • UR                  U R                  UR                  UU R                  5       5      $ )a¯  
Connect to the given listening TLS port, assuming the
underlying transport is TCP.

@param reactor: The reactor under test.
@type reactor: L{IReactorSSL}

@param address: The listening's address.  Only the C{port}
    component is used; see
    L{ConnectToTCPListenerMixin.LISTENER_HOST}.
@type address: L{IPv4Address} or L{IPv6Address}

@param factory: The client factory.
@type factory: L{ClientFactory}

@return: The connector
)r•   ÚLISTENER_HOSTrq   rC   )r;   rl   Úaddressr`   s       r2   ÚconnectToListenerÚ%TLSPortTestsBuilder.connectToListener_  s6   € ð$ ×!Ñ!Ø×ÑØ�L‰LØØ×!Ñ!Ó#ó	
ð 	
r1   r'   N)r(   r)   r*   r+   re   rÖ   rÚ   rÝ   rš   ræ   r0   r'   r1   r2   rÓ   rÓ   5  s"   † ñòFòJò:ò
$õ
r1   rÓ   c                   ó2   • \ rS rSrSr\4r\" 5       rS r	Sr
g)ÚAbortSSLConnectionTestsi~  z%
C{abortConnection} tests using SSL.
c                 ó(   • [         c  [        S5      eg )NzOpenSSL not available.)r   r   rB   s    r2   ÚsetUpÚAbortSSLConnectionTests.setUpˆ  s   € ÜÑÜÐ3Ó4Ð4ð  r1   r'   N)r(   r)   r*   r+   re   r   r&   rŠ   rˆ   rë   r0   r'   r1   r2   ré   ré   ~  s   † ñð &˜ÐÙ“€Iõ5r1   ré   )?re   Útypingr   r   r   Úzope.interfacer   r   Útwisted.internet.deferr   r	   Útwisted.internet.endpointsr
   r   r   Útwisted.internet.errorr   Útwisted.internet.interfacesr   r   r   Útwisted.internet.protocolr   r   r   Ú&twisted.internet.test.connectionmixinsr   r   r   Ú#twisted.internet.test.reactormixinsr   Útwisted.internet.test.test_tcpr   r   r   Útwisted.python.compatr   Útwisted.python.filepathr   Útwisted.python.runtimer   Útwisted.trial.unittestr   ÚOpenSSL.cryptor   Útwisted.internet.sslr    r!   r"   ÚImportErrorr$   r4   rJ   rg   rx   r†   rŠ   r‘   rÓ   ÚglobalsÚupdateÚmakeTestCaseClassesré   r'   r1   r2   Ú<module>r     s¶  ðñ÷
 ,Ñ +ç 1ç 9÷ñ õ
 4÷ñ ÷
 MÑ L÷ñ õ
 ?÷ñ õ
 0Ý ,Ý +Ý +ðWÝ+÷ WÑV÷
ñ 
÷&ñ &ñ, Ð"Ó#÷#6ð #6ó $ð#6ôL
˜OÐ-Cô 
÷0Añ Aô,(˜x¨Ð9Mô (ô
�Ð"8ô 
ô.g8ØØØØØôg8ôTA
ØØØØØØôA
ñH ƒ	× Ñ Ð$×8Ñ8Ó:Ô ;Ù ƒ	× Ñ Ð)×=Ñ=Ó?Ô @Ù ƒ	× Ñ Ñ$Ó&×:Ñ:Ó<Ô =ô5ØÐ(Ð*@ô5ñ ƒ	× Ñ Ð(×<Ñ<Ó>Õ ?øðC ó ØƒLðús   Á4F ÆF*Æ)F*