| Crates.io | wsc |
| lib.rs | wsc |
| version | 0.4.1 |
| created_at | 2026-01-08 18:15:48.525936+00 |
| updated_at | 2026-01-08 18:15:48.525936+00 |
| description | WebAssembly Signature Component - WASM signing and verification toolkit |
| homepage | https://github.com/pulseengine/wsc |
| repository | https://github.com/pulseengine/wsc |
| max_upload_size | |
| id | 2030840 |
| size | 945,447 |
Sign in the cloud. Verify anywhere.
A tool and library for signing WebAssembly modules with embedded signatures that can be verified completely offline - perfect for embedded systems, edge devices, and air-gapped environments.
Unlike OCI registry signatures (Cosign) that require network access at verification time, wsc embeds signatures directly in the WASM module. This enables:
| Scenario | Cosign/OCI | wsc |
|---|---|---|
| IoT device with intermittent WiFi | Needs connectivity | Verify offline |
| Industrial controller | Requires registry access | Signature embedded |
| Edge CDN node | Registry latency | Local verification |
| Air-gapped network | Cannot verify | Works offline |
wsc is an enhanced WebAssembly signing toolkit built on the foundation of wasmsign2 by Frank Denis. While maintaining compatibility with the WebAssembly modules signatures proposal, wsc adds production-oriented features:
wsc-component.wasm) and CLI (wsc-cli.wasm) buildswsc is based on wasmsign2 by Frank Denis, a reference implementation of the WebAssembly modules signatures proposal.
We plan to add additional features to support production use cases, including:
MIT License - Original wasmsign2 Copyright (c) 2024 Frank Denis
Unlike typical desktop and mobile applications, WebAssembly binaries do not embed any kind of digital signatures to verify that they come from a trusted source, and haven't been tampered with.
wsc takes an existing WebAssembly module, computes a signature for its content, and stores the signature in a custom section.
The resulting binary remains a standalone, valid WebAssembly module, but signatures can be verified prior to executing it.
wsc implements the WebAssembly modules signatures proposal. The file format is documented in the WebAssembly tool conventions repository.
The proposal, and this implementation, support domain-specific features such as:
wsc is a Rust crate that can be used in other applications.
It is also a CLI tool to perform common operations, whose usage is summarized below.
cargo install wsc-cli
git clone https://github.com/pulseengine/wsc.git
cd wsc
cargo build --release
bazel build //src/cli:wsc
wsc supports keyless signing using Sigstore - sign in CI, verify anywhere:
# Sign in GitHub Actions (or any OIDC-enabled CI)
wsc sign --keyless -i module.wasm -o signed.wasm
This will:
Verify a keyless-signed module - no network required:
# Basic verification (offline)
wsc verify --keyless -i signed.wasm
# With identity constraints
wsc verify --keyless -i signed.wasm \
--cert-identity "user@example.com" \
--cert-oidc-issuer "https://token.actions.githubusercontent.com"
Verification performs:
wsc keygen -k secret.key -K public.key
wsc sign -k secret.key -i module.wasm -o signed.wasm
wsc verify -K public.key -i signed.wasm
wsc show -i module.wasm
# Detach signature to a file
wsc detach -i signed.wasm -o unsigned.wasm -S signature.bin
# Attach signature from a file
wsc attach -i unsigned.wasm -o signed.wasm -S signature.bin
wsc can verify signatures for specific custom sections:
wsc verify -K public.key -i signed.wasm --split "custom_section_regex"
wsc supports OpenSSH-formatted Ed25519 keys:
# Generate SSH key
ssh-keygen -t ed25519 -f key
# Sign module (use --ssh flag)
wsc sign -k key --ssh -i module.wasm -o signed.wasm
# Verify module
wsc verify -K key.pub --ssh -i signed.wasm
Verify using a GitHub user's SSH public keys:
wsc verify --from-github username -i signed.wasm
wsc includes comprehensive Rekor inclusion proof verification:
See docs/checkpoint_security_audit.md for details.
Full Bazel support for hermetic builds:
# BUILD.bazel
load("@rules_rust//rust:defs.bzl", "rust_binary")
rust_binary(
name = "wsc",
srcs = ["//src/cli:wsc"],
)
See MODULE.bazel for dependency configuration.
Build both library and CLI as WebAssembly components:
# Build WIT component library
bazel build //src/component:wsc-component.wasm
# Build WASI CLI binary
bazel build //src/cli:wsc-cli.wasm
wsc is under active development. Core signing/verification and Rekor validation are functional. See open issues for planned enhancements.
MIT License - see LICENSE file for details.