...

Source file src/golang.org/x/crypto/ripemd160/ripemd160_test.go

Documentation: golang.org/x/crypto/ripemd160

     1  // Copyright 2010 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package ripemd160
     6  
     7  // Test vectors are from:
     8  // http://homes.esat.kuleuven.be/~bosselae/ripemd160.html
     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