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
10 changes: 10 additions & 0 deletions .changes/checksum-diagnostics.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
"rscrypto" = "minor"
---

Reduce CRC-32 and CRC-64 selection diagnostics to the polynomial, input length, architecture,
selection reason, effective force setting, and selected kernel. Remove obsolete policy thresholds,
stream counts, capability flags, and placeholder values that no longer described active dispatch.
Remove the unused `SelectionReason::BelowSmallThreshold` and `BelowSimdThreshold` variants.
The numeric discriminants of the remaining selection reasons change.
Checksum computation and backend selection are unchanged.
5 changes: 4 additions & 1 deletion .changes/docs-cleanup.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,7 @@
"rscrypto" = "patch"
---

Consolidate user documentation, migration guidance, and README assets.
Remove the migration guide and broad API tours. Keep current API contracts, feature selection,
secret ownership, and focused executable examples in their owning documentation.
Correct platform coverage and the limits of retained evidence.
Update installation examples for v0.10 and remove temporary development-version notes.
9 changes: 9 additions & 0 deletions .changes/ecdsa-secret-selection.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
---
"rscrypto" = "patch"
---

Preserve masked ECDSA point selection on AArch64 and Windows
and masked secret selection in portable P-256.
Use fixed-bound ECDSA table traversal
and retain unconditional RISC-V generator-table loads under LLVM optimization without changing
signature semantics.
5 changes: 0 additions & 5 deletions .changes/edwards-msrv-build.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changes/examples-workflows.md

This file was deleted.

8 changes: 6 additions & 2 deletions .changes/fallible-ecdsa-secret-owners.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
---
"rscrypto" = "patch"
"rscrypto" = "minor"
---

Add fallible blinded P-256/P-384 signing and public derivation, plus zero-copy and in-place construction for rscrypto-owned secret buffers and UTF-8 strings.
Expose fallible P-256/P-384 blinded signing and public-key derivation with caller-provided entropy.
Remove `public_key_blinded` and `try_sign_blinded`; the supported entry points are
`try_public_key_blinded_with` and `try_sign_blinded_with`, which report entropy failure before private arithmetic.
Add direct-fill constructors for SecretBytes and SecretVec,
plus allocation-preserving ownership transfer from Vec and String.
8 changes: 8 additions & 0 deletions .changes/feature-target-builds.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
"rscrypto" = "patch"
---

Restore Rust 1.91 Ed25519 and X25519 builds on x86-64 Linux when assembly owns fixed-base dispatch,
and keep standalone AEAD features lint-clean on Linux.
Exclude SIMD backends from scalar WebAssembly hash, AEAD,
and Argon2 dispatch when SIMD128 is disabled.
14 changes: 14 additions & 0 deletions .changes/internal-evidence-boundary.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
---
"rscrypto" = "minor"
---

Limit ordinary `diag` builds to capability and backend-selection introspection. Remove benchmark,
forced-kernel, constant-time, zeroization, and component operations from ordinary public module paths,
re-exports, and associated methods across AEADs, MACs, KDFs, password hashing, signatures, key agreement,
RSA, ML-KEM, and cryptographic hashes. This includes RSA seeded diagnostic encryption methods,
BLAKE3 diagnostic selectors, the SHA-256 benchmark compression helper, and the diagnostic-only
`Argon2Error::BackendUnavailable` variant. Removing that variant changes the numeric discriminant of
`VerificationLimitTooLow` in ordinary `diag` builds with `phc-strings`.
Repository evidence tools retain explicit internal access. Internal PBKDF2 verification probes exercise
the primitive instead of rejecting their fixed parameters through the application password policy.
Application cryptographic operations are unchanged by this boundary cleanup.
5 changes: 0 additions & 5 deletions .changes/keep-aarch64-ecdsa-point-e959.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changes/keep-portable-p-256-4870.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changes/keep-standalone-aead-feature-c4b6.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changes/markdown-accuracy.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changes/preserve-unconditional-risc-v-1146.md

