Skip to content

Commit 81679dd

Browse files
authored
Merge pull request #81 from gasbytes/gnutls-wolfssl-fips-ready
FIPS-ready support
2 parents 440ebd5 + add79a8 commit 81679dd

File tree

2 files changed

+79
-7
lines changed

2 files changed

+79
-7
lines changed

README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,12 @@ cd gnutls-wolfssl
1818
# build specific version with FIPS 140 support
1919
./setup.sh fips 3.8.11
2020
21+
# build with FIPS ready support
22+
./setup.sh fips-ready
23+
24+
# build specific version with FIPS ready support
25+
./setup.sh fips-ready 3.8.11
26+
2127
# show help and all options
2228
./setup.sh --help
2329
```

setup.sh

Lines changed: 73 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ set -e
44
# Default values
55
DEFAULT_GNUTLS_VERSION="3.8.9"
66
FIPS_MODE=0
7+
FIPS_READY_MODE=0
78
GNUTLS_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+
4047
ENVIRONMENT 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
@@ -114,10 +125,12 @@ fi
114125
echo "=============================================="
115126
echo "Build Configuration:"
116127
echo "=============================================="
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)"
119132
else
120-
echo " FIPS 140 Mode: DISABLED"
133+
echo " FIPS Mode: DISABLED"
121134
fi
122135
echo " GnuTLS Version: $GNUTLS_VERSION"
123136
echo " 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 ""
298358
echo "=============================================="
299359
echo "Build completed successfully!"
300360
echo "=============================================="
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
302368
echo " GnuTLS Branch: $GNUTLS_BRANCH"
303369
echo " wolfSSL: $WOLFSSL_INSTALL"
304370
echo " GnuTLS: $GNUTLS_INSTALL"

0 commit comments

Comments
 (0)