Skip to content

Commit 2f3af89

Browse files
authored
Merge pull request #324 from aidangarske/fix-cmd-test
Add cmd-test arguments
2 parents 6fa5ebc + dab9f79 commit 2f3af89

File tree

13 files changed

+501
-330
lines changed

13 files changed

+501
-330
lines changed

.github/workflows/debian-package.yml

Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -82,31 +82,11 @@ jobs:
8282
${{ matrix.fips_ref == 'FIPS' && '--fips' || '' }}
8383
8484
- name: Test OpenSSL provider functionality
85+
shell: bash
8586
run: |
86-
WOLFPROV_CONF_BACKUP="/tmp/wolfprovider.conf.backup"
87-
88-
# Temporarily move wolfprovider config so we can toggle between providers
89-
echo "Temporarily disabling wolfprovider for default provider tests:"
90-
mkdir -p /tmp/openssl-test
91-
if [ -f $WOLFPROV_CONF_FILE ]; then
92-
mv $WOLFPROV_CONF_FILE $WOLFPROV_CONF_BACKUP
93-
echo " - Moved $WOLFPROV_CONF_FILE to $WOLFPROV_CONF_BACKUP"
94-
else
95-
echo "$WOLFPROV_CONF_FILE not found!"
96-
exit 1
97-
fi
98-
9987
# Run the do-cmd-test.sh script to execute interoperability tests
10088
echo "Running OpenSSL provider interoperability tests..."
10189
OPENSSL_BIN=$(eval which openssl) ${{ matrix.force_fail }} ${{ matrix.fips_ref == 'FIPS' && 'WOLFSSL_ISFIPS=1' || '' }} ./scripts/cmd_test/do-cmd-tests.sh
102-
103-
# Restore wolfprovider configuration
104-
echo "Restoring wolfprovider configuration:"
105-
if [ -f $WOLFPROV_CONF_BACKUP ]; then
106-
mv $WOLFPROV_CONF_BACKUP $WOLFPROV_CONF_FILE
107-
echo " - Restored $WOLFPROV_CONF_FILE from $WOLFPROV_CONF_BACKUP"
108-
fi
109-
11090
echo "PASS: All provider interoperability tests successful"
11191
11292
- name: Uninstall package and verify cleanup

