1require_relative 'utils' 2 3if defined?(OpenSSL) 4 5class OpenSSL::TestDigest < Test::Unit::TestCase 6 def setup 7 @d1 = OpenSSL::Digest::Digest::new("MD5") 8 @d2 = OpenSSL::Digest::MD5.new 9 @md = Digest::MD5.new 10 @data = "DATA" 11 end 12 13 def teardown 14 @d1 = @d2 = @md = nil 15 end 16 17 def test_digest 18 assert_equal(@md.digest, @d1.digest) 19 assert_equal(@md.hexdigest, @d1.hexdigest) 20 @d1 << @data 21 @d2 << @data 22 @md << @data 23 assert_equal(@md.digest, @d1.digest) 24 assert_equal(@md.hexdigest, @d1.hexdigest) 25 assert_equal(@d1.digest, @d2.digest) 26 assert_equal(@d1.hexdigest, @d2.hexdigest) 27 assert_equal(@md.digest, OpenSSL::Digest::MD5.digest(@data)) 28 assert_equal(@md.hexdigest, OpenSSL::Digest::MD5.hexdigest(@data)) 29 end 30 31 def test_eql 32 assert(@d1 == @d2, "==") 33 d = @d1.clone 34 assert(d == @d1, "clone") 35 end 36 37 def test_info 38 assert_equal("MD5", @d1.name, "name") 39 assert_equal("MD5", @d2.name, "name") 40 assert_equal(16, @d1.size, "size") 41 end 42 43 def test_dup 44 @d1.update(@data) 45 assert_equal(@d1.name, @d1.dup.name, "dup") 46 assert_equal(@d1.name, @d1.clone.name, "clone") 47 assert_equal(@d1.digest, @d1.clone.digest, "clone .digest") 48 end 49 50 def test_reset 51 @d1.update(@data) 52 dig1 = @d1.digest 53 @d1.reset 54 @d1.update(@data) 55 dig2 = @d1.digest 56 assert_equal(dig1, dig2, "reset") 57 end 58 59 def test_digest_constants 60 algs = %w(DSS1 MD4 MD5 RIPEMD160 SHA SHA1) 61 if OpenSSL::OPENSSL_VERSION_NUMBER > 0x00908000 62 algs += %w(SHA224 SHA256 SHA384 SHA512) 63 end 64 algs.each do |alg| 65 assert_not_nil(OpenSSL::Digest.new(alg)) 66 klass = OpenSSL::Digest.const_get(alg) 67 assert_not_nil(klass.new) 68 end 69 end 70 71 def test_digest_by_oid_and_name 72 check_digest(OpenSSL::ASN1::ObjectId.new("MD5")) 73 check_digest(OpenSSL::ASN1::ObjectId.new("SHA1")) 74 end 75 76 if OpenSSL::OPENSSL_VERSION_NUMBER > 0x00908000 77 def encode16(str) 78 str.unpack("H*").first 79 end 80 81 def test_098_features 82 sha224_a = "abd37534c7d9a2efb9465de931cd7055ffdb8879563ae98078d6d6d5" 83 sha256_a = "ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb" 84 sha384_a = "54a59b9f22b0b80880d8427e548b7c23abd873486e1f035dce9cd697e85175033caa88e6d57bc35efae0b5afd3145f31" 85 sha512_a = "1f40fc92da241694750979ee6cf582f2d5d7d28e18335de05abc54d0560e0f5302860c652bf08d560252aa5e74210546f369fbbbce8c12cfc7957b2652fe9a75" 86 87 assert_equal(sha224_a, OpenSSL::Digest::SHA224.hexdigest("a")) 88 assert_equal(sha256_a, OpenSSL::Digest::SHA256.hexdigest("a")) 89 assert_equal(sha384_a, OpenSSL::Digest::SHA384.hexdigest("a")) 90 assert_equal(sha512_a, OpenSSL::Digest::SHA512.hexdigest("a")) 91 92 assert_equal(sha224_a, encode16(OpenSSL::Digest::SHA224.digest("a"))) 93 assert_equal(sha256_a, encode16(OpenSSL::Digest::SHA256.digest("a"))) 94 assert_equal(sha384_a, encode16(OpenSSL::Digest::SHA384.digest("a"))) 95 assert_equal(sha512_a, encode16(OpenSSL::Digest::SHA512.digest("a"))) 96 end 97 98 def test_digest_by_oid_and_name_sha2 99 check_digest(OpenSSL::ASN1::ObjectId.new("SHA224")) 100 check_digest(OpenSSL::ASN1::ObjectId.new("SHA256")) 101 check_digest(OpenSSL::ASN1::ObjectId.new("SHA384")) 102 check_digest(OpenSSL::ASN1::ObjectId.new("SHA512")) 103 end 104 end 105 106 def test_openssl_digest 107 assert_equal OpenSSL::Digest::MD5, OpenSSL::Digest("MD5") 108 109 assert_raises NameError do 110 OpenSSL::Digest("no such digest") 111 end 112 end 113 114 private 115 116 def check_digest(oid) 117 d = OpenSSL::Digest.new(oid.sn) 118 assert_not_nil(d) 119 d = OpenSSL::Digest.new(oid.ln) 120 assert_not_nil(d) 121 d = OpenSSL::Digest.new(oid.oid) 122 assert_not_nil(d) 123 end 124end 125 126end 127