ó
    ×›‘hèZ  ã                   óú  • S r SSKrSSKrSSKJr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  SS
KJr   SSKJqJr  SSKJq  SSKJrJr  SSKJ r    " S S\RB                  5      r" " S S\RB                  5      r# " S S\RH                  5      r% " S S\RH                  5      r&\ " \RN                  5       " S S\RH                  5      5       r(S r)S r* " S S5      r+[.        b   " S S[2        RX                  5      r- " S  S!\\5      r. " S" S#\5      r/ " S$ S%\/5      r0 " S& S'\5      r1 " S( S)\\+5      r2 " S* S+5      r3 " S, S-\5      r4 " S. S/\5      r5g! \ a    S r\" 5          GN!f = f)0z 
Tests for twisted SSL support.
é    N)ÚdeferÚ
interfacesÚprotocolÚreactor)ÚConnectionDone)ÚwaitUntilAllDisconnected)Úbasic)ÚFilePath)Úplatform)ÚProperlyCloseFilesMixin)ÚTestCase)ÚSSLÚcrypto)Ússl)ÚClientTLSContextÚcertPathc                  ó   • S =q qg ©N)r   r   © ó    ÚYC:\Users\psant\Downloads\Noiseback\school\venv\Lib\site-packages\twisted/test/test_ssl.pyÚ_noSSLr      s   € ð Ðˆ‰cr   )Úimplementerc                   ó@   • \ rS rSrSr/ SQrSS/rS rS rS r	S	 r
S
rg)ÚUnintelligentProtocolé'   zò
@ivar deferred: a deferred that will fire at connection lost.
@type deferred: L{defer.Deferred}

@cvar pretext: text sent before TLS is set up.
@type pretext: C{bytes}

@cvar posttext: text sent after TLS is set up.
@type posttext: C{bytes}
)s
   first lines   last thing before tls startsó   STARTTLSs   first thing after tls starteds   last thing everc                 ó8   • [         R                  " 5       U l        g r   ©r   ÚDeferredÚdeferred©Úselfs    r   Ú__init__ÚUnintelligentProtocol.__init__7   ó   € ÜŸšÓ(ˆ�r   c                 óL   • U R                    H  nU R                  U5        M     g r   )ÚpretextÚsendLine)r#   Úls     r   ÚconnectionMadeÚ$UnintelligentProtocol.connectionMade:   s   € Ø—”ˆAØ�M‰M˜!Öò r   c                 óþ   • US:X  aw  U R                   R                  [        5       U R                  R                  5        U R
                   H  nU R                  U5        M     U R                   R                  5         g g )Nó   READY)Ú	transportÚstartTLSr   ÚfactoryÚclientÚposttextr)   ÚloseConnection)r#   Úliner*   s      r   ÚlineReceivedÚ"UnintelligentProtocol.lineReceived>   s[   € Ø�8ÓØ�N‰N×#Ñ#Ô$4Ó$6¸¿¹×8KÑ8KÔLØ—]”]�Ø—‘˜aÖ ñ #à�N‰N×)Ñ)Õ+ð	 r   c                 ó:   • U R                   R                  S 5        g r   ©r!   Úcallback©r#   Úreasons     r   ÚconnectionLostÚ$UnintelligentProtocol.connectionLostE   ó   € Ø�‰×Ñ˜tÕ$r   ©r!   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r(   r3   r$   r+   r6   r=   Ú__static_attributes__r   r   r   r   r   '   s.   † ñ	ò L€Gà0Ð2DÐE€Hò)òò,õ%r   r   c                   ó:   • \ rS rSrSrS
S jrS rS rS rS r	Sr
g	)ÚLineCollectoréI   a*  
@ivar deferred: a deferred that will fire at connection lost.
@type deferred: L{defer.Deferred}

@ivar doTLS: whether the protocol is initiate TLS or not.
@type doTLS: C{bool}

@ivar fillBuffer: if set to True, it will send lots of data once
    C{STARTTLS} is received.
@type fillBuffer: C{bool}
c                 óP   • Xl         X l        [        R                  " 5       U l        g r   )ÚdoTLSÚ
fillBufferr   r    r!   )r#   rK   rL   s      r   r$   ÚLineCollector.__init__V   s   € ØŒ
Ø$ŒÜŸšÓ(ˆ�r   c                 óH   • SU R                   l        / U R                   l        g )Nr   )r1   ÚrawdataÚlinesr"   s    r   r+   ÚLineCollector.connectionMade[   s   € Ø"ˆ�‰ÔØˆ�‰Õr   c                 ó¬  • U R                   R                  R                  U5        US:X  a©  U R                  (       a#  [	        S5       H  nU R                  S5        M     U R                  S5        U R                  (       aB  [        [        [        S9nU R                  R                  X0R                   R                  5        g U R                  5         g g )Nr   iô  sè  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXr.   )ÚprivateKeyFileNameÚcertificateFileName)r1   rP   ÚappendrL   Úranger)   rK   ÚServerTLSContextr   r/   r0   ÚserverÚ
setRawMode)r#   r5   ÚxÚctxs       r   r6   ÚLineCollector.lineReceived_   s“   € Ø�‰×Ñ×!Ñ! $Ô'Ø�;ÓØ��Ü˜sž�AØ—M‘M +Ö.ñ $à�M‰M˜(Ô#Ø�z�zÜ&Ü'/Ü(0ñ�ð —‘×'Ñ'¨¯\©\×-@Ñ-@ÕAà—‘Õ!ð r   c                 óv   • U R                   =R                  U-  sl        U R                  R                  5         g r   )r1   rO   r/   r4   ©r#   Údatas     r   ÚrawDataReceivedÚLineCollector.rawDataReceivedo   s'   € Ø�‰×Ò Ñ$ÕØ�‰×%Ñ%Õ'r   c                 ó:   • U R                   R                  S 5        g r   r9   r;   s     r   r=   ÚLineCollector.connectionLosts   r?   r   )r!   rK   rL   N©F)rA   rB   rC   rD   rE   r$   r+   r6   r`   r=   rF   r   r   r   rH   rH   I   s    † ñ
ô)ò
 ò"ò (õ%r   rH   c                   ó   • \ rS rSrSrS rSrg)ÚSingleLineServerProtocoléw   zC
