Shared component · Signet Data Trust Network Platform

Signet Forge™

Encrypted Apache Parquet. Read it in the browser. Never uploaded.

Signet Forge is the post-quantum-ready, encrypted-Parquet companion library to Signet Core — a C++20 engine with a WebAssembly build that decodes and decrypts Parquet entirely client-side. It powers per-column encryption across Signet Lake, signing-trace embedding for Signet AI Governance, and tamper-evident columnar audit trails for the platform.

Try it now

In your browser. No upload. No login.

The demo below is the production WebAssembly build, served from the Signet Forge repository's GitHub Pages site. Your files never leave your machine — the decrypt and decode happen entirely client-side.

Heads up · key custody is yours

Your file stays in your browser — but your AES-256 key is yours alone to manage. If you lose it, the file is unrecoverable. That is the crypto-shred guarantee, not a bug. Save the key into a password manager before closing the terminal you generated it in, and make sure the AAD prefix you type into the demo matches the one used at encrypt time exactly. The full safety brief is below the demo.

Demo hosted at https://signetstack.github.io/SIGNET_FORGE/demo/. If the iframe is blocked in your environment, open it in a new tab.

Three things to try

Immediate test scenarios

Concrete proofs you can run today — each one ends in your browser, with no server roundtrip.

01

Encrypt your own CSV — in your browser

Drag a .csv onto the demo. A panel opens, generates a fresh AES-256 key for you (via crypto.getRandomValues), takes an AAD prefix, and the Encrypt & download .parquet button writes an encrypted Parquet straight back to your machine. A one-click Decrypt it here to verify button then re-feeds it through the decryption path with the same key + AAD pre-filled — closing the round trip without leaving the page.

Open the in-browser flow →
02

Decrypt an AES-256 PME file

Already have an encrypted Parquet? Tick Encrypted file (AES-256 PME), paste a footer key (64 hex chars) and optional column key, then drop the file. From there: Download .parquet saves the original bytes (encrypted files stay encrypted — safe to forward), and Download CSV / Download JSON export the decrypted rows. All client-side, no network round-trip.

Open the encrypted-file flow →
03

Open the bundled sample, or bring any .parquet

One drop loads the bundled sample.parquet from the demo, or any Parquet from your machine — schema, row groups and a paged preview render in under a second; nothing leaves your browser.

Open the demo →
Before you encrypt · read this once

Important precautions

Signet Forge gives you real cryptographic guarantees. That cuts both ways: when the system says a file is unrecoverable, it really is. These are the seven things every user should know before encrypting their first file.

!

Generate keys with a CSPRNG, not by hand

