+
    ]ˆ¦j  ã                   ó®   € ^ RI t ^ RIHt ^ RIt ! R R4      t ! R R4      t ! R R4      tR	 tR
 tR t	R t
]P                  P                  R 4       tR# )é    N)ÚSimpleNamespacec                   ó,   a € ] tR t^t o R tR tRtV tR# )Ú_Socketc                ó   € R V n         R# )FN©Úclosed©Úselfs   &Útests/test_ssh_identity.pyÚ__init__Ú_Socket.__init__   s	   € ØˆŽó    c                ó   € R V n         R# ©TNr   r	   s   &r   ÚcloseÚ_Socket.close   ó	   € ØˆŽr   r   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   r   Ú__static_attributes__Ú__classdictcell__©Ú__classdict__s   @r   r   r      s   ø‡ € ò÷ð r   r   c                   ó&   a € ] tR t^t o R tRtV tR# )Ú_Keyc                ó   € R # )s   pinned-server-key© r	   s   &r   ÚasbytesÚ_Key.asbytes   s   € Ù#r   r   N)r   r   r   r   r    r   r   r   s   @r   r   r      s   ø‡ € ÷$ð $r   r   c                   óH   a € ] tR t^t o RtR tR tR tR tR t	R t
RtV tR# )	Ú
_TransportNc                ó†   € Wn         R V n        R V n        RV n        RV n        RV n        R V n        V \        V 4      n        R # )NúSSH-2.0-test-serverF)	ÚsockÚbanner_timeoutÚauth_timeoutÚremote_versionÚauthenticatedr   Ú	auth_callÚtypeÚlast)r
   r&   s   &&r   r   Ú_Transport.__init__   s@   € ØŒ	Ø"ˆÔØ ˆÔØ3ˆÔØ"ˆÔØˆŒØˆŒØŒˆT‹
Žr   c                ó   € Wn         R # ©N)Ústart_timeout)r
   Útimeouts   &&r   Ústart_clientÚ_Transport.start_client!   s   € Ø$Ör   c                ó   € \        4       # r0   )r   r	   s   &r   Úget_remote_server_keyÚ _Transport.get_remote_server_key$   s	   € Ü‹vˆr   c                ó&   € WV3V n         R V n        R# r   )r+   r*   )r
   ÚusernameÚpasswordÚfallbacks   &&&&r   Úauth_passwordÚ_Transport.auth_password'   s   € Ø"¨hÐ7ˆŒØ!ˆÖr   c                ó   € V P                   # r0   )r*   r	   s   &r   Úis_authenticatedÚ_Transport.is_authenticated+   s   € Ø×!Ñ!Ð!r   c                ó   € R V n         R# r   r   r	   s   &r   r   Ú_Transport.close.   r   r   )r+   r(   r*   r'   r   r)   r&   r1   )r   r   r   r   r-   r   r3   r6   r<   r?   r   r   r   r   s   @r   r#   r#      s-   ø‡ € Ø€Dòò%òò"ò"÷ð r   r#   c                  ó<   € ^ RI Hp  RV ! \        4       4      ,           # )r   ©Ú_fingerprint_for_keyúSHA256:)Úapp.core.ssh_identityrE   r   rD   s    r   Ú_pinned_fingerprintrH   2   s   € Ý:àÑ+¬D«FÓ3Õ3Ð3r   c                 óì   € ^ RI Hp V P                  VP                  RR 4       V P                  VRR 4       VP	                  R^RRR	R
7      pVP
                  RJ g   Q hRVP                  9   g   Q hR	# )r   ©Ússh_identityÚcreate_connectionc                  ó.   € \         P                  ! R 4      # )znetwork must not open©ÚpytestÚfail©Ú_s   *r   Ú<lambda>Ú=test_probe_blocks_without_a_pinned_host_key.<locals>.<lambda>;   s   € ÌVÏ[Ê[ÐYpÔMqr   Údecrypt_secretc                 ó.   € \         P                  ! R 4      # ©zsecret must not decryptrN   rQ   s   &r   rS   rT   <   ó   € Ä&Ç+Â+ÐNgÔBhr   ú
