Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
140 changes: 138 additions & 2 deletions .github/workflows/build-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ jobs:
uses: actions/cache@v4
with:
path: ~/wolfssl-install
key: wolfssl-${{ matrix.os }}-${{ matrix.wolfssl-ref }}-v4
key: wolfssl-${{ matrix.os }}-${{ matrix.wolfssl-ref }}-v5-lms

- name: Build wolfSSL (${{ matrix.wolfssl-ref }})
if: matrix.wolfssl-ref == 'master' || steps.cache-wolfssl.outputs.cache-hit != 'true'
Expand All @@ -69,6 +69,7 @@ jobs:
--enable-sha384 --enable-sha512 \
--enable-keygen --enable-hkdf --enable-aeskeywrap \
--enable-chacha --enable-poly1305 \
--enable-lms \
$PQC_FLAGS --enable-rsapss \
--prefix=$HOME/wolfssl-install
make -j$(nproc 2>/dev/null || sysctl -n hw.ncpu)
Expand Down Expand Up @@ -120,6 +121,140 @@ jobs:
make tool-test CFLAGS="-std=c99 -DHAVE_ANONYMOUS_INLINE_AGGREGATES=1 -Os -Wall -Wextra -Wpedantic -Wshadow -Wconversion -I./include -isystem $WOLFSSL_DIR/include" \
LDFLAGS="-L$WOLFSSL_DIR/lib -lwolfssl"

lms-lean:
name: LMS lean profiles (wolfSSL ${{ matrix.wolfssl-ref }})
needs: discover
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
wolfssl-ref: ${{ fromJson(needs.discover.outputs.refs) }}

steps:
- uses: actions/checkout@v4

- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y autoconf automake libtool

- name: Cache wolfSSL (${{ matrix.wolfssl-ref }})
if: matrix.wolfssl-ref != 'master'
id: cache-wolfssl
uses: actions/cache@v4
with:
path: ~/wolfssl-install
key: wolfssl-ubuntu-latest-${{ matrix.wolfssl-ref }}-v5-lms

- name: Build wolfSSL (${{ matrix.wolfssl-ref }})
if: matrix.wolfssl-ref == 'master' || steps.cache-wolfssl.outputs.cache-hit != 'true'
run: |
cd ~
git clone --depth 1 --branch ${{ matrix.wolfssl-ref }} \
https://github.com/wolfSSL/wolfssl.git
cd wolfssl
./autogen.sh
REF="${{ matrix.wolfssl-ref }}"
if [ "$REF" = "master" ] || \
[ "$(printf '%s\n%s\n' v5.9.1-stable "$REF" | sort -V | tail -n1)" != "v5.9.1-stable" ]; then
PQC_FLAGS="--enable-mldsa"
else
PQC_FLAGS=""
fi
./configure --enable-ecc --enable-ed25519 --enable-ed448 \
--enable-curve25519 --enable-curve448 \
--enable-aesgcm --enable-aesccm \
--enable-sha384 --enable-sha512 \
--enable-keygen --enable-hkdf --enable-aeskeywrap \
--enable-chacha --enable-poly1305 \
--enable-lms \
$PQC_FLAGS --enable-rsapss \
--prefix=$HOME/wolfssl-install
make -j$(nproc 2>/dev/null || sysctl -n hw.ncpu)
make install

# LMS-only sign+verify profile (WOLFCOSE_LEAN_LMS), warnings fatal.
- name: LMS lean sign and verify
run: |
export WOLFSSL_DIR=$HOME/wolfssl-install
export LD_LIBRARY_PATH=$WOLFSSL_DIR/lib
make lms-demo CFLAGS="-std=c99 -DHAVE_ANONYMOUS_INLINE_AGGREGATES=1 -Os -Wall -Wextra -Wpedantic -Wshadow -Wconversion -Werror -I./include -isystem $WOLFSSL_DIR/include" \
LDFLAGS="-L$WOLFSSL_DIR/lib -lwolfssl"

# Smallest verify-only profile (WOLFCOSE_LEAN_VERIFY_LMS), warnings fatal.
- name: LMS lean verify-only
run: |
export WOLFSSL_DIR=$HOME/wolfssl-install
export LD_LIBRARY_PATH=$WOLFSSL_DIR/lib
make lms-verify CFLAGS="-std=c99 -DHAVE_ANONYMOUS_INLINE_AGGREGATES=1 -Os -Wall -Wextra -Wpedantic -Wshadow -Wconversion -Werror -I./include -isystem $WOLFSSL_DIR/include" \
LDFLAGS="-L$WOLFSSL_DIR/lib -lwolfssl"