Use openssl rand -hex 32 (or your platform's equivalent) for every file. Hand-typed or guessable keys collapse AES-256 to whatever your imagination is — usually a few bits of real entropy.

!

Save the key before you close the terminal

When you run KEY=$(openssl rand -hex 32), that 64-character hex string only exists in your shell's environment. Close the tab without copying it into a password manager (1Password, Bitwarden, pass) and the file becomes permanently unreadable. That is by design — it is the crypto-shred guarantee, not a bug.

!

The AAD prefix must match — character for character

If you encrypted with --aad-prefix "mydata-2026-05-31", you must type that exact string into the demo's AAD field. A capital letter, a missing dash, an extra space — any difference makes the GCM tag fail to verify, and there is no recovery path.

!

Use a trusted device

The demo keeps your file in the browser — no upload, no server, no telemetry — but the device itself still sees the plaintext after decryption. Don't use shared kiosks, active screen-sharing sessions, or machines with cross-device clipboard sync turned on while you paste keys.

!

Never share keys over email, chat or SMS

Treat an AES-256 key the way you'd treat a password: send it through a password-manager share, a Signal / age / GPG-encrypted channel, or a vault — never inline in a message that gets logged, indexed or back-up-synced in plaintext.

!

Public demo is for evaluation; production wants the local build

The hosted demo loads its JS and WebAssembly from this site for convenience. For regulated PII / financial / health data, build the CLI or library locally with -DSIGNET_ENABLE_COMMERCIAL=ON so the entire compile, key-handling and storage surface stays inside your trust boundary.

!

Downloading an encrypted .parquet is just sharing the ciphertext

The Download .parquet button is a passthrough — it writes the exact bytes you uploaded. An encrypted file stays encrypted on disk and is safe to email, attach or upload to shared storage. But sharing the file does not share the key — the recipient still needs the footer key, optional column key, and the same AAD prefix to decrypt. Send those separately, through a different channel.

!

Report vulnerabilities responsibly

Found a real cryptographic or implementation issue? Use the coordinated-disclosure path in SECURITY.md on the Forge repository — please don't open a public issue.

For scripted or batch use — the CLI

Same flow, on the command line

The browser demo above handles single-file, interactive use. For scripted pipelines, batch jobs, or anything you want under version control, the signet_cli binary gives you the same encrypted round trip on the command line.

01

Build the CLI (one time)

cd /path/to/SIGNET_FORGE
cmake --preset release -DSIGNET_ENABLE_COMMERCIAL=ON
cmake --build --preset release --target signet_cli
# binary at build/signet_cli
02

Generate a fresh AES-256 key

KEY=$(openssl rand -hex 32)
echo $KEY     # SAVE THIS to a password manager NOW
03

Convert + encrypt your CSV in one shot

./build/signet_cli convert mydata.csv mydata.parquet \
    --encrypt \
    --footer-key  $KEY \
    --column-key  $KEY \
    --aad-prefix  "mydata-YYYY-MM-DD"
04

Open the file in the demo above

Tick Encrypted file (AES-256 PME), paste $KEY into both the footer and column key fields, type the exact same AAD prefix, then drop the .parquet file. Decryption happens entirely in your browser.
Why the local build: the encryption flags depend on the commercial-tier writer surface in the library, which is off by default for CLI builds. Reconfiguring with -DSIGNET_ENABLE_COMMERCIAL=ON turns it on for your local build only — it does not change the licence of the repository or your obligations under it. See LICENSE_COMMERCIAL on the Forge repository for commercial-use terms. (The hosted WebAssembly demo is already built with the commercial flag — you don't need it for the in-browser flow above.)
What it does

Capabilities

01

Encrypted Apache Parquet

Modular column-level encryption (PME) layered on Apache Parquet — encrypt some columns, leave others in the clear, decrypt with the keys you control.

02

Post-quantum by design

AES-256-GCM today, with a clean migration path to NIST-standardized post-quantum primitives (ML-KEM, ML-DSA) — so records you write today survive the quantum era.

03

Reads in the browser

A WebAssembly build runs the decrypt+decode path entirely client-side: the file never leaves the user's machine — no upload, no server, no telemetry.

04

Zero runtime dependencies

C++20 core, no Apache Arrow or third-party Parquet runtime — every byte that touches your data is in this one repo, auditable end-to-end.

05

MiFID II & EU AI Act aligned

Footer KeyValue metadata carries signing traces, lineage tokens and policy IDs end-to-end — the file is the record of record.

06

Open + commercial dual-licensed

Source-available under the Forge Source-Available License for inspection; commercial terms for production use — see the repo.

Standards & alignment

What it speaks

Apache ParquetAES-256-GCM (PME)ML-KEM · ML-DSA (roadmap)C++20 · zero depsWebAssemblyMiFID II RTS 22EU AI Act
Status, stated honestly
Signet Forge is source-available on GitHub and ships with a Doxygen API reference and a WebAssembly demo, both built and deployed via the repository's CI. The classical encryption suite (AES-256-GCM modular Parquet encryption) is implemented and exercised today; the post-quantum migration path (ML-KEM key wrapping, ML-DSA-signed footers) is on the near-term roadmap. Commercial licensing terms are listed alongside the open source-available licence.
A shared component of the Signet Data Trust Network Platform — built on the same cryptographic foundation as Signet Core, used end-to-end by Signet Lake, AI Governance and Stream.

Encrypted Parquet, in the browser, on a post-quantum path.