i cannot find the mistake i made with this code. i have tried many different ways to create ripemd160, but they either don't work or give me wrong outputs.

what did i do wrong?

``````#     makehex() = change the value into a 8 hex char string
#     ROL i got from another code, and I know it works
#     little_end() = move each byte (2 hex chars) to the other end of the string

def F(x,y,z,round):
if round<16:
return x ^ y ^ z
elif 16<=round<32:
return (x & y) | (~x & z)
elif 32<=round<48:
return (x | ~y) ^ z
elif 48<=round<64:
return (x & z) | (y & ~z)
elif 64<=round:
return x ^ (y | ~z)

def RIPEMD160(data):
# the constants (r, rr, s, ss) should be right. i copied them right off of the original paper and checked them with other codes, and i dont think i found any errors
# i know the padding is correct. i copied it from my md4 program, which is also correct

# its most likely that something here is wrong
for i in range(number of blocks of 512 bits):

# single chars are the first round, double is the parallel round
a = aa = h0; b = bb = h1; c = cc = h2; d = dd = h3; e = ee = h4
X = data[512*i:512*(i+1)]
X = [int(X[32*x:32*(x+1)],2) for x in range(16)]

for j in range(80):
T = (a+ ROL( (F(b, c, d, j) + X[r[j]] + k[j/16])%2**32,s[j])+e)%2**32
a = e; e = d; d = ROL(c, 10); c = b; a = T
T = (aa+ ROL( (F(bb,cc,dd,79-j) + X[rr[j]] + kk[j/16] )%2**32,ss[j])+ee)%2**32
aa = ee; ee = dd; dd = ROL(cc,10); cc = bb; aa = T

T  = (h1+c+dd)%2**32
h1 = (h2+d+ee)%2**32
h2 = (h3+e+aa)%2**32
h3 = (h4+a+bb)%2**32
h4 = (h0+b+cc)%2**32
h0 = T

return little_end(makehex(h0))+little_end(makehex(h1))+little_end(makehex(h2))+little_end(makehex(h3))+little_end(makehex(h4))``````

## All 3 Replies

i meant

``````T = (ROL((a + F(b, c, d, j) + X[r[j]] + k[j/16])%2**32, s[j]) + e)%2**32
a = e; e = d; d = ROL(c, 10); c = b; a = T
T = (ROL((aa + F(bb, cc, dd, 79-j) + X[rr[j]] + kk[j/16] )%2**32, ss[j]) + ee)%2**32
aa = ee; ee = dd; dd = ROL(cc,10); cc = bb; aa = T``````

but the ouput barely changed

for i in range(number of blocks of 512 bits): looks like pseudo code.

yeah. that (hopefully) makes it easier to understand. and i still havent figured it out

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.