+
    üÐjèZ  ã                   ó   € R t ^ RIt^ RIt^ RIHtHtHtHt ^ RIH	t	 ^ RI
Ht ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ R	IHt  ^ R
IHsHt ^ RIHs ^ RIHtHt ^ RIH t   ! R R]PB                  4      t" ! R R]PB                  4      t# ! R R]PH                  4      t% ! R R]PH                  4      t&] ! ]PN                  4       ! R R]PH                  4      4       t(R t)R t* ! R R4      t+\.        e    ! R R\2        PX                  4      t- ! R R ]]4      t. ! R! R"]4      t/ ! R# R$]/4      t0 ! R% R&]4      t1 ! R' R(]]+4      t2 ! R) R*4      t3 ! R+ R,]4      t4 ! R- R.]4      t5R#   ] d    R t]! 4         EL$i ; i)/z 
Tests for twisted SSL support.
N)ÚdeferÚ
interfacesÚprotocolÚreactor)ÚConnectionDone)ÚwaitUntilAllDisconnected)Úbasic)ÚFilePath)Úplatform)ÚProperlyCloseFilesMixin)ÚTestCase)ÚSSLÚcrypto)Ússl)ÚClientTLSContextÚcertPathc                  ó   € R ;s sR # ©N)r   r   © ó    Ú7/usr/lib/python3/dist-packages/twisted/test/test_ssl.pyÚ_noSSLr      s   € ð ÐˆŠcr   )Úimplementerc                   óL   a € ] tR t^'t o Rt. R
OtRR.tR tR tR t	R t
RtV tR	# )ÚUnintelligentProtocolzò
@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 thing after tls starteds   last thing everc                ó:   € \         P                  ! 4       V n        R # r   ©r   ÚDeferredÚdeferred©Úselfs   &r   Ú__init__ÚUnintelligentProtocol.__init__7   ó   € ÜŸšÓ(ˆŽr   c                óN   € V P                    F  pV P                  V4       K  	  R # r   )ÚpretextÚsendLine)r    Úls   & r   ÚconnectionMadeÚ$UnintelligentProtocol.connectionMade:   s   € Ø—”ˆAØ�M‰M˜!Öó r   c                ó  € VR 8X  dy   V P                   P                  \        4       V P                  P                  4       V P
                   F  pV P                  V4       K  	  V P                   P                  4        R# R# )ó   READYN)Ú	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                ó<   € V P                   P                  R 4       R # r   ©r   Úcallback©r    Úreasons   &&r   ÚconnectionLostÚ$UnintelligentProtocol.connectionLostE   ó   € Ø�‰×Ñ˜tÖ$r   ©r   N)s
   first lines   last thing before tls startsó   STARTTLS)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r%   r0   r!   r(   r3   r:   Ú__static_attributes__Ú__classdictcell__©Ú__classdict__s   @r   r   r   '   s6   ø‡ € ñ	ò L€Gà0Ð2DÐE€Hò)òò,÷%ð %r   r   c                   óF   a € ] tR t^It o RtR	R ltR tR tR tR t	Rt
V tR# )
ÚLineCollectora*  
@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                óR   € Wn         W n        \        P                  ! 4       V n        R # r   )ÚdoTLSÚ
fillBufferr   r   r   )r    rK   rL   s   &&&r   r!   ÚLineCollector.__init__V   s   € ØŒ
Ø$ŒÜŸšÓ(ˆŽr   c                óJ   € R V P                   n        . V P                   n        R# )r   N)r.   ÚrawdataÚlinesr   s   &r   r(   ÚLineCollector.connectionMade[   s   € Ø"ˆ�‰ÔØˆ�‰Ör   c                ó¾  € V P                   P                  P                  V4       VR 8X  d±   V P                  '       d$   \	        R4       F  pV P                  R4       K  	  V P                  R4       V P                  '       dG   \        \        \        R7      pV P                  P                  W0P                   P                  4       R# V P                  4        R# R# )r>   iô  r+   )ÚprivateKeyFileNameÚcertificateFileNameNsè  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX)r.   rP   ÚappendrL   Úranger&   rK   ÚServerTLSContextr   r,   r-   ÚserverÚ
setRawMode)r    r2   ÚxÚctxs   &&  r   r3   ÚLineCollector.lineReceived_   s—   € Ø�‰×Ñ×!Ñ! $Ô'Ø�;ÔØ��ˆÜ˜sž�AØ—M‘M +Ö.ñ $à�M‰M˜(Ô#Ø�z�zˆzÜ&Ü'/Ü(0ô�ð —‘×'Ñ'¨¯\©\×-@Ñ-@ÖAà—‘Ö!ñ r   c                ó€   € V P                   ;P                  V,          un        V P                  P                  4        R # r   )r.   rO   r,   r1   ©r    Údatas   &&r   ÚrawDataReceivedÚLineCollector.rawDataReceivedo   s'   € Ø�‰×Ò Õ$ÕØ�‰×%Ñ%Ö'r   c                ó<   € V P                   P                  R 4       R # r   r6   r8   s   &&r   r:   ÚLineCollector.connectionLosts   r<   r   )r   rK   rL   N©F)r?   r@   rA   rB   rC   r!   r(   r3   r`   r:   rD   rE   rF   s   @r   rI   rI   I   s(   ø‡ € ñ
ô)ò
 ò"ò (÷%ð %r   rI   c                   ó*   a € ] tR t^wt o RtR tRtV tR# )ÚSingleLineServerProtocolzC
