+
    üÐj-  ã                   óÞ  € R t ^ RI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t ^ R
IHt RtRt]! R4      '       d    ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt MRtRt]t ]PB                  ! 4       '       d   RtRt]PD                  PG                  4       '       g   RtRt]PH                  PG                  4       '       g   RtRt ! R R]4      t% ! R R]4      t&R# )z,
Tests for L{twisted.conch.client.default}.
N)ÚskipIf)Ú
ConchError)Úkeydata)ÚStringTransport)ÚnativeString)ÚFilePath)ÚrequireModule)Úplatform)ÚTestCaseFÚ Úcryptography)Údefault)ÚSSHAgentClient)ÚSSHUserAuthClient)ÚConchOptions)ÚKeyTz7cryptography required for twisted.conch.client.default.zlgenericAnswers and getPassword does not work on Windows. Should be fixed as part of fixing bug 6409 and 6410z#sys.stdin is not an interactive ttyz$sys.stdout is not an interactive ttyc                   óÌ   a € ] tR t^2t o RtR tR tR tR tR t	R t
R tR	 t]! ]]4      R
 4       t]! ]]4      R 4       t]! ]]4      R 4       t]! ]]4      R 4       tRtV tR# )ÚSSHUserAuthClientTestsz]
Tests for L{SSHUserAuthClient}.

@type rsaPublic: L{Key}
@ivar rsaPublic: A public RSA key.
c                óÊ  € \         P                  ! \        P                  4      V n        \        V P                  4       4      V n        V P                  P                  4        V P                  P                  R 4      V n
        V P                  P                  \        P                  4       V P                  P                  R4      P                  \        P                  4       R# )Úid_rsaú
