From f14606669ed85d89eec5ff9784fc9dfa65d453a6 Mon Sep 17 00:00:00 2001 From: MMGen Date: Wed, 16 May 2018 15:35:23 +0000 Subject: [PATCH] Ethereum wallet passwords - A password is now generated for each privkey in Ethereum key-address list - As with Monero wallet passwords (df03851), password is first 16 bytes of SHA256x2(privkey) - Password can be used with geth's private.importRawKey() method to create a relatively secure online wallet. Unlock using private.unlockAccount() --- mmgen/addr.py | 4 ++++ mmgen/obj.py | 2 ++ ...ETH[1,31-33,500-501,1010-1011].akeys.mmenc | Bin 1607 -> 2087 bytes ...ETC[1,31-33,500-501,1010-1011].akeys.mmenc | Bin 1607 -> 2087 bytes test/test.py | 4 ++-- 5 files changed, 8 insertions(+), 2 deletions(-) diff --git a/mmgen/addr.py b/mmgen/addr.py index 566502ed..06d4e8c4 100755 --- a/mmgen/addr.py +++ b/mmgen/addr.py @@ -85,6 +85,10 @@ class AddrGeneratorEthereum(AddrGenerator): import sha3 return CoinAddr(sha3.keccak_256(pubhex[2:].decode('hex')).digest()[12:].encode('hex')) + def to_wallet_passwd(self,sk_hex): + from mmgen.protocol import hash256 + return WalletPassword(hash256(sk_hex)[:32]) + def to_segwit_redeem_script(self,pubhex): raise NotImplementedError,'Segwit redeem script not supported by this address type' diff --git a/mmgen/obj.py b/mmgen/obj.py index c14ff297..772c9ab4 100755 --- a/mmgen/obj.py +++ b/mmgen/obj.py @@ -739,6 +739,8 @@ class MMGenAddrType(str,Hilite,InitErrors,MMGenObject): 'compressed':False, 'gen_method':'ethereum', 'addr_fmt':'ethereum', + 'wif_label':'privkey:', + 'extra_attrs': ('wallet_passwd',), 'desc':'Ethereum address' }, 'Z': { 'name':'zcash_z', 'pubkey_type':'zcash_z', diff --git a/test/ref/ethereum/98831F3A-ETH[1,31-33,500-501,1010-1011].akeys.mmenc b/test/ref/ethereum/98831F3A-ETH[1,31-33,500-501,1010-1011].akeys.mmenc index 62a6a5ae623d0238006e8d6c7940a76e8e115f35..a179f2dd0c798ad51f8c6f5d52cd591b77f55d9a 100644 GIT binary patch literal 2087 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 Fm9asiA|3z$ diff --git a/test/ref/ethereum_classic/98831F3A-ETC[1,31-33,500-501,1010-1011].akeys.mmenc b/test/ref/ethereum_classic/98831F3A-ETC[1,31-33,500-501,1010-1011].akeys.mmenc index cd07f6d42ad50bd78c56fdab01d3ce00a01d26c1..a969e5d9ebace8db67e96da269183ecb10ff6006 100644 GIT binary patch literal 2087 zcmV+?2-x@Ke`NFNI2Y&6@!en-iBws|9q1li)~9YKejwXZS+}?sdn|ga#c8;RuIDXf z36E&|-c--u`xnveTeccFfVt>?n^XAk*}7#`WKE_>)o3TxY@8L*V{ ztKPYc6z~i_1lY60n4IXdB(M>Gr!QUthvN&Qb%ZM%E~sG!*0$IR+Pvi<&x}8GL}!MP zxxuEpIx2E#Z`>w0?+O`VlcyvwDz1Pf&XQ1^y7q0jvy$%&>a@Mf+ihQZsny$zP4LD4 zBl!<5`iicwkEG;+Y+~UYxxzsi__uR4jANz()j)g}s9lo;qE!*P_MAJ`=R?esT3vlJ zZ~n8o6?uH@tdNAQ@8YL)eeniQDaH~tKaKz)*)O}P zJ!#V^hF=l4C33LnS~ukx&9*3}k9dsuCoY6vFr}Mu*5L{1TBEQ~QP0Jwef;CbyV%Kb zj1o0PFpA2SXtQ%Vl9?J_dCUgFR1BZEt%*d4cy8W;xKN-=eX8mqUVh0B9a8w4DN1Bf zQM-|O00)RAL8iU#_(4=V2AuG?js3N-N_hjW5GZu>=>`}eCPJ~QM61awlcnn8h) z^5Vm#9tWDwYIuhp_;9-LhV1&*vw+#PI znSd3i4lkI-AZ^^JZ`zljiE#?6 z;hM$gMKc4b>%#4|Vg*Y%?`48JIh9C#M}pqH?`o)4xrEM)1s?Mb*ejh=|CIUqZXSEo z-|I>-j3E!E2Lu%cqeOQ%=EB!8F@$?@yEu*{c>L=G=9l{{`r;Kzob0ztL`nauIx>vtMwiArdvXA7am`H20Z)pt11l`4^Bn9tk7~b;fIk=wvq-Z zR5Em|hNWc={EAPg7F*DK&=CCRLA;k?s2@A_!W1Dth{q5Vj{TJ*U_p~-)XBU(8(X_& ze$#~B0P1kPfOT9}Z(xnphqUxY222K*2L?>W(k~FA$POP7L^6q>x)Wi2_`a}x}hyVth(1)Bpbpk7dLKk#kyxyz9_qbQRh z3Q2KnFL(j7NOs$(V=Mdm$&T|V>_Uw(2u-FjA)@WMiy_JQi^HsHxfp=@;0_(#z|UjL zH~vzsM&)yix(gr+frsR8uo_0U@?mth)Riq|QZHeSmdzDf0OLDtPm-lUX?Un7CFoCe zttuexmhuk;V8S}s;x!l`*|*6 z;|8YH?P72ZiRjdi(MdN~o_1eaf3#nU0Ho|I!pzMzORt9t3zp!9LKCVrQZ&D{{kWv_ zvXd8gH17WTLSOkCGmWp`L#(_brEM7>`1rbefcf@2p){}h#vB|xnpRHK%wHRVc%Y)W zb@jvX zDcMkL8uS_yiZ$xC^z6eDfcgm51HY?gvvMf8FmPpWo9{m4dj(ASk%NTvH;%9Xza{iy7meoQtie@g|A*U{>djLv< z&rml$)bvH9IQ}NYsCvT|EYp?0bSFp2h^-z@(ru<~w==YB5y*i1qq!aru8A#C7!_0^ z*y1WMTrP%L%Nsir%yVU74(?+0I>X6Aw;FsT305|jDN!-x=rw#>je+6eBi40TEouf6 zD*ZR`9>f62u`ppMm8*WZN+LYG#E~IsG6sPrACl=#`Ack0c*db;^nzzTJ=EU~{>d&U zs}G#2J&|kf$9s6U0{E;I^U91SEoRH!wQBrLqHE84m4xFIc#GJ%8X=>EHC~byZ$Z}( Rh@OiVxR7E9`vx5#6lxM}B3S?c literal 1607 zcmV-N2Dtgp8;*0o9u<+j~*Jb%Ym!wDu z0!MTXPu=AJ+F5CFPY}pipl@~$fo!!%f=utZ2zyp@m9M3cL8mSsSLyC{W_%*SPE20&c@{0>^Hg3Li+D};C}2doad;2z%6*{P~ zJbJh)@$kaQ)MG9@VBx8!AM}gCV+x*Jbtatdg^u>MBIq=lcHn{>B<;8qHz?(6MjlH5KtB)izb_wzL$sG<#@2^cb@#}d#E4?mpl%HKn zElFO*6D3&D5?;(Z>RoSecZ#0{kw3>0s-YycWVeL#g3A_kob9}zH2P!-Ud8n8- zey!Z}CIP2SbLK%?ug+CykB<%`>Zrk?#(~osm~-9n8>*a>Un~P^Qh>40H|rFTC;1hR zxZ;2j;AKS#o~}p^d??!kwXRCk=})Vsc|Kf88; z>I`)l|ALijm?KD{qO_CUlCVuIBCr$btGJL*3FMvRz&E&>v06VfQFTN!t3NPc_#il7 zi0{yo%oieyfj|;HO{IWJG{3ugBn5beV@WJ4vW23pb?wc;gF-=(c&wY?XkQP*muL#o zWB2tiHUA;g^Dj-uAOQyEG_~#r^oUkaSD-;W;)|2BoV{SY`x}g%tDc);4*V_N!r` z3vFhH7(7;;2-%*%1HkM4Y5 zJ;XS0C9UDLEdwHcf`J&_3b;J{t;XsN@+hRuRr$e*h|JhDg>ME-Nk?+b$6P9@B^9H) z`$YvWK;;!+hJA1WL+XPf8Jn|_T=1HOA-=ydERx!1o##bf zjGS&W*t{>t^%8`7Bk&>EwoEp#Y?t@T1#)mM1INT6J|690!MP%6^bx$)cjwYJV|}i= zHxOT)2*%l%imX)~DBVnkLeK2uaxZ6~Y~+d(cC^%L(JQ%c-C^Dkgh?w5s=3wOEAxJb zA3>fECrn>ZLB;;#>C(HO^{G`3%}#nY99oCW4$6zFNp0@$)U