A protocol that sends a single line of data at C{connectionMade}.
c                 ón   • U R                   R                  S5        U R                   R                  5         g )Nó   +OK <some crap>
)r/   ÚwriteÚgetPeerCertificater"   s    r   r+   Ú'SingleLineServerProtocol.connectionMade|   s%   € Ø�‰×ÑÐ3Ô4Ø�‰×)Ñ)Õ+r   r   N)rA   rB   rC   rD   rE   r+   rF   r   r   r   rf   rf   w   s   † ñõ,r   rf   c                   ó*   • \ rS rSrSrS rS rS rSrg)ÚRecordingClientProtocolé�   zj
@ivar deferred: a deferred that will fire with first received content.
@type deferred: L{defer.Deferred}
c                 ó8   • [         R                  " 5       U l        g r   r   r"   s    r   r$   Ú RecordingClientProtocol.__init__‡   r&   r   c                 ó8   • U R                   R                  5         g r   )r/   rk   r"   s    r   r+   Ú&RecordingClientProtocol.connectionMadeŠ   s   € Ø�‰×)Ñ)Õ+r   c                 ó:   • U R                   R                  U5        g r   r9   r^   s     r   ÚdataReceivedÚ$RecordingClientProtocol.dataReceived�   r?   r   r@   N)	rA   rB   rC   rD   rE   r$   r+   ru   rF   r   r   r   rn   rn   �   s   † ñò
)ò,õ%r   rn   c                   ó$   • \ rS rSrSrS rS rSrg)Ú ImmediatelyDisconnectingProtocolé‘   z‰
A protocol that disconnect immediately on connection. It fires the
C{connectionDisconnected} deferred of its factory on connetion lost.
c                 ó8   • U R                   R                  5         g r   ©r/   r4   r"   s    r   ÚhandshakeCompletedÚ3ImmediatelyDisconnectingProtocol.handshakeCompleted˜   s   € Ø�‰×%Ñ%Õ'r   c                 óN   • U R                   R                  R                  S 5        g r   )r1   ÚconnectionDisconnectedr:   r;   s     r   r=   Ú/ImmediatelyDisconnectingProtocol.connectionLost›   s   € Ø�‰×+Ñ+×4Ñ4°TÕ:r   r   N)rA   rB   rC   rD   rE   r|   r=   rF   r   r   r   rx   rx   ‘   s   † ñò
(õ;r   rx   c                 óŠ  • [         R                  " 5       nUR                  [         R                  S5        [         R                  " 5       nUR                  5       nXl        Xl        UR                  U5        UR                  US5        [         R                  " 5       nUR                  S5        UR                  S5        UR                  S5        UR                  UR                  5       5        UR                  UR                  5       5        UR                  UR!                  5       5        UR                  US5        X#U4$ )z…
Create a certificate for given C{organization} and C{organizationalUnit}.

@return: a tuple of (key, request, certificate) objects.
i   Úmd5é   r   é<   )r   ÚPKeyÚgenerate_keyÚTYPE_RSAÚX509ReqÚget_subjectÚOÚOUÚ
set_pubkeyÚsignÚX509Úset_serial_numberÚgmtime_adj_notBeforeÚgmtime_adj_notAfterÚ
set_issuerÚset_subjectÚ
get_pubkey)ÚorganizationÚorganizationalUnitÚpkeyÚreqÚsubjectÚcerts         r   ÚgenerateCertificateObjectsr›   Ÿ   sé   € ô �;Š;‹=€DØ×Ñ”f—o‘o tÔ,Ü
�.Š.Ó
€CØ�o‰oÓ€GØ„IØ#„JØ‡N�N�4ÔØ‡H�HˆT�5Ôô �;Š;‹=€DØ×Ñ˜1ÔØ×Ñ˜aÔ Ø×Ñ˜RÔ Ø‡O�O�C—O‘OÓ%Ô&Ø×Ñ�S—_‘_Ó&Ô'Ø‡O�O�C—N‘NÓ$Ô%Ø‡I�Iˆd�EÔà�dˆ?Ðr   c                 ó`  • [        X5      u  p4nSU[        R                  4SU[        R                  4SU[        R                  44 Hd  u  pgn[
        R                  R                  X45      R                  S5      n	[        U	5      R                  U" [        R                  U5      5        Mf     g)zy
Create certificate files key, req and cert prefixed by C{basename} for
given C{organization} and C{organizationalUnit}.
Úkeyr˜   rš   zutf-8N)r›   r   Údump_privatekeyÚdump_certificate_requestÚdump_certificateÚosÚextsepÚjoinÚencoder
   Ú
setContentÚFILETYPE_PEM)
Úbasenamer•   r–   r—   r˜   rš   ÚextÚobjÚdumpFuncÚfNames
             r   ÚgenerateCertificateFilesr¬   »   s•   € ô
 1°ÓR�O€Dˆtð 
