3 title/'3d: SHA Hash Family'
14Produces an atom that is twice-hashed with `shax`, the SHA-256 cryptographic
28 ++ shad |=(ruz=@ (shax (shax ruz)))
35 \/20.519.637.820.582.103.109.435.907.615.585.653.479.776.629.591.855.451.248.\/
36 718.295.626.625.655.417.234
44Produces a 128-bit atom by performing the [bitwise XOR](2d/..) on the
45first and last halves of the 256-bit salted hash `shas`.
56 ++ shaf :: half sha-256
59 (mix (end 7 1 haz) (rsh 7 1 haz))
66 52.667.672.807.485.289.251.324.336.639.183.409.041
69 \/0b1011.1111.1101.0110.1110.1000.0100.1110.1100.1000.0010.0100.1111.0001.0010.0010\/
70 .0100.1110.1110.0011.1100.1111.0001.1101.1101.1100.1110.1111.0100.0101.0001.0100
79Produces an atom by hashing an atom `ruz` with SHA-512. Another atom, `len`, is
80the byte-length of the theoretical buffer represented by the atom.
98 => .(ruz (cut 3 [0 len] ruz))
99 =+ [few==>(fe .(a 6)) wac=|=([a=@ b/@] (cut 6 [a 1] b))]
100 =+ [sum=sum.few ror=ror.few net=net.few inv=inv.few]
106 [(mod (sub 1.920 (mod (add 8 ral) 1.024)) 1.024) 0]
107 [128 (~(net fe 7) ral)]
110 =+ ^= kbx 0x6c44.198c.4a47.5817.5fcb.6fab.3ad6.faec.
111 597f.299c.fc65.7e2a.4cc5.d4be.cb3e.42b6.
112 431d.67c4.9c10.0d4c.3c9e.be0a.15c9.bebc.
113 32ca.ab7b.40c7.2493.28db.77f5.2304.7d84.
114 1b71.0b35.131c.471b.113f.9804.bef9.0dae.
115 0a63.7dc5.a2c8.98a6.06f0.67aa.7217.6fba.
116 f57d.4f7f.ee6e.d178.eada.7dd6.cde0.eb1e.
117 d186.b8c7.21c0.c207.ca27.3ece.ea26.619c.
118 c671.78f2.e372.532b.bef9.a3f7.b2c6.7915.
119 a450.6ceb.de82.bde9.90be.fffa.2363.1e28.
120 8cc7.0208.1a64.39ec.84c8.7814.a1f0.ab72.
121 78a5.636f.4317.2f60.748f.82ee.5def.b2fc.
122 682e.6ff3.d6b2.b8a3.5b9c.ca4f.7763.e373.
123 4ed8.aa4a.e341.8acb.391c.0cb3.c5c9.5a63.
124 34b0.bcb5.e19b.48a8.2748.774c.df8e.eb99.
125 1e37.6c08.5141.ab53.19a4.c116.b8d2.d0c8.
126 106a.a070.32bb.d1b8.f40e.3585.5771.202a.
127 d699.0624.5565.a910.d192.e819.d6ef.5218.
128 c76c.51a3.0654.be30.c24b.8b70.d0f8.9791.
129 a81a.664b.bc42.3001.a2bf.e8a1.4cf1.0364.
130 9272.2c85.1482.353b.81c2.c92e.47ed.aee6.
131 766a.0abb.3c77.b2a8.650a.7354.8baf.63de.
132 5338.0d13.9d95.b3df.4d2c.6dfc.5ac4.2aed.
133 2e1b.2138.5c26.c926.27b7.0a85.46d2.2ffc.
134 1429.2967.0a0e.6e70.06ca.6351.e003.826f.
135 d5a7.9147.930a.a725.c6e0.0bf3.3da8.8fc2.
136 bf59.7fc7.beef.0ee4.b003.27c8.98fb.213f.
137 a831.c66d.2db4.3210.983e.5152.ee66.dfab.
138 76f9.88da.8311.53b5.5cb0.a9dc.bd41.fbd4.
139 4a74.84aa.6ea6.e483.2de9.2c6f.592b.0275.
140 240c.a1cc.77ac.9c65.0fc1.9dc6.8b8c.d5b5.
141 efbe.4786.384f.25e3.e49b.69c1.9ef1.4ad2.
142 c19b.f174.cf69.2694.9bdc.06a7.25c7.1235.
143 80de.b1fe.3b16.96b1.72be.5d74.f27b.896f.
144 550c.7dc3.d5ff.b4e2.2431.85be.4ee4.b28c.
145 1283.5b01.4570.6fbe.d807.aa98.a303.0242.
146 ab1c.5ed5.da6d.8118.923f.82a4.af19.4f9b.
147 59f1.11f1.b605.d019.3956.c25b.f348.b538.
148 e9b5.dba5.8189.dbbc.b5c0.fbcf.ec4d.3b2f.
149 7137.4491.23ef.65cd.428a.2f98.d728.ae22
150 =+ ^= hax 0x5be0.cd19.137e.2179.1f83.d9ab.fb41.bd6b.
151 9b05.688c.2b3e.6c1f.510e.527f.ade6.82d1.
152 a54f.f53a.5f1d.36f1.3c6e.f372.fe94.f82b.
153 bb67.ae85.84ca.a73b.6a09.e667.f3bc.c908
157 (rep 6 (turn (rip 6 hax) net))
159 =+ dux=(cut 10 [i 1] ful)
160 =+ wox=(rep 6 (turn (rip 6 dux) net))
165 =+ :* l=(wac (sub j 15) wox)
166 m=(wac (sub j 2) wox)
167 n=(wac (sub j 16) wox)
168 o=(wac (sub j 7) wox)
170 =+ x=:(mix (ror 0 1 l) (ror 0 8 l) (rsh 0 7 l))
171 =+ y=:(mix (ror 0 19 m) (ror 0 61 m) (rsh 0 6 m))
173 $(wox (con (lsh 6 j z) wox), j +(j))
189 :~ (sum a (wac 0 hax))
199 =+ l=:(mix (ror 0 28 a) (ror 0 34 a) (ror 0 39 a)) :: S0
200 =+ m=:(mix (dis a b) (dis a c) (dis b c)) :: maj
202 =+ o=:(mix (ror 0 14 e) (ror 0 18 e) (ror 0 41 e)) :: S1
203 =+ p=(mix (dis e f) (dis (inv e) g)) :: ch
204 =+ q=:(sum h o p (wac j kbx) (wac j wox)) :: t1
205 $(j +(j), a (sum q n), b a, c b, d c, e (sum d q), f e, g f, h g)
212 \/7.956.615.373.791.575.273.027.009.123.631.914.645.972.441.264.528.176.292.399.908\/
213 .424.469.676.078.106.561.839.264.176.650.109.335.825.608.088.511.266.620.100.157.
214 847.055.280.028.606.252.747.432.021.213.474
218 \/7.956.615.373.791.575.273.027.009.123.631.914.645.972.441.264.528.176.292.399.908\/
219 .424.469.676.078.106.561.839.264.176.650.109.335.825.608.088.511.266.620.100.157.
220 847.055.280.028.606.252.747.432.021.213.474
226Because byte-strings can have leading zeros, but atoms cannot, we use `len`
227as a way of saying that the atom `ruz` is shorter than its representative
235Produces a 128-bit atom by hashing a noun `yux` with the `shah` function. If
236that noun is a cell, then it is passed to the [`jam`](../2p) function to produce
251 |= yux=* ^- @uvH ^- @
254 (shaf %sham (jam yux))
262 0v3.71s52.4bqnp.ki2b8.9hhsp.2ufgg
265 0v1.hg8mv.t7s3f.u4f8a.q5noe.dvqvh
273Produces an atom by hashing an atom `ruz` with SHA-1.
288 =+ [few==>(fe .(a 5)) wac=|=([a=@ b=@] (cut 5 [a 1] b))]
289 =+ [sum=sum.few ror=ror.few rol=rol.few net=net.few inv=inv.few]
290 =+ ral=(lsh 0 3 (met 3 ruz))
295 [(mod (sub 960 (mod (add 8 ral) 512)) 512) 0]
296 [64 (~(net fe 6) ral)]
299 =+ kbx=0xca62.c1d6.8f1b.bcdc.6ed9.eba1.5a82.7999
300 =+ hax=0xc3d2.e1f0.1032.5476.98ba.dcfe.efcd.ab89.6745.2301
304 (rep 5 (flop (rip 5 hax)))
306 =+ dux=(cut 9 [i 1] ful)
307 =+ wox=(rep 5 (turn (rip 5 dux) net))
312 =+ :* l=(wac (sub j 3) wox)
313 m=(wac (sub j 8) wox)
314 n=(wac (sub j 14) wox)
315 o=(wac (sub j 16) wox)
317 =+ z=(rol 0 1 :(mix l m n o))
318 $(wox (con (lsh 5 j z) wox), j +(j))
339 =+ fx=(con (dis b c) (dis (not 5 1 b) d))
341 =+ fz=:(con (dis b c) (dis b d) (dis c d))
343 ?: &((gte j 0) (lte j 19))
344 :(sum (rol 0 5 a) fx e (wac 0 kbx) (wac j wox))
345 ?: &((gte j 20) (lte j 39))
346 :(sum (rol 0 5 a) fy e (wac 1 kbx) (wac j wox))
347 ?: &((gte j 40) (lte j 59))
348 :(sum (rol 0 5 a) fz e (wac 2 kbx) (wac j wox))
349 :(sum (rol 0 5 a) fy e (wac 3 kbx) (wac j wox))
350 $(j +(j), a tem, b a, c (rol 0 30 b), d c, e d)
357 975.987.071.262.755.080.377.722.350.727.279.193.143.145.743.181
362SHA-1 is a deprecated function; it is not considered secure.
369Produces an atom by using SHA-256 plus a salt input. The [bitwise XOR](../2d)
370is performed on `sal` and the product of `ruz` hashed with SHA-256. The product
371of that logical operation is then itself hashed with SHA-256.
384 (shax (mix sal (shax ruz)))
391 \/111.115.941.493.032.291.043.932.789.632.248.509.108.945.255.494.251.860.287\/
392 .707.279.709.200.349.471.936
401Produces an atom of `len` random bits by hashing `ruz` with the salted
402SHA-256 hash algorithm, where `sal` is the cryptographic salt.
420 |= [sal=@ len=@ ruz=@]
421 (~(raw og (shas sal (mix len ruz))) len)
439Produces an atom by hashing an atom `ruz` with SHA-256.
447 (shay [(met 3 ruz) ruz])
454 \/16.552.786.619.039.860.277.601.417.878.457.384.195.409.020.923.835.016.617.984.82\/
455 0.774.431.701.725.740
464Produces an atom by hashing an atom `ruz` with SHA-512. Another atom, `len`, is
465the byte-length of the theoretical buffer represented by the atom.
478 |= [len=@u ruz=@] ^- @
479 => .(ruz (cut 3 [0 len] ruz))
480 =+ [few==>(fe .(a 5)) wac=|=([a=@ b=@] (cut 5 [a 1] b))]
481 =+ [sum=sum.few ror=ror.few net=net.few inv=inv.few]
487 [(mod (sub 960 (mod (add 8 ral) 512)) 512) 0]
488 [64 (~(net fe 6) ral)]
491 =+ ^= kbx 0xc671.78f2.bef9.a3f7.a450.6ceb.90be.fffa.
492 8cc7.0208.84c8.7814.78a5.636f.748f.82ee.
493 682e.6ff3.5b9c.ca4f.4ed8.aa4a.391c.0cb3.
494 34b0.bcb5.2748.774c.1e37.6c08.19a4.c116.
495 106a.a070.f40e.3585.d699.0624.d192.e819.
496 c76c.51a3.c24b.8b70.a81a.664b.a2bf.e8a1.
497 9272.2c85.81c2.c92e.766a.0abb.650a.7354.
498 5338.0d13.4d2c.6dfc.2e1b.2138.27b7.0a85.
499 1429.2967.06ca.6351.d5a7.9147.c6e0.0bf3.
500 bf59.7fc7.b003.27c8.a831.c66d.983e.5152.
501 76f9.88da.5cb0.a9dc.4a74.84aa.2de9.2c6f.
502 240c.a1cc.0fc1.9dc6.efbe.4786.e49b.69c1.
503 c19b.f174.9bdc.06a7.80de.b1fe.72be.5d74.
504 550c.7dc3.2431.85be.1283.5b01.d807.aa98.
505 ab1c.5ed5.923f.82a4.59f1.11f1.3956.c25b.
506 e9b5.dba5.b5c0.fbcf.7137.4491.428a.2f98
507 =+ ^= hax 0x5be0.cd19.1f83.d9ab.9b05.688c.510e.527f.
508 a54f.f53a.3c6e.f372.bb67.ae85.6a09.e667
512 (rep 5 (turn (rip 5 hax) net))
514 =+ dux=(cut 9 [i 1] ful)
515 =+ wox=(rep 5 (turn (rip 5 dux) net))
520 =+ :* l=(wac (sub j 15) wox)
521 m=(wac (sub j 2) wox)
522 n=(wac (sub j 16) wox)
523 o=(wac (sub j 7) wox)
525 =+ x=:(mix (ror 0 7 l) (ror 0 18 l) (rsh 0 3 l))
526 =+ y=:(mix (ror 0 17 m) (ror 0 19 m) (rsh 0 10 m))
528 $(wox (con (lsh 5 j z) wox), j +(j))
544 :~ (sum a (wac 0 hax))
554 =+ l=:(mix (ror 0 2 a) (ror 0 13 a) (ror 0 22 a)) :: s0
555 =+ m=:(mix (dis a b) (dis a c) (dis b c)) :: maj
557 =+ o=:(mix (ror 0 6 e) (ror 0 11 e) (ror 0 25 e)) :: s1
558 =+ p=(mix (dis e f) (dis (inv e) g)) :: ch
559 =+ q=:(sum h o p (wac j kbx) (wac j wox)) :: t1
560 $(j +(j), a (sum q n), b a, c b, d c, e (sum d q), f e, g f, h g)
567 \/16.144.219.278.061.159.438.339.586.294.967.166.038.336.988.797.862.808.055.174.98\/
568 7.398.597.302.069.674
572 \/100.467.333.538.737.303.691.714.735.404.408.035.555.613.179.595.938.688.113.300.8\/
573 01.974.878.934.544.183
579Because byte-strings can have leading zeros, but atoms cannot, we use `len`
580as a way of saying that the atom `ruz` is shorter than its representative
588Produces an atom by hashing an atom `ruz` with SHA-512.
603 (shal [(met 3 ruz) ruz])
610 \/3.548.533.422.469.437.734.729.094.584.175.910.682.076.656.883.559.953.324.378.007\/
611 .735.849.386.038.666.450.748.109.671.344.747.196.048.200.348.948.408.339.256.384.
612 360.070.359.656.053.016.948.640.159.265.179
619Container arm for SHA-256-powered random-number generation. Its sample `a` is an
620atom that is used as a seed for the hash.
642 <4.wmp {a/@ud <54.tyv 119.olq 31.ohr 1.jmk $143>}>
647Note that the product is deterministic; the seed will produce the same
648result every time it is run. Use `eny`, 256 bits of entropy, for a
649non-deterministic product.
656Produces a random number that is within the range of first `b` whole numbers,
673 ?:((lth c b) c $(a +(a)))
682 > (~(rad og 758.716.593) 11)
685 > (~(rad og 1) 100.000)
688 > (~(rad og eny) 11) :: `eny` acts as a random sample
697Produces a cell. The head of the cell is a random number that is within the
698range of first `b` whole numbers, starting at `0`. The tail is a new core
699produced from hashing the parent core with `(rad b)`.
715 [r +>.$(a (shas %og-s (mix a r)))]
722 [2 <4.wmp {a/@ <54.tyv 119.olq 31.ohr 1.jmk $143>}>]
725 =^ a rng (rads:rng 10)
726 =^ b rng (rads:rng 10)
733Since everything in Hoon is a pure function, we need to use tricks like this to
734generate separate random values from the same seed. Notice how we jump from
735one `rads` function call to another in the above example.
742Produces an atom with a bitwidth `b` that is composed of random bits.
760 =+ c=(shas %og-a (mix b a))
764 =+ d=(shas %og-b (mix b (mix a c)))
767 [[256 d] $(c d, b (sub b 256))]
773 > `@ud`(~(raw og 27) 4)
776 > `@ub`(~(raw og 27) 3)
779 > `@ub`(~(raw og 11) 4)
782 > `@ub`(~(raw og 11) 3)
789Random bits continuation
791Produces a cell. The head of the cell is an atom with a bitwidth `b` that is
792composed of random bits. The tail is a new core produced from hashing the
793parent core with `(raw b)`.
801 [r +>.$(a (shas %og-s r))]
808 > `[@ub _og]`(~(raws og 7) 4)
809 [0b1100 <4.wmp {a/@ <54.tyv 119.olq 31.ohr 1.jmk $143>}>]
812 =^ a rng (rads:rng 4)
813 =^ b rng (rads:rng 4)
820Since everything in Hoon is a pure function, we need to use tricks like this to
821generate separate random values from the same seed. Notice how we jump from
822one `raws` function call to another in the above example.
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