# Strict ISO C99 (-pedantic-errors, -Wvla) over the LMS-gated branches and
# both lean LMS profiles, which the default c99-check cannot reach without
# an LMS wolfSSL.
- name: Strict C99 gate (LMS)
run: |
make c99-check-lms WOLFSSL_INC=$HOME/wolfssl-install/include

lms-verify-only:
name: LMS verify-only wolfSSL profile
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4

- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y autoconf automake libtool

# Build wolfSSL with LMS support that cannot sign, mirroring a verifier
# deployment. --enable-lms=verify-only records WOLFSSL_LMS_VERIFY_ONLY in
# options.h, which wolfCOSE reads to compile out its own signing paths.
- name: Build wolfSSL (LMS verify-only)
run: |
cd ~
git clone --depth 1 https://github.com/wolfSSL/wolfssl.git
cd wolfssl
./autogen.sh
./configure --enable-ecc --enable-ed25519 --enable-ed448 \
--enable-curve25519 --enable-curve448 \
--enable-aesgcm --enable-aesccm \
--enable-sha384 --enable-sha512 \
--enable-keygen --enable-hkdf --enable-aeskeywrap \
--enable-chacha --enable-poly1305 \
--enable-lms=verify-only \
--enable-mldsa --enable-rsapss \
--prefix=$HOME/wolfssl-lmsvo
make -j$(nproc)
make install

- name: Assert signing symbol absent from verify-only build
run: |
if nm -D $HOME/wolfssl-lmsvo/lib/libwolfssl.so 2>/dev/null \
| grep -qw wc_LmsKey_Sign; then
echo "FAIL: wc_LmsKey_Sign present in a verify-only wolfSSL"
exit 1
fi
echo "OK: wc_LmsKey_Sign absent from verify-only wolfSSL"

# Fixed-vector verify with no sign-capable code in either library.
- name: LMS fixed-vector verify
run: |
export WOLFSSL_DIR=$HOME/wolfssl-lmsvo
export LD_LIBRARY_PATH=$WOLFSSL_DIR/lib
make lms-verify CFLAGS="-std=c99 -DHAVE_ANONYMOUS_INLINE_AGGREGATES=1 -Os -Wall -Wextra -Wpedantic -Wshadow -Wconversion -Werror -I./include -isystem $WOLFSSL_DIR/include" \
LDFLAGS="-L$WOLFSSL_DIR/lib -lwolfssl"

# Delegated LMS signing against a backend that cannot sign: the callback
# supplies the signature, the public LmsKey only its length.
- name: Delegated LMS with verify-only backend
run: |
export WOLFSSL_DIR=$HOME/wolfssl-lmsvo
export LD_LIBRARY_PATH=$WOLFSSL_DIR/lib
make ext-sign-test CFLAGS="-std=c99 -DHAVE_ANONYMOUS_INLINE_AGGREGATES=1 -Os -Wall -Wextra -Wpedantic -Wshadow -Wconversion -Werror -I./include -isystem $WOLFSSL_DIR/include" \
LDFLAGS="-L$WOLFSSL_DIR/lib -lwolfssl"

coverage:
name: Code Coverage (wolfSSL ${{ matrix.wolfssl-version }})
needs: discover
Expand All @@ -142,7 +277,7 @@ jobs:
uses: actions/cache@v4
with:
path: ~/wolfssl-install
key: wolfssl-coverage-${{ matrix.wolfssl-version }}-v4
key: wolfssl-coverage-${{ matrix.wolfssl-version }}-v5-lms

- name: Build wolfSSL (${{ matrix.wolfssl-version }})
if: matrix.wolfssl-version == 'master' || steps.cache-wolfssl.outputs.cache-hit != 'true'
Expand All @@ -165,6 +300,7 @@ jobs:
--enable-sha384 --enable-sha512 \
--enable-keygen --enable-hkdf --enable-aeskeywrap \
--enable-chacha --enable-poly1305 \
--enable-lms \
$PQC_FLAGS --enable-rsapss \
--prefix=$HOME/wolfssl-install
make -j$(nproc)
Expand Down
7 changes: 4 additions & 3 deletions .github/workflows/coverage.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,9 @@ jobs:
path: ~/wolfssl-install
# Coverage needs its own cache: other workflows share the generic
# ubuntu-latest key but configure wolfSSL without aeskeywrap, and a
# cache hit on such a build silently skips the KEY_WRAP tests.
key: wolfssl-coverage-fullcfg-v1-${{ steps.wolfssl-rev.outputs.sha }}
# cache hit on such a build silently skips the KEY_WRAP tests. The
# -lms suffix distinguishes the LMS-enabled coverage build.
key: wolfssl-coverage-fullcfg-lms-v1-${{ steps.wolfssl-rev.outputs.sha }}

