summaryrefslogtreecommitdiffstats
path: root/SoftHSMv2/m4/acx_openssl_fips.m4
blob: a55c20933a12eeb6a1739e45184f278e0b770c00 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
AC_DEFUN([ACX_OPENSSL_FIPS],[
	AC_MSG_CHECKING(for OpenSSL FIPS capable library)

	tmp_CPPFLAGS=$CPPFLAGS
	tmp_LIBS=$LIBS

	CPPFLAGS="$CPPFLAGS $CRYPTO_INCLUDES"
	LIBS="$CRYPTO_LIBS $LIBS"

	# check whether we can build an application which can
	# "reference the OpenSSL FIPS object module"

	AC_LANG_PUSH([C])
	AC_CACHE_VAL([acx_cv_lib_openssl_fips],[
		acx_cv_lib_openssl_fips=no
		AC_RUN_IFELSE([
			AC_LANG_SOURCE([[
				#include <openssl/crypto.h>
				int main()
				{
					return !FIPS_mode_set(1);
				}
			]])
		],[
			AC_MSG_RESULT([Found working FIPS_mode_set()])
			acx_cv_lib_openssl_fips=yes
		],[
			AC_MSG_RESULT([FIPS_mode_set(1) failed])
			AC_MSG_ERROR([OpenSSL library is not FIPS capable])
		],[
			AC_MSG_WARN([Cannot test, assuming FIPS])
			acx_cv_lib_openssl_fips=yes
		])
	])
	AC_LANG_POP([C])

	# build missing fips_premain_dso tool

	if test "x${FIPSLD_CC}" != "x"; then
		THERE="`echo $CC | sed -e 's|[[^/]]*$||'`"..
		if test "x${FIPSLIBDIR}" != "x"; then
			PREMAIN_C="${FIPSLIBDIR}/fips_premain.c"
		elif test -f "${THERE}/fips/fips_premain.c"; then
			PREMAIN_C="${THERE}/fips/fips_premain.c"
		elif test -f "${THERE}/lib/fips_premain.c"; then
			PREMAIN_C="${THERE}/lib/fips_premain.c"
		else
			AC_MSG_WARN([can't find fips_premain.c])
		fi

		$FIPSLD_CC $CPPFLAGS -DFINGERPRINT_PREMAIN_DSO_LOAD \
		-o src/lib/fips_premain_dso $PREMAIN_C $LIBS
	fi

	CPPFLAGS=$tmp_CPPFLAGS
	LIBS=$tmp_LIBS
])