section 3bB, cryptosuites ========================= ### `++crua` ++ crua !: :: cryptosuite A (RSA) ^- acru =| [mos=@ pon=(unit ,[p=@ q=@ r=[p=@ q=@] s=_*fu])] => |% XX document ### `++mx` ++ mx (dec (met 0 mos)) :: bit length XX document ### `++dap` ++ 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))] :: XX document ### `++pad` ++ 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] ~) |% XX document ### `++pull` ++ pull |=(a=@ (~(exp fo mos) 3 a)) XX document ### `++push` ++ push |=(a=@ (~(exp fo mos) 5 a)) XX document ### `++pump` ++ pump |= a=@ ^- @ ?~ pon !! (out.s.u.pon (exp.s.u.pon p.r.u.pon (sit.s.u.pon a))) :: XX document ### `++punt` ++ punt |= a=@ ^- @ ?~ pon !! (out.s.u.pon (exp.s.u.pon q.r.u.pon (sit.s.u.pon a))) |% XX document ### `++as` ++ as => |% XX document ### `++haul` ++ haul :: revealing haul |= a=pass !! ^? |% ++ seal |= [a=pass b=@ c=@] ^- @ !! XX document ### `++seal` XX document ###++sign ``` ++ sign |= [a=@ b=@] ^- @ !! ``` XX document ###++sure ``` ++ sure |= [a=@ b=@] ^- (unit ,@) !! ``` XX document ###++tear ``` ++ tear |= [a=pass b=@] ^- (unit ,[p=@ q=@]) !! :: ``` XX document ###++de ``` ++ de |+ [key=@ cep=@] ^- (unit ,@) !! :: ``` XX document ###++dy ``` ++ dy |+ [a=@ b=@] ^- @ !! ``` XX document ###++en ``` ++ en |+ [key=@ msg=@] ^- @ux !! :: ``` XX document ###++ex ``` ++ ex ^? |% ++ fig ^- @uvH (shaf %bfig puc) ``` XX document ###++fig XX document ### `++pac` ++ pac ^- @uvG (end 6 1 (shaf %acod sec)) XX document ### `++pub` ++ pub ^- pass (cat 3 'b' puc) XX document ### `++sec` ++ sec ^- ring sed :: XX document ### `++nu` ++ nu ^? |% ++ com |= a=@ ^+ ^?(..nu) ..nu(sed ~, puc a) :: XX document ### `++elcm` ++ elcm |= [a=@ b=@] (div (mul a b) d:(egcd a b)) :: XX document ### `++eldm` ++ eldm |= [a=@ b=@ c=@] (~(inv fo (elcm (dec b) (dec c))) a) :: XX document ### `++ersa` ++ ersa |= [a=@ b=@] [a b [(eldm 3 a b) (eldm 5 a b)] (fu a b)] ^? |% ++ com |= a=@ ^+ ^?(..nu) ..nu(mos a, pon ~) :: XX document ### `++com` XX document ###++pit ``` ++ pit |= [a=@ b=@] ^+ ^?(..nu) ..nu(sed b, puc (puck:ed b)) :: ``` XX document ###++nol ``` ++ nol |= a=@ ^+ ^?(..nu) ..nu(sed a, puc (puck:ed a)) ``` XX document ###++bruw ``` ++ bruw :: create keypair |= [a=@ b=@] :: width seed ^- acru (pit:nu:crua a b) :: ``` XX document ###++haul ``` ++ haul :: revealing haul |= a=pass !! ^? |% ++ seal |= [a=pass b=@ c=@] ^- @ !! ``` XX document ###++weur ``` ++ weur :: activate secret key |= a=ring ^- acru =+ [mag=(end 3 1 a) bod=(rsh 3 1 a)] ?> =('A' mag) (nol:nu:crua bod) :: ``` XX document ###++trua ``` ++ trua :: test rsa |= msg=@tas ^- @ =+ ali=(bruw 1.024 (shax 'ali')) =+ bob=(bruw 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 :: ``` XX document ###++crub ``` ++ crub :: cryptosuite B (Ed) ^- acru =| [puc=pass sed=ring] => |% ``` XX document ###++dap ``` ++ 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))] :: ``` XX document ###++pad ``` ++ 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] ~) |% ``` XX document ###++as ``` ++ as => |% ``` XX document ###++haul ``` ++ haul :: revealing haul |= a=pass !! ^? |% ++ seal |= [a=pass b=@ c=@] ^- @ !! ``` XX document ###++seal XX document ### `++sign` ++ sign |= [a=@ b=@] ^- @ !! XX document ### `++sure` ++ sure |= [a=@ b=@] ^- (unit ,@) !! XX document ### `++tear` ++ tear |= [a=pass b=@] ^- (unit ,[p=@ q=@]) !! :: XX document ### `++de` ++ de |+ [key=@ cep=@] ^- (unit ,@) !! :: XX document ### `++dy` ++ dy |+ [a=@ b=@] ^- @ !! XX document ### `++en` ++ en |+ [key=@ msg=@] ^- @ux !! :: XX document ### `++ex` ++ ex ^? |% ++ fig ^- @uvH (shaf %bfig puc) XX document ### `++fig` XX document ###++pac ``` ++ pac ^- @uvG (end 6 1 (shaf %acod sec)) ``` XX document ###++pub ``` ++ pub ^- pass (cat 3 'b' puc) ``` XX document ###++sec ``` ++ sec ^- ring sed :: ``` XX document ###++nu ``` ++ nu ^? |% ++ com |= a=@ ^+ ^?(..nu) ..nu(sed ~, puc a) :: ``` XX document ###++com XX document ### `++pit` ++ pit |= [a=@ b=@] ^+ ^?(..nu) ..nu(sed b, puc (puck:ed b)) :: XX document ### `++nol` ++ nol |= a=@ ^+ ^?(..nu) ..nu(sed a, puc (puck:ed a)) XX document ### `++brew` ++ brew :: create keypair |= [a=@ b=@] :: width seed ^- acru (pit:nu:crub a b) :: XX document ### `++hail` ++ hail :: activate public key |= a=pass ^- acru =+ [mag=(end 3 1 a) bod=(rsh 3 1 a)] ?> =('b' mag) (com:nu:crub bod) :: XX document ### `++wear` ++ wear :: activate secret key |= a=ring ^- acru =+ [mag=(end 3 1 a) bod=(rsh 3 1 a)] ?> =('b' mag) (nol:nu:crub bod) :: XX document ### `++trub` ++ trub :: test ed |= msg=@tas ^- @ =+ ali=(brew 1.024 (shax 'ali')) =+ bob=(brew 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 :: XX document ### `++hmac` ++ hmac :: HMAC-SHA1 |= [key=@ mes=@] =+ ip=(fil 3 64 0x36) =+ op=(fil 3 64 0x5c) =+ ^= kex ?: (gth (met 3 key) 64) (lsh 3 44 (shan (swap 3 key))) (lsh 3 (sub 64 (met 3 key)) (swap 3 key)) =+ inn=(shan (swap 3 (cat 3 (swap 3 mes) (mix ip kex)))) (shan (swap 3 (cat 3 inn (mix op kex)))) :: XX document