- name: Build wolfSSL
if: steps.cache-wolfssl.outputs.cache-hit != 'true'
Expand All @@ -49,7 +50,7 @@ jobs:
--enable-curve25519 --enable-aesgcm --enable-aesccm \
--enable-sha384 --enable-sha512 --enable-keygen \
--enable-rsapss --enable-chacha --enable-poly1305 \
--enable-mldsa \
--enable-mldsa --enable-lms \
--enable-hkdf --enable-aeskeywrap \
--enable-aescbc \
--prefix=$HOME/wolfssl-install
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/coverity.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ jobs:
uses: actions/cache@v4
with:
path: ~/wolfssl-install
key: wolfssl-coverity-v3-${{ steps.wolfssl-rev.outputs.sha }}
key: wolfssl-coverity-v4-lms-${{ steps.wolfssl-rev.outputs.sha }}

- name: Build wolfSSL (latest stable + master, PQC-gated)
if: steps.cache-wolfssl.outputs.cache-hit != 'true'
Expand All @@ -47,7 +47,7 @@ jobs:
--enable-curve25519 --enable-aesgcm --enable-aesccm \
--enable-sha384 --enable-sha512 --enable-keygen \
--enable-rsapss --enable-chacha --enable-poly1305 \
--enable-mldsa \
--enable-mldsa --enable-lms \
--prefix=$HOME/wolfssl-install
make -j$(nproc)
make install
Expand Down
5 changes: 3 additions & 2 deletions .github/workflows/misra-2012.yml
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ jobs:
uses: actions/cache@v4
with:
path: ~/wolfssl-install
key: wolfssl-ubuntu-24.04-v4-${{ env.WOLFSSL_REF }}
key: wolfssl-ubuntu-24.04-v5-lms-${{ env.WOLFSSL_REF }}

- name: Build wolfSSL
if: steps.cache-wolfssl.outputs.cache-hit != 'true'
Expand All @@ -59,7 +59,7 @@ jobs:
--enable-curve25519 --enable-aesgcm --enable-aesccm \
--enable-sha384 --enable-sha512 --enable-keygen \
--enable-rsapss --enable-chacha --enable-poly1305 \
--enable-mldsa \
--enable-mldsa --enable-lms \
--prefix=$HOME/wolfssl-install
make -j$(nproc)
make install
Expand Down Expand Up @@ -97,6 +97,7 @@ jobs:
-DHAVE_ED448 \
-DWC_RSA_PSS \
-DWOLFSSL_HAVE_MLDSA \
-DWOLFSSL_HAVE_LMS \
-DHAVE_AESGCM \
-DHAVE_AESCCM \
-DHAVE_CHACHA \
Expand Down
12 changes: 6 additions & 6 deletions .github/workflows/misra-2023.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ jobs:
uses: actions/cache@v4
with:
path: ~/wolfssl-install
key: wolfssl-ubuntu-latest-v3-${{ steps.wolfssl-rev.outputs.sha }}
key: wolfssl-ubuntu-latest-v4-lms-${{ steps.wolfssl-rev.outputs.sha }}

- name: Build wolfSSL
if: steps.cache-wolfssl.outputs.cache-hit != 'true'
Expand All @@ -53,7 +53,7 @@ jobs:
--enable-curve25519 --enable-aesgcm --enable-aesccm \
--enable-sha384 --enable-sha512 --enable-keygen \
--enable-rsapss --enable-chacha --enable-poly1305 \
--enable-mldsa \
--enable-mldsa --enable-lms \
--prefix=$HOME/wolfssl-install
make -j$(nproc)
make install
Expand Down Expand Up @@ -94,7 +94,7 @@ jobs:
-Wlogical-op -Wjump-misses-init -Wdouble-promotion \
-Wnull-dereference -Wsign-conversion \
-DHAVE_ECC -DHAVE_ED25519 -DHAVE_ED448 \
-DWC_RSA_PSS -DWOLFSSL_HAVE_MLDSA \
-DWC_RSA_PSS -DWOLFSSL_HAVE_MLDSA -DWOLFSSL_HAVE_LMS \
-DHAVE_AESGCM -DHAVE_AESCCM \
-DHAVE_CHACHA -DHAVE_POLY1305 \
-DWOLFSSL_SHA384 -DWOLFSSL_SHA512 \
Expand Down Expand Up @@ -168,7 +168,7 @@ jobs:
uses: actions/cache@v4
with:
path: ~/wolfssl-install
key: wolfssl-ubuntu-latest-v3-${{ steps.wolfssl-rev.outputs.sha }}
key: wolfssl-ubuntu-latest-v4-lms-${{ steps.wolfssl-rev.outputs.sha }}

