ó
    Ö›‘h•0  ã                  ó�  • S r SSKJr  SSKrSSKrSSKrSSKrSSKrSSKJ	r	  SSK
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JrJr  \R                  \R2                  :X  a   SSKr\R6                  \R8                  4  \ " 5       r!S r" " S S\RF                  5      r$S r%S r&S r'\"" S5      S 5       r(\"" S5      S 5       r)\"" S5      S 5       r*\"" S5      S 5       r+S r,  S!       S"S jjr-S#S jr.S r/S r0S$S jr1 S%       S&S jjr2\3S :X  a  \%" 5         gg! \\4 a    S\R>                  S
'   \" \5         NÂf = f)'z2
Implementation module for the `ckeygen` command.
é    )ÚannotationsN)ÚCallable)Úwraps)Úreload)ÚAnyÚDictÚOptional)Úkeys)ÚfailureÚfilepathÚlogÚusageÚtermiosc                ó   ^ • U 4S jnU$ )Nc                óD   >^ • [        T 5      U 4S j5       nU[        T'   U$ )Nc                 ó   >• T" U 0 UD6$ ©N© )ÚargsÚkwargsÚkeygenerators     €ÚaC:\Users\psant\Downloads\Noiseback\school\venv\Lib\site-packages\twisted/conch/scripts/ckeygen.pyÚwrapperÚ:_keyGenerator.<locals>.assignkeygenerator.<locals>.wrapper%   s   ø€ á Ð0¨Ñ0Ð0ó    )r   ÚsupportedKeyTypes)r   r   ÚkeyTypes   ` €r   ÚassignkeygeneratorÚ)_keyGenerator.<locals>.assignkeygenerator$   s,   ù€ Ü	ˆ|Ó	ô	1ó 
ð	1ð &-Ô˜'Ñ"Øˆr   r   )r   r   s   ` r   Ú_keyGeneratorr    #   s   ø€ õð Ðr   c            	      ó  • \ rS rSrSrSr/ SQ/ SQ/ SQ/ SQ/ SQ/ S	Q/ S
Q/ SQ/r/ SQ/ SQ/ SQ/ SQ/ SQ/r\R                  " \R                  " \" \R                  5       5      5      \R                  " SS/5      S.S9rSrg)ÚGeneralOptionsé/   zUsage:    ckeygen [options]
 z8ckeygen manipulates public/private keys in various ways.)ÚbitsÚbNz$Number of bits in the key to create.)ÚfilenameÚfNzFilename of the key file.)ÚtypeÚtNzSpecify type of key to create.)ÚcommentÚCNzProvide new comment.)ÚnewpassÚNNzProvide new passphrase.)ÚpassÚPNzProvide old passphrase.)ÚformatÚoúsha256-base64zFingerprint format of key file.)úprivate-key-subtypeNNz5OpenSSH private key subtype to write ("PEM" or "v1").)ÚfingerprintÚlzShow fingerprint of key file.)Ú
changepassÚpz&Change passphrase of private key file.)ÚquietÚqzQuiet.)úno-passphraseNz"Create the key with no passphrase.)ÚshowpubÚyz+Read private key file and print public key.ÚPEMÚv1)r(   r3   )Ú
optActionsr   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__ÚsynopsisÚlongdescÚoptParametersÚoptFlagsr   ÚCompletionsÚCompleteListÚlistr   r
   ÚcompDataÚ__static_attributes__r   r   r   r"   r"   /   s“   † ð€Hð J€Hò 	DÚ<Ú=Ú6Ú9Ú6ÚKò	
