77 branches : [ '*' ]
88
99jobs :
10- bookworm :
10+ libwolfprov-standalone :
1111 runs-on : ubuntu-22.04
1212 # Important: use Debian Bookworm for compatibility
1313 container :
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