+
    üÐj•0  ã                  ó€  € R t ^ RIHt ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIH	t	 ^ RI
Ht ^ RIHt ^ RIHtHtHt ^ RIHt ^ RIHtHtHtHt ]P                  ]P2                  8X  d    ^ RIt]P6                  ]P8                  3 ] ! 4       t!R
 t" ! R R]PF                  4      t$R t%R t&R t']"! R4      R 4       t(]"! R4      R 4       t)]"! R4      R 4       t*]"! R4      R 4       t+R t,R$R R llt-R R lt.R t/R t0R R  lt1R%R! R" llt2]3R#8X  d
   ]%! 4        R# R#   ]]3 d    R]P>                  R	&   ]! ]4        L¹i ; i)&z2
Implementation module for the `ckeygen` command.
)ÚannotationsN)ÚCallable)Úwraps)Úreload)ÚAnyÚDictÚOptional)Úkeys)ÚfailureÚfilepathÚlogÚusageÚtermiosc                ó   a € V 3R  lpV# )c                óD   <a € \        S 4      V 3R  l4       pV\        S&   V# )c                 ó   <€ S! V / VB # ©N© )ÚargsÚkwargsÚkeygenerators   *,€Ú?/usr/lib/python3/dist-packages/twisted/conch/scripts/ckeygen.pyÚwrapperÚ:_keyGenerator.<locals>.assignkeygenerator.<locals>.wrapper%   s   ø€ á Ð0¨Ñ0Ð0ó    )r   ÚsupportedKeyTypes)r   r   ÚkeyTypes   f €r   ÚassignkeygeneratorÚ)_keyGenerator.<locals>.assignkeygenerator$   s,   ù€ Ü	ˆ|Ó	ô	1ó 
ð	1ð &-Ô˜'Ñ"Øˆr   r   )r   r   s   f r   Ú_keyGeneratorr   #   s   ø€ õð Ðr   c            	      ó  € ] tR t^/tRtRt. R
O. RO. RO. RO. RO. RO. RO. RO.t. RO. RO. RO. RO. RO.t]P                  ! R]P                  ! ]! ]P                  4       4      4      R]P                  ! RR.4      /R7      tR	tR# )ÚGeneralOptionszUsage:    ckeygen [options]
 z8ckeygen manipulates public/private keys in various ways.NÚtypeúprivate-key-subtypeÚPEMÚv1)Ú
optActionsr   )ÚbitsÚbNz$Number of bits in the key to create.)ÚfilenameÚfNzFilename of the key file.)r"   Ú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.)r#   NNz5OpenSSH 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.)Ú__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ð × Ò à�E×&Ò&¡tÐ,=×,BÑ,BÓ,DÓ'EÓFØ! 5×#5Ò#5°u¸d°mÓ#Dð
ô„Hr   r!   c            	     óÎ  € \        4       p  V P                  \        P                  R ,          4       \        P                  ! 4        \        \        n        V R,          '       d¬   V R,          P                  4       \        9   dD   \        RV R,          ,          4       \        V R,          P                  4       ,          ! V 4       R# \        P                  ! RV R,          : RRP                  \        P!                  4       4      : 24       R# V R,          '       d   \#        V 4       R# V R	,          '       d   \%        V 4       R# V R
,          '       d   \'        V 4       R# V P                  4        \        P                  ! ^4       R#   \        P
                   dD   p\        RT,          4       T P                  4        \        P                  ! ^4        Rp?EL­Rp?ii ; i):é   NNz	ERROR: %sNr"   z&Generating public/private %s key pair.zKey type was z, must be one of z, r5   r7   r<   )r!   ÚparseOptionsÚsysÚargvr   Ú