id_rsa.pubN)r   Ú
fromStringr   ÚpublicRSA_opensshÚ	rsaPublicr   ÚmktempÚtmpdirÚmakedirsÚchildÚrsaFileÚ
setContentÚprivateRSA_openssh©Úselfs   &ÚA/usr/lib/python3/dist-packages/twisted/conch/test/test_default.pyÚsetUpÚSSHUserAuthClientTests.setUp:   s‹   € ÜŸš¬×(AÑ(AÓBˆŒÜ˜tŸ{™{›}Ó-ˆŒØ�‰×ÑÔØ—{‘{×(Ñ(¨Ó2ˆŒØ�‰×Ñ¤× :Ñ :Ô;Ø�‰×Ñ˜,Ó'×2Ñ2´7×3LÑ3LÖMó    c                ój  € \        R\        4       R4      p\        4       p\        4       pVP	                  V4       W!n        RpVP                  V P                  V4       V P                  VP                  4       RV P                  P                  4       ,           R,           V,           R,           4       R# )z€
When connected to an agent, L{SSHUserAuthClient} can use it to
request signatures of particular data with a particular L{Key}.
ó   userNs	   Sign heres	     -  s      	s       )r   r   r   r   ÚmakeConnectionÚkeyAgentÚsignDatar   ÚassertEqualÚvalueÚblob)r"   ÚclientÚagentÚ	transportÚ	cleartexts   &    r#   Útest_signDataWithAgentÚ-SSHUserAuthClientTests.test_signDataWithAgentB   sš   € ô
 # 7¬L«N¸DÓAˆÜÓ ˆÜ#Ó%ˆ	Ø×Ñ˜YÔ'ØŒØ ˆ	Ø�‰˜Ÿ™¨	Ô2Ø×ÑØ�O‰OÓØ1Ø�n‰n×!Ñ!Ó#õ$àõ ð õð "õ	"ö	
r&   c                ó,  € \        4       pV P                  P                  4       .Vn        VP	                  4       pV P                  VP                  4       4       V P                  W P                  4       V P                  VP	                  4       4       R# )zö
L{SSHUserAuthClient} looks up public keys from the agent using the
L{SSHAgentClient} class.  That L{SSHAgentClient.getPublicKey} returns a
L{Key} object with one of the public keys in the agent.  If no more
keys are present, it returns L{None}.
N)	r   r   r.   ÚblobsÚgetPublicKeyÚ
assertTrueÚisPublicr,   ÚassertIsNone)r"   r0   Úkeys   &  r#   Útest_agentGetPublicKeyÚ-SSHUserAuthClientTests.test_agentGetPublicKeyW   sl   € ô Ó ˆØ—~‘~×*Ñ*Ó,Ð-ˆŒØ× Ñ Ó"ˆØ�‰˜Ÿ™›Ô'Ø×Ñ˜Ÿn™nÔ-Ø×Ñ˜%×,Ñ,Ó.Ö/r&   c                ó   € \        4       pV P                  P                  .Vn        \	        RVR4      pVP                  4       pV P                  VP                  4       4       V P                  W0P                  4       R# )zµ
L{SSHUserAuthClient.getPublicKey()} is able to get a public key from
the first file described by its options' C{identitys} list, and return
the corresponding public L{Key} object.
r(   N)
r   r   ÚpathÚ	identitysr   r7   r8   r9   r,   r   )r"   Úoptionsr/   r;   s   &   r#   Útest_getPublicKeyFromFileÚ0SSHUserAuthClientTests.test_getPublicKeyFromFilee   s`   € ô “.ˆØ!Ÿ\™\×.Ñ.Ð/ˆÔÜ" 7¨G°TÓ:ˆØ×!Ñ!Ó#ˆØ�‰˜Ÿ™›Ô'Ø×Ñ˜Ÿn™nÖ-r&   c                ó   € \        4       pV P                  P                  .Vn        \	        4       p\        RVR4      pW#n        VP                  4       pV P                  VP                  4       4       V P                  W@P                  4       R# )zz
If an agent is present, but doesn't return a key,
L{SSHUserAuthClient.getPublicKey} continue with the normal key lookup.
r(   N)r   r   r?   r@   r   r   r*   r7   r8   r9   r,   r   )r"   rA   r0   r/   r;   s   &    r#   Útest_getPublicKeyAgentFallbackÚ5SSHUserAuthClientTests.test_getPublicKeyAgentFallbackr   sm   € ô
 “.ˆØ!Ÿ\™\×.Ñ.Ð/ˆÔÜÓ ˆÜ" 7¨G°TÓ:ˆØŒØ×!Ñ!Ó#ˆØ�‰˜Ÿ™›Ô'Ø×Ñ˜Ÿn™nÖ-r&   c                óø  € \        4       pV P                  P                  R4      P                  \        P
                  4       V P                  P                  R4      pVP                  \        P                  4       V P                  P                  VP                  .Vn	        V P                  P                  R4      P                  R4       \        RVR4      pVP                  4       pV P                  VP                  4       4       V P                  V\        P                   ! \        P
                  4      4       V P                  VP"                  V P                  P                  VP                  .4       R# )zœ
If L{keys.Key.fromFile} raises a L{keys.BadKeyError}, the
L{SSHUserAuthClient.getPublicKey} tries again to get a public key by
calling itself recursively.
z
id_dsa.pubÚid_dsar   s
   not a key!r(   N)r   r   r   r   r   ÚpublicDSA_opensshÚprivateDSA_opensshr   r?   r@   r   r7   r8   r9   r,   r   r   Ú	usedFiles)r"   rA   ÚdsaFiler/   r;   s   &    r#   Útest_getPublicKeyBadKeyErrorÚ3SSHUserAuthClientTests.test_getPublicKeyBadKeyError€   s  € ô “.ˆØ�‰×Ñ˜,Ó'×2Ñ2´7×3LÑ3LÔMØ—+‘+×#Ñ# HÓ-ˆØ×Ñœ7×5Ñ5Ô6Ø!Ÿ\™\×.Ñ.°·±Ð=ˆÔØ�‰×Ñ˜,Ó'×2Ñ2°=ÔAÜ" 7¨G°TÓ:ˆØ×!Ñ!Ó#ˆØ�‰˜Ÿ™›Ô'Ø×Ñ˜œcŸnšn¬W×-FÑ-FÓGÔHØ×Ñ˜×)Ñ)¨D¯L©L×,=Ñ,=¸w¿|¹|Ð+LÖMr&   c                ó   a a€ \         P                  ! \        P                  4      o\	        4       pS P
                  P                  .Vn        \        RVR4      pVP                  4        VV 3R lpVP                  4       P                  V4      # )zÐ
