mirror of
https://github.com/ruby/ruby.git
synced 2026-10-28 16:36:20 +08:00
Fix CI with OpenSSL master in the FIPS mode. With the fips provider in OpenSSL master, HMAC keys shorter than 112 bits are rejected and MD5 is disallowed. Update tests to use SHA-2 and longer keys. https://github.com/ruby/openssl/commit/e919f81797
82 lines
3.0 KiB
Ruby
82 lines
3.0 KiB
Ruby
# frozen_string_literal: true
|
|
require_relative 'utils'
|
|
|
|
if defined?(OpenSSL)
|
|
|
|
class OpenSSL::TestHMAC < OpenSSL::TestCase
|
|
def test_hmac_md5
|
|
omit_on_fips # MD5
|
|
|
|
# RFC 2202 2. Test Cases for HMAC-MD5
|
|
hmac = OpenSSL::HMAC.new(["0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b"].pack("H*"), "MD5")
|
|
hmac.update("Hi There")
|
|
assert_equal ["9294727a3638bb1c13f48ef8158bfc9d"].pack("H*"), hmac.digest
|
|
assert_equal "9294727a3638bb1c13f48ef8158bfc9d", hmac.hexdigest
|
|
assert_equal "kpRyejY4uxwT9I74FYv8nQ==", hmac.base64digest
|
|
end
|
|
|
|
def test_hmac_sha224
|
|
# RFC 4231 4.2. Test Case 1
|
|
hmac = OpenSSL::HMAC.new(["0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b"].pack("H*"), "SHA224")
|
|
hmac.update("Hi There")
|
|
assert_equal ["896fb1128abbdf196832107cd49df33f47b4b1169912ba4f53684b22"].pack("H*"), hmac.digest
|
|
assert_equal "896fb1128abbdf196832107cd49df33f47b4b1169912ba4f53684b22", hmac.hexdigest
|
|
assert_equal "iW+xEoq73xloMhB81J3zP0e0sRaZErpPU2hLIg==", hmac.base64digest
|
|
end
|
|
|
|
def test_dup
|
|
h1 = OpenSSL::HMAC.new("KEY"*32, "SHA256")
|
|
h1.update("DATA")
|
|
h = h1.dup
|
|
assert_equal(h1.digest, h.digest, "dup digest")
|
|
end
|
|
|
|
def test_binary_update
|
|
data = "Lücíllé: Bût... yøü sáîd hé wås âlrîght.\nDr. Físhmån: Yés. Hé's løst hîs léft hånd, sø hé's gøîng tø bé åll rîght"
|
|
hmac = OpenSSL::HMAC.new("qShkcwN92rsM9nHfdnP4ugcVU2iI7iM/trovs01ZWok", "SHA256")
|
|
result = hmac.update(data).hexdigest
|
|
assert_equal "a13984b929a07912e4e21c5720876a8e150d6f67f854437206e7f86547248396", result
|
|
end
|
|
|
|
def test_reset_keep_key
|
|
h1 = OpenSSL::HMAC.new("KEY"*32, "SHA256")
|
|
first = h1.update("test").hexdigest
|
|
h1.reset
|
|
second = h1.update("test").hexdigest
|
|
assert_equal first, second
|
|
end
|
|
|
|
def test_eq
|
|
h1 = OpenSSL::HMAC.new("KEY"*32, "SHA256")
|
|
h2 = OpenSSL::HMAC.new("KEY"*32, OpenSSL::Digest.new("SHA256"))
|
|
h3 = OpenSSL::HMAC.new("FOO"*32, "SHA256")
|
|
|
|
assert_equal h1, h2
|
|
refute_equal h1, h2.digest
|
|
refute_equal h1, h3
|
|
end
|
|
|
|
def test_singleton_methods
|
|
# RFC 4231 4.2. Test Case 1
|
|
key = ["0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b"].pack("H*")
|
|
digest = OpenSSL::HMAC.digest("SHA256", key, "Hi There")
|
|
assert_equal ["b0344c61d8db38535ca8afceaf0bf12b881dc200c9833da726e9376c2e32cff7"].pack("H*"), digest
|
|
hexdigest = OpenSSL::HMAC.hexdigest("SHA256", key, "Hi There")
|
|
assert_equal "b0344c61d8db38535ca8afceaf0bf12b881dc200c9833da726e9376c2e32cff7", hexdigest
|
|
b64digest = OpenSSL::HMAC.base64digest("SHA256", key, "Hi There")
|
|
assert_equal "sDRMYdjbOFNcqK/OrwvxK4gdwgDJgz2nJuk3bC4yz/c=", b64digest
|
|
end
|
|
|
|
def test_zero_length_key
|
|
omit_on_fips # Key length
|
|
|
|
# Empty string as the key
|
|
hexdigest = OpenSSL::HMAC.hexdigest("SHA256", "\0"*32, "test")
|
|
assert_equal "43b0cef99265f9e34c10ea9d3501926d27b39f57c6d674561d8ba236e7a819fb", hexdigest
|
|
hexdigest = OpenSSL::HMAC.hexdigest("SHA256", "", "test")
|
|
assert_equal "43b0cef99265f9e34c10ea9d3501926d27b39f57c6d674561d8ba236e7a819fb", hexdigest
|
|
end
|
|
end
|
|
|
|
end
|