- name: Build wolfSSL
if: steps.cache-wolfssl.outputs.cache-hit != 'true'
Expand All @@ -181,7 +181,7 @@ jobs:
--enable-curve25519 --enable-aesgcm --enable-aesccm \
--enable-sha384 --enable-sha512 --enable-keygen \
--enable-rsapss --enable-chacha --enable-poly1305 \
--enable-mldsa \
--enable-mldsa --enable-lms \
--prefix=$HOME/wolfssl-install
make -j$(nproc)
make install
Expand Down Expand Up @@ -212,7 +212,7 @@ jobs:
-checks='-*,bugprone-*,cert-*,clang-analyzer-*,misc-*,-misc-include-cleaner,-bugprone-branch-clone,-bugprone-easily-swappable-parameters,-clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling' \
-- -std=c99 -DHAVE_ANONYMOUS_INLINE_AGGREGATES=1 -I./include -isystem $WOLFSSL_DIR/include \
-DHAVE_ECC -DHAVE_ED25519 -DHAVE_ED448 \
-DWC_RSA_PSS -DWOLFSSL_HAVE_MLDSA \
-DWC_RSA_PSS -DWOLFSSL_HAVE_MLDSA -DWOLFSSL_HAVE_LMS \
-DHAVE_AESGCM -DHAVE_AESCCM \
-DHAVE_CHACHA -DHAVE_POLY1305 \
-DWOLFSSL_SHA384 -DWOLFSSL_SHA512 \
Expand Down
12 changes: 6 additions & 6 deletions .github/workflows/static-analysis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ jobs:
uses: actions/cache@v4
with:
path: ~/wolfssl-install
key: wolfssl-ubuntu-latest-v3-${{ steps.wolfssl-rev.outputs.sha }}
key: wolfssl-ubuntu-latest-v4-lms-${{ steps.wolfssl-rev.outputs.sha }}

- name: Build wolfSSL
if: steps.cache-wolfssl.outputs.cache-hit != 'true'
Expand All @@ -44,7 +44,7 @@ jobs:
--enable-curve25519 --enable-aesgcm --enable-aesccm \
--enable-sha384 --enable-sha512 --enable-keygen \
--enable-rsapss --enable-chacha --enable-poly1305 \
--enable-mldsa \
--enable-mldsa --enable-lms \
--prefix=$HOME/wolfssl-install
make -j$(nproc)
make install
Expand Down Expand Up @@ -88,7 +88,7 @@ jobs:
uses: actions/cache@v4
with:
path: ~/wolfssl-install
key: wolfssl-ubuntu-latest-v3-${{ steps.wolfssl-rev.outputs.sha }}
key: wolfssl-ubuntu-latest-v4-lms-${{ steps.wolfssl-rev.outputs.sha }}

- name: Build wolfSSL
if: steps.cache-wolfssl.outputs.cache-hit != 'true'
Expand All @@ -101,7 +101,7 @@ jobs:
--enable-curve25519 --enable-aesgcm --enable-aesccm \
--enable-sha384 --enable-sha512 --enable-keygen \
--enable-rsapss --enable-chacha --enable-poly1305 \
--enable-mldsa \
--enable-mldsa --enable-lms \
--prefix=$HOME/wolfssl-install
make -j$(nproc)
make install
Expand Down Expand Up @@ -139,7 +139,7 @@ jobs:
uses: actions/cache@v4
with:
path: ~/wolfssl-install
key: wolfssl-ubuntu-latest-v3-${{ steps.wolfssl-rev.outputs.sha }}
key: wolfssl-ubuntu-latest-v4-lms-${{ steps.wolfssl-rev.outputs.sha }}

- name: Build wolfSSL
if: steps.cache-wolfssl.outputs.cache-hit != 'true'
Expand All @@ -152,7 +152,7 @@ jobs:
--enable-curve25519 --enable-aesgcm --enable-aesccm \
--enable-sha384 --enable-sha512 --enable-keygen \
--enable-rsapss --enable-chacha --enable-poly1305 \
--enable-mldsa \
--enable-mldsa --enable-lms \
--prefix=$HOME/wolfssl-install
make -j$(nproc)
make install
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ examples/sign1_verify_lean
examples/sign1_mldsa
examples/ext_sign_demo
examples/sign1_verify_mldsa
examples/sign1_lms
examples/sign1_verify_lms

# Editor / OS
*.swp
Expand Down
Loading
Loading