Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
65 commits
Select commit Hold shift + click to select a range
55a20e4
refactor: replace LazyLock with OnceLock for CStr statics
romen Feb 18, 2026
477c081
refactor(provider): remove unused data field
romen Feb 18, 2026
3bb2390
refactor: move helpers and macros to separate module
romen Feb 18, 2026
2201a65
refactor(properties): remove quotes from property values
romen Feb 19, 2026
55f5754
refactor(properties): remove x. prefix from qubip.adapter property
romen Feb 19, 2026
ad28b69
feat(helpers): add concat_cstr macro for const CStr composition
romen Feb 19, 2026
4a089de
refactor(adapters): compose PROPERTY_DEFINITION with concat_cstr!
romen Feb 19, 2026
8c14902
feat(provider): add `provider=aurora` to property definitions
romen Feb 19, 2026
cc32473
refactor(properties): rename qubip.adapter to aurora.adapter
romen Feb 20, 2026
d332acc
fix: we must check for NULL before `Box::from_raw`
romen Mar 20, 2026
d9fcfeb
fix(tests/openssl_certs): ensure we actually verify the self-signature
romen Mar 20, 2026
5e51a1b
feat: allow a selection flag of 0 in decoders
ashaindlin Apr 7, 2026
c911907
feat: don't panic on wrong size in load()
ashaindlin Apr 10, 2026
38b3779
chore: fix typos
ashaindlin Apr 10, 2026
128ec35
feat(pqclean): support decoding of `seed` and `both` private key form…
ashaindlin Apr 10, 2026
1da5b17
feat(pqclean): don't panic on unsupported composite private key encod…
ashaindlin Apr 10, 2026
aef28f0
feat(pqclean): re-derive expanded key from seed and ensure it matches…
ashaindlin Apr 21, 2026
d3a3d75
chore(release): bump version to 0.11.0+dev
romen Apr 21, 2026
080d0a3
feat(tests/decode_tests): make decode tests more generic
romen Apr 21, 2026
5c4ec2d
tests(data/v0.10.0): add artifacts for backward-compatibility tests w…
romen Apr 21, 2026
500515c
feat(tests/decode_tests): add backward-compatibility tests for aurora…
romen Apr 21, 2026
a52c413
feat(adapters/mldsa-native): add mldsa-native-rs as a dependency
ashaindlin Feb 19, 2026
a8f8c33
feat(adapters/mldsa-native): add adapter and implement MLDSA44
ashaindlin Feb 19, 2026
50be5e9
feat(config): remove pqclean from default adapters
ashaindlin Feb 20, 2026
f89fcbf
feat(tests): skip difficult-to-satisfy ML-DSA privkey decoding wychep…
ashaindlin Feb 20, 2026
6f58bba
feat(adapters/mldsa-native): cache the public key in the private key …
ashaindlin Feb 24, 2026
1a18f81
fix(docs): reference FIPS 204 tables for ML-DSA const tests
ashaindlin Feb 24, 2026
dbab346
cleanup(adapters/mldsa-native/tests): remove unused import
ashaindlin Feb 24, 2026
78759bd
feat(adapters/mldsa-native): add ML-DSA-65
ashaindlin Feb 24, 2026
cdb0100
feat(adapters/mldsa-native): add ML-DSA-87
ashaindlin Feb 24, 2026
082b454
fix(adapters/pqclean): report correct ed25519 backend in description …
ashaindlin Feb 25, 2026
44d8d54
feat(adapters/common): implement TryFrom<&[u8; N]> for Signature
ashaindlin Feb 25, 2026
d882d51
feat(adapters/mldsa-native): add functions to get seed and seed lengt…
ashaindlin Feb 25, 2026
673473d
refactor(adapters/mldsa-native): factor out a separate decode_seed me…
ashaindlin Feb 25, 2026
126ec5b
feat(adapters/mldsa-native): implement MLDSA44_Ed25519
ashaindlin Feb 25, 2026
f41b83e
feat(adapters/mldsa-native): implement MLDSA65_Ed25519
ashaindlin Feb 26, 2026
aa4fb48
feat: add skip_troublesome_wycheproof feature flag
romen Mar 10, 2026
bb705e8
fix(mldsa_native): we must check for NULL before `Box::from_raw`
romen Mar 20, 2026
44d0277
feat(mldsa_native): allow a selection flag of 0 in decoders
ashaindlin Apr 7, 2026
88c993f
fix(mldsa_native): encode pure MLDSA private keys with correct ASNPri…
ashaindlin Apr 8, 2026
b76c685
feat(mldsa_native): implement decoding of both-seed-and-expanded DER …
ashaindlin Apr 8, 2026
ebeab86
feat(mldsa_native): don't panic on wrong size in load()
ashaindlin Apr 10, 2026
543a85b
feat(mldsa_native): re-derive expanded key from seed and ensure it ma…
ashaindlin Apr 21, 2026
4b2bf9b
test(all_transcoders): make the old list_all_algorithms test specific…
romen Apr 21, 2026
4a46d0e
test(list_all_key_managers): Add new basic test to list provided key …
romen Apr 21, 2026
ac2bb04
fix(mldsa_native/encoders): properly inherit property string from par…
romen Apr 21, 2026
9417fdb
feat(tests): add CLI tests for sign/verify through pkeyutl
romen Mar 21, 2026
ac9adc9
fix(pqclean): enable OSSL_FUNC_SIGNATURE_SIGN/VERIFY in dispatch table
romen Mar 24, 2026
59145a0
fix(rustcrypto): enable OSSL_FUNC_SIGNATURE_SIGN/VERIFY in dispatch t…
romen Apr 22, 2026
085354f
fix(slhdsa_c): enable OSSL_FUNC_SIGNATURE_SIGN/VERIFY in dispatch table
romen Apr 22, 2026
a7c8abc
fix(mldsa_native): enable OSSL_FUNC_SIGNATURE_SIGN/VERIFY in dispatch…
romen Apr 22, 2026
863f336
feat(mldsa_native): add ASN.1 definitions for composite ML-DSA keys
ashaindlin Apr 8, 2026
26781d8
fix(build): ensure build.rs reruns on ASN.1 file changes
romen Apr 28, 2026
9aa769a
test(openssl_decode_aurora_v0_9)!: add backward-compatibility tests f…
romen Apr 21, 2026
38eec3e
feat(mldsa_native): implement v0.9-compatible composite ASN.1 encodings
ashaindlin Apr 23, 2026
f139ed5
feat(pqclean): use new composite ASN.1 definitions
ashaindlin Apr 23, 2026
23f207a
feat(tests): env-based cargo flags for integration test build
romen Apr 28, 2026
904189a
feat(test): test also with pqclean adapter
romen Apr 28, 2026
4a1104e
feat(pqclean): make seed optional in MLDSA and composites
ashaindlin Apr 24, 2026
2602f24
refactor(all adapters): align common decoder and encoder logic across…
romen Apr 28, 2026
a2ba5cf
chore(CHANGELOG): Update CHANGELOG for v0.11.0
romen Apr 28, 2026
ce91d59
docs(readme): update signature schemes and references
romen Apr 28, 2026
d80b79c
test(github): add test-code-pqclean job
romen Apr 28, 2026
f77583c
chore(release): bump version to 0.11.0
romen Apr 28, 2026
7de8630
chore(release): bump version to 0.11.1+dev
romen Apr 28, 2026
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
49 changes: 48 additions & 1 deletion .github/workflows/rust-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,10 @@ jobs:
- run: cargo fmt -- --check
test-code:
runs-on: ubuntu-latest
container: "nisectuni/qubip-ossl-rust-runner:latest-nix"
permissions:
contents: read
statuses: read
container: "nisectuni/qubip-ossl-rust-runner:latest-nix"
steps:
- name: ⤵️ Check out code from GitHub
uses: actions/checkout@v1
Expand All @@ -41,6 +41,53 @@ jobs:
run: openssl version -a
- name: "Execute cargo test"
run: cargo test
test-code-pqclean:
runs-on: ubuntu-latest
container: "nisectuni/qubip-ossl-rust-runner:latest-nix"
defaults:
run:
shell: bash
permissions:
contents: read
statuses: read
steps:
- name: ⤵️ Check out code from GitHub
uses: actions/checkout@v1
- name: "Check rustc version"
run: rustc --version
- name: "Check cargo version"
run: cargo --version
- name: "Check openssl version"
run: openssl version -a
- name: "Install jaq to query Cargo.toml"
run: CARGO_INSTALL_ROOT=/ cargo install jaq
- name: "Execute cargo test selecting pqclean"
run: |
QUERY='.features.default - ["default_adapters"] + .features.default_adapters - ["mldsa_native_adapter"] + ["pqclean_adapter"] | join(",")'
TEST_FEATURES="$(jaq -r "$QUERY" Cargo.toml)"
# We must set TEST_NO_DEFAULT_FEATURES and TEST_FEATURES as inherited
# environment variables when running `cargo test`.
# Without this, the cdylib may be built with a different feature set than
# the one used for the tests themselves.
#
# Integration tests (the ones in `/tests/`) use a custom setup that invokes
# `cargo build` at the beginning of their execution to ensure the aurora
# cdylib is up-to-date.
#
# However, Cargo does not propagate the CLI flags of `cargo test` (such as
# `--no-default-features` and `--features=...`) to subprocesses.
# As a result, when the test binaries run and their `setup()` executes,
# this feature configuration is no longer visible.
# Consequently, the `cargo build` invoked from within the integration tests
# would run with default features enabled unless we explicitly forward the
# desired configuration via environment variables.
#
# These environment variables MUST be kept in sync with the `cargo test`
# CLI arguments.
# Since Cargo does not propagate feature flags to subprocesses, this manual
# forwarding is required to ensure the inner `cargo build` uses the same
# feature configuration.
TEST_NO_DEFAULT_FEATURES=1 TEST_FEATURES="$TEST_FEATURES" cargo test --no-fail-fast --no-default-features --features="${TEST_FEATURES}"
just-list:
runs-on: ubuntu-latest
permissions:
Expand Down
32 changes: 32 additions & 0 deletions .gitlab-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,38 @@ test-code:
#- cargo install cargo-tarpaulin
#- cargo tarpaulin --ignore-tests

