v / vlib / crypto / ripemd160 / ripemd160_test.v
50 lines · 45 sloc · 1.45 KB · 75cce113a23000441086fe54c3e3c5b7b0bee1ae
Raw
1import crypto.ripemd160
2
3struct MdTest {
4 o string
5 i string
6}
7
8const vectors = [
9 MdTest{'9c1185a5c5e9fc54612808977ee8f548b2258d31', ''},
10 MdTest{'0bdc9d2d256b3ee9daae347be6f4dc835a467ffe', 'a'},
11 MdTest{'8eb208f7e05d987a9b044a8e98c6b087f15a0bfc', 'abc'},
12 MdTest{'5d0689ef49d2fae572b881b123a85ffa21595f36', 'message digest'},
13 MdTest{'f71c27109c692c1b56bbdceb5b9d2865b3708dbc', 'abcdefghijklmnopqrstuvwxyz'},
14 MdTest{'12a053384a9c0c88e405a06c27dcf49ada62eb2b', 'abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq'},
15 MdTest{'b0e20b6e3116640286ed3a87a5713079b21f5189', 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'},
16 MdTest{'9b752e45573d4b39f4dbd3323cab82bf63326bfb', '12345678901234567890123456789012345678901234567890123456789012345678901234567890'},
17]
18
19fn test_vectors() {
20 for tv in vectors {
21 mut md := ripemd160.new()
22 for j := 0; j < 3; j++ {
23 if j < 2 {
24 md.write(tv.i.bytes()) or { panic(err) }
25 } else {
26 half := tv.i.len / 2
27 md.write(tv.i.bytes()[0..tv.i.len / 2]) or { panic(err) }
28 md.sum([])
29 md.write(tv.i.bytes()[tv.i.len / 2..]) or { panic(err) }
30 }
31 assert md.sum([]).hex() == tv.o
32 assert ripemd160.hexhash(tv.i) == tv.o
33 md.reset()
34 }
35 }
36}
37
38fn million_a() string {
39 mut md := ripemd160.new()
40 for _ in 0 .. 100000 {
41 md.write('aaaaaaaaaa'.bytes()) or { panic(err) }
42 }
43 return md.sum([]).hex()
44}
45
46fn test_million_a() {
47 out := '52783243c1697bdbe16d37f97f68f08325dc1528'
48 s := million_a()
49 assert s == out
50}
51