�”f×,Ñ,Ð-Ø	�”V×4Ñ4Ð5Ø	�”v×.Ñ.Ð/óÑˆ�(ô
 —	‘	—‘ ˜Ó/×6Ñ6°wÓ?ˆÜ�‹×"Ñ"¡8¬F×,?Ñ,?ÀÓ#EÖFòr   c                   ó$   • \ rS rSrSrS rS rSrg)ÚContextGeneratingMixinéË   a4  
Offer methods to create L{ssl.DefaultOpenSSLContextFactory} for both client
and server.

@ivar clientBase: prefix of client certificate files.
@type clientBase: C{str}

@ivar serverBase: prefix of server certificate files.
@type serverBase: C{str}

@ivar clientCtxFactory: a generated context factory to be used in
    L{IReactorSSL.connectSSL}.
@type clientCtxFactory: L{ssl.DefaultOpenSSLContextFactory}

@ivar serverCtxFactory: a generated context factory to be used in
    L{IReactorSSL.listenSSL}.
@type serverCtxFactory: L{ssl.DefaultOpenSSLContextFactory}
c                 óò   • U R                  5       n[        XQU5        [        R                  " [        R
                  R                  US45      [        R
                  R                  US45      /UQ70 UD6nXV4$ )Nr�   rš   )Úmktempr¬   r   ÚDefaultOpenSSLContextFactoryr¡   r¢   r£   )r#   ÚorgÚorgUnitÚargsÚkwArgsÚbaseÚserverCtxFactorys          r   ÚmakeContextFactoryÚ)ContextGeneratingMixin.makeContextFactoryß   so   € Ø�{‰{‹}ˆÜ  ¨GÔ4Ü×;Ò;Ü�I‰I�N‰N˜D %˜=Ó)Ü�I‰I�N‰N˜D &˜>Ó*ð
ð ò
ð ñ	
Ðð Ð%Ð%r   c                 ó€   • U R                   " U0 UD6u  U l        U l        U R                   " U0 UD6u  U l        U l        g r   )r¹   Ú
clientBaseÚclientCtxFactoryÚ
serverBaser¸   )r#   Ú
clientArgsÚclientKwArgsÚ
serverArgsÚserverKwArgss        r   ÚsetupServerAndClientÚ+ContextGeneratingMixin.setupServerAndClientë   sN   € Ø15×1HÒ1HØð2
Ø'ñ2
Ñ.ˆŒ˜Ô.ð 26×1HÒ1HØð2
Ø'ñ2
Ñ.ˆŒ˜Õ.r   )r¼   r½   r¾   r¸   N)rA   rB   rC   rD   rE   r¹   rÃ   rF   r   r   r   r®   r®   Ë   s   † ñò&
&õ
r   r®   c                   ó"   • \ rS rSrSrSrS rSrg)rW   éö   zN
A context factory with a default method set to
L{OpenSSL.SSL.SSLv23_METHOD}.
Fc                 ór   • [         R                  US'   [        R                  R                  " U /UQ70 UD6  g )NÚ	sslmethod)r   ÚSSLv23_METHODr   r²   r$   )r#   rµ   Úkws      r   r$   ÚServerTLSContext.__init__þ   s/   € Ü!×/Ñ/ˆBˆ{‰OÜ×,Ñ,×5Ò5°dÐH¸TÒHÀRÓHr   r   N)rA   rB   rC   rD   rE   ÚisClientr$   rF   r   r   r   rW   rW   ö   s   † ñ	ð
 ˆõ	Ir   rW   c                   ó\   • \ rS rSrSr\R                  " \S5      c  SrS r	S r
S rS rS	rg)
ÚStolenTCPTestsi  zW
For SSL transports, test many of the same things which are tested for
TCP transports.
Nú2Reactor does not support SSL, cannot run SSL testsc                 óÀ   • [         R                  R                  [        [        5      R                  5       5      nUR                  5       n[        R                  " X#XQS9$ )zI
Create an SSL server with a certificate using L{IReactorSSL.listenSSL}.
©Ú	interface)	r   ÚPrivateCertificateÚloadPEMr
   r   Ú
getContentÚoptionsr   Ú	listenSSL)r#   ÚaddressÚ
portNumberr1   rš   ÚcontextFactorys         r   ÚcreateServerÚStolenTCPTests.createServer  sF   € ô ×%Ñ%×-Ñ-¬h´xÓ.@×.KÑ.KÓ.MÓNˆØŸ™›ˆÜ× Ò  °nÑXÐXr   c                 óP   • [         R                  " 5       nUR                  XU5      $ )z7
Create an SSL client using L{IReactorSSL.connectSSL}.
)r   ÚCertificateOptionsÚ
connectSSL)r#   rØ   rÙ   ÚclientCreatorrÚ   s        r   ÚconnectClientÚStolenTCPTests.connectClient  s%   € ô ×/Ò/Ó1ˆØ×'Ñ'¨¸^ÓLÐLr   c                 ó"   • [         R                  $ )zš
Return L{OpenSSL.SSL.Error} as the expected error type which will be
raised by a write to the L{OpenSSL.SSL.Connection} object after it has
been closed.
)r   ÚErrorr"   s    r   ÚgetHandleExceptionTypeÚ%StolenTCPTests.getHandleExceptionType  s   € ô �y‰yÐr   c                 óN  • [         R                  " [         R                  " [         R                  " S5      [         R                  " [         R                  " S5      [         R                  " S5      [         R                  " S5      5      [         R                  " S5      5      5      $ )a  
Return a L{hamcrest.core.matcher.Matcher} for the argument
L{OpenSSL.SSL.Error} will be constructed with for this case.
This is basically just a random OpenSSL implementation detail.
It would be better if this test worked in a way which did not
require this.
zSSL routinesÚ	SSL_writeÚssl_write_internalÚ zprotocol is shutdown)ÚhamcrestÚcontainsÚequal_toÚany_ofr"   s    r   ÚgetHandleErrorCodeMatcherÚ(StolenTCPTests.getHandleErrorCodeMatcher#  s{   € ô × Ò Ü×ÒÜ×!Ò! .Ó1Ü—’Ü×%Ò% kÓ2Ü×%Ò%Ð&:Ó;Ü×%Ò% bÓ)óô
 ×!Ò!Ð"8Ó9óó

ð 
	
r   r   )rA   rB   rC   rD   rE   r   ÚIReactorSSLr   ÚskiprÛ   rá   rå   rï   rF   r   r   r   rÎ   rÎ     s7   † ñð
 ×Ò˜g tÓ,Ñ4ØCˆòYòMòõ
r   rÎ   c                   ór   • \ rS rSrSr\R                  " \S5      c  SrSr	Sr
SrS rSS jrS rS	 rS
 rSrg)ÚTLSTestsi:  zs
Tests for startTLS support.

@ivar fillBuffer: forwarded to L{LineCollector.fillBuffer}
@type fillBuffer: C{bool}
NrÏ   Fc                 óò   • U R                   R                  b$  U R                   R                  R                  5         U R                  R                  b%  U R                  R                  R                  5         g g r   )ÚclientProtor/   r4   ÚserverProtor"   s    r   ÚtearDownÚTLSTests.tearDownJ  s[   € Ø×Ñ×%Ñ%Ñ1Ø×Ñ×&Ñ&×5Ñ5Ô7Ø×Ñ×%Ñ%Ñ1Ø×Ñ×&Ñ&×5Ñ5Õ7ð 2r   c                 ó,  ^^• TU l         [        R                  " 5       =o@l        U4S jUl        U(       a  SUl        OSUl        TU l        [        R                  " 5       =oPl        U4S jUl        U(       a  SUl        OSUl        [        R                  " SUSS9nU R                  UR                  5        [        R                  " SUR                  5       R                  U5        [         R"                  " TR$                  TR$                  /5      $ )am  
Helper method to run TLS tests.

@param clientProto: protocol instance attached to the client
    connection.
@param serverProto: protocol instance attached to the server
    connection.
@param clientIsServer: flag indicated if client should initiate
    startTLS instead of server.

@return: a L{defer.Deferred} that will fire when both connections are
    lost.
c                  ó   >• T $ r   r   ©rö   s   €r   Ú<lambda>Ú#TLSTests._runTest.<locals>.<lambda>`  ó   ø€ ™kr   FTc                  ó   >• T $ r   r   ©r÷   s   €r   rý   rþ   h  rÿ   r   r   ú	127.0.0.1rÑ   )rö   r   ÚClientFactoryÚclientFactoryrX   r2   r÷   ÚServerFactoryÚserverFactoryr   Ú	listenTCPÚ
addCleanupÚstopListeningÚ
connectTCPÚgetHostÚportr   ÚgatherResultsr!   )r#   rö   r÷   ÚclientIsServerÚcfÚsfr  s    ``    r   Ú_runTestÚTLSTests._runTestP  sÓ   ù€ ð 'ˆÔÜ"*×"8Ò"8Ó":Ð:ˆÔÜ)ˆŒÞØˆB�IàˆBŒIà&ˆÔÜ"*×"8Ò"8Ó":Ð:ˆÔÜ)ˆŒÞØˆB�IàˆBŒIä× Ò   B°+Ñ>ˆØ�‰˜×*Ñ*Ô+ä×Ò˜;¨¯©«×(;Ñ(;¸RÔ@ä×"Ò" K×$8Ñ$8¸+×:NÑ:NÐ#OÓPÐPr   c                 óŽ   ^ • U 4S jnT R                  [        5       [        ST R                  5      5      nUR	                  U5      $ )zf
Test for server and client startTLS: client should received data both
before and after the startTLS.
c                 ó�   >• TR                  TR                  R                  [        R                  [        R
                  -   5        g r   )ÚassertEqualr  rP   r   r(   r3   )Úignorer#   s    €r   ÚcheckÚ TLSTests.test_TLS.<locals>.check{  ó5   ø€ Ø×ÑØ×"Ñ"×(Ñ(Ü%×-Ñ-Ô0E×0NÑ0NÑNõr   T©r  r   rH   rL   ÚaddCallback©r#   r  Úds   `  r   Útest_TLSÚTLSTests.test_TLSu  s8   ø€ õ	ð �M‰MÔ/Ó1´=ÀÀtÇÁÓ3WÓXˆØ�}‰}˜UÓ#Ð#r   c                 óŽ   ^ • U 4S jnT R                  [        5       [        ST R                  5      5      nUR	                  U5      $ )zƒ
Test for server startTLS not followed by a startTLS in client: the data
received after server startTLS should be received as raw.
c                 óº   >• TR                  TR                  R                  [        R                  5        TR                  TR                  R                  S5        g )NzNo encrypted bytes received)r  r  rP   r   r(   Ú
assertTruerO   ©Úignoredr#   s    €r   r  Ú"TLSTests.test_unTLS.<locals>.checkŠ  sA   ø€ Ø×Ñ˜T×/Ñ/×5Ñ5Ô7L×7TÑ7TÔUØ�O‰O˜D×.Ñ.×6Ñ6Ð8UÕVr   Fr  r  s   `  r   Ú
test_unTLSÚTLSTests.test_unTLS„  s=   ø€ õ	Wð �M‰MÜ!Ó#¤]°5¸$¿/¹/Ó%Jó
ˆð �}‰}˜UÓ#Ð#r   c                 ó�   ^ • U 4S jnT R                  [        ST R                  5      [        5       S5      nUR	                  U5      $ )z*
Test startTLS first initiated by client.
c                 ó�   >• TR                  TR                  R                  [        R                  [        R
                  -   5        g r   )r  r  rP   r   r(   r3   r#  s    €r   r  Ú)TLSTests.test_backwardsTLS.<locals>.check˜  r  r   T)r  rH   rL   r   r  r  s   `  r   Útest_backwardsTLSÚTLSTests.test_backwardsTLS“  s?   ø€ õ
	ð �M‰MÜ˜$ §¡Ó0Ô2GÓ2IÈ4ó
ˆð �}‰}˜UÓ#Ð#r   )r  rö   r  r÷   rd   )rA   rB   rC   rD   rE   r   rñ   r   rò   rL   rö   r÷   rø   r  r  r&  r+  rF   r   r   r   rô   rô   :  sK   † ñð ×Ò˜g tÓ,Ñ4ØCˆà€Jà€KØ€Kò8ô#QòJ$ò$õ$r   rô   c                   óH   • \ rS rSrSr\R                  " \S5      c  SrSr	Sr
g)ÚSpammyTLSTestsi¤  z9
Test TLS features with bytes sitting in the out buffer.
NrÏ   Tr   )rA   rB   rC   rD   rE   r   rñ   r   rò   rL   rF   r   r   r   r.  r.  ¤  s&   † ñð ×Ò˜g tÓ,Ñ4ØCˆàƒJr   r.  c                   óT   • \ rS rSr\R
                  " \S5      c  SrSrSr	S r
