...
1
2
3
4
5 package ripemd160
6
7
8
9
10 import (
11 "fmt"
12 "io"
13 "testing"
14 )
15
16 type mdTest struct {
17 out string
18 in string
19 }
20
21 var vectors = [...]mdTest{
22 {"9c1185a5c5e9fc54612808977ee8f548b2258d31", ""},
23 {"0bdc9d2d256b3ee9daae347be6f4dc835a467ffe", "a"},
24 {"8eb208f7e05d987a9b044a8e98c6b087f15a0bfc", "abc"},
25 {"5d0689ef49d2fae572b881b123a85ffa21595f36", "message digest"},
26 {"f71c27109c692c1b56bbdceb5b9d2865b3708dbc", "abcdefghijklmnopqrstuvwxyz"},
27 {"12a053384a9c0c88e405a06c27dcf49ada62eb2b", "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"},
28 {"b0e20b6e3116640286ed3a87a5713079b21f5189", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"},
29 {"9b752e45573d4b39f4dbd3323cab82bf63326bfb", "12345678901234567890123456789012345678901234567890123456789012345678901234567890"},
30 }
31
32 func TestVectors(t *testing.T) {
33 for i := 0; i < len(vectors); i++ {
34 tv := vectors[i]
35 md := New()
36 for j := 0; j < 3; j++ {
37 if j < 2 {
38 io.WriteString(md, tv.in)
39 } else {
40 io.WriteString(md, tv.in[0:len(tv.in)/2])
41 md.Sum(nil)
42 io.WriteString(md, tv.in[len(tv.in)/2:])
43 }
44 s := fmt.Sprintf("%x", md.Sum(nil))
45 if s != tv.out {
46 t.Fatalf("RIPEMD-160[%d](%s) = %s, expected %s", j, tv.in, s, tv.out)
47 }
48 md.Reset()
49 }
50 }
51 }
52
53 func millionA() string {
54 md := New()
55 for i := 0; i < 100000; i++ {
56 io.WriteString(md, "aaaaaaaaaa")
57 }
58 return fmt.Sprintf("%x", md.Sum(nil))
59 }
60
61 func TestMillionA(t *testing.T) {
62 const out = "52783243c1697bdbe16d37f97f68f08325dc1528"
63 if s := millionA(); s != out {
64 t.Fatalf("RIPEMD-160 (1 million 'a') = %s, expected %s", s, out)
65 }
66 }
67
68 func BenchmarkMillionA(b *testing.B) {
69 for i := 0; i < b.N; i++ {
70 millionA()
71 }
72 }
73
View as plain text