1#!/usr/bin/env ruby 2# 3# $RoughId: test.rb,v 1.4 2001/07/13 15:38:27 knu Exp $ 4# $Id: test_digest.rb 36588 2012-08-01 13:30:51Z eregon $ 5 6require 'test/unit' 7 8require 'digest' 9%w[digest/md5 digest/rmd160 digest/sha1 digest/sha2].each do |lib| 10 begin 11 require lib 12 rescue LoadError 13 end 14end 15 16module TestDigest 17 Data1 = "abc" 18 Data2 = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" 19 20 def test_s_new 21 self.class::DATA.each do |str, hexdigest| 22 assert_raise(ArgumentError) { self.class::ALGO.new("") } 23 end 24 end 25 26 def test_s_hexdigest 27 self.class::DATA.each do |str, hexdigest| 28 actual = self.class::ALGO.hexdigest(str) 29 assert_equal(hexdigest, actual) 30 assert_equal(Encoding::US_ASCII, actual.encoding) 31 end 32 end 33 34 def test_s_base64digest 35 self.class::DATA.each do |str, hexdigest| 36 digest = [hexdigest].pack("H*") 37 actual = self.class::ALGO.base64digest(str) 38 assert_equal([digest].pack("m0"), actual) 39 assert_equal(Encoding::US_ASCII, actual.encoding) 40 end 41 end 42 43 def test_s_digest 44 self.class::DATA.each do |str, hexdigest| 45 digest = [hexdigest].pack("H*") 46 actual = self.class::ALGO.digest(str) 47 assert_equal(digest, actual) 48 assert_equal(Encoding::BINARY, actual.encoding) 49 end 50 end 51 52 def test_update 53 # This test is also for digest() and hexdigest() 54 55 str = "ABC" 56 57 md = self.class::ALGO.new 58 md.update str 59 assert_equal(self.class::ALGO.hexdigest(str), md.hexdigest) 60 assert_equal(self.class::ALGO.digest(str), md.digest) 61 end 62 63 def test_eq 64 # This test is also for clone() 65 66 md1 = self.class::ALGO.new 67 md1 << "ABC" 68 69 assert_equal(md1, md1.clone, self.class::ALGO) 70 71 md2 = self.class::ALGO.new 72 md2 << "A" 73 74 assert_not_equal(md1, md2, self.class::ALGO) 75 76 md2 << "BC" 77 78 assert_equal(md1, md2, self.class::ALGO) 79 end 80 81 def test_instance_eval 82 assert_nothing_raised { 83 self.class::ALGO.new.instance_eval { update "a" } 84 } 85 end 86 87 def test_alignment 88 md = self.class::ALGO.new 89 assert_nothing_raised('#4320') { 90 md.update('a' * 97) 91 md.update('a' * 97) 92 md.hexdigest 93 } 94 end 95 96 class TestMD5 < Test::Unit::TestCase 97 include TestDigest 98 ALGO = Digest::MD5 99 DATA = { 100 Data1 => "900150983cd24fb0d6963f7d28e17f72", 101 Data2 => "8215ef0796a20bcaaae116d3876c664a", 102 } 103 end if defined?(Digest::MD5) 104 105 class TestSHA1 < Test::Unit::TestCase 106 include TestDigest 107 ALGO = Digest::SHA1 108 DATA = { 109 Data1 => "a9993e364706816aba3e25717850c26c9cd0d89d", 110 Data2 => "84983e441c3bd26ebaae4aa1f95129e5e54670f1", 111 } 112 end if defined?(Digest::SHA1) 113 114 class TestSHA256 < Test::Unit::TestCase 115 include TestDigest 116 ALGO = Digest::SHA256 117 DATA = { 118 Data1 => "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad", 119 Data2 => "248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1", 120 } 121 end if defined?(Digest::SHA256) 122 123 class TestSHA384 < Test::Unit::TestCase 124 include TestDigest 125 ALGO = Digest::SHA384 126 DATA = { 127 Data1 => "cb00753f45a35e8bb5a03d699ac65007272c32ab0eded1631a8b605a43ff5bed8086072ba1e7cc2358baeca134c825a7", 128 Data2 => "3391fdddfc8dc7393707a65b1b4709397cf8b1d162af05abfe8f450de5f36bc6b0455a8520bc4e6f5fe95b1fe3c8452b", 129 } 130 end if defined?(Digest::SHA384) 131 132 class TestSHA512 < Test::Unit::TestCase 133 include TestDigest 134 ALGO = Digest::SHA512 135 DATA = { 136 Data1 => "ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f", 137 Data2 => "204a8fc6dda82f0a0ced7beb8e08a41657c16ef468b228a8279be331a703c33596fd15c13b1b07f9aa1d3bea57789ca031ad85c7a71dd70354ec631238ca3445", 138 } 139 end if defined?(Digest::SHA512) 140 141 class TestRMD160 < Test::Unit::TestCase 142 include TestDigest 143 ALGO = Digest::RMD160 144 DATA = { 145 Data1 => "8eb208f7e05d987a9b044a8e98c6b087f15a0bfc", 146 Data2 => "12a053384a9c0c88e405a06c27dcf49ada62eb2b", 147 } 148 end if defined?(Digest::RMD160) 149 150 class TestBase < Test::Unit::TestCase 151 def test_base 152 bug3810 = '[ruby-core:32231]' 153 assert_raise(NotImplementedError, bug3810) {Digest::Base.new} 154 end 155 end 156end 157