test-code-pqclean:
stage: test
script:
#- CARGO_INSTALL_ROOT=/ cargo install cargo-nextest --version 0.9.100 --locked
- CARGO_INSTALL_ROOT=/ cargo install jaq
- QUERY='.features.default - ["default_adapters"] + .features.default_adapters - ["mldsa_native_adapter"] + ["pqclean_adapter"] | join(",")'
- TEST_FEATURES="$(jaq -r "$QUERY" Cargo.toml)"
- echo "TEST_FEATURES=\"${TEST_FEATURES}\"" >&2
# We must set TEST_NO_DEFAULT_FEATURES and TEST_FEATURES as inherited
# environment variables when running `cargo test`.
# Without this, the cdylib may be built with a different feature set than
# the one used for the tests themselves.
#
# Integration tests (the ones in `/tests/`) use a custom setup that invokes
# `cargo build` at the beginning of their execution to ensure the aurora
# cdylib is up-to-date.
#
# However, Cargo does not propagate the CLI flags of `cargo test` (such as
# `--no-default-features` and `--features=...`) to subprocesses.
# As a result, when the test binaries run and their `setup()` executes,
# this feature configuration is no longer visible.
# Consequently, the `cargo build` invoked from within the integration tests
# would run with default features enabled unless we explicitly forward the
# desired configuration via environment variables.
#
# These environment variables MUST be kept in sync with the `cargo test`
# CLI arguments.
# Since Cargo does not propagate feature flags to subprocesses, this manual
# forwarding is required to ensure the inner `cargo build` uses the same
# feature configuration.
- TEST_NO_DEFAULT_FEATURES=1 TEST_FEATURES="$TEST_FEATURES" cargo test --no-fail-fast --no-default-features --features="${TEST_FEATURES}"