This file was deleted.

5 changes: 5 additions & 0 deletions .changes/release-lockfiles.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"rscrypto" = "patch"
---

Synchronize standalone fuzz and evidence-tool lockfiles with the rscrypto version during release preparation.
7 changes: 7 additions & 0 deletions .changes/remove-unbounded-pbkdf2-verification.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
"rscrypto" = "minor"
---

Remove `verify_with_policy` and `verify_password_with_policy` from PBKDF2-SHA256 and PBKDF2-SHA512.
Explicit password policies use `verify_with_policy_bounded` and `verify_password_with_policy_bounded`,
which require an upper iteration limit. Default password verification and explicit primitive operations remain.
File renamed without changes.
5 changes: 0 additions & 5 deletions .changes/wasm-scalar-artifacts.md

This file was deleted.

45 changes: 45 additions & 0 deletions .config/rail.toml
Original file line number Diff line number Diff line change
Expand Up @@ -32,3 +32,48 @@ msrv_policy = { mode = "disabled" } # Cargo.toml owns the declared package MSRV.
# Cargo Rail 0.25 cannot distinguish expected `compile_fail` doctest invocations from compiler failures.
enabled = false
consumer_scope = "open" # Published library: external consumers remain part of the visibility boundary.

[release]
# Keep standalone fuzz and evidence-tool lockfiles on the released package version.
auxiliary_cargo_manifests = [
"fuzz-packages/aead-aegis256/Cargo.toml",
"fuzz-packages/aead-aes-siv-cmac256/Cargo.toml",
"fuzz-packages/aead-aes128gcm/Cargo.toml",
"fuzz-packages/aead-aes128gcmsiv/Cargo.toml",
"fuzz-packages/aead-aes256gcm/Cargo.toml",
"fuzz-packages/aead-aes256gcmsiv/Cargo.toml",
"fuzz-packages/aead-ascon128/Cargo.toml",
"fuzz-packages/aead-chacha20poly1305/Cargo.toml",
"fuzz-packages/aead-header-protection/Cargo.toml",
"fuzz-packages/aead-nonce-counter/Cargo.toml",
"fuzz-packages/aead-xchacha20poly1305/Cargo.toml",
"fuzz-packages/auth-argon2/Cargo.toml",
"fuzz-packages/auth-ed25519/Cargo.toml",
"fuzz-packages/auth-hkdf/Cargo.toml",
"fuzz-packages/auth-hmac/Cargo.toml",
"fuzz-packages/auth-kmac256/Cargo.toml",
"fuzz-packages/auth-p256-ecdh/Cargo.toml",
"fuzz-packages/auth-pbkdf2/Cargo.toml",
"fuzz-packages/auth-phc/Cargo.toml",
"fuzz-packages/auth-scrypt/Cargo.toml",
"fuzz-packages/auth-x25519/Cargo.toml",
"fuzz-packages/checksums-crc16/Cargo.toml",
"fuzz-packages/checksums-crc24/Cargo.toml",
"fuzz-packages/checksums-crc32/Cargo.toml",
"fuzz-packages/checksums-crc64/Cargo.toml",
"fuzz-packages/fast-rapidhash/Cargo.toml",
"fuzz-packages/fast-xxh3/Cargo.toml",
"fuzz-packages/hash-ascon/Cargo.toml",
"fuzz-packages/hash-blake2/Cargo.toml",
"fuzz-packages/hash-blake3/Cargo.toml",
"fuzz-packages/hash-sha2/Cargo.toml",
"fuzz-packages/hash-sha3/Cargo.toml",
"fuzz-packages/hash-websocket-sha1/Cargo.toml",
"fuzz-packages/surface-hex-parse/Cargo.toml",
"fuzz-packages/traits-io/Cargo.toml",
"fuzz/Cargo.toml",
"tools/ct-binsec-harness/Cargo.toml",
"tools/ct-dudect/Cargo.toml",
"tools/ct-harness/Cargo.toml",
"tools/wasm-runtime-vectors/Cargo.toml",
]
2 changes: 1 addition & 1 deletion .config/tooling.toml
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ nightly-components = ["miri", "rust-src"]
packages = ["build-essential", "ca-certificates", "curl", "git", "python3"]