.gitignore

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,8 +84,12 @@ test/**/*.trs
8484
test/**/*.o
8585
test/**/.deps/
8686
test/**/.dirstamp
87+
aes_outputs
88+
ecc_outputs
89+
hash_outputs
8790
req_outputs
88-
scripts/cmd_test/req-test.log
91+
rsa_outputs
92+
scripts/cmd_test/*.log
8993

9094
IDE/Android/android-ndk-r26b/
9195
IDE/Android/openssl-source/

debian/install-wolfprov.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ main() {
188188
exit 1
189189
fi
190190

191-
if [ -n "output_dir" ]; then
191+
if [ -n "$output_dir" ]; then
192192
output_dir=$(realpath $output_dir)
193193
fi
194194

scripts/cmd_test/aes-cmd-test.sh

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,18 @@
1919
# You should have received a copy of the GNU General Public License
2020
# along with wolfProvider. If not, see <http://www.gnu.org/licenses/>.
2121

22-
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
23-
source "${SCRIPT_DIR}/cmd-test-common.sh"
24-
source "${SCRIPT_DIR}/clean-cmd-test.sh"
25-
cmd_test_env_setup "aes-test.log"
26-
clean_cmd_test "aes"
22+
CMD_TEST_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
23+
source "${CMD_TEST_DIR}/cmd-test-common.sh"
24+
source "${CMD_TEST_DIR}/clean-cmd-test.sh"
2725

28-
# Redirect all output to log file
29-
exec > >(tee -a "$LOG_FILE") 2>&1
26+
if [ -z "${DO_CMD_TESTS:-}" ]; then
27+
echo "This script is designed to be called from do-cmd-tests.sh"
28+
echo "Do not run this script directly - use do-cmd-tests.sh instead"
29+
exit 1
30+
fi
31+
32+
cmd_test_init "aes-test.log"
33+
clean_cmd_test "aes"
3034

3135
# Create test data and output directories
3236
mkdir -p aes_outputs
@@ -42,8 +46,6 @@ else
4246
MODES=("ecb" "cbc" "ctr" "cfb")
4347
fi
4448

45-
echo "=== Running AES Algorithm Comparisons ==="
46-
4749
# Run tests for each key size and mode
4850
for key_size in "${KEY_SIZES[@]}"; do
4951
for mode in "${MODES[@]}"; do
@@ -67,14 +69,16 @@ for key_size in "${KEY_SIZES[@]}"; do
6769
echo "Interop testing (encrypt with default, decrypt with wolfProvider):"
6870

6971
# Encryption with OpenSSL default provider
70-
if ! $OPENSSL_BIN enc -aes-${key_size}-${mode} -K "$key" $iv -provider default \
72+
use_default_provider
73+
if ! $OPENSSL_BIN enc -aes-${key_size}-${mode} -K "$key" $iv \
7174
-in aes_outputs/test_data.txt -out "$enc_file" -p; then
7275
echo "[FAIL] Interop AES-${key_size}-${mode}: OpenSSL encrypt failed"
7376
FAIL=1
7477
fi
7578

7679
# Decryption with wolfProvider
77-
if ! $OPENSSL_BIN enc -aes-${key_size}-${mode} -K "$key" $iv -provider-path "$WOLFPROV_PATH" -provider libwolfprov \
80+
use_wolf_provider
81+
if ! $OPENSSL_BIN enc -aes-${key_size}-${mode} -K "$key" $iv \
7882
-in "$enc_file" -out "$dec_file" -d -p; then
7983
echo "[FAIL] Interop AES-${key_size}-${mode}: wolfProvider decrypt failed"
8084
FAIL=1
@@ -96,14 +100,16 @@ for key_size in "${KEY_SIZES[@]}"; do
96100
echo "Interop testing (encrypt with wolfProvider, decrypt with default):"
97101

98102
# Encryption with wolfProvider
99-
if ! $OPENSSL_BIN enc -aes-${key_size}-${mode} -K "$key" $iv -provider-path "$WOLFPROV_PATH" -provider libwolfprov \
103+
use_wolf_provider
104+
if ! $OPENSSL_BIN enc -aes-${key_size}-${mode} -K "$key" $iv \
100105
-in aes_outputs/test_data.txt -out "$enc_file" -p; then
101106
echo "[FAIL] Interop AES-${key_size}-${mode}: wolfProvider encrypt failed"
102107
FAIL=1
103108
fi
104109

105110
# Decryption with OpenSSL default provider
106-
if ! $OPENSSL_BIN enc -aes-${key_size}-${mode} -K "$key" $iv -provider default \
111+
use_default_provider
112+
if ! $OPENSSL_BIN enc -aes-${key_size}-${mode} -K "$key" $iv \
107113
-in "$enc_file" -out "$dec_file" -d -p; then
108114
echo "[FAIL] Interop AES-${key_size}-${mode}: OpenSSL decrypt failed"
109115
FAIL=1

scripts/cmd_test/clean-cmd-test.sh

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,12 @@
1717
# You should have received a copy of the GNU General Public License
1818
# along with wolfProvider. If not, see <http://www.gnu.org/licenses/>.
1919

20+
if [ -z "${DO_CMD_TESTS:-}" ]; then
21+
echo "This script is designed to be called from do-cmd-tests.sh"
22+
echo "Do not run this script directly - use do-cmd-tests.sh instead"
23+
exit 1
24+
fi
25+
2026
# Function to clean up specific command test artifacts
2127
clean_cmd_test() {
2228
local test_type=$1

scripts/cmd_test/cmd-test-common.sh

Lines changed: 112 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -17,132 +17,151 @@
1717
# You should have received a copy of the GNU General Public License
1818
# along with wolfProvider. If not, see <http://www.gnu.org/licenses/>.
1919

20-
COMMON_SETUP_DONE=0
20+
# Global variables to store wolfProvider installation mode
21+
# Only initialize if not already set (allows parent script to export values)
2122

22-
cmd_test_env_setup() {
23-
# Fail flags
24-
FAIL=0
25-
FORCE_FAIL_PASSED=0
23+
if [ -z "${DO_CMD_TESTS:-}" ]; then
24+
echo "This script is designed to be called from do-cmd-tests.sh"
25+
echo "Do not run this script directly - use do-cmd-tests.sh instead"
26+
exit 1
27+
fi
2628

27-
if [ $COMMON_SETUP_DONE -ne 0 ]; then
28-
echo "Setup already completed, skipping."
29-
return
30-
fi
29+
CMD_TEST_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
30+
source "${CMD_TEST_DIR}/../utils-general.sh"
3131

32-
local log_file_name=$1
33-
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
34-
# Set up environment
35-
export LOG_FILE="${SCRIPT_DIR}/${log_file_name}"
36-
touch "$LOG_FILE"
32+
# Function to setup the environment for the command-line tests
33+
cmd_test_env_setup() {
34+
export OPENSSL_BIN=${OPENSSL_BIN:-$(which openssl)}
35+
printf "Using OPENSSL_BIN: %s\n" "$OPENSSL_BIN"
3736

38-
# If OPENSSL_BIN is not set, assume we are using a local build
39-
if [ -z "${OPENSSL_BIN:-}" ]; then
40-
echo "OPENSSL_BIN not set, assuming local build"
41-
# Check if the install directories exist
42-
if [ ! -d "${REPO_ROOT}/openssl-install" ] ||
43-
[ ! -d "${REPO_ROOT}/wolfssl-install" ]; then
44-
echo "[FAIL] OpenSSL or wolfSSL install directories not found"
45-
echo "Please set OPENSSL_BIN or run build-wolfprovider.sh first"
46-
exit 1
47-
fi
37+
OPENSSL_CONF_ORIG="${OPENSSL_CONF:-}"
38+
OPENSSL_MODULES_ORIG="${OPENSSL_MODULES:-}"
39+
}
4840

49-
# Setup the environment for a local build
50-
source "${REPO_ROOT}/scripts/env-setup"
51-
else
52-
echo "Using user-provided OPENSSL_BIN: ${OPENSSL_BIN}"
53-
# We are using a user-provided OpenSSL binary, manually set the test
54-
# environment variables rather than using env-setup.
55-
# Find the location of the wolfProvider modules
56-
if [ -z "${WOLFPROV_PATH:-}" ]; then
57-
export WOLFPROV_PATH=$(find /usr/lib /usr/local/lib -type d -name ossl-modules 2>/dev/null | head -n 1)
58-
fi
59-
# Set the path to the wolfProvider config file
60-
if [ -z "${WOLFPROV_CONFIG:-}" ]; then
61-
if [ "${WOLFSSL_ISFIPS:-0}" = "1" ]; then
62-
export WOLFPROV_CONFIG="${REPO_ROOT}/provider-fips.conf"
63-
else
64-
export WOLFPROV_CONFIG="${REPO_ROOT}/provider.conf"
65-
fi
66-
fi
67-
fi
6841

69-
# Get the force fail parameter
70-
if [ "${WOLFPROV_FORCE_FAIL}" = "1" ]; then
71-
echo "Force fail mode enabled"
72-
fi
73-
if [ "${WOLFSSL_ISFIPS}" = "1" ]; then
74-
echo "FIPS mode enabled"
75-
fi
42+
# Individual test setup (called by each test script)
43+
cmd_test_init() {
44+
local log_file_name=$1
45+
CMD_TEST_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
7646

77-
# Print environment for verification
78-
echo "Environment variables:"
79-
echo "OPENSSL_MODULES: ${OPENSSL_MODULES}"
80-
echo "OPENSSL_BIN: ${OPENSSL_BIN}"
81-
echo "WOLFPROV_PATH: ${WOLFPROV_PATH}"
82-
echo "WOLFPROV_CONFIG: ${WOLFPROV_CONFIG}"
83-
echo "LOG_FILE: ${LOG_FILE}"
47+
# Set up log file
48+
export LOG_FILE="${CMD_TEST_DIR}/${log_file_name}"
49+
touch "$LOG_FILE"
8450

85-
COMMON_SETUP_DONE=1
86-
}
51+
# Redirect all output to log file
52+
exec > >(tee -a "$LOG_FILE") 2>&1
8753

88-
# Check if default provider is in use
89-
# Note that this may be wolfProvider if built as replace-default
90-
is_default_provider() {
91-
return $($OPENSSL_BIN list -providers | grep -qi "default")
54+
# Fail flags
55+
FAIL=0
56+
FORCE_FAIL_PASSED=0
9257
}
9358

59+
9460
# Function to use default provider only
9561
use_default_provider() {
96-
unset OPENSSL_MODULES
97-
unset OPENSSL_CONF
62+
return 0
9863

99-
# Verify that we are using the default provider
100-
if ! is_default_provider; then
101-
echo "FAIL: unable to switch to default provider"
102-
$OPENSSL_BIN list -providers
103-
exit 1
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
10470
fi
105-
echo "Switched to default provider"
106-
}
71+
detect_wolfprovider_mode
72+
73+
# 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
80+
echo "Using default provider (wolfProvider in replace-default mode)"
81+
else
82+
echo "FAIL: Expected wolfProvider as default, but is_wp_active: $is_wp_active and is_wp_default: $is_wp_default"
83+
exit 1
84+
fi
85+
else
86+
# In non-replace-default mode, unsetting OPENSSL_MODULES should disable wolfProvider
87+
echo "INFO: wolfProvider is installed in non-replace-default mode"
10788

108-
is_wolf_provider() {
109-
return $($OPENSSL_BIN list -providers | grep -qi "wolfSSL Provider")
89+
# Verify that we are using the OpenSSL default provider (not wolfProvider)
90+
if [ "$is_openssl_default_provider" != "1" ]; then
91+
echo "FAIL: unable to switch to default provider, wolfProvider is still active"
92+
echo "is_openssl_default_provider: $is_openssl_default_provider"
93+
exit 1
94+
fi
95+
echo "INFO: Switched to default provider (OpenSSL)"
96+
fi
11097
}
11198

99+
112100
# Function to use wolf provider only
113101
use_wolf_provider() {
114-
export OPENSSL_MODULES=$WOLFPROV_PATH
115-
export OPENSSL_CONF=${WOLFPROV_CONFIG}
116-
117-
# Verify that we are using wolfProvider
118-
if ! is_wolf_provider; then
119-
echo "FAIL: unable to switch to wolfProvider"
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
111+
detect_wolfprovider_mode
112+
113+
# 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
122+
echo "Using wolfProvider (replace-default mode)"
123+
else
124+
echo "FAIL: wolfProvider is not active"
125+
echo "is_wp_active: $is_wp_active"
126+
echo "is_wp_default: $is_wp_default"
127+
exit 1
128+
fi
129+
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"
132+
133+
# Verify that we are using wolfProvider
134+
if [ "$is_wp_active" != "1" ]; then
135+
echo "FAIL: unable to switch to wolfProvider, default provider is still active"
136+
$OPENSSL_BIN list -providers
137+
echo "is_wp_active: $is_wp_active"
138+
echo "is_wp_default: $is_wp_default"
139+
exit 1
140+
fi
141+
echo "INFO: Switched to wolfProvider"
120142
$OPENSSL_BIN list -providers
121-
exit 1
122143
fi
123-
echo "Switched to wolfProvider"
124144
}
125145

126-
is_replace_default() {
127-
return $($OPENSSL_BIN list -providers | grep -qi "wolfSSL Provider")
128-
}
129146

130147
# Helper function to handle force fail checks
131148
check_force_fail() {
132-
if is_default_provider && ! is_replace_default; then
149+
detect_wolfprovider_mode
150+
if [ "$is_openssl_default_provider" = "1" ]; then
151+
# With the OpenSSL provider, don't expect failures
133152
echo "OPENSSL Default provider active, no forced failures expected."
134-
elif [ "${WOLFPROV_FORCE_FAIL}" = "1" ]; then
153+
elif [ "$WOLFPROV_FORCE_FAIL" = "1" ]; then
135154
echo "[PASS] Test passed when force fail was enabled"
136155
FORCE_FAIL_PASSED=1
156+
exit 1
137157
fi
138158
}
139159

140-
# Helper function to get provider name from provider arguments
141-
get_provider_name() {
142-
local provider_args=$1
143-
if [ "$provider_args" = "-provider default" ]; then
144-
echo "default"
160+
use_provider_by_name() {
161+
local provider_name=$1
162+
if [ "$provider_name" = "libwolfprov" ]; then
163+
use_wolf_provider
145164
else
146-
echo "libwolfprov"
165+
use_default_provider
147166
fi
148167
}

0 commit comments

Comments
 (0)