From 3ef2611ff93722623507a955e104ee78576a20ec Mon Sep 17 00:00:00 2001 From: Max G Date: Sun, 3 May 2015 15:26:42 +0300 Subject: [PATCH 1/2] Jetted scrypt --- base/arvo/hoon.hoon | 178 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 178 insertions(+) diff --git a/base/arvo/hoon.hoon b/base/arvo/hoon.hoon index 2d38911a6..4f8e2b413 100644 --- a/base/arvo/hoon.hoon +++ b/base/arvo/hoon.hoon @@ -4930,6 +4930,184 @@ =((scam bb ss) (ward u.rr (scam u.aa h))) :: -- +:: +++ scr :: scrypt + ~% %scr + ~ + |% + ++ sal |= [x=@ r=@] :: salsa20 hash + ?> =((mod r 2) 0) :: with r rounds + =+ few==>(fe .(a 5)) + =+ ^= rot + |= [a=@ b=@] + (mix (end 5 1 (lsh 0 a b)) (rsh 0 (sub 32 a) b)) + =+ ^= lea + |= [a=@ b=@] + (net:few (sum:few (net:few a) (net:few b))) + => |% ++ qr :: quarterround + |= y=[@ @ @ @ ~] + =+ zb=(mix &2.y (rot 7 (sum:few &1.y &4.y))) + =+ zc=(mix &3.y (rot 9 (sum:few zb &1.y))) + =+ zd=(mix &4.y (rot 13 (sum:few zc zb))) + =+ za=(mix &1.y (rot 18 (sum:few zd zc))) + ~[za zb zc zd] + ++ rr :: rowround + |= [y=(list ,@)] + =+ za=(qr ~[&1.y &2.y &3.y &4.y]) + =+ zb=(qr ~[&6.y &7.y &8.y &5.y]) + =+ zc=(qr ~[&11.y &12.y &9.y &10.y]) + =+ zd=(qr ~[&16.y &13.y &14.y &15.y]) + ^- (list ,@) :~ + &1.za &2.za &3.za &4.za + &4.zb &1.zb &2.zb &3.zb + &3.zc &4.zc &1.zc &2.zc + &2.zd &3.zd &4.zd &1.zd + == + ++ cr :: columnround + |= [x=(list ,@)] + =+ ^= y %- rr ^- (list ,@) :~ + &1.x &5.x &9.x &13.x + &2.x &6.x &10.x &14.x + &3.x &7.x &11.x &15.x + &4.x &8.x &12.x &16.x + == + ^- (list ,@) :~ + &1.y &5.y &9.y &13.y + &2.y &6.y &10.y &14.y + &3.y &7.y &11.y &15.y + &4.y &8.y &12.y &16.y + == + ++ dr :: doubleround + |= [x=(list ,@)] + (rr (cr x)) + ++ al :: add two lists + |= [a=(list ,@) b=(list ,@)] + |- ^- (list ,@) + ?~ a ~ ?~ b ~ + [i=(sum:few -.a -.b) t=$(a +.a, b +.b)] + -- + =+ xw=(rpp 5 16 x) + =+ ^= ow |- ^- (list ,@) + ?~ r xw + $(xw (dr xw), r (sub r 2)) + (rep 5 (al xw ow)) + :: + ++ rpp |= [a=bloq b=@ c=@] :: rip w/filler blocks + =+ q=(rip a c) + =+ w=(lent q) + ?. =(w b) + ?. (lth w b) (slag (sub w b) q) + ^+ q (weld q (reap (sub b (lent q)) 0)) + q + :: + ++ xrl |= [a=(list ,@) b=(list ,@)] :: xor lists + |- ^- (list ,@) + ?~ a b ?~ b a + [i=(mix -.a -.b) t=$(a +.a, b +.b)] + :: + ++ xrm |= [a=(list (list ,@)) b=(list (list ,@))] + |- ^- (list (list ,@)) + ?~ a b ?~ b a + [i=(xrl -.a -.b) t=$(a +.a, b +.b)] + :: + ++ bls |= [a=@ b=(list ,@)] :: split to sublists + ?> =((mod (lent b) a) 0) + |- ^- (list (list ,@)) + ?~ b ~ + [i=(scag a `(list ,@)`b) t=$(b (slag a `(list ,@)`b))] + :: + ++ slb |= [a=(list (list ,@))] + |- ^- (list ,@) + ?~ a ~ + (weld `(list ,@)`-.a $(a +.a)) + :: + ++ sbm |= [r=@ b=(list ,@)] :: scryptBlockMix + ?> =((lent b) (mul 2 r)) + =+ [x=(snag (dec (mul 2 r)) b) c=0] + =| [ya=(list ,@) yb=(list ,@)] + |- ^- (list ,@) + ?~ b (flop (weld yb ya)) + =. x (sal (mix x -.b) 8) + ?~ (mod c 2) + $(c +(c), b +.b, ya [i=x t=ya]) + $(c +(c), b +.b, yb [i=x t=yb]) + :: + ++ srm |= [r=@ b=(list ,@) n=@] :: scryptROMix + ?> ?& + =((lent b) (mul 2 r)) + =(n (bex (dec (xeb n)))) + (lth n (bex (mul r 16))) + == + =| v=(list (list ,@)) + =+ c=0 + =. v + |- ^- (list (list ,@)) + =+ w=(sbm r b) + ?: =(c n) (flop v) + $(c +(c), v [i=[b] t=v], b w) + =+ x=(sbm r (snag (dec n) v)) + |- ^- (list ,@) + ?: =(c n) x + =+ q=(snag (dec (mul r 2)) x) + $(x (sbm r (xrl x (snag (mod q n) v))), c +(c)) + :: + ++ hmc |= [k=@ t=@] :: HMAC-SHA-256 + (hml k (met 3 k) t (met 3 t)) + :: + ++ hml |= [k=@ kl=@ t=@ tl=@] :: w/length + =. k (end 3 kl k) =. t (end 3 tl t) + =+ b=64 + =. k ?. (gth kl b) k (shay kl k) + =+ ^= q %+ shay (add b tl) + (add (lsh 3 b t) (mix k (fil 3 b 0x36))) + %+ shay (add b 32) + (add (lsh 3 b q) (mix k (fil 3 b 0x5c))) + :: + ++ pbk ~/ %pbk :: PBKDF2-HMAC-SHA256 + |= [p=@ s=@ c=@ d=@] + (pbl p (met 3 p) s (met 3 s) c d) + :: + ++ pbl ~/ %pbl :: w/length + |= [p=@ pl=@ s=@ sl=@ c=@ d=@] + =. p (end 3 pl p) =. s (end 3 sl s) + =+ h=32 + ?> (lte d (mul h (dec (bex 32)))) + =+ ^= l ?~ (mod d h) + (div d h) + +((div d h)) + =+ r=(sub d (mul h (dec l))) + =+ [t=0 j=1 k=1] + =. t |- ^- @ + ?: (gth j l) t + =+ u=(add s (lsh 3 sl (rep 3 (flop (rpp 3 4 j))))) + =+ f=0 =. f |- ^- @ + ?: (gth k c) f + =+ q=(hml p pl u ?:(=(k 1) (add sl 4) h)) + $(u q, f (mix f q), k +(k)) + $(t (add t (lsh 3 (mul (dec j) h) f)), j +(j)) + (end 3 d t) + :: + ++ hsh ~/ %hsh :: scrypt + |= [p=@ s=@ n=@ r=@ z=@ d=@] + (hsl p (met 3 p) s (met 3 s) n r z d) + :: + ++ hsl ~/ %hsl :: w/length + |= [p=@ pl=@ s=@ sl=@ n=@ r=@ z=@ d=@] + =| v=(list (list ,@)) + =. p (end 3 pl p) =. s (end 3 sl s) + =+ u=(mul (mul 128 r) z) + ?> =(n (bex (dec (xeb n)))) :: n is power of 2 + =+ ^= b =+ %^ rpp 3 u + (pbl p pl s sl 1 u) + %+ turn (bls (mul 128 r) -) + |=(a=(list ,@) (rpp 9 (mul 2 r) (rep 3 a))) + ?> =((lent b) z) + =+ ^= q + =+ |- ?~ b (flop v) + $(b +.b, v [i=(srm r -.b n) t=v]) + %+ turn `(list (list ,@))`- + |=(a=(list ,@) (rpp 3 (mul 128 r) (rep 9 a))) + (pbl p pl (rep 3 (slb q)) u 1 d) + -- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: section 2eY, SHA-256 (move me) :: :: From ffbc4366be128fe13e95f89fb1fb827e51c604bb Mon Sep 17 00:00:00 2001 From: Max G Date: Sun, 3 May 2015 23:45:41 +0300 Subject: [PATCH 2/2] new bounds --- base/arvo/hoon.hoon | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/base/arvo/hoon.hoon b/base/arvo/hoon.hoon index 4f8e2b413..763134027 100644 --- a/base/arvo/hoon.hoon +++ b/base/arvo/hoon.hoon @@ -5070,7 +5070,10 @@ |= [p=@ pl=@ s=@ sl=@ c=@ d=@] =. p (end 3 pl p) =. s (end 3 sl s) =+ h=32 - ?> (lte d (mul h (dec (bex 32)))) + ?> ?& (lte d (bex 30)) :: max key length 1GB + (lte c (bex 28)) :: max iterations 2^28 + !=(c 0) + == =+ ^= l ?~ (mod d h) (div d h) +((div d h)) @@ -5095,7 +5098,14 @@ =| v=(list (list ,@)) =. p (end 3 pl p) =. s (end 3 sl s) =+ u=(mul (mul 128 r) z) - ?> =(n (bex (dec (xeb n)))) :: n is power of 2 + ?> ?& =(n (bex (dec (xeb n)))) :: n is power of 2 + !=(r 0) !=(z 0) + %+ lte :: max 1GB memory + (mul (mul 128 r) (dec (add n z))) + (bex 30) + (lth pl (bex 31)) + (lth sl (bex 31)) + == =+ ^= b =+ %^ rpp 3 u (pbl p pl s sl 1 u) %+ turn (bls (mul 128 r) -)