Skip to content

Commit c5e7219

Browse files
authored
Merge pull request #267 from padelsbach/wp_debian_ossl_nodefault
Add openssl debian package
2 parents d6b29e9 + 0671182 commit c5e7219

34 files changed

+929
-460
lines changed

.github/workflows/debian-package.yml

Lines changed: 261 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ on:
77
branches: [ '*' ]
88

99
jobs:
10-
bookworm:
10+
libwolfprov-standalone:
1111
runs-on: ubuntu-22.04
1212
# Important: use Debian Bookworm for compatibility
1313
container:
@@ -35,6 +35,7 @@ jobs:
3535
dpkg-dev \
3636
lintian \
3737
fakeroot \
38+
dh-exec\
3839
equivs
3940
# Install additional tools for testing
4041
apt-get install -y \
@@ -51,50 +52,45 @@ jobs:
5152
with:
5253
fetch-depth: 1
5354
- run: |
54-
# Fetch tags
55+
# Fetch tags, needed for the Debian versioning
5556
git fetch --tags
5657
# List all tags
5758
git tag -l
5859
5960
- name: Install wolfssl debian package
6061
run: |
61-
mkdir -p "$RUNNER_TEMP/wolfssl-pkg"
62-
cd "$RUNNER_TEMP/wolfssl-pkg"
62+
mkdir -p "/tmp/wolfssl-pkg"
63+
cd "/tmp/wolfssl-pkg"
6364
64-
echo "Using standard wolfSSL package"
65-
tar -xvf $GITHUB_WORKSPACE/.github/packages/debian-wolfssl.tar.gz
65+
# Install wolfssl packages
66+
chmod +x $GITHUB_WORKSPACE/debian/install-wolfssl.sh
67+
$GITHUB_WORKSPACE/debian/install-wolfssl.sh \
68+
$GITHUB_WORKSPACE/.github/packages/debian-wolfssl.tar.gz \
69+
"/tmp/wolfssl-pkg"
6670
67-
# Get current architecture
68-
CURRENT_ARCH=$(dpkg --print-architecture)
69-
echo "Current architecture: $CURRENT_ARCH"
71+
# Create wolfprov-packages directory and move wolfssl files there
72+
mkdir -p "/tmp/wolfprov-packages"
73+
echo "Moving wolfssl files to artifacts directory..."
7074
71-
# Look for existing .deb files that match the current architecture
72-
cd debian-packages
73-
MATCHING_DEB_FILES=$(find . -name "*_${CURRENT_ARCH}.deb" -o -name "*_${CURRENT_ARCH}_*.deb" 2>/dev/null || true)
75+
# Copy all wolfssl-related files (source and binary packages)
76+
find /tmp/wolfssl-pkg -name "*wolfssl*" -type f -name "*.deb" -exec cp {} /tmp/wolfprov-packages/ \;
77+
find /tmp/wolfssl-pkg -name "*wolfssl*" -type f -name "*.dsc" -exec cp {} /tmp/wolfprov-packages/ \;
78+
find /tmp/wolfssl-pkg -name "*wolfssl*" -type f -name "*.tar.gz" -exec cp {} /tmp/wolfprov-packages/ \;
79+
find /tmp/wolfssl-pkg -name "*wolfssl*" -type f -name "*.orig.tar.gz" -exec cp {} /tmp/wolfprov-packages/ \;
7480
75-
if [ -n "$MATCHING_DEB_FILES" ]; then
76-
echo "Found matching .deb files for architecture $CURRENT_ARCH:"
77-
echo "$MATCHING_DEB_FILES"
78-
echo "Installing existing .deb files..."
79-
dpkg -i $MATCHING_DEB_FILES
80-
else
81-
echo "No matching .deb files found for architecture $CURRENT_ARCH, rebuilding from source..."
82-
dpkg-source -x wolfssl*.dsc
83-
cd wolfssl*/
84-
dpkg-buildpackage -b -us -uc
85-
dpkg -i ../libwolfssl*.deb
86-
fi
81+
echo "WolfSSL files in artifacts directory:"
82+
ls -la /tmp/wolfprov-packages/*wolfssl* || true
8783
8884
- name: Build Debian package
8985
run: |
9086
# Bypass the warning prompt with 'yes Y'
91-
yes Y | ./scripts/build-wolfprovider.sh --debian
87+
yes Y | ./scripts/build-wolfprovider.sh --debian $FIPS_FLAG
9288
9389
# List generated packages
9490
echo "Generated Packages:"
9591
ls -la ../*.deb ../*.dsc ../*.tar.gz || true
9692
97-
- name: Install package
93+
- name: Install package without custom openssl
9894
run: |
9995
# Find the package file
10096
PACKAGE_FILE=$(find ../ -name "libwolfprov_*.deb" | head -n1)
@@ -114,11 +110,11 @@ jobs:
114110
115111
- name: Test OpenSSL provider functionality
116112
run: |
117-
PROVIDER_CONF="/etc/ssl/openssl.cnf.d/wolfprovider.conf"
113+
PROVIDER_CONF="/usr/lib/ssl/openssl.cnf.d/wolfprovider.conf"
118114
PROVIDER_CONF_BACKUP="/tmp/wolfprovider.conf.backup"
119115
120116
# Temporarily move wolfprovider config so we can toggle between providers
121-
echo "3. Temporarily disabling wolfprovider for default provider tests:"
117+
echo "Temporarily disabling wolfprovider for default provider tests:"
122118
mkdir -p /tmp/openssl-test
123119
if [ -f $PROVIDER_CONF ]; then
124120
mv $PROVIDER_CONF $PROVIDER_CONF_BACKUP
@@ -133,7 +129,7 @@ jobs:
133129
OPENSSL_BIN=$(eval which openssl) ./scripts/cmd_test/do-cmd-tests.sh
134130
135131
# Restore wolfprovider configuration
136-
echo "5. Restoring wolfprovider configuration:"
132+
echo "Restoring wolfprovider configuration:"
137133
if [ -f $PROVIDER_CONF_BACKUP ]; then
138134
mv $PROVIDER_CONF_BACKUP $PROVIDER_CONF
139135
echo " - Restored $PROVIDER_CONF from $PROVIDER_CONF_BACKUP"
@@ -156,9 +152,9 @@ jobs:
156152
fi
157153
158154
# Check if the config file is removed
159-
if [ -f /etc/ssl/openssl.cnf.d/wolfprovider.conf ]; then
155+
if [ -f /usr/lib/ssl/openssl.cnf.d/wolfprovider.conf ]; then
160156
echo "wolfprovider.conf still exists after package removal"
161-
ls -la /etc/ssl/openssl.cnf.d/
157+
ls -la /usr/lib/ssl/openssl.cnf.d/
162158
exit 1
163159
else
164160
echo "wolfprovider.conf successfully removed"
@@ -194,10 +190,12 @@ jobs:
194190
195191
- name: Move package artifacts
196192
run: |
197-
# Move the generated packages to the temp directory
198-
mv ../*.deb $RUNNER_TEMP/ || true
199-
mv ../*.dsc $RUNNER_TEMP/ || true
200-
mv ../*.tar.gz $RUNNER_TEMP/ || true
193+
# Create a clean artifacts directory
194+
mkdir -p "/tmp/wolfprov-packages"
195+
# Move the generated packages to the artifacts directory
196+
mv ../*.deb /tmp/wolfprov-packages/ || true
197+
mv ../*.dsc /tmp/wolfprov-packages/ || true
198+
mv ../*.tar.gz /tmp/wolfprov-packages/ || true
201199
202200
# Save the build outputs which for use in release packages
203201
- name: Upload package artifacts
@@ -206,7 +204,232 @@ jobs:
206204
with:
207205
name: wolfprovider-debian-packages
208206
path: |
209-
${{ runner.temp }}/*.deb
210-
${{ runner.temp }}/*.dsc
211-
${{ runner.temp }}/*.tar.gz
207+
/tmp/wolfprov-packages/*.deb
208+
/tmp/wolfprov-packages/*.dsc
209+
/tmp/wolfprov-packages/*.tar.gz
212210
retention-days: 7
211+
212+
libwolfprov-with-openssl:
213+
runs-on: ubuntu-22.04
214+
needs: libwolfprov-standalone
215+
container:
216+
image: debian:bookworm
217+
env:
218+
DEBIAN_FRONTEND: noninteractive
219+
steps:
220+
- name: Download artifacts from previous job
221+
uses: actions/download-artifact@v4
222+
with:
223+
name: wolfprovider-debian-packages
224+
path: /tmp/artifacts
225+
226+
- name: Set up environment
227+
run: |
228+
# Update package lists
229+
apt-get update
230+
# Install build dependencies
231+
apt-get install -y \
232+
build-essential \
233+
devscripts \
234+
debhelper \
235+
dh-autoreconf \
236+
libtool \
237+
pkg-config \
238+
git \
239+
wget \
240+
curl \
241+
ca-certificates \
242+
openssl \
243+
dpkg-dev \
244+
lintian \
245+
fakeroot \
246+
dh-exec\
247+
equivs
248+
# Install additional tools for testing
249+
apt-get install -y \
250+
expect \
251+
xxd
252+
253+
- name: Unpack artifacts
254+
run: |
255+
echo "Downloaded artifacts:"
256+
ls -la /tmp/artifacts/
257+
258+
# Create working directory
259+
mkdir -p /tmp/test-installation
260+
cd /tmp/test-installation
261+
262+
# Copy all artifacts to working directory
263+
cp /tmp/artifacts/* ./
264+
265+
echo "Unpacked artifacts in working directory:"
266+
ls -la
267+
268+
- name: Remove packages needed for artifact retrieval
269+
run: |
270+
# Remove packages that were needed for artifact download but shouldn't interfere with testing
271+
apt-get remove -y wget curl ca-certificates || true
272+
apt-get autoremove -y
273+
274+
- name: Install libwolfssl and openssl packages
275+
run: |
276+
cd /tmp/test-installation
277+
278+
# Find and install libwolfssl packages
279+
wolfssl_debs=$(find . -name "*libwolfssl*.deb")
280+
echo "Installing libwolfssl packages: $wolfssl_debs"
281+
if [ -n "$wolfssl_debs" ]; then
282+
apt install -y $wolfssl_debs
283+
fi
284+
285+
# Find and install openssl packages
286+
openssl_debs=$(find . -name "*openssl*.deb")
287+
libssl3_debs=$(find . -name "*libssl3*.deb")
288+
echo "Installing openssl packages: $openssl_debs $libssl3_debs"
289+
if [ -n "$openssl_debs" ] || [ -n "$libssl3_debs" ]; then
290+
apt install -y $openssl_debs $libssl3_debs
291+
fi
292+
293+
echo "Installed packages:"
294+
dpkg -l | grep -E "(wolfssl|openssl|libssl)"
295+
296+
- name: Show OpenSSL version
297+
run: |
298+
echo "OpenSSL version:"
299+
openssl version -a || true
300+
301+
- name: Test OpenSSL providers before wolfprov installation
302+
run: |
303+
echo "Testing OpenSSL providers before wolfprov installation..."
304+
echo "Expected: This should work normally with default providers"
305+
306+
# Test openssl list -providers
307+
if openssl list -providers; then
308+
echo "SUCCESS: openssl list -providers works before wolfprov installation"
309+
else
310+
echo "FAILURE: openssl list -providers failed before wolfprov installation"
311+
exit 1
312+
fi
313+
314+
echo "Provider list before wolfprov installation:"
315+
openssl list -providers
316+
317+
- name: Install libwolfprov package
318+
run: |
319+
cd /tmp/test-installation
320+
321+
# Find and install libwolfprov package
322+
wolfprov_debs=$(find . -name "*libwolfprov*.deb" | head -n1)
323+
echo "Installing libwolfprov package: $wolfprov_debs"
324+
325+
if [ -z "$wolfprov_debs" ]; then
326+
echo "ERROR: No libwolfprov package found!"
327+
ls -la
328+
exit 1
329+
fi
330+
331+
echo "Installing: $wolfprov_debs"
332+
apt install -y ./"$wolfprov_debs"
333+
334+
echo "Installed packages after wolfprov:"
335+
dpkg -l | grep -E "(wolfprov|wolfssl|openssl|libssl)"
336+
337+
- name: Test OpenSSL providers after wolfprov installation
338+
run: |
339+
echo "Testing OpenSSL providers after wolfprov installation..."
340+
echo "Expected: This should show wolfprov as an available provider"
341+
342+
# Test openssl list -providers
343+
if openssl list -providers; then
344+
echo "SUCCESS: openssl list -providers works after wolfprov installation"
345+
else
346+
echo "FAILURE: openssl list -providers failed after wolfprov installation"
347+
exit 1
348+
fi
349+
350+
echo "Provider list after wolfprov installation:"
351+
openssl list -providers
352+
353+
# Check if wolfprov provider is available
354+
if openssl list -providers | grep -i "wolfprov"; then
355+
echo "SUCCESS: wolfprov provider is available"
356+
else
357+
echo "WARNING: wolfprov provider not found in provider list"
358+
echo "This might be expected if the provider needs to be explicitly loaded"
359+
fi
360+
361+
- name: Verify wolfprov configuration
362+
run: |
363+
echo "Verifying wolfprov configuration..."
364+
365+
# Check if configuration file exists
366+
if [ -f /usr/lib/ssl/openssl.cnf.d/wolfprovider.conf ]; then
367+
echo "SUCCESS: wolfprovider.conf exists"
368+
cat /usr/lib/ssl/openssl.cnf.d/wolfprovider.conf
369+
else
370+
echo "WARNING: wolfprovider.conf not found"
371+
fi
372+
373+
# Check if library file exists
374+
if [ -f /usr/lib/*/ossl-modules/libwolfprov.so ]; then
375+
echo "SUCCESS: libwolfprov.so exists"
376+
find /usr/lib -name "libwolfprov.so*" 2>/dev/null
377+
else
378+
echo "WARNING: libwolfprov.so not found"
379+
fi
380+
381+
- name: Test basic OpenSSL functionality (digests, AES, ECDH, ECC)
382+
shell: bash
383+
run: |
384+
set -e
385+
echo "Testing OpenSSL digests..."
386+
echo "test" | openssl dgst -sha256
387+
echo "test" | openssl dgst -sha512
388+
389+
echo "Testing OpenSSL AES encryption/decryption..."
390+
echo "secret" | openssl enc -aes-128-cbc -pass pass:mykey -out secret.enc
391+
openssl enc -d -aes-128-cbc -pass pass:mykey -in secret.enc
392+
393+
echo "Testing OpenSSL ECDH key generation and shared secret..."
394+
openssl ecparam -name prime256v1 -genkey -noout -out ec1.pem
395+
openssl ecparam -name prime256v1 -genkey -noout -out ec2.pem
396+
openssl pkey -in ec1.pem -pubout -out ec1.pub
397+
openssl pkey -in ec2.pem -pubout -out ec2.pub
398+
openssl pkeyutl -derive -inkey ec1.pem -peerkey ec2.pub -out secret1.bin
399+
openssl pkeyutl -derive -inkey ec2.pem -peerkey ec1.pub -out secret2.bin
400+
cmp secret1.bin secret2.bin && echo "ECDH shared secrets match"
401+
402+
echo "Testing OpenSSL ECC sign/verify..."
403+
openssl ecparam -name prime256v1 -genkey -noout -out ecc_key.pem
404+
echo "message" > msg.txt
405+
openssl dgst -sha256 -sign ecc_key.pem -out msg.sig msg.txt
406+
openssl dgst -sha256 -verify <(openssl pkey -in ecc_key.pem -pubout) -signature msg.sig msg.txt
407+
408+
- name: Save artifacts
409+
run: |
410+
echo "Saving artifacts..."
411+
ls -la /tmp/test-installation
412+
cp -r /tmp/test-installation /tmp/artifacts
413+
414+
# Save the build outputs which for use in release packages
415+
- name: Upload package artifacts
416+
if: always()
417+
uses: actions/upload-artifact@v4
418+
with:
419+
name: ossl-debian-packages
420+
path: |
421+
/tmp/test-installation/*.deb
422+
/tmp/test-installation/*.dsc
423+
/tmp/test-installation/*.tar.gz
424+
retention-days: 1
425+
426+
- name: Cleanup test environment
427+
run: |
428+
echo "Cleaning up test environment..."
429+
430+
# Uninstall test packages
431+
apt-get remove --purge -y libwolfprov || true
432+
apt-get autoremove -y
433+
434+
echo "Cleanup completed"
435+

0 commit comments

Comments
 (0)