Skip to content

Commit a3d8c58

Browse files
committed
Fix test_provider.rb in FIPS.
1 parent ade5076 commit a3d8c58

2 files changed

Lines changed: 38 additions & 7 deletions

File tree

Rakefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ Rake::TestTask.new(:test_fips_internal) do |t|
3333
'test/openssl/test_pkey_dsa.rb',
3434
'test/openssl/test_pkey_ec.rb',
3535
'test/openssl/test_pkey_rsa.rb',
36+
'test/openssl/test_provider.rb',
3637
]
3738
t.warning = true
3839
end

test/openssl/test_provider.rb

Lines changed: 37 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# frozen_string_literal: true
22
require_relative 'utils'
3-
if defined?(OpenSSL) && defined?(OpenSSL::Provider) && !OpenSSL.fips_mode
3+
if defined?(OpenSSL) && defined?(OpenSSL::Provider)
44

55
class OpenSSL::TestProvider < OpenSSL::TestCase
66
def test_openssl_provider_name_inspect
@@ -12,14 +12,41 @@ def test_openssl_provider_name_inspect
1212
end
1313

1414
def test_openssl_provider_names
15+
# We expect the following providers are loaded in the cases:
16+
# * Non-FIPS: default
17+
# * FIPS: fips, base
18+
# Use the null provider to test the added provider.
19+
# See provider(7) - OPENSSL PROVIDERS to see the list of providers, and
20+
# OSSL_PROVIDER-null(7) to check the details of the null provider.
1521
with_openssl <<-'end;'
16-
base_provider = OpenSSL::Provider.load("base")
17-
assert_equal(2, OpenSSL::Provider.provider_names.size)
18-
assert_includes(OpenSSL::Provider.provider_names, "base")
22+
num = OpenSSL::Provider.provider_names.size
1923
20-
assert_equal(true, base_provider.unload)
21-
assert_equal(1, OpenSSL::Provider.provider_names.size)
22-
assert_not_includes(OpenSSL::Provider.provider_names, "base")
24+
added_provider = OpenSSL::Provider.load("null")
25+
assert_equal(num + 1, OpenSSL::Provider.provider_names.size)
26+
assert_includes(OpenSSL::Provider.provider_names, "null")
27+
28+
assert_equal(true, added_provider.unload)
29+
assert_equal(num, OpenSSL::Provider.provider_names.size)
30+
assert_not_includes(OpenSSL::Provider.provider_names, "null")
31+
end;
32+
end
33+
34+
# Test providers to run OpenSSL FIPS perperly in OpenSSL 3.x.
35+
# The `OpenSSL.fips_mode` calling the EVP_default_properties_is_fips_enabled
36+
# only indicates if fips=yes is a default property. It doesn't check the
37+
# providers.
38+
# See EVP_default_properties_is_fips_enabled(3) for details.
39+
def test_openssl_provider_names_on_fips
40+
omit "Only for FIPS" unless OpenSSL.fips_mode
41+
42+
# The number of providers is at least 2 in FIPS: the fips provider for the
43+
# key management, and another provider base or default for the
44+
# encoding/decoding.
45+
# See fips_module(7) - "Making all applications use the FIPS module by
46+
# default" for details.
47+
with_openssl(<<-'end;')
48+
assert_compare(2, "<=", OpenSSL::Provider.provider_names.size)
49+
assert_include(OpenSSL::Provider.provider_names, "fips")
2350
end;
2451
end
2552

@@ -33,6 +60,9 @@ def test_unloaded_openssl_provider
3360
end
3461

3562
def test_openssl_legacy_provider
63+
# The legacy provider is not supported on FIPS.
64+
omit_on_fips
65+
3666
with_openssl(<<-'end;')
3767
begin
3868
OpenSSL::Provider.load("legacy")

0 commit comments

Comments
 (0)