192.0.2.10ÚadminÚ
ciphertextN©ÚhostÚportr9   Úencrypted_secretÚexpected_host_key_fingerprintFÚdiblokir)Úapp.corerK   ÚsetattrÚsocketÚtest_pinned_ssh_identityÚokÚmessage©ÚmonkeypatchrK   Úresults   &  r   Ú+test_probe_blocks_without_a_pinned_host_keyrk   8   sz   € Ý%à×Ñ˜×+Ñ+Ð-@ÑBqÔrØ×Ñ˜Ð&6Ñ8hÔià×2Ñ2Ø ¨WÀ|Ðswð 3ó €Fð �9‰9˜ÓÐÐØ˜Ÿ™Ô'Ð'Ò'r   c                 ó.  a€ ^ RI Hp \        4       oV P                  VP                  RV3R l4       V P                  \        P                  R\        \        R7      4       V P                  VRR 4       VP                  R^R	R
\        4       R7      pVP                  RJ g   Q hVP                  \        4       8X  g   Q hVP                  R8X  g   Q h\        P                  P                   R8X  g   Q h\        P                  P"                  RJ g   Q hR# )r   rJ   rL   c                 ó   <€ S# r0   r   )Útargetr2   r&   s   &&€r   rS   ÚQtest_probe_verifies_pin_before_decrypting_and_sends_no_commands.<locals>.<lambda>J   s   ø€ ÑZ^r   Úparamiko©Ú	TransportrU   c                 ó   € R # )útest-only-passwordr   )Ú	encrypteds   &r   rS   ro   L   s   € ÑJ^r   rY   rZ   r[   r\   Tr%   N)rZ   rt   F)rb   rK   r   rc   rd   ÚsetitemÚsysÚmodulesr   r#   re   rH   rf   Úserver_fingerprintÚserver_bannerr-   r+   r   )ri   rK   rj   r&   s   &  @r   Ú?test_probe_verifies_pin_before_decrypting_and_sends_no_commandsr{   F   sô   ø€ Ý%ä‹9€DØ×Ñ˜×+Ñ+Ð-@ÔB^Ô_Ø×ÑœŸ™ Z´Ì:Ô1VÔWØ×Ñ˜Ð&6Ñ8^Ô_à×2Ñ2Ø ¨WÀ|ô  tGó  tIð 3ó €Fð �9‰9˜ÓÐÐØ×$Ñ$Ô(;Ó(=Ô=Ð=Ð=Ø×ÑÐ#8Ô8Ð8Ð8Ü�?‰?×$Ñ$Ð(NÔNÐNÐNÜ�?‰?×!Ñ! TÓ)Ð)Ò)r   c                 óŠ  € ^ RI Hp V P                  VP                  RR 4       V P	                  \
        P                  R\        \        R7      4       V P                  VRR 4       VP                  R^R	R
