mirror of
https://github.com/urbit/shrub.git
synced 2024-12-15 04:22:48 +03:00
309805f5e7
Complicated merge of Hoon 151. This commit is a major sequence point.
147 lines
4.8 KiB
Plaintext
147 lines
4.8 KiB
Plaintext
:: %jael, secret storage
|
|
::
|
|
:::: /hoon/jael/arvo
|
|
::
|
|
!? 164
|
|
::::
|
|
:: %jael is logically homogeneous, but please follow these conventions:
|
|
::
|
|
:: /cap :: foreign app keys
|
|
:: /service :: service name, eg %face for FB
|
|
:: /appid :: your ship's app-id
|
|
:: /@uvH :: by hash
|
|
:: /@ud :: by number
|
|
:: /@tas :: by name
|
|
::
|
|
:: /key :: foreign user secrets
|
|
:: /service :: service name, eg %face
|
|
:: /userid :: user identity
|
|
::
|
|
:: /urb :: urbit secrets
|
|
:: /tok+hash
|
|
|
|
|= pit=vase
|
|
=> =~
|
|
:: structures
|
|
|%
|
|
++ axle :: %jael state
|
|
$: %0 :: %jael version
|
|
ent=@ :: entropy
|
|
sef=safe :: secret tree
|
|
red=(map duct (set path)) :: reverse subscribers
|
|
== ::
|
|
++ gift :: out result <-$
|
|
$% [%dead p=path] :: key expired
|
|
[%live p=path q=@] :: key created
|
|
== ::
|
|
++ kiss :: in request ->$
|
|
$% [%kill p=path] :: discard secret
|
|
[%make p=@uw q=(unit ,@da) r=@ud s=path] :: generate random
|
|
[%nuke ~] :: erase subscriber
|
|
[%tell p=@uw q=(unit ,@da) r=path] :: save secret
|
|
== ::
|
|
++ move ,[p=duct q=(mold note gift)] :: typed move
|
|
++ note :: out request $->
|
|
$% $: %b :: to %behn
|
|
$% [%wait p=@da] ::
|
|
[%rest p=@da] ::
|
|
== == == ::
|
|
++ perm (pair ,@ud (list ,@ud)) :: prime definition
|
|
++ safe ::
|
|
$: nub=(unit ,@uw) :: secret
|
|
dex=(unit ,@da) :: expiration
|
|
sud=(set duct) :: subscribers
|
|
kin=(map term safe) :: children
|
|
== ::
|
|
-- ::
|
|
:: programs
|
|
|%
|
|
++ bu
|
|
|_ $: xap=path
|
|
fes=(list safe)
|
|
moz=(list move)
|
|
==
|
|
axle
|
|
::
|
|
++ bu-abet :: resolve
|
|
^- axle
|
|
?~ xap +<+
|
|
%= bu-abet
|
|
xap t.xap
|
|
fes t.fes
|
|
sef %= i.fes
|
|
kin
|
|
?: =(*safe sef)
|
|
(~(del by kin.i.fes) i.xap)
|
|
(~(put by kin.i.fes) i.xap sef)
|
|
==
|
|
==
|
|
::
|
|
++ bu-kill :: destroy
|
|
^+ .
|
|
=+ dus=(~(tap by
|
|
|
|
::
|
|
++ bu-ajar :: descend
|
|
|= pax=path
|
|
^+ +>
|
|
?~ pax +>.$
|
|
%= $
|
|
pax t.pax
|
|
xap [i.pax xap]
|
|
fes [sef fes]
|
|
sef (fall (~(get by kin.sef) i.pax) *safe)
|
|
==
|
|
--
|
|
++ bury
|
|
|= [pax=path lex=axle]
|
|
(~(bu-ajar bu [~ ~ ~] tof.lex lex) pax)
|
|
--
|
|
. ==
|
|
=| axle
|
|
|= [now=@da eny=@ ski=sled] :: activate
|
|
^? :: opaque core
|
|
|% ::
|
|
++ call :: request
|
|
|= [hen=duct hic=(hypo (hobo kiss))]
|
|
^- [p=(list move) q=_..^$]
|
|
=> .(q.hic ?.(?=(%soft -.q.hic) q.hic ((hard kiss) p.q.hic)))
|
|
=^ moz +>+>-
|
|
=< bu-abet
|
|
?- -.p.q.hic
|
|
%kill
|
|
kill:(bury p.p.q.hic +>+>-)
|
|
::
|
|
%make
|
|
%nuke
|
|
%tell
|
|
==
|
|
::
|
|
++ doze
|
|
|= [now=@da hen=duct]
|
|
^- (unit ,@da)
|
|
~
|
|
::
|
|
++ load :: highly forgiving
|
|
|= old=*
|
|
=+ lox=((soft axle) old)
|
|
^+ ..^$
|
|
?~ lox
|
|
~& %jael-reset
|
|
..^$
|
|
..^$(+>- u.lox)
|
|
::
|
|
++ scry
|
|
|= [fur=(unit (set monk)) ren=@tas who=ship syd=desk lot=coin tyl=path]
|
|
^- (unit (unit (pair mark ,*)))
|
|
:: actually scry
|
|
~
|
|
::
|
|
++ stay :: save w+o cache
|
|
`axle`+>-.$(pol (~(run by pol) |=(a=baby [tad.a dym.a ~])))
|
|
::
|
|
++ take :: response
|
|
|= [tea=wire hen=duct hin=(hypo noun)]
|
|
!!
|
|
--
|