UsageErrorÚprintÚopt_helpÚexitr   ÚdiscardLogsÚhandleErrorÚdeferrÚlowerr   Újoinr	   ÚprintFingerprintÚchangePassPhraseÚdisplayPublicKey)ÚoptionsÚus     r   Úrunr^   U   sB  € ÜÓ€GðØ×ÑœSŸX™X 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   Œ&F ÆG$Æ!8GÇG$c                óö   € V R ,          R8X  d    \         P                  P                  V R &   V # V R ,          R8X  d    \         P                  P                  V R &   V # \         P                  ! RV R ,           24      h)r2   zmd5-hexr4   z Unsupported fingerprint format: )r	   ÚFingerprintFormatsÚMD5_HEXÚSHA256_BASE64ÚBadFingerPrintFormat)r\   s   &r   Úenumrepresentationrd   s   su   € ØˆxÕ˜IÔ%Ü ×3Ñ3×;Ñ;ˆ�ÑØˆØ	�Õ	˜oÔ	-Ü ×3Ñ3×AÑAˆ�ÑØˆä×'Ò'Ø.¨w°xÕ/@Ð.AÐBó
ð 	
r   c                 óZ   € ^s \        P                  ! \        P                  ! 4       4       h )é   )Ú
exitStatusr   Úerrr
   ÚFailurer   r   r   rU   rU   €   s   € à€JÜ‡G‚GŒG�OŠOÓÔØ	r   Úrsac                óÚ   € ^ RI Hp ^ RIHp V R,          '       g   RV R&   VP	                  \        V R,          4      RV! 4       R7      p\        P                  ! V4      p\        W@4       R# )é    ©Údefault_backend)rj   r'   i   i  )Úkey_sizeÚpublic_exponentÚbackendN)	Úcryptography.hazmat.backendsrn   Ú)cryptography.hazmat.primitives.asymmetricrj   Úgenerate_private_keyÚintr	   ÚKeyÚ_saveKey)r\   rn   rj   ÚkeyPrimitiveÚkeys   &    r   ÚgenerateRSAkeyrz   ‡   s\   € å<Ý=à�6�?Œ?Øˆ�‰Ø×+Ñ+Ü�W˜V•_Ó%ØÙÓ!ð ,ó €Lô
 �(Š(�<Ó
 €CÜˆSÖr   Údsac                óØ   € ^ RI Hp ^ RIHp V R,          '       g   RV R&   VP	                  \        V R,          4      V! 4       R7      p\        P                  ! V4      p\        W@4       R# )rl   rm   )r{   r'   i   )ro   rq   N)	rr   rn   rs   r{   rt   ru   r	   rv   rw   )r\   rn   r{   rx   ry   s   &    r   ÚgenerateDSAkeyr}   —   sY   € å<Ý=à�6�?Œ?Øˆ�‰Ø×+Ñ+Ü�W˜V•_Ó%ÙÓ!ð ,ó €Lô �(Š(�<Ó
 €CÜˆSÖr   Úecdsac                ó2  € ^ RI Hp ^ RIHp V R,          '       g   RV R&   R\	        V R,          4      P                  R4      ,           pVP                  \        P                  V,          V! 4       R7      p\        P                  ! V4      p\        WP4       R# )	rl   rm   )Úecr'   é   s   ecdsa-sha2-nistpÚascii)Úcurverq   N)rr   rn   rs   r€   ÚstrÚencodert   r	   Ú_curveTablerv   rw   )r\   rn   r€   rƒ   rx   ry   s   &     r   ÚgenerateECDSAkeyr‡   ¦   sz   € å<Ý<à�6�?Œ?Øˆ�‰ð  ¤# g¨f¥oÓ"6×"=Ñ"=¸gÓ"FÕF€EØ×*Ñ*Ü×Ñ˜uÕ%©Ó/@ð +ó €Lô �(Š(�<Ó
 €CÜˆSÖr   Úed25519c                ó„   € \         P                  P                  4       p\         P                  ! V4      p\	        W 4       R # r   )r	   ÚEd25519PrivateKeyÚgeneraterv   rw   )r\   rx   ry   s   &  r   ÚgenerateEd25519keyrŒ   ·   s,   € ä×)Ñ)×2Ñ2Ó4€LÜ