A protocol that sends a single line of data at C{connectionMade}.
c                óp   € V P                   P                  R 4       V P                   P                  4        R# )ó   +OK <some crap>
N)r,   ÚwriteÚgetPeerCertificater   s   &r   r(   Ú'SingleLineServerProtocol.connectionMade|   s%   € Ø�‰×ÑÐ3Ô4Ø�‰×)Ñ)Ö+r   r   N)r?   r@   rA   rB   rC   r(   rD   rE   rF   s   @r   rf   rf   w   s   ø‡ € ñ÷,ð ,r   rf   c                   ó6   a € ] tR t^�t o RtR tR tR tRtV t	R# )ÚRecordingClientProtocolzj
@ivar deferred: a deferred that will fire with first received content.
@type deferred: L{defer.Deferred}
c                ó:   € \         P                  ! 4       V n        R # r   r   r   s   &r   r!   Ú RecordingClientProtocol.__init__‡   r#   r   c                ó:   € V P                   P                  4        R # r   )r,   rj   r   s   &r   r(   Ú&RecordingClientProtocol.connectionMadeŠ   s   € Ø�‰×)Ñ)Ö+r   c                ó<   € V P                   P                  V4       R # r   r6   r^   s   &&r   ÚdataReceivedÚ$RecordingClientProtocol.dataReceived�   r<   r   r=   N)
r?   r@   rA   rB   rC   r!   r(   rs   rD   rE   rF   s   @r   rm   rm   �   s   ø‡ € ñò
)ò,÷%ð %r   rm   c                   ó0   a € ] tR t^‘t o RtR tR tRtV tR# )Ú ImmediatelyDisconnectingProtocolz‰
A protocol that disconnect immediately on connection. It fires the
C{connectionDisconnected} deferred of its factory on connetion lost.
c                ó:   € V P                   P                  4        R # r   ©r,   r1   r   s   &r   ÚhandshakeCompletedÚ3ImmediatelyDisconnectingProtocol.handshakeCompleted˜   s   € Ø�‰×%Ñ%Ö'r   c                óP   € V P                   P                  P                  R 4       R # r   )r.   ÚconnectionDisconnectedr7   r8   s   &&r   r:   Ú/ImmediatelyDisconnectingProtocol.connectionLost›   s   € Ø�‰×+Ñ+×4Ñ4°TÖ:r   r   N)	r?   r@   rA   rB   rC   ry   r:   rD   rE   rF   s   @r   rv   rv   ‘   s   ø‡ € ñò
(÷;ð ;r   rv   c                óŠ  € \         P                  ! 4       pVP                  \         P                  R4       \         P                  ! 4       pVP                  4       pWn        Wn        VP                  V4       VP                  VR4       \         P                  ! 4       pVP                  ^4       VP                  ^ 4       VP                  ^<4       VP                  VP                  4       4       VP                  VP                  4       4       VP                  VP!                  4       4       VP                  VR4       W#V3# )z…
Create a certificate for given C{organization} and C{organizationalUnit}.

@return: a tuple of (key, request, certificate) objects.
i   Úmd5)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                ób  € \        W4      w  r4pRV\        P                  3RV\        P                  3RV\        P                  33 Fd  w  rgp\
        P                  P                  W34      P                  R4      p	\        V	4      P                  V! \        P                  V4      4       Kf  	  R# )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                   ó0   a € ] tR t^Ët o RtR tR tRtV tR# )ÚContextGeneratingMixina4  
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                óò   € V P                  4       p\        WQV4       \        P                  ! \        P
                  P                  VR 34      \        P
                  P                  VR34      .VO5/ VB pWV3# )r˜   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                ó‚   € V P                   ! V/ VB w  V n        V n        V P                   ! V/ VB w  V n        V n        R # 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)	r?   r@   rA   rB   rC   r³   r½   rD   rE   rF   s   @r   r©   r©   Ë   s   ø‡ € ñò&
