44# Default values
55DEFAULT_GNUTLS_VERSION=" 3.8.9"
66FIPS_MODE=0
7+ FIPS_READY_MODE=0
78GNUTLS_VERSION=" "
89
910# ============================================================================
@@ -37,6 +38,12 @@ EXAMPLES:
3738 $( basename " $0 " ) fips 3.8.11
3839 Build with FIPS 140 mode enabled, using GnuTLS branch gnutls-wolfssl-3.8.11
3940
41+ $( basename " $0 " ) fips-ready
42+ Build with FIPS *ready* 140 mode enabled, using default GnuTLS branch (gnutls-wolfssl-$DEFAULT_GNUTLS_VERSION )
43+
44+ $( basename " $0 " ) fips-ready 3.8.11
45+ Build with FIPS *ready* mode enabled, using GnuTLS branch gnutls-wolfssl-3.8.11
46+
4047ENVIRONMENT VARIABLES:
4148 WOLFSSL_INSTALL Installation path for wolfSSL (default: /opt/wolfssl)
4249 GNUTLS_INSTALL Installation path for GnuTLS (default: /opt/gnutls)
@@ -66,6 +73,10 @@ parse_arguments() {
6673 FIPS_MODE=1
6774 shift
6875 ;;
76+ fips-ready)
77+ FIPS_READY_MODE=1
78+ shift
79+ ;;
6980 * )
7081 # Assume it's a version number
7182 if [[ " $1 " =~ ^[0-9]+\. [0-9]+ (\. [0-9]+)? $ ]]; then
114125echo " =============================================="
115126echo " Build Configuration:"
116127echo " =============================================="
117- if [ $FIPS_MODE -eq 1 ]; then
118- echo " FIPS 140 Mode: ENABLED"
128+ if [ $FIPS_READY_MODE -eq 1 ]; then
129+ echo " FIPS Mode: ENABLED (fips-ready)"
130+ elif [ $FIPS_MODE -eq 1 ]; then
131+ echo " FIPS Mode: ENABLED (fips)"
119132else
120- echo " FIPS 140 Mode: DISABLED"
133+ echo " FIPS Mode: DISABLED"
121134fi
122135echo " GnuTLS Version: $GNUTLS_VERSION "
123136echo " GnuTLS Branch: $GNUTLS_BRANCH "
@@ -158,7 +171,7 @@ if [ $FIPS_MODE -eq 1 ]; then
158171 if [ " $USE_SYSTEM_WOLFSSL " -eq 1 ]; then
159172 echo " Using system wolfSSL. Skipping wolfSSL build."
160173 else
161- echo " Setting up wolfSSL with FIPS-ready mode..."
174+ echo " Setting up wolfSSL with FIPS mode (v5.2.4) ..."
162175
163176 if [ -n " $WOLFSSL_FIPS_BUNDLE " ]; then
164177 # User provided a bundle directory – use it verbatim
@@ -175,7 +188,7 @@ if [ $FIPS_MODE -eq 1 ]; then
175188 echo " Cloning fips-src"
176189 git clone git@github.com:wolfSSL/fips-src.git
177190
178- echo " Cloning wolfSSL repository for FIPS-ready build..."
191+ echo " Cloning wolfSSL repository for FIPS build..."
179192 git clone https://github.com/wolfssl/wolfssl.git
180193 cd wolfssl
181194
@@ -205,6 +218,53 @@ if [ $FIPS_MODE -eq 1 ]; then
205218 echo " Running FIPS checks..."
206219 make check
207220
221+ sudo make install
222+ cd ../
223+ fi
224+ elif [ $FIPS_READY_MODE -eq 1 ]; then
225+ if [ " $USE_SYSTEM_WOLFSSL " -eq 1 ]; then
226+ echo " Using system wolfSSL. Skipping wolfSSL build."
227+ else
228+ echo " Setting up wolfSSL with FIPS-ready mode..."
229+
230+ if [ -n " $WOLFSSL_FIPS_BUNDLE " ]; then
231+ # User provided a bundle directory – use it verbatim
232+ if [ ! -d " $WOLFSSL_FIPS_BUNDLE " ]; then
233+ echo " ERROR: WOLFSSL_FIPS_BUNDLE '$WOLFSSL_FIPS_BUNDLE ' is not a directory."
234+ exit 1
235+ fi
236+ echo " Using pre-downloaded wolfSSL FIPS-ready bundle at '$WOLFSSL_FIPS_BUNDLE '"
237+ cd " $WOLFSSL_FIPS_BUNDLE "
238+ else
239+ # Fresh checkout & FIPS-ready helper
240+ rm -rf wolfssl/ fips-ready-checkout/
241+
242+ echo " Cloning wolfSSL repository for FIPS-ready build..."
243+ git clone https://github.com/wolfssl/wolfssl.git
244+ cd wolfssl
245+
246+ echo " Running FIPS-ready preparation..."
247+ ./fips-check.sh fips-ready keep
248+
249+ echo " Moving FIPS directory XXX-fips-test to ../fips-ready-checkout"
250+ mv XXX-fips-test ../fips-ready-checkout
251+
252+ cd ..
253+ rm -rf wolfssl/
254+
255+ cd fips-ready-checkout
256+ fi
257+
258+ ./configure --prefix=$WOLFSSL_INSTALL / CC=clang --enable-fips=ready --enable-cmac --enable-aesccm --enable-keygen ' CFLAGS=-DWOLFSSL_PUBLIC_ASN -DHAVE_PUBLIC_FFDHE -DHAVE_FFDHE_3072 -DHAVE_FFDHE_4096 -DWOLFSSL_DH_EXTRA -DWOLFSSL_PSS_SALT_LEN_DISCOVER -DWOLFSSL_PUBLIC_MP -DWOLFSSL_RSA_KEY_CHECK -DNO_MD5'
259+
260+ make
261+
262+ echo " Running FIPS hash verification..."
263+ ./fips-hash.sh
264+
265+ echo " Running FIPS checks..."
266+ make check
267+
208268 sudo make install
209269 cd ../
210270 fi
@@ -252,7 +312,7 @@ if [ "$OS" = "linux" ]; then
252312
253313 CONFIG_OPTS=" --prefix=$GNUTLS_INSTALL / --disable-doc --disable-manpages --disable-gtk-doc --disable-gost --disable-dsa --disable-full-test-suite --disable-valgrind-tests --disable-dependency-tracking --enable-srp-authentication"
254314
255- if [ $FIPS_MODE -eq 1 ]; then
315+ if [ $FIPS_MODE -eq 1 ] || [ $FIPS_READY_MODE -eq 1 ] ; then
256316 CONFIG_OPTS=" $CONFIG_OPTS --enable-fips140-mode"
257317 fi
258318
@@ -298,7 +358,13 @@ echo ""
298358echo " =============================================="
299359echo " Build completed successfully!"
300360echo " =============================================="
301- echo " FIPS Mode: $( [ $FIPS_MODE -eq 1 ] && echo ' ENABLED' || echo ' DISABLED' ) "
361+ if [ $FIPS_READY_MODE -eq 1 ]; then
362+ echo " FIPS Mode: ENABLED (fips-ready)"
363+ elif [ $FIPS_MODE -eq 1 ]; then
364+ echo " FIPS Mode: ENABLED (fips)"
365+ else
366+ echo " FIPS Mode: DISABLED"
367+ fi
302368echo " GnuTLS Branch: $GNUTLS_BRANCH "
303369echo " wolfSSL: $WOLFSSL_INSTALL "
304370echo " GnuTLS: $GNUTLS_INSTALL "
0 commit comments