mirror of
https://github.com/urbit/shrub.git
synced 2024-12-12 10:29:01 +03:00
Add RIPEMD-160 to zuse
Jet hinted but not yet implemented.
This commit is contained in:
parent
df63ff6208
commit
4a6e71832f
161
sys/zuse.hoon
161
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
|
||||
|
Loading…
Reference in New Issue
Block a user