S rSrg)ÚBufferingTestsi¯  NrÏ   c                 ó:  • U R                   R                  b$  U R                   R                  R                  5         U R                  R                  b$  U R                  R                  R                  5         [	        [
        U R                   U R                  /5      $ r   )r÷   r/   r4   rö   r   r   r"   s    r   rø   ÚBufferingTests.tearDown¶  st   € Ø×Ñ×%Ñ%Ñ1Ø×Ñ×&Ñ&×5Ñ5Ô7Ø×Ñ×%Ñ%Ñ1Ø×Ñ×&Ñ&×5Ñ5Ô7ä'¬°$×2BÑ2BÀD×DTÑDTÐ1UÓVÐVr   c                 ó‚  ^^• [        5       =mU l        [        5       =mU l        [        R
                  " 5       n[        R                  " 5       =o l        U4S jUl        U4S jUl        [        R                  " [        [        5      n[        R                  " 5       n[        R                  " SXSS9nU R                  UR                  5        [        R                   " SUR#                  5       R$                  X$5      nU R                  UR&                  5        TR(                  R+                  U R,                  S5      $ )Nc                  ó   >• T $ r   r   r  s   €r   rý   Ú6BufferingTests.test_openSSLBuffering.<locals>.<lambda>Å  ó   ø€ ¡+r   c                  ó   >• T $ r   r   rü   s   €r   rý   r5  Æ  r6  r   r   r  rÑ   ri   )rf   r÷   rn   rö   r   r  r  r2   r   r²   r   ÚClientContextFactoryr   r×   r  r	  rß   r  r  Ú
disconnectr!   r  r  )	r#   rX   r2   ÚsCTXÚcCTXr  ÚclientConnectorrö   r÷   s	          @@r   Útest_openSSLBufferingÚ$BufferingTests.test_openSSLBuffering¾  sô   ù€ Ü)AÓ)CÐCˆ�dÔ&Ü)@Ó)BÐBˆ�dÔ&ä×'Ò'Ó)ˆÜ'×5Ò5Ó7Ð7ˆ”ä-ˆŒÜ-ˆŒä×/Ò/´¼(ÓCˆÜ×'Ò'Ó)ˆä× Ò   F¸KÑHˆØ�‰˜×*Ñ*Ô+ä!×,Ò,Ø˜Ÿ™›×,Ñ,¨fó
ˆð 	�‰˜×2Ñ2Ô3à×#Ñ#×/Ñ/Ø×ÑÐ4ó
ð 	
r   )r2   rö   r÷   )rA   rB   rC   rD   r   rñ   r   rò   r÷   rö   rø   r=  rF   r   r   r   r0  r0  ¯  s/   † Ø×Ò˜g tÓ,Ñ4ØCˆà€KØ€KòWõ
r   r0  c                   ó\   • \ rS rSrSr\R                  " \S5      c  SrS r	S r
S rS rS	rg)
ÚConnectionLostTestsiØ  z
SSL connection closing tests.
NrÏ   c                 ó  ^ • SnT R                  XS-   40 XS-   40 5        [        R                  " 5       n[        R                  Ul        [        R
                  " SUT R                  5      =T l        n[        R                  " 5       n[        Ul        [        R                  " 5       Ul        [        R                  " SUR                  5       R                  UT R                   5        UR                  R#                  U 4S j5      $ )Nútwisted.test.test_sslú, clientú, serverr   r  c                 ó8   >• TR                   R                  5       $ r   )Ú
serverPortr	  )ÚignoredResultr#   s    €r   rý   Ú=ConnectionLostTests.testImmediateDisconnect.<locals>.<lambda>ù  s   ø€  $§/¡/×"?Ñ"?Ô"Ar   )rÃ   r   r  ÚProtocolr   r×   r¸   rF  r  rx   r   r    r   rß   r  r  r½   r  )r#   r³   ÚserverProtocolFactoryrF  ÚclientProtocolFactorys   `    r   ÚtestImmediateDisconnectÚ+ConnectionLostTests.testImmediateDisconnectà  sí   ø€ Ø%ˆØ×!Ñ!Ø˜
Ñ"Ð# R¨#°ZÑ/?Ð)@À"ô	
ô !)× 6Ò 6Ó 8ÐÜ)1×):Ñ):ÐÔ&Ü'.×'8Ò'8ØÐ$ d×&;Ñ&;ó(
ð 	
ˆŒ˜*ô !)× 6Ò 6Ó 8ÐÜ)IÐÔ&Ü7<·~²~Ó7GÐÔ4Ü×ÒØØ×ÑÓ ×%Ñ%Ø!Ø×!Ñ!ô		
ð %×;Ñ;×GÑGÜAó
ð 	
r   c                 óÐ  ^^• [        [        R                  5       " S S[        R                  5      5       nSnU R                  X"S-   40 X"S-   40 5        U" 5       m[        R                  " 5       nU4S jUl        [        R                  " SX0R                  5      nU R                  UR                  5        U" 5       m[        R                  " 5       nU4S jUl        [        R                  " S	UR                  5       R                  UU R                   5        S
 n["        R$                  " TR&                  R)                  U5      TR&                  R)                  U5      /5      $ )z•
Both sides of SSL connection close connection; the connections should
close cleanly, and only after the underlying TCP connection has
disconnected.
c                   ó*   • \ rS rSrSrS rS rS rSrg)ÚMConnectionLostTests.test_bothSidesLoseConnection.<locals>.CloseAfterHandshakei  Fc                 ó8   • [         R                  " 5       U l        g r   )r   r    Údoner"   s    r   r$   ÚVConnectionLostTests.test_bothSidesLoseConnection.<locals>.CloseAfterHandshake.__init__  s   € Ü!ŸNšNÓ,�•	r   c                 ó8   • U R                   R                  5         g r   r{   r"   s    r   r|   Ú`ConnectionLostTests.test_bothSidesLoseConnection.<locals>.CloseAfterHandshake.handshakeCompleted
  s   € Ø—‘×-Ñ-Õ/r   c                 ó>   • U R                   R                  U5        U ? g r   )rR  Úerrbackr;   s     r   r=   Ú\ConnectionLostTests.test_bothSidesLoseConnection.<locals>.CloseAfterHandshake.connectionLost  s   € Ø—	‘	×!Ñ! &Ô)Ø‘Ir   )rR  N)	rA   rB   rC   rD   ÚgotDatar$   r|   r=   rF   r   r   r   ÚCloseAfterHandshakerP    s   † àˆGò-ò0õr   rZ  rB  rC  rD  c                  ó   >• T $ r   r   ©ÚserverProtocols   €r   rý   ÚBConnectionLostTests.test_bothSidesLoseConnection.<locals>.<lambda>  ó   ø€ ±r   r   c                  ó   >• T $ r   r   ©ÚclientProtocols   €r   rý   r^    r_  r   r  c                 ó.   • U R                  [        5        g r   )Útrapr   )Úfailures    r   ÚcheckResultÚEConnectionLostTests.test_bothSidesLoseConnection.<locals>.checkResult&  s   € Ø�L‰LœÕ(r   )r   r   ÚIHandshakeListenerr   rI  rÃ   r  r   r×   r¸   r  r	  r  rß   r  r  r½   r   r  rR  Ú
