dcrypt 4.0.0

Rust APIs for classical, post-quantum, and hybrid cryptographic primitives
Documentation
[package]
name = "dcrypt"
version.workspace = true
edition.workspace = true
authors.workspace = true
description.workspace = true
repository.workspace = true
license.workspace = true
readme.workspace = true
categories.workspace = true
keywords.workspace = true

[dependencies]
# Core dependencies (always included)
dcrypt-api = { version = "=4.0.0", path = "crates/api", default-features = false }
dcrypt-common = { version = "=4.0.0", path = "crates/common", default-features = false }
dcrypt-internal = { version = "=4.0.0", path = "crates/internal", default-features = false }
dcrypt-params = { version = "=4.0.0", path = "crates/params" }

# Optional algorithm crates
dcrypt-algorithms = { version = "=4.0.0", path = "crates/algorithms", optional = true, default-features = false }
dcrypt-symmetric = { version = "=4.0.0", path = "crates/symmetric", optional = true, default-features = false }
dcrypt-kem = { version = "=4.0.0", path = "crates/kem", optional = true, default-features = false }
dcrypt-sign = { version = "=4.0.0", path = "crates/sign", optional = true, default-features = false }
dcrypt-pke = { version = "=4.0.0", path = "crates/pke", optional = true, default-features = false }
dcrypt-hybrid = { version = "=4.0.0", path = "crates/hybrid", optional = true, default-features = false }

[features]
# Default includes common traditional algorithms
default = ["std", "traditional"]

# Standard library support
std = [
    "alloc",
    "dcrypt-api/std",
    "dcrypt-common/std",
    "dcrypt-internal/std",
    "dcrypt-algorithms?/std",
    "dcrypt-symmetric?/std",
    "dcrypt-kem?/std",
    "dcrypt-sign?/std",
    "dcrypt-pke?/std",
    "dcrypt-hybrid?/std"
]

# Algorithm categories. Category features activate the facade modules they
# promise, rather than only forwarding flags to dependencies that might not be
# enabled.
traditional = [
    "alloc",
    "algorithms",
    "symmetric",
    "kem",
    "dcrypt-kem/traditional",
    "sign",
    "dcrypt-sign/traditional",
    "pke",
]
post-quantum = [
    "alloc",
    "algorithms",
    "kem",
    "dcrypt-kem/post-quantum",
    "sign",
    "dcrypt-sign/post-quantum",
]
hybrid = ["alloc", "dep:dcrypt-hybrid", "traditional", "post-quantum"]

# Individual components
algorithms = ["alloc", "dep:dcrypt-algorithms"]
symmetric = ["alloc", "dep:dcrypt-symmetric"]
kem = ["alloc", "dep:dcrypt-kem"]
sign = ["alloc", "dep:dcrypt-sign"]
pke = ["alloc", "dep:dcrypt-pke"]

# Other features
alloc = [
    "dcrypt-api/alloc",
    "dcrypt-common/alloc",
    "dcrypt-internal/alloc",
    "dcrypt-algorithms?/alloc",
    "dcrypt-symmetric?/alloc",
    "dcrypt-kem?/alloc",
    "dcrypt-sign?/alloc",
    "dcrypt-pke?/alloc",
    "dcrypt-hybrid?/alloc",
]
full = ["std", "alloc", "traditional", "post-quantum", "hybrid", "algorithms", "symmetric", "kem", "sign", "pke"]

# Workspace configuration
[workspace]
members = [
    "crates/api",
    "crates/common",
    "crates/internal",
    "crates/params",       
    "crates/algorithms", 
    "crates/symmetric",
    "crates/kem",
    "crates/sign",
    "crates/hybrid",
    "crates/pke",
    "crates/utils",
    "tests"
]
exclude = ["fuzz", "verification", "migration/legacy-xchacha20poly1305"]
resolver = "2"

[workspace.package]
version     = "4.0.0"
edition     = "2021"
authors     = ["Heath Ledger"]
description = "Rust APIs for classical, post-quantum, and hybrid cryptographic primitives"
repository  = "https://github.com/ioi-foundation/dcrypt"
license     = "Apache-2.0"
readme      = "README.md"
categories  = ["cryptography", "no-std"]
keywords    = ["cryptography", "post-quantum", "crypto"]

[workspace.dependencies]
rand        = { version = "0.8.6", default-features = false }
rand_chacha = "0.3.1"

[workspace.metadata.release]
# All crates share the same version
shared-version = true

# How to handle version updates for dependencies
# "upgrade" means update all workspace members' versions in lockstep
dependent-version = "upgrade"

# Don't automatically push or tag - we'll do it manually
push = false
tag = false

# Don't publish automatically - we'll use a separate command
publish = false

# Create a single commit for all version updates
consolidate-commits = true

# Commit message template
pre-release-commit-message = "chore: release version {{version}}"

# Sign commits for security (optional - remove if you don't have GPG set up)
sign-commit = false
sign-tag = false

# For the root package specifically
[package.metadata.release]
# The root crate should be published
publish = true

[lints]
workspace = true

[workspace.lints.rust]
unsafe_code = "forbid"