Gunnar

nordisk/edda

crates/guest-host/Cargo.toml

[package]
name = "guest-host"
version = "0.2.1"
edition = "2021"
rust-version = "1.85"
description = "The reusable mechanics of hosting an untrusted wasm32 guest: CPU fuel + wall-clock + memory ceilings that refuse by name, a detached-CMS signature gate over the module's blake3 digest, a census by digest, and the alloc/result_len/plugin_call calling convention. No product vocabulary — holger and monetize put their own ABI on top."
license = "MIT OR Apache-2.0"
repository = "https://git.gunnar.rs/nordisk/edda"
keywords = ["wasm", "wasmtime", "plugin", "sandbox", "signature"]
categories = ["wasm", "development-tools"]

[features]
default = []
# The runtime. OFF by default so a consumer that only wants the trust policy,
# the limits vocabulary or the digest (a config validator, a signer) carries no
# wasmtime. Everything under `module` needs it.
wasmtime = ["dep:wasmtime"]
# Verify a module's detached CMS signature (`foo.wasm.p7s`) against DER trusted
# roots before it is compiled. Pulls `znippy-common/sign`, the ONE spec-exact
# CMS verifier in the constellation; without it a policy that REQUIRES trust is
# a named refusal (`TrustError::VerifierUnavailable`), never a skipped check.
verify-modules = ["dep:znippy-common", "znippy-common/sign"]

[dependencies]
# ★ 48 is a SECURITY floor, carried over from holger's host (2026-09-19): every
# advisory its deny.toml accepted for wasmtime 27 — four sandbox escapes among
# them — is fixed at or below 48.0.2. Do not lower it.
wasmtime = { version = "49", optional = true, default-features = false, features = ["runtime", "cranelift", "parallel-compilation"] }
# The census names a module by the digest of its bytes — the same bytes the CMS
# signature is checked over. Always on: a census exists in every build.
blake3 = "1"
znippy-common = { version = "0.10.0", optional = true, default-features = false }

[dev-dependencies]
# Hand-written text modules for the bound tests: a `loop {}` and a memory
# bomb. `wat` is what wasmtime parses text modules with.
wat = "1"