Skip to content

Commit e7972f7

Browse files
authored
Merge pull request #46 from gasbytes/network-manager
Network manager workflows and added documentation to the README
2 parents 7400bf3 + e5d60c1 commit e7972f7

3 files changed

Lines changed: 216 additions & 15 deletions

File tree

Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
name: NetworkManager • wolfSSL / GnuTLS CI
2+
3+
on:
4+
push:
5+
branches: [ master, main ]
6+
pull_request:
7+
branches: [ '*' ]
8+
9+
concurrency:
10+
group: ${{ github.workflow }}-${{ github.ref }}
11+
cancel-in-progress: true
12+
13+
jobs:
14+
nm-wolfssl-gnutls:
15+
runs-on: ubuntu-22.04
16+
timeout-minutes: 60
17+
18+
strategy:
19+
fail-fast: false
20+
matrix:
21+
nm_version: [ master, "1.52.0", "1.42.4" ]
22+
23+
steps:
24+
# ────────────────────────── checkout + packages ─────────────────────────
25+
- name: Checkout repo
26+
uses: actions/checkout@v4
27+
with:
28+
fetch-depth: 0
29+
30+
- name: Install build dependencies
31+
run: |
32+
sudo apt-get update -qq
33+
sudo apt-get install --yes --no-install-recommends \
34+
autoconf automake libtool m4 pkg-config build-essential git \
35+
meson ninja-build gettext clang gperf gnulib autopoint gtk-doc-tools \
36+
nettle-dev libtasn1-bin libtasn1-6-dev libunistring-dev libnvme-dev \
37+
libp11-kit-dev libunbound-dev bison python3-yaml \
38+
debhelper debugedit dh-autoreconf dh-strip-nondeterminism dwz intltool \
39+
libbluetooth-dev libdebhelper-perl libndp-dev \
40+
libfile-stripnondeterminism-perl libglib2.0-doc \
41+
libnewt-dev libnl-3-dev libnl-cli-3-200 libnl-nf-3-200 libgirepository1.0-dev \
42+
libpolkit-agent-1-dev libslang2-dev libsub-override-perl libdbus-1-dev ppp ppp-dev mobile-broadband-provider-info \
43+
libteam-dev libteam5 libyaml-perl po-debconf libaudit-dev libudev-dev libsystemd-dev libmm-glib-dev libjansson-dev dhcpcd5 dnsmasq-base libpsl-dev libreadline-dev valac
44+
45+
- name: Build forked GnuTLS stack
46+
run: |
47+
LOGGING=0 GNUTLS_INSTALL=/opt/gnutls WOLFSSL_INSTALL=/opt/wolfssl ./setup.sh
48+
test -d /opt/gnutls && test -d /opt/wolfssl
49+
50+
- name: Build curl 7.88.1 (GnuTLS backend)
51+
run: |
52+
git clone --branch curl-7_88_1 https://github.com/curl/curl
53+
cd curl
54+
autoreconf -fi
55+
./configure --with-gnutls=/opt/gnutls --prefix=/opt/curl \
56+
--disable-static --enable-shared
57+
make -j"$(nproc)"
58+
sudo make install
59+
sudo ldconfig
60+
61+
- name: Clone NetworkManager ${{ matrix.nm_version }}
62+
run: |
63+
git clone https://github.com/NetworkManager/NetworkManager
64+
cd NetworkManager
65+
if [ "${{ matrix.nm_version }}" != "master" ]; then
66+
git checkout "${{ matrix.nm_version }}"
67+
fi
68+
69+
- name: Configure & build NetworkManager
70+
working-directory: NetworkManager
71+
run: |
72+
export PKG_CONFIG_PATH="/opt/gnutls/lib/pkgconfig:/opt/curl/lib/pkgconfig${PKG_CONFIG_PATH:+:$PKG_CONFIG_PATH}"
73+
export CPPFLAGS="-I/opt/gnutls/include -I/opt/curl/include${CPPFLAGS:+ $CPPFLAGS}"
74+
export LDFLAGS="-L/opt/gnutls/lib -L/opt/curl/lib -Wl,-rpath,/opt/gnutls/lib:/opt/curl/lib${LDFLAGS:+ $LDFLAGS}"
75+
export LD_LIBRARY_PATH="/opt/gnutls/lib:/opt/curl/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
76+
77+
if [ "${{ matrix.nm_version }}" != "master" ]; then
78+
meson setup build-gnutls \
79+
-Dcrypto=gnutls \
80+
-Dtests=yes \
81+
-Dsystemd_journal=true \
82+
-Dmore_logging=true \
83+
-Dqt=false
84+
else
85+
meson setup build-gnutls \
86+
-Dcrypto=gnutls \
87+
-Dtests=yes \
88+
-Dsystemd_journal=true \
89+
-Dmore_logging=true \
90+
-Dqt=false \
91+
-Dnbft=false
92+
fi
93+
94+
ninja -C build-gnutls -j"$(nproc)"
95+
96+
# ───────────────────── verify linkage (before tests) ────────────────────
97+
- name: Verify linkage to /opt/gnutls
98+
working-directory: NetworkManager/build-gnutls
99+
run: |
100+
BIN=src/nmcli/nmcli
101+
LIB=$(find src/libnm-client-impl -name 'libnm.so*' -type f | head -n1)
102+
for obj in "$BIN" "$LIB"; do
103+
echo "::group::ldd $obj"
104+
ldd "$obj" | grep -E 'lib(curl|gnutls)'
105+
echo "::endgroup::"
106+
ldd "$obj" | grep -q '/opt/gnutls/lib/libgnutls.so.30' || exit 1
107+
done
108+
109+
# ────────────────────────── run test-suite ──────────────────────────────
110+
- name: Run NetworkManager tests
111+
working-directory: NetworkManager
112+
run: |
113+
export PKG_CONFIG_PATH="/opt/gnutls/lib/pkgconfig:/opt/curl/lib/pkgconfig${PKG_CONFIG_PATH:+:$PKG_CONFIG_PATH}"
114+
export CPPFLAGS="-I/opt/gnutls/include -I/opt/curl/include${CPPFLAGS:+ $CPPFLAGS}"
115+
export LDFLAGS="-L/opt/gnutls/lib -L/opt/curl/lib -Wl,-rpath,/opt/gnutls/lib:/opt/curl/lib${LDFLAGS:+ $LDFLAGS}"
116+
export LD_LIBRARY_PATH="/opt/gnutls/lib:/opt/curl/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
117+
export NM_TEST_REGENERATE=1
118+
119+
if [ "${{ matrix.nm_version }}" != "1.42.4" ]; then
120+
ninja -C build-gnutls test
121+
else
122+
# Skipped on CI because the GitHub Actions kernel lacks the VRF/Team modules and QoS-mapping support that platform/test-link-linux expects, so the test aborts with “Unknown device type / xgress QoS mapping assertion.
123+
# Doesn't test any TLS/Crypto capabilities.
124+
cd build-gnutls
125+
all_tests=$(meson test --list 2>/dev/null)
126+
test_list=$(printf '%s\n' "$all_tests" \
127+
| grep -v -E '^(platform/test-link-linux)$' \
128+
| tr '\n' ' ')
129+
meson test $test_list --print-errorlogs
130+
fi