&÷
ð 
r   r©   c                   ó.   a € ] tR t^öt o RtRtR tRtV tR# )rW   zN
A context factory with a default method set to
L{OpenSSL.SSL.SSLv23_METHOD}.
Fc                ót   € \         P                  VR &   \        P                  P                  ! V .VO5/ VB  R# )Ú	sslmethodN)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)	r?   r@   rA   rB   rC   ÚisClientr!   rD   rE   rF   s   @r   rW   rW   ö   s   ø‡ € ñ	ð
 ˆ÷	Ið 	Ir   rW   c                   ój   a € ] tR tRt o Rt]P                  ! ]R4      f   RtR t	R t
R tR tR	tV tR# )
Ú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                óÆ   € \         P                  P                  \        \        4      P                  4       4      pVP                  4       p\        P                  ! W#WQR7      # )zI
Create an SSL server with a certificate using L{IReactorSSL.listenSSL}.
©Ú	interface)	r   ÚPrivateCertificateÚloadPEMr	   r   Ú
getContentÚoptionsr   Ú	listenSSL)r    ÚaddressÚ
portNumberr.   r•   ÚcontextFactorys   &&&&  r   ÚcreateServerÚStolenTCPTests.createServer  sF   € ô ×%Ñ%×-Ñ-¬h´xÓ.@×.KÑ.KÓ.MÓNˆØŸ™›ˆÜ× Ò  °nÔXÐXr   c                óP   € \         P                  ! 4       pVP                  WV4      # )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                ó"   € \         P                  # )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  € \         P                  ! \         P                  ! \         P                  ! R4      \         P                  ! \         P                  ! R4      \         P                  ! R4      \         P                  ! R4      4      \         P                  ! R4      4      4      # )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   )r?   r@   rA   rB   rC   r   ÚIReactorSSLr   ÚskiprÔ   rÚ   rÞ   rè   rD   rE   rF   s   @r   rÇ   rÇ     s?   ø‡ € ñð
 ×Ò˜g tÓ,Ò4ØCˆòYòMò÷
ð 
r   rÇ   c                   ó€   a € ] tR tRt o Rt]P                  ! ]R4      f   RtRt	Rt
RtR tRR ltR tR	 tR
 tRtV tR# )ÚTLSTestsi:  zs
Tests for startTLS support.

