Revive CI with GH Workflows (#6)

This commit is contained in:
Alexander Wagner 2022-01-26 04:26:50 +01:00 committed by GitHub
parent 35ac0f140f
commit 71c7948b23
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 281 additions and 127 deletions

41
.github/actions/cross-tests/action.yml vendored Normal file
View File

@ -0,0 +1,41 @@
name: "cross-tests"
inputs:
rust:
required: true
package:
required: true
target:
required: true
features:
required: true
runs:
using: "composite"
steps:
- uses: actions/checkout@v2
- uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: ${{ inputs.rust }}
target: ${{ inputs.target }}
override: true
- name: Install precompiled cross
run: |
export URL=$(curl -s https://api.github.com/repos/cross-rs/cross/releases/latest | \
jq -r '.assets[] | select(.name | contains("x86_64-unknown-linux-gnu.tar.gz")) | .browser_download_url')
wget -O /tmp/binaries.tar.gz $URL
tar -C /tmp -xzf /tmp/binaries.tar.gz
mv /tmp/cross ~/.cargo/bin
shell: bash
- if: ${{ inputs.features != 'NO_FEATURE' }}
run: |
cd ${{ inputs.package }}
cross test --target ${{ inputs.target }} --no-default-features \
--features ${{ inputs.features }}
shell: bash
- if: ${{ inputs.features == 'NO_FEATURE' }}
run: |
cd ${{ inputs.package }}
cross test --target ${{ inputs.target }} --no-default-features
shell: bash

7
.github/dependabot.yml vendored Normal file
View File

@ -0,0 +1,7 @@
version: 2
updates:
- package-ecosystem: cargo
directory: "/"
schedule:
interval: daily
open-pull-requests-limit: 10

101
.github/workflows/keccak.yml vendored Normal file
View File

@ -0,0 +1,101 @@
name: keccak
on:
pull_request:
paths:
- ".github/workflows/keccak.yml"
- "keccak/**"
- "Cargo.*"
push:
branches: master
defaults:
run:
working-directory: keccak
env:
MSRV: 1.41.0
RUSTFLAGS: "-Dwarnings"
CARGO_INCREMENTAL: 0
jobs:
set-msrv:
runs-on: ubuntu-latest
outputs:
msrv: ${{ steps.msrv.outputs.msrv }}
steps:
- uses: actions/checkout@v2
- id: msrv
run: echo "::set-output name=msrv::$(echo $MSRV)"
build:
needs: set-msrv
runs-on: ubuntu-latest
strategy:
matrix:
rust:
- ${{needs.set-msrv.outputs.msrv}}
- stable
target:
- thumbv7em-none-eabi
- wasm32-unknown-unknown
steps:
- uses: actions/checkout@v2
- uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: ${{ matrix.rust }}
target: ${{ matrix.target }}
override: true
- run: cargo build --no-default-features --target ${{ matrix.target }}
test:
needs: set-msrv
runs-on: ubuntu-latest
strategy:
matrix:
rust:
- ${{needs.set-msrv.outputs.msrv}}
- stable
steps:
- uses: actions/checkout@v2
- uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: ${{ matrix.rust }}
override: true
- run: cargo check --all-features
- run: cargo test --no-default-features
- run: cargo test
- run: cargo test --all-features
# Cross-compiled tests
cross:
needs: set-msrv
strategy:
matrix:
rust:
- ${{needs.set-msrv.outputs.msrv}}
- stable
target:
- i686-unknown-linux-gnu
- x86_64-unknown-linux-gnu
- aarch64-unknown-linux-gnu
- mips-unknown-linux-gnu
features:
- no_unroll
- 'NO_FEATURE'
runs-on: ubuntu-latest
defaults:
run:
# Cross mounts only current package, i.e. by default it ignores workspace's Cargo.toml
working-directory: .
steps:
- uses: actions/checkout@v2
- uses: ./.github/actions/cross-tests
with:
rust: ${{ matrix.rust }}
package: ${{ github.workflow }}
target: ${{ matrix.target }}
features: ${{ matrix.features }}

24
.github/workflows/security-audit.yml vendored Normal file
View File

@ -0,0 +1,24 @@
name: Security Audit
on:
pull_request:
paths: Cargo.lock
push:
branches: master
paths: Cargo.lock
schedule:
- cron: "0 0 * * *"
jobs:
security_audit:
name: Security Audit
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Cache cargo bin
uses: actions/cache@v1
with:
path: ~/.cargo/bin
key: ${{ runner.os }}-cargo-audit-v0.12.0
- uses: actions-rs/audit-check@v1
with:
token: ${{ secrets.GITHUB_TOKEN }}

43
.github/workflows/workspace.yml vendored Normal file
View File

@ -0,0 +1,43 @@
name: Workspace
on:
pull_request:
paths-ignore:
- README.md
push:
branches: master
paths-ignore:
- README.md
jobs:
clippy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- uses: actions-rs/toolchain@v1
with:
toolchain: stable
components: clippy
profile: minimal
override: true
- run: cargo clippy --all -- -D warnings
rustfmt:
runs-on: ubuntu-latest
steps:
- name: Checkout sources
uses: actions/checkout@v1
- name: Install stable toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: stable
components: rustfmt
profile: minimal
override: true
- name: Run cargo fmt
uses: actions-rs/cargo@v1
with:
command: fmt
args: --all -- --check

View File

@ -1,34 +0,0 @@
language: rust
services: docker
sudo: required
matrix:
include:
- env: TARGET=i686-unknown-linux-gnu
rust: stable
- env: TARGET=x86_64-unknown-linux-gnu
rust: stable
- env: TARGET=x86_64-unknown-linux-gnu
rust: 1.15.0
- env: TARGET=x86_64-unknown-linux-gnu
rust: nightly
- env: TARGET=powerpc-unknown-linux-gnu
rust: stable
- env: TARGET=powerpc64-unknown-linux-gnu
rust: stable
- env: TARGET=thumbv7em-none-eabi
rust: nightly
script: ./build_nostd.sh
install:
- cargo install xargo --force
- rustup target install armv7-unknown-linux-gnueabihf
- rustup component add rust-src
install:
- curl -LSfs https://japaric.github.io/trust/install.sh | sh -s -- --git japaric/cross --force
- source ~/.cargo/env || true
script:
- cross test --verbose --all --release --target $TARGET
cache: cargo

View File

@ -1,21 +0,0 @@
#!/bin/sh
# Due to the fact that cargo does not disable default features when we use
# cargo build --all --no-default-features we have to explicitly iterate over
# all crates (see https://github.com/rust-lang/cargo/issues/4753 )
DIRS=`ls -d */`
TARGET="thumbv7em-none-eabi"
cargo clean
for dir in $DIRS; do
# disable check for aesni, as it requires x86
if [ $dir = "target/" ]
then
continue
fi
cd $dir
xargo build --no-default-features --verbose --target $TARGET || {
echo $dir failed
exit 1
}
cd ..
done

View File

@ -11,6 +11,3 @@ categories = ["cryptography", "no-std"]
[features]
no_unroll = []
[badges]
travis-ci = { repository = "RustCrypto/sponges" }

View File

@ -38,16 +38,17 @@
#![no_std]
#![allow(non_upper_case_globals)]
#[rustfmt::skip]
mod unroll;
const PLEN: usize = 25;
const RHO: [u32; 24] = [
1, 3, 6, 10, 15, 21, 28, 36, 45, 55, 2, 14, 27, 41, 56, 8, 25, 43, 62, 18,
39, 61, 20, 44,
1, 3, 6, 10, 15, 21, 28, 36, 45, 55, 2, 14, 27, 41, 56, 8, 25, 43, 62, 18, 39, 61, 20, 44,
];
const PI: [usize; 24] = [
10, 7, 11, 17, 18, 3, 5, 16, 8, 21, 24, 4, 15, 23, 19, 13, 12, 2, 20, 14,
22, 9, 6, 1,
10, 7, 11, 17, 18, 3, 5, 16, 8, 21, 24, 4, 15, 23, 19, 13, 12, 2, 20, 14, 22, 9, 6, 1,
];
const RC: [u64; 24] = [
@ -77,67 +78,12 @@ const RC: [u64; 24] = [
0x8000000080008008,
];
#[cfg(not(feature = "no_unroll"))]
macro_rules! unroll5 {
($var:ident, $body:block) => {
{ const $var: usize = 0; $body; }
{ const $var: usize = 1; $body; }
{ const $var: usize = 2; $body; }
{ const $var: usize = 3; $body; }
{ const $var: usize = 4; $body; }
};
}
#[cfg(feature = "no_unroll")]
macro_rules! unroll5 {
($var:ident, $body:block) => {
for $var in 0..5 $body
}
}
#[cfg(not(feature = "no_unroll"))]
macro_rules! unroll24 {
($var: ident, $body: block) => {
{ const $var: usize = 0; $body; }
{ const $var: usize = 1; $body; }
{ const $var: usize = 2; $body; }
{ const $var: usize = 3; $body; }
{ const $var: usize = 4; $body; }
{ const $var: usize = 5; $body; }
{ const $var: usize = 6; $body; }
{ const $var: usize = 7; $body; }
{ const $var: usize = 8; $body; }
{ const $var: usize = 9; $body; }
{ const $var: usize = 10; $body; }
{ const $var: usize = 11; $body; }
{ const $var: usize = 12; $body; }
{ const $var: usize = 13; $body; }
{ const $var: usize = 14; $body; }
{ const $var: usize = 15; $body; }
{ const $var: usize = 16; $body; }
{ const $var: usize = 17; $body; }
{ const $var: usize = 18; $body; }
{ const $var: usize = 19; $body; }
{ const $var: usize = 20; $body; }
{ const $var: usize = 21; $body; }
{ const $var: usize = 22; $body; }
{ const $var: usize = 23; $body; }
};
}
#[cfg(feature = "no_unroll")]
macro_rules! unroll24 {
($var:ident, $body:block) => {
for $var in 0..24 $body
}
}
#[allow(unused_assignments)]
/// Keccak-f[1600] sponge function
pub fn f1600(a: &mut [u64; PLEN]) {
// not unrolling this loop results in a much smaller function, plus
// it positively influences performance due to the smaller load on I-cache
for i in 0..24 {
for rc in &RC {
let mut array = [0u64; 5];
// Theta
@ -179,6 +125,6 @@ pub fn f1600(a: &mut [u64; PLEN]) {
});
// Iota
a[0] ^= RC[i];
a[0] ^= rc;
}
}

58
keccak/src/unroll.rs Normal file
View File

@ -0,0 +1,58 @@
#[cfg(not(feature = "no_unroll"))]
#[macro_export]
macro_rules! unroll5 {
($var:ident, $body:block) => {
{ const $var: usize = 0; $body; }
{ const $var: usize = 1; $body; }
{ const $var: usize = 2; $body; }
{ const $var: usize = 3; $body; }
{ const $var: usize = 4; $body; }
};
}
#[cfg(feature = "no_unroll")]
#[macro_export]
macro_rules! unroll5 {
($var:ident, $body:block) => {
for $var in 0..5 $body
}
}
#[cfg(not(feature = "no_unroll"))]
#[macro_export]
macro_rules! unroll24 {
($var: ident, $body: block) => {
{ const $var: usize = 0; $body; }
{ const $var: usize = 1; $body; }
{ const $var: usize = 2; $body; }
{ const $var: usize = 3; $body; }
{ const $var: usize = 4; $body; }
{ const $var: usize = 5; $body; }
{ const $var: usize = 6; $body; }
{ const $var: usize = 7; $body; }
{ const $var: usize = 8; $body; }
{ const $var: usize = 9; $body; }
{ const $var: usize = 10; $body; }
{ const $var: usize = 11; $body; }
{ const $var: usize = 12; $body; }
{ const $var: usize = 13; $body; }
{ const $var: usize = 14; $body; }
{ const $var: usize = 15; $body; }
{ const $var: usize = 16; $body; }
{ const $var: usize = 17; $body; }
{ const $var: usize = 18; $body; }
{ const $var: usize = 19; $body; }
{ const $var: usize = 20; $body; }
{ const $var: usize = 21; $body; }
{ const $var: usize = 22; $body; }
{ const $var: usize = 23; $body; }
};
}
#[cfg(feature = "no_unroll")]
#[macro_export]
macro_rules! unroll24 {
($var:ident, $body:block) => {
for $var in 0..24 $body
}
}

View File

@ -1,8 +0,0 @@
max_width = 80
force_explicit_abi = false
fn_single_line = true
fn_args_density = "Compressed"
match_block_trailing_comma = true
normalize_comments = false
imports_indent = "Block"
where_single_line = true