.github/workflows/tpm2-tools.yml

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ jobs:
6464
git clone --branch curl-8_4_0 https://github.com/curl/curl
6565
cd curl
6666
autoreconf -fi
67-
./configure --with-gnutls=/opt/gnutls --prefix=/usr/local
67+
./configure --with-gnutls=/opt/gnutls --prefix=/opt/curl
6868
make
6969
sudo make install
7070
sudo ldconfig
@@ -76,9 +76,10 @@ jobs:
7676
cd tpm2-tss
7777
git submodule update --init --recursive
7878
./bootstrap
79-
export PKG_CONFIG_PATH=/opt/gnutls/lib/pkgconfig:$PKG_CONFIG_PATH
80-
export CPPFLAGS="-I/opt/gnutls/include $CPPFLAGS"
81-
export LDFLAGS="-L/opt/gnutls/lib -Wl,-rpath,/opt/gnutls/lib $LDFLAGS"
79+
export PKG_CONFIG_PATH="/opt/gnutls/lib/pkgconfig:/opt/curl/lib/pkgconfig${PKG_CONFIG_PATH:+:$PKG_CONFIG_PATH}"
80+
export CPPFLAGS="-I/opt/gnutls/include -I/opt/curl/include${CPPFLAGS:+ $CPPFLAGS}"
81+
export LDFLAGS="-L/opt/gnutls/lib -L/opt/curl/lib -Wl,-rpath,/opt/gnutls/lib:/opt/curl/lib${LDFLAGS:+ $LDFLAGS}"
82+
export LD_LIBRARY_PATH="/opt/gnutls/lib:/opt/curl/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
8283
./configure --prefix=/usr/local --disable-hardening
8384
make
8485
sudo make install
@@ -90,9 +91,10 @@ jobs:
9091
git clone https://github.com/tpm2-software/tpm2-abrmd
9192
cd tpm2-abrmd
9293
./bootstrap
93-
export PKG_CONFIG_PATH=/opt/gnutls/lib/pkgconfig:$PKG_CONFIG_PATH
94-
export CPPFLAGS="-I/opt/gnutls/include $CPPFLAGS"
95-
export LDFLAGS="-L/opt/gnutls/lib -Wl,-rpath,/opt/gnutls/lib $LDFLAGS"
94+
export PKG_CONFIG_PATH="/opt/gnutls/lib/pkgconfig:/opt/curl/lib/pkgconfig${PKG_CONFIG_PATH:+:$PKG_CONFIG_PATH}"
95+
export CPPFLAGS="-I/opt/gnutls/include -I/opt/curl/include${CPPFLAGS:+ $CPPFLAGS}"
96+
export LDFLAGS="-L/opt/gnutls/lib -L/opt/curl/lib -Wl,-rpath,/opt/gnutls/lib:/opt/curl/lib${LDFLAGS:+ $LDFLAGS}"
97+
export LD_LIBRARY_PATH="/opt/gnutls/lib:/opt/curl/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
9698
./configure --prefix=/usr/local \
9799
--with-dbuspolicydir=/etc/dbus-1/system.d \
98100
--with-systemdsystemunitdir=/lib/systemd/system
@@ -122,9 +124,10 @@ jobs:
122124
fi
123125
124126
./bootstrap
125-
export PKG_CONFIG_PATH=/opt/gnutls/lib/pkgconfig:$PKG_CONFIG_PATH
126-
export CPPFLAGS="-I/opt/gnutls/include $CPPFLAGS"
127-
export LDFLAGS="-L/opt/gnutls/lib -Wl,-rpath,/opt/gnutls/lib $LDFLAGS"
127+
export PKG_CONFIG_PATH="/opt/gnutls/lib/pkgconfig:/opt/curl/lib/pkgconfig${PKG_CONFIG_PATH:+:$PKG_CONFIG_PATH}"
128+
export CPPFLAGS="-I/opt/gnutls/include -I/opt/curl/include${CPPFLAGS:+ $CPPFLAGS}"
129+
export LDFLAGS="-L/opt/gnutls/lib -L/opt/curl/lib -Wl,-rpath,/opt/gnutls/lib:/opt/curl/lib${LDFLAGS:+ $LDFLAGS}"
130+
export LD_LIBRARY_PATH="/opt/gnutls/lib:/opt/curl/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
128131
./configure --prefix=/usr/local --enable-unit=abrmd
129132
make
130133
sudo make install
@@ -136,17 +139,18 @@ jobs:
136139
echo "::group::ldd $bin"
137140
ldd "$bin" | grep -E "lib(curl|gnutls)"
138141
echo "::endgroup::"
139-
ldd "$bin" | grep -q "libcurl.so.4 => /usr/local/lib/libcurl.so.4" &&
142+
ldd "$bin" | grep -q "libcurl.so.4 => /opt/curl/lib/libcurl.so.4" &&
140143
ldd "$bin" | grep -q "libgnutls.so.30 => /opt/gnutls/lib/libgnutls.so.30" ||
141144
{ echo "❌ Wrong linkage detected in $bin"; exit 1; }
142145
done
143146
144147
- name: Run complete test-suite
145148
run: |
146149
cd tpm2-tools
147-
export PKG_CONFIG_PATH=/opt/gnutls/lib/pkgconfig:$PKG_CONFIG_PATH
148-
export CPPFLAGS="-I/opt/gnutls/include $CPPFLAGS"
149-
export LDFLAGS="-L/opt/gnutls/lib -Wl,-rpath,/opt/gnutls/lib $LDFLAGS"
150+
export PKG_CONFIG_PATH="/opt/gnutls/lib/pkgconfig:/opt/curl/lib/pkgconfig${PKG_CONFIG_PATH:+:$PKG_CONFIG_PATH}"
151+
export CPPFLAGS="-I/opt/gnutls/include -I/opt/curl/include${CPPFLAGS:+ $CPPFLAGS}"
152+
export LDFLAGS="-L/opt/gnutls/lib -L/opt/curl/lib -Wl,-rpath,/opt/gnutls/lib:/opt/curl/lib${LDFLAGS:+ $LDFLAGS}"
153+
export LD_LIBRARY_PATH="/opt/gnutls/lib:/opt/curl/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
150154
export GNUTLS_DEBUG_LEVEL=5
151155
export WGW_LOGGING=1
152156
export TEST_REGENERATE_OUTPUT=1

