v/vlib/crypto/ripemd160/ripemd160_test.v

49 lines
1.4 KiB
V

import crypto.ripemd160
struct MdTest {
o string
i string
}
const vectors = [
MdTest{'9c1185a5c5e9fc54612808977ee8f548b2258d31', ''},
MdTest{'0bdc9d2d256b3ee9daae347be6f4dc835a467ffe', 'a'},
MdTest{'8eb208f7e05d987a9b044a8e98c6b087f15a0bfc', 'abc'},
MdTest{'5d0689ef49d2fae572b881b123a85ffa21595f36', 'message digest'},
MdTest{'f71c27109c692c1b56bbdceb5b9d2865b3708dbc', 'abcdefghijklmnopqrstuvwxyz'},
MdTest{'12a053384a9c0c88e405a06c27dcf49ada62eb2b', 'abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq'},
MdTest{'b0e20b6e3116640286ed3a87a5713079b21f5189', 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'},
MdTest{'9b752e45573d4b39f4dbd3323cab82bf63326bfb', '12345678901234567890123456789012345678901234567890123456789012345678901234567890'},
]
fn test_vectors() {
for tv in vectors {
mut md := ripemd160.new()
for j := 0; j < 3; j++ {
if j < 2 {
md.write(tv.i.bytes()) or { panic(err) }
} else {
half := tv.i.len / 2
md.write(tv.i.bytes()[0..tv.i.len / 2]) or { panic(err) }
md.sum([])
md.write(tv.i.bytes()[tv.i.len / 2..]) or { panic(err) }
}
assert md.sum([]).hex() == tv.o
md.reset()
}
}
}
fn million_a() string {
mut md := ripemd160.new()
for _ in 0 .. 100000 {
md.write('aaaaaaaaaa'.bytes()) or { panic(err) }
}
return md.sum([]).hex()
}
fn test_million_a() {
out := '52783243c1697bdbe16d37f97f68f08325dc1528'
s := million_a()
assert s == out
}