@@ -11,62 +11,113 @@ project("wolfssljni-ndk-gradle" C ASM)
1111set (wolfssljni_DIR ${CMAKE_SOURCE_DIR} /../wolfssljni)
1212set (wolfssl_DIR ${CMAKE_SOURCE_DIR} /../wolfssl)
1313
14- # Math library selection, used to switch on below. Should be one of:
14+ # ------------------------- wolfSSL Normal vs. FIPS Ready Selection --------------------------------
15+ # Select if wolfSSL is normal ("normal") or FIPS Ready ("fipsready")
16+ # wolfSSL FIPS Ready is available for download on the wolfssl.com download page. For more
17+ # information on wolfSSL FIPS Ready see: https://www.wolfssl.com/license/fips/
18+ #
19+ # FIPS Ready requires different preprocessor flags, files, and a specific file ordering
20+ # as set up below.
21+ set (WOLFSSL_PKG_TYPE "normal" )
22+
23+ # -------------------------------- Math Library Selection ------------------------------------------
24+ # wolfCrypt math library selection, used to switch on below. Should be one of:
1525# fastmath
1626# spmath
1727set (WOLFSSL_MATH_LIB "spmath" )
1828
29+ # --------------------------------- Include Directories --------------------------------------------
1930# Add header directories to include paths
2031include_directories (
2132 ${wolfssl_DIR}
2233 ${wolfssljni_DIR} /native
2334)
2435
25- # Add TLS sources to TLS_SOURCES list and remove files that are included inline by other files
26- aux_source_directory (${wolfssl_DIR} /src TLS_SOURCES )
27- list (REMOVE_ITEM TLS_SOURCES ${wolfssl_DIR} /src/bio.c)
28- list (REMOVE_ITEM TLS_SOURCES ${wolfssl_DIR} /src/conf.c)
29- list (REMOVE_ITEM TLS_SOURCES ${wolfssl_DIR} /src/pk.c)
30- list (REMOVE_ITEM TLS_SOURCES ${wolfssl_DIR} /src/x509.c)
31- list (REMOVE_ITEM TLS_SOURCES ${wolfssl_DIR} /src/x509_str.c)
36+ # ------------------------------- Preprocessor Defines ---------------------------------------------
37+
38+ if ("${WOLFSSL_PKG_TYPE} " MATCHES "normal" )
39+ # Add preprocessor defines to CFLAGS, these match those placed into
40+ # wolfssl/options.h by configure if using: "./configure --enable-jni".
41+ # This list may be configurable depending on use case and desired optimizations.
42+ add_definitions (-DWC_RSA_BLINDING -DWOLFSSL_SHA224 -DWOLFSSL_SHA384
43+ -DWOLFSSL_SHA512 -DHAVE_HKDF -DNO_DSA -DHAVE_ECC
44+ -DECC_SHAMIR -DWC_RSA_PSS -DWOLFSSL_BASE64_ENCODE
45+ -DWOLFSSL_SHA3 -DHAVE_POLY1305 -DHAVE_CHACHA -DHAVE_HASHDRBG
46+ -DHAVE_TLS_EXTENSIONS -DHAVE_SUPPORTED_CURVES -DHAVE_FFDHE_2048
47+ -DWOLFSSL_TLS13 -DHAVE_EXTENDED_MASTER -DWOLFSSL_JNI
48+ -DHAVE_EX_DATA -DWOLFSSL_DTLS -DOPENSSL_EXTRA -DOPENSSL_ALL
49+ -DHAVE_CRL -DHAVE_OCSP -DHAVE_CRL_MONITOR
50+ -DPERSIST_SESSION_CACHE -DPERSIST_CERT_CACHE -DATOMIC_USER
51+ -DHAVE_PK_CALLBACKS -DWOLFSSL_CERT_EXT -DWOLFSSL_CERT_GEN
52+ -DHAVE_SNI -DHAVE_ALPN -DNO_RC4 -DHAVE_ENCRYPT_THEN_MAC
53+ -DNO_MD4 -DWOLFSSL_ENCRYPTED_KEYS -DHAVE_DH_DEFAULT_PARAMS
54+ -DNO_ERROR_QUEUE -DWOLFSSL_EITHER_SIDE -DWC_RSA_NO_PADDING
55+ -DWC_RSA_PSS -DWOLFSSL_PSS_LONG_SALT -DWOLFSSL_TICKET_HAVE_ID
56+ -DWOLFSSL_ERROR_CODE_OPENSSL -DWOLFSSL_ALWAYS_VERIFY_CB
57+ -DWOLFSSL_VERIFY_CB_ALL_CERTS -DWOLFSSL_EXTRA_ALERTS
58+ -DHAVE_EXT_CACHE -DWOLFSSL_FORCE_CACHE_ON_TICKET
59+ -DWOLFSSL_AKID_NAME -DHAVE_CTS -DNO_DES3 -DGCM_TABLE_4BIT
60+ -DTFM_TIMING_RESISTANT -DECC_TIMING_RESISTANT
61+ -DHAVE_AESGCM -DSIZEOF_LONG=4 -DSIZEOF_LONG_LONG=8
62+
63+ # Defines added for wolfCrypt test and benchmark only, may not be needed for your
64+ # own application.
65+ -DUSE_CERT_BUFFERS_2048 -DUSE_CERT_BUFFERS_256 -DNO_WRITE_TEMP_FILES
66+ -DNO_FILESYSTEM -DNO_MAIN_DRIVER
67+
68+ # Defines added for debugging. These can be removed if debug logging is not needed
69+ # and will increase performance and reduce library footprint size if removed.
70+ -DEBUG_WOLFSSL )
71+
72+ elseif ("${WOLFSSL_PKG_TYPE} " MATCHES "fipsready" )
73+ # Add preprocessor defines to CFLAGS, these match those placed into
74+ # wolfssl/options.h by configure if using: "./configure" on a Unix/Linux platform. The options
75+ # below have been chosen to match a FIPS Ready build, and are based on the example
76+ # user_settings.h file located here:
77+ # https://github.com/wolfSSL/wolfssl/blob/master/examples/configs/user_settings_fipsv5.h
78+ # This list may be configurable depending on use case and desired optimizations, being careful
79+ # not to break FIPS compatibility if targeting FIPS proper in the future.
80+ add_definitions (-DHAVE_FIPS -DHAVE_FIPS_VERSION=5 -DHAVE_FIPS_VERSION_MINOR=3
81+ -DHAVE_HASHDRBG -DHAVE_THREAD_LS -DHAVE_REPRODUCIBLE_BUILD
82+ -DFP_MAX_BITS=16384 -DSP_INT_BITS=8192 -DWOLFSSL_PUBLIC_MP
83+ -DTFM_TIMING_RESISTANT -DECC_TIMING_RESISTANT -DWC_RSA_BLINDING
84+ -DWC_RNG_SEED_CB -DWOLFSSL_VALIDATE_ECC_IMPORT -DWOLFSSL_VALIDATE_ECC_KEYGEN
85+ -DWOLFSSL_VALIDATE_FFC_IMPORT
86+ -DWOLFSSL_TLS13 -DHAVE_TLS_EXTENSIONS -DHAVE_ENCRYPT_THEN_MAC
87+ -DHAVE_SUPPORTED_CURVES -DHAVE_EXTENDED_MASTER -DHAVE_ONE_TIME_AUTH
88+ -DHAVE_SECURE_RENEGOTIATION -DHAVE_SERVER_RENEGOTIATION_INFO -DHAVE_SESSION_TICKET
89+ -DWOLFSSL_USE_ALIGN -DWOLFSSL_BASE64_ENCODE -DHAVE_CRL
90+ -DHAVE_EXT_CACHE -DWOLFSSL_VERIFY_CB_ALL_CERTS -DWOLFSSL_ALWAYS_VERIFY_CB
91+ -DWOLFSSL_DH_EXTRA -DWOLFSSL_WOLFSSH -DOPENSSL_EXTRA -DOPENSSL_ALL
92+ -DHAVE_FFDHE_Q -DHAVE_FFDHE_2048 -DHAVE_FFDHE_3072 -DHAVE_FFDHE_4096
93+ -DHAVE_FFDHE_6144 -DHAVE_FFDHE_8192 -DHAVE_DH_DEFAULT_PARAMS -DHAVE_PUBLIC_FFDHE
94+ -DHAVE_ECC -DTFM_ECC256 -DECC_SHAMIR -DHAVE_ECC_CDH -DECC_USER_CURVES
95+ -DHAVE_ECC256 -DHAVE_ECC384 -DHAVE_ECC521 -DWOLFSSL_ECDSA_SET_K
96+ -DWC_RSA_PSS -DWOLFSSL_KEY_GEN -DWC_RSA_NO_PADDING
97+ -DWOLFSSL_AES_COUNTER -DHAVE_AESCCM -DHAVE_AES_ECB -DWOLFSSL_AES_DIRECT
98+ -DWOLFSSL_AES_OFB -DHAVE_AESGCM -DGCM_TABLE_4BIT -DWOLFSSL_CMAC
99+ -DWOLFSSL_SHA224 -DWOLFSSL_SHA512 -DWOLFSSL_SHA384 -DWOLFSSL_NO_SHAKE256
100+ -DWOLFSSL_NOSHA512_224 -DWOLFSSL_NOSHA512_256 -DWOLFSSL_SHA3 -DHAVE_HKDF
101+ -DNO_OLD_TLS -DNO_PSK -DNO_DO178
102+ -DNO_RC4 -DNO_MD4 -DNO_MD5 -DNO_DES3 -DNO_DSA -DNO_RABBIT
103+
104+ -DWOLFSSL_JNI -DHAVE_EX_DATA -DHAVE_OCSP -DHAVE_CRL_MONITOR
105+ -DWOLFSSL_CERT_EXT -DWOLFSSL_CERT_GEN -DHAVE_SNI -DHAVE_ALPN
106+ -DWOLFSSL_ENCRYPTED_KEYS -DNO_ERROR_QUEUE -DWOLFSSL_EITHER_SIDE
107+ -DWOLFSSL_PSS_LONG_SALT -DWOLFSSL_TICKET_HAVE_ID
108+ -DWOLFSSL_ERROR_CODE_OPENSSL -DWOLFSSL_EXTRA_ALERTS
109+ -DWOLFSSL_FORCE_CACHE_ON_TICKET -DWOLFSSL_AKID_NAME -DHAVE_CTS
110+ -DKEEP_PEER_CERT -DSESSION_CERTS
111+ -DSIZEOF_LONG=4 -DSIZEOF_LONG_LONG=8
32112
33- # Add crypto sources to CRYPTO_SOURCES list and remove files that are included inline by other files
34- aux_source_directory (${wolfssl_DIR} /wolfcrypt/src CRYPTO_SOURCES )
35- list (REMOVE_ITEM CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/evp.c)
36- list (REMOVE_ITEM CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/misc.c)
37-
38- # Add preprocessor defines to CFLAGS, these match those placed into
39- # wolfssl/options.h by configure if using: "./configure --enable-jni".
40- # This list may be configurable depending on use case and desired optimizations.
41- add_definitions (-DWC_RSA_BLINDING -DWOLFSSL_SHA224 -DWOLFSSL_SHA384
42- -DWOLFSSL_SHA512 -DHAVE_HKDF -DNO_DSA -DHAVE_ECC
43- -DECC_SHAMIR -DWC_RSA_PSS -DWOLFSSL_BASE64_ENCODE
44- -DWOLFSSL_SHA3 -DHAVE_POLY1305 -DHAVE_CHACHA -DHAVE_HASHDRBG
45- -DHAVE_TLS_EXTENSIONS -DHAVE_SUPPORTED_CURVES -DHAVE_FFDHE_2048
46- -DWOLFSSL_TLS13 -DHAVE_EXTENDED_MASTER -DWOLFSSL_JNI
47- -DHAVE_EX_DATA -DWOLFSSL_DTLS -DOPENSSL_EXTRA -DOPENSSL_ALL
48- -DHAVE_CRL -DHAVE_OCSP -DHAVE_CRL_MONITOR
49- -DPERSIST_SESSION_CACHE -DPERSIST_CERT_CACHE -DATOMIC_USER
50- -DHAVE_PK_CALLBACKS -DWOLFSSL_CERT_EXT -DWOLFSSL_CERT_GEN
51- -DHAVE_SNI -DHAVE_ALPN -DNO_RC4 -DHAVE_ENCRYPT_THEN_MAC
52- -DNO_MD4 -DWOLFSSL_ENCRYPTED_KEYS -DHAVE_DH_DEFAULT_PARAMS
53- -DNO_ERROR_QUEUE -DWOLFSSL_EITHER_SIDE -DWC_RSA_NO_PADDING
54- -DWC_RSA_PSS -DWOLFSSL_PSS_LONG_SALT -DWOLFSSL_TICKET_HAVE_ID
55- -DWOLFSSL_ERROR_CODE_OPENSSL -DWOLFSSL_ALWAYS_VERIFY_CB
56- -DWOLFSSL_VERIFY_CB_ALL_CERTS -DWOLFSSL_EXTRA_ALERTS
57- -DHAVE_EXT_CACHE -DWOLFSSL_FORCE_CACHE_ON_TICKET
58- -DWOLFSSL_AKID_NAME -DHAVE_CTS -DNO_DES3 -DGCM_TABLE_4BIT
59- -DTFM_TIMING_RESISTANT -DECC_TIMING_RESISTANT
60- -DHAVE_AESGCM -DSIZEOF_LONG=4 -DSIZEOF_LONG_LONG=8
61-
62- # Defines added for wolfCrypt test and benchmark only, may not be needed for your
63- # own application.
64- -DUSE_CERT_BUFFERS_2048 -DUSE_CERT_BUFFERS_256 -DNO_WRITE_TEMP_FILES
65- -DNO_FILESYSTEM -DNO_MAIN_DRIVER
66-
67- # Defines added for debugging. These can be removed if debug logging is not needed
68- # and will increase performance and reduce library footprint size if removed.
69- -DEBUG_WOLFSSL )
113+ # Enable below options for wolfSSL debug logging
114+ #-DDEBUG_WOLFSSL -DWOLFSSL_ANDROID_DEBUG
115+
116+ # Below options are added only for wolfCrypt test and benchmark applications.
117+ # These can be left off / removed when integrating into a real-world application.
118+ -DNO_FILESYSTEM -DUSE_CERT_BUFFERS_2048 -DUSE_CERT_BUFFERS_256
119+ -DNO_WRITE_TEMP_FILES -DNO_MAIN_DRIVER )
120+ endif ()
70121
71122if ("$WOLFSSL_MATH_LIB" MATCHES "fastmath" )
72123 # Use fastmath library
@@ -93,6 +144,65 @@ elseif("${WOLFSSL_MATH_LIB}" MATCHES "spmath")
93144 endif ()
94145endif ()
95146
147+ # --------------------------- wolfSSL and wolfCrypt Source Files -----------------------------------
148+ # Add TLS sources to TLS_SOURCES list and remove files that are included inline by other files
149+ aux_source_directory (${wolfssl_DIR} /src TLS_SOURCES )
150+ list (REMOVE_ITEM TLS_SOURCES ${wolfssl_DIR} /src/bio.c)
151+ list (REMOVE_ITEM TLS_SOURCES ${wolfssl_DIR} /src/conf.c)
152+ list (REMOVE_ITEM TLS_SOURCES ${wolfssl_DIR} /src/pk.c)
153+ list (REMOVE_ITEM TLS_SOURCES ${wolfssl_DIR} /src/ssl_misc.c)
154+ list (REMOVE_ITEM TLS_SOURCES ${wolfssl_DIR} /src/x509.c)
155+ list (REMOVE_ITEM TLS_SOURCES ${wolfssl_DIR} /src/x509_str.c)
156+
157+ if ("${WOLFSSL_PKG_TYPE} " MATCHES "normal" )
158+ # Add crypto sources to CRYPTO_SOURCES, remove files that are included inline by other files
159+ aux_source_directory (${wolfssl_DIR} /wolfcrypt/src CRYPTO_SOURCES )
160+ list (REMOVE_ITEM CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/evp.c)
161+ list (REMOVE_ITEM CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/misc.c)
162+
163+ elseif ("${WOLFSSL_PKG_TYPE} " MATCHES "fipsready" )
164+ # FIPS Ready needs to explicitly order files for in-core integrity check to work properly.
165+ list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/wolfcrypt_first.c)
166+ list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/hmac.c)
167+ list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/random.c)
168+ list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/sha256.c)
169+ list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/kdf.c)
170+ list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/rsa.c)
171+ list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/ecc.c)
172+ list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/aes.c)
173+ list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/sha.c)
174+ list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/sha512.c)
175+ list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/sha3.c)
176+ list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/dh.c)
177+ list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/cmac.c)
178+ list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/fips.c)
179+ list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/fips_test.c)
180+ list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/wolfcrypt_last.c)
181+ list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/hash.c)
182+ list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/cpuid.c)
183+ list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/logging.c)
184+ list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/wc_port.c)
185+ list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/error.c)
186+ list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/wc_encrypt.c)
187+ list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/signature.c)
188+ list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/sp_arm32.c)
189+ list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/sp_arm64.c)
190+ list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/sp_armthumb.c)
191+ list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/sp_c32.c)
192+ list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/sp_c64.c)
193+ list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/sp_cortexm.c)
194+ list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/sp_dsp32.c)
195+ list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/sp_int.c)
196+ list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/sp_x86_64.c)
197+ list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/wolfmath.c)
198+ list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/memory.c)
199+ list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/asn.c)
200+ list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/coding.c)
201+ list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/pwdbased.c)
202+ list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/pkcs12.c)
203+ list (APPEND CRYPTO_SOURCES ${wolfssl_DIR} /wolfcrypt/src/tfm.c)
204+ endif ()
205+
96206# wolfSSL will be compiled as a SHARED library
97207add_library (wolfssl SHARED
98208 ${CRYPTO_SOURCES}
0 commit comments