Add support for using VAES instructions for NI parallel operations. #1034
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: aes | |
on: | |
pull_request: | |
paths: | |
- ".github/workflows/aes.yml" | |
- "aes/**" | |
- "Cargo.*" | |
push: | |
branches: master | |
defaults: | |
run: | |
working-directory: aes | |
env: | |
CARGO_INCREMENTAL: 0 | |
RUSTFLAGS: "-Dwarnings" | |
SDE_FULL_VERSION: "9.33.0-2024-01-07" | |
jobs: | |
# Builds for no_std platforms | |
build: | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
rust: | |
- 1.72.0 # MSRV | |
- stable | |
target: | |
- thumbv7em-none-eabi | |
- wasm32-unknown-unknown | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: RustCrypto/actions/cargo-cache@master | |
- uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: ${{ matrix.rust }} | |
targets: ${{ matrix.target }} | |
- run: cargo check | |
- run: | | |
cargo build --target ${{ matrix.target }} | |
cargo build --target ${{ matrix.target }} --features hazmat | |
- env: | |
RUSTFLAGS: "-Dwarnings --cfg aes_force_soft" | |
run: | | |
cargo build --target ${{ matrix.target }} | |
cargo build --target ${{ matrix.target }} --features hazmat | |
- env: | |
RUSTFLAGS: "-Dwarnings --cfg aes_compact" | |
run: | | |
cargo build --target ${{ matrix.target }} | |
cargo build --target ${{ matrix.target }} --features hazmat | |
- env: | |
RUSTFLAGS: "-Dwarnings --cfg aes_force_soft --cfg aes_compact" | |
run: | | |
cargo build --target ${{ matrix.target }} | |
cargo build --target ${{ matrix.target }} --features hazmat | |
minimal-versions: | |
uses: RustCrypto/actions/.github/workflows/minimal-versions.yml@master | |
with: | |
working-directory: ${{ github.workflow }} | |
# Tests for the AES-NI backend | |
aesni: | |
runs-on: ubuntu-latest | |
env: | |
CARGO_INCREMENTAL: 0 | |
RUSTDOCFLAGS: "-C target-feature=+aes,+ssse3" | |
RUSTFLAGS: "-Dwarnings -C target-feature=+aes,+ssse3" | |
strategy: | |
matrix: | |
include: | |
# 32-bit Linux | |
- target: i686-unknown-linux-gnu | |
rust: 1.72.0 # MSRV | |
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 | |
# 64-bit Linux | |
- target: x86_64-unknown-linux-gnu | |
rust: 1.72.0 # MSRV | |
- target: x86_64-unknown-linux-gnu | |
rust: stable | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: RustCrypto/actions/cargo-cache@master | |
- uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: ${{ matrix.rust }} | |
targets: ${{ matrix.target }} | |
- run: ${{ matrix.deps }} | |
- run: cargo test --target ${{ matrix.target }} | |
- run: cargo test --target ${{ matrix.target }} --features hazmat | |
- run: cargo test --target ${{ matrix.target }} --all-features | |
# Tests for the VAES AVX backend | |
vaes256: | |
runs-on: ubuntu-latest | |
env: | |
CARGO_INCREMENTAL: 0 | |
RUSTFLAGS: "-Dwarnings --cfg disable_avx512" | |
strategy: | |
matrix: | |
include: | |
- target: x86_64-unknown-linux-gnu | |
rust: nightly-2024-02-07 | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: silvanshade/rustcrypto-actions/intel-sde-install@master | |
with: | |
sde-full-version: ${{ env.SDE_FULL_VERSION }} | |
- uses: RustCrypto/actions/cargo-cache@master | |
- uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: ${{ matrix.rust }} | |
targets: ${{ matrix.target }} | |
# NOTE: Write a `.cargo/config.toml` to configure the target for VAES | |
# NOTE: We use intel-sde as the runner since not all GitHub CI hosts support AVX512 | |
- name: write .cargo/config.toml | |
shell: bash | |
run: | | |
cd ../aes/.. | |
mkdir -p .cargo | |
echo '[target.${{ matrix.target }}]' > .cargo/config.toml | |
echo 'runner = "sde64 -future --"' >> .cargo/config.toml | |
- run: ${{ matrix.deps }} | |
- run: cargo test --target ${{ matrix.target }} | |
- run: cargo test --target ${{ matrix.target }} --features hazmat | |
- run: cargo test --target ${{ matrix.target }} --all-features | |
# Tests for the VAES AVX512 backend | |
vaes512: | |
runs-on: ubuntu-latest | |
env: | |
CARGO_INCREMENTAL: 0 | |
strategy: | |
matrix: | |
include: | |
- target: x86_64-unknown-linux-gnu | |
rust: nightly-2024-02-07 | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: silvanshade/rustcrypto-actions/intel-sde-install@master | |
with: | |
sde-full-version: ${{ env.SDE_FULL_VERSION }} | |
- uses: RustCrypto/actions/cargo-cache@master | |
- uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: ${{ matrix.rust }} | |
targets: ${{ matrix.target }} | |
# NOTE: Write a `.cargo/config.toml` to configure the target for VAES | |
# NOTE: We use intel-sde as the runner since not all GitHub CI hosts support AVX512 | |
- name: write .cargo/config.toml | |
shell: bash | |
run: | | |
cd ../aes/.. | |
mkdir -p .cargo | |
echo '[target.${{ matrix.target }}]' > .cargo/config.toml | |
echo 'runner = "sde64 -future --"' >> .cargo/config.toml | |
- run: ${{ matrix.deps }} | |
- run: cargo test --target ${{ matrix.target }} | |
- run: cargo test --target ${{ matrix.target }} --features hazmat | |
- run: cargo test --target ${{ matrix.target }} --all-features | |
# Tests for CPU feature autodetection with fallback to portable software implementation | |
autodetect: | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
include: | |
# 32-bit Linux | |
- target: i686-unknown-linux-gnu | |
rust: 1.72.0 # MSRV | |
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 | |
# 64-bit Linux | |
- target: x86_64-unknown-linux-gnu | |
rust: 1.72.0 # MSRV | |
- target: x86_64-unknown-linux-gnu | |
rust: stable | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: RustCrypto/actions/cargo-cache@master | |
- uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: ${{ matrix.rust }} | |
targets: ${{ matrix.target }} | |
- run: ${{ matrix.deps }} | |
- run: cargo test --target ${{ matrix.target }} | |
- run: cargo test --target ${{ matrix.target }} --features hazmat | |
- run: cargo test --target ${{ matrix.target }} --all-features | |
# Tests for the portable software backend (i.e. `aes_force_soft`-only) | |
soft: | |
runs-on: ubuntu-latest | |
env: | |
RUSTFLAGS: "-Dwarnings --cfg aes_force_soft" | |
strategy: | |
matrix: | |
include: | |
# 32-bit Linux | |
- target: i686-unknown-linux-gnu | |
rust: 1.72.0 # MSRV | |
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 | |
# 64-bit Linux | |
- target: x86_64-unknown-linux-gnu | |
rust: 1.72.0 # MSRV | |
- target: x86_64-unknown-linux-gnu | |
rust: stable | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: RustCrypto/actions/cargo-cache@master | |
- uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: ${{ matrix.rust }} | |
targets: ${{ matrix.target }} | |
- run: ${{ matrix.deps }} | |
- run: cargo test --target ${{ matrix.target }} | |
- run: cargo test --target ${{ matrix.target }} --all-features | |
# Cross-compiled tests | |
cross: | |
strategy: | |
matrix: | |
include: | |
# ARM64 | |
- target: aarch64-unknown-linux-gnu | |
rust: 1.72.0 # MSRV | |
- target: aarch64-unknown-linux-gnu | |
rust: stable | |
# PPC32 | |
- target: powerpc-unknown-linux-gnu | |
rust: 1.72.0 # MSRV | |
- target: powerpc-unknown-linux-gnu | |
rust: stable | |
runs-on: ubuntu-latest | |
# Cross mounts only current package, i.e. by default it ignores workspace's Cargo.toml | |
defaults: | |
run: | |
working-directory: . | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: RustCrypto/actions/cargo-cache@master | |
- uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: ${{ matrix.rust }} | |
targets: ${{ matrix.target }} | |
- uses: RustCrypto/actions/cross-install@master | |
- run: ${{ matrix.deps }} | |
- run: | | |
cross test --package aes --target ${{ matrix.target }} | |
cross test --package aes --target ${{ matrix.target }} --features hazmat | |
- env: | |
RUSTFLAGS: "-Dwarnings --cfg aes_force_soft" | |
run: | | |
cross test --package aes --target ${{ matrix.target }} | |
cross test --package aes --target ${{ matrix.target }} --features hazmat | |
- env: | |
RUSTFLAGS: "-Dwarnings --cfg aes_compact" | |
run: | | |
cross test --package aes --target ${{ matrix.target }} | |
cross test --package aes --target ${{ matrix.target }} --features hazmat | |
- env: | |
RUSTFLAGS: "-Dwarnings --cfg aes_force_soft --cfg aes_compact" | |
run: | | |
cross test --package aes --target ${{ matrix.target }} | |
cross test --package aes --target ${{ matrix.target }} --features hazmat | |
# ARMv8 cross-compiled tests for AES intrinsics | |
armv8: | |
strategy: | |
matrix: | |
include: | |
- target: aarch64-unknown-linux-gnu | |
rust: 1.72.0 # MSRV | |
runs-on: ubuntu-latest | |
# Cross mounts only current package, i.e. by default it ignores workspace's Cargo.toml | |
defaults: | |
run: | |
working-directory: . | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: RustCrypto/actions/cargo-cache@master | |
- run: ${{ matrix.deps }} | |
- uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: ${{ matrix.rust }} | |
targets: ${{ matrix.target }} | |
- uses: RustCrypto/actions/cross-install@master | |
- run: cross test --package aes --target ${{ matrix.target }} | |
- run: cross test --package aes --target ${{ matrix.target }} --features hazmat | |
- run: cross test --package aes --target ${{ matrix.target }} --all-features | |
clippy: | |
env: | |
RUSTFLAGS: "-Dwarnings --cfg aes_compact" | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: RustCrypto/actions/cargo-cache@master | |
- uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: 1.72.0 # MSRV | |
components: clippy | |
- run: cargo clippy --features hazmat -- -D warnings |