RR7      pVP                  RJ g   Q hRVP                  9   g   Q h\        P                  P                  RJ g   Q hR# )r   rJ   rL   c                 ó   € \        4       # r0   )r   )rn   r2   s   &&r   rS   ÚPtest_probe_rejects_an_unpinned_server_before_secret_decryption.<locals>.<lambda>\   s   € ÔZaÔZcr   rp   rq   rU   c                 ó.   € \         P                  ! R 4      # rW   rN   rQ   s   &r   rS   r~   ^   rX   r   rY   rZ   r[   ú2SHA256:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr\   Fztidak cocokTN)rb   rK   rc   rd   rv   rw   rx   r   r#   re   rf   rg   r-   r   rh   s   &  r   Ú>test_probe_rejects_an_unpinned_server_before_secret_decryptionr�   Y   s±   € Ý%à×Ñ˜×+Ñ+Ð-@ÑBcÔdØ×ÑœŸ™ Z´Ì:Ô1VÔWØ×Ñ˜Ð&6Ñ8hÔià×2Ñ2Ø ¨WÀ|ð  thð 3ó €Fð �9‰9˜ÓÐÐØ˜FŸN™NÔ*Ð*Ð*Ü�?‰?×!Ñ! TÓ)Ð)Ò)r   c              ƒ   óÚ  aaaa"  € ^ RI Hp ^ RIHo \	        ^RRRRR^^RR	7	      o\	        ^RRR
RR7      o ! VV3R lR4      p/ oVV3R lpV P                  VRV4       V P                  RR4       VP                  V! 4       4      G Rj  x€L
 pVP                  ^È8X  g   Q hRVP                  9   g   Q hSR,          P                  R4      '       g   Q hSR,          R8X  g   Q hR#  L\5i)r   )Údevices)ÚSSHIdentityTestResultzOLT-UJIzC-DATAz
FD1601S-B1rY   ÚsshT)	ÚidÚnameÚvendorÚmodelr]   Úmanagement_protocolÚapi_portÚcredential_idÚ	is_activerZ   r[   )r†   Úprotocolr�   r9   r_   c                   ó0   <a € ] tR t^tt o VV3R ltRtV tR# )ÚMtest_assigned_olt_endpoint_requires_the_pinned_identity_probe.<locals>.FakeDBc              “  ó"   <"  € V^8X  d   S# S# 5i)é   r   )r
   r‰   Úitem_idÚ
credentialÚdevices   &&&€€r   ÚgetÚQtest_assigned_olt_endpoint_requires_the_pinned_identity_probe.<locals>.FakeDB.getu   s   øé € Ø$¨œ\�6Ð9¨zÐ9ùs   ƒr   N)r   r   r   r   r–   r   r   )r   r”   r•   s   @€€r   ÚFakeDBr�   t   s   ù‡ € ÷	:ô 	:r   r˜   c                  ó<   <€ SP                  V 4       S! R RRR4      # )TÚverifiedzSHA256:testzSSH-2.0-test)Úupdate)Úkwargsr„   Úseens   ,€€r   Ú
fake_probeÚQtest_assigned_olt_endpoint_requires_the_pinned_identity_probe.<locals>.fake_probez   s    ø€ Ø�‰�FÔÙ$ T¨:°}ÀnÓUÐUr   re   ÚOLT_1_SSH_HOST_KEY_SHA256r€   Ns	   "ok":truer`   rF   r_   )Ú
app.routesrƒ   rG   r„   r   rc   ÚsetenvÚ test_assigned_cdata_ssh_identityÚstatus_codeÚbodyÚ
startswith)	ri   rƒ   r˜   rž   Úresponser„   r”   r•   r�   s	   &    @@@@r   Ú=test_assigned_olt_endpoint_requires_the_pinned_identity_prober¨   i   sð   ûé € å"Ý;äØ�9 X°\ÈØ!¨B¸aÈ4ô€Fô ! A°ÀÐPWÐjvÔw€J÷:õ :ð €DöVð ×Ñ˜Ð!;¸ZÔHØ×ÑÐ2Ð4hÔià×=Ñ=¹f»hÓG×G€Hà×Ñ 3Ô&Ð&Ð&Ø˜8Ÿ=™=Ô(Ð(Ð(ØÐ/Õ0×;Ñ;¸I×FÒFÐFÐFØÐ"Õ# |Ô3Ð3Ò3ñ Hùs   †BC+ÂC)ÂAC+ÃC+)rw   Útypesr   rO   r   r   r#   rH   rk   r{   r�   ÚmarkÚasyncior¨   r   r   r   Ú<module>r¬      s^   ðÛ 
Ý !ã ÷ñ ÷$ñ $÷
ñ ò<4ò(ò*ò&*ð  ‡�×Ññ4ó ò4r   