New cryptosuite interface

`seal`/`tear` now imply `sign`/`sure` and take the public key of
the other party. As this muddies the `pu`/`se` distinction, we lump
all asym ops under `as`.
This commit is contained in:
Steve Dee 2014-04-07 19:31:37 -07:00
parent 57954fc639
commit b54dea7533

View File

@ -372,6 +372,159 @@
?~(cow ~ [~ p.pig u.cow]) ?~(cow ~ [~ p.pig u.cow])
-- --
-- --
++ crua :: new-style crya
:: ^- acru :: XX user must cast
=| [mos=@ pon=(unit ,[p=@ q=@ r=[p=@ q=@] s=_*fu])]
=> |%
++ mx (dec (met 0 mos)) :: bit length
++ dap :: OEAP decode
|= [wid=@ xar=@ dog=@] ^- [p=@ q=@]
=+ pav=(sub wid xar)
=+ qoy=(cut 0 [xar pav] dog)
=+ dez=(mix (end 0 xar dog) (shaw %pad-b xar qoy))
[dez (mix qoy (shaw %pad-a pav dez))]
::
++ pad :: OEAP encode
|= [wid=@ rax=[p=@ q=@] meg=@] ^- @
=+ pav=(sub wid p.rax)
?> (gte pav (met 0 meg))
^- @
=+ qoy=(mix meg (shaw %pad-a pav q.rax))
=+ dez=(mix q.rax (shaw %pad-b p.rax qoy))
(can 0 [p.rax dez] [pav qoy] ~)
::
++ pull |=(a=@ (~(exp fo mos) 3 a))
++ push |=(a=@ (~(exp fo mos) 5 a))
++ pump
|= a=@ ^- @
?~ pon !!
(out.s.u.pon (exp.s.u.pon p.r.u.pon (sit.s.u.pon a)))
::
++ punt
|= a=@ ^- @
?~ pon !!
(out.s.u.pon (exp.s.u.pon q.r.u.pon (sit.s.u.pon a)))
--
|%
++ as
=> |%
++ haul
|= a=pass
=+ [mag=(end 3 1 a) bod=(rsh 3 1 a)]
?> =('a' mag)
..as(mos bod, pon ~)
--
^?
|% ++ seal
|= [a=pass b=@ c=@]
^- @
=+ her=(haul a)
=+ det=(lte (add 256 (met 0 c)) mx.her)
=+ lip=?:(det c 0)
=- (sign *code (add ?:(p.mav 0 1) (lsh 0 1 q.mav)))
^= mav ^- [p=? q=@]
:- det
=+ dog=(pad mx.her [256 b] lip)
=+ hog=(push.her dog)
=+ ben=(en b c)
?:(det hog (jam hog ben))
++ sign
|= [a=@ b=@] ^- @
=- (add ?:(p.mav 0 1) (lsh 0 1 q.mav))
^= mav ^- [p=? q=@]
=+ det=(lte (add 128 (met 0 b)) mx)
:- det
=+ hec=(shaf (mix %agis a) b)
=+ dog=(pad mx [128 hec] ?:(det b 0))
=+ hog=(pump dog)
?:(det hog (jam hog b))
++ sure
|= [a=@ b=@]
^- (unit ,@)
=+ [det==(0 (end 0 1 b)) bod=(rsh 0 1 b)]
=+ gox=?:(det [p=bod q=0] ((hard ,[p=@ q=@]) (cue bod)))
=+ dog=(pull p.gox)
=+ pig=(dap mx 128 dog)
=+ log=?:(det q.pig q.gox)
?.(=(p.pig (shaf (mix %agis a) log)) ~ [~ log])
++ tear
|= [a=pass b=@]
^- (unit ,[p=@ q=@])
=+ her=(haul a)
=+ rus=(sure:as.her *code b)
?~ rus ~
=+ ros=u.rus
=+ [det==(0 (end 0 1 ros)) bod=(rsh 0 1 ros)]
=+ gox=?:(det [p=bod q=0] ((hard ,[p=@ q=@]) (cue bod)))
=+ dog=(punt p.gox)
=+ pig=(dap mx 256 dog)
?: det
[~ p.pig q.pig]
=+ cow=(de p.pig q.gox)
?~(cow ~ [~ p.pig u.cow])
--
::
++ de
|+ [key=@ cep=@] ^- (unit ,@)
=+ toh=(met 8 cep)
?: (lth toh 2)
~
=+ adj=(dec toh)
=+ [hax=(end 8 1 cep) bod=(rsh 8 1 cep)]
=+ msg=(mix (~(raw og (mix hax key)) (mul 256 adj)) bod)
?. =(hax (shax (mix key (shax (mix adj msg)))))
~
[~ msg]
::
++ dy |+([a=@ b=@] (need (de a b)))
++ en
|+ [key=@ msg=@] ^- @ux
=+ len=(met 8 msg)
=+ adj=?:(=(0 len) 1 len)
=+ hax=(shax (mix key (shax (mix adj msg))))
(rap 8 hax (mix msg (~(raw og (mix hax key)) (mul 256 adj))) ~)
::
++ ex ^?
|% ++ fig ^- @uvH (shaf %afig mos)
++ pac ^- @uvG (end 6 1 (shaf %acod sec))
++ pub ^- pass (cat 3 'a' mos)
++ sec ^- ring ?~(pon !! (cat 3 'A' (jam p.u.pon q.u.pon)))
--
::
++ nu
=> |%
++ elcm
|= [a=@ b=@]
(div (mul a b) d:(egcd a b))
::
++ eldm
|= [a=@ b=@ c=@]
(~(inv fo (elcm (dec b) (dec c))) a)
::
++ ersa
|= [a=@ b=@]
[a b [(eldm 3 a b) (eldm 5 a b)] (fu a b)]
--
^?
|% ++ com
|= a=@
^+ ^?(..nu)
..nu(mos a, pon ~)
::
++ pit
|= [a=@ b=@]
=+ c=(rsh 0 1 a)
=+ [d=(ramp c [3 5 ~] b) e=(ramp c [3 5 ~] +(b))]
^+ ^?(..nu)
..nu(mos (mul d e), pon [~ (ersa d e)])
::
++ nol
|= a=@
^+ ^?(..nu)
=+ b=((hard ,[p=@ q=@]) (cue a))
..nu(mos (mul p.b q.b), pon [~ (ersa p.b q.b)])
--
--
++ brew :: create keypair ++ brew :: create keypair
|= [a=@ b=@] :: width seed |= [a=@ b=@] :: width seed
^- acro ^- acro
@ -405,6 +558,22 @@
?. &(?=(^ lov) =(msg u.lov)) ?. &(?=(^ lov) =(msg u.lov))
~|(%test-fail-sign !!) ~|(%test-fail-sign !!)
msg msg
::
++ trua
|= msg=@tas
^- @
=+ ali=(pit:nu:crua 1.024 (shax 'ali'))
=+ bob=(pit:nu:crua 1.024 (shax 'bob'))
=+ tef=(sign:as.ali [0 msg])
=+ lov=(sure:as.ali [0 tef])
?. &(?=(^ lov) =(msg u.lov))
~|(%test-fail-sign !!)
=+ key=(shax (shax (shax msg)))
=+ sax=(seal:as.ali pub:ex.bob key msg)
=+ tin=(tear:as.bob pub:ex.ali sax)
?. &(?=(^ tin) =(key p.u.tin) =(msg q.u.tin))
~|(%test-fail-seal !!)
msg
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: section 3bC, JSON and XML :: :: section 3bC, JSON and XML ::
:: ::
@ -1654,7 +1823,7 @@
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: section 3bF, Arvo models :: :: section 3bF, Arvo models ::
:: ::
++ acro :: asym cryptosuite ++ acro :: old asym cryptosuite
$_ ^? |% :: opaque object $_ ^? |% :: opaque object
++ de |+([a=@ b=@] *(unit ,@)) :: symmetric de, soft ++ de |+([a=@ b=@] *(unit ,@)) :: symmetric de, soft
++ dy |+([a=@ b=@] _@) :: symmetric de, hard ++ dy |+([a=@ b=@] _@) :: symmetric de, hard
@ -1680,7 +1849,31 @@
|% ++ sign |=([a=@ b=@] _@) :: certify |% ++ sign |=([a=@ b=@] _@) :: certify
++ tear |=(a=@ *(unit ,[p=@ q=@])) :: accept ++ tear |=(a=@ *(unit ,[p=@ q=@])) :: accept
-- :: -- ::
-- :: --
++ acru :: asym cryptosuite
$_ ^? |% :: opaque object
++ as ^? :: asym ops
|% ++ seal |=([a=pass b=@ c=@] _@) :: encrypt to a
++ sign |=([a=@ b=@] _@) :: certify as us
++ sure |=([a=@ b=@] *(unit ,@)) :: authenticate from us
++ tear |=([a=pass b=@] *(unit ,[p=@ q=@])) :: accept from a
--
++ de |+([a=@ b=@] *(unit ,@)) :: symmetric de, soft
++ dy |+([a=@ b=@] _@) :: symmetric de, hard
++ en |+([a=@ b=@] _@) :: symmetric en
++ ex ^? :: export
|% ++ fig _@uvH :: fingerprint
++ pac _@uvG :: default passcode
++ pub *pass :: public key
++ sec *ring :: private key
--
++ ha |+(a=pass _@) :: shared secret
++ nu ^? :: reconstructors
|% ++ pit |=([a=@ b=@] ^?(..nu)) :: from [width seed]
++ nol |=(a=@ ^?(..nu)) :: from naked ring
++ com |=(a=@ ^?(..nu)) :: from naked pass
--
--
++ agon (map ,[p=ship q=disc] ,[p=@ud q=@ud]) :: mergepts our/their ++ agon (map ,[p=ship q=disc] ,[p=@ud q=@ud]) :: mergepts our/their
++ ankh :: fs node (new) ++ ankh :: fs node (new)
$: p=cash :: recursive hash $: p=cash :: recursive hash