on 8564483 help sign in
350 lines 9.9 kB history raw
1---
2navhome: /docs
3---
6# 3d: SHA hash family
8### `++og`
10 ++ og :: shax-powered rng
11 ~/ %og
12 |_ a/@
14XX document
16### `++rad`
18 ++ rad :: random in range
19 |= b/@ ^- @
20 =+ c=(raw (met 0 b))
21 ?:((lth c b) c $(a +(a)))
22 ::
24XX document
26### `++rads`
28 ++ rads :: random continuation
29 |= b/@
30 =+ r=(rad b)
31 [r +>.$(a (shas %og-s r))]
33XX document
35### `++raw`
37 ++ raw :: random bits
38 ~/ %raw
39 |= b/@ ^- @
40 %+ can
41 0
42 =+ c=(shas %og-a (mix b a))
43 |- ^- (list [@ @])
44 ?: =(0 b)
45 ~
46 =+ d=(shas %og-b (mix b (mix a c)))
47 ?: (lth b 256)
48 [[b (end 0 b d)] ~]
49 [[256 d] $(c d, b (sub b 256))]
51XX document
53### `++raws`
55 ++ raws :: random bits continuation
56 |= b/@
57 =+ r=(raw b)
58 [r +>.$(a (shas %og-s r))]
59 --
63***
64### `++shad`
66 ++ shad |=(ruz/@ (shax (shax ruz))) :: double sha-256
69XX document
73***
74### `++shaf`
76 ++ shaf :: half sha-256
77 |= [sal/@ ruz/@]
78 =+ haz=(shas sal ruz)
79 (mix (end 7 1 haz) (rsh 7 1 haz))
80 ::
82XX document
86***
87### `++shak`
89 ++ shak :: XX shd be PBKDF
90 |= [who/@p wud/@]
91 (shas (mix %shak who) wud)
92 ::
94XX document
98***
99### `++shal`
101 ++ shal :: sha-512 with length
102 ~/ %shal
103 |= {len/@ ruz/@} ^- @
104 => .(ruz (cut 3 [0 len] ruz))
105 =+ [few==>(fe .(a 6)) wac=|=({a/@ b/@} (cut 6 [a 1] b))]
106 =+ [sum=sum.few ror=ror.few net=net.few inv=inv.few]
107 =+ ral=(lsh 0 3 len)
108 =+ ^= ful
109 %+ can 0
110 :~ [ral ruz]
111 [8 128]
112 [(mod (sub 1.920 (mod (add 8 ral) 1.024)) 1.024) 0]
113 [128 (~(net fe 7) ral)]
114 ==
115 =+ lex=(met 10 ful)
116 =+ ^= kbx 0x6c44.198c.4a47.5817.5fcb.6fab.3ad6.faec.
117 597f.299c.fc65.7e2a.4cc5.d4be.cb3e.42b6.
118 431d.67c4.9c10.0d4c.3c9e.be0a.15c9.bebc.
119 32ca.ab7b.40c7.2493.28db.77f5.2304.7d84.
120 1b71.0b35.131c.471b.113f.9804.bef9.0dae.
121 0a63.7dc5.a2c8.98a6.06f0.67aa.7217.6fba.
122 f57d.4f7f.ee6e.d178.eada.7dd6.cde0.eb1e.
123 d186.b8c7.21c0.c207.ca27.3ece.ea26.619c.
124 c671.78f2.e372.532b.bef9.a3f7.b2c6.7915.
125 a450.6ceb.de82.bde9.90be.fffa.2363.1e28.
126 8cc7.0208.1a64.39ec.84c8.7814.a1f0.ab72.
127 78a5.636f.4317.2f60.748f.82ee.5def.b2fc.
128 682e.6ff3.d6b2.b8a3.5b9c.ca4f.7763.e373.
129 4ed8.aa4a.e341.8acb.391c.0cb3.c5c9.5a63.
130 34b0.bcb5.e19b.48a8.2748.774c.df8e.eb99.
131 1e37.6c08.5141.ab53.19a4.c116.b8d2.d0c8.
132 106a.a070.32bb.d1b8.f40e.3585.5771.202a.
133 d699.0624.5565.a910.d192.e819.d6ef.5218.
134 c76c.51a3.0654.be30.c24b.8b70.d0f8.9791.
135 a81a.664b.bc42.3001.a2bf.e8a1.4cf1.0364.
136 9272.2c85.1482.353b.81c2.c92e.47ed.aee6.
137 766a.0abb.3c77.b2a8.650a.7354.8baf.63de.
138 5338.0d13.9d95.b3df.4d2c.6dfc.5ac4.2aed.
139 2e1b.2138.5c26.c926.27b7.0a85.46d2.2ffc.
140 1429.2967.0a0e.6e70.06ca.6351.e003.826f.
141 d5a7.9147.930a.a725.c6e0.0bf3.3da8.8fc2.
142 bf59.7fc7.beef.0ee4.b003.27c8.98fb.213f.
143 a831.c66d.2db4.3210.983e.5152.ee66.dfab.
144 76f9.88da.8311.53b5.5cb0.a9dc.bd41.fbd4.
145 4a74.84aa.6ea6.e483.2de9.2c6f.592b.0275.
146 240c.a1cc.77ac.9c65.0fc1.9dc6.8b8c.d5b5.
147 efbe.4786.384f.25e3.e49b.69c1.9ef1.4ad2.
148 c19b.f174.cf69.2694.9bdc.06a7.25c7.1235.
149 80de.b1fe.3b16.96b1.72be.5d74.f27b.896f.
150 550c.7dc3.d5ff.b4e2.2431.85be.4ee4.b28c.
151 1283.5b01.4570.6fbe.d807.aa98.a303.0242.
152 ab1c.5ed5.da6d.8118.923f.82a4.af19.4f9b.
153 59f1.11f1.b605.d019.3956.c25b.f348.b538.
154 e9b5.dba5.8189.dbbc.b5c0.fbcf.ec4d.3b2f.
155 7137.4491.23ef.65cd.428a.2f98.d728.ae22
156 =+ ^= hax 0x5be0.cd19.137e.2179.1f83.d9ab.fb41.bd6b.
157 9b05.688c.2b3e.6c1f.510e.527f.ade6.82d1.
158 a54f.f53a.5f1d.36f1.3c6e.f372.fe94.f82b.
159 bb67.ae85.84ca.a73b.6a09.e667.f3bc.c908
160 =+ i=0
161 |- ^- @
162 ?: =(i lex)
163 (rep 6 (turn (rip 6 hax) net))
164 =+ ^= wox
165 =+ dux=(cut 10 [i 1] ful)
166 =+ wox=(rep 6 (turn (rip 6 dux) net))
167 =+ j=16
168 |- ^- @
169 ?: =(80 j)
170 wox
171 =+ :* l=(wac (sub j 15) wox)
172 m=(wac (sub j 2) wox)
173 n=(wac (sub j 16) wox)
174 o=(wac (sub j 7) wox)
175 ==
176 =+ x=:(mix (ror 0 1 l) (ror 0 8 l) (rsh 0 7 l))
177 =+ y=:(mix (ror 0 19 m) (ror 0 61 m) (rsh 0 6 m))
178 =+ z=:(sum n x o y)
179 $(wox (con (lsh 6 j z) wox), j +(j))
180 =+ j=0
181 =+ :* a=(wac 0 hax)
182 b=(wac 1 hax)
183 c=(wac 2 hax)
184 d=(wac 3 hax)
185 e=(wac 4 hax)
186 f=(wac 5 hax)
187 g=(wac 6 hax)
188 h=(wac 7 hax)
189 ==
190 |- ^- @
191 ?: =(80 j)
192 %= ^$
193 i +(i)
194 hax %+ rep 6
195 :~ (sum a (wac 0 hax))
196 (sum b (wac 1 hax))
197 (sum c (wac 2 hax))
198 (sum d (wac 3 hax))
199 (sum e (wac 4 hax))
200 (sum f (wac 5 hax))
201 (sum g (wac 6 hax))
202 (sum h (wac 7 hax))
203 ==
204 ==
205 =+ l=:(mix (ror 0 28 a) (ror 0 34 a) (ror 0 39 a)) :: S0
206 =+ m=:(mix (dis a b) (dis a c) (dis b c)) :: maj
207 =+ n=(sum l m) :: t2
208 =+ o=:(mix (ror 0 14 e) (ror 0 18 e) (ror 0 41 e)) :: S1
209 =+ p=(mix (dis e f) (dis (inv e) g)) :: ch
210 =+ q=:(sum h o p (wac j kbx) (wac j wox)) :: t1
211 $(j +(j), a (sum q n), b a, c b, d c, e (sum d q), f e, g f, h g)
212 ::
214XX document
218***
219### `++sham`
221 ++ sham :: noun hash
222 |= yux/* ^- @uvH ^- @
223 ?@ yux
224 (shaf %mash yux)
225 (shaf %sham (jam yux))
226 ::
228XX document
232***
233### `++shan`
235 ++ shan :: sha-1 (deprecated)
236 |= ruz/@
237 =+ [few==>(fe .(a 5)) wac=|=({a/@ b/@} (cut 5 [a 1] b))]
238 =+ [sum=sum.few ror=ror.few rol=rol.few net=net.few inv=inv.few]
239 =+ ral=(lsh 0 3 (met 3 ruz))
240 =+ ^= ful
241 %+ can 0
242 :~ [ral ruz]
243 [8 128]
244 [(mod (sub 960 (mod (add 8 ral) 512)) 512) 0]
245 [64 (~(net fe 6) ral)]
246 ==
247 =+ lex=(met 9 ful)
248 =+ kbx=0xca62.c1d6.8f1b.bcdc.6ed9.eba1.5a82.7999
249 =+ hax=0xc3d2.e1f0.1032.5476.98ba.dcfe.efcd.ab89.6745.2301
250 =+ i=0
251 |-
252 ?: =(i lex)
253 (rep 5 (flop (rip 5 hax)))
254 =+ ^= wox
255 =+ dux=(cut 9 [i 1] ful)
256 =+ wox=(rep 5 (turn (rip 5 dux) net))
257 =+ j=16
258 |- ^- @
259 ?: =(80 j)
260 wox
261 =+ :* l=(wac (sub j 3) wox)
262 m=(wac (sub j 8) wox)
263 n=(wac (sub j 14) wox)
264 o=(wac (sub j 16) wox)
265 ==
266 =+ z=(rol 0 1 :(mix l m n o))
267 $(wox (con (lsh 5 j z) wox), j +(j))
268 =+ j=0
269 =+ :* a=(wac 0 hax)
270 b=(wac 1 hax)
271 c=(wac 2 hax)
272 d=(wac 3 hax)
273 e=(wac 4 hax)
274 ==
275 |- ^- @
276 ?: =(80 j)
277 %= ^$
278 i +(i)
279 hax %+ rep 5
280 :~
281 (sum a (wac 0 hax))
282 (sum b (wac 1 hax))
283 (sum c (wac 2 hax))
284 (sum d (wac 3 hax))
285 (sum e (wac 4 hax))
286 ==
287 ==
288 =+ fx=(con (dis b c) (dis (not 5 1 b) d))
289 =+ fy=:(mix b c d)
290 =+ fz=:(con (dis b c) (dis b d) (dis c d))
291 =+ ^= tem
292 ?: &((gte j 0) (lte j 19))
293 :(sum (rol 0 5 a) fx e (wac 0 kbx) (wac j wox))
294 ?: &((gte j 20) (lte j 39))
295 :(sum (rol 0 5 a) fy e (wac 1 kbx) (wac j wox))
296 ?: &((gte j 40) (lte j 59))
297 :(sum (rol 0 5 a) fz e (wac 2 kbx) (wac j wox))
298 :(sum (rol 0 5 a) fy e (wac 3 kbx) (wac j wox))
299 $(j +(j), a tem, b a, c (rol 0 30 b), d c, e d)
300 ::
302XX document
306***
307### `++shas`
309 ++ shas :: salted hash
310 |= [sal/@ ruz/@]
311 (shax (mix sal (shax ruz)))
312 ::
314XX document
318***
319### `++shaw`
321 ++ shaw :: hash to nbits
322 |= [sal/@ len/@ ruz/@]
323 (~(raw og (shas sal (mix len ruz))) len)
324 ::
328***
329### `++shax`
331++ shax :: sha-256
332 ~/ %shax
333 |= ruz/@ ^- @
334 (shay [(met 3 ruz) ruz])
335::
337XX document
341***
342### `++shaz`
344 ++ shaz :: sha-512
345 |= ruz/@ ^- @
346 (shal [(met 3 ruz) ruz])
350***