Skip to content

Commit 064595c

Browse files
docs(site): add Download .parquet to test card + ciphertext-sharing precaution
The third "Things to try" card now lists all three exports the demo offers — .parquet (passthrough), CSV, JSON — and explains the distinction (".parquet stays encrypted; CSV / JSON are decrypted"). The safety brief gains an eighth card: "Downloading an encrypted .parquet is just sharing the ciphertext." Forwarding the file is safe; forwarding the key alongside it (same email, same chat) defeats the encryption. The card spells out that the key, column key and AAD prefix must travel through a different channel.>
1 parent 2aa288b commit 064595c

2 files changed

Lines changed: 5 additions & 3 deletions

File tree

assets/build_site.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -748,7 +748,7 @@ def _compline(nm, ic, ds):
748748
forge_tests = [
749749
("Open the bundled sample", "One click loads <code>sample.parquet</code> from the demo bundle so you can verify the round-trip path without leaving the page.", "Open the demo →", forge_demo_url),
750750
("Bring your own .parquet", "Drag a Parquet file from your machine onto the drop zone — schema, row groups and a paged preview render in under a second; nothing leaves your browser.", "Try it →", forge_demo_url),
751-
("Decrypt an AES-256 PME file", "Tick <em>Encrypted file (AES-256 PME)</em>, paste a footer key (64 hex chars) and an optional column key, then drop the file — the demo decrypts client-side and reveals the data only if your keys are correct.", "Open the encrypted-file flow →", forge_demo_url),
751+
("Decrypt an AES-256 PME file", "Tick <em>Encrypted file (AES-256 PME)</em>, paste a footer key (64 hex chars) and an optional column key, then drop the file — the demo decrypts client-side and reveals the data only if your keys are correct. From there: <strong>Download .parquet</strong> saves the original bytes (encrypted files stay encrypted — safe to forward), and <strong>Download CSV</strong> / <strong>Download JSON</strong> export the decrypted rows. All three are client-side, no network round-trip.", "Open the encrypted-file flow →", forge_demo_url),
752752
]
753753
# Precautions surfaced before encryption — strong-encryption tools delete data
754754
# safely on purpose. Users need to know what they own (the key) and what the
@@ -766,6 +766,8 @@ def _compline(nm, ic, ds):
766766
"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."),
767767
("Public demo is for evaluation; production wants the local build",
768768
"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 <code>-DSIGNET_ENABLE_COMMERCIAL=ON</code> so the entire compile, key-handling and storage surface stays inside your trust boundary."),
769+
("Downloading an encrypted .parquet is just sharing the ciphertext",
770+
"The <strong>Download .parquet</strong> button is a passthrough — it writes the exact bytes you uploaded. An encrypted file <em>stays</em> encrypted on disk and is safe to email, attach or upload to shared storage. But sharing the file does <em>not</em> 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."),
769771
("Report vulnerabilities responsibly",
770772
f'Found a real cryptographic or implementation issue? Use the coordinated-disclosure path in <a href="{forge_repo_url}/blob/main/SECURITY.md" target="_blank" rel="noopener">SECURITY.md</a> on the Forge repository — please don\'t open a public issue.'),
771773
]

website/signet-forge.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,12 @@ <h1>Signet Forge™</h1>
4747
</div></section>
4848

4949
<section><div class="wrap"><div class="sec-head"><div class="kick">Three things to try</div><h2>Immediate test scenarios</h2><p class="lead">Concrete proofs you can run today — each one ends in your browser, with no server roundtrip.</p></div>
50-
<div class="grid g3"><div class="cap"><div class="dot">01</div><h4>Open the bundled sample</h4><p>One click loads <code>sample.parquet</code> from the demo bundle so you can verify the round-trip path without leaving the page.</p><a class="btn btn-ghost" href="https://signetstack.github.io/SIGNET_FORGE/demo/" target="_blank" rel="noopener" style="margin-top:12px">Open the demo →</a></div><div class="cap"><div class="dot">02</div><h4>Bring your own .parquet</h4><p>Drag a Parquet file from your machine onto the drop zone — schema, row groups and a paged preview render in under a second; nothing leaves your browser.</p><a class="btn btn-ghost" href="https://signetstack.github.io/SIGNET_FORGE/demo/" target="_blank" rel="noopener" style="margin-top:12px">Try it →</a></div><div class="cap"><div class="dot">03</div><h4>Decrypt an AES-256 PME file</h4><p>Tick <em>Encrypted file (AES-256 PME)</em>, paste a footer key (64 hex chars) and an optional column key, then drop the file — the demo decrypts client-side and reveals the data only if your keys are correct.</p><a class="btn btn-ghost" href="https://signetstack.github.io/SIGNET_FORGE/demo/" target="_blank" rel="noopener" style="margin-top:12px">Open the encrypted-file flow →</a></div></div></div></section>
50+
<div class="grid g3"><div class="cap"><div class="dot">01</div><h4>Open the bundled sample</h4><p>One click loads <code>sample.parquet</code> from the demo bundle so you can verify the round-trip path without leaving the page.</p><a class="btn btn-ghost" href="https://signetstack.github.io/SIGNET_FORGE/demo/" target="_blank" rel="noopener" style="margin-top:12px">Open the demo →</a></div><div class="cap"><div class="dot">02</div><h4>Bring your own .parquet</h4><p>Drag a Parquet file from your machine onto the drop zone — schema, row groups and a paged preview render in under a second; nothing leaves your browser.</p><a class="btn btn-ghost" href="https://signetstack.github.io/SIGNET_FORGE/demo/" target="_blank" rel="noopener" style="margin-top:12px">Try it →</a></div><div class="cap"><div class="dot">03</div><h4>Decrypt an AES-256 PME file</h4><p>Tick <em>Encrypted file (AES-256 PME)</em>, paste a footer key (64 hex chars) and an optional column key, then drop the file — the demo decrypts client-side and reveals the data only if your keys are correct. From there: <strong>Download .parquet</strong> saves the original bytes (encrypted files stay encrypted — safe to forward), and <strong>Download CSV</strong> / <strong>Download JSON</strong> export the decrypted rows. All three are client-side, no network round-trip.</p><a class="btn btn-ghost" href="https://signetstack.github.io/SIGNET_FORGE/demo/" target="_blank" rel="noopener" style="margin-top:12px">Open the encrypted-file flow →</a></div></div></div></section>
5151