README.md

Lines changed: 68 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,70 @@
11
# gnutls-wolfssl
22

3-
Experimental port of wolfSSL into gnutls
3+
Experimental port of wolfSSL into GnuTLS. One script builds everything and drops the bits under /opt.
4+
5+
## Quick start
6+
```
7+
git clone https://github.com/YOURORG/gnutls-wolfssl.git
8+
cd gnutls-wolfssl
9+
# regular build
10+
./setup.sh
11+
12+
# build with FIPS 140 support
13+
./setup.sh fips
14+
```
15+
On success you get:
16+
```
17+
/opt/wolfssl wolfSSL
18+
/opt/gnutls GnuTLS built on wolfSSL
19+
/opt/wolfssl-gnutls-wrapper runtime shim
20+
```
21+
If the loader can’t find the libs, add the path to LD_LIBRARY_PATH (Linux) or DYLD_LIBRARY_PATH (macOS).
22+
23+
## Environment variables
24+
| var | default | note |
25+
|-----|---------|------|
26+
| WOLFSSL_INSTALL | /opt/wolfssl | install prefix |
27+
| GNUTLS_INSTALL | /opt/gnutls | install prefix |
28+
| GNUTLS_FORCE_FIPS_MODE || set at runtime to enforce FIPS |
29+
30+
## Directory layout (after setup.sh has been run)
31+
```
32+
setup.sh do‑it‑all build script
33+
rebuild-gnutls.sh rebuild GnuTLS only
34+
wolfssl/ upstream clone
35+
gnutls/ upstream clone + branch gnutls-wolfssl
36+
wolfssl-gnutls-wrapper/ thin shim + tests
37+
```
38+
39+
## Tests
40+
```
41+
cd wolfssl-gnutls-wrapper
42+
43+
# build wrapper
44+
make
45+
46+
# full suite
47+
make test
48+
49+
# fast run of the test suite
50+
make test_fast
51+
52+
# test fips (only if ./setup.sh was run in fips mode)
53+
make test_fips
54+
```
55+
Each test prints ✔️/❌ and a summary.
56+
57+
## Using in your project
58+
```
59+
cc app.c \
60+
-I/opt/gnutls/include -I/opt/wolfssl/include \
61+
-L/opt/gnutls/lib -lgnutls \
62+
-L/opt/wolfssl/lib -lwolfssl \
63+
-L/opt/wolfssl-gnutls-wrapper/lib -lgnutls-wolfssl-wrapper
64+
```
65+
Make sure the wrapper comes after gnutls on the linker line.
66+
67+
## Clean up
68+
```
69+
sudo rm -rf /opt/wolfssl /opt/gnutls /opt/wolfssl-gnutls-wrapper
70+
```

0 commit comments

Comments
 (0)