[ci-ct]
cargo = ["just"]
cargo = ["just", "cargo-nextest"]
components = ["llvm-tools"]
packages = ["build-essential", "ca-certificates", "curl", "git", "python3"]

Expand Down
26 changes: 11 additions & 15 deletions .github/runs-on.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# AWS runner profiles. Public repositories resolve this catalog from the default branch.
# Workflows reference these names; other providers keep their own labels.
# AWS runner profiles. Keep sizing here; workflows select names without shape overrides.
# Public repositories resolve this catalog from the default branch.
runners:
plan:
family: [c7a.large, c7i.large, c8a.large, c8i.large]
Expand All @@ -8,14 +8,14 @@ runners:
spot: price-capacity-optimized
volume: 40gb:gp3
miri:
family: [c7a.xlarge, c7i.xlarge, c8a.xlarge, c8i.xlarge]
cpu: 4
family: [c7a.large, c8a.large]
cpu: 2
image: ubuntu24-minimal-x64
spot: price-capacity-optimized
volume: 150gb:gp3
package:
family: [c7a.2xlarge, c7i.2xlarge, c8a.2xlarge, c8i.2xlarge]
cpu: 8
family: [c7a.xlarge, c7i.xlarge, c8a.xlarge, c8i.xlarge]
cpu: 4
image: ubuntu24-minimal-x64
spot: price-capacity-optimized
volume: 100gb:gp3
Expand All @@ -25,12 +25,6 @@ runners:
image: ubuntu24-minimal-x64
spot: price-capacity-optimized
volume: 150gb:gp3
cross-build:
family: [c7a.8xlarge, c7i.8xlarge, c8a.8xlarge, c8i.8xlarge]
cpu: 32
image: ubuntu24-minimal-x64
spot: price-capacity-optimized
volume: 150gb:gp3
ci-cross-build:
family: [c7a.4xlarge, c7i.4xlarge, c8a.4xlarge, c8i.4xlarge]
cpu: 16
Expand Down Expand Up @@ -62,11 +56,12 @@ runners:
spot: price-capacity-optimized
volume: 150gb:gp3
x86_64-win:
family: [c7a.4xlarge, c7i.4xlarge, c8a.4xlarge, c8i.4xlarge]
cpu: 16
family: [c7a.2xlarge, c8a.2xlarge]
cpu: 8
image: windows25-full-x64
spot: price-capacity-optimized
volume: 200gb:gp3
# Eight concurrent fuzz targets need eight physical cores, including on x86.
fuzz-x86_64-linux:
family: [c7a.2xlarge, c8a.2xlarge]
cpu: 8
Expand All @@ -79,6 +74,7 @@ runners:
image: ubuntu24-minimal-arm64
spot: price-capacity-optimized
volume: 150gb:gp3
# Fixed, non-Flex, On-Demand CT hardware; sized independently of benchmarks.
ct-x86_64-linux-intel:
family: [c8i.2xlarge]
cpu: 8
Expand All @@ -97,7 +93,7 @@ runners:
image: ubuntu24-minimal-arm64
spot: false
volume: 100gb:gp3
# Fixed, non-Flex, On-Demand hardware for timing and benchmark evidence.
# Fixed benchmark hardware preserves the existing measurement baseline.
measure-x86_64-linux-intel:
family: [c8i.2xlarge]
cpu: 8
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/bench.yml
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ jobs:
needs: plan
if: needs.plan.outputs.cross == 'true'
name: Prepare ${{ matrix.target }} benchmarks
runs-on: runs-on=${{ github.run_id }}/runner=cross-build/env=production
runs-on: runs-on=${{ github.run_id }}-${{ matrix.target }}/runner=bench-cross-build/env=production
timeout-minutes: 120
strategy:
fail-fast: true
Expand Down
7 changes: 5 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ defaults:
jobs:
cross-build:
name: Prepare ${{ matrix.target }} tests
runs-on: runs-on=${{ github.run_id }}/runner=cross-build/env=production
runs-on: runs-on=${{ github.run_id }}-${{ matrix.target }}/runner=ci-cross-build/env=production
timeout-minutes: 45
strategy:
fail-fast: true
Expand Down Expand Up @@ -59,7 +59,7 @@ jobs:
matrix:
include:
- platform: compatibility
runner: runs-on=${{ github.run_id }}/runner=cross-build/env=production
runner: runs-on=${{ github.run_id }}/runner=compatibility/env=production
timeout: 60
- platform: package
runner: runs-on=${{ github.run_id }}/runner=package/env=production
Expand Down Expand Up @@ -109,6 +109,7 @@ jobs:
just ci-check
just test --all --release
just test --all --release --portable
if [[ "$PLATFORM" != x86_64-linux ]]; then just test-evidence; fi
if [[ "$PLATFORM" == x86_64-linux || "$PLATFORM" == aarch64-linux ]]; then just test-musl; fi
git diff --exit-code HEAD