test-doc:
stage: test
script:
Expand Down
65 changes: 65 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,70 @@

All notable changes to this project will be documented in this file.

## [0.11.0] - 2026-04-28

### ⚠ BREAKING CHANGES

- *(propquery)* `provider=aurora` is now set on all algorithms
- *(propquery)* `x.author=QUBIP` instead of `x.author='QUBIP'`
- *(propquery)* `aurora.adapter=<adapter>` instead of `x.qubip.adapter='<adapter>'`

### 🚀 Features

- *(helpers)* Add concat_cstr macro for const CStr composition
- Allow a selection flag of 0 in decoders
- Don't panic on wrong size in load()
- *(pqclean)* Support decoding of `seed` and `both` private key formats for pure ML-DSA
- *(pqclean)* Don't panic on unsupported composite private key encodings
- *(pqclean)* Re-derive expanded key from seed and ensure it matches the decoded one
- *(provider)* Add new mldsa-native-rs adapter
- *(provider)* Use mldsa_native instead of pqclean among default adapters
- *(adapters/common)* Implement TryFrom<&[u8; N]> for Signature
- *(mldsa_native)* Implement decoding of both-seed-and-expanded DER private key format for pure MLDSA
- *(mldsa_native)* Re-derive expanded key from seed and ensure it matches the decoded one
- *(mldsa_native, pqclean)* Add ASN.1 definitions for composite ML-DSA keys
- *(mldsa_native)* Implement v0.9-compatible composite ASN.1 encodings
- *(pqclean)* Make seed optional in MLDSA and composites
- *(pqclean)* Enable OSSL_FUNC_SIGNATURE_SIGN/VERIFY in dispatch table
- *(rustcrypto)* Enable OSSL_FUNC_SIGNATURE_SIGN/VERIFY in dispatch table
- *(slhdsa_c)* Enable OSSL_FUNC_SIGNATURE_SIGN/VERIFY in dispatch table
- *(mldsa_native)* Enable OSSL_FUNC_SIGNATURE_SIGN/VERIFY in dispatch table

