14A core that contains arms that perform reversible scrambling operations.
15Used in the `@p` phonetic base.
29Scrambles a byte-string `pyn` by adding the current position to each
30byte, looking it up in an s-box, and then performing the XOR operation
31on the result, pushing it forward. The inverse of `wred`.
50 =+ mig=(zaft (xafo len (cut 3 [len 1] pyn)))
52 %- flop ^- (list [@ @])
58 =+ mog=(zyft :(mix mig (end 3 1 len) (cut 3 [len 1] pyn)))
66 > `@ux`(wren:un 'testing')
72 > `@da`(wred:un (wren:un ~2001.2.5))
81Unscrambles a byte-string `cry` by subtracting the current position from
82each byte, looking it up in an s-box, and performing the XOR operation
83on the result, pushing it forward. The inverse of `wren`.
102 =+ mig=(cut 3 [len 1] cry)
104 %- flop ^- (list [@ @])
105 :- [1 (xaro len (zart mig))]
110 =+ mog=(cut 3 [len 1] cry)
111 [[1 :(mix mig (end 3 1 len) (zyrt mog))] $(mig mog)]
118 > (wred:un 0x30.bf6a.b9fe.7d8f)
119 29.113.321.805.538.676
121 > `@t`(wred:un 0x30.bf6a.b9fe.7d8f)
124 > (wred:un (wren:un 200.038.426))
133Produces the sum of two atoms modulo 255, encoded as a nonzero byte. The inverse
149 ++ xafo |=([a=@ b=@] +((mod (add (dec b) a) 255)))
161 > (xafo:un 256 (xaro:un 256 20))
170Produces the sum of two atoms modulo 255, encoded as a nonzero byte. The inverse
186 ++ xaro |=([a=@ b=@] +((mod (add (dec b) (sub 255 (mod a 255))) 255)))
198 > (xaro:un 256 (xafo:un 256 20))
205Look up in 255 sub box
207Looks up a nonzero byte `a` in a substitution box with 255 values, producing a
208unique nonzero byte. The inverse of `zart`.
212`a` is an atom of one byte in length.
224 0xcc.75bc.86c8.2fb1.9a42.f0b3.79a0.92ca.21f6.1e41.cde5.fcc0.
225 7e85.51ae.1005.c72d.1246.07e8.7c64.a914.8d69.d9f4.59c2.8038.
226 1f4a.dca2.6fdf.66f9.f561.a12e.5a16.f7b0.a39f.364e.cb70.7318.
227 1de1.ad31.63d1.abd4.db68.6a33.134d.a760.edee.5434.493a.e323.
228 930d.8f3d.3562.bb81.0b24.43cf.bea5.a6eb.52b4.0229.06b2.6704.
229 78c9.45ec.d75e.58af.c577.b7b9.c40e.017d.90c3.87f8.96fa.1153.
230 0372.7f30.1c32.ac83.ff17.c6e4.d36d.6b55.e2ce.8c71.8a5b.b6f3.
231 9d4b.eab5.8b3c.e7f2.a8fe.9574.5de0.bf20.3f15.9784.9939.5f9c.
232 e609.564f.d8a4.b825.9819.94aa.2c08.8e4c.9b22.477a.2840.3ed6.
233 3750.6ef1.44dd.89ef.6576.d00a.fbda.9ed2.3b6c.7b0c.bde9.2ade.
234 5c88.c182.481a.1b0f.2bfd.d591.2726.57ba
235 (cut 3 [(dec a) 1] b)
250 ! decrement-underflow
257Reverse look up in 255 sub box
259Looks up the index of a nonzero byte `a` in the substitution box with 255
260values, producing a unique nonzero byte. The inverse of `zaft`.
264`a` is an atom of one byte in length.
273 ++ zart :: reverse 255-sbox
276 0x68.4f07.ea1c.73c9.75c2.efc8.d559.5125.f621.a7a8.8591.5613.
277 dd52.40eb.65a2.60b7.4bcb.1123.ceb0.1bd6.3c84.2906.b164.19b3.
278 1e95.5fec.ffbc.f187.fbe2.6680.7c77.d30e.e94a.9414.fd9a.017d.
279 3a7e.5a55.8ff5.8bf9.c181.e5b6.6ab2.35da.50aa.9293.3bc0.cdc6.
280 f3bf.1a58.4130.f844.3846.744e.36a0.f205.789e.32d8.5e54.5c22.
281 0f76.fce7.4569.0d99.d26e.e879.dc16.2df4.887f.1ffe.4dba.6f5d.
282 bbcc.2663.1762.aed7.af8a.ca20.dbb4.9bc7.a942.834c.105b.c4d4.
283 8202.3e61.a671.90e6.273d.bdab.3157.cfa4.0c2e.df86.2496.f7ed.
284 2b48.2a9d.5318.a343.d128.be9c.a5ad.6bb5.6dfa.c5e1.3408.128d.
285 2c04.0339.97a1.2ff0.49d0.eeb8.6c0a.0b37.b967.c347.d9ac.e072.
286 e409.7b9f.1598.1d3f.33de.8ce3.8970.8e7a
287 (cut 3 [(dec a) 1] b)
307Lookup byte in 256 sub box
309Looks up a byte `a` in a substitution box with 256 values, producing a byte. The
314`a` is an atom of one byte in length.
323 ++ zyft :: forward 256-sbox
326 0xbb49.b71f.b881.b402.17e4.6b86.69b5.1647.115f.dddb.7ca5.
327 8371.4bd5.19a9.b092.605d.0d9b.e030.a0cc.78ba.5706.4d2d.
328 986a.768c.f8e8.c4c7.2f1c.effe.3cae.01c0.253e.65d3.3872.
329 ce0e.7a74.8ac6.daac.7e5c.6479.44ec.4143.3d20.4af0.ee6c.
330 c828.deca.0377.249f.ffcd.7b4f.eb7d.66f2.8951.042e.595a.
331 8e13.f9c3.a79a.f788.6199.9391.7fab.6200.4ce5.0758.e2f1.
332 7594.c945.d218.4248.afa1.e61a.54fb.1482.bea4.96a2.3473.
333 63c2.e7cb.155b.120a.4ed7.bfd8.b31b.4008.f329.fca3.5380.
334 9556.0cb2.8722.2bea.e96e.3ac5.d1bc.10e3.2c52.a62a.b1d6.
335 35aa.d05e.f6a8.0f3b.31ed.559d.09ad.f585.6d21.fd1d.8d67.
336 370b.26f4.70c1.b923.4684.6fbd.cf8b.5036.0539.9cdc.d93f.
337 9068.1edf.8f33.b632.d427.97fa.9ee1
360Reverse lookup byte in 256 sub box
362Looks up a byte `a` in a substitution box with 256 values, producing a byte.
363The inverse of `zyft`.
367`a` is an atom of one byte in length.
376 ++ zyrt :: reverse 256-sbox
379 0x9fc8.2753.6e02.8fcf.8b35.2b20.5598.7caa.c9a9.30b0.9b48.
380 47ce.6371.80f6.407d.00dd.0aa5.ed10.ecb7.0f5a.5c3a.e605.
381 c077.4337.17bd.9eda.62a4.79a7.ccb8.44cd.8e64.1ec4.5b6b.
382 1842.ffd8.1dfb.fd07.f2f9.594c.3be3.73c6.2cb6.8438.e434.
383 8d3d.ea6a.5268.72db.a001.2e11.de8c.88d3.0369.4f7a.87e2.
384 860d.0991.25d0.16b9.978a.4bf4.2a1a.e96c.fa50.85b5.9aeb.
385 9dbb.b2d9.a2d1.7bba.66be.e81f.1946.29a8.f5d2.f30c.2499.
386 c1b3.6583.89e1.ee36.e0b4.6092.937e.d74e.2f6f.513e.9615.
387 9c5d.d581.e7ab.fe74.f01b.78b1.ae75.af57.0ec2.adc7.3245.
388 12bf.2314.3967.0806.31dc.cb94.d43f.493c.54a6.0421.c3a1.
389 1c4a.28ac.fc0b.26ca.5870.e576.f7f1.616d.905f.ef41.33bc.
390 df4d.225e.2d56.7fd6.1395.a3f8.c582
412Reversible scrambling, v2
419A core for performing reversible scrambling operations for the `@p` phonetic
427Randomly permutes atoms that fit into 17 to 32 bits into one another. If the
428atom fits into 33 to 64 bits, does the same permutation on the low 32 bits
429only. Otherwise, passes the atom through unchanged.
444 ?: &((gte pyn 0x1.0000) (lte pyn 0xffff.ffff))
445 (add 0x1.0000 (fice (sub pyn 0x1.0000)))
446 ?: &((gte pyn 0x1.0000.0000) (lte pyn 0xffff.ffff.ffff.ffff))
447 =+ lo=(dis pyn 0xffff.ffff)
448 =+ hi=(dis pyn 0xffff.ffff.0000.0000)
450 (add 0x1.0000 (fice (sub lo 0x1.0000)))
458 > `@p`(feen:ob 111.103)
461 > `@p`(feen:ob ~mophul-pagwyx)
464 > `@p`(feen:ob (fend:ob ~mophul-pagwyx))
476Randomly permutes atoms that fit into 17 to 32 bits into one another, and
477randomly permutes the low 32 bits of atoms that fit into 33 to 64 bits;
478otherwise, passes the atom through unchanged. The inverse of the one applied
494 ?: &((gte cry 0x1.0000) (lte cry 0xffff.ffff))
495 (add 0x1.0000 (teil (sub cry 0x1.0000)))
496 ?: &((gte cry 0x1.0000.0000) (lte cry 0xffff.ffff.ffff.ffff))
497 =+ lo=(dis cry 0xffff.ffff)
498 =+ hi=(dis cry 0xffff.ffff.0000.0000)
500 (add 0x1.0000 (teil (sub lo 0x1.0000)))
508 > `@p`(fend:ob 111.103)
511 > `@p`(fend:ob ~doznec-sapfes)
514 > `@p`(fend:ob ~wisfed-lonwes)
517 > `@p`(fend:ob (feen:ob ~wisfed-lonwes))
520 > `@p`(fend:ob ~tarmed)
529Produces an atom by applying a variant of the Feistel cipher. Unlike
530a conventional Feistel cipher that is its own inverse if keys are used in
531reverse order, this Feistel-like cipher uses two moduli that must be swapped
532when applying the reverse transformation. The inverse of `teil`.
545 ++ fice :: adapted from
546 |= nor=@ :: black and rogaway
547 ^- @ :: "ciphers with
548 =+ ^= sel :: arbitrary finite
549 %+ rynd 2 :: domains", 2002
552 [(mod nor 65.535) (div nor 65.535)]
553 (add (mul 65.535 -.sel) +.sel)
563 > (fice:ob (teil:ob 11))
570Reverse Feistel-like cipher
572Applies the reverse of the Feistel-like cipher applied by `fice`. Unlike
573a conventional Feistel cipher that is its own inverse if keys are used in
574reverse order, this Feistel-like cipher uses two moduli that must be swapped
575when applying the reverse transformation.
588 ++ teil :: reverse ++fice
595 [(mod vip 65.535) (div vip 65.535)]
596 (add (mul 65.535 -.sel) +.sel)
607 > (teil:ob (fice:ob 11))
614Reverse Feistel-like cipher
616A single round of the Feistel-like cipher `fice`. AES ([`aesc`](../3f)) is
617used as the round function. The inverse of `rund`.
639 (~(sum fo 65.535) l (en:aesc (snag n raku) r))
640 (~(sum fo 65.536) l (en:aesc (snag n raku) r))
649 > (rynd:ob 2 (rund:ob 2 37.422 9))
656Reverse single Feistel-like
658A single round of the Feistel-like reverse cipher `teil`. AES ([`aesc`](../3f))
659is used as the round function. The inverse of `rynd`.
681 (~(dif fo 65.535) l (muk (snag n raku) 2 r))
682 (~(dif fo 65.536) l (muk (snag n raku) 2 r))
691 > (rund:ob 2 (rynd:ob 2 28.635 9))
700Produces a list of arbitrary hexademical keys for use with [`aesc`](../3f).
704A list of atoms of aura `@ux` (hexadecimal).
723 ~[0xb76d.5eed 0xee28.1300 0x85bc.ae01 0x4b38.7af7]
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list