name: test
on: [ push, pull_request ]
permissions:
contents: read
env:
CARGO_INCREMENTAL: 0
RUSTFLAGS: "-Dwarnings"
RUSTDOCFLAGS: "-Dwarnings"
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
rust:
- 1.85 - stable
target:
- thumbv7em-none-eabi
- wasm32-unknown-unknown
- s390x-unknown-linux-gnu
- powerpc64-unknown-linux-gnu
- riscv64gc-unknown-none-elf
- x86_64-pc-windows-gnu
- x86_64-apple-darwin
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 - uses: dtolnay/rust-toolchain@683b588c487a69d01f6c6ddf40f036ff682cc2c8 with:
toolchain: ${{ matrix.rust }}
targets: ${{ matrix.target }}
- run: cargo build --target ${{ matrix.target }} --release --no-default-features --features "ml-dsa-44 ml-dsa-65 ml-dsa-87"
cargo_audit:
runs-on: ubuntu-latest
permissions:
contents: read
checks: write steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 - run: cargo generate-lockfile
- uses: rustsec/audit-check@69366f33c96575abad1ee0dba8212993eecbe998 with:
token: ${{ secrets.GITHUB_TOKEN }}
cargo_deny:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 - uses: EmbarkStudios/cargo-deny-action@3c6349835b2b7b196a839186cb8b78e02f7b5f25
cargo_outdated:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 - uses: dtolnay/rust-toolchain@683b588c487a69d01f6c6ddf40f036ff682cc2c8 with:
toolchain: stable
- name: Install cargo outdated
run: cargo install --locked cargo-outdated
- name: Run cargo outdated
run: cargo outdated -R -x rand_core
clippy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 - uses: dtolnay/rust-toolchain@683b588c487a69d01f6c6ddf40f036ff682cc2c8 with:
toolchain: stable
components: clippy
- name: Run Clippy
run: cargo clippy --all-targets --all-features
coverage:
runs-on: ubuntu-latest
env:
CARGO_TERM_COLOR: always
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 - uses: dtolnay/rust-toolchain@683b588c487a69d01f6c6ddf40f036ff682cc2c8 with:
toolchain: stable
- name: Install cargo-llvm-cov
uses: taiki-e/install-action@1168f6810a3cb30a3514bf5756a3b7f0422c6df8 with:
tool: cargo-llvm-cov
- name: Generate code coverage
run: cargo llvm-cov --all-features --workspace --exclude fips204-ffi
cross:
strategy:
matrix:
include:
- target: armv7-unknown-linux-gnueabihf
rust: 1.85 - target: armv7-unknown-linux-gnueabihf
rust: stable
- target: aarch64-unknown-linux-gnu
rust: 1.85 - target: aarch64-unknown-linux-gnu
rust: stable
- target: powerpc-unknown-linux-gnu
rust: 1.85 - target: powerpc-unknown-linux-gnu
rust: stable
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 - run: ${{ matrix.deps }}
- uses: dtolnay/rust-toolchain@683b588c487a69d01f6c6ddf40f036ff682cc2c8 with:
toolchain: ${{ matrix.rust }}
targets: ${{ matrix.target }}
- uses: RustCrypto/actions/cross-install@efc9b5d1c965d13258baa76a080e85a7c495c658 - run: cross test --release --target ${{ matrix.target }} --no-default-features --features "ml-dsa-44 ml-dsa-65 ml-dsa-87"
doc:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 - uses: RustCrypto/actions/cargo-cache@efc9b5d1c965d13258baa76a080e85a7c495c658 - uses: dtolnay/rust-toolchain@683b588c487a69d01f6c6ddf40f036ff682cc2c8 with:
toolchain: stable
- run: cargo doc --all-features
test:
runs-on: ubuntu-latest
strategy:
matrix:
include:
- target: i686-unknown-linux-gnu
rust: 1.85 deps: sudo apt update && sudo apt install gcc-multilib
- target: i686-unknown-linux-gnu
rust: stable
deps: sudo apt update && sudo apt install gcc-multilib
- target: x86_64-unknown-linux-gnu
rust: 1.85 - target: x86_64-unknown-linux-gnu
rust: stable
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 - uses: dtolnay/rust-toolchain@683b588c487a69d01f6c6ddf40f036ff682cc2c8 with:
toolchain: ${{ matrix.rust }}
targets: ${{ matrix.target }}
- run: ${{ matrix.deps }}
- run: cargo check --target ${{ matrix.target }} --all-features
- run: cargo test --release --target ${{ matrix.target }}
- name: 32-bit compile memory (Debian autopkgtest settings)
if: matrix.target == 'i686-unknown-linux-gnu' && matrix.rust == 'stable'
run: (ulimit -v 3500000; cargo test --no-run --all-targets --all-features --target ${{ matrix.target }})
env:
RUSTFLAGS: "-C debuginfo=2"
ffi:
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 - uses: dtolnay/rust-toolchain@683b588c487a69d01f6c6ddf40f036ff682cc2c8 with:
toolchain: stable
- name: Build shared library and run C tests
run: |
cargo build -p fips204-ffi
make -C ffi/tests check
- name: Python NIST vectors
run: |
case "$RUNNER_OS" in macOS) ext=dylib ;; *) ext=so ;; esac
cd ffi/python
FIPS204_PYTHON_TESTING_LIBRARY=../../target/debug/libfips204.$ext \
PYTHONPATH=. python3 test/nist.py
native:
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-24.04-arm - os: macos-latest - os: macos-15-intel - os: windows-latest - os: windows-11-arm - os: windows-latest target: i686-pc-windows-msvc
- os: ubuntu-latest target: x86_64-unknown-linux-musl
runs-on: ${{ matrix.os }}
defaults:
run:
shell: bash
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 - uses: dtolnay/rust-toolchain@683b588c487a69d01f6c6ddf40f036ff682cc2c8 with:
toolchain: stable
targets: ${{ matrix.target }}
- name: Rust tests
run: cargo test --release ${TARGET:+--target $TARGET}
env:
TARGET: ${{ matrix.target }}
- name: C library and Python NIST vectors
if: ${{ !matrix.target }}
run: |
cargo build --release -p fips204-ffi
case "$RUNNER_OS" in
Windows) lib=fips204.dll; py=python ;;
macOS) lib=libfips204.dylib; py=python3 ;;
*) lib=libfips204.so; py=python3 ;;
esac
if ! command -v "$py" > /dev/null; then
echo "::warning::no $py on this runner; the Python NIST test is skipped"
exit 0
fi
cd ffi/python
export FIPS204_PYTHON_TESTING_LIBRARY=../../target/release/$lib PYTHONPATH=.
"$py" test/nist.py
targets:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
target:
- aarch64-apple-ios
- aarch64-linux-android
- armv7-linux-androideabi
- x86_64-unknown-freebsd
- x86_64-unknown-netbsd
- x86_64-unknown-illumos
- riscv64gc-unknown-linux-gnu
- loongarch64-unknown-linux-gnu
- powerpc64le-unknown-linux-gnu
- wasm32-wasip1
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 - uses: dtolnay/rust-toolchain@683b588c487a69d01f6c6ddf40f036ff682cc2c8 with:
toolchain: stable
targets: ${{ matrix.target }}
- run: cargo check --target ${{ matrix.target }}
- if: matrix.target != 'wasm32-wasip1'
run: cargo check -p fips204-ffi --target ${{ matrix.target }}