From 4a6e71832fd435e99fd0e042e2212f6089c0dca5 Mon Sep 17 00:00:00 2001 From: Fang Date: Fri, 20 Jul 2018 00:20:19 +0200 Subject: [PATCH] Add RIPEMD-160 to zuse Jet hinted but not yet implemented. --- sys/zuse.hoon | 161 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 161 insertions(+) diff --git a/sys/zuse.hoon b/sys/zuse.hoon index 5499396344..b38a7e9b43 100644 --- a/sys/zuse.hoon +++ b/sys/zuse.hoon @@ -4182,6 +4182,167 @@ |= a=byts (prep-num a wid.a) -- + :: + ++ ripemd + ~% %ripemd ..is ~ + |% + ++ ripemd-160 + ~/ %ripemd160 + :: w: data size in bits + :: d: data to hash + |= byts + ^- @ + :: add padding + =+ (md5-pad wid dat) + :: endianness + =. dat + %+ rep 5 + %+ turn (rip 5 dat) + |=(a=@ (rev 3 4 a)) + =* x dat + =+ blocks=(div wid 512) + =+ fev=~(. fe 5) + :: initial register values + =+ h0=0x6745.2301 + =+ h1=0xefcd.ab89 + =+ h2=0x98ba.dcfe + =+ h3=0x1032.5476 + =+ h4=0xc3d2.e1f0 + :: i: current block + =+ [i=0 j=0] + =+ *[a=@ b=@ c=@ d=@ e=@] :: a..e + =+ *[aa=@ bb=@ cc=@ dd=@ ee=@] :: a'..e' + |^ + ?: =(i blocks) + %+ rep 5 + %+ turn `(list @)`~[h4 h3 h2 h1 h0] + :: endianness + |=(h=@ (rev 3 4 h)) + =: a h0 aa h0 + b h1 bb h1 + c h2 cc h2 + d h3 dd h3 + e h4 ee h4 + == + :: j: current word + =+ j=0 + |- + ?: =(j 80) + %= ^$ + i +(i) + h1 :(sum:fev h2 d ee) + h2 :(sum:fev h3 e aa) + h3 :(sum:fev h4 a bb) + h4 :(sum:fev h0 b cc) + h0 :(sum:fev h1 c dd) + == + %= $ + j +(j) + :: + a e + b (fn j a b c d e (get (r j)) (k j) (s j)) + c b + d (rol 10 c) + e d + :: + aa ee + bb (fn (sub 79 j) aa bb cc dd ee (get (rr j)) (kk j) (ss j)) + cc bb + dd (rol 10 cc) + ee dd + == + :: + ++ get :: word from x in block i + |= j=@ud + =+ (add (mul i 16) +(j)) + (cut 5 [(sub (mul blocks 16) -) 1] x) + :: + ++ fn + |= [j=@ud a=@ b=@ c=@ d=@ e=@ m=@ k=@ s=@] + =- (sum:fev (rol s :(sum:fev a m k -)) e) + =. j (div j 16) + ?: =(0 j) (mix (mix b c) d) + ?: =(1 j) (con (dis b c) (dis (not 0 32 b) d)) + ?: =(2 j) (mix (con b (not 0 32 c)) d) + ?: =(3 j) (con (dis b d) (dis c (not 0 32 d))) + ?: =(4 j) (mix b (con c (not 0 32 d))) + !! + :: + ++ rol (cury rol:fev 0) + :: + ++ k + |= j=@ud + =. j (div j 16) + ?: =(0 j) 0x0 + ?: =(1 j) 0x5a82.7999 + ?: =(2 j) 0x6ed9.eba1 + ?: =(3 j) 0x8f1b.bcdc + ?: =(4 j) 0xa953.fd4e + !! + :: + ++ kk :: k' + |= j=@ud + =. j (div j 16) + ?: =(0 j) 0x50a2.8be6 + ?: =(1 j) 0x5c4d.d124 + ?: =(2 j) 0x6d70.3ef3 + ?: =(3 j) 0x7a6d.76e9 + ?: =(4 j) 0x0 + !! + :: + ++ r + |= j=@ud + %+ snag j + ^- (list @) + :~ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 + 7 4 13 1 10 6 15 3 12 0 9 5 2 14 11 8 + 3 10 14 4 9 15 8 1 2 7 0 6 13 11 5 12 + 1 9 11 10 0 8 12 4 13 3 7 15 14 5 6 2 + 4 0 5 9 7 12 2 10 14 1 3 8 11 6 15 13 + == + :: + ++ rr :: r' + |= j=@ud + %+ snag j + ^- (list @) + :~ 5 14 7 0 9 2 11 4 13 6 15 8 1 10 3 12 + 6 11 3 7 0 13 5 10 14 15 8 12 4 9 1 2 + 15 5 1 3 7 14 6 9 11 8 12 2 10 0 4 13 + 8 6 4 1 3 11 15 0 5 12 2 13 9 7 10 14 + 12 15 10 4 1 5 8 7 6 2 13 14 0 3 9 11 + == + :: + ++ s + |= j=@ud + %+ snag j + ^- (list @) + :~ 11 14 15 12 5 8 7 9 11 13 14 15 6 7 9 8 + 7 6 8 13 11 9 7 15 7 12 15 9 11 7 13 12 + 11 13 6 7 14 9 13 15 14 8 13 6 5 12 7 5 + 11 12 14 15 14 15 9 8 9 14 5 6 8 6 5 12 + 9 15 5 11 6 8 13 12 5 12 13 14 11 8 5 6 + == + :: + ++ ss :: s' + |= j=@ud + %+ snag j + ^- (list @) + :~ 8 9 9 11 13 15 15 5 7 7 8 11 14 14 12 6 + 9 13 15 7 12 8 9 11 7 7 12 7 6 15 13 11 + 9 7 15 11 8 6 6 14 12 13 5 14 13 13 7 5 + 15 5 8 11 14 14 6 14 6 9 12 9 12 5 15 8 + 8 5 12 9 12 5 14 6 8 13 6 5 15 13 11 11 + == + -- + :: + ++ md5-pad + |= byts + ^- byts + =+ (sub 511 (mod (add wid 64) 512)) + :- :(add 64 +(-) wid) + %+ can 0 + ~[64^(rev 3 8 wid) +(-)^(lsh 0 - 1) wid^dat] + -- -- ::crypto :: :::: :::: ++unity :: (2c) unit promotion