hardware-rust-crypto 1.0.0

Hardware-only AES-256-GCM and AES-256-GCM-SIV AEAD plus AES-256-CTR key/nonce generation (AES-NI/PCLMULQDQ, ARMv8 AES/PMULL), with compact, caller-placeable, zeroized key state.
Documentation
name: Mutation testing

# cargo-mutants over the GCM composition control logic and the nonce generator -
# confirms the test suite actually catches injected bugs. Manual-only (slow); the
# accepted survivor set is reviewed in docs/mutation-testing.md.
on:
  workflow_dispatch:
    inputs:
      jobs:
        description: "Parallel mutation jobs (-j)"
        default: "4"

permissions:
  contents: read

jobs:
  mutation-testing:
    name: mutation testing (test-suite effectiveness)
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
      - uses: dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8 # stable as of 2026-06-11
        with:
          toolchain: stable
      - uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2
      - name: Install cargo-mutants
        run: cargo install --locked cargo-mutants
      # Confirm the tests catch injected bugs in the GCM composition control
      # logic and the nonce generator. Accepted survivors (formatting, hardware
      # detection, petabyte-scale limits, fork/wrap paths, security-equivalent
      # masks) are documented in docs/mutation-testing.md; this run reports the
      # numbers rather than gating, since the accepted set is reviewed there.
      - name: Mutants over the GCM composition + nonce generator
        run: |
          cargo mutants --file src/aes_gcm/mod.rs --file src/aes_gcm/nonce.rs \
            --exclude-re 'kani_proofs|tests::|ct_verify' -j ${{ inputs.jobs }} || true
      - name: Upload mutation report
        if: always()
        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
        with:
          name: mutants-report
          path: mutants.out/