@@ -31,7 +31,15 @@ source "${CMD_TEST_DIR}/../utils-general.sh"
3131
3232# Function to setup the environment for the command-line tests
3333cmd_test_env_setup () {
34- export OPENSSL_BIN=${OPENSSL_BIN:- $(which openssl)}
34+ # Use OPENSSL_BIN if explicitly set, otherwise auto-detect
35+ if [ -z " ${OPENSSL_BIN:- } " ]; then
36+ OPENSSL_BIN=$( which openssl 2> /dev/null || echo " " )
37+ if [ -z " $OPENSSL_BIN " ]; then
38+ echo " ERROR: Cannot find openssl binary. Please set OPENSSL_BIN environment variable."
39+ exit 1
40+ fi
41+ fi
42+ export OPENSSL_BIN
3543 printf " Using OPENSSL_BIN: %s\n" " $OPENSSL_BIN "
3644
3745 OPENSSL_CONF_ORIG=" ${OPENSSL_CONF:- } "
@@ -59,87 +67,154 @@ cmd_test_init() {
5967
6068# Function to use default provider only
6169use_default_provider () {
62- return 0
63-
64- if [ -z " ${OPENSSL_CONF_ORIG:- } " ]; then
65- export OPENSSL_CONF=" /dev/null"
66- export OPENSSL_MODULES=" /dev/null"
67- else
68- unset OPENSSL_CONF
69- unset OPENSSL_MODULES
70- fi
70+ # Detect mode BEFORE modifying environment variables
7171 detect_wolfprovider_mode
72-
72+
7373 # Check if wolfProvider is in replace-default mode
74- if [ " $is_openssl_replace_default " = " 1" ]; then
75- echo " INFO: wolfProvider is installed in replace-default mode"
76- echo " INFO: wolfProvider IS the default provider and cannot be switched off"
77-
78- # Verify that wolfProvider (as default) is active
79- if [ " $is_wp_active " = " 1" ] && [ " $is_wp_default " = " 1" ]; then
74+ if [ " $is_openssl_replace_default " = " 1" ] || [ " ${WOLFPROV_REPLACE_DEFAULT:- 0} " = " 1" ]; then
75+ # In replace-default mode, wolfProvider IS the default provider
76+ # No provider switching possible - just verify it's active
77+ echo " replace-default is set, using default provider"
78+
79+ # In replace-default mode, don't modify environment variables
80+ # Just verify that wolfProvider is active as the default
81+ if [ " $is_wp_active " = " 1" ] && [ " $is_wp_default " = " 1" ]; then
8082 echo " Using default provider (wolfProvider in replace-default mode)"
83+ return 0
8184 else
8285 echo " FAIL: Expected wolfProvider as default, but is_wp_active: $is_wp_active and is_wp_default: $is_wp_default "
8386 exit 1
8487 fi
8588 else
8689 # In non-replace-default mode, unsetting OPENSSL_MODULES should disable wolfProvider
87- echo " INFO: wolfProvider is installed in non-replace-default mode"
90+ # Disable wolfProvider by setting OPENSSL_CONF and OPENSSL_MODULES to /dev/null
91+ if [ -z " ${OPENSSL_CONF_ORIG:- } " ]; then
92+ export OPENSSL_CONF=" /dev/null"
93+ export OPENSSL_MODULES=" /dev/null"
94+ else
95+ unset OPENSSL_CONF
96+ unset OPENSSL_MODULES
97+ fi
98+
99+ # Re-detect after disabling
100+ detect_wolfprovider_mode
88101
89102 # Verify that we are using the OpenSSL default provider (not wolfProvider)
90103 if [ " $is_openssl_default_provider " != " 1" ]; then
91104 echo " FAIL: unable to switch to default provider, wolfProvider is still active"
92105 echo " is_openssl_default_provider: $is_openssl_default_provider "
93106 exit 1
94107 fi
95- echo " INFO: Switched to default provider (OpenSSL)"
108+ echo " INFO: Switched to OpenSSL default provider"
109+ return 0
96110 fi
97111}
98112
99113
100114# Function to use wolf provider only
101115use_wolf_provider () {
102- return 0
103-
104- if [ -z " ${OPENSSL_CONF_ORIG:- } " ]; then
105- unset OPENSSL_CONF
106- unset OPENSSL_MODULES
107- else
108- export OPENSSL_CONF=" ${OPENSSL_CONF_ORIG:- } "
109- export OPENSSL_MODULES=" ${OPENSSL_MODULES_ORIG:- } "
110- fi
116+ # Detect mode BEFORE modifying environment variables
111117 detect_wolfprovider_mode
112-
118+
113119 # Check if wolfProvider is in replace-default mode
114- if [ " $is_openssl_replace_default " = " 1" ]; then
115- # In replace-default mode, wolfProvider is already the default
116- # No need to set OPENSSL_MODULES or OPENSSL_CONF
117- echo " INFO: wolfProvider is installed in replace- default mode "
118- echo " INFO: wolfProvider is already active as the default provider "
119-
120- # Verify that wolfProvider is active
121- if [ " $is_wp_active " = " 1" ] && [ " $is_wp_default " = " 1" ]; then
120+ if [ " $is_openssl_replace_default " = " 1" ] || [ " ${WOLFPROV_REPLACE_DEFAULT :- 0} " = " 1 " ] ; then
121+ # In replace-default mode, wolfProvider IS the default provider
122+ # No provider switching possible - just verify it's active
123+ echo " replace-default is set, using default provider "
124+
125+ # In replace-default mode, don't modify environment variables
126+ # Just verify that wolfProvider is active as the default
127+ if [ " $is_wp_active " = " 1" ] && [ " $is_wp_default " = " 1" ]; then
122128 echo " Using wolfProvider (replace-default mode)"
129+ return 0
123130 else
124131 echo " FAIL: wolfProvider is not active"
125132 echo " is_wp_active: $is_wp_active "
126133 echo " is_wp_default: $is_wp_default "
127134 exit 1
128135 fi
129136 else
130- # In non-replace-default mode, we need to set OPENSSL_MODULES and OPENSSL_CONF
131- echo " INFO: wolfProvider is installed in non-replace-default mode"
137+ # In non-replace-default mode, we need to set OPENSSL_MODULES and OPENSSL_CONF to enable wolfProvider
138+ echo " INFO: Switched to libwolfprov"
139+
140+ # Get paths to enable wolfProvider
141+ # Use WOLFPROV_PATH/WOLFPROV_CONFIG if set (from env-setup), otherwise derive from OPENSSL_BIN path
142+ local wolfprov_lib_path=" ${WOLFPROV_PATH:- } "
143+ local provider_conf=" ${WOLFPROV_CONFIG:- } "
144+
145+ # If not set, try to find library path
146+ if [ -z " $wolfprov_lib_path " ]; then
147+ # Try MODULESDIR from openssl version -a (simplest approach)
148+ local openssl_modules_dir=" "
149+ openssl_modules_dir=$( $OPENSSL_BIN version -a 2> /dev/null | grep -i " ^MODULESDIR" | sed -E ' s/.*["' \' ' ]([^"' \' ' ]+)["' \' ' ].*/\1/' | head -1)
150+ if [ -n " $openssl_modules_dir " ] && [ -d " $openssl_modules_dir " ]; then
151+ # Check if provider library exists
152+ if [ -f " $openssl_modules_dir /libwolfprov.so" ] || \
153+ [ -f " $openssl_modules_dir /libwolfprov.so.0" ] || \
154+ [ -f " $openssl_modules_dir /libwolfprov.so.0.0.0" ]; then
155+ wolfprov_lib_path=" $openssl_modules_dir "
156+ fi
157+ fi
158+
159+ # If still not found, try local build location
160+ if [ -z " $wolfprov_lib_path " ]; then
161+ local openssl_install_dir=$( dirname " $( dirname " $OPENSSL_BIN " ) " 2> /dev/null || echo " " )
162+ local repo_root=$( dirname " $openssl_install_dir " 2> /dev/null || echo " " )
163+ if [ -n " $repo_root " ] && [ -d " $repo_root /wolfprov-install/lib" ]; then
164+ wolfprov_lib_path=" $repo_root /wolfprov-install/lib"
165+ fi
166+ fi
167+ fi
168+
169+ # If not set, try to find config file (optional - system installs may not need it)
170+ if [ -z " $provider_conf " ]; then
171+ # Try system location first
172+ if [ -f " /etc/ssl/openssl.cnf.d/wolfprovider.conf" ]; then
173+ provider_conf=" /etc/ssl/openssl.cnf.d/wolfprovider.conf"
174+ else
175+ # Try local build location
176+ local openssl_install_dir=$( dirname " $( dirname " $OPENSSL_BIN " ) " 2> /dev/null || echo " " )
177+ local repo_root=$( dirname " $openssl_install_dir " 2> /dev/null || echo " " )
178+ if [ -n " $repo_root " ]; then
179+ if [ " ${WOLFSSL_ISFIPS:- 0} " = " 1" ] && [ -f " $repo_root /provider-fips.conf" ]; then
180+ provider_conf=" $repo_root /provider-fips.conf"
181+ elif [ -f " $repo_root /provider.conf" ]; then
182+ provider_conf=" $repo_root /provider.conf"
183+ fi
184+ fi
185+ fi
186+ fi
187+
188+ # Set environment variables to enable wolfProvider
189+ # In system installations, the provider may be auto-loaded via openssl.cnf,
190+ # so library path is optional - only set it if we found it
191+ if [ -n " $wolfprov_lib_path " ] && [ -d " $wolfprov_lib_path " ]; then
192+ export OPENSSL_MODULES=" $wolfprov_lib_path "
193+ else
194+ # Library path not found - this is OK for system installs with openssl.cnf configuration
195+ # Just warn about it, don't fail
196+ echo " WARNING: Cannot find wolfProvider library path - will rely on system openssl.cnf configuration"
197+ echo " WOLFPROV_PATH: ${WOLFPROV_PATH:- not set} "
198+ echo " OPENSSL_BIN: ${OPENSSL_BIN:- not set} "
199+ $OPENSSL_BIN version -a 2>&1 | grep -i " ^MODULESDIR" || echo " MODULESDIR not found in openssl version output"
200+ fi
201+
202+ # Config file is optional - system installs may use openssl.cnf instead
203+ if [ -n " $provider_conf " ] && [ -f " $provider_conf " ]; then
204+ export OPENSSL_CONF=" $provider_conf "
205+ fi
206+
207+ # Re-detect after setting environment
208+ detect_wolfprovider_mode
132209
133210 # Verify that we are using wolfProvider
134211 if [ " $is_wp_active " != " 1" ]; then
135212 echo " FAIL: unable to switch to wolfProvider, default provider is still active"
136- $OPENSSL_BIN list -providers
137213 echo " is_wp_active: $is_wp_active "
138214 echo " is_wp_default: $is_wp_default "
139215 exit 1
140216 fi
141- echo " INFO: Switched to wolfProvider"
142- $OPENSSL_BIN list -providers
217+ return 0
143218 fi
144219}
145220
0 commit comments