L{SSHUserAuthClient.getPrivateKey} will load a private key from the
last used file populated by L{SSHUserAuthClient.getPublicKey}, and
return a L{Deferred} which fires with the corresponding private L{Key}.
r(   Nc                 ój   <€ SP                  V P                  4       4       SP                  V S4       R # ©N©ÚassertFalser9   r,   ©r;   Ú
rsaPrivater"   s   &€€r#   Ú_cbGetPrivateKeyÚCSSHUserAuthClientTests.test_getPrivateKey.<locals>._cbGetPrivateKeyŸ   ó'   ø€ Ø×Ñ˜SŸ\™\›^Ô,Ø×Ñ˜S *Ö-r&   )r   r   r   r    r   r   r?   r@   r   r7   ÚgetPrivateKeyÚaddCallback)r"   rA   r/   rV   rU   s   f   @r#   Útest_getPrivateKeyÚ)SSHUserAuthClientTests.test_getPrivateKey’   sq   ù€ ô —^’^¤G×$>Ñ$>Ó?ˆ
Ü“.ˆØ!Ÿ\™\×.Ñ.Ð/ˆÔÜ" 7¨G°TÓ:ˆà×ÑÔö	.ð ×#Ñ#Ó%×1Ñ1Ð2BÓCÐCr&   c                ó²  a aa€ \         P                  ! \        P                  4      oRoS P                  P                  SP                  RSR7      4       \        4       pS P                  P                  .Vn	        \        RVR4      pVP                  4        VV 3R lpVV 3R lpS P                  VRV4       VP                  4       P                  V4      # )	z—
L{SSHUserAuthClient} can get a private key from a file, and return a
Deferred called back with a private L{Key} object, even if the key is
encrypted.
s   this is the passphraseÚopenssh)Ú
passphraser(   Nc                 ón   <€ SP                  V R SP                  P                   R24       \        S4      # )zEnter passphrase for key 'z': )r,   r   r?   r   )Úpromptr_   r"   s   &€€r#   Ú_getPasswordÚISSHUserAuthClientTests.test_getPrivateKeyPassphrase.<locals>._getPassword´   s8   ø€ Ø×ÑØÐ4°T·\±\×5FÑ5FÐ4GÀsÐKôô   
Ó+Ð+r&   c                 ój   <€ SP                  V P                  4       4       SP                  V S4       R # rQ   rR   rT   s   &€€r#   rV   ÚMSSHUserAuthClientTests.test_getPrivateKeyPassphrase.<locals>._cbGetPrivateKeyº   rX   r&   rb   )r   r   r   r    r   r   ÚtoStringr   r?   r@   r   r7   ÚpatchrY   rZ   )r"   rA   r/   rb   rV   r_   rU   s   f    @@r#   Útest_getPrivateKeyPassphraseÚ3SSHUserAuthClientTests.test_getPrivateKeyPassphrase¥   s­   ú€ ô —^’^¤G×$>Ñ$>Ó?ˆ
Ø.ˆ
Ø�‰×Ñ 
× 3Ñ 3°IÈ*Ð 3Ó UÔVÜ“.ˆØ!Ÿ\™\×.Ñ.Ð/ˆÔÜ" 7¨G°TÓ:ˆà×ÑÔö	,ö	.ð 	�
‰
�6˜>¨<Ô8Ø×#Ñ#Ó%×1Ñ1Ð2BÓCÐCr&   c                ó
  a €  ! R R4      p\        4       p\        RVR4      pV! R4      Vn        V 3R lpS P                  \        P
                  RV4       VP                  4       pVP                  S P                  R4       V# )	zV
Get the password using
L{twisted.conch.client.default.SSHUserAuthClient.getPassword}
c                   ó,   a € ] tR t^Èt o R tR tRtV tR# )Ú>SSHUserAuthClientTests.test_getPassword.<locals>.FakeTransportc                ó   € W n         Wn        R # rQ   )r1   Úhost)r"   rn   s   &&r#   Ú__init__ÚGSSHUserAuthClientTests.test_getPassword.<locals>.FakeTransport.__init__É   s   € Ø!%”Ø –	r&   c                ó   € V # rQ   © r!   s   &r#   ÚgetPeerÚFSSHUserAuthClientTests.test_getPassword.<locals>.FakeTransport.getPeerÍ   s   € Ø�r&   )rn   r1   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__ro   rs   Ú__static_attributes__Ú__classdictcell__©Ú__classdict__s   @r#   ÚFakeTransportrl   È   s   ø‡ € ò!÷ð r&   r}   r(   Nz	127.0.0.1c                 ó,   <€ SP                  V R 4       R# )zuser@127.0.0.1's password: úbad password©r,   ©ra   r"   s   &€r#   ÚgetpassÚ8SSHUserAuthClientTests.test_getPassword.<locals>.getpassÔ   s   ø€ Ø×Ñ˜VÐ%BÔCÙ!r&   r‚   ó   bad password)	r   r   r1   rg   r   r‚   ÚgetPasswordrZ   r,   )r"   r}   rA   r/   r‚   Úds   f     r#   Útest_getPasswordÚ'SSHUserAuthClientTests.test_getPasswordÁ   ss   ø€ ÷	ñ 	ô “.ˆÜ" 7¨G°TÓ:ˆÙ(¨Ó5ˆÔõ	"ð 	�
‰
”7—?‘? I¨wÔ7Ø×ÑÓ ˆØ	�‰�d×&Ñ&¨Ô8Øˆr&   c                óæ   a a€ \        4       p\        RVR4      pRoVV 3R lpS P                  \        P                  RV4       VP                  S4      pVP                  S P                  R4       V# )zp
Get the password using
L{twisted.conch.client.default.SSHUserAuthClient.getPassword}
using a different prompt.
r(   Ns   Give up your passwordc                 ó>   <€ SP                  V \        S4      4       R # )r   )r,   r   )Úpra   r"   s   &€€r#   r‚   Ú>SSHUserAuthClientTests.test_getPasswordPrompt.<locals>.getpassè   s   ø€ Ø×Ñ˜Q¤¨VÓ 4Ô5Ù!r&   r‚   r„   )r   r   rg   r   r‚   r…   rZ   r,   )r"   rA   r/   r‚   r†   ra   s   f    @r#   Útest_getPasswordPromptÚ-SSHUserAuthClientTests.test_getPasswordPromptÝ   sc   ù€ ô “.ˆÜ" 7¨G°TÓ:ˆØ)ˆö	"ð 	�
‰
”7—?‘? I¨wÔ7Ø×Ñ˜vÓ&ˆØ	�‰�d×&Ñ&¨Ô8Øˆr&   c                ó@  a aa€ \        4       p\        RVR4      pR pS P                  \        P                  RV4       \
        P                  \
        P                  uooVP                  R4      pVP                  V VV3R l4       pS P                  V\        4       R# )z�
Get the password using
L{twisted.conch.client.default.SSHUserAuthClient.getPassword}
and trigger a {twisted.conch.error import ConchError}.
r(   Nc                 ó   € \        R 4      h)zUser pressed CTRL-C)ÚKeyboardInterrupt)ra   s   &r#   r‚   ÚBSSHUserAuthClientTests.test_getPasswordConchError.<locals>.getpassû   s   € Ü#Ð$9Ó:Ð:r&   r‚   ó   ?c                 ól   <€ SP                  SS.\        P                  \        P                  .4       V # rQ   )r,   ÚsysÚstdoutÚstdin)Úfailr"   r—   r–   s   &€€€r#   Ú	check_sysÚDSSHUserAuthClientTests.test_getPasswordConchError.<locals>.check_sys  s)   ø€ à×Ñ˜f e˜_¬s¯z©z¼3¿9¹9Ð.EÔFØˆKr&   )r   r   rg   r   r‚   r•   r–   r—   r…   Ú
addErrbackÚassertFailurer   )r"   rA   r/   r‚   r†   r™   r—   r–   s   f     @@r#   Útest_getPasswordConchErrorÚ1SSHUserAuthClientTests.test_getPasswordConchErrorñ   s€   ú€ ô “.ˆÜ" 7¨G°TÓ:ˆò	;ð 	�
‰
”7—?‘? I¨wÔ7ÜŸ
™
¤C§I¡Iˆˆ�Ø×Ñ˜tÓ$ˆà	
�‰ö	ó 
ð	ð 	×Ñ˜1œjÖ)r&   c                ó$  a € \        4       p\        RVR4      pV 3R lpS P                  \        P                  RV4       V 3R lpS P                  \        RV4       VP                  RRR
R.4      pVP                  S P                  RR	.4       V# )zE
L{twisted.conch.client.default.SSHUserAuthClient.getGenericAnswers}
r(   Nc                 ó,   <€ SP                  V R 4       R# )zpass promptr‚   r€   r�   s   &€r#   r‚   Ú>SSHUserAuthClientTests.test_getGenericAnswers.<locals>.getpass  s   ø€ Ø×Ñ˜V ]Ô3Ùr&   r‚   c                 ó,   <€ SP                  V R 4       R# )zraw_input promptÚ	raw_inputr€   r�   s   &€r#   r£   Ú@SSHUserAuthClientTests.test_getGenericAnswers.<locals>.raw_input  s   ø€ Ø×Ñ˜VÐ%7Ô8Ùr&   Ú_inputs   Names   Instructionr£   )s   pass promptF)s   raw_input promptT)r   r   rg   r   r‚   ÚgetGenericAnswersrZ   ÚassertListEqual)r"   rA   r/   r‚   r£   r†   s   f     r#   Útest_getGenericAnswersÚ-SSHUserAuthClientTests.test_getGenericAnswers	  s‹   ø€ ô
 “.ˆÜ" 7¨G°TÓ:ˆõ	ð 	�
‰
”7—?‘? I¨wÔ7õ	ð 	�
‰
”7˜H iÔ0Ø×$Ñ$ØØØ$Ð&AÐBó
ˆð
 	
�‰�d×*Ñ*¨Y¸Ð,DÔEØˆr&   )r   r   r   N)ru   rv   rw   rx   Ú__doc__r$   r3   r<   rB   rE   rM   r[   rh   r   ÚdoSkipÚ
skipReasonr‡   r�   r�   r¨   ry   rz   r{   s   @r#   r   r   2   s¢   ø‡ € ñòNò
ò*0ò.ò.òNò$Dò&Dñ8 ˆF�JÓñó  ðñ6 ˆF�JÓñó  ðñ& ˆF�JÓñ*ó  ð*ñ. ˆF�JÓñó  ör&   r   c                   ó0   a € ] tR tRt o RtR tR tRtV tR# )ÚConchOptionsParsingi%  z
Options parsing.
c                ó¬  € \        4       pV P                  \        VP                  R4      pV P	                  RVP
                  4       \        4       pVP                  R4       V P                  VR,          R.4       VP                  R4       V P                  VR,          R.4       VP                  R4       V P                  VR,          . RO4       R# )	z
Specify MAC algorithms.
zinvalid-maczUnknown mac typezhmac-sha2-512Úmacss   hmac-sha2-512z hmac-sha2-256,hmac-sha1,hmac-md5N)s   hmac-sha2-256s	   hmac-sha1s   hmac-md5)r   ÚassertRaisesÚ
SystemExitÚopt_macsÚassertInÚcoder,   ©r"   ÚoptsÚes   &  r#   Ú	test_macsÚConchOptionsParsing.test_macs*  s¨   € ô ‹~ˆØ×Ñœj¨$¯-©-¸ÓGˆØ�‰Ð(¨!¯&©&Ô1Ü‹~ˆØ�‰�oÔ&Ø×Ñ˜˜f�Ð(8Ð'9Ô:Ø�‰Ð&Ô'Ø×Ñ˜˜f�Ð(8Ð'9Ô:Ø�‰Ð8Ô9Ø×Ñ˜˜f�Ò'TÖUr&   c                ó¬  € \        4       pV P                  \        VP                  R4      pV P	                  RVP
                  4       \        4       pVP                  R4       V P                  VR,          R.4       VP                  R4       V P                  VR,          R.4       VP                  R4       V P                  VR,          RR.4       R# )	z
