@@ -87,32 +87,32 @@ if ("${WOLFSSL_PKG_TYPE}" MATCHES "normal")
8787elseif ("${WOLFSSL_PKG_TYPE} " MATCHES "fipsready" )
8888 # The wolfCrypt FIPS In Core Integrity checksum will vary with compiler
8989 # versions, runtime library versions, target hardware, and build type.
90- # Anytime the module is shifted up or down in memory or loaded from a
91- # new memory location the hash will change. This is expected during
92- # normal development cycles but should be stable in a production
93- # deployment. The verifyCore[] hash can be manually updated in
90+ # Anytime the module is shifted up or down in memory or loaded from a new
91+ # memory location the hash will change. This is expected during normal
92+ # development cycles but should be stable in a production deployment.
93+ # The verifyCore[] hash can be manually updated in
9494 # 'wolfcrypt/src/fips_test.c' and the app recompiled. Or, the define
9595 # WOLFCRYPT_FIPS_CORE_HASH_VALUE can be set below, which is helpful
96- # for Android Studio, which builds for all these architectures in the
97- # same build.
96+ # for Android Studio, which builds for all these architectures in the same
97+ # build.
9898 #
9999 # The hash values below are only for reference and will need to
100100 # be updated to match your build. To update this value:
101101 #
102102 # 1. Build and install your app which contains wolfCrypt FIPS
103103 # 2. Run your app on each architecture, looking at the logcat output
104104 # to see the expected verifyCore[] hash value.
105- # 3. Copy the expected hash value from logcat to the proper
106- # architecture section below.
105+ # 3. Copy the expected hash value from logcat to the proper architecture
106+ # section below.
107107 # 4. Re-build your application now that the expected hash value has
108108 # been set.
109109 # 5. Re-install and re-run your application on each architecture to
110110 # confirm the hash is stable and application runs as expected.
111111 #
112112 # NOTE: If using wolfSSL FIPS Ready or FIPS proper with this sample
113- # application and run into the scenario where the verifyCore[] hash
114- # output at runtime is empty, consider checking/increasing the size of
115- # the MAX_FIPS_DATA_SZ define in 'wolfcrypt/src/fips_test.c'.
113+ # application and run into the scenario where the verifyCore[] hash output
114+ # at runtime is empty, consider checking/increasing the size of the
115+ # MAX_FIPS_DATA_SZ define in 'wolfcrypt/src/fips_test.c'.
116116
117117 if ("${ANDROID_ABI} " MATCHES "arm64-v8a" )
118118 # https://developer.android.com/ndk/guides/abis#arm64-v8a
@@ -129,44 +129,64 @@ elseif("${WOLFSSL_PKG_TYPE}" MATCHES "fipsready")
129129 endif ()
130130
131131 # Add preprocessor defines to CFLAGS, these match those placed into
132- # wolfssl/options.h by configure if using: "./configure" on a Unix/Linux
133- # platform. The options below have been chosen to match a FIPS Ready
134- # build, and are based on the example user_settings.h file located here:
135- # https://github.com/wolfSSL/wolfssl/blob/master/examples/configs/user_settings_fipsv5.h
132+ # wolfssl/options.h by configure if using the following configure on a Unix/Linux
133+ # platform with a wolfSSL FIPS Ready GPLv3 bundle:
134+ #
135+ # ./configure --enable-fips=ready --enable-jni
136+ #
136137 # This list may be configurable depending on use case and desired
137- # optimizations, being careful not to break FIPS compatibility if
138- # targeting FIPS proper in the future.
139- add_definitions (-DHAVE_FIPS -DHAVE_FIPS_VERSION=5 -DHAVE_FIPS_VERSION_MINOR=3
140- -DHAVE_HASHDRBG -DHAVE_THREAD_LS -DHAVE_REPRODUCIBLE_BUILD
141- -DFP_MAX_BITS=16384 -DSP_INT_BITS=8192 -DWOLFSSL_PUBLIC_MP
142- -DTFM_TIMING_RESISTANT -DECC_TIMING_RESISTANT -DWC_RSA_BLINDING
143- -DWC_RNG_SEED_CB -DWOLFSSL_VALIDATE_ECC_IMPORT
144- -DWOLFSSL_VALIDATE_ECC_KEYGEN -DWOLFSSL_VALIDATE_FFC_IMPORT
145- -DWOLFSSL_TLS13 -DHAVE_TLS_EXTENSIONS -DHAVE_ENCRYPT_THEN_MAC
146- -DHAVE_SUPPORTED_CURVES -DHAVE_EXTENDED_MASTER -DHAVE_ONE_TIME_AUTH
147- -DHAVE_SECURE_RENEGOTIATION -DHAVE_SERVER_RENEGOTIATION_INFO -DHAVE_SESSION_TICKET
148- -DWOLFSSL_USE_ALIGN -DWOLFSSL_BASE64_ENCODE -DHAVE_CRL
149- -DHAVE_EXT_CACHE -DWOLFSSL_VERIFY_CB_ALL_CERTS -DWOLFSSL_ALWAYS_VERIFY_CB
150- -DWOLFSSL_DH_EXTRA -DWOLFSSL_WOLFSSH -DOPENSSL_EXTRA -DOPENSSL_ALL
151- -DHAVE_FFDHE_Q -DHAVE_FFDHE_2048 -DHAVE_FFDHE_3072 -DHAVE_FFDHE_4096
152- -DHAVE_FFDHE_6144 -DHAVE_FFDHE_8192 -DHAVE_DH_DEFAULT_PARAMS -DHAVE_PUBLIC_FFDHE
153- -DHAVE_ECC -DTFM_ECC256 -DECC_SHAMIR -DHAVE_ECC_CDH -DECC_USER_CURVES
154- -DHAVE_ECC256 -DHAVE_ECC384 -DHAVE_ECC521 -DWOLFSSL_ECDSA_SET_K
155- -DWC_RSA_PSS -DWOLFSSL_KEY_GEN -DWC_RSA_NO_PADDING
156- -DWOLFSSL_AES_COUNTER -DHAVE_AESCCM -DHAVE_AES_ECB -DWOLFSSL_AES_DIRECT
157- -DWOLFSSL_AES_OFB -DHAVE_AESGCM -DGCM_TABLE_4BIT -DWOLFSSL_CMAC
158- -DWOLFSSL_SHA224 -DWOLFSSL_SHA512 -DWOLFSSL_SHA384 -DWOLFSSL_NO_SHAKE256
159- -DWOLFSSL_NOSHA512_224 -DWOLFSSL_NOSHA512_256 -DWOLFSSL_SHA3 -DHAVE_HKDF
160- -DNO_OLD_TLS -DNO_PSK -DNO_DO178
161- -DNO_RC4 -DNO_MD4 -DNO_MD5 -DNO_DES3 -DNO_DSA -DNO_RABBIT
162-
163- -DWOLFSSL_JNI -DHAVE_EX_DATA -DHAVE_OCSP -DHAVE_CRL_MONITOR
164- -DWOLFSSL_CERT_EXT -DWOLFSSL_CERT_GEN -DHAVE_SNI -DHAVE_ALPN
165- -DWOLFSSL_ENCRYPTED_KEYS -DNO_ERROR_QUEUE -DWOLFSSL_EITHER_SIDE
166- -DWOLFSSL_PSS_LONG_SALT -DWOLFSSL_TICKET_HAVE_ID
167- -DWOLFSSL_ERROR_CODE_OPENSSL -DWOLFSSL_EXTRA_ALERTS
168- -DWOLFSSL_FORCE_CACHE_ON_TICKET -DWOLFSSL_AKID_NAME -DHAVE_CTS
169- -DKEEP_PEER_CERT -DSESSION_CERTS
138+ # optimizations, being careful not to break FIPS compatibility if targeting
139+ # FIPS proper in the future. Please contact [email protected] for assistance 140+ # properly compiling for use with wolfCrypt FIPS variants.
141+ add_definitions (
142+ -DWOLFSSL_FIPS_READY -DHAVE_FIPS -DHAVE_FIPS_VERSION=7
143+ -DHAVE_FIPS_VERSION_MAJOR=7 -DHAVE_FIPS_VERSION_MINOR=0
144+ -DHAVE_FIPS_VERSION_PATCH=0 -DWC_RNG_SEED_CB -DHAVE_THREAD_LS
145+
146+ -DWOLFSSL_WOLFSSH -DNO_DO178 -DHAVE_REPRODUCIBLE_BUILD -DWC_NO_ASYNC_THREADING
147+ -DNO_OLD_TLS -DWOLFSSL_TLS13 -DHAVE_TLS_EXTENSIONS -DHAVE_SNI
148+ -DHAVE_KEYING_MATERIAL -DHAVE_TLS_EXTENSIONS -DHAVE_SUPPORTED_CURVES
149+ -DHAVE_EXTENDED_MASTER -DHAVE_ENCRYPT_THEN_MAC -DWOLFSSL_JNI -DHAVE_EX_DATA
150+ -DKEEP_PEER_CERT -DWOLFSSL_ALWAYS_VERIFY_CB -DWOLFSSL_DTLS -DOPENSSL_EXTRA
151+ -DOPENSSL_ALL -DWOLFSSL_ERROR_CODE_OPENSSL -DHAVE_CRL -DHAVE_CRL_MONITOR
152+ -DHAVE_OCSP -DPERSIST_SESSION_CACHE -DPERSIST_CERT_CACHE -DATOMIC_USER
153+ -DWOLFSSL_CERT_EXT -DWOLFSSL_CERT_GEN -DWOLFSSL_CERT_REQ -DWOLFSSL_KEY_GEN
154+ -DHAVE_ALPN -DWOLFSSL_ALT_CERT_CHAINS -DSESSION_CERTS -DWOLFSSL_ENCRYPTED_KEYS
155+ -DWOLFSSL_SYS_CA_CERTS -DWOLFSSL_ALT_NAMES -DWOLFSSL_EITHER_SIDE
156+ -DWOLFSSL_TICKET_HAVE_ID -DWOLFSSL_CERT_NAME_ALL
157+ -DHAVE_SERVER_RENEGOTIATION_INFO -DWOLFSSL_ASN_TEMPLATE -DWOLFSSL_ASN_PRINT
158+ -DWOLFSSL_BASE64_ENCODE -DERROR_QUEUE_PER_THREAD -DNO_ERROR_QUEUE
159+ -DTFM_TIMING_RESISTANT -DECC_TIMING_RESISTANT -DWOLFSSL_USE_ALIGN
160+ -DWOLFSSL_PUBLIC_MP
161+
162+ -DWC_RSA_BLINDING -DWC_RSA_PSS -DWOLFSSL_PSS_LONG_SALT -DWC_RSA_NO_PADDING
163+
164+ -DHAVE_ECC -DTFM_ECC256 -DECC_SHAMIR -DECC_MIN_KEY_SZ=192 -DHAVE_ECC_CDH
165+ -DECC_USER_CURVES -DHAVE_ECC192 -DHAVE_ECC224 -DHAVE_ECC256 -DHAVE_ECC384
166+ -DHAVE_ECC521 -DWOLFSSL_ECDSA_SET_K -DWOLFSSL_VALIDATE_ECC_IMPORT
167+ -DWOLFSSL_VALIDATE_ECC_KEYGEN
168+
169+ -DWOLFSSL_VALIDATE_FFC_IMPORT -DHAVE_FFDHE_Q -DHAVE_FFDHE_2048
170+ -DHAVE_FFDHE_3072 -DHAVE_FFDHE_4096 -DHAVE_FFDHE_6144 -DHAVE_FFDHE_8192
171+ -DHAVE_DH_DEFAULT_PARAMS
172+
173+ -DHAVE_HKDF -DHAVE_PBKDF2 -DHAVE_HASHDRBG -DWC_SRTP_KDF -DWOLFSSL_SRTP
174+
175+ -DHAVE_AESGCM -DGCM_TABLE_4BIT -DWOLFSSL_AESGCM_STREAM -DHAVE_AESCCM
176+ -DWOLFSSL_AES_COUNTER -DWOLFSSL_CMAC -DWOLFSSL_AES_OFB -DWOLFSSL_AES_CFB
177+ -DWOLFSSL_AES_XTS -DWOLFSSL_AESXTS_STREAM -DWOLFSSL_AES_DIRECT
178+ -DHAVE_AES_ECB -DHAVE_AES_KEYWRAP -DWOLFSSL_AES_XTS -DHAVE_AES_KEYWRAP
179+
180+ -DHAVE_ED25519 -DHAVE_ED25519_KEY_IMPORT -DHAVE_ED448 -DHAVE_ED448_KEY_IMPORT
181+ -DWOLFSSL_ED448_STREAMING_VERIFY
182+
183+ -DHAVE_CURVE25519 -DHAVE_CURVE448
184+
185+ -DWOLFSSL_SHA224 -DWOLFSSL_SHA384 -DWOLFSSL_SHA512 -DWOLFSSL_NOSHA512_224
186+ -DWOLFSSL_NOSHA512_256 -DWOLFSSL_SHA3 -DWOLFSSL_SHAKE128 -DWOLFSSL_SHAKE256
187+
188+ -DNO_DSA -DNO_RC4 -DNO_MD4 -DNO_DES3 -DNO_DES3_TLS_SUITES
189+
170190 -DSIZEOF_LONG=4 -DSIZEOF_LONG_LONG=8 -DWOLFSSL_CUSTOM_CONFIG
171191
172192 # For gethostbyname()
@@ -175,12 +195,11 @@ elseif("${WOLFSSL_PKG_TYPE}" MATCHES "fipsready")
175195 # Enable below options for wolfSSL debug logging
176196 #-DDEBUG_WOLFSSL -DWOLFSSL_ANDROID_DEBUG
177197
178- # Below options are added only for wolfCrypt test and benchmark
179- # applications. These can be left off / removed when integrating
180- # into a real-world application. Add -DNO_FILESYSTEM to disable
181- # file system use for wolfCrypt test, but make sure to remove
182- # this define in production applications as filesystem access
183- # is required for wolfJCE use.
198+ # Below options are added only for wolfCrypt test and benchmark applications.
199+ # These can be left off / removed when integrating into a real-world application.
200+ # Add -DNO_FILESYSTEM to disable file system use for wolfCrypt test, but make sure
201+ # to remove this define in production applications as filesystem access is required
202+ # for wolfJSSE use.
184203 -DUSE_CERT_BUFFERS_2048 -DUSE_CERT_BUFFERS_256
185204 -DNO_WRITE_TEMP_FILES -DNO_MAIN_DRIVER
186205 )
@@ -196,7 +215,8 @@ elseif("${WOLFSSL_MATH_LIB}" MATCHES "spmath")
196215 -DWOLFSSL_HAVE_SP_RSA -DWOLFSSL_SP_4096
197216 -DWOLFSSL_HAVE_SP_DH
198217 -DWOLFSSL_HAVE_SP_ECC -DWOLFSSL_SP_384 -DWOLFSSL_SP_521
199- -DWOLFSSL_SP_LARGE_CODE)
218+ -DWOLFSSL_SP_LARGE_CODE
219+ -DFP_MAX_BITS=16384 -DSP_INT_BITS=8192)
200220
201221 # SP Math architecture-specific settings (ex: assembly optimizations)
202222 if ("${ANDROID_ABI} " MATCHES "arm64-v8a" )
@@ -250,16 +270,21 @@ elseif("${WOLFSSL_PKG_TYPE}" MATCHES "fipsready")
250270 list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/wolfcrypt_first.c)
251271 list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/hmac.c)
252272 list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/random.c)
253- list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/sha256.c)
254273 list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/kdf.c)
255274 list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/rsa.c)
256275 list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/ecc.c)
257276 list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/aes.c)
277+ list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/sha256.c)
258278 list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/sha.c)
259279 list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/sha512.c)
260280 list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/sha3.c)
261281 list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/dh.c)
262282 list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/cmac.c)
283+ list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/curve448.c)
284+ list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/ed448.c)
285+ list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/curve25519.c)
286+ list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/ed25519.c)
287+ list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/pwdbased.c)
263288 list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/fips.c)
264289 list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/fips_test.c)
265290 list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/wolfcrypt_last.c)
@@ -283,9 +308,18 @@ elseif("${WOLFSSL_PKG_TYPE}" MATCHES "fipsready")
283308 list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/memory.c)
284309 list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/asn.c)
285310 list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/coding.c)
311+ list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/md5.c)
286312 list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/pwdbased.c)
287313 list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/pkcs12.c)
288314 list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/tfm.c)
315+ list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/wc_lms.c)
316+ list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/wc_lms_impl.c)
317+ list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/wc_xmss.c)
318+ list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/wc_xmss_impl.c)
319+ list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/fe_operations.c)
320+ list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/ge_operations.c)
321+ list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/fe_448.c)
322+ list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/ge_448.c)
289323endif ()
290324
291325# wolfSSL will be compiled as a SHARED library
0 commit comments