@ivar fillBuffer: forwarded to L{LineCollector.fillBuffer}
@type fillBuffer: C{bool}
NrÈ   Fc                óú   € V P                   P                  e%   V P                   P                  P                  4        V P                  P                  e'   V P                  P                  P                  4        R # R # r   )ÚclientProtor,   r1   ÚserverProtor   s   &r   ÚtearDownÚTLSTests.tearDownJ  s[   € Ø×Ñ×%Ñ%Ò1Ø×Ñ×&Ñ&×5Ñ5Ô7Ø×Ñ×%Ñ%Ò1Ø×Ñ×&Ñ&×5Ñ5Ö7ñ 2r   c                ó6  aa€ SV n         \        P                  ! 4       ;q@n        V3R lVn        V'       d	   RVn        MRVn        SV n        \        P                  ! 4       ;qPn        V3R lVn        V'       d	   RVn        MRVn        \        P                  ! ^ VRR7      pV P                  VP                  4       \        P                  ! RVP                  4       P                  V4       \         P"                  ! SP$                  SP$                  .4      # )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                  ó   <€ S # r   r   ©rï   s   €r   Ú<lambda>Ú#TLSTests._runTest.<locals>.<lambda>`  ó   ø€ ™kr   FTc                  ó   <€ S # r   r   ©rð   s   €r   rö   r÷   h  rø   r   ú	127.0.0.1rÊ   )rï   r   ÚClientFactoryÚclientFactoryrX   r/   rð   ÚServerFactoryÚserverFactoryr   Ú	listenTCPÚ
addCleanupÚstopListeningÚ
connectTCPÚgetHostÚportr   ÚgatherResultsr   )r    rï   rð   ÚclientIsServerÚcfÚsfr  s   &ff&   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                óŽ   a € V 3R lpS P                  \        4       \        RS P                  4      4      pVP	                  V4      # )zf
Test for server and client startTLS: client should received data both
before and after the startTLS.
c                 óš   <€ SP                  SP                  P                  \        P                  \        P
                  ,           4       R # r   )ÚassertEqualrÿ   rP   r   r%   r0   )Úignorer    s   &€r   ÚcheckÚ TLSTests.test_TLS.<locals>.check{  ó5   ø€ Ø×ÑØ×"Ñ"×(Ñ(Ü%×-Ñ-Ô0E×0NÑ0NÕNör   T©r
  r   rI   rL   ÚaddCallback©r    r  Úds   f  r   Útest_TLSÚTLSTests.test_TLSu  s8   ø€ õ	ð �M‰MÔ/Ó1´=ÀÀtÇÁÓ3WÓXˆØ�}‰}˜UÓ#Ð#r   c                óŽ   a € V 3R lpS P                  \        4       \        RS P                  4      4      pVP	                  V4      # )zƒ
Test for server startTLS not followed by a startTLS in client: the data
received after server startTLS should be received as raw.
c                 ó¼   <€ SP                  SP                  P                  \        P                  4       SP                  SP                  P                  R 4       R# )zNo encrypted bytes receivedN)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   f  r   Ú
test_unTLSÚTLSTests.test_unTLS„  s=   ø€ õ	Wð �M‰MÜ!Ó#¤]°5¸$¿/¹/Ó%Jó
ˆð �}‰}˜UÓ#Ð#r   c                ó�   a € V 3R lpS P                  \        RS P                  4      \        4       R4      pVP	                  V4      # )z*
Test startTLS first initiated by client.
c                 óš   <€ SP                  SP                  P                  \        P                  \        P
                  ,           4       R # r   )r  rý   rP   r   r%   r0   r  s   &€r   r  Ú)TLSTests.test_backwardsTLS.<locals>.check˜  r  r   T)r
  rI   rL   r   r  r  s   f  r   Útest_backwardsTLSÚTLSTests.test_backwardsTLS“  s?   ø€ õ
	ð �M‰MÜ˜$ §¡Ó0Ô2GÓ2IÈ4ó
ˆð �}‰}˜UÓ#Ð#r   )rý   rï   rÿ   rð   rd   )r?   r@   rA   rB   rC   r   rê   r   rë   rL   rï   rð   rñ   r
  r  r  r$  rD   rE   rF   s   @r   rí   rí   :  sS   ø‡ € ñð ×Ò˜g tÓ,Ò4ØCˆà€Jà€KØ€Kò8ô#QòJ$ò$÷$ð $r   rí   c                   óL   € ] tR tRtRt]P                  ! ]R4      f   RtRt	Rt
R# )ÚSpammyTLSTestsi¤  z9
Test TLS features with bytes sitting in the out buffer.
NrÈ   Tr   )r?   r@   rA   rB   rC   r   rê   r   rë   rL   rD   r   r   r   r'  r'  ¤  s&   † ñð ×Ò˜g tÓ,Ò4ØCˆà„Jr   r'  c                   ób   a € ] tR tRt o ]P
                  ! ]R4      f   RtRtRt	R t
