/-  post
^?
=<  [post .]
=,  post
|%
++  jael-scry
  |*  [=mold our=ship desk=term now=time =path]
  .^  mold
    %j
    (scot %p our)
    desk
    (scot %da now)
    path
  ==
++  sign
  |=  [our=ship now=time =hash]
  ^-  signature
  =+  (jael-scry ,=life our %life now /(scot %p our))
  =+  (jael-scry ,=ring our %vein now /(scot %ud life))
  :+  `@ux`(sign:as:(nol:nu:crub:crypto ring) hash)
    our
  life
::
++  is-signature-valid
  |=  [our=ship =signature =hash now=time]
  ^-  ?
  =+  (jael-scry ,lyf=(unit @) our %lyfe now /(scot %p q.signature))
  ::  we do not have a public key from ship at this life
  ::
  ?~  lyf  %.y
  =+  %:  jael-scry
        ,deed=[a=life b=pass c=(unit @ux)]
        our  %deed  now  /(scot %p q.signature)/(scot %ud r.signature)
      ==
  ?.  =(a.deed r.signature)  %.y
  ::  verify signature from ship at life
  ::
  =/  them
    (com:nu:crub:crypto b.deed)
  =(`hash (sure:as.them p.signature))
::
++  are-signatures-valid
  |=  [our=ship =signatures =hash now=time]
  ^-  ?
  =/  signature-list  ~(tap in signatures)
  |-
  ?~  signature-list
    %.y
  ?:  (is-signature-valid our i.signature-list hash now)
    $(signature-list t.signature-list)
  %.n
--