@@ -4,663 +4,7 @@ navhome: /docs/
6# 3e: AES encryption
6# 3e: AES encryption
19− |= [a/@I b/@H] ^- @uxH
29− |= [a/@I b/@H] ^- @uxH
39− =+ =+ [gr=(ga 8 0x11b 3) few==>(fe .(a 5))]
40− =+ [pro=pro.gr dif=dif.gr pow=pow.gr ror=ror.few]
41− [pro=pro dif=dif pow=pow ror=ror nnk=8 nnb=4 nnr=14]
48− ++ cipa :: AES params
56− ++ co *{p/@ q/@ r/@ s/@} :: col coefs
62− ++ ix |~(a/@ *@) :: key index
69− ++ ro *{p/@ q/@ r/@ s/@} :: row shifts
96− ++ ix |~(a/@ *@) :: key index
102− ++ ro *{p/@ q/@ r/@ s/@} :: row shifts
108− ++ su 0x7d0c.2155.6314.69e1.26d6.77ba.7e04.2b17.
109− 6199.5383.3cbb.ebc8.b0f5.2aae.4d3b.e0a0.
110− ef9c.c993.9f7a.e52d.0d4a.b519.a97f.5160.
111− 5fec.8027.5910.12b1.31c7.0788.33a8.dd1f.
112− f45a.cd78.fec0.db9a.2079.d2c6.4b3e.56fc.
113− 1bbe.18aa.0e62.b76f.89c5.291d.711a.f147.
114− 6edf.751c.e837.f9e2.8535.ade7.2274.ac96.
115− 73e6.b4f0.cecf.f297.eadc.674f.4111.913a.
116− 6b8a.1301.03bd.afc1.020f.3fca.8f1e.2cd0.
117− 0645.b3b8.0558.e4f7.0ad3.bc8c.00ab.d890.
118− 849d.8da7.5746.155e.dab9.edfd.5048.706c.
119− 92b6.655d.cc5c.a4d4.1698.6886.64f6.f872.
120− 25d1.8b6d.49a2.5b76.b224.d928.66a1.2e08.
121− 4ec3.fa42.0b95.4cee.3d23.c2a6.3294.7b54.
122− cbe9.dec4.4443.8e34.87ff.2f9b.8239.e37c.
123− fbd7.f381.9ea3.40bf.38a5.3630.d56a.0952
139− ++ co [0xe 0xb 0xd 0x9]
145− ++ ix :: key expand, inv
147− =+ [i=1 j=_@ b=_@ c=co:pin]
151− => .(b (cut 7 [i 1] a))
152− => .(b (rep 5 (mcol (pode 5 4 b) c)))
158− :~ [i (cut 7 [0 i] a)]
160− [j (cut 7 [+(i) j] a)]
176− ++ su 0x7d0c.2155.6314.69e1.26d6.77ba.7e04.2b17.
177− 6199.5383.3cbb.ebc8.b0f5.2aae.4d3b.e0a0.
178− ef9c.c993.9f7a.e52d.0d4a.b519.a97f.5160.
179− 5fec.8027.5910.12b1.31c7.0788.33a8.dd1f.
180− f45a.cd78.fec0.db9a.2079.d2c6.4b3e.56fc.
181− 1bbe.18aa.0e62.b76f.89c5.291d.711a.f147.
182− 6edf.751c.e837.f9e2.8535.ade7.2274.ac96.
183− 73e6.b4f0.cecf.f297.eadc.674f.4111.913a.
184− 6b8a.1301.03bd.afc1.020f.3fca.8f1e.2cd0.
185− 0645.b3b8.0558.e4f7.0ad3.bc8c.00ab.d890.
186− 849d.8da7.5746.155e.dab9.edfd.5048.706c.
187− 92b6.655d.cc5c.a4d4.1698.6886.64f6.f872.
188− 25d1.8b6d.49a2.5b76.b224.d928.66a1.2e08.
189− 4ec3.fa42.0b95.4cee.3d23.c2a6.3294.7b54.
190− cbe9.dec4.4443.8e34.87ff.2f9b.8239.e37c.
191− fbd7.f381.9ea3.40bf.38a5.3630.d56a.0952
200− |= [a=(list ,@) b=[p=@ q=@ r=@ s=@]] ^- (list ,@)
201− =+ c=[p=_@ q=_@ r=_@ s=_@]
204− => .(p.c (cut 3 [0 1] i.a))
205− => .(q.c (cut 3 [1 1] i.a))
206− => .(r.c (cut 3 [2 1] i.a))
207− => .(s.c (cut 3 [3 1] i.a))
212− :~ [[p.c p.b] [q.c q.b] [r.c r.b] [s.c s.b]]
213− [[p.c s.b] [q.c p.b] [r.c q.b] [s.c r.b]]
214− [[p.c r.b] [q.c s.b] [r.c p.b] [s.c q.b]]
215− [[p.c q.b] [q.c r.b] [r.c s.b] [s.c p.b]]
217− |= [a=[@ @] b=[@ @] c=[@ @] d=[@ @]]
218− :(dif (pro a) (pro b) (pro c) (pro d))
225− ++ pode :: explode to block
226− |= [a=bloq b=@ c=@] ^- (list ,@)
232− $(m +(m), d (weld d (limo [0 ~])))
238− ++ sube :: s-box word
240− (rep 3 (turn (pode 3 4 a) |=(c=@ (cut 3 [c 1] b))))
248− ++ be :: block cipher
249− |= [a=? b=@ c=@H] ^- @uxH
262− (pode 5 nnb (cut 5 [(mul (ix.a b) nnb) nnb] c))
269− |= [c=(list ,@) d=(list ,@)] ^- (list ,@)
272− [(mix i.c i.d) $(c t.c, d t.d)]
279− |= [a=cipa b=(list ,@)] ^- (list ,@)
287− (limo [0 p.e] [1 q.e] [2 r.e] [3 s.e] ~)
289− (cut 3 [f 1] (snag (mod (add g c) nnb) b))
296− |= [a=cipa b=(list ,@)] ^- (list ,@)
298− [(sube i.b su.a) $(b t.b)]
301− =+ [d=?:(a pen pin) e=(pode 5 nnb c) f=1]
302− => .(e (sark e (ankh d 0 b)))
307− => .(e (mcol e co.d))
308− => .(e (sark e (ankh d f b)))
312− => .(e (sark e (ankh d nnr b)))
321− =+ [b=a c=0 d=su:pen i=nnk]
323− ?: =(i (mul nnb +(nnr)))
325− => .(c (cut 5 [(dec i) 1] b))
326− => ?: =(0 (mod i nnk))
329− .(c (mix c (pow (dec (div i nnk)) 2)))
330− ?: &((gth nnk 6) =(4 (mod i nnk)))
333− => .(c (mix c (cut 5 [(sub i nnk) 1] b)))
334− => .(b (can 5 [i b] [1 c] ~))
341− ++ ix :: key expand, inv
343− =+ [i=1 j=_@ b=_@ c=co:pin]
347− => .(b (cut 7 [i 1] a))
348− => .(b (rep 5 (mcol (pode 5 4 b) c)))
354− :~ [i (cut 7 [0 i] a)]
356− [j (cut 7 [+(i) j] a)]
366− ++ curt :: curve25519
371− =+ =+ [p=486.662 q=(sub (bex 255) 19)]
382− =+ low=(dis 248 (cut 3 [0 1] raw))
383− =+ hih=(con 64 (dis 127 (cut 3 [31 1] raw)))
384− =+ mid=(cut 3 [1 30] raw)
385− (can 3 [[1 low] [30 mid] [1 hih] ~])
391− ++ sqr |=(a=@ (mul a a))
397− ++ inv |=(a=@ (~(exp fo q) (sub q 2) a))
404− |= [n=[x=@ z=@] m=[x=@ z=@] d=[x=@ z=@]]
409− (sun:si (mul x.m x.n))
410− (sun:si (mul z.m z.n))
416− (sun:si (mul x.m z.n))
417− (sun:si (mul z.m x.n))
419− [(sit.fq xx) (sit.fq zz)]
430− (dif:si (sun:si x) (sun:si z))
434− :(add (sqr x) :(mul p x z) (sqr z))
436− [(sit.fq xx) (sit.fq zz)]
446− (sit.fq (mul -.x (inv +.x)))
449− $(i (dec i), s (cad r s one), r (cub r))
450− $(i (dec i), r (cad r s one), s (cub s))
459− =+ =+ [b=256 q=(sub (bex 255) 19)]
464− 27.742.317.777.372.353.535.851.937.790.883.648.493
465− =+ d=(dif.fq 0 (fra.fq 121.665 121.666))
466− =+ ii=(exp.fq (div (dec q) 4) 2)
467− [b=b q=q fq=fq l=l d=d ii=ii]
473− ++ norm |=(x=@ ?:(=(0 (mod x 2)) x (sub q x)))
480− ++ xrec :: recover x-coord
483− %+ mul (dif.fq (mul y y) 1)
484− (inv.fq +(:(mul d y y)))
485− =+ x=(exp.fq (div (add 3 q) 8) xx)
486− ?: !=(0 (dif.fq (mul x x) (sit.fq xx)))
487− (norm (pro.fq x ii))
495− ++ ward :: edwards multiply
496− |= [pp=[@ @] qq=[@ @]] ^- [@ @]
497− =+ dp=:(pro.fq d -.pp -.qq +.pp +.qq)
503− (inv.fq (sum.fq 1 dp))
509− (inv.fq (dif.fq 1 dp))
517− ++ scam :: scalar multiply
518− |= [pp=[@ @] e=@] ^- [@ @]
521− =+ qq=$(e (div e 2))
522− => .(qq (ward qq qq))
532− ++ etch :: encode point
534− (can 0 ~[[(sub b 1) +.pp] [1 (dis 1 -.pp)]])
541− ++ curv :: point on curve?
546− (pro.fq (sub q (sit.fq x)) x)
548− (sum.fq 1 :(pro.fq d x x y y))
555− ++ deco :: decode point
556− |= s=@ ^- (unit ,[@ @])
557− =+ y=(cut 0 [0 (dec b)] s)
558− =+ si=(cut 0 [(dec b) 1] s)
560− => .(x ?:(!=(si (dis 1 x)) (sub q x) x))
572− =+ bby=(pro.fq 4 (inv.fq 5))
583− ++ puck :: public key
586− ?: (gth (met 3 sk) 32) !!
587− =+ h=(shal (rsh 0 3 b) sk)
591− (lsh 0 3 (cut 0 [3 (sub b 5)] h))
599− ++ suck :: keypair from seed
602− (can 0 ~[[b se] [b pu]])
613− =+ pk=(cut 0 [b b] sk)
614− =+ h=(shal (rsh 0 3 b) sk)
618− (lsh 0 3 (cut 0 [3 (sub b 5)] h))
620− =+ hm=(cut 0 [b b] h)
636− (~(sit fo l) (add r (mul (shaz ha) a)))
637− (can 0 ~[[b (etch rr)] [b ss]])
646− |= [s=@ m=@ pk=@] ^- ?
647− ?: (gth (div b 4) (met 3 s)) |
648− ?: (gth (div b 8) (met 3 pk)) |
650− =+ rr=(deco (cut 0 [0 b] s))
654− =+ ss=(cut 0 [b b] s)
655− =+ ha=(can 3 ~[[cb (etch u.rr)] [cb pk] [(met 3 m) m]])
657− =((scam bb ss) (ward u.rr (scam u.aa h)))
660− ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
8+The standard-library functions in this section have been removed.