R tRtV tR# )ÚBufferingTestsi¯  NrÈ   c                ó>  € V P                   P                  e%   V P                   P                  P                  4        V P                  P                  e%   V P                  P                  P                  4        \	        \
        V P                   V P                  .4      # r   )rð   r,   r1   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                óˆ  aa€ \        4       ;oV n        \        4       ;oV n        \        P
                  ! 4       p\        P                  ! 4       ;q n        V3R  lVn        V3R lVn        \        P                  ! \        \        4      p\        P                  ! 4       p\        P                  ! ^ WRR7      pV P                  VP                  4       \        P                   ! RVP#                  4       P$                  W$4      pV P                  VP&                  4       SP(                  P+                  V P,                  R4      # )c                  ó   <€ S # r   r   rú   s   €r   rö   Ú6BufferingTests.test_openSSLBuffering.<locals>.<lambda>Å  ó   ø€ ¡+r   c                  ó   <€ S # r   r   rõ   s   €r   rö   r.  Æ  r/  r   rû   rÊ   rh   )rf   rð   rm   rï   r   rþ   rü   r/   r   r¬   r   ÚClientContextFactoryr   rÐ   r  r  rØ   r  r  Ú
disconnectr   r  r  )	r    rX   r/   Ú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   )r/   rï   rð   )r?   r@   rA   rB   r   rê   r   rë   rð   rï   rñ   r6  rD   rE   rF   s   @r   r)  r)  ¯  s7   ø‡ € Ø×Ò˜g tÓ,Ò4ØCˆà€KØ€KòW÷
ð 
r   r)  c                   ój   a € ] tR tRt o Rt]P                  ! ]R4      f   RtR t	R t
R tR tR	tV tR# )
ÚConnectionLostTestsiØ  z
SSL connection closing tests.
NrÈ   c                ó  a € R pS P                  WR,           3/ WR,           3/ 4       \        P                  ! 4       p\        P                  Vn        \        P
                  ! ^ VS P                  4      ;S n        p\        P                  ! 4       p\        Vn        \        P                  ! 4       Vn        \        P                  ! RVP                  4       P                  VS P                   4       VP                  P#                  V 3R l4      # )útwisted.test.test_sslú, clientú, serverrû   c                 ó8   <€ SP                   P                  4       # r   )Ú
serverPortr  )ÚignoredResultr    s   &€r   rö   Ú=ConnectionLostTests.testImmediateDisconnect.<locals>.<lambda>ù  s   ø€  $§/¡/×"?Ñ"?Ô"Ar   )r½   r   rþ   ÚProtocolr   rÐ   r²   r?  rü   rv   r   r   r|   rØ   r  r  r·   r  )r    r­   ÚserverProtocolFactoryr?  ÚclientProtocolFactorys   f    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                óà  aa€ \        \        P                  4       ! R R\        P                  4      4       pRpV P                  W"R,           3/ W"R,           3/ 4       V! 4       o\        P                  ! 4       pV3R lVn        \        P                  ! ^ W0P                  4      pV P                  VP                  4       V! 4       o\        P                  ! 4       pV3R lVn        \        P                  ! RVP                  4       P                  VV P                   4       R	 p\"        P$                  ! SP&                  P)                  V4      SP&                  P)                  V4      .4      # )
z•
Both sides of SSL connection close connection; the connections should
close cleanly, and only after the underlying TCP connection has
disconnected.
c                   ó6   a € ] tR tRt o RtR tR tR tRtV t	R# )ÚMConnectionLostTests.test_bothSidesLoseConnection.<locals>.CloseAfterHandshakei  Fc                ó:   € \         P                  ! 4       V n        R # r   )r   r   Údoner   s   &r   r!   ÚVConnectionLostTests.test_bothSidesLoseConnection.<locals>.CloseAfterHandshake.__init__  s   € Ü!ŸNšNÓ,�–	r   c                ó:   € V P                   P                  4        R # r   rx   r   s   &r   ry   Ú`ConnectionLostTests.test_bothSidesLoseConnection.<locals>.CloseAfterHandshake.handshakeCompleted
  s   € Ø—‘×-Ñ-Ö/r   c                ó@   € V P                   P                  V4       V = R # r   )rK  Úerrbackr8   s   &&r   r:   Ú\ConnectionLostTests.test_bothSidesLoseConnection.<locals>.CloseAfterHandshake.connectionLost  s   € Ø—	‘	×!Ñ! &Ô)Ø’Ir   )rK  N)
