2018-08-07 01:55:15 +03:00
|
|
|
|
:: urbit-style key generation and derivation functions
|
|
|
|
|
::
|
2018-08-10 21:36:26 +03:00
|
|
|
|
/- keygen
|
|
|
|
|
::
|
2018-10-26 05:10:40 +03:00
|
|
|
|
/+ bip32, bip39
|
2018-08-07 01:55:15 +03:00
|
|
|
|
::
|
2018-08-10 21:36:26 +03:00
|
|
|
|
::
|
|
|
|
|
=, sha
|
2018-08-29 01:58:22 +03:00
|
|
|
|
=, keygen
|
2018-08-10 21:36:26 +03:00
|
|
|
|
::
|
2018-08-13 22:33:27 +03:00
|
|
|
|
|%
|
2018-08-07 01:55:15 +03:00
|
|
|
|
++ to-byts
|
|
|
|
|
|= a=@t
|
|
|
|
|
=+ (met 3 a)
|
|
|
|
|
[- (rev 3 - a)]
|
|
|
|
|
::
|
|
|
|
|
++ argon2u
|
2018-10-23 02:37:42 +03:00
|
|
|
|
|= inp=byts
|
2018-08-07 01:55:15 +03:00
|
|
|
|
^- @
|
2018-10-23 02:37:42 +03:00
|
|
|
|
%- (argon2-urbit:argon2:crypto 32)
|
2018-10-25 23:22:18 +03:00
|
|
|
|
[inp (to-byts 'urbitwallet')]
|
2018-08-07 01:55:15 +03:00
|
|
|
|
::
|
2018-08-13 22:33:27 +03:00
|
|
|
|
++ child-node-from-seed
|
2018-10-25 02:30:45 +03:00
|
|
|
|
|= [seed=@ met=meta pass=(unit @t)]
|
2018-08-13 22:33:27 +03:00
|
|
|
|
^- node
|
2018-10-26 05:10:40 +03:00
|
|
|
|
=+ dr=~(. ds pass)
|
|
|
|
|
=+ sed=(seed:dr seed met)
|
|
|
|
|
=+ nom=(from-entropy:bip39 32^sed)
|
|
|
|
|
:+ met nom
|
|
|
|
|
%- wallet:dr
|
|
|
|
|
%+ to-seed:bip39 nom
|
|
|
|
|
(trip (fall pass ''))
|
2018-08-13 22:33:27 +03:00
|
|
|
|
::
|
2018-08-14 02:36:21 +03:00
|
|
|
|
++ full-wallet-from-ticket
|
2018-10-23 02:37:42 +03:00
|
|
|
|
|= [ticket=byts sis=(set ship) pass=(unit @t) revs=revisions]
|
2018-10-25 02:31:40 +03:00
|
|
|
|
=+ master-seed=(argon2u ticket)
|
2018-10-26 05:10:40 +03:00
|
|
|
|
=/ nn
|
|
|
|
|
|= [typ=tape rev=@ud]
|
|
|
|
|
%- ~(rep in sis)
|
|
|
|
|
|= [who=ship nos=nodes]
|
|
|
|
|
%+ ~(put by nos) who
|
|
|
|
|
%^ child-node-from-seed
|
|
|
|
|
master-seed
|
|
|
|
|
[typ rev who]
|
|
|
|
|
pass
|
2018-08-10 21:36:26 +03:00
|
|
|
|
::
|
2018-10-26 05:10:40 +03:00
|
|
|
|
:- ^= owner ^- nodes
|
|
|
|
|
(nn "owner" owner.revs)
|
2018-08-10 21:36:26 +03:00
|
|
|
|
::
|
2018-10-26 05:10:40 +03:00
|
|
|
|
:- ^= delegate ^- nodes
|
|
|
|
|
(nn "delegate" delegate.revs)
|
2018-08-10 21:36:26 +03:00
|
|
|
|
::
|
2018-10-26 05:10:40 +03:00
|
|
|
|
=/ manage=nodes
|
|
|
|
|
(nn "manage" manage.revs)
|
2018-08-13 22:33:27 +03:00
|
|
|
|
:- manage=manage
|
2018-08-10 21:36:26 +03:00
|
|
|
|
::
|
2018-10-26 05:10:40 +03:00
|
|
|
|
:- ^= transfer ^- nodes
|
|
|
|
|
(nn "transfer" transfer.revs)
|
2018-08-10 21:36:26 +03:00
|
|
|
|
::
|
2018-10-26 05:10:40 +03:00
|
|
|
|
:- ^= spawn ^- nodes
|
|
|
|
|
(nn "spawn" spawn.revs)
|
2018-08-10 21:36:26 +03:00
|
|
|
|
::
|
2018-10-26 05:10:40 +03:00
|
|
|
|
^= network ^- uodes
|
|
|
|
|
=+ dr=~(. ds pass)
|
2018-08-10 21:36:26 +03:00
|
|
|
|
%- ~(rep in sis)
|
2018-10-26 05:10:40 +03:00
|
|
|
|
|= [who=ship nus=uodes]
|
|
|
|
|
%+ ~(put by nus) who
|
|
|
|
|
=/ mad
|
|
|
|
|
%+ to-seed:bip39
|
|
|
|
|
seed:(~(got by manage) who)
|
|
|
|
|
(trip (fall pass ''))
|
|
|
|
|
=+ met=["network" network.revs who]
|
|
|
|
|
=+ sed=(seed:dr mad met)
|
|
|
|
|
[met sed (urbit:dr sed)]
|
2018-08-10 21:36:26 +03:00
|
|
|
|
::
|
2018-10-26 05:10:40 +03:00
|
|
|
|
++ ds :: derive from raw seed
|
2018-08-10 21:36:26 +03:00
|
|
|
|
|_ pass=(unit @t)
|
|
|
|
|
++ wallet
|
2018-10-23 02:37:42 +03:00
|
|
|
|
|= seed=@ux
|
2018-08-10 21:36:26 +03:00
|
|
|
|
^- ^wallet
|
2018-10-26 05:10:40 +03:00
|
|
|
|
=+ => (from-seed:bip32 32^seed)
|
|
|
|
|
(derive-path "m/44’/60’/0’/0/0")
|
|
|
|
|
:+ [public-key private-key]
|
|
|
|
|
(address-from-pub:ethereum public-key)
|
|
|
|
|
chain-code
|
2018-08-10 21:36:26 +03:00
|
|
|
|
::
|
|
|
|
|
++ urbit
|
2018-10-23 02:37:42 +03:00
|
|
|
|
|= seed=@ux
|
2018-08-10 21:36:26 +03:00
|
|
|
|
^- edkeys
|
|
|
|
|
=+ =< [pub=pub:ex sec=sec:ex]
|
2018-10-23 02:37:42 +03:00
|
|
|
|
(pit:nu:crub:crypto 256 seed)
|
2018-08-10 21:36:26 +03:00
|
|
|
|
:- ^= auth
|
|
|
|
|
:- (rsh 3 1 (end 3 33 pub))
|
|
|
|
|
(rsh 3 1 (end 3 33 sec))
|
|
|
|
|
^= crypt
|
|
|
|
|
:- (rsh 3 33 pub)
|
|
|
|
|
(rsh 3 33 sec)
|
|
|
|
|
::
|
|
|
|
|
++ seed
|
2018-10-23 02:37:42 +03:00
|
|
|
|
|= [seed=@ux meta]
|
|
|
|
|
^- @ux
|
2018-10-25 02:30:45 +03:00
|
|
|
|
=/ salt=tape
|
|
|
|
|
;: weld
|
2018-10-26 05:10:40 +03:00
|
|
|
|
typ
|
|
|
|
|
['-' (a-co:co who)]
|
|
|
|
|
['-' (a-co:co rev)]
|
2018-10-25 02:30:45 +03:00
|
|
|
|
==
|
2018-10-23 02:37:42 +03:00
|
|
|
|
%- sha-256l
|
2018-10-25 02:30:45 +03:00
|
|
|
|
:- (add 32 (lent salt))
|
|
|
|
|
(cat 3 (crip (flop salt)) seed)
|
2018-08-10 21:36:26 +03:00
|
|
|
|
--
|
2018-08-07 01:55:15 +03:00
|
|
|
|
--
|