Files
Kazuki Yamaguchi 97e0add51f [ruby/openssl] hmac: enable tests in the FIPS mode
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
2026-04-29 11:07:20 +00:00

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