examples/pem/pem.c: don't wolfCrypt_Cleanup() unless wolfcrypt_inited;

scripts/pem.test:
* add setup for WOLFSSL_NO_DER_TO_PEM,
* exit early with skip code if executable dependencies are missing or WOLFSSL_NO_PEM or NO_CODING, and
* add clean skip clauses to convert_to_pem(), compare_pem(), and pem_der_exp(), if WOLFSSL_NO_DER_TO_PEM.
pull/10262/head
Daniel Pouzzner 2026-04-20 12:47:36 -05:00
parent e601e04444
commit 8b6739296c
2 changed files with 68 additions and 4 deletions

View File

@ -755,6 +755,7 @@ int main(int argc, char* argv[])
#ifdef DEBUG_WOLFSSL
int log = 0;
#endif
int wolfcrypt_inited = 0;
progname = strrchr(argv[0], '/');
if (progname)
@ -979,6 +980,7 @@ int main(int argc, char* argv[])
progname, wc_GetErrorString(ret));
exit(1);
}
wolfcrypt_inited = 1;
/* Convert PEM type string to value. */
if (type_str != NULL) {
@ -1075,10 +1077,12 @@ out:
if ((out_file != stdout) && (out_file != NULL))
(void)fclose(out_file);
ret = wolfCrypt_Cleanup();
if (ret != 0) {
fprintf(stderr, "%s: wolfCrypt_Cleanup() failed: %s.\n",
progname, wc_GetErrorString(ret));
if (wolfcrypt_inited) {
ret = wolfCrypt_Cleanup();
if (ret != 0) {
fprintf(stderr, "%s: wolfCrypt_Cleanup() failed: %s.\n",
progname, wc_GetErrorString(ret));
}
}
return (ret == 0) ? 0 : 1;

View File

@ -19,6 +19,16 @@ CR=$'\n'
ENC_STRING="encrypt"
DER_TO_PEM_STRING="input is DER and output is PEM"
if ! "$PEM_EXE" --help >/dev/null 2>&1; then
echo "$PEM_EXE not found -- skipping pem.test."
exit 77
fi
if ! "$ASN1_EXE" --help >/dev/null 2>&1; then
echo "$ASN1_EXE not found -- skipping pem.test."
exit 77
fi
if grep -q -E '^#define HAVE_FIPS$' wolfssl/options.h; then
HAVE_FIPS=1
fi
@ -51,6 +61,41 @@ if ! grep -q -E '^#define NO_DH$' wolfssl/options.h; then
HAVE_DH=1
fi
if grep -q -E '^#define WOLFSSL_KEY_GEN$' wolfssl/options.h; then
WOLFSSL_KEY_GEN=1
fi
if grep -q -E '^#define WOLFSSL_CERT_GEN$' wolfssl/options.h; then
WOLFSSL_CERT_GEN=1
fi
if grep -q -E '^#define OPENSSL_EXTRA$' wolfssl/options.h; then
OPENSSL_EXTRA=1
fi
if [[ ! -v WOLFSSL_KEY_GEN && ! -v WOLFSSL_CERT_GEN && ! -v OPENSSL_EXTRA ]]; then
WOLFSSL_NO_DER_TO_PEM=1
fi
if grep -q -E '^#define WOLFSSL_NO_PEM$' wolfssl/options.h; then
WOLFSSL_NO_PEM=1
fi
if grep -q -E '^#define NO_CODING$' wolfssl/options.h; then
NO_CODING=1
fi
if [[ -v WOLFSSL_NO_PEM ]]; then
echo "WOLFSSL_NO_PEM is configured -- skipping pem.test."
exit 77
fi
if [[ -v NO_CODING ]]; then
echo "NO_CODING is configured -- skipping pem.test."
exit 77
fi
# Cleanup temporaries created during testing.
do_cleanup() {
echo
@ -210,6 +255,11 @@ compare_der() {
#
# @param [in] $* Command line parameters to pem example.
convert_to_pem() {
if [[ -v WOLFSSL_NO_DER_TO_PEM ]]; then
echo ' Skipping -- WOLFSSL_NO_DER_TO_PEM'
TEST_SKIP_CNT=$((TEST_SKIP_CNT+1))
return 0
fi
if [ "$SKIP" = "" -a "$FAILED" = "" ]; then
echo " $PEM_EXE --der -t \"$PEM_TYPE\" $* -out $tmp_pem_file"
$PEM_EXE --der "$@" -t "$PEM_TYPE" -out $tmp_pem_file
@ -239,6 +289,11 @@ compare_pem() {
# @param [in] $3 PEM type expected in PEM file and to place in created PEM
# file.
pem_der_exp() {
if [[ -v WOLFSSL_NO_DER_TO_PEM ]]; then
echo ' Skipping -- WOLFSSL_NO_DER_TO_PEM'
TEST_SKIP_CNT=$((TEST_SKIP_CNT+1))
return 0
fi
if [ "$SKIP" = "" -a "$FAILED" = "" ]; then
PEM_FILE=$1
DER_FILE=$2
@ -269,6 +324,11 @@ pem_der_exp() {
#
# @param [in] $@ Command line parameters to pem example when encrypting.
der_pem_enc() {
if [[ -v WOLFSSL_NO_DER_TO_PEM ]]; then
echo ' Skipping -- WOLFSSL_NO_DER_TO_PEM'
TEST_SKIP_CNT=$((TEST_SKIP_CNT+1))
return 0
fi
PEM_TYPE="ENCRYPTED PRIVATE KEY"
convert_to_pem -in ./certs/server-key.der -p yassl123 "$@" || return $?
convert_to_der -in $tmp_pem_file -p yassl123 || return $?