�(Š(�<Ó
 €CÜˆSÖr   c                ó   € V R8X  d   R# R# )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               ó(   € V ^8„  d   QhRRRRRRRR/# )rf   r\   úDict[Any, Any]ÚinputCollectorúOptional[Callable[[str], str]]ÚkeyTypeNamer„   Úreturnr   )r2   s   "r   Ú__annotate__r–   Ð   s0   € ÷ ñ Øðà2ðð ðð 	ñ	r   c                ó<  € Vf   \         pV R,          pV'       gx   \        P                  P                  RV 24      p\        P
                  ! 4       R8X  d#   \        P                  P                  RV 24      pV! RV,          4      ;'       g    Tp\        V4      # )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\   r’   r”   r)   s   &&& r   Ú_getKeyOrDefaultrŸ   Ð   sŽ   € ð ÒÜˆØ�zÕ"€HßÜ—7‘7×%Ñ%¨
°;°-Ð&@ÓAˆÜ�?Š?Ó 	Ô)Ü—w‘w×)Ñ)Ð-AÀ+ÀÐ*OÓPˆHáÐBÀXÕMÓN÷ ð Øð 	ô ˆx‹=Ðr   c               ó    € V ^8„  d   QhRRRR/# )rf   r\   r‘   r•   ÚNoner   )r2   s   "r   r–   r–   ê   s   € ÷ Lñ L˜nð L°ñ Lr   c           	     ó:  € \        V 4      p\        P                  P                  VR ,           4      '       d
   VR ,          p\	        V 4      p  \
        P                  P                  V4      p\        VP                  4       : RVP                  V R,          4      : R\        P                  P                  V4      : 24       R#   \
        P                   d    \        P                  ! R4        R# \         d    \        P                  ! T R24        R# i ; i)ú.pubÚ r2   zbad keyú, could not be opened, please specify a file.N)rŸ   rš   r›   Úexistsrd   r	   rv   ÚfromFilerQ   Úsizer5   ÚbasenameÚBadKeyErrorrN   rS   ÚFileNotFoundError)r\   r)   ry   s   &  r   rY   rY   ê   sÎ   € Ü Ó(€HÜ	‡w�w‡~�~�h Õ'×(Ò(Ø�FÕˆÜ  Ó)€GðLÜ�h‰h×Ñ Ó)ˆÜð —‘–
Ø—‘ ¨Õ 1Ö2Ü—‘× Ñ  Õ*ð	ö	
øô ×Ñô Ü�Š�×Üô LÜ�Š�H�:ÐIÐJ×KðLús   ÁA6C Ã+DÃ3DÃ<DÄDc                ó  € \        V 4      p \        P                  P                  V4      pT P                  R4      '       gF    \        P                  ! R4      p\        P                  ! R	4      pYE8X  d   M\        R
4       KA  Y@R&   T P                  R4      f   \        XP                  4       4      T R&    XP                  RT R,          T R,          R7      p \        P                  P!                  XT R,          R7       \#        TR4      ;_uu_ 4       pTP%                  X4       RRR4       \        R4       R#   \        P                   dÈ    T P                  R 4      '       g   \        P                  ! R4      T R &    \        P                  P                  YR ,          R7      p EL‚  \        P                   d    \        P                  ! R4         EL±\        P                   d&   p\        P                  ! RT 24        Rp? ELåRp?ii ; i\        P                   d%   p\        P                  ! RT 24        Rp?EL Rp?i\         d    \        P                  ! T R24        ELJi ; i  \         d%   p\        P                  ! RT 24        Rp?ELÊRp?ii ; i  \        P                  \        P                  3 d%   p\        P                  ! RT 24        Rp?ELíRp?ii ; i  + '       g   i     ELØ; i)r0   zEnter old passphrase: ©Ú
passphrasez1Could not change passphrase: old passphrase errorzCould not change passphrase: Nr¥   r.   z0Enter new passphrase (empty for no passphrase): úEnter same passphrase again: ú%Passphrases do not match.  Try again.r#   Úopenssh©Úsubtyper®   Úwbz;Your identification has been saved with the new passphrase.)rŸ   r	   rv   r§   ÚEncryptedKeyErrorÚgetÚgetpassrª   rN   rS   r«   rQ   r�   r"   ÚtoStringÚ	ExceptionÚ
fromStringÚopenÚwrite)r\   r)   ry   ÚeÚp1Úp2Ú
newkeydataÚfds   &       r   rZ   rZ   ÿ   sh  € Ü Ó(€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> Â8"I: Ã(J, ÄK8Ä>+I7Å*I7Æ'F.Æ.+HÇI7ÇHÇ0HÇ1HÈ
I7ÈHÈI7È,I7È-IÉI7ÉI7É6I7É:J)ÊJ$Ê$J)Ê,%K5ËK0Ë0K5Ë8L		c                óü  € \        V 4      p \        P                  P                  V4      pXP                  4       P                  R4      P                  R4      p\        V4       R#   \         d    \
        P                  ! T R 24        La\        P                   d[    T P                  R4      '       g   \        P                  ! R4      T R&   \        P                  P                  YR,          R7      p LÎi ; i)r¥   r0   zEnter passphrase: r­   r±   r‚   N)rŸ   r	   rv   r§   r«   rN   rS   rµ   r¶   r·   Úpublicr¸   ÚdecoderQ   )r\   r)   ry   Ú
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' Á'$C;ÂC;Â C;Â8A C;Ã:C;c               ó    € V ^8„  d   QhRRRR/# )rf   Úpromptr„   r•   r   )r2   s   "r   r–   r–   @  s   € ÷ ñ ˜3ð  3ñ r   c                ó   € \        V 4      # )zj
Ask the user where to save the key.

This needs to be a separate function so the unit test can patch it.
)r™   )rÇ   s   &r   Ú_inputSaveFilerÉ   @  s   € ô �‹=Ðr   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	rf   ry   zkeys.Keyr\   r‘   r’   r“   r•   r¡   r   )r2   s   "r   r–   r–   I  s6   € ÷ C.ñ C.Ø	ðC.àðC.ð 3ðC.ð 
ñ	C.r   c                ó\  € Vf   \         pRRRRRRRR	/pW0P                  4       ,          pVR
,          pV'       g6   \        WV4      p\        RV R24      pVP	                  4       ;'       g    Tp\
        P                  P                  V4      '       dH   \        V R24       V! R4      pV^ ,          P                  4       R8w  d   \        P                  ! 4        VP                  R4      '       d   RVR&   MTVR,          '       gF    \        P                  ! R4      p	\        P                  ! R4      p