r?   r@   rA   rB   ÚgotDatar!   ry   r:   rD   rE   rF   s   @r   ÚCloseAfterHandshakerI    s   ø‡ € àˆGò-ò0÷ð r   rS  r;  r<  r=  c                  ó   <€ S # r   r   ©ÚserverProtocols   €r   rö   ÚBConnectionLostTests.test_bothSidesLoseConnection.<locals>.<lambda>  ó   ø€ ±r   c                  ó   <€ S # r   r   ©ÚclientProtocols   €r   rö   rW    rX  r   rû   c                 ó0   € V P                  \        4       R # r   )Útrapr   )Úfailures   &r   ÚcheckResultÚEConnectionLostTests.test_bothSidesLoseConnection.<locals>.checkResult&  s   € Ø�L‰LœÖ(r   )r   r   ÚIHandshakeListenerr   rB  r½   rþ   r   rÐ   r²   r  r  rü   rØ   r  r  r·   r   r  rK  Ú
addErrback)	r    rS  r­   rC  r?  rD  r_  r[  rV  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                ób  a	a
€ R pV P                  WR,           3/ WR,           3/ 4       R pV P                  P                  4       P                  \        P
                  V4       \        P                  ! 4       p\        P                  ! 4       o
VP                  S
n        \        P                  ! 4       pV
3R lVn        \        P                  ! ^ W@P                  4      ;V n        p\        P                  ! 4       p\        P                  ! 4       o	VP                  S	n        \        P"                  ! 4       pV	3R lVn        \        P$                  ! RVP'                  4       P(                  VV P                  4       \        P*                  ! W6.RR7      pVP-                  V P.                  4      # )	r;  r<  r=  c                  ó   € R # rd   r   )Úas   *r   ÚverifyÚ4ConnectionLostTests.testFailedVerify.<locals>.verify6  s   € Ùr   c                  ó   <€ S # r   r   rU  s   €r   rö   Ú6ConnectionLostTests.testFailedVerify.<locals>.<lambda>?  rX  r   c                  ó   <€ S # r   r   rZ  s   €r   rö   rk  H  rX  r   rû   T)ÚconsumeErrors)r½   r·   Ú
getContextÚ
set_verifyr   ÚVERIFY_PEERr   r   r   rB  r7   r:   rþ   r   rÐ   r²   r?  rü   rØ   r  r  ÚDeferredListr  Ú_cbLostConns)r    r­   rh  ÚserverConnLostrC  r?  ÚclientConnLostrD  Údlr[  rV  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                óR  € Vw  w  r#w  rEV P                  V4       V P                  V4       \        P                  .p\        P                  ! 4       '       d   ^ RIHp VP                  V4       VP                  ! V!   VP                  ! V!   V P                  P                  4       # )é    )ÚConnectionLost)ÚassertFalser   rÝ   r
   Ú	isWindowsÚtwisted.internet.errorrz  rU   r]  r?  r  )r    ÚresultsÚsSuccessÚsResultÚcSuccessÚcResultÚacceptableErrorsrz  s   &&      r   rr  Ú ConnectionLostTests._cbLostConnsS  s‰   € Ø3:Ñ0ÑˆÑ0˜hà×Ñ˜Ô"Ø×Ñ˜Ô"äŸI™I˜;Ðô ×Ò×ÒÝ=à×#Ñ# NÔ3à�ŠÐ&Ò'Ø�ŠÐ&Ò'à�‰×,Ñ,Ó.Ð.r   )r?  )r?   r@   rA   rB   rC   r   rê   r   rë   rE  rc  rv  rr  rD   rE   rF   s   @r   r9  r9  Ø  s?   ø‡ € ñð ×Ò˜g tÓ,Ò4ØCˆò