5252
<section class="band"><div class="wrap">
5353
<div class="sec-head"><div class="kick" style="color:#F59E0B">Before you encrypt · read this once</div><h2>Important precautions</h2>
5454
<p class="lead">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.</p></div>
55-
<div class="grid g3"><div class="cap"><div class="dot" style="background:#F59E0B;color:#fff">!</div><h4>Generate keys with a CSPRNG, not by hand</h4><p>Use <code>openssl rand -hex 32</code> (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.</p></div><div class="cap"><div class="dot" style="background:#F59E0B;color:#fff">!</div><h4>Save the key before you close the terminal</h4><p>When you run <code>KEY=$(openssl rand -hex 32)</code>, that 64-character hex string only exists in your shell's environment. Close the tab without copying it into a password manager (1Password, Bitwarden, <code>pass</code>) and the file becomes permanently unreadable. <strong>That is by design — it is the crypto-shred guarantee, not a bug.</strong></p></div><div class="cap"><div class="dot" style="background:#F59E0B;color:#fff">!</div><h4>The AAD prefix must match — character for character</h4><p>If you encrypted with <code>--aad-prefix "mydata-2026-05-31"</code>, you must type that <em>exact</em> 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.</p></div><div class="cap"><div class="dot" style="background:#F59E0B;color:#fff">!</div><h4>Use a trusted device</h4><p>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.</p></div><div class="cap"><div class="dot" style="background:#F59E0B;color:#fff">!</div><h4>Never share keys over email, chat or SMS</h4><p>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.</p></div><div class="cap"><div class="dot" style="background:#F59E0B;color:#fff">!</div><h4>Public demo is for evaluation; production wants the local build</h4><p>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 <code>-DSIGNET_ENABLE_COMMERCIAL=ON</code> so the entire compile, key-handling and storage surface stays inside your trust boundary.</p></div><div class="cap"><div class="dot" style="background:#F59E0B;color:#fff">!</div><h4>Report vulnerabilities responsibly</h4><p>Found a real cryptographic or implementation issue? Use the coordinated-disclosure path in <a href="https://github.com/SIGNETSTACK/SIGNET_FORGE/blob/main/SECURITY.md" target="_blank" rel="noopener">SECURITY.md</a> on the Forge repository — please don't open a public issue.</p></div></div></div></section>
55+
<div class="grid g3"><div class="cap"><div class="dot" style="background:#F59E0B;color:#fff">!</div><h4>Generate keys with a CSPRNG, not by hand</h4><p>Use <code>openssl rand -hex 32</code> (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.</p></div><div class="cap"><div class="dot" style="background:#F59E0B;color:#fff">!</div><h4>Save the key before you close the terminal</h4><p>When you run <code>KEY=$(openssl rand -hex 32)</code>, that 64-character hex string only exists in your shell's environment. Close the tab without copying it into a password manager (1Password, Bitwarden, <code>pass</code>) and the file becomes permanently unreadable. <strong>That is by design — it is the crypto-shred guarantee, not a bug.</strong></p></div><div class="cap"><div class="dot" style="background:#F59E0B;color:#fff">!</div><h4>The AAD prefix must match — character for character</h4><p>If you encrypted with <code>--aad-prefix "mydata-2026-05-31"</code>, you must type that <em>exact</em> 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.</p></div><div class="cap"><div class="dot" style="background:#F59E0B;color:#fff">!</div><h4>Use a trusted device</h4><p>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.</p></div><div class="cap"><div class="dot" style="background:#F59E0B;color:#fff">!</div><h4>Never share keys over email, chat or SMS</h4><p>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.</p></div><div class="cap"><div class="dot" style="background:#F59E0B;color:#fff">!</div><h4>Public demo is for evaluation; production wants the local build</h4><p>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 <code>-DSIGNET_ENABLE_COMMERCIAL=ON</code> so the entire compile, key-handling and storage surface stays inside your trust boundary.</p></div><div class="cap"><div class="dot" style="background:#F59E0B;color:#fff">!</div><h4>Downloading an encrypted .parquet is just sharing the ciphertext</h4><p>The <strong>Download .parquet</strong> button is a passthrough — it writes the exact bytes you uploaded. An encrypted file <em>stays</em> encrypted on disk and is safe to email, attach or upload to shared storage. But sharing the file does <em>not</em> 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.</p></div><div class="cap"><div class="dot" style="background:#F59E0B;color:#fff">!</div><h4>Report vulnerabilities responsibly</h4><p>Found a real cryptographic or implementation issue? Use the coordinated-disclosure path in <a href="https://github.com/SIGNETSTACK/SIGNET_FORGE/blob/main/SECURITY.md" target="_blank" rel="noopener">SECURITY.md</a> on the Forge repository — please don't open a public issue.</p></div></div></div></section>
5656

5757
<section><div class="wrap">
5858
<div class="sec-head"><div class="kick">Convert your own CSV</div><h2>The four-step recipe</h2>

0 commit comments

Comments
 (0)