選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。
 
 
 

73 行
1.9 KiB

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