Ϫf0~dZddlmZddlZddlZddlZddlZddlZddlm Z ddl m Z ddl m Z ddlmZmZmZddlmZdd lmZmZmZmZejej2k(r ddlZej6ej8fe Z!d Z"Gd d ejFZ$dZ%dZ&dZ'e"ddZ(e"ddZ)e"ddZ*e"ddZ+dZ, d! d"dZ-d#dZ.dZ/dZ0d$dZ1 d% d&dZ2e3d k(re%yy#eef$rdej>d <e eYwxYw)'z2 Implementation module for the `ckeygen` command. ) annotationsN)Callable)wraps)reload)AnyDictOptional)keys)failurefilepathlogusagetermioscfd}|S)NcBtfd}|t<|S)Nc|i|SN)argskwargs keygenerators ?/usr/lib/python3/dist-packages/twisted/conch/scripts/ckeygen.pywrapperz:_keyGenerator..assignkeygenerator..wrapper%s00 0)rsupportedKeyTypes)rrkeyTypes` rassignkeygeneratorz)_keyGenerator..assignkeygenerator$s, |  1  1&-'"rr)rrs` r _keyGeneratorr#s rc eZdZdZdZgdgdgdgdgdgdgd gd gZgd gd gd gdgdgZejeje e jejddgdZ y)GeneralOptionszUsage: ckeygen [options] z8ckeygen manipulates public/private keys in various ways.)bitsbNz$Number of bits in the key to create.)filenamefNzFilename of the key file.)typetNzSpecify type of key to create.)commentCNzProvide new comment.)newpassNNzProvide new passphrase.)passPNzProvide old passphrase.)formato sha256-base64zFingerprint format of key file.)private-key-subtypeNNz5OpenSSH private key subtype to write ("PEM" or "v1").) fingerprintlzShow fingerprint of key file.) changepasspz&Change passphrase of private key file.)quietqzQuiet.) no-passphraseNz"Create the key with no passphrase.)showpubyz+Read private key file and print public key.PEMv1)r%r0) optActionsN)__name__ __module__ __qualname__synopsislongdesc optParametersoptFlagsr Completions CompleteListlistrr compDatarrrr r /sHJH D<=696K M" >E EG H!u  &E&&t,=,B,B,D'EF#55#5#5udm#D Hrr c t} |jtjddtjtt_ |dr|djtvr1t d|dzt|dj|ytjd|dddjtj!y|dr t#|y|d r t%|y|d r t'|y|jtjdy#tj $r>}t d|z|jtjdYd}~Wd}~wwxYw) Nz ERROR: %sr%z&Generating public/private %s key pair.z Key type was z, must be one of z, r1r3r8)r parseOptionssysargvr UsageErrorprintopt_helpexitr discardLogs handleErrordeferrlowerrjoinr printFingerprintchangePassPhrasedisplayPublicKey)optionsus rrunr[Us7GSXXab\* OOCJv 6? "&7 7 :gfoN O gfo335 6w ? HH6?DII.?.D.D.F$GI   !  !  !  /    kAo  s"D99F  3FF c|ddk(rtjj|d<|S|ddk(rtjj|d<|Stjd|d)Nr-zmd5-hexr/z Unsupported fingerprint format: )r FingerprintFormatsMD5_HEX SHA256_BASE64BadFingerPrintFormat)rYs renumrepresentationrassuxI% 33;;  o - 33AA''.wx/@.A B  rcVdatjtj)N) exitStatusr errr FailurerrrrRrRsJGGGOO  rrsacddlm}ddlm}|dsd|d<|j t |dd|}t j|}t||y)Nrdefault_backend)rgr!ii)key_sizepublic_exponentbackend) cryptography.hazmat.backendsrj)cryptography.hazmat.primitives.asymmetricrggenerate_private_keyintr Key_saveKey)rYrjrg keyPrimitivekeys rgenerateRSAkeyrvs\<= 6?++WV_%!,L ((< C S'rdsacddlm}ddlm}|dsd|d<|j t |d|}t j|}t||y)Nrri)rwr!i)rkrm) rnrjrorwrprqr rrrs)rYrjrwrtrus rgenerateDSAkeyrysY<= 6?++WV_%!,L ((< C S'recdsacddlm}ddlm}|dsd|d<dt |dj dz}|j tj||}tj|}t||y) Nrri)ecr!secdsa-sha2-nistpascii)curverm) rnrjror|strencoderpr _curveTablerrrs)rYrjr|rrtrus rgenerateECDSAkeyrsz<< 6? #gfo"6"="=g"F FE**u%/@+L ((< C S'red25519ctjj}tj|}t ||yr)r Ed25519PrivateKeygeneraterrrs)rYrtrus rgenerateEd25519keyrs.))224L ((< C S'rc|dk(ryy)a 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)rs r_defaultPrivateKeySubtypers)rc |t}|d}|sjtjjd|}t j dk(r"tjjd|}|d|zxs|}t |S)a 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): )inputospath expanduserplatformsystemr)rYinputCollector keyTypeNamer#s r_getKeyOrDefaultrsz"H 77%% ;-&@A ??  )ww))-A+*OPH BXM N   x=rc t|}tjj|dzr|dz }t |} t j j|}t|jd|j|ddtjj|y#t j$rtjdYyt$rtj|dYywxYw)N.pub r-zbad key, could not be opened, please specify a file.)rrrexistsrar rrfromFilerNsizer1basename BadKeyErrorrKrPFileNotFoundError)rYr#rus rrVrVs(H ww~~h'(F )G Lhh)   12  *        L H:IJKLsA/B//(C< C<;C<ct|} tjj|}|j dsB t j d}t j d }||k(rn td <||d<|j d tj|d < jd |d |d } tjj!|dt#|d5}|j%dddtdy#tj$r|j dst j d|d< tjj||d}na#tj$rtjdYn7tj$r"}tjd|Yd}~nd}~wwxYwYtj$r#}tjd|Yd}~d}~wt$rtj|dYwxYw#t$r#}tjd|Yd}~d}~wwxYw#tjtjf$r#}tjd|Yd}~d}~wwxYw#1swYxYw)Nr+zEnter old passphrase:  passphrasez1Could not change passphrase: old passphrase errorzCould not change passphrase: rr)z0Enter new passphrase (empty for no passphrase): Enter same passphrase again: %Passphrases do not match. Try again.r0opensshsubtyperwbz;Your identification has been saved with the new passphrase.)rr rrrEncryptedKeyErrorgetgetpassrrKrPrrNrr%toString Exception fromStringopenwrite)rYr#ruep1p2 newkeydatafds rrWrWsm(HLhh) ;;y !!STB!@ABRx 9 :    {{()1)B388:)N%&6\\ 12y)" 6 J793EF h   GHY  ! ! :{{6"%oo.FGGFO :((##H#IC J HHH I%% : HH4QC8 9 9 :   6 0455 L H:IJKL* 6 04556  " "D$4$4 56 04556sD-H?$I.8J7 .xj => #GH$5#6d ;< #//'(+ ,-r__main__)Nrg)rYDict[Any, Any]rOptional[Callable[[str], str]]rrreturnr)rYrrNone)rrrrr)ruzkeys.KeyrYrrrrr)4__doc__ __future__rrrrrrKcollections.abcr functoolsr importlibrtypingrrr twisted.conch.sshr twisted.pythonr r r r unix_getpassr tcgetattr tcsetattr ImportErrorAttributeErrormodulesdictrrOptionsr r[rarRrvryrrrrrVrWrXrrsr=rrrrs #  $&&"88 ??g***7,,, F #U]]#L<   u  u  w   y (6: 2 4L*0If 6:C. C. C.3C. C.L zEg  (!% Iws%DD<;D<