ð€Mò" 	>ÚEÚ ÚEÚGð€Hð × Ò à×&Ò&¡tÐ,=×,BÑ,BÓ,DÓ'EÓFØ#(×#5Ò#5°u¸d°mÓ#Dñ
ñƒHr   r"   c            	     óV  • [        5       n  U R                  [        R                  SS  5        [        R                  " 5         [        [        l        U S   (       a�  U S   R                  5       [        ;   a2  [        SU S   -  5        [        U S   R                  5          " U 5        g [        R                  " SU S   < SSR                  [        R!                  5       5      < 35        g U S   (       a  [#        U 5        g U S	   (       a  [%        U 5        g U S
   (       a  ['        U 5        g U R                  5         [        R                  " S5        g ! [        R
                   a?  n[        SU-  5        U R                  5         [        R                  " S5         S nAGNuS nAff = f)Né   z	ERROR: %sr(   z&Generating public/private %s key pair.zKey type was z, must be one of z, r4   r6   r;   )r"   ÚparseOptionsÚsysÚargvr   Ú
UsageErrorÚprintÚopt_helpÚexitr   ÚdiscardLogsÚhandleErrorÚdeferrÚlowerr   Újoinr
   ÚprintFingerprintÚchangePassPhraseÚdisplayPublicKey)ÚoptionsÚus     r   Úrunr`   U   s7  € ÜÓ€GðØ×ÑœSŸX™X a b˜\Ô*ô
 ‡O‚OÔÜ„C„JØˆv‡Ø�6‰?× Ñ Ó"Ô&7Ó7ÜÐ:¸gÀf¹oÑNÔOÜ˜g f™o×3Ñ3Ó5Ò6°wÕ?ä�H‹Hà˜6”? D§I¡IÔ.?×.DÑ.DÓ.FÕ$GðIõð 
�×	Ü˜Õ!Ø	�×	Ü˜Õ!Ø	�×	Ü˜Õ!à×ÑÔÜ�Š��øô/ ×Ñó Üˆk˜A‰oÔØ×ÑÔÜ�Š��Šûðús   Œ"E ÅF(Å)4F#Æ#F(c                óÚ   • U S   S:X  a  [         R                  R                  U S'   U $ U S   S:X  a  [         R                  R                  U S'   U $ [         R                  " SU S    35      e)Nr0   zmd5-hexr2   z Unsupported fingerprint format: )r
   ÚFingerprintFormatsÚMD5_HEXÚSHA256_BASE64ÚBadFingerPrintFormat)r^   s    r   Úenumrepresentationrf   s   su   € ØˆxÑ˜IÓ%Ü ×3Ñ3×;Ñ;ˆ�ÑØˆØ	�Ñ	˜oÓ	-Ü ×3Ñ3×AÑAˆ�ÑØˆä×'Ò'Ø.¨w°xÑ/@Ð.AÐBó
ð 	
r   c                 óZ   • Sq [        R                  " [        R                  " 5       5        e )Né   )Ú
exitStatusr   Úerrr   ÚFailurer   r   r   rW   rW   €   s   € à€JÜ‡G‚GŒG�OŠOÓÔØ	r   Úrsac                óÀ   • SSK Jn  SSKJn  U S   (       d  SU S'   UR	                  [        U S   5      SU" 5       S9n[        R                  " U5      n[        X@5        g )Nr   ©Údefault_backend)rl   r$   i   i  )Úkey_sizeÚpublic_exponentÚbackend)	Úcryptography.hazmat.backendsro   Ú)cryptography.hazmat.primitives.asymmetricrl   Úgenerate_private_keyÚintr
   ÚKeyÚ_saveKey)r^   ro   rl   ÚkeyPrimitiveÚkeys        r   ÚgenerateRSAkeyr{   ‡   sZ   € å<Ý=à�6�?Øˆ�‰Ø×+Ñ+Ü�W˜V‘_Ó%ØÙÓ!ð ,ð €Lô
 �(Š(�<Ó
 €CÜˆSÕr   Údsac                ó¾   • SSK Jn  SSKJn  U S   (       d  SU S'   UR	                  [        U S   5      U" 5       S9n[        R                  " U5      n[        X@5        g )Nr   rn   )r|   r$   i   )rp   rr   )	rs   ro   rt   r|   ru   rv   r
   rw   rx   )r^   ro   r|   ry   rz   s        r   ÚgenerateDSAkeyr~   —   sW   € å<Ý=à�6�?Øˆ�‰Ø×+Ñ+Ü�W˜V‘_Ó%ÙÓ!ð ,ð €Lô �(Š(�<Ó
 €CÜˆSÕr   Úecdsac                ó  • SSK Jn  SSKJn  U S   (       d  SU S'   S[	        U S   5      R                  S5      -   nUR                  [        R                  U   U" 5       S9n[        R                  " U5      n[        XP5        g )	Nr   rn   )Úecr$   é   s   ecdsa-sha2-nistpÚascii)Úcurverr   )rs   ro   rt   r�   ÚstrÚencoderu   r
   Ú_curveTablerw   rx   )r^   ro   r�   r„   ry   rz   s         r   ÚgenerateECDSAkeyrˆ   ¦   sx   € å<Ý<à�6�?Øˆ�‰ð  ¤# g¨f¡oÓ"6×"=Ñ"=¸gÓ"FÑF€EØ×*Ñ*Ü×Ñ˜uÑ%©Ó/@ð +ð €Lô �(Š(�<Ó
 €CÜˆSÕr   Úed25519c                ó‚   • [         R                  R                  5       n[         R                  " U5      n[	        X 5        g r   )r
   ÚEd25519PrivateKeyÚgeneraterw   rx   )r^   ry   rz   s      r   ÚgenerateEd25519keyr�   ·   s,   € ä×)Ñ)×2Ñ2Ó4€LÜ
�(Š(�<Ó
 €CÜˆSÕr   c                ó   • U S:X  a  gg)zÿ
Return a reasonable default private key subtype for a given key type.

@type keyType: L{str}
@param keyType: A key type, as returned by
    L{twisted.conch.ssh.keys.Key.type}.

@rtype: L{str}
@return: A private OpenSSH key subtype (C{'PEM'} or C{'v1'}).
ÚEd25519r>   r=   r   )r   s    r   Ú_defaultPrivateKeySubtyper�   ¾   s   € ð �)Óààr   c                ó$  • Uc  [         nU S   nU(       dq  [        R                  R                  SU 35      n[        R
                  " 5       S:X  a"  [        R                  R                  SU 35      nU" SU-  5      =(       d    Un[        U5      $ )zë
If C{options["filename"]} is None, prompt the user to enter a path
or attempt to set it to .ssh/id_rsa
@param options: command line options
@param inputCollector: dependency injection for testing
@param keyTypeName: key type or "rsa"
r&   z
~/.ssh/id_ÚWindowsz%HOMEPATH %\.ssh\id_z%Enter file in which the key is (%s): )ÚinputÚosÚpathÚ
expanduserÚplatformÚsystemr…   )r^   ÚinputCollectorÚkeyTypeNamer&   s       r   Ú_getKeyOrDefaultr›   Ð   s‰   € ð ÑÜˆØ�zÑ"€HÞÜ—7‘7×%Ñ%¨
°;°-Ð&@ÓAˆÜ�?Š?Ó 	Ó)Ü—w‘w×)Ñ)Ð-AÀ+ÀÐ*OÓPˆHáÐBÀXÑMÓN÷ Øð 	ô ˆx‹=Ðr   c           	     ó  • [        U 5      n[        R                  R                  US-   5      (       a  US-  n[	        U 5      n  [
        R                  R                  U5      n[        UR                  5       < SUR                  U S   5      < S[        R                  R                  U5      < 35        g ! [
        R                   a    [        R                  " S5         g [         a    [        R                  " U S35         g f = f)Nú.pubÚ r0   zbad keyú, could not be opened, please specify a file.)r›   r”   r•   Úexistsrf   r
   rw   ÚfromFilerS   Úsizer4   ÚbasenameÚBadKeyErrorrP   rU   ÚFileNotFoundError)r^   r&   rz   s      r   r[   r[   ê   sÎ   € Ü Ó(€HÜ	‡w�w‡~�~�h Ñ'×(Ñ(Ø�FÑˆÜ  Ó)€GðLÜ�h‰h×Ñ Ó)ˆÜð —‘–
Ø—‘ ¨Ñ 1Ö2Ü—‘× Ñ  Õ*ð	õ	
øô ×Ñó Ü�Š�ÖÜó LÜ�Š�H�:ÐIÐJÖKðLús   ÁA2B7 Â7*DÃ#"DÄDc                óº  • [        U 5      n [        R                  R                  U5      nU R                  S5      (       dD   [        R                  " S5      n[        R                  " S	5      nXE:X  a  O[        S
5        M?  X@S'   U R                  S5      c  [        WR                  5       5      U S'    WR                  SU S   U S   S9n [        R                  R!                  WU S   S9  [#        US5       nUR%                  W5        S S S 5        [        S5        g ! [        R                   a½    U R                  S5      (       d  [        R                  " S5      U S'    [        R                  R                  XS   S9n GN[! [        R                   a    [        R                  " S5          GN‰[        R                   a%  n[        R                  " SU 35         S nA GN¼S nAff = f[        R                   a$  n[        R                  " SU 35         S nAGNöS nAf[         a    [        R                  " U S35         GNf = f! [         a$  n[        R                  " SU 35         S nAGN¬S nAff = f! [        R                  [        R                  4 a$  n[        R                  " SU 35         S nAGNÕS nAff = f! , (       d  f       GNÆ= f)Nr.   zEnter old passphrase: ©Ú
passphrasez1Could not change passphrase: old passphrase errorzCould not change passphrase: rŸ   r,   z0Enter new passphrase (empty for no passphrase): úEnter same passphrase again: ú%Passphrases do not match.  Try again.r3   Úopenssh©Úsubtyper¨   Úwbz;Your identification has been saved with the new passphrase.)r›   r
   rw   r¡   ÚEncryptedKeyErrorÚgetÚgetpassr¤   rP   rU   r¥   rS   r�   r(   ÚtoStringÚ	ExceptionÚ
fromStringÚopenÚwrite)r^   r&   rz   ÚeÚp1Úp2Ú
newkeydataÚfds           r   r\   r\   ÿ   si  € Ü Ó(€HðLÜ�h‰h×Ñ Ó)ˆð  �;‰;�y×!Ñ!ØÜ—’Ð!SÓTˆBÜ—’Ð!@ÓAˆBØ‹xØÜÐ9Ô:ñ ð  �	Ñà‡{�{Ð(Ó)Ñ1Ü)BÀ3Ç8Á8Ã:Ó)NˆÐ%Ñ&ð6Ø—\‘\ØØÐ1Ñ2Ø˜yÑ)ð "ð 
ˆ
ð6Ü�‰×Ñ˜J°7¸9Ñ3EÐÑFô 
ˆh˜Ô	 Ø
�‰�Ô÷ 
ô 
Ð
GÕHøôY ×!Ñ!ó 	:à�{‰{˜6×"Ñ"Ü%ŸošoÐ.FÓGˆG�F‰Oð	:Ü—(‘(×#Ñ# HÀ¹Ð#ÐI‹CøÜ×Ñó 	JÜ�HŠHÐH×IÐIÜ×%Ñ%ó 	:Ü�HŠHÐ4°Q°CÐ8×9Ó9ûð	:úä×Ñó 6Ü�ŠÐ0°°Ð4×5Ò5ûÜó LÜ�Š�H�:ÐIÐJ×KðLûô* ó 6Ü�ŠÐ0°°Ð4×5Ò5ûð6ûô
 ×"Ñ"¤D×$4Ñ$4Ð5ó 6Ü�ŠÐ0°°Ð4×5Ò5ûð6ú÷ 
Ö	úsŠ   �D  Â5I Ã!J  Ã:KÄ AIÅ$ FÆ*G-Æ1IÆ5G-ÇG(Ç!IÇ(G-Ç-IÈH"È"&IÉIÉ
I=ÉI8É8I=Ê $KÊ$KËKË
Kc                óæ  • [        U 5      n [        R                  R                  U5      nWR                  5       R                  S5      R                  S5      n[        U5        g ! [         a    [
        R                  " U S35         N_[        R                   aR    U R                  S5      (       d  [        R                  " S5      U S'   [        R                  R                  XS   S9n NÃf = f)NrŸ   r.   zEnter passphrase: r§   r«   rƒ   )r›   r
   rw   r¡   r¥   rP   rU   r¯   r°   r±   Úpublicr²   ÚdecoderS   )r^   r&   rz   Ú
displayKeys       r   r]   r]   2  sÄ   € Ü Ó(€HðFÜ�h‰h×Ñ Ó)ˆð —‘“×&Ñ& yÓ1×8Ñ8¸ÓA€JÜ	ˆ*Õøô ó LÜ�Š�H�:ÐIÐJÖKÜ×!Ñ!ó FØ�{‰{˜6×"Ñ"Ü%ŸošoÐ.BÓCˆG�F‰OÜ�h‰h×Ñ ¸V±_ÐÐEŠðFús   �A& Á&#C0ÂA"C0Ã/C0c                ó   • [        U 5      $ )zj
Ask the user where to save the key.

This needs to be a separate function so the unit test can patch it.
)r“   )Úprompts    r   Ú_inputSaveFilerÂ   @  s   € ô �‹=Ðr   c                óî  • Uc  [         nSSSSS.nX0R                  5          nUS   nU(       d4  [        XU5      n[        SU S	35      nUR	                  5       =(       d    Un[
        R                  R                  U5      (       aB  [        U S
35        U" S5      nUS   R                  5       S:w  a  [        R                  " 5         UR                  S5      (       a  SUS'   ONUS   (       dD   [        R                  " S5      n	[        R                  " S5      n
Xš:X  a  O[        S5        M?  X‘S'   UR                  S5      c  [        U R                  5       5      US'   [        R                  " 5        S[         R"                  " 5        3n[$        R&                  " U5      nUR)                  U R+                  SUS   US   S95        UR-                  S5        [$        R&                  " US-   5      R)                  U R/                  5       R+                  SUS95        [1        U5      n[        SU 35        [        SU S35        [        SUS    S35        [        U R3                  US   5      5        g) z¬
Persist a SSH key on local filesystem.

@param key: Key which is persisted on local filesystem.

@param options:

@param inputCollector: Dependency injection for testing.
Nr   r‰   rl   r|   )ÚECr�   ÚRSAÚDSAr&   z%Enter file in which to save the key (z): z already exists.zOverwrite (y/n)? r   r<   r:   r   r.   z,Enter passphrase (empty for no passphrase): r©   rª   r3   Ú@r«   r¬   i€�  r�   )r*   z&Your identification has been saved in z"Your public key has been saved in zThe key fingerprint in r0   z is:)r“   r(   r›   rÂ   Ústripr”   r•   r    rS   rY   rP   rU   r°   r±   r�   ÚgetuserÚsocketÚgethostnamer   ÚFilePathÚ
setContentr²   Úchmodr½   rf   r4   )rz   r^   r™   ÚKeyTypeMappingrš   r&   ÚdefaultPathÚnewPathÚynr¸   r¹   r*   Úfps                r   rx   rx   I  s>  € ð ÑÜˆØ#°	À%ÐPUÑV€NØ §¡£Ñ,€KØ�zÑ"€HÞÜ& wÀÓLˆÜ Ø3°K°=ÀÐDó
ˆð —=‘=“?×1 kˆä	‡w�w‡~�~�h×ÑÜ��
Ð*Ð+Ô,ÙÐ/Ó0ˆØˆa‰5�;‰;‹=˜CÓÜ�HŠHŒJà‡{�{�?×#Ñ#Øˆ�ŠØ�V�_ØÜ—’Ð!OÓPˆBÜ—’Ð!@ÓAˆBØ‹xØÜÐ9Ô:ñ ð �‰à‡{�{Ð(Ó)Ñ1Ü)BÀ3Ç8Á8Ã:Ó)NˆÐ%Ñ&ä—’Ó"Ð# 1¤V×%7Ò%7Ó%9Ð$:Ð;€Gä	×	Ò	˜8Ó	$€BØ‡M�MØ�‰ØØÐ1Ñ2Ø˜v‘ð 	ð 	
ôð ‡H�HˆXÔä×Ò�h Ñ'Ó(×3Ñ3Ø�
‰
‹×Ñ˜i°ÐÐ9ôô ! Ó)€Gä	Ð2°8°*Ð
=Ô>Ü	Ð.¨x¨j¸Ð
=Ô>Ü	Ð# G¨HÑ$5Ð#6°dÐ
;Ô<Ü	ˆ#�/‰/˜' (Ñ+Ó
,Õ-r   Ú__main__)Nrl   )r^   úDict[Any, Any]r™   úOptional[Callable[[str], str]]rš   r…   Úreturnr…   )r^   rÕ   r×   ÚNone)rÁ   r…   r×   r…   r   )rz   zkeys.Keyr^   rÕ   r™   rÖ   r×   rØ   )4Ú__doc__Ú
__future__r   r±   r”   r—   rÊ   rP   Úcollections.abcr   Ú	functoolsr   Ú	importlibr   Útypingr   r   r	   Útwisted.conch.sshr
   Útwisted.pythonr   r   r   r   Úunix_getpassr   Ú	tcgetattrÚ	tcsetattrÚImportErrorÚAttributeErrorÚmodulesÚdictr   r    ÚOptionsr"   r`   rf   rW   r{   r~   rˆ   r�   r�   r›   r[   r\   r]   rÂ   rx   r@   r   r   r   Ú<module>ré      s¸  ðñ
õ #ã Û 	Û Û Û 
Ý $Ý Ý ß &Ñ &å "ß 8Ó 8à
‡?�?�g×*Ñ*Ó*ðÛà×Ñ˜7×,Ñ,Ñ,ñ
 “FÐ ò	ô#�U—]‘]ô #òLò<

ò
ñ ˆuÓñó ðñ ˆuÓñó ðñ ˆwÓñó ðñ  ˆyÓñó ðòð( 6:ØðØðà2ðð ðð 	õ	ô4Lò*0Iòfôð 6:ðC.Ø	ðC.àðC.ð 3ðC.ð 
õ	C.ðL ˆzÓÙ…Eð øðg ˜Ð(ó Ø!%ˆ�‰�IÑÙˆwŽðús   Á&D# Ä#EÅE