obcrypt 0.2.0

Bytes-in/bytes-out cryptographic core of the oboron protocol (a-tier + u-tier schemes, no encoding).
Documentation
[package]
name = "obcrypt"
version.workspace = true
edition.workspace = true
rust-version.workspace = true
license.workspace = true
repository.workspace = true
homepage.workspace = true
documentation.workspace = true
authors.workspace = true
description = "Bytes-in/bytes-out cryptographic core of the oboron protocol (a-tier + u-tier schemes, no encoding)."
keywords = ["encryption", "cryptography", "oboron", "aes", "siv"]
categories = ["cryptography", "no-std"]
readme = "README.md"

[features]
# obcrypt is all-secure (a-tier authenticated, u-tier unauthenticated
# but still real cryptography); there is no unsecure subset, so no
# `secure-schemes` aggregate is needed at this layer. Default enables
# the five production schemes directly.
default = ["aags", "apgs", "aasv", "apsv", "upbc"]

# Individual schemes
aags = ["aes-gcm-siv"]
apgs = ["aes-gcm-siv"]
aasv = ["aes-siv"]
apsv = ["aes-siv"]
upbc = ["aes", "cipher", "cbc"]

# Testing-only schemes (no encryption)
mock = []

[dependencies]
zeroize = { version = "1", features = ["derive"] }
thiserror = "1.0"
aead = { version = "0.5", default-features = false, features = ["alloc"] }
hex.workspace = true

# Conditionally included based on features
aes = { version = "0.8", optional = true }
cipher = { version = "0.4", optional = true }
cbc = { version = "0.1", optional = true }
aes-gcm-siv = { version = "0.11", optional = true }
aes-siv = { version = "0.7", optional = true }

[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
rand = "0.8"

[target.'cfg(target_arch = "wasm32")'.dependencies]
rand = { version = "0.8", features = ["getrandom"] }
getrandom = { version = "0.2", features = ["js"] }

[lib]
name = "obcrypt"
path = "src/lib.rs"
crate-type = ["rlib"]