ó
    Ö›‘h¹ƒ  ã                   óB  • % S r SSKJr  SSKJr  SSKJr  SSK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Jr  SS
KJrJr  SSKJr  SSKJr  SSKJr  SSKJr  Sr \\   \!S'   \" S5      (       a  SSK"J#r#  SSK$J r J%r%J&r&  SSK'J(r(  SSK)J*r*  O " S S5      r% " S S5      r& " S S\&RV                  5      r, " S S\&RV                  5      r- " S S\&RV                  5      r. " S  S!\%R^                  5      r0\" \5       " S" S#5      5       r1\" \5       " S$ S%5      5       r2\" \5       " S& S'5      5       r3\" \5       " S( S)5      5       r4 " S* S+\Rj                  5      r6 " S, S-\Rj                  5      r7 " S. S/\Rj                  5      r8 " S0 S1\Rj                  5      r9g)2zT
Tests for the implementation of the ssh-userauth service.

Maintainer: Paul Swartz
é    )Ú
ModuleType)ÚOptional)Úimplementer)Ú
ConchErrorÚValidPublicKey)ÚICredentialsChecker)Ú
IAnonymousÚISSHPrivateKeyÚIUsernamePassword)ÚUnauthorizedLogin)ÚIRealmÚPortal)ÚdeferÚtask)ÚDeferred)Úloopback)ÚrequireModule)ÚunittestNÚkeysÚcryptography)ÚSSHProtocolChecker)r   Ú	transportÚuserauth)ÚNS)Úkeydatac                   ó(   • \ rS rSr " S S5      rSrg)r   é"   c                   ó   • \ rS rSrSrSrg)Útransport.SSHTransportBaseé#   ú9
A stub class so that later class definitions won't die.
© N©Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__static_attributes__r"   ó    ÚdC:\Users\psant\Downloads\Noiseback\school\venv\Lib\site-packages\twisted/conch/test/test_userauth.pyÚSSHTransportBaser   #   ó   † ôr*   r,   r"   N)r$   r%   r&   r'   r,   r)   r"   r*   r+   r   r   "   ó   † ÷	ô 	r*   r   c                   ó(   • \ rS rSr " S S5      rSrg)r   é(   c                   ó   • \ rS rSrSrSrg)Úuserauth.SSHUserAuthClienté)   r!   r"   Nr#   r"   r*   r+   ÚSSHUserAuthClientr2   )   r-   r*   r4   r"   N)r$   r%   r&   r'   r4   r)   r"   r*   r+   r   r   (   r.   r*   r   c                   ó4   • \ rS rSrSrS rS rS	S jrS rSr	g)
ÚClientUserAuthé/   z
A mock user auth client.
c                 ó   • U R                   (       a-  [        R                  R                  [        R
                  5      $ [        R                  " [        R                  R                  [        R                  5      5      $ )zx
If this is the first time we've been called, return a blob for
the DSA key.  Otherwise, return a blob
for the RSA key.
)	ÚlastPublicKeyr   ÚKeyÚ
fromStringr   ÚpublicRSA_opensshr   ÚsucceedÚpublicDSA_openssh©Úselfs    r+   ÚgetPublicKeyÚClientUserAuth.getPublicKey4   sL   € ð ××Ü—8‘8×&Ñ&¤w×'@Ñ'@ÓAÐAä—=’=¤§¡×!4Ñ!4´W×5NÑ5NÓ!OÓPÐPr*   c                 ó„   • [         R                  " [        R                  R	                  [
        R                  5      5      $ )z0
Return the private key object for the RSA key.
)r   r=   r   r:   r;   r   ÚprivateRSA_opensshr?   s    r+   ÚgetPrivateKeyÚClientUserAuth.getPrivateKey?   s(   € ô �}Š}œTŸX™X×0Ñ0´×1KÑ1KÓLÓMÐMr*   Nc                 ó.   • [         R                  " S5      $ )z
Return 'foo' as the password.
ó   foo©r   r=   )r@   Úprompts     r+   ÚgetPasswordÚClientUserAuth.getPasswordE   s   € ô �}Š}˜VÓ$Ð$r*   c                 ó.   • [         R                  " S5      $ )z.
Return 'foo' as the answer to two questions.
)ÚfoorN   rI   )r@   ÚnameÚinformationÚanswerss       r+   ÚgetGenericAnswersÚ ClientUserAuth.getGenericAnswersK   s   € ô �}Š}˜^Ó,Ð,r*   r"   ©N)
r$   r%   r&   r'   r(   rA   rE   rK   rR   r)   r"   r*   r+   r6   r6   /   s   † ñò	QòNô%õ-r*   r6   c                   ó$   • \ rS rSrSrS rS rSrg)ÚOldClientAuthéR   zr
The old SSHUserAuthClient returned a cryptography key object from
getPrivateKey() and a string from getPublicKey
c                 ó˜   • [         R                  " [        R                  R	                  [
        R                  5      R                  5      $ rT   )r   r=   r   r:   r;   r   rD   Ú	keyObjectr?   s    r+   rE   ÚOldClientAuth.getPrivateKeyX   s,   € Ü�}Š}œTŸX™X×0Ñ0´×1KÑ1KÓL×VÑVÓWÐWr*   c                 óx   • [         R                  R                  [        R                  5      R                  5       $ rT   )r   r:   r;   r   r<   Úblobr?   s    r+   rA   ÚOldClientAuth.getPublicKey[   s&   € Ü�x‰x×"Ñ"¤7×#<Ñ#<Ó=×BÑBÓDÐDr*   r"   N©r$   r%   r&   r'   r(   rE   rA   r)   r"   r*   r+   rV   rV   R   s   † ñò
XõEr*   rV   c                   ó$   • \ rS rSrSrS rS rSrg)ÚClientAuthWithoutPrivateKeyé_   zH
This client doesn't have a private key, but it does have a public key.
c                 ó   • g rT   r"   r?   s    r+   rE   Ú)ClientAuthWithoutPrivateKey.getPrivateKeyd   s   € Ør*   c                 ó\   • [         R                  R                  [        R                  5      $ rT   )r   r:   r;   r   r<   r?   s    r+   rA   Ú(ClientAuthWithoutPrivateKey.getPublicKeyg   s   € Ü�x‰x×"Ñ"¤7×#<Ñ#<Ó=Ð=r*   r"   Nr^   r"   r*   r+   r`   r`   _   s   † ñòõ>r*   r`   c                   óX   • \ rS rSrSr " S S5      r " S S5      rS rS rS	 r	S
 r
Srg)ÚFakeTransporték   a/  
L{userauth.SSHUserAuthServer} expects an SSH transport which has a factory
attribute which has a portal attribute. Because the portal is important for
testing authentication, we need to be able to provide an interesting portal
object to the L{SSHUserAuthServer}.

In addition, we want to be able to capture any packets sent over the
transport.

@ivar packets: a list of 2-tuples: (messageType, data).  Each 2-tuple is
    a sent packet.
@type packets: C{list}
@param lostConnecion: True if loseConnection has been called on us.
@type lostConnection: L{bool}
c                   ó"   • \ rS rSrSrSrS rSrg)ÚFakeTransport.Serviceé|   zG
A mock service, representing the other service offered by the server.
ó   nancyc                 ó   • g rT   r"   r?   s    r+   ÚserviceStartedÚ$FakeTransport.Service.serviceStartedƒ   s   € Ør*   r"   N)r$   r%   r&   r'   r(   rO   rn   r)   r"   r*   r+   ÚServicerj   |   s   † ñ	ð ˆõ	r*   rp   c                   ó   • \ rS rSrSrS rSrg)ÚFakeTransport.Factoryé†   zO
A mock factory, representing the factory that spawned this user auth
service.
c                 ó0   • US:X  a  [         R                  $ g)z
Return our fake service.
ó   noneN)rg   rp   )r@   r   Úservices      r+   Ú
getServiceÚ FakeTransport.Factory.getServiceŒ   s   € ð ˜'Ó!Ü$×,Ñ,Ð,ð "r*   r"   N)r$   r%   r&   r'   r(   rw   r)   r"   r*   r+   ÚFactoryrr   †   s   † ñ	õ
	-r*   ry   c                 óv   • U R                  5       U l        XR                  l        SU l        X l        / U l        g ©NF)ry   ÚfactoryÚportalÚlostConnectionr   Úpackets)r@   r}   s     r+   Ú__init__ÚFakeTransport.__init__“   s-   € Ø—|‘|“~ˆŒØ$�‰ÔØ#ˆÔØŒØˆ�r*   c                 ó<   • U R                   R                  X45        g)z(
