Topic: Multiple definition of wc_PRF_fips when building 5.2.0 fips-ready

I get the following error when building wolfssl-5.2.0-gplv3-fips-ready.  The wc_PRF_fips() declaration in fips.c conflicts with the wc_PRF() in kdf.c because in fips.h wc_PRF is defined as wc_PRF_fips.  It seems like a bug to me.

I have been playing with NO_KDF and WOLFSSL_HAVE_PRF but have not found a combination that resolves this.

Here is the link here:

/bin/sh ./libtool  --tag=CC   --mode=link /opt/codefidence/bin/mipsel-linux-uclibc-gcc -DBUILDING_WOLFSSL -DHAVE_THREAD_LS -g -DDEBUG -DDEBUG_WOLFSSL -DNO_DO178 -DHAVE_REPRODUCIBLE_BUILD -DHAVE_LINUXKM_PIE_SUPPORT -D_POSIX_THREADS -pthread -DTFM_TIMING_RESISTANT -DECC_TIMING_RESISTANT -DWC_RSA_BLINDING -DWOLFSSL_USE_ALIGN -DWOLFSSL_SHA512 -DWOLFSSL_SHA384 -DHAVE_HKDF -DNO_DSA -DHAVE_ECC -DTFM_ECC256 -DECC_SHAMIR -DWC_RSA_PSS             -DHAVE_FIPS             -DHAVE_FIPS_VERSION=2             -DHAVE_FIPS_VERSION_MINOR=0             -DWOLFSSL_KEY_GEN             -DWOLFSSL_SHA224             -DWOLFSSL_AES_DIRECT             -DHAVE_AES_ECB             -DHAVE_ECC_CDH             -DWC_RSA_NO_PADDING             -DWOLFSSL_VALIDATE_FFC_IMPORT             -DHAVE_FFDHE_Q             -DHAVE_PUBLIC_FFDHE -DWOLFSSL_NO_SHAKE256 -DWOLFSSL_NOSHA512_224 -DWOLFSSL_NOSHA512_256 -DHAVE_AESCCM -DWOLFSSL_VALIDATE_ECC_IMPORT -DWOLFSSL_AES_COUNTER -DWOLFSSL_CMAC -DHAVE_HASHDRBG -DHAVE_OCSP -DHAVE_OPENSSL_CMD -DHAVE_CRL -DHAVE_TLS_EXTENSIONS -DHAVE_SUPPORTED_CURVES -DHAVE_FFDHE_2048 -DHAVE_SUPPORTED_CURVES -DWOLFSSL_TLS13 -DHAVE_TLS_EXTENSIONS -DHAVE_EXTENDED_MASTER -DNO_RC4 -DHAVE_ENCRYPT_THEN_MAC -DNO_PSK -DNO_MD4 -DWC_NO_ASYNC_THREADING -DHAVE_DH_DEFAULT_PARAMS -DWOLFSSL_KEY_GEN -DWOLFSSL_AES_COUNTER -DWOLFSSL_AES_DIRECT -DGCM_TABLE_4BIT -DHAVE_AESGCM -DHAVE_TLS_EXTENSIONS -DHAVE_SERVER_RENEGOTIATION_INFO -Wall -Wno-unused -DHAVE___UINT128_T=1  -DLIBWOLFSSL_GLOBAL_EXTRA_CFLAGS="\" \"" -DNO_DEV_RANDOM -DWOLFSSL_USER_IO -Os   -g -ggdb -O0 -Wall -Wno-strict-aliasing -Wextra -Wunknown-pragmas -Wbad-function-cast -Wchar-subscripts -Wcomment -Wfloat-equal -Wformat-security -Wformat=2 -Wmissing-noreturn -Wmissing-prototypes -Wnested-externs -Wpointer-arith -Wredundant-decls -Wshadow -Wsign-compare -Wswitch-enum -Wundef -Wunused -Wunused-variable -Wwrite-strings -fwrapv  -no-undefined -version-info 32:0:0  -o src/libwolfssl.la -rpath /usr/local/lib        wolfcrypt/src/src_libwolfssl_la-wolfcrypt_first.lo wolfcrypt/src/src_libwolfssl_la-hmac.lo wolfcrypt/src/src_libwolfssl_la-random.lo wolfcrypt/src/src_libwolfssl_la-sha256.lo wolfcrypt/src/src_libwolfssl_la-rsa.lo wolfcrypt/src/src_libwolfssl_la-ecc.lo wolfcrypt/src/src_libwolfssl_la-aes.lo  wolfcrypt/src/src_libwolfssl_la-des3.lo wolfcrypt/src/src_libwolfssl_la-sha.lo  wolfcrypt/src/src_libwolfssl_la-sha512.lo   wolfcrypt/src/src_libwolfssl_la-dh.lo wolfcrypt/src/src_libwolfssl_la-cmac.lo wolfcrypt/src/src_libwolfssl_la-fips.lo wolfcrypt/src/src_libwolfssl_la-fips_test.lo wolfcrypt/src/src_libwolfssl_la-wolfcrypt_last.lo                                      wolfcrypt/src/src_libwolfssl_la-hash.lo wolfcrypt/src/src_libwolfssl_la-cpuid.lo wolfcrypt/src/src_libwolfssl_la-kdf.lo                                   wolfcrypt/src/src_libwolfssl_la-logging.lo wolfcrypt/src/src_libwolfssl_la-wc_port.lo wolfcrypt/src/src_libwolfssl_la-error.lo wolfcrypt/src/src_libwolfssl_la-wc_encrypt.lo wolfcrypt/src/src_libwolfssl_la-signature.lo wolfcrypt/src/src_libwolfssl_la-wolfmath.lo wolfcrypt/src/src_libwolfssl_la-memory.lo  wolfcrypt/src/src_libwolfssl_la-asn.lo wolfcrypt/src/src_libwolfssl_la-coding.lo      wolfcrypt/src/src_libwolfssl_la-md5.lo wolfcrypt/src/src_libwolfssl_la-pwdbased.lo wolfcrypt/src/src_libwolfssl_la-pkcs12.lo              wolfcrypt/src/src_libwolfssl_la-integer.lo                           src/src_libwolfssl_la-internal.lo src/src_libwolfssl_la-wolfio.lo src/src_libwolfssl_la-keys.lo src/src_libwolfssl_la-ssl.lo src/src_libwolfssl_la-tls.lo src/src_libwolfssl_la-tls13.lo src/src_libwolfssl_la-ocsp.lo src/src_libwolfssl_la-crl.lo              -lm   -lpthread
libtool: link: /opt/codefidence/bin/mipsel-linux-uclibc-gcc -shared  -fPIC -DPIC  wolfcrypt/src/.libs/src_libwolfssl_la-wolfcrypt_first.o wolfcrypt/src/.libs/src_libwolfssl_la-hmac.o wolfcrypt/src/.libs/src_libwolfssl_la-random.o wolfcrypt/src/.libs/src_libwolfssl_la-sha256.o wolfcrypt/src/.libs/src_libwolfssl_la-rsa.o wolfcrypt/src/.libs/src_libwolfssl_la-ecc.o wolfcrypt/src/.libs/src_libwolfssl_la-aes.o wolfcrypt/src/.libs/src_libwolfssl_la-des3.o wolfcrypt/src/.libs/src_libwolfssl_la-sha.o wolfcrypt/src/.libs/src_libwolfssl_la-sha512.o wolfcrypt/src/.libs/src_libwolfssl_la-dh.o wolfcrypt/src/.libs/src_libwolfssl_la-cmac.o wolfcrypt/src/.libs/src_libwolfssl_la-fips.o wolfcrypt/src/.libs/src_libwolfssl_la-fips_test.o wolfcrypt/src/.libs/src_libwolfssl_la-wolfcrypt_last.o wolfcrypt/src/.libs/src_libwolfssl_la-hash.o wolfcrypt/src/.libs/src_libwolfssl_la-cpuid.o wolfcrypt/src/.libs/src_libwolfssl_la-kdf.o wolfcrypt/src/.libs/src_libwolfssl_la-logging.o wolfcrypt/src/.libs/src_libwolfssl_la-wc_port.o wolfcrypt/src/.libs/src_libwolfssl_la-error.o wolfcrypt/src/.libs/src_libwolfssl_la-wc_encrypt.o wolfcrypt/src/.libs/src_libwolfssl_la-signature.o wolfcrypt/src/.libs/src_libwolfssl_la-wolfmath.o wolfcrypt/src/.libs/src_libwolfssl_la-memory.o wolfcrypt/src/.libs/src_libwolfssl_la-asn.o wolfcrypt/src/.libs/src_libwolfssl_la-coding.o wolfcrypt/src/.libs/src_libwolfssl_la-md5.o wolfcrypt/src/.libs/src_libwolfssl_la-pwdbased.o wolfcrypt/src/.libs/src_libwolfssl_la-pkcs12.o wolfcrypt/src/.libs/src_libwolfssl_la-integer.o src/.libs/src_libwolfssl_la-internal.o src/.libs/src_libwolfssl_la-wolfio.o src/.libs/src_libwolfssl_la-keys.o src/.libs/src_libwolfssl_la-ssl.o src/.libs/src_libwolfssl_la-tls.o src/.libs/src_libwolfssl_la-tls13.o src/.libs/src_libwolfssl_la-ocsp.o src/.libs/src_libwolfssl_la-crl.o   -lm -lpthread  -g -pthread -Os -g -ggdb -O0   -pthread -Wl,-soname -Wl,libwolfssl.so.32 -o src/.libs/libwolfssl.so.32.0.0
wolfcrypt/src/.libs/src_libwolfssl_la-kdf.o: In function `wc_PRF_fips':
wolfcrypt/src/kdf.c:71: multiple definition of `wc_PRF_fips'
wolfcrypt/src/.libs/src_libwolfssl_la-fips.o:wolfcrypt/src/fips.c:1628: first defined here
wolfcrypt/src/.libs/src_libwolfssl_la-kdf.o: In function `wc_PRF_TLSv12_fips':
wolfcrypt/src/kdf.c:301: multiple definition of `wc_PRF_TLSv12_fips'
wolfcrypt/src/.libs/src_libwolfssl_la-fips.o:wolfcrypt/src/fips.c:1650: first defined here
wolfcrypt/src/.libs/src_libwolfssl_la-kdf.o: In function `wc_Tls13_HKDF_Extract_fips':
wolfcrypt/src/kdf.c:362: multiple definition of `wc_Tls13_HKDF_Extract_fips'
wolfcrypt/src/.libs/src_libwolfssl_la-fips.o:wolfcrypt/src/fips.c:1728: first defined here
wolfcrypt/src/.libs/src_libwolfssl_la-kdf.o: In function `wc_Tls13_HKDF_Expand_Label_fips':
wolfcrypt/src/kdf.c:432: multiple definition of `wc_Tls13_HKDF_Expand_Label_fips'
wolfcrypt/src/.libs/src_libwolfssl_la-fips.o:wolfcrypt/src/fips.c:1749: first defined here
collect2: ld returned 1 exit status
make[3]: *** [src/libwolfssl.la] Error 1
make[3]: Leaving directory `/home/jerryr/work/sip/buildroot/build_mipsel_nofpu/wolfssl-5.2.0-gplv3-fips-ready'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/home/jerryr/work/sip/buildroot/build_mipsel_nofpu/wolfssl-5.2.0-gplv3-fips-ready'
make[1]: *** [all] Error 2
make[1]: Leaving directory `/home/jerryr/work/sip/buildroot/build_mipsel_nofpu/wolfssl-5.2.0-gplv3-fips-ready'
make: *** [/home/jerryr/work/sip/buildroot/build_mipsel_nofpu/wolfssl-5.2.0-gplv3-fips-ready/src/libwolfssl.la] Error 2

Share

Re: Multiple definition of wc_PRF_fips when building 5.2.0 fips-ready

Hello Jerry,

Thanks for joining the forums. For the version of FIPS Ready you are building, you'll want to change the versions to:

        HAVE_FIPS_VERSION=5
        HAVE_FIPS_VERSION_MINOR=3

I'd invite you to send an email to support@wolfssl.com in order to better prioritize questions.

Thanks,
Eric @ wolfSSL Support