2title = "3d: SHA Hash Family"
5aliases = ["/docs/reference/library/3d"]
11Produces an atom that is twice-hashed with `shax`, the SHA-256 cryptographic
25 ++ shad |=(ruz=@ (shax (shax ruz)))
32 \/20.519.637.820.582.103.109.435.907.615.585.653.479.776.629.591.855.451.248.\/
33 718.295.626.625.655.417.234
41Produces a 128-bit atom by performing the [bitwise XOR](@/docs/hoon/library/2d.md) on the
42first and last halves of the 256-bit salted hash `shas`.
53 ++ shaf :: half sha-256
56 (mix (end 7 1 haz) (rsh 7 1 haz))
63 52.667.672.807.485.289.251.324.336.639.183.409.041
66 \/0b1011.1111.1101.0110.1110.1000.0100.1110.1100.1000.0010.0100.1111.0001.0010.0010\/
67 .0100.1110.1110.0011.1100.1111.0001.1101.1101.1100.1110.1111.0100.0101.0001.0100
76Produces an atom by hashing an atom `ruz` with SHA-512. Another atom, `len`, is
77the byte-length of the theoretical buffer represented by the atom.
95 => .(ruz (cut 3 [0 len] ruz))
96 =+ [few==>(fe .(a 6)) wac=|=([a=@ b/@] (cut 6 [a 1] b))]
97 =+ [sum=sum.few ror=ror.few net=net.few inv=inv.few]
103 [(mod (sub 1.920 (mod (add 8 ral) 1.024)) 1.024) 0]
104 [128 (~(net fe 7) ral)]
107 =+ ^= kbx 0x6c44.198c.4a47.5817.5fcb.6fab.3ad6.faec.
108 597f.299c.fc65.7e2a.4cc5.d4be.cb3e.42b6.
109 431d.67c4.9c10.0d4c.3c9e.be0a.15c9.bebc.
110 32ca.ab7b.40c7.2493.28db.77f5.2304.7d84.
111 1b71.0b35.131c.471b.113f.9804.bef9.0dae.
112 0a63.7dc5.a2c8.98a6.06f0.67aa.7217.6fba.
113 f57d.4f7f.ee6e.d178.eada.7dd6.cde0.eb1e.
114 d186.b8c7.21c0.c207.ca27.3ece.ea26.619c.
115 c671.78f2.e372.532b.bef9.a3f7.b2c6.7915.
116 a450.6ceb.de82.bde9.90be.fffa.2363.1e28.
117 8cc7.0208.1a64.39ec.84c8.7814.a1f0.ab72.
118 78a5.636f.4317.2f60.748f.82ee.5def.b2fc.
119 682e.6ff3.d6b2.b8a3.5b9c.ca4f.7763.e373.
120 4ed8.aa4a.e341.8acb.391c.0cb3.c5c9.5a63.
121 34b0.bcb5.e19b.48a8.2748.774c.df8e.eb99.
122 1e37.6c08.5141.ab53.19a4.c116.b8d2.d0c8.
123 106a.a070.32bb.d1b8.f40e.3585.5771.202a.
124 d699.0624.5565.a910.d192.e819.d6ef.5218.
125 c76c.51a3.0654.be30.c24b.8b70.d0f8.9791.
126 a81a.664b.bc42.3001.a2bf.e8a1.4cf1.0364.
127 9272.2c85.1482.353b.81c2.c92e.47ed.aee6.
128 766a.0abb.3c77.b2a8.650a.7354.8baf.63de.
129 5338.0d13.9d95.b3df.4d2c.6dfc.5ac4.2aed.
130 2e1b.2138.5c26.c926.27b7.0a85.46d2.2ffc.
131 1429.2967.0a0e.6e70.06ca.6351.e003.826f.
132 d5a7.9147.930a.a725.c6e0.0bf3.3da8.8fc2.
133 bf59.7fc7.beef.0ee4.b003.27c8.98fb.213f.
134 a831.c66d.2db4.3210.983e.5152.ee66.dfab.
135 76f9.88da.8311.53b5.5cb0.a9dc.bd41.fbd4.
136 4a74.84aa.6ea6.e483.2de9.2c6f.592b.0275.
137 240c.a1cc.77ac.9c65.0fc1.9dc6.8b8c.d5b5.
138 efbe.4786.384f.25e3.e49b.69c1.9ef1.4ad2.
139 c19b.f174.cf69.2694.9bdc.06a7.25c7.1235.
140 80de.b1fe.3b16.96b1.72be.5d74.f27b.896f.
141 550c.7dc3.d5ff.b4e2.2431.85be.4ee4.b28c.
142 1283.5b01.4570.6fbe.d807.aa98.a303.0242.
143 ab1c.5ed5.da6d.8118.923f.82a4.af19.4f9b.
144 59f1.11f1.b605.d019.3956.c25b.f348.b538.
145 e9b5.dba5.8189.dbbc.b5c0.fbcf.ec4d.3b2f.
146 7137.4491.23ef.65cd.428a.2f98.d728.ae22
147 =+ ^= hax 0x5be0.cd19.137e.2179.1f83.d9ab.fb41.bd6b.
148 9b05.688c.2b3e.6c1f.510e.527f.ade6.82d1.
149 a54f.f53a.5f1d.36f1.3c6e.f372.fe94.f82b.
150 bb67.ae85.84ca.a73b.6a09.e667.f3bc.c908
154 (rep 6 (turn (rip 6 hax) net))
156 =+ dux=(cut 10 [i 1] ful)
157 =+ wox=(rep 6 (turn (rip 6 dux) net))
162 =+ :* l=(wac (sub j 15) wox)
163 m=(wac (sub j 2) wox)
164 n=(wac (sub j 16) wox)
165 o=(wac (sub j 7) wox)
167 =+ x=:(mix (ror 0 1 l) (ror 0 8 l) (rsh 0 7 l))
168 =+ y=:(mix (ror 0 19 m) (ror 0 61 m) (rsh 0 6 m))
170 $(wox (con (lsh 6 j z) wox), j +(j))
186 :~ (sum a (wac 0 hax))
196 =+ l=:(mix (ror 0 28 a) (ror 0 34 a) (ror 0 39 a)) :: S0
197 =+ m=:(mix (dis a b) (dis a c) (dis b c)) :: maj
199 =+ o=:(mix (ror 0 14 e) (ror 0 18 e) (ror 0 41 e)) :: S1
200 =+ p=(mix (dis e f) (dis (inv e) g)) :: ch
201 =+ q=:(sum h o p (wac j kbx) (wac j wox)) :: t1
202 $(j +(j), a (sum q n), b a, c b, d c, e (sum d q), f e, g f, h g)
209 \/7.956.615.373.791.575.273.027.009.123.631.914.645.972.441.264.528.176.292.399.908\/
210 .424.469.676.078.106.561.839.264.176.650.109.335.825.608.088.511.266.620.100.157.
211 847.055.280.028.606.252.747.432.021.213.474
215 \/7.956.615.373.791.575.273.027.009.123.631.914.645.972.441.264.528.176.292.399.908\/
216 .424.469.676.078.106.561.839.264.176.650.109.335.825.608.088.511.266.620.100.157.
217 847.055.280.028.606.252.747.432.021.213.474
223Because byte-strings can have leading zeros, but atoms cannot, we use `len`
224as a way of saying that the atom `ruz` is shorter than its representative
232Produces a 128-bit atom by hashing a noun `yux` with the `shah` function. If
233that noun is a cell, then it is passed to the [`jam`](../2p) function to produce
248 |= yux=* ^- @uvH ^- @
251 (shaf %sham (jam yux))
259 0v3.71s52.4bqnp.ki2b8.9hhsp.2ufgg
262 0v1.hg8mv.t7s3f.u4f8a.q5noe.dvqvh
270Produces an atom by hashing an atom `ruz` with SHA-1.
285 =+ [few==>(fe .(a 5)) wac=|=([a=@ b=@] (cut 5 [a 1] b))]
286 =+ [sum=sum.few ror=ror.few rol=rol.few net=net.few inv=inv.few]
287 =+ ral=(lsh 0 3 (met 3 ruz))
292 [(mod (sub 960 (mod (add 8 ral) 512)) 512) 0]
293 [64 (~(net fe 6) ral)]
296 =+ kbx=0xca62.c1d6.8f1b.bcdc.6ed9.eba1.5a82.7999
297 =+ hax=0xc3d2.e1f0.1032.5476.98ba.dcfe.efcd.ab89.6745.2301
301 (rep 5 (flop (rip 5 hax)))
303 =+ dux=(cut 9 [i 1] ful)
304 =+ wox=(rep 5 (turn (rip 5 dux) net))
309 =+ :* l=(wac (sub j 3) wox)
310 m=(wac (sub j 8) wox)
311 n=(wac (sub j 14) wox)
312 o=(wac (sub j 16) wox)
314 =+ z=(rol 0 1 :(mix l m n o))
315 $(wox (con (lsh 5 j z) wox), j +(j))
336 =+ fx=(con (dis b c) (dis (not 5 1 b) d))
338 =+ fz=:(con (dis b c) (dis b d) (dis c d))
340 ?: &((gte j 0) (lte j 19))
341 :(sum (rol 0 5 a) fx e (wac 0 kbx) (wac j wox))
342 ?: &((gte j 20) (lte j 39))
343 :(sum (rol 0 5 a) fy e (wac 1 kbx) (wac j wox))
344 ?: &((gte j 40) (lte j 59))
345 :(sum (rol 0 5 a) fz e (wac 2 kbx) (wac j wox))
346 :(sum (rol 0 5 a) fy e (wac 3 kbx) (wac j wox))
347 $(j +(j), a tem, b a, c (rol 0 30 b), d c, e d)
354 975.987.071.262.755.080.377.722.350.727.279.193.143.145.743.181
359SHA-1 is a deprecated function; it is not considered secure.
366Produces an atom by using SHA-256 plus a salt input. The [bitwise XOR](@/docs/hoon/library/2d.md)
367is performed on `sal` and the product of `ruz` hashed with SHA-256. The product
368of that logical operation is then itself hashed with SHA-256.
381 (shax (mix sal (shax ruz)))
388 \/111.115.941.493.032.291.043.932.789.632.248.509.108.945.255.494.251.860.287\/
389 .707.279.709.200.349.471.936
398Produces an atom of `len` random bits by hashing `ruz` with the salted
399SHA-256 hash algorithm, where `sal` is the cryptographic salt.
417 |= [sal=@ len=@ ruz=@]
418 (~(raw og (shas sal (mix len ruz))) len)
436Produces an atom by hashing an atom `ruz` with SHA-256.
444 (shay [(met 3 ruz) ruz])
451 \/16.552.786.619.039.860.277.601.417.878.457.384.195.409.020.923.835.016.617.984.82\/
452 0.774.431.701.725.740
461Produces an atom by hashing an atom `ruz` with SHA-512. Another atom, `len`, is
462the byte-length of the theoretical buffer represented by the atom.
475 |= [len=@u ruz=@] ^- @
476 => .(ruz (cut 3 [0 len] ruz))
477 =+ [few==>(fe .(a 5)) wac=|=([a=@ b=@] (cut 5 [a 1] b))]
478 =+ [sum=sum.few ror=ror.few net=net.few inv=inv.few]
484 [(mod (sub 960 (mod (add 8 ral) 512)) 512) 0]
485 [64 (~(net fe 6) ral)]
488 =+ ^= kbx 0xc671.78f2.bef9.a3f7.a450.6ceb.90be.fffa.
489 8cc7.0208.84c8.7814.78a5.636f.748f.82ee.
490 682e.6ff3.5b9c.ca4f.4ed8.aa4a.391c.0cb3.
491 34b0.bcb5.2748.774c.1e37.6c08.19a4.c116.
492 106a.a070.f40e.3585.d699.0624.d192.e819.
493 c76c.51a3.c24b.8b70.a81a.664b.a2bf.e8a1.
494 9272.2c85.81c2.c92e.766a.0abb.650a.7354.
495 5338.0d13.4d2c.6dfc.2e1b.2138.27b7.0a85.
496 1429.2967.06ca.6351.d5a7.9147.c6e0.0bf3.
497 bf59.7fc7.b003.27c8.a831.c66d.983e.5152.
498 76f9.88da.5cb0.a9dc.4a74.84aa.2de9.2c6f.
499 240c.a1cc.0fc1.9dc6.efbe.4786.e49b.69c1.
500 c19b.f174.9bdc.06a7.80de.b1fe.72be.5d74.
501 550c.7dc3.2431.85be.1283.5b01.d807.aa98.
502 ab1c.5ed5.923f.82a4.59f1.11f1.3956.c25b.
503 e9b5.dba5.b5c0.fbcf.7137.4491.428a.2f98
504 =+ ^= hax 0x5be0.cd19.1f83.d9ab.9b05.688c.510e.527f.
505 a54f.f53a.3c6e.f372.bb67.ae85.6a09.e667
509 (rep 5 (turn (rip 5 hax) net))
511 =+ dux=(cut 9 [i 1] ful)
512 =+ wox=(rep 5 (turn (rip 5 dux) net))
517 =+ :* l=(wac (sub j 15) wox)
518 m=(wac (sub j 2) wox)
519 n=(wac (sub j 16) wox)
520 o=(wac (sub j 7) wox)
522 =+ x=:(mix (ror 0 7 l) (ror 0 18 l) (rsh 0 3 l))
523 =+ y=:(mix (ror 0 17 m) (ror 0 19 m) (rsh 0 10 m))
525 $(wox (con (lsh 5 j z) wox), j +(j))
541 :~ (sum a (wac 0 hax))
551 =+ l=:(mix (ror 0 2 a) (ror 0 13 a) (ror 0 22 a)) :: s0
552 =+ m=:(mix (dis a b) (dis a c) (dis b c)) :: maj
554 =+ o=:(mix (ror 0 6 e) (ror 0 11 e) (ror 0 25 e)) :: s1
555 =+ p=(mix (dis e f) (dis (inv e) g)) :: ch
556 =+ q=:(sum h o p (wac j kbx) (wac j wox)) :: t1
557 $(j +(j), a (sum q n), b a, c b, d c, e (sum d q), f e, g f, h g)
564 \/16.144.219.278.061.159.438.339.586.294.967.166.038.336.988.797.862.808.055.174.98\/
565 7.398.597.302.069.674
569 \/100.467.333.538.737.303.691.714.735.404.408.035.555.613.179.595.938.688.113.300.8\/
570 01.974.878.934.544.183
576Because byte-strings can have leading zeros, but atoms cannot, we use `len`
577as a way of saying that the atom `ruz` is shorter than its representative
585Produces an atom by hashing an atom `ruz` with SHA-512.
600 (shal [(met 3 ruz) ruz])
607 \/3.548.533.422.469.437.734.729.094.584.175.910.682.076.656.883.559.953.324.378.007\/
608 .735.849.386.038.666.450.748.109.671.344.747.196.048.200.348.948.408.339.256.384.
609 360.070.359.656.053.016.948.640.159.265.179
616Container arm for SHA-256-powered random-number generation. Its sample `a` is an
617atom that is used as a seed for the hash.
639 <4.wmp {a/@ud <54.tyv 119.olq 31.ohr 1.jmk $143>}>
644Note that the product is deterministic; the seed will produce the same
645result every time it is run. Use `eny`, 256 bits of entropy, for a
646non-deterministic product.
653Produces a random number that is within the range of first `b` whole numbers,
670 ?:((lth c b) c $(a +(a)))
679 > (~(rad og 758.716.593) 11)
682 > (~(rad og 1) 100.000)
685 > (~(rad og eny) 11) :: `eny` acts as a random sample
694Produces a cell. The head of the cell is a random number that is within the
695range of first `b` whole numbers, starting at `0`. The tail is a new core
696produced from hashing the parent core with `(rad b)`.
712 [r +>.$(a (shas %og-s (mix a r)))]
719 [2 <4.wmp {a/@ <54.tyv 119.olq 31.ohr 1.jmk $143>}>]
722 =^ a rng (rads:rng 10)
723 =^ b rng (rads:rng 10)
730Since everything in Hoon is a pure function, we need to use tricks like this to
731generate separate random values from the same seed. Notice how we jump from
732one `rads` function call to another in the above example.
739Produces an atom with a bitwidth `b` that is composed of random bits.
757 =+ c=(shas %og-a (mix b a))
761 =+ d=(shas %og-b (mix b (mix a c)))
764 [[256 d] $(c d, b (sub b 256))]
770 > `@ud`(~(raw og 27) 4)
773 > `@ub`(~(raw og 27) 3)
776 > `@ub`(~(raw og 11) 4)
779 > `@ub`(~(raw og 11) 3)
786Random bits continuation
788Produces a cell. The head of the cell is an atom with a bitwidth `b` that is
789composed of random bits. The tail is a new core produced from hashing the
790parent core with `(raw b)`.
798 [r +>.$(a (shas %og-s r))]
805 > `[@ub _og]`(~(raws og 7) 4)
806 [0b1100 <4.wmp {a/@ <54.tyv 119.olq 31.ohr 1.jmk $143>}>]
809 =^ a rng (rads:rng 4)
810 =^ b rng (rads:rng 4)
817Since everything in Hoon is a pure function, we need to use tricks like this to
818generate separate random values from the same seed. Notice how we jump from
819one `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