dcrypt 1.2.3

dcrypt is a pure-Rust, software-only cryptography library providing both classical and post-quantum primitives with a focus on security, hybrid KEMs/signatures, and memory-safe, no-FFI design.
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 = "=1.2.3", path = "crates/api" }
dcrypt-common = { version = "=1.2.3", path = "crates/common" }
dcrypt-internal = { version = "=1.2.3", path = "crates/internal" }
dcrypt-params = { version = "=1.2.3", path = "crates/params" }

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

# Re-export workspace dependencies that users might need
rand = { workspace = true, optional = true }
zeroize = { workspace = true }
subtle = { workspace = true }
serde = { workspace = true, optional = true }
thiserror = { workspace = true, optional = true }

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

# Standard library support
std = [
    "rand?/std",
    "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
traditional = ["dep:dcrypt-algorithms", "dep:dcrypt-symmetric", "dcrypt-kem?/traditional", "dcrypt-sign?/traditional", "dep:dcrypt-pke"]
post-quantum = ["dcrypt-kem?/post-quantum", "dcrypt-sign?/post-quantum"]
hybrid = ["dep:dcrypt-hybrid", "traditional", "post-quantum"]

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

# Other features
alloc = []
serde = ["dep:serde", "dep:thiserror"]
full = ["std", "alloc", "serde", "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"
]
resolver = "2"

[workspace.package]
version     = "1.2.3"
edition     = "2021"
authors     = ["Heath Ledger"]
description = "dcrypt is a pure-Rust, software-only cryptography library providing both classical and post-quantum primitives with a focus on security, hybrid KEMs/signatures, and memory-safe, no-FFI design."
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.5", default-features = false }
rand_chacha = "0.3.1"
zeroize     = { version = "1.8.1", features = ["zeroize_derive"] }
subtle      = { version = "2.6.1", default-features = false }
serde       = { version = "1.0.219", features = ["derive"] }
thiserror   = { version = "1.0.69" }

# Dev dependencies for tests
[dev-dependencies]
criterion = "0.5"
proptest = "1.0"

[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