ò82
òh!1÷F/ð /r   r9  c                   ó<   a € ] tR tRt o RtR tR tR tR tRt	V t
R# )	ÚFakeContextin  zC
L{OpenSSL.SSL.Context} double which can more easily be inspected.
c                ó    € Wn         ^ V n        R# )ry  N©Ú_methodÚ_options)r    Úmethods   &&r   r!   ÚFakeContext.__init__s  s   € ØŒØˆŽr   c                ó8   € V ;P                   V,          un         R # r   )rŠ  )r    rÏ   s   &&r   Úset_optionsÚFakeContext.set_optionsw  s   € Ø�Š˜Õ �r   c                ó   € R # r   r   ©r    ÚfileNames   &&r   Úuse_certificate_fileÚ FakeContext.use_certificate_filez  ó   € Ùr   c                ó   € R # r   r   r‘  s   &&r   Úuse_privatekey_fileÚFakeContext.use_privatekey_file}  r•  r   rˆ  N)r?   r@   rA   rB   rC   r!   rŽ  r“  r—  rD   rE   rF   s   @r   r†  r†  n  s#   ø‡ € ñòò!ò÷ð r   r†  c                   ój   a € ] tR tRt o Rt]P                  ! ]R4      f   RtR t	R t
R tR tR	tV tR# )
Ú!DefaultOpenSSLContextFactoryTestsi�  z0
Tests for L{ssl.DefaultOpenSSLContextFactory}.
NrÈ   c                ó˜   € \         P                  ! \        \        \        R 7      V n        V P                  P                  4       V n        R# ))Ú_contextFactoryN)r   r¬   r   r†  rÓ   rn  Úcontextr   s   &r   ÚsetUpÚ'DefaultOpenSSLContextFactoryTests.setUp‰  s6   € ô "×>Ò>Ü”h´ô
ˆÔð ×*Ñ*×5Ñ5Ó7ˆŽr   c                ót  € V P                  V P                  P                  \        P                  4       V P                  V P                  P
                  \        P                  ,          \        P                  4       V P                  V P                  P
                  \        P                  ,          4       R# )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                óŠ   € V P                  \        P                  \        P                  \
        V P                  4       4       R# )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                óŠ   € V P                  \        P                  \        P                  V P                  4       \        4       R# )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Ó   )r?   r@   rA   rB   rC   r   rê   r   rë   rž  r¤  r¨  r«  rD   rE   rF   s   @r   rš  rš  �  s>   ø‡ € ñð ×Ò˜g tÓ,Ò4ØCˆò8òDò
÷
ð 
r   rš  c                   ó^   a € ] tR tRt o Rt]P                  ! ]R4      f   RtR t	R t
RtV tR# )ÚClientContextFactoryTestsi´  z(
Tests for L{ssl.ClientContextFactory}.
NrÈ   c                ó¢   € \         P                  ! 4       V n        \        V P                  n        V P                  P                  4       V n        R # r   )r   r1  rÓ   r†  rœ  rn  r�  r   s   &r   rž  ÚClientContextFactoryTests.setUp¼  s7   € Ü!×6Ò6Ó8ˆÔÜ.9ˆ×ÑÔ+Ø×*Ñ*×5Ñ5Ó7ˆŽr   c                óè  € V P                  V P                  P                  \        P                  4       V P                  V P                  P
                  \        P                  ,          \        P                  4       V P                  V P                  P
                  \        P                  ,          4       V P                  V P                  P
                  \        P                  ,          4       R# )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­  )r?   r@   rA   rB   rC   r   rê   r   rë   rž  r¤  rD   rE   rF   s   @r   r¯  r¯  ´  s5   ø‡ € ñð ×Ò˜g tÓ,Ò4ØCˆò8÷
Að Ar   r¯  )6rC   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   rI   rB  rf   rm   ra  rv   r–   r§   r©   r¬   rW   rÇ   rí   r'  r)  r9  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=Å<E=