Expand Down Expand Up @@ -169,5 +170,7 @@ jobs:
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
just test --all --release --portable
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
just test-evidence
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
git diff --exit-code HEAD
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
6 changes: 2 additions & 4 deletions .github/workflows/ct.yml
Original file line number Diff line number Diff line change
Expand Up @@ -84,8 +84,7 @@ jobs:

select:
if: ${{ !inputs.replay_p384 }}
# Public-repository named runners resolve from main, not this workflow's ref.
runs-on: runs-on=${{ github.run_id }}/cpu=2/family=c7a.large+c7i.large+c8a.large+c8i.large/image=ubuntu24-minimal-x64/spot=price-capacity-optimized/volume=40gb:gp3/env=production
runs-on: runs-on=${{ github.run_id }}/runner=plan/env=production
timeout-minutes: 5
outputs:
matrix: ${{ steps.select.outputs.matrix }}
Expand All @@ -101,7 +100,7 @@ jobs:
cross-build:
needs: select
if: needs.select.outputs.cross == 'true'
runs-on: runs-on=${{ github.run_id }}-${{ matrix.target }}/cpu=32/family=c7a.8xlarge+c7i.8xlarge+c8a.8xlarge+c8i.8xlarge/image=ubuntu24-minimal-x64/spot=price-capacity-optimized/volume=150gb:gp3/env=production
runs-on: runs-on=${{ github.run_id }}-${{ matrix.target }}/runner=ct-cross-build/env=production
timeout-minutes: 45
name: Prepare ${{ matrix.target }} CT
strategy:
Expand Down Expand Up @@ -185,6 +184,5 @@ jobs:
uses: "actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a" # v7.0.1
with:
path: target/ct-${{ matrix.platform }}-full.tar.gz
archive: false
if-no-files-found: warn
retention-days: 7
2 changes: 1 addition & 1 deletion .github/workflows/fuzz.yml
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ jobs:
include:
- platform: x86_64-linux
task: miri
runs-on: runs-on=${{ github.run_id }}/runner=${{ matrix.task == 'miri' && 'miri' || matrix.platform }}/env=production
runs-on: runs-on=${{ github.run_id }}/runner=${{ matrix.task == 'miri' && 'miri' || format('fuzz-{0}', matrix.platform) }}/env=production
timeout-minutes: ${{ (matrix.task == 'miri' || github.event_name == 'pull_request') && 60 || 90 }}
steps:
- uses: "actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1" # v7.0.1
Expand Down
Loading
Loading