Specify host key algorithms.
zinvalid-keyzUnknown host key typezssh-rsazhost-key-algorithmss   ssh-rsas   ssh-dsszssh-rsa,ssh-dssN)r   r±   r²   Úopt_host_key_algorithmsr´   rµ   r,   r¶   s   &  r#   Útest_host_key_algorithmsÚ,ConchOptionsParsing.test_host_key_algorithms9  sµ   € ô ‹~ˆØ×Ñœj¨$×*FÑ*FÈÓVˆØ�‰Ð-¨q¯v©vÔ6Ü‹~ˆØ×$Ñ$ YÔ/Ø×Ñ˜Ð3Õ4°z°lÔCØ×$Ñ$ ZÔ0Ø×Ñ˜Ð3Õ4°z°lÔCØ×$Ñ$Ð%6Ô7Ø×Ñ˜Ð3Õ4°zÀ:Ð6NÖOr&   rr   N)	ru   rv   rw   rx   rª   r¹   r½   ry   rz   r{   s   @r#   r®   r®   %  s   ø‡ € ñòV÷Pð Pr&   r®   )'rª   r•   Úunittestr   Útwisted.conch.errorr   Útwisted.conch.testr   Útwisted.internet.testingr   Útwisted.python.compatr   Útwisted.python.filepathr   Útwisted.python.reflectr   Útwisted.python.runtimer	   Útwisted.trial.unittestr
   r«   r¬   Útwisted.conch.clientr   Útwisted.conch.client.agentr   Útwisted.conch.client.defaultr   Útwisted.conch.client.optionsr   Útwisted.conch.ssh.keysr   ÚskipÚ	isWindowsr—   Úisattyr–   r   r®   rr   r&   r#   Ú<module>rÐ      sÔ   ðñó
 Ý å *Ý &Ý 4Ý .Ý ,Ý 0Ý +Ý +à	€Ø€
á�× Ò Ý,Ý9Ý>Ý9Þ*à€FØJ€JØ€Dà×Ò×ÒØ€Fð	?ð ð
 ‡y�y×Ñ×ÒØ€FØ6€JØ
‡z�z×Ñ×ÒØ€FØ7€Jôp˜Xô pôf!P˜(ö !Pr&   