### 🐛 Bug Fixes

- We must check for NULL before `Box::from_raw`
- *(docs)* Reference FIPS 204 tables for ML-DSA const tests
- *(adapters/pqclean)* Report correct ed25519 backend in description string
- *(mldsa_native)* Encode pure MLDSA private keys with correct ASNPrivateKey variant
- *(build)* Ensure build.rs reruns on ASN.1 file changes

### 🚜 Refactor

- Replace LazyLock with OnceLock for CStr statics
- *(provider)* Remove unused data field
- Move helpers and macros to separate module
- *(provider)* Add `provider=aurora` to property definitions
- *(adapters)* Inherit property strings from parent modules
- *(properties)* Remove quotes from property values
- *(properties)* Remove x. prefix from qubip.adapter property
- *(adapters)* Compose PROPERTY_DEFINITION with concat_cstr!
- *(properties)* Rename qubip.adapter to aurora.adapter
- *(all adapters)* Align common decoder and encoder logic across adapters

### 🧪 Testing

- *(openssl_certs)* Ensure we actually verify the self-signature
- Optionally skip difficult-to-satisfy ML-DSA privkey decoding wycheproof tests
- Add CLI tests for sign/verify through pkeyutl
- Make decode tests more generic
- Add backward-compatibility tests for aurora v0.10.0 artifacts
- Make the old list_all_algorithms test specific for transcoders
- Add new basic test to list provided key managers
- Add backward-compatibility tests for aurora v0.9.0 artifacts
- Env-based cargo flags for integration test build
- Test also with (non-default) pqclean adapter


## [0.10.0] - 2025-12-17

### ⚠ BREAKING CHANGES
Expand Down Expand Up @@ -490,6 +554,7 @@ All notable changes to this project will be documented in this file.

<!-- generated by git-cliff -->

[0.11.0]: https://github.com/QUBIP/aurora/compare/v0.10.0...v0.11.0
[0.10.0]: https://github.com/QUBIP/aurora/compare/v0.9.0...v0.10.0
[0.9.0]: https://github.com/QUBIP/aurora/compare/v0.8.5...v0.9.0
[0.8.5]: https://github.com/QUBIP/aurora/compare/v0.8.4...v0.8.5
Expand Down
42 changes: 32 additions & 10 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 15 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
[package]
name = "qubip_aurora"
version = "0.10.1+dev"
version = "0.11.1+dev"
edition = "2021"
rust-version = "1.85"
description = "A framework to build OpenSSL Providers tailored for the transition to post-quantum cryptography"
license = "Apache-2.0"
repository = "https://github.com/QUBIP/aurora"
Expand All @@ -21,11 +22,12 @@ default = [
]
default_adapters = [
"libcrux_adapter",
"pqclean_adapter",
"rustcrypto_adapter",
"slhdsa_c_adapter",
"mldsa_native_adapter",
]
env_logger = ["dep:env_logger"]
skip_troublesome_wycheproof = []
export = []

# One (and not more than one!) of the _draft_N features must be enabled to support `_composite_mldsa_eddsa`!
Expand Down Expand Up @@ -59,6 +61,15 @@ slhdsa_c_adapter = [
"_transcoders_deps",
"_slhdsa",
]
mldsa_native_adapter = [
"dep:ed25519-dalek",
"dep:mldsa-native-rs",
"dep:ml-dsa",
"dep:sha2",
"_transcoders_deps",
"_mldsa",
"_composite_mldsa_eddsa",
]

# This feature is _private_: it collects all the dependecies for transcoders
_transcoders_deps = ["dep:pem", "dep:pkcs8", "dep:rasn"]
Expand Down Expand Up @@ -87,8 +98,10 @@ libcrux-kem = { version = "0.0.2-alpha.3", optional = true }
slhdsa-c-rs = { version = "0.0.3", optional = true }
pqcrypto-mldsa = { version = "0.1.0", optional = true }
pqcrypto-traits = { version = "0.3.5", optional = true }
mldsa-native-rs = { version = "0.0.1-alpha.4", optional = true }
sha2 = { version = "0.10.9", optional = true }
itertools = "0.14.0"
constcat = "0.6.1"

[build-dependencies]
rasn-compiler = "0.11.0"
Expand Down
Loading