RIPEMD-160: Difference between revisions

m (→‎{{header|Perl 6}}: flat and slip needed at several points)
Line 307:
 
=={{header|Julia}}==
{{works with|Julia|0.6}}
This solution is similar to that for [[SHA-1#Julia|SHA-1]] but with improved logic for testing and display.
<lang Julia>
using Nettle
 
<lang julia>using Nettle
function ripemdsum(s::String)
bytes2hex(ripemd160_hash(s))
end
 
labels = ["\"\" (empty string)", "\"a\"", "\"abc\"",
mes = ["", "a", "abc", "message digest", "abcdefghijklmnopqrstuvwxyz",
"\"message digest\"", "\"a...z\"",
"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
"\"abcdbcde...nopq\"", "\"A...Za...z0...9\"",
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"]
"8 times \"1234567890\"", "1 million times \"a\""]
texts = ["", "a", "abc", "message digest", "abcdefghijklmnopqrstuvwxyz",
"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",
"1234567890" ^ 8, "a" ^ 1_000_000]
expects = ["9c1185a5c5e9fc54612808977ee8f548b2258d31",
"0bdc9d2d256b3ee9daae347be6f4dc835a467ffe",
"8eb208f7e05d987a9b044a8e98c6b087f15a0bfc",
"5d0689ef49d2fae572b881b123a85ffa21595f36",
"f71c27109c692c1b56bbdceb5b9d2865b3708dbc",
"12a053384a9c0c88e405a06c27dcf49ada62eb2b",
"b0e20b6e3116640286ed3a87a5713079b21f5189",
"9b752e45573d4b39f4dbd3323cab82bf63326bfb",
"52783243c1697bdbe16d37f97f68f08325dc1528"]
 
for (lab, text, expect) in zip(labels, texts, expects)
h = ASCIIString[]
digest = hexdigest("ripemd160", text)
for s in mes
println("# $lab\n -> digest: $digest\n -> expect: $expect")
push!(h, ripemdsum(s))
end</lang>
push!(h, ripemdsum("1234567890"^8))
push!(h, ripemdsum("a"^10^6))
 
t = ["9c1185a5c5e9fc54612808977ee8f548b2258d31",
"0bdc9d2d256b3ee9daae347be6f4dc835a467ffe",
"8eb208f7e05d987a9b044a8e98c6b087f15a0bfc",
"5d0689ef49d2fae572b881b123a85ffa21595f36",
"f71c27109c692c1b56bbdceb5b9d2865b3708dbc",
"12a053384a9c0c88e405a06c27dcf49ada62eb2b",
"b0e20b6e3116640286ed3a87a5713079b21f5189",
"9b752e45573d4b39f4dbd3323cab82bf63326bfb",
"52783243c1697bdbe16d37f97f68f08325dc1528"]
 
lab = ["\"\" (empty string)", "\"a\"", "\"abc\"",
"\"message digest\"", "\"a...z\"",
"\"abcdbcde...nopq\"", "\"A...Za...z0...9\"",
"8 times \"1234567890\"", "1 million times \"a\""]
isok = t .== h
 
println("Testing Julia's RIPEMD-160 hash against its test vectors.")
for i in 1:length(h)
print(@sprintf(" %20s => ", lab[i]), h[i], " ")
if isok[i]
println('\u263a')
else
println('\u26a0')
end
end
 
if all(isok)
println("The function passes for all test vectors.\n")
else
println("The function fid not pass for all test vectors.\n")
end
 
msg = "Rosetta Code"
h = ripemdsum(msg)
println(msg, " => ", h)
</lang>
 
{{out}}
<pre># "" (empty string)
-> digest: 9c1185a5c5e9fc54612808977ee8f548b2258d31
Testing Julia's RIPEMD-160 hash against its test vectors.
-> "" (empty string) =>expect: 9c1185a5c5e9fc54612808977ee8f548b2258d31
# "a"
"a" => 0bdc9d2d256b3ee9daae347be6f4dc835a467ffe ☺
-> digest: 0bdc9d2d256b3ee9daae347be6f4dc835a467ffe
"abc" => 8eb208f7e05d987a9b044a8e98c6b087f15a0bfc ☺
-> expect: 0bdc9d2d256b3ee9daae347be6f4dc835a467ffe
"message digest" => 5d0689ef49d2fae572b881b123a85ffa21595f36 ☺
# "abc"
"a...z" => f71c27109c692c1b56bbdceb5b9d2865b3708dbc ☺
-> digest: 8eb208f7e05d987a9b044a8e98c6b087f15a0bfc
"abcdbcde...nopq" => 12a053384a9c0c88e405a06c27dcf49ada62eb2b ☺
-> expect: 8eb208f7e05d987a9b044a8e98c6b087f15a0bfc
"A...Za...z0...9" => b0e20b6e3116640286ed3a87a5713079b21f5189 ☺
# "message digest"
8 times "1234567890" => 9b752e45573d4b39f4dbd3323cab82bf63326bfb ☺
-> digest: 5d0689ef49d2fae572b881b123a85ffa21595f36
1 million times "a" => 52783243c1697bdbe16d37f97f68f08325dc1528 ☺
-> expect: 5d0689ef49d2fae572b881b123a85ffa21595f36
The function passes for all test vectors.
# "a...z"
 
-> digest: f71c27109c692c1b56bbdceb5b9d2865b3708dbc
Rosetta Code => b3be159860842cebaa7174c8fff0aa9e50a5199f
-> expect: f71c27109c692c1b56bbdceb5b9d2865b3708dbc
</pre>
# "abcdbcde...nopq"
-> digest: 12a053384a9c0c88e405a06c27dcf49ada62eb2b
-> expect: 12a053384a9c0c88e405a06c27dcf49ada62eb2b
# "A...Za...z0...9"
-> digest: b0e20b6e3116640286ed3a87a5713079b21f5189
-> expect: b0e20b6e3116640286ed3a87a5713079b21f5189
# 8 times "1234567890"
-> digest: 9b752e45573d4b39f4dbd3323cab82bf63326bfb
-> expect: 9b752e45573d4b39f4dbd3323cab82bf63326bfb
# 1 million times "a"
-> digest: 52783243c1697bdbe16d37f97f68f08325dc1528
-> expect: 52783243c1697bdbe16d37f97f68f08325dc1528</pre>
 
=={{header|Kotlin}}==
Anonymous user