aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKenjiro Nakayama <nakayamakenjiro@gmail.com>2026-07-19 18:08:07 +0900
committerKenjiro Nakayama <nakayamakenjiro@gmail.com>2026-07-30 07:28:14 +0900
commitdf1ed6bb4ec3e72c20a7082cc168a45ae67704ba (patch)
tree85a6a4a9c041c5be5c28172f62e04d2440576e40
parent3d686a7cbd84221fde5d7e03fa47896f6abf1d6c (diff)
downloadportable-df1ed6bb4ec3e72c20a7082cc168a45ae67704ba.tar.gz
portable-df1ed6bb4ec3e72c20a7082cc168a45ae67704ba.tar.bz2
portable-df1ed6bb4ec3e72c20a7082cc168a45ae67704ba.zip
add libssl verify test
Copy regress/lib/libssl/verify/verify.c as ssl_verify.c to avoid basename collisions when regress tests are flattened into tests. Copy create-libressl-test-certs.pl and add a wrapper that generates the test certificates before running ssl_verify. Detect the required IO::Socket::SSL::Utils Perl module and register the test with both autotools and CMake when it is available. Also document x509/bettertls is not included.
-rw-r--r--.gitignore2
-rw-r--r--CMakeLists.txt9
-rw-r--r--configure.ac11
-rw-r--r--tests/CMakeLists.txt11
-rw-r--r--tests/Makefile.am10
-rwxr-xr-xtests/ssl_verify.sh60
-rwxr-xr-xupdate.sh6
7 files changed, 109 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index 8a72400..d85df81 100644
--- a/.gitignore
+++ b/.gitignore
@@ -141,10 +141,12 @@ tests/*test.c
141tests/pbkdf2* 141tests/pbkdf2*
142tests/*.pem 142tests/*.pem
143tests/certs/ 143tests/certs/
144tests/create-libressl-test-certs.pl
144tests/make-dir-roots.pl 145tests/make-dir-roots.pl
145tests/testssl 146tests/testssl
146tests/*.txt 147tests/*.txt
147tests/compat/*.c 148tests/compat/*.c
149tests/ssl_verify.c
148tests/verify* 150tests/verify*
149tests/x509_verify* 151tests/x509_verify*
150!tests/x509_verify.sh 152!tests/x509_verify.sh
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 699603b..4ffe67b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -33,6 +33,15 @@ include(GNUInstallDirs)
33 33
34enable_testing() 34enable_testing()
35find_program(PERL_EXECUTABLE perl perl5) 35find_program(PERL_EXECUTABLE perl perl5)
36set(HAVE_PERL_IO_SOCKET_SSL_UTILS FALSE)
37if(PERL_EXECUTABLE)
38 execute_process(COMMAND ${PERL_EXECUTABLE} -MIO::Socket::SSL::Utils -e 1
39 RESULT_VARIABLE PERL_IO_SOCKET_SSL_UTILS_RESULT
40 OUTPUT_QUIET ERROR_QUIET)
41 if(PERL_IO_SOCKET_SSL_UTILS_RESULT EQUAL 0)
42 set(HAVE_PERL_IO_SOCKET_SSL_UTILS TRUE)
43 endif()
44endif()
36 45
37file(READ ${CMAKE_CURRENT_SOURCE_DIR}/ssl/VERSION SSL_VERSION) 46file(READ ${CMAKE_CURRENT_SOURCE_DIR}/ssl/VERSION SSL_VERSION)
38string(STRIP ${SSL_VERSION} SSL_VERSION) 47string(STRIP ${SSL_VERSION} SSL_VERSION)
diff --git a/configure.ac b/configure.ac
index 9012535..23f0c38 100644
--- a/configure.ac
+++ b/configure.ac
@@ -34,6 +34,17 @@ LT_INIT([pic-only])
34 34
35AC_CHECK_PROGS([PERL], [perl perl5]) 35AC_CHECK_PROGS([PERL], [perl perl5])
36AM_CONDITIONAL([HAVE_PERL], [test "x$PERL" != x]) 36AM_CONDITIONAL([HAVE_PERL], [test "x$PERL" != x])
37AC_CACHE_CHECK([for IO::Socket::SSL::Utils],
38 [ac_cv_perl_io_socket_ssl_utils],
39 [if test "x$PERL" = x; then
40 ac_cv_perl_io_socket_ssl_utils=no
41 elif "$PERL" -MIO::Socket::SSL::Utils -e 1 >/dev/null 2>&1; then
42 ac_cv_perl_io_socket_ssl_utils=yes
43 else
44 ac_cv_perl_io_socket_ssl_utils=no
45 fi])
46AM_CONDITIONAL([HAVE_PERL_IO_SOCKET_SSL_UTILS],
47 [test "x$ac_cv_perl_io_socket_ssl_utils" = xyes])
37 48
38CHECK_OS_OPTIONS 49CHECK_OS_OPTIONS
39 50
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index ede7463..45681a1 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -844,6 +844,17 @@ add_executable(ssl_verify_param ssl_verify_param.c)
844target_link_libraries(ssl_verify_param ${OPENSSL_TEST_LIBS}) 844target_link_libraries(ssl_verify_param ${OPENSSL_TEST_LIBS})
845add_platform_test(ssl_verify_param ssl_verify_param) 845add_platform_test(ssl_verify_param ssl_verify_param)
846 846
847# ssl_verify
848add_executable(ssl_verify ssl_verify.c)
849target_link_libraries(ssl_verify ${OPENSSL_TEST_LIBS})
850if(NOT WIN32 AND NOT EMSCRIPTEN AND HAVE_PERL_IO_SOCKET_SSL_UTILS)
851 add_test(NAME ssl_verify COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/ssl_verify.sh
852 $<TARGET_FILE:ssl_verify>)
853 set_tests_properties(ssl_verify PROPERTIES
854 ENVIRONMENT "srcdir=${TEST_SOURCE_DIR};PERL=${PERL_EXECUTABLE}"
855 WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
856endif()
857
847# ssl_versions 858# ssl_versions
848add_executable(ssl_versions ssl_versions.c) 859add_executable(ssl_versions ssl_versions.c)
849target_link_libraries(ssl_versions ${OPENSSL_TEST_LIBS}) 860target_link_libraries(ssl_versions ${OPENSSL_TEST_LIBS})
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 9b58724..7d581c8 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -104,6 +104,7 @@ EXTRA_DIST = CMakeLists.txt
104DISTCLEANFILES = pidwraptest.txt 104DISTCLEANFILES = pidwraptest.txt
105 105
106distclean-local: 106distclean-local:
107 rm -rf ssl_verify-certs
107 rm -rf x509_verify-certs 108 rm -rf x509_verify-certs
108 109
109# XXX - should probably be in their own static lib 110# XXX - should probably be in their own static lib
@@ -855,6 +856,15 @@ TESTS += ssl_verify_param
855check_PROGRAMS += ssl_verify_param 856check_PROGRAMS += ssl_verify_param
856ssl_verify_param_SOURCES = ssl_verify_param.c 857ssl_verify_param_SOURCES = ssl_verify_param.c
857 858
859# ssl_verify
860if HAVE_PERL_IO_SOCKET_SSL_UTILS
861TESTS += ssl_verify.sh
862check_PROGRAMS += ssl_verify
863endif
864ssl_verify_SOURCES = ssl_verify.c
865EXTRA_DIST += ssl_verify.sh
866EXTRA_DIST += create-libressl-test-certs.pl
867
858# ssl_versions 868# ssl_versions
859TESTS += ssl_versions 869TESTS += ssl_versions
860check_PROGRAMS += ssl_versions 870check_PROGRAMS += ssl_versions
diff --git a/tests/ssl_verify.sh b/tests/ssl_verify.sh
new file mode 100755
index 0000000..ed32911
--- /dev/null
+++ b/tests/ssl_verify.sh
@@ -0,0 +1,60 @@
1#!/bin/sh
2#
3# Copyright (c) 2026 Kenjiro Nakayama
4#
5# Permission to use, copy, modify, and distribute this software for any
6# purpose with or without fee is hereby granted, provided that the above
7# copyright notice and this permission notice appear in all copies.
8#
9# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16
17set -e
18
19if [ -z "$srcdir" ]; then
20 srcdir=.
21fi
22
23if [ -z "$PERL" ]; then
24 PERL=perl
25fi
26
27case "$srcdir" in
28/*)
29 create_certs="$srcdir/create-libressl-test-certs.pl"
30 ;;
31*)
32 create_certs="`pwd`/$srcdir/create-libressl-test-certs.pl"
33 ;;
34esac
35
36if [ $# -ge 1 ]; then
37 verify_bin=$1
38else
39 verify_bin="`pwd`/ssl_verify"
40 if [ -e ./ssl_verify.exe ]; then
41 verify_bin="`pwd`/ssl_verify.exe"
42 fi
43fi
44
45workdir=ssl_verify-certs
46
47cleanup()
48{
49 rm -rf "$workdir"
50}
51trap cleanup EXIT
52
53rm -rf "$workdir"
54mkdir "$workdir"
55
56(
57 cd "$workdir"
58 "$PERL" "$create_certs"
59 "$verify_bin"
60)
diff --git a/update.sh b/update.sh
index a6d0ebd..83864d3 100755
--- a/update.sh
+++ b/update.sh
@@ -336,6 +336,8 @@ for i in `find $libcrypto_regress -name '*.[ch]'`; do
336done 336done
337# x509/verify.c collides with x509/bettertls/verify.c when flattened. 337# x509/verify.c collides with x509/bettertls/verify.c when flattened.
338$CP $libcrypto_regress/x509/verify.c tests/x509_verify.c 338$CP $libcrypto_regress/x509/verify.c tests/x509_verify.c
339# Do not copy x509/bettertls/verify.c: it requires the large bettertls
340# certificate corpus, which is not worth bundling in release tarballs.
339$CP $libcrypto_regress/evp/evptests.txt tests 341$CP $libcrypto_regress/evp/evptests.txt tests
340$CP $libcrypto_regress/aead/*.txt tests 342$CP $libcrypto_regress/aead/*.txt tests
341$CP $libcrypto_regress/ct/ctlog.conf tests 343$CP $libcrypto_regress/ct/ctlog.conf tests
@@ -371,6 +373,10 @@ for i in `find $libssl_regress -name '*.c'`; do
371done 373done
372# tls/tlstest.c collides with libtls/tls/tlstest.c when flattened. 374# tls/tlstest.c collides with libtls/tls/tlstest.c when flattened.
373$CP $libssl_regress/tls/tlstest.c tests/ssl_tlstest.c 375$CP $libssl_regress/tls/tlstest.c tests/ssl_tlstest.c
376# verify/verify.c collides with other verify tests when flattened.
377rm -f tests/verify.c
378$CP $libssl_regress/verify/verify.c tests/ssl_verify.c
379$CP $libssl_regress/verify/create-libressl-test-certs.pl tests
374$CP $libssl_regress/unit/tests.h tests 380$CP $libssl_regress/unit/tests.h tests
375$CP $libssl_regress/certs/*.pem tests 381$CP $libssl_regress/certs/*.pem tests
376$CP $libssl_regress/certs/*.crl tests 382$CP $libssl_regress/certs/*.crl tests