Wš8X  d   M\        R4       KA  W‘R&   VP                  R4      f   \        V P                  4       4      VR&   \        P                  ! 4        R\         P"                  ! 4        2p\$        P&                  ! V4      pVP)                  V P+                  RVR,          VR,          R7      4       VP-                  R4       \$        P&                  ! VR,           4      P)                  V P/                  4       P+                  RVR7      4       \1        V4      p\        RV 24       \        RV R24       \        RVR ,           R!24       \        V P3                  VR ,          4      4       R# )"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.
NÚECr~   rŽ   rˆ   ÚRSArj   ÚDSAr{   r)   z%Enter file in which to save the key (z): z already exists.zOverwrite (y/n)? r=   r;   r   r0   z,Enter passphrase (empty for no passphrase): r¯   r°   r#   Ú@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 r2   z is:)r™   r"   rŸ   rÉ   Ústriprš   r›   r¦   rQ   rW   rN   rS   r¶   r·   r�   ÚgetuserÚsocketÚgethostnamer   ÚFilePathÚ
setContentr¸   ÚchmodrÃ   rd   r5   )ry   r\   r’   ÚKeyTypeMappingr”   r)   ÚdefaultPathÚnewPathÚynr¾   r¿   r,   Úfps   &&&          r   rw   rw   I  sD  € ð ÒÜˆØ˜G Y°	¸5À%ÈÐPUÐV€NØ §¡£Õ,€KØ�zÕ"€HßÜ& wÀÓLˆÜ Ø3°K°=ÀÐDó
ˆð —=‘=“?×1Ð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__)Nrj   r   )4Ú__doc__Ú
__future__r   r·   rš   r�   rÒ   rN   Ú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^   rd   rU   rz   r}   r‡   rŒ   r�   rŸ   rY   rZ   r[   rÉ   rw   r>   r   r   r   Ú<module>rí      s_  ðñ
õ #ã Û 	Û Û Û 
Ý $Ý Ý ß &Ñ &å "ß 8Ó 8à
‡?�?�g×*Ñ*Ô*ðÛà×Ñ˜7×,Ñ,Ñ,ñ
 “FÐ ò	ô#�U—]‘]ô #òLò<

ò
ñ ˆuÓñó ðñ ˆuÓñó ðñ ˆwÓñó ðñ  ˆyÓñó ðò÷$õ4Lò*0Iòfõ÷C.ðL ˆzÔÙ†Eñ øðg ˜Ð(ô Ø!%ˆ�‰�IÑÙˆwŽðús   Á'D Ä D=Ä<D=