addErrback)	r#   rZ  r³   rJ  rF  rK  rf  rb  r]  s	          @@r   Útest_bothSidesLoseConnectionÚ0ConnectionLostTests.test_bothSidesLoseConnectionü  s@  ù€ ô 
”Z×2Ñ2Ó	3ô	¤(×"3Ñ"3ó 	ó 
4ð	ð &ˆØ×!Ñ!Ø˜
Ñ"Ð# R¨#°ZÑ/?Ð)@À"ô	
ñ -Ó.ˆÜ (× 6Ò 6Ó 8ÐÜ)?ÐÔ&Ü×&Ò& qÐ*?×AVÑAVÓWˆ
Ø�‰˜
×0Ñ0Ô1á,Ó.ˆÜ (× 6Ò 6Ó 8ÐÜ)?ÐÔ&Ü×ÒØØ×ÑÓ ×%Ñ%Ø!Ø×!Ñ!ô		
ò	)ô ×"Ò"à×#Ñ#×.Ñ.¨{Ó;Ø×#Ñ#×.Ñ.¨{Ó;ðó
ð 	
r   c                 óL  ^	^
• SnU R                  XS-   40 XS-   40 5        S nU R                  R                  5       R                  [        R
                  U5        [        R                  " 5       n[        R                  " 5       m
UR                  T
l        [        R                  " 5       nU
4S jUl        [        R                  " SX@R                  5      =U l        n[        R                  " 5       n[        R                  " 5       m	UR                  T	l        [        R"                  " 5       nU	4S jUl        [        R$                  " SUR'                  5       R(                  UU R                  5        [        R*                  " X6/S	S
9nUR-                  U R.                  5      $ )NrB  rC  rD  c                  ó   • g)NFr   )Úas    r   ÚverifyÚ4ConnectionLostTests.testFailedVerify.<locals>.verify6  s   € Ør   c                  ó   >• T $ r   r   r\  s   €r   rý   Ú6ConnectionLostTests.testFailedVerify.<locals>.<lambda>?  r_  r   r   c                  ó   >• T $ r   r   ra  s   €r   rý   rr  H  r_  r   r  T)ÚconsumeErrors)rÃ   r½   Ú
getContextÚ
set_verifyr   ÚVERIFY_PEERr   r    r   rI  r:   r=   r  r   r×   r¸   rF  r  rß   r  r  ÚDeferredListr  Ú_cbLostConns)r#   r³   ro  ÚserverConnLostrJ  rF  ÚclientConnLostrK  Údlrb  r]  s            @@r   ÚtestFailedVerifyÚ$ConnectionLostTests.testFailedVerify0  s\  ù€ Ø%ˆØ×!Ñ!Ø˜
Ñ"Ð# R¨#°ZÑ/?Ð)@À"ô	
ò	ð 	×Ñ×(Ñ(Ó*×5Ñ5´c·o±oÀvÔNäŸšÓ)ˆÜ!×*Ò*Ó,ˆØ(6×(?Ñ(?ˆÔ%Ü (× 6Ò 6Ó 8ÐÜ)?ÐÔ&Ü'.×'8Ò'8ØÐ$×&;Ñ&;ó(
ð 	
ˆŒ˜*ô ŸšÓ)ˆÜ!×*Ò*Ó,ˆØ(6×(?Ñ(?ˆÔ%Ü (× 6Ò 6Ó 8ÐÜ)?ÐÔ&Ü×ÒØØ×ÑÓ ×%Ñ%Ø!Ø×!Ñ!ô		
ô ×Ò Ð @ÐPTÑUˆØ�~‰~˜d×/Ñ/Ó0Ð0r   c                 óL  • Uu  u  p#u  pEU R                  U5        U R                  U5        [        R                  /n[        R                  " 5       (       a  SSKJn  UR                  U5        UR                  " U6   UR                  " U6   U R                  R                  5       $ )Nr   )ÚConnectionLost)ÚassertFalser   rä   r   Ú	isWindowsÚtwisted.internet.errorr€  rU   rd  rF  r	  )r#   ÚresultsÚsSuccessÚsResultÚcSuccessÚcResultÚacceptableErrorsr€  s           r   ry  Ú ConnectionLostTests._cbLostConnsS  s‰   € Ø3:Ñ0ÑˆÑ0˜hà×Ñ˜Ô"Ø×Ñ˜Ô"äŸI™I˜;Ðô ×Ò×ÑÝ=à×#Ñ# NÔ3à�ŠÐ&Ñ'Ø�ŠÐ&Ñ'à�‰×,Ñ,Ó.Ð.r   )rF  )rA   rB   rC   rD   rE   r   rñ   r   rò   rL  rj  r}  ry  rF   r   r   r   r@  r@  Ø  s7   † ñð ×Ò˜g tÓ,Ñ4ØCˆò
ò82
òh!1õF/r   r@  c                   ó0   • \ rS rSrSrS rS rS rS rSr	g)	ÚFakeContextin  zC
L{OpenSSL.SSL.Context} double which can more easily be inspected.
c                 ó   • Xl         SU l        g )Nr   ©Ú_methodÚ_options)r#   Úmethods     r   r$   ÚFakeContext.__init__s  s   € ØŒØˆ�r   c                 ó.   • U =R                   U-  sl         g r   )r�  )r#   rÖ   s     r   Úset_optionsÚFakeContext.set_optionsw  s   € Ø�Š˜Ñ Žr   c                 ó   • g r   r   ©r#   ÚfileNames     r   Úuse_certificate_fileÚ FakeContext.use_certificate_filez  ó   € Ør   c                 ó   • g r   r   r—  s     r   Úuse_privatekey_fileÚFakeContext.use_privatekey_file}  r›  r   rŽ  N)
rA   rB   rC   rD   rE   r$   r”  r™  r�  rF   r   r   r   rŒ  rŒ  n  s   † ñòò!òõr   rŒ  c                   ó\   • \ rS rSrSr\R                  " \S5      c  SrS r	S r
S rS rS	rg)
Ú!DefaultOpenSSLContextFactoryTestsi�  z0
Tests for L{ssl.DefaultOpenSSLContextFactory}.
NrÏ   c                 ó�   • [         R                  " [        [        [        S9U l        U R                  R                  5       U l        g )N)Ú_contextFactory)r   r²   r   rŒ  rÚ   ru  Úcontextr"   s    r   ÚsetUpÚ'DefaultOpenSSLContextFactoryTests.setUp‰  s6   € ô "×>Ò>Ü”h´ñ
ˆÔð ×*Ñ*×5Ñ5Ó7ˆ�r   c                 ób  • U R                  U R                  R                  [        R                  5        U R                  U R                  R
                  [        R                  -  [        R                  5        U R                  U R                  R
                  [        R                  -  5        g)zs
L{ssl.DefaultOpenSSLContextFactory.getContext} returns an SSL context
which can use SSLv3 or TLSv1 but not SSLv2.
N)	r  r£  r�  r   Ú
TLS_METHODr�  ÚOP_NO_SSLv2r�  ÚOP_NO_TLSv1_2r"   s    r   Útest_methodÚ-DefaultOpenSSLContextFactoryTests.test_method‘  sp   € ð 	×Ñ˜Ÿ™×-Ñ-¬s¯~©~Ô>ð 	×Ñ˜Ÿ™×.Ñ.´·±Ñ@Ä#Ç/Á/ÔRð 	×Ñ˜Ÿ™×.Ñ.´×1BÑ1BÑBÕCr   c                 óˆ   • U R                  [        R                  [        R                  [
        U R                  5       5        g)z±
Instantiating L{ssl.DefaultOpenSSLContextFactory} with a certificate
filename which does not identify an existing file results in the
initializer raising L{OpenSSL.SSL.Error}.
N)ÚassertRaisesr   rä   r   r²   r   r±   r"   s    r   Útest_missingCertificateFileÚ=DefaultOpenSSLContextFactoryTests.test_missingCertificateFileŸ  s+   € ð 	×ÑÜ�I‰I”s×7Ñ7¼À4Ç;Á;Ã=õ	
r   c                 óˆ   • U R                  [        R                  [        R                  U R                  5       [        5        g)z±
Instantiating L{ssl.DefaultOpenSSLContextFactory} with a private key
filename which does not identify an existing file results in the
initializer raising L{OpenSSL.SSL.Error}.
N)r­  r   rä   r   r²   r±   r   r"   s    r   Útest_missingPrivateKeyFileÚ<DefaultOpenSSLContextFactoryTests.test_missingPrivateKeyFile©  s+   € ð 	×ÑÜ�I‰I”s×7Ñ7¸¿¹»Ìõ	
r   ©r£  rÚ   )rA   rB   rC   rD   rE   r   rñ   r   rò   r¤  rª  r®  r±  rF   r   r   r   r   r   �  s6   † ñð ×Ò˜g tÓ,Ñ4ØCˆò8òDò
õ
r   r   c                   óP   • \ rS rSrSr\R                  " \S5      c  SrS r	S r
Srg)ÚClientContextFactoryTestsi´  z(
Tests for L{ssl.ClientContextFactory}.
NrÏ   c                 ó    • [         R                  " 5       U l        [        U R                  l        U R                  R                  5       U l        g r   )r   r8  rÚ   rŒ  r¢  ru  r£  r"   s    r   r¤  ÚClientContextFactoryTests.setUp¼  s7   € Ü!×6Ò6Ó8ˆÔÜ.9ˆ×ÑÔ+Ø×*Ñ*×5Ñ5Ó7ˆ�r   c                 óÎ  • U R                  U R                  R                  [        R                  5        U R                  U R                  R
                  [        R                  -  [        R                  5        U R                  U R                  R
                  [        R                  -  5        U R                  U R                  R
                  [        R                  -  5        g)zl
L{ssl.ClientContextFactory.getContext} returns a context which can use
TLSv1.2 or 1.3 but nothing earlier.
N)
r  r£  r�  r   r§  r�  r¨  r"  ÚOP_NO_SSLv3ÚOP_NO_TLSv1r"   s    r   rª  Ú%ClientContextFactoryTests.test_methodÁ  s‡   € ð
 	×Ñ˜Ÿ™×-Ñ-¬s¯~©~Ô>Ø×Ñ˜Ÿ™×.Ñ.´·±Ñ@Ä#Ç/Á/ÔRØ�‰˜Ÿ™×-Ñ-´·±Ñ?Ô@Ø�‰˜Ÿ™×-Ñ-´·±Ñ?Õ@r   r³  )rA   rB   rC   rD   rE   r   rñ   r   rò   r¤  rª  rF   r   r   r   rµ  rµ  ´  s,   † ñð ×Ò˜g tÓ,Ñ4ØCˆò8õ
Ar   rµ  )6rE   r¡   rë   Útwisted.internetr   r   r   r   rƒ  r   Útwisted.internet.testingr   Útwisted.protocolsr	   Útwisted.python.filepathr
   Útwisted.python.runtimer   Útwisted.test.test_tcpr   Útwisted.trial.unittestr   ÚOpenSSLr   r   r   Útwisted.test.ssl_helpersr   r   ÚImportErrorr   Úzope.interfacer   ÚLineReceiverr   rH   rI  rf   rn   rh  rx   r›   r¬   r®   r²   rW   rÎ   rô   r.  r0  r@  rŒ  r   rµ  r   r   r   Ú<module>rÈ     st  ðñó 
ã ç AÓ AÝ 1Ý =Ý #Ý ,Ý +Ý 9Ý +ðß#å$ßCõ 'ô%˜E×.Ñ.ô %ôD+%�E×&Ñ&ô +%ô\,˜x×0Ñ0ô ,ô%˜h×/Ñ/ô %ñ  ˆZ×*Ñ*Ó+ô
; x×'8Ñ'8ó 
;ó ,ð
;òò8G÷ &
ñ &
ôR �?ô
Iœ3×;Ñ;ô 
Iô4
Ð,¨hô 4
ông$ˆxô g$ôT�Xô ô&
�Xô &
ôRS/˜(Ð$:ô S/÷lñ ô&0
¨ô 0
ôfA õ Aøðu ó òñ ‡Hðús   ÁE& Å&E:Å9E: