[package]
name = "rand_aes"
description = "AES based pseudo-random number generator"
authors = ["Nils Hasenbanck <nils@hasenbanck.de>"]
keywords = ["rand", "random", "no-std", "aes"]
categories = ["algorithms", "no-std"]
license = "Apache-2.0"
readme = "README.md"
documentation = "https://docs.rs/rand_aes"
repository = "https://github.com/hasenbanck/rand_aes"
version = "0.2.0"
edition = "2021"
rust-version = "1.80"

[features]
default = ["std", "tls", "getrandom", "rand_core"]
# Used for TLS and runtime target feature detection.
std = []
# Activates the thread local functionality (defaults to the AES-128, 64-bit counter version).
tls = ["std"]
# Uses the AES-128, 128-bit counter version for the TLS instance.
tls_aes128_ctr128 = []
# Uses the AES-256, 64-bit counter version for the TLS instance.
tls_aes256_ctr64 = []
# Uses the AES-256, 128-bit counter version for the TLS instance.
tls_aes256_ctr128 = []
# Enables support for experimental RISC-V vector cryptography extension. Please read the README.md.
experimental_riscv = []

### The following features are only used internally and are unstable ###
# Forces the compiler to enable the runtime detection.
force_runtime_detection = []
# Forces the compiler to enable the software backend.
force_software = []
# Enables some functionality used for the verification executable used in CI.
verification = ["std"]

[dependencies]
# Implements the `CoreRng` and `SeedableRng` traits.
rand_core = { version = "0.6", optional = true }
# Provides seeding from the OS entropy source.
getrandom = { version = "0.2", optional = true }

[dev-dependencies]
criterion = { version = "0.5", features = ["html_reports"] }
hex-literal = "0.4"
paste = "1"
rand_chacha = "0.3"
rand_pcg = "0.3"

[profile.bench]
opt-level = 3
codegen-units = 1
lto = "fat"
strip = true

[[bench]]
name = "rng"
harness = false

[package.metadata.docs.rs]
features = ["std", "tls", "getrandom", "rand_core"]
rustdoc-args = ["--cfg", "docsrs"]

# We have the verification binary as a member to use the same target folder.
# But we then exclude it, because it would otherwise polute the tests with the
# 'verification' feature, and we wouldn't be able to use "cargo test --workspace"
# for example.
[workspace]
members = [
    "verification",
]
exclude = ["verification"]