Record the packet sent by the service.
N)r   Úappend)r@   ÚmessageTypeÚmessages      r+   Ú
sendPacketÚFakeTransport.sendPacketš   s   € ð 	�‰×Ñ˜[Ð2Õ3r*   c                 ó   • g)z›
Pretend that this transport encrypts traffic in both directions. The
SSHUserAuthServer disables password authentication if the transport
isn't encrypted.
Tr"   )r@   Ú	directions     r+   ÚisEncryptedÚFakeTransport.isEncrypted    s   € ð r*   c                 ó   • SU l         g ©NT)r~   r?   s    r+   ÚloseConnectionÚFakeTransport.loseConnection¨   s
   € Ø"ˆÕr*   )r|   r~   r   r   N)r$   r%   r&   r'   r(   rp   ry   r€   r†   rŠ   rŽ   r)   r"   r*   r+   rg   rg   k   s/   † ñ÷ ñ ÷-ñ -òò4òõ#r*   rg   c                   ó   • \ rS rSrSrS rSrg)ÚRealmé¬   z¯
A mock realm for testing L{userauth.SSHUserAuthServer}.

This realm is not actually used in the course of testing, so it returns the
simplest thing that could possibly work.
c                 ó<   • [         R                  " US   S S 45      $ )Nr   c                  ó   • g rT   r"   r"   r*   r+   Ú<lambda>Ú%Realm.requestAvatar.<locals>.<lambda>¶   s   € ¸4r*   rI   )r@   ÚavatarIdÚmindÚ
interfacess       r+   ÚrequestAvatarÚRealm.requestAvatarµ   s   € Ü�}Š}˜j¨™m¨T±<Ð@ÓAÐAr*   r"   N)r$   r%   r&   r'   r(   rš   r)   r"   r*   r+   r‘   r‘   ¬   s   † ñõBr*   r‘   c                   ó$   • \ rS rSrSr\4rS rSrg)ÚPasswordCheckeré¹   z‚
A very simple username/password checker which authenticates anyone whose
password matches their username and rejects all others.
c                 ó´   • UR                   UR                  :X  a   [        R                  " UR                   5      $ [        R                  " [        S5      5      $ )NzInvalid username/password pair)ÚusernameÚpasswordr   r=   Úfailr   )r@   Úcredss     r+   ÚrequestAvatarIdÚPasswordChecker.requestAvatarIdÂ   s;   € Ø�>‰>˜UŸ^™^Ó+Ü—=’= §¡Ó0Ð0Ü�zŠzÔ+Ð,LÓMÓNÐNr*   r"   N)	r$   r%   r&   r'   r(   r   ÚcredentialInterfacesr¤   r)   r"   r*   r+   r�   r�   ¹   s   † ñð
 .Ð/ÐõOr*   r�   c                   ó$   • \ rS rSrSr\4rS rSrg)ÚPrivateKeyCheckeréÈ   z‰
A very simple public key checker which authenticates anyone whose
public/private keypair is the same keydata.public/privateRSA_openssh.
c                 ó¬  • UR                   [        R                  R                  [        R
                  5      R                  5       :X  a‚  UR                  bk  [        R                  R                  UR                   5      nUR                  UR                  UR                  5      (       a  UR                  $  [        5       e[        5       e[        5       erT   )r\   r   r:   r;   r   r<   Ú	signatureÚverifyÚsigDatar    r   r   )r@   r£   Úobjs      r+   r¤   Ú!PrivateKeyChecker.requestAvatarIdÑ   s•   € Ø�:‰:œŸ™×,Ñ,¬W×-FÑ-FÓG×LÑLÓNÓNØ�‰Ñ*Ü—h‘h×)Ñ)¨%¯*©*Ó5�Ø—:‘:˜eŸo™o¨u¯}©}×=Ñ=Ø Ÿ>™>Ð)ð >ô  Ó!Ð!ô %Ó&Ð&ÜÓ!Ð!r*   r"   N)	r$   r%   r&   r'   r(   r
   r¦   r¤   r)   r"   r*   r+   r¨   r¨   È   s   † ñð
 +Ð,Ðõ"r*   r¨   c                   ó$   • \ rS rSrSr\4rS rSrg)ÚAnonymousCheckeréÜ   zA
A simple checker which isn't supported by L{SSHUserAuthServer}.
c                 ó   • g rT   r"   )r@   Úcredentialss     r+   r¤   Ú AnonymousChecker.requestAvatarIdä   s   € àr*   r"   N)	r$   r%   r&   r'   r(   r	   r¦   r¤   r)   r"   r*   r+   r±   r±   Ü   s   † ñð '˜=Ðõr*   r±   c                   ó¸   • \ rS rSrSr\c  SrSS jrS rS\	SS4S	 jr
S
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS\S   4S jrS rSrg)ÚSSHUserAuthServerTestséé   z
Tests for SSHUserAuthServer.
Núcannot run without cryptographyÚreturnc                 óÚ  • [        5       U l        [        U R                  5      U l        U R                  R	                  [        5       5        U R                  R	                  [        5       5        [        R                  " 5       U l	        [        U R                  5      U R                  l        U R                  R                  5         U R                  R                  R                  5         g rT   )r‘   Úrealmr   r}   ÚregisterCheckerr�   r¨   r   ÚSSHUserAuthServerÚ
authServerrg   r   rn   ÚsupportedAuthenticationsÚsortr?   s    r+   ÚsetUpÚSSHUserAuthServerTests.setUpñ   s‘   € Ü“WˆŒ
Ü˜TŸZ™ZÓ(ˆŒØ�‰×#Ñ#¤OÓ$5Ô6Ø�‰×#Ñ#Ô$5Ó$7Ô8Ü"×4Ò4Ó6ˆŒÜ$1°$·+±+Ó$>ˆ�‰Ô!Ø�‰×&Ñ&Ô(Ø�‰×0Ñ0×5Ñ5Õ7r*   c                 óF   • U R                   R                  5         S U l         g rT   )r¿   ÚserviceStoppedr?   s    r+   ÚtearDownÚSSHUserAuthServerTests.tearDownü   ó   € Ø�‰×&Ñ&Ô(Øˆ�r*   Úignoredc                 óü   • [        U R                  R                  [        5      (       d   eU R                  R                  R                  S   nU R                  U[        R                  [        S5      S-   45        g)z+
Check that the authentication has failed.
éÿÿÿÿs   password,publickeyó    N)	Ú
isinstancer¿   r   rg   r   ÚassertEqualr   ÚMSG_USERAUTH_FAILUREr   )r@   rÉ   Ú
lastPackets      r+   Ú_checkFailedÚ#SSHUserAuthServerTests._checkFailed   se   € ô ˜$Ÿ/™/×3Ñ3´]×CÑCÐCÐCØ—_‘_×.Ñ.×6Ñ6°rÑ:ˆ
Ø×ÑØÜ×*Ñ*¬BÐ/DÓ,EÈÑ,OÐPõ	
r*   c                 ó°   • U R                   R                  [        S5      [        S5      -   [        S5      -   5      nUR                  U R                  5      $ )z£
A client may request a list of authentication 'method name' values
that may continue by using the "none" authentication 'method name'.

See RFC 4252 Section 5.2.
rH   s   serviceru   )r¿   Ússh_USERAUTH_REQUESTr   ÚaddCallbackrÑ   )r@   Úds     r+   Útest_noneAuthenticationÚ.SSHUserAuthServerTests.test_noneAuthentication  sH   € ð �O‰O×0Ñ0Üˆv‹Jœ˜J›Ñ'¬"¨W«+Ñ5ó
ˆð �}‰}˜T×.Ñ.Ó/Ð/r*   c           	      óÜ   ^ • SR                  [        S5      [        S5      [        S5      S[        S5      /5      nT R                  R                  U5      nU 4S jnUR	                  U5      $ )zµ
When provided with correct password authentication information, the
server should respond by sending a MSG_USERAUTH_SUCCESS message with
no other data.

See RFC 4252, Section 5.1.
r*   rH   ru   ó   passwordrÌ   c                 óˆ   >• TR                  TR                  R                  R                  [        R
                  S4/5        g ©Nr*   ©rÎ   r¿   r   r   r   ÚMSG_USERAUTH_SUCCESS©rÉ   r@   s    €r+   ÚcheckÚKSSHUserAuthServerTests.test_successfulPasswordAuthentication.<locals>.check"  ó5   ø€ Ø×ÑØ—‘×)Ñ)×1Ñ1Ü×/Ñ/°Ð5Ð6õr*   )Újoinr   r¿   rÔ   rÕ   )r@   ÚpacketrÖ   rà   s   `   r+   Ú%test_successfulPasswordAuthenticationÚ<SSHUserAuthServerTests.test_successfulPasswordAuthentication  sX   ø€ ð —‘œ2˜f›:¤r¨'£{´B°{³OÀUÌBÈvËJÐWÓXˆØ�O‰O×0Ñ0°Ó8ˆõ	ð �}‰}˜UÓ#Ð#r*   c           	      óÔ  • SR                  [        S5      [        S5      [        S5      S[        S5      /5      n[        R                  " 5       U R                  l        U R                  R                  U5      nU R                  U R                  R                  R                  / 5        U R                  R
                  R                  S5        UR                  U R                  5      $ )a  
When provided with invalid authentication details, the server should
respond by sending a MSG_USERAUTH_FAILURE message which states whether
the authentication was partially successful, and provides other, open
options for authentication.

See RFC 4252, Section 5.1.
r*   rH   ru   rÚ   rÌ   ó   baré   )rã   r   r   ÚClockr¿   ÚclockrÔ   rÎ   r   r   ÚadvancerÕ   rÑ   ©r@   rä   rÖ   s      r+   Ú!test_failedPasswordAuthenticationÚ8SSHUserAuthServerTests.test_failedPasswordAuthentication*  s    € ð —‘œ2˜f›:¤r¨'£{´B°{³OÀUÌBÈvËJÐWÓXˆÜ $§
¢
£ˆ�‰ÔØ�O‰O×0Ñ0°Ó8ˆØ×Ñ˜Ÿ™×2Ñ2×:Ñ:¸BÔ?Ø�‰×Ñ×%Ñ% aÔ(Ø�}‰}˜T×.Ñ.Ó/Ð/r*   c                 ó’  ^ • [         R                  R                  [        R                  5      R                  5       n[         R                  R                  [        R                  5      n[        S5      [        S5      -   [        S5      -   S-   [        UR                  5       5      -   [        U5      -   nST R                  R                  l        UR                  [        S5      [        [        R                  45      -   U-   5      nU[        U5      -  nT R                  R!                  U5      nU 4S jnUR#                  U5      $ )z>
Test that private key authentication completes successfully,
rH   ru   ó	   publickeyó   ÿó   testc                 óˆ   >• TR                  TR                  R                  R                  [        R
                  S4/5        g rÜ   rÝ   rß   s    €r+   rà   ÚMSSHUserAuthServerTests.test_successfulPrivateKeyAuthentication.<locals>.checkP  râ   r*   )r   r:   r;   r   r<   r\   rD   r   ÚsshTyper¿   r   Ú	sessionIDÚsignÚbytesr   ÚMSG_USERAUTH_REQUESTrÔ   rÕ   )r@   r\   r®   rä   r«   rÖ   rà   s   `      r+   Ú'test_successfulPrivateKeyAuthenticationÚ>SSHUserAuthServerTests.test_successfulPrivateKeyAuthentication;  s  ø€ ô �x‰x×"Ñ"¤7×#<Ñ#<Ó=×BÑBÓDˆÜ�h‰h×!Ñ!¤'×"<Ñ"<Ó=ˆäˆv‹JÜ�‹kñä�Óñð ñô �—‘“Óñ	 ô
 �‹hñð 	ð /6ˆ�‰×!Ñ!Ô+Ø—H‘HÜˆw‹Kœ%¤×!>Ñ!>Ð @ÓAÑAÀFÑJó
ˆ	ð 	”"�Y“-ÑˆØ�O‰O×0Ñ0°Ó8ˆõ	ð �}‰}˜UÓ#Ð#r*   c                 ó´  ^• [         R                  " 5       mS nS nU4S jnU R                  U R                  SU5        U R                  U R                  SU5        U R                  U R                  SU5        [	        S5      [	        S5      -   [	        S	5      -   [	        S
5      -   nU R                  R                  U5        U R                  T[        5      $ )zs
ssh_USERAUTH_REQUEST should raise a ConchError if tryAuth returns
None. Added to catch a bug noticed by pyflakes.
c                 ó&   • U R                  S5        g )Nz&request should have raised ConochError)r¢   )r@   rÉ   s     r+   ÚmockCbFinishedAuthÚOSSHUserAuthServerTests.test_requestRaisesConchError.<locals>.mockCbFinishedAuth_  s   € Ø�I‰IÐ>Õ?r*   c                 ó   • g rT   r"   )ÚkindÚuserÚdatas      r+   ÚmockTryAuthÚHSSHUserAuthServerTests.test_requestRaisesConchError.<locals>.mockTryAuthb  ó   € Ør*   c                 ó<   >• TR                  U R                  5        g rT   )ÚerrbackÚvalue)ÚreasonrÖ   s    €r+   ÚmockEbBadAuthÚJSSHUserAuthServerTests.test_requestRaisesConchError.<locals>.mockEbBadAuthe  s   ø€ Ø�I‰I�f—l‘lÕ#r*   ÚtryAuthÚ_cbFinishedAuthÚ
_ebBadAuths   userru   s
   public-keys   data)r   r   Úpatchr¿   r   rÔ   ÚassertFailurer   )r@   rÿ   r  r  rä   rÖ   s        @r+   Útest_requestRaisesConchErrorÚ3SSHUserAuthServerTests.test_requestRaisesConchErrorX  s­   ø€ ô
 �NŠNÓˆò	@ò	õ	$ð 	�
‰
�4—?‘? I¨{Ô;Ø�
‰
�4—?‘?Ð$5Ð7IÔJØ�
‰
�4—?‘? L°-Ô@ä�G“œr '›{Ñ*¬R°Ó->Ñ>ÄÀGÃÑLˆð 	�‰×,Ñ,¨VÔ4Ø×!Ñ! !¤ZÓ0Ð0r*   c                 ó^  ^ ^• [         R                  R                  [        R                  5      R                  5       m[        S5      [        S5      -   [        S5      -   S-   [        S5      -   [        T5      -   nT R                  R                  U5      nUU 4S jnUR                  U5      $ )z0
Test that verifying a valid private key works.
rH   ru   rñ   rÌ   ó   ssh-rsac                 ó²   >• TR                  TR                  R                  R                  [        R
                  [        S5      [        T5      -   4/5        g )Nr  )rÎ   r¿   r   r   r   ÚMSG_USERAUTH_PK_OKr   )rÉ   r\   r@   s    €€r+   rà   Ú@SSHUserAuthServerTests.test_verifyValidPrivateKey.<locals>.check�  sB   ø€ Ø×ÑØ—‘×)Ñ)×1Ñ1Ü×-Ñ-¬r°*«~ÄÀ4ÃÑ/HÐIÐJõr*   )
r   r:   r;   r   r<   r\   r   r¿   rÔ   rÕ   )r@   rä   rÖ   rà   r\   s   `   @r+   Útest_verifyValidPrivateKeyÚ1SSHUserAuthServerTests.test_verifyValidPrivateKeyr  sŸ   ù€ ô �x‰x×"Ñ"¤7×#<Ñ#<Ó=×BÑBÓDˆäˆv‹JÜ�‹kñä�Óñð ñô �‹nñ	ô
 �‹hñð 	ð �O‰O×0Ñ0°Ó8ˆö	ð �}‰}˜UÓ#Ð#r*   c                 ó`  • [         R                  R                  [        R                  5      R                  5       n[        S5      [        S5      -   [        S5      -   S-   [        S5      -   [        U5      -   nU R                  R                  U5      nUR                  U R                  5      $ )úL
Test that private key authentication fails when the public key
is invalid.
rH   ru   rñ   rÌ   s   ssh-dsa©r   r:   r;   r   r>   r\   r   r¿   rÔ   rÕ   rÑ   ©r@   r\   rä   rÖ   s       r+   Ú3test_failedPrivateKeyAuthenticationWithoutSignatureÚJSSHUserAuthServerTests.test_failedPrivateKeyAuthenticationWithoutSignature‰  s�   € ô
 �x‰x×"Ñ"¤7×#<Ñ#<Ó=×BÑBÓDˆäˆv‹JÜ�‹kñä�Óñð ñô �‹nñ	ô
 �‹hñð 	ð �O‰O×0Ñ0°Ó8ˆØ�}‰}˜T×.Ñ.Ó/Ð/r*   c                 ó&  • [         R                  R                  [        R                  5      R                  5       n[         R                  R                  [        R                  5      n[        S5      [        S5      -   [        S5      -   S-   [        S5      -   [        U5      -   [        UR                  U5      5      -   nSU R                  R                  l        U R                  R                  U5      nUR                  U R                  5      $ )r  rH   ru   rñ   rò   r  ró   )r   r:   r;   r   r<   r\   rD   r   rø   r¿   r   r÷   rÔ   rÕ   rÑ   )r@   r\   r®   rä   rÖ   s        r+   Ú0test_failedPrivateKeyAuthenticationWithSignatureÚGSSHUserAuthServerTests.test_failedPrivateKeyAuthenticationWithSignatureš  sà   € ô
 �x‰x×"Ñ"¤7×#<Ñ#<Ó=×BÑBÓDˆÜ�h‰h×!Ñ!¤'×"<Ñ"<Ó=ˆäˆv‹JÜ�‹kñä�Óñð ñô �‹nñ	ô
 �‹hñô �—‘˜$“Ó ñ!ð 	ð /6ˆ�‰×!Ñ!Ô+Ø�O‰O×0Ñ0°Ó8ˆØ�}‰}˜T×.Ñ.Ó/Ð/r*   c                 ó‚  • [         R                  R                  [        R                  5      R                  5       n[        S5      USS -   n[        S5      [        S5      -   [        S5      -   S-   [        S5      -   [        U5      -   nU R                  R                  U5      nUR                  U R                  5      $ )	zh
Private key authentication fails when the public key type is
unsupported or the public key is corrupt.
s   ssh-bad-typeé   NrH   ru   rñ   rÌ   r  r  r  s       r+   Útest_unsupported_publickeyÚ1SSHUserAuthServerTests.test_unsupported_publickey®  s¶   € ô
 �x‰x×"Ñ"¤7×#<Ñ#<Ó=×BÑBÓDˆô �/Ó" T¨"¨# YÑ.ˆô ˆv‹JÜ�‹kñä�Óñð ñô �‹nñ	ô
 �‹hñð 	ð �O‰O×0Ñ0°Ó8ˆà�}‰}˜T×.Ñ.Ó/Ð/r*   c                 óX  • [         R                  " 5       n[        U R                  5      Ul        U R                  R                  [        5       5        UR                  5         UR                  5         UR                  R                  5         U R                  UR                  SS/5        g)a0  
L{SSHUserAuthServer} sets up
C{SSHUserAuthServer.supportedAuthentications} by checking the portal's
credentials interfaces and mapping them to SSH authentication method
strings.  If the Portal advertises an interface that
L{SSHUserAuthServer} can't map, it should be ignored.  This is a white
box test.
rÚ   rñ   N)r   r¾   rg   r}   r   r½   r±   rn   rÅ   rÀ   rÁ   rÎ   )r@   Úservers     r+   Ú test_ignoreUnknownCredInterfacesÚ7SSHUserAuthServerTests.test_ignoreUnknownCredInterfacesÄ  s~   € ô ×+Ò+Ó-ˆÜ(¨¯©Ó5ˆÔØ�‰×#Ñ#Ô$4Ó$6Ô7Ø×ÑÔØ×ÑÔØ×'Ñ'×,Ñ,Ô.Ø×Ñ˜×8Ñ8¸;ÈÐ:UÕVr*   c                 óD  • U R                  SU R                  R                  5        [        R                  " 5       n[        U R                  5      Ul        S UR                  l        UR                  5         UR                  5         U R                  SUR                  5        [        R                  " 5       n[        U R                  5      Ul        S UR                  l        UR                  5         UR                  5         U R                  SUR                  5        g)zw
Test that the userauth service does not advertise password
authentication if the password would be send in cleartext.
rÚ   c                 ó   • gr{   r"   ©Úxs    r+   r•   ÚISSHUserAuthServerTests.test_removePasswordIfUnencrypted.<locals>.<lambda>Þ  ó   € ¸%r*   c                 ó   • U S:H  $ ©NÚinr"   r/  s    r+   r•   r1  å  ó   € ¸¸dºr*   N)ÚassertInr¿   rÀ   r   r¾   rg   r}   r   rŠ   rn   rÅ   ÚassertNotIn)r@   ÚclearAuthServerÚhalfAuthServers      r+   Ú test_removePasswordIfUnencryptedÚ7SSHUserAuthServerTests.test_removePasswordIfUnencryptedÕ  sÐ   € ð
 	�‰�k 4§?¡?×#KÑ#KÔLä"×4Ò4Ó6ˆÜ$1°$·+±+Ó$>ˆÔ!Ù0?ˆ×!Ñ!Ô-Ø×&Ñ&Ô(Ø×&Ñ&Ô(Ø×Ñ˜ o×&NÑ&NÔOä!×3Ò3Ó5ˆÜ#0°·±Ó#=ˆÔ Ù/Bˆ× Ñ Ô,Ø×%Ñ%Ô'Ø×%Ñ%Ô'Ø�‰�k >×#JÑ#JÕKr*   c                 ó0  • [        U R                  5      nUR                  [        5       5        [        R
                  " 5       n[        U5      Ul        S UR                  l        UR                  5         UR                  5         U R                  UR                  S/5        [        R
                  " 5       n[        U5      Ul        S UR                  l        UR                  5         UR                  5         U R                  UR                  S/5        g)z¡
If the L{SSHUserAuthServer} is not advertising passwords, then an
unencrypted connection should not cause any warnings or exceptions.
This is a white box test.
c                 ó   • gr{   r"   r/  s    r+   r•   ÚSSSHUserAuthServerTests.test_unencryptedConnectionWithoutPasswords.<locals>.<lambda>÷  r2  r*   rñ   c                 ó   • U S:H  $ r4  r"   r/  s    r+   r•   r?  ÿ  r6  r*   N)r   r¼   r½   r¨   r   r¾   rg   r   rŠ   rn   rÅ   rÎ   rÀ   )r@   r}   r9  r:  s       r+   Ú*test_unencryptedConnectionWithoutPasswordsÚASSHUserAuthServerTests.test_unencryptedConnectionWithoutPasswordsê  sÚ   € ô ˜Ÿ
™
Ó#ˆØ×ÑÔ0Ó2Ô3ô #×4Ò4Ó6ˆÜ$1°&Ó$9ˆÔ!Ù0?ˆ×!Ñ!Ô-Ø×&Ñ&Ô(Ø×&Ñ&Ô(Ø×Ñ˜×AÑAÀLÀ>ÔRô "×3Ò3Ó5ˆÜ#0°Ó#8ˆÔ Ù/Bˆ× Ñ Ô,Ø×%Ñ%Ô'Ø×%Ñ%Ô'Ø×Ñ˜×AÑAÀLÀ>ÕRr*   c                 ó*  • [         R                  " 5       n[        R                  " 5       Ul        [        U R                  5      Ul        UR                  5         UR                  R                  S5        UR                  5         U R                  UR                  R                  [        R                  S[        [        R                  45      -   [!        S5      -   [!        S5      -   4/5        U R#                  UR                  R$                  5        g)z 
Test that the login times out.
é°š  ó      s   you took too longr*   N)r   r¾   r   rê   rë   rg   r}   r   rn   rì   rÅ   rÎ   r   ÚMSG_DISCONNECTrù   Ú)DISCONNECT_NO_MORE_AUTH_METHODS_AVAILABLEr   Ú
assertTruer~   ©r@   ÚtimeoutAuthServers     r+   Útest_loginTimeoutÚ(SSHUserAuthServerTests.test_loginTimeout  sã   € ô %×6Ò6Ó8ÐÜ"&§*¢*£,ÐÔÜ&3°D·K±KÓ&@ÐÔ#Ø×(Ñ(Ô*Ø×Ñ×'Ñ'¨Ô5Ø×(Ñ(Ô*Ø×ÑØ×'Ñ'×/Ñ/ô ×,Ñ,ØÜœY×PÑPÐRÓSñTäÐ-Ó.ñ/ô ˜“gñððô	
ð 	�‰Ð)×3Ñ3×BÑBÕCr*   c                 ó¢  • [         R                  " 5       n[        R                  " 5       Ul        [        U R                  5      Ul        UR                  5         UR                  5         UR                  R                  S5        U R                  UR                  R                  / 5        U R                  UR                  R                  5        g)z>
Test that stopping the service also stops the login timeout.
rD  N)r   r¾   r   rê   rë   rg   r}   r   rn   rÅ   rì   rÎ   r   ÚassertFalser~   rI  s     r+   Útest_cancelLoginTimeoutÚ.SSHUserAuthServerTests.test_cancelLoginTimeout  s˜   € ô %×6Ò6Ó8ÐÜ"&§*¢*£,ÐÔÜ&3°D·K±KÓ&@ÐÔ#Ø×(Ñ(Ô*Ø×(Ñ(Ô*Ø×Ñ×'Ñ'¨Ô5Ø×ÑÐ*×4Ñ4×<Ñ<¸bÔAØ×ÑÐ*×4Ñ4×CÑCÕDr*   c           	      ó’  ^ • SR                  [        S5      [        S5      [        S5      S[        S5      /5      n[        R                  " 5       T R                  l        [        S5       HC  nT R                  R                  U5      nT R                  R
                  R                  S5        ME     U 4S	 jnWR                  U5      $ )
zU
Test that the server disconnects if the client fails authentication
too many times.
r*   rH   ru   rÚ   rÌ   rè   é   ré   c                 óò   >• TR                  TR                  R                  R                  S   [        R                  S[        [        R                  45      -   [        S5      -   [        S5      -   45        g )NrË   rE  s   too many bad authsr*   )rÎ   r¿   r   r   rF  rù   rG  r   rß   s    €r+   rà   Ú:SSHUserAuthServerTests.test_tooManyAttempts.<locals>.check4  sm   ø€ Ø×ÑØ—‘×)Ñ)×1Ñ1°"Ñ5ä×,Ñ,ØÜœY×PÑPÐRÓSñTäÐ.Ó/ñ0ô ˜“gñðõ	r*   )
rã   r   r   rê   r¿   rë   ÚrangerÔ   rì   rÕ   )r@   rä   ÚirÖ   rà   s   `    r+   Útest_tooManyAttemptsÚ+SSHUserAuthServerTests.test_tooManyAttempts)  s�   ø€ ð
 —‘œ2˜f›:¤r¨'£{´B°{³OÀUÌBÈvËJÐWÓXˆÜ $§
¢
£ˆ�‰ÔÜ�r–ˆAØ—‘×4Ñ4°VÓ<ˆAØ�O‰O×!Ñ!×)Ñ)¨!Ö,ñ õ
	ð �}‰}˜UÓ#Ð#r*   c                 ó$  • [        S5      [        S5      -   [        S5      -   S-   [        S5      -   n[        R                  " 5       U R                  l        U R                  R                  U5      nUc   eUR                  U R                  5      $ )zW
If the user requests a service that we don't support, the
authentication should fail.
rH   r*   rÚ   rÌ   )r   r   rê   r¿   rë   rÔ   rÕ   rÑ   rí   s      r+   Útest_failIfUnknownServiceÚ0SSHUserAuthServerTests.test_failIfUnknownServiceB  sr   € ô
 �F“œb ›gÑ%¬¨;«Ñ7¸%Ñ?Ä"ÀVÃ*ÑLˆÜ $§
¢
£ˆ�‰ÔØ�O‰O×0Ñ0°Ó8ˆØ‰}Ðˆ}Ø�}‰}˜T×.Ñ.Ó/Ð/r*   c                 ó  ^ • S nT R                  T R                  SU5        T R                  T R                  SS5        U 4S jnT R                  R                  SSS5      nT R                  U[        5      R                  U5      $ )a"  
tryAuth() has two edge cases that are difficult to reach.

1) an authentication method auth_* returns None instead of a Deferred.
2) an authentication type that is defined does not have a matching
   auth_* method.

Both these cases should return a Deferred which fails with a
ConchError.
c                 ó   • g rT   r"   )rä   s    r+   ÚmockAuthÚ>SSHUserAuthServerTests.test_tryAuthEdgeCases.<locals>.mockAuthY  r  r*   Úauth_publickeyÚauth_passwordNc                 ój   >• TR                   R                  SS S 5      nTR                  U[        5      $ )NrÚ   )r¿   r  r  r   )rÉ   Úd2r@   s     €r+   Ú
secondTestÚ@SSHUserAuthServerTests.test_tryAuthEdgeCases.<locals>.secondTest_  s.   ø€ Ø—‘×(Ñ(¨°d¸DÓAˆBØ×%Ñ% b¬*Ó5Ð5r*   rñ   )r  r¿   r  r  r   rÕ   )r@   r^  rd  Úd1s   `   r+   Útest_tryAuthEdgeCasesÚ,SSHUserAuthServerTests.test_tryAuthEdgeCasesM  sp   ø€ ò	ð 	�
‰
�4—?‘?Ð$4°hÔ?Ø�
‰
�4—?‘? O°TÔ:õ	6ð �_‰_×$Ñ$ \°4¸Ó>ˆØ×!Ñ! "¤jÓ1×=Ñ=¸jÓIÐIr*   )r¿   r}   r¼   )rº   N)r$   r%   r&   r'   r(   r   ÚskiprÂ   rÆ   ÚobjectrÑ   r×   rå   rî   rû   r  r  r   r#  r'  r+  r;  rA  rK  rO  rW  r   rZ  rg  r)   r"   r*   r+   r·   r·   é   s–   † ñð �|Ø0ˆô8òð	
 Fð 	
¨tô 	
ò
0ò$ò&0ò"$ò:1ò4$ò.0ò"0ò(0ò,Wò"Lò*Sò4Dò0Eò$ð2	0¨8°D©>ô 	0õJr*   r·   c                   ó|   • \ rS rSrSr\c  SrS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rSrg)ÚSSHUserAuthClientTestsig  z
Tests for SSHUserAuthClient.
Nr¹   c                 óè   • [        S[        R                  5       5      U l        [        S 5      U R                  l        SU R                  R                  l        U R                  R                  5         g )NrH   ró   )r6   rg   rp   Ú
authClientr   r÷   rn   r?   s    r+   rÂ   ÚSSHUserAuthClientTests.setUpo  sL   € Ü(¨´×1FÑ1FÓ1HÓIˆŒÜ$1°$Ó$7ˆ�‰Ô!Ø.5ˆ�‰×!Ñ!Ô+Ø�‰×&Ñ&Õ(r*   c                 óF   • U R                   R                  5         S U l         g rT   )rn  rÅ   r?   s    r+   rÆ   ÚSSHUserAuthClientTests.tearDownu  rÈ   r*   c                 ót  • U R                  U R                  R                  S5        U R                  U R                  R                  R                  S5        U R                  U R                  R
                  R                  [        R                  [        S5      [        S5      -   [        S5      -   4/5        g)z+
Test that client is initialized properly.
rH   rl   ru   N)
rÎ   rn  r  ÚinstancerO   r   r   r   rú   r   r?   s    r+   Ú	test_initÚ SSHUserAuthClientTests.test_inity  s†   € ð 	×Ñ˜Ÿ™×-Ñ-¨vÔ6Ø×Ñ˜Ÿ™×1Ñ1×6Ñ6¸ÔAØ×ÑØ�O‰O×%Ñ%×-Ñ-Ü×+Ñ+¬R°«Z¼"¸X»,Ñ-FÌÈGËÑ-TÐUÐVõ	
r*   c                 óÔ   ^• S/mU4S jnXR                   R                  l        U R                   R                  S5        U R	                  TS   U R                   R
                  5        g)z)
Test that the client succeeds properly.
Nc                 ó   >• U TS'   g )Nr   r"   )rv   rs  s    €r+   ÚstubSetServiceÚDSSHUserAuthClientTests.test_USERAUTH_SUCCESS.<locals>.stubSetServiceŠ  s   ø€ Ø!ˆH�QŠKr*   r*   r   )rn  r   Ú
setServiceÚssh_USERAUTH_SUCCESSrÎ   rs  )r@   rx  rs  s     @r+   Útest_USERAUTH_SUCCESSÚ,SSHUserAuthClientTests.test_USERAUTH_SUCCESS„  sS   ø€ ð �6ˆõ	"ð 0>�‰×!Ñ!Ô,Ø�‰×,Ñ,¨SÔ1Ø×Ñ˜ !™ d§o¡o×&>Ñ&>Õ?r*   c           
      óÆ  • U R                   R                  [        S5      S-   5        U R                  U R                   R                  R
                  S   [        R                  [        S5      [        S5      -   [        S5      -   S-   [        S5      -   [        [        R                  R                  [        R                  5      R                  5       5      -   45        U R                   R                  [        S5      S-   5        [        [        R                  R                  [        R                  5      R                  5       5      nU R                  U R                   R                  R
                  S   [        R                  [        S5      [        S5      -   [        S5      -   S-   [        S5      -   U-   45        U R                   R                  [        S5      [        [        R                  R                  [        R                  5      R                  5       5      -   5        [        U R                   R                  R                   5      [#        [        R                  45      -   [        S5      -   [        S5      -   [        S5      -   S-   [        S5      -   U-   n[        R                  R                  [        R$                  5      nU R                  U R                   R                  R
                  S   [        R                  [        S5      [        S5      -   [        S5      -   S-   [        S5      -   U-   [        UR'                  U5      5      -   45        g	)
z:
Test that the client can authenticate with a public key.
rñ   rÌ   rË   rH   rl   s   ssh-dssr  ó   N)rn  Ússh_USERAUTH_FAILUREr   rÎ   r   r   r   rú   r   r:   r;   r   r>   r\   r<   Ússh_USERAUTH_PK_OKr÷   rù   rD   rø   )r@   r\   r­   r®   s       r+   Útest_publickeyÚ%SSHUserAuthClientTests.test_publickey‘  sã  € ð 	�‰×,Ñ,¬R°Ó-=ÀÑ-GÔHØ×ÑØ�O‰O×%Ñ%×-Ñ-¨bÑ1ä×-Ñ-Ü�6“
Ü�X“,ñä�\Ó"ñ#ð ñô �Z“.ñ	!ô
 ”T—X‘X×(Ñ(¬×)BÑ)BÓC×HÑHÓJÓKñLðô	
ð 	�‰×,Ñ,¬R°Ó-=ÀÑ-GÔHÜ”$—(‘(×%Ñ%¤g×&?Ñ&?Ó@×EÑEÓGÓHˆØ×ÑØ�O‰O×%Ñ%×-Ñ-¨bÑ1ä×-Ñ-ä�v“JÜ˜“lñ#ä˜Ó&ñ'ð ñô ˜“nñ	%ð
 ñð
ô	
ð 	�‰×*Ñ*Üˆz‹NœR¤§¡× 3Ñ 3´G×4MÑ4MÓ N× SÑ SÓ UÓVÑVô	
ô ˆt�‰×(Ñ(×2Ñ2Ó3Ü”X×2Ñ2Ð4Ó5ñ6ä�‹jñô �‹lñô �Óñ	ð
 ñô �‹nñð ñð 	ô �h‰h×!Ñ!¤'×"<Ñ"<Ó=ˆØ×ÑØ�O‰O×%Ñ%×-Ñ-¨bÑ1ä×-Ñ-Ü�6“
Ü�X“,ñä�\Ó"ñ#ð ñô �Z“.ñ	!ð
 ñô �S—X‘X˜gÓ&Ó'ñ(ð	õ	
r*   c                 óÖ  • [        S[        R                  5       5      n[        S5      Ul        SUR                  l        UR                  5         UR                  S5        / UR                  l        U R                  UR                  S5      5        U R                  UR                  R                  [        R                  [        S5      [        S5      -   [        S5      -   4/5        g)zœ
If the SSHUserAuthClient doesn't return anything from signData,
the client should start the authentication over again by requesting
'none' authentication.
rH   Nró   rñ   r*   rl   ru   )r`   rg   rp   r   r÷   rn   r  r   ÚassertIsNoner�  rÎ   r   rú   r   )r@   rn  s     r+   Ú!test_publickey_without_privatekeyÚ8SSHUserAuthClientTests.test_publickey_without_privatekeyÏ  s¹   € ô 1°¼×9NÑ9NÓ9PÓQˆ
ä,¨TÓ2ˆ
ÔØ)0ˆ
×ÑÔ&Ø×!Ñ!Ô#Ø×Ñ˜<Ô(Ø')ˆ
×ÑÔ$Ø×Ñ˜*×7Ñ7¸Ó<Ô=Ø×ÑØ× Ñ ×(Ñ(Ü×+Ñ+¬R°«Z¼"¸X»,Ñ-FÌÈGËÑ-TÐUÐVõ	
r*   c                 óŒ   ^ • S T R                   l        T R                   R                  S5      nU 4S jnUR                  U5      $ )zc
If there's no public key, auth_publickey should return a Deferred
called back with a False value.
c                 ó   • g rT   r"   r/  s    r+   r•   Ú:SSHUserAuthClientTests.test_no_publickey.<locals>.<lambda>ç  ó   € °r*   rñ   c                 ó(   >• TR                  U 5        g rT   )rN  )Úresultr@   s    €r+   rà   Ú7SSHUserAuthClientTests.test_no_publickey.<locals>.checkê  s   ø€ Ø×Ñ˜VÕ$r*   )rn  rA   r  rÕ   )r@   rÖ   rà   s   `  r+   Útest_no_publickeyÚ(SSHUserAuthClientTests.test_no_publickeyâ  s;   ø€ ñ
 (6ˆ�‰Ô$Ø�O‰O×#Ñ# LÓ1ˆõ	%ð �}‰}˜UÓ#Ð#r*   c                 ó„  • U R                   R                  [        S5      S-   5        U R                  U R                   R                  R
                  S   [        R                  [        S5      [        S5      -   [        S5      -   S-   [        S5      -   45        U R                   R                  [        S5      [        S5      -   5        U R                  U R                   R                  R
                  S   [        R                  [        S5      [        S5      -   [        S5      -   S-   [        S5      S-  -   45        g	)
z`
Test that the client can authentication with a password.  This
includes changing the password.
rÚ   rÌ   rË   rH   rl   r*   rò   ré   N)	rn  r€  r   rÎ   r   r   r   rú   r�  r?   s    r+   Útest_passwordÚ$SSHUserAuthClientTests.test_passwordï  sû   € ð
 	�‰×,Ñ,¬R°«_¸wÑ-FÔGØ×ÑØ�O‰O×%Ñ%×-Ñ-¨bÑ1ä×-Ñ-Ü�6“
œR ›\Ñ)¬B¨{«OÑ;¸gÑEÌÈ6Ë
ÑRðô	
ð 	�‰×*Ñ*¬2¨c«7´R¸³WÑ+<Ô=Ø×ÑØ�O‰O×%Ñ%×-Ñ-¨bÑ1ä×-Ñ-Ü�6“
œR ›\Ñ)¬B¨{«OÑ;¸gÑEÌÈ6Ë
ÐUVÉÑVðõ	
r*   c                 ó|   • S U R                   l        U R                  U R                   R                  S5      5        g)z;
If getPassword returns None, tryAuth should return False.
c                  ó   • g rT   r"   r"   r*   r+   r•   Ú9SSHUserAuthClientTests.test_no_password.<locals>.<lambda>	  s   € ¨dr*   rÚ   N)rn  rK   rN  r  r?   s    r+   Útest_no_passwordÚ'SSHUserAuthClientTests.test_no_password  s-   € ñ '3ˆ�‰Ô#Ø×Ñ˜Ÿ™×0Ñ0°Ó=Õ>r*   c                 óV  • U R                   R                  [        S5      [        S5      -   [        S5      -   S-   [        S5      -   S-   5        U R                  U R                   R                  R
                  S   [        R                  S[        S5      -   [        S5      -   45        g)	zR
Make sure that the client can authenticate with the keyboard
interactive method.
r*   s      s
   Password: rÌ   rË   s      rH   N)rn  Ú'ssh_USERAUTH_PK_OK_keyboard_interactiver   rÎ   r   r   r   ÚMSG_USERAUTH_INFO_RESPONSEr?   s    r+   Útest_keyboardInteractiveÚ/SSHUserAuthClientTests.test_keyboardInteractive  s£   € ð
 	�‰×?Ñ?Üˆs‹GÜ�‹gñä�‹gñð "ñ"ô �Óñ	 ð
 ñô	
ð 	×ÑØ�O‰O×%Ñ%×-Ñ-¨bÑ1ä×3Ñ3Ø#¤b¨£jÑ0´2°f³:Ñ=ðõ	
r*   c                 óV  • SU R                   l        / U R                   R                  l        U R                   R	                  S5        U R                  U R                   R                  R                  [        R                  [        S5      [        S5      -   [        S5      -   4/5        g)zž
If C{SSHUserAuthClient} gets a MSG_USERAUTH_PK_OK packet when it's not
expecting it, it should fail the current authentication and move on to
the next type.
s   unknownr*   rH   rl   ru   N)	rn  ÚlastAuthr   r   r�  rÎ   r   rú   r   r?   s    r+   Ú"test_USERAUTH_PK_OK_unknown_methodÚ9SSHUserAuthClientTests.test_USERAUTH_PK_OK_unknown_method!  s|   € ð $.ˆ�‰Ô Ø,.ˆ�‰×!Ñ!Ô)Ø�‰×*Ñ*¨3Ô/Ø×ÑØ�O‰O×%Ñ%×-Ñ-Ü×+Ñ+¬R°«Z¼"¸X»,Ñ-FÌÈGËÑ-TÐUÐVõ	
r*   c                 óN  ^ • U 4S jnU 4S jnUT R                   l        UT R                   l        T R                   R                  [	        S5      S-   5        T R                  T R                   R                  R                  S   [        R                  [	        S5      [	        S5      -   [	        S5      -   S-   [	        S5      -   45        T R                   R                  [	        S	5      S
-   5        T R                  T R                   R                  R                  SS SS/5        g)z·
ssh_USERAUTH_FAILURE should sort the methods by their position
in SSHUserAuthClient.preferredOrder.  Methods that are not in
preferredOrder should be sorted at the end of that list.
c                  óR   >• T R                   R                  R                  SS5        g )Néÿ   ó   here is data©rn  r   r†   r?   s   €r+   Úauth_firstmethodÚNSSHUserAuthClientTests.test_USERAUTH_FAILURE_sorting.<locals>.auth_firstmethod6  s   ø€ Ø�O‰O×%Ñ%×0Ñ0°°oÕFr*   c                  óR   >• T R                   R                  R                  SS5        g)Néþ   ó
   other dataTr¦  r?   s   €r+   Úauth_anothermethodÚPSSHUserAuthClientTests.test_USERAUTH_FAILURE_sorting.<locals>.auth_anothermethod9  s    ø€ Ø�O‰O×%Ñ%×0Ñ0°°mÔDØr*   s   anothermethod,passwordrÌ   rË   rH   rl   rÚ   s"   firstmethod,anothermethod,passwordrò   éþÿÿÿN)r¤  r¥  )rª  r«  )
rn  r§  r¬  r€  r   rÎ   r   r   r   rú   )r@   r§  r¬  s   `  r+   Útest_USERAUTH_FAILURE_sortingÚ4SSHUserAuthClientTests.test_USERAUTH_FAILURE_sorting/  s÷   ø€ õ	Gõ	ð ,<ˆ�‰Ô(Ø-?ˆ�‰Ô*ð 	�‰×,Ñ,¬RÐ0IÓ-JÈWÑ-TÔUà×ÑØ�O‰O×%Ñ%×-Ñ-¨bÑ1ä×-Ñ-Ü�6“
œR ›\Ñ)¬B¨{«OÑ;¸gÑEÌÈ6Ë
ÑRðô	
ð 	�‰×,Ñ,ÜÐ4Ó5¸Ñ?ô	
ð 	×ÑØ�O‰O×%Ñ%×-Ñ-¨b¨cÐ2Ø#Ð%9Ð:õ	
r*   c                 óD  • U R                   R                  [        S5      S-   5        U R                   R                  [        S5      S-   5        U R                  U R                   R                  R
                  S   [        R                  S[        S5      -   S-   45        g)	z›
If there are no more available user authentication messages,
the SSHUserAuthClient should disconnect with code
DISCONNECT_NO_MORE_AUTH_METHODS_AVAILABLE.
rÚ   rÌ   rò   rË   s      s(   no more authentication methods availables       N)rn  r€  r   rÎ   r   r   rF  r?   s    r+   Ú%test_disconnectIfNoMoreAuthenticationÚ<SSHUserAuthClientTests.test_disconnectIfNoMoreAuthenticationS  sˆ   € ð 	�‰×,Ñ,¬R°«_¸wÑ-FÔGØ�‰×,Ñ,¬R°«_¸wÑ-FÔGØ×ÑØ�O‰O×%Ñ%×-Ñ-¨bÑ1ä×(Ñ(Ø#ÜÐ@ÓAñBà%ñ&ðõ	
r*   c                 ó4  • / U R                   R                  l        U R                   R                  S5        U R	                  U R                   R                  R                  [
        R                  [        S5      [        S5      -   [        S5      -   4/5        g)zp
_ebAuth (the generic authentication error handler) should send
a request for the 'none' authentication method.
NrH   rl   ru   )rn  r   r   Ú_ebAuthrÎ   r   rú   r   r?   s    r+   Útest_ebAuthÚ"SSHUserAuthClientTests.test_ebAuthe  sp   € ð
 -/ˆ�‰×!Ñ!Ô)Ø�‰×Ñ Ô%Ø×ÑØ�O‰O×%Ñ%×-Ñ-Ü×+Ñ+¬R°«Z¼"¸X»,Ñ-FÌÈGËÑ-TÐUÐVõ	
r*   c                 ó4  ^ ^^^• [         R                  " S[        R                  5       5      mT R	                  TR                  5       5        UUU 4S jnUUU 4S jmS mTR                  5       nUR                  T R                  5      R                  U5      $ )z»
getPublicKey() should return None.  getPrivateKey() should return a
failed Deferred.  getPassword() should return a failed Deferred.
getGenericAnswers() should return a failed Deferred.
rH   c                 ó¢   >• U R                  [        5        TR                  5       nUR                  TR                  5      R                  T5      $ rT   )ÚtrapÚNotImplementedErrorrK   rÕ   r¢   Ú
addErrback)r�  rÖ   rn  Úcheck2r@   s     €€€r+   rà   Ú3SSHUserAuthClientTests.test_defaults.<locals>.checkz  s<   ø€ Ø�K‰KÔ+Ô,Ø×&Ñ&Ó(ˆAØ—=‘= §¡Ó+×6Ñ6°vÓ>Ð>r*   c                 ó¨   >• U R                  [        5        TR                  S S S 5      nUR                  TR                  5      R                  T5      $ rT   )rº  r»  rR   rÕ   r¢   r¼  )r�  rÖ   rn  Úcheck3r@   s     €€€r+   r½  Ú4SSHUserAuthClientTests.test_defaults.<locals>.check2  sB   ø€ Ø�K‰KÔ+Ô,Ø×,Ñ,¨T°4¸Ó>ˆAØ—=‘= §¡Ó+×6Ñ6°vÓ>Ð>r*   c                 ó.   • U R                  [        5        g rT   )rº  r»  )r�  s    r+   rÀ  Ú4SSHUserAuthClientTests.test_defaults.<locals>.check3„  s   € Ø�K‰KÔ+Õ,r*   )
r   r4   rg   rp   r…  rA   rE   rÕ   r¢   r¼  )r@   rà   rÖ   rn  r½  rÀ  s   `  @@@r+   Útest_defaultsÚ$SSHUserAuthClientTests.test_defaultsq  st   û€ ô ×/Ò/°¼×8MÑ8MÓ8OÓPˆ
Ø×Ñ˜*×1Ñ1Ó3Ô4÷	?÷
	?ò
	-ð ×$Ñ$Ó&ˆØ�}‰}˜TŸY™YÓ'×2Ñ2°5Ó9Ð9r*   )rn  )r$   r%   r&   r'   r(   r   ri  rÂ   rÆ   rt  r|  r‚  r†  r�  r’  r—  rœ  r   r¯  r²  r¶  rÄ  r)   r"   r*   r+   rl  rl  g  sa   † ñð �|Ø0ˆò)òò	
ò@ò<
ò|
ò&$ò
ò,?ò
ò*
ò"
òH
ò$

õ:r*   rl  c                   ó8   • \ rS rSr\c  Sr " S S5      rS rSrg)ÚLoopbackTestsi‹  Nr¹   c                   ó.   • \ rS rSr " S S5      rS rSrg)ÚLoopbackTests.Factoryi�  c                   ó$   • \ rS rSrSrS rS rSrg)ÚLoopbackTests.Factory.Servicei�  ó   TestServicec                 ó8   • U R                   R                  5         g rT   )r   rŽ   r?   s    r+   rn   Ú,LoopbackTests.Factory.Service.serviceStarted“  s   € Ø—‘×-Ñ-Õ/r*   c                 ó   • g rT   r"   r?   s    r+   rÅ   Ú,LoopbackTests.Factory.Service.serviceStopped–  s   € Ør*   r"   N)r$   r%   r&   r'   rO   rn   rÅ   r)   r"   r*   r+   rp   rË  �  s   † Ø!ˆDò0õr*   rp   c                 ó   • U R                   $ rT   )rp   )r@   ÚavatarrO   s      r+   rw   Ú LoopbackTests.Factory.getService™  s   € Ø—<‘<Ðr*   r"   N)r$   r%   r&   r'   rp   rw   r)   r"   r*   r+   ry   rÉ  �  s   † ÷	ñ 	õ	 r*   ry   c                 ód  ^ ^^• [         R                  " 5       m[        ST R                  R	                  5       5      n[
        R                  " 5       Tl        TTR
                  l        S TR
                  l        [
        R                  " 5       Ul        XR
                  l        S=TR
                  l	        UR
                  l	        S =TR
                  l
        UR
                  l
        T R                  5       TR
                  l        STl        [        5       n[        U5      n[        5       mTR!                  [#        5       5        TR!                  [%        5       5        U4S jTl        UR!                  T5        UTR
                  R                  l        [*        R,                  " TR
                  UR
                  5      nS TR
                  R
                  l        S UR
                  R
                  l        TR1                  5         UR1                  5         U U4S	 jnUR3                  U5      $ )
zG
Test that the userauth server and client play nicely with each other.
rH   c                 ó   • gr�   r"   r/  s    r+   r•   Ú-LoopbackTests.test_loopback.<locals>.<lambda>¦  r‹  r*   r*   c                  ó   • g rT   r"   r"   r*   r+   r•   rÖ  «  s   € Èdr*   r   c                 ó:   >• [        TR                  U    5      S:H  $ )Nré   )ÚlenÚsuccessfulCredentials)ÚaIdÚcheckers    €r+   r•   rÖ  µ  s   ø€ ¤s¨7×+HÑ+HÈÑ+MÓ'NÐRSÒ'Sr*   c                  ó   • g)NÚ_ServerLoopbackr"   r"   r*   r+   r•   rÖ  º  ó   € Ð7Hr*   c                  ó   • g)NÚ_ClientLoopbackr"   r"   r*   r+   r•   rÖ  »  rß  r*   c                 óf   >• TR                  TR                  R                  R                  S5        g )NrÌ  )rÎ   r   rv   rO   )rÉ   r@   r*  s    €€r+   rà   Ú*LoopbackTests.test_loopback.<locals>.checkÀ  s%   ø€ Ø×Ñ˜V×-Ñ-×5Ñ5×:Ñ:¸NÕKr*   )r   r¾   r6   ry   rp   r   r,   rv   rŠ   r÷   ÚsendKexInitr|   ÚpasswordDelayr‘   r   r   r½   r�   r¨   ÚareDoner}   r   ÚloopbackAsyncÚ	logPrefixrn   rÕ   )r@   Úclientr¼   r}   rÖ   rà   rÜ  r*  s   `     @@r+   Útest_loopbackÚLoopbackTests.test_loopbackœ  s§  ú€ ô ×+Ò+Ó-ˆÜ ¨¯©×(<Ñ(<Ó(>Ó?ˆô %×5Ò5Ó7ˆÔØ#)ˆ×ÑÔ Ù'5ˆ×ÑÔ$Ü$×5Ò5Ó7ˆÔØ#)×ÑÔ ØBEÐEˆ×ÑÔ" V×%5Ñ%5Ô%?áFRÐRˆ×ÑÔ$ v×'7Ñ'7Ô'Cð $(§<¡<£>ˆ×ÑÔ Ø ˆÔÜ“ˆÜ˜“ˆÜ$Ó&ˆØ×Ñ¤Ó 1Ô2Ø×ÑÔ 1Ó 3Ô4ÜTˆŒØ×Ñ˜wÔ'Ø*0ˆ×Ñ× Ñ Ô'ä×"Ò" 6×#3Ñ#3°V×5EÑ5EÓFˆÙ/Hˆ×Ñ×"Ñ"Ô,Ù/Hˆ×Ñ×"Ñ"Ô,à×ÑÔØ×ÑÔö	Lð �}‰}˜UÓ#Ð#r*   r"   )	r$   r%   r&   r'   r   ri  ry   rê  r)   r"   r*   r+   rÇ  rÇ  ‹  s   † Ø�|Ø0ˆ÷ ñ  õ'$r*   rÇ  c                   ó$   • \ rS rSr\c  SrS rSrg)ÚModuleInitializationTestsiÆ  Nr¹   c                 ó¸   • U R                  [        R                  R                  S   S5        U R                  [        R                  R                  S   S5        g )Né<   r  )rÎ   r   r¾   ÚprotocolMessagesr4   r?   s    r+   Útest_messagesÚ'ModuleInitializationTests.test_messagesÊ  sP   € ð 	×ÑÜ×&Ñ&×7Ñ7¸Ñ;Ð=Qô	
ð 	×ÑÜ×&Ñ&×7Ñ7¸Ñ;Ð=Qõ	
r*   r"   )r$   r%   r&   r'   r   ri  rñ  r)   r"   r*   r+   rí  rí  Æ  s   † Ø�|Ø0ˆõ
r*   rí  ):r(   Útypesr   Útypingr   Úzope.interfacer   Útwisted.conch.errorr   r   Útwisted.cred.checkersr   Útwisted.cred.credentialsr	   r
   r   Útwisted.cred.errorr   Útwisted.cred.portalr   r   Útwisted.internetr   r   Útwisted.internet.deferr   Útwisted.protocolsr   Útwisted.python.reflectr   Útwisted.trialr   r   Ú__annotations__Útwisted.conch.checkersr   Útwisted.conch.sshr   r   Útwisted.conch.ssh.commonr   Útwisted.conch.testr   r4   r6   rV   r`   r,   rg   r‘   r�   r¨   r±   ÚTestCaser·   rl  rÇ  rí  r"   r*   r+   Ú<module>r     s‘  ðòõ Ý å &ç :Ý 5ß RÑ RÝ 0ß .ß (Ý +Ý &Ý 0Ý "à!€€hˆzÑÓ !Ù�× Ñ Ý9ß;Ñ;Ý+Þ*÷ñ ÷ñ ô -�X×/Ñ/ô  -ôF
E�H×.Ñ.ô 
Eô	> (×"<Ñ"<ô 	>ô>#�I×.Ñ.ô >#ñB ˆVÓ÷	Bð 	Bó ð	Bñ Ð Ó!÷Oð Oó "ðOñ Ð Ó!÷"ð "ó "ð"ñ& Ð Ó!÷	ð 	ó "ð	ô{J˜X×.Ñ.ô {Jô|a:˜X×.Ñ.ô a:ôH	8$�H×%Ñ%ô 8$ôv
 × 1Ñ 1õ 
r*   