Portable Artifact Attestations with PGP, Bitcoin, and ... Nostr?

What started as a simple PGP import feature inside Continuum unexpectedly evolved into a full local-first artifact attestation system supporting PGP, Bitcoin, and Nostr signing identities. This article explores detached signatures, portable proof bundles, and the realization that Nostr private keys can sign far more than relay events.
Portable Artifact Attestations with PGP, Bitcoin, and ... Nostr?

Andrew G. Stanton - Thursday, May 7, 2026


For most of the last week I was pretty out of it physically.

Since around Thursday (4/30), I had been recovering from a rough stretch of stomach issues and low energy. I was not doing deep technical work. I was barely writing publicly at all.

Then sometime yesterday afternoon, what started as a relatively small Continuum feature unexpectedly turned into something much bigger.

The original goal was simple enough:

Add support for importing PGP identities into Continuum.

That was it.

The idea seemed straightforward:

  • import a public or private PGP key
  • store it locally in the Continuum workspace
  • eventually support detached signatures for artifacts

Reasonable.

But once the PGP identities were working, another thought emerged naturally:

Why not support Bitcoin signing identities as well?

Not wallets. Not balances. Not transactions.

Just signing authority.

That distinction matters.

So I added support for importing Bitcoin signing identities derived from:

  • WIF private keys
  • xprv extended private keys
  • descriptor-based derivation paths

Again, still relatively contained.

But then something clicked.

A Bitcoin private key is not only useful for transactions.

It can also be used as a general-purpose signing authority.

So I built detached Bitcoin artifact attestations.

At that point Continuum could:

  • sign PDFs
  • sign markdown files
  • sign ZIP archives
  • sign DOCX files
  • generate detached proof bundles

The resulting ZIP export contained:

  • artifact.pdf
  • artifact.pdf.asc
  • artifact.pdf.bitcoin-proof.json
  • manifest.json
  • signers.json
  • pgp-public-key.asc

Already interesting.

But then came the real breakthrough.

I realized there was absolutely no reason the same model could not apply to Nostr identities.

And that is where things got unexpectedly fascinating.

Because in most of the Nostr ecosystem, people think of a Nostr private key in one very specific way:

It signs Nostr events.

That is true.

But it is not the whole story.

Underneath the protocol semantics, a Nostr private key is simply a secp256k1 Schnorr signing authority.

That means it can sign anything.

Not only relay events.

Not only kind-based objects.

Anything.

Once I realized that, the implementation happened very quickly.

Continuum now supports:

  • PGP detached signatures
  • Bitcoin secp256k1 artifact attestations
  • Nostr Schnorr artifact attestations

And all three can be exported together inside a single portable verification bundle.

That means a PDF can now be accompanied by:

  • artifact.pdf.asc
  • artifact.pdf.bitcoin-proof.json
  • artifact.pdf.nostr-proof.json

Each proof is completely public.

That is one of the most interesting parts.

The proof JSON files can be freely shared publicly:

  • no private key information is exposed
  • no signing authority is leaked
  • no sensitive secrets are revealed

Yet the signatures remain verifiable.

That is a profound concept once you really stop and think about it.

The authority remains entirely local.

The proofs are public.

Verification can happen offline.

And the underlying artifact itself can even remain private.

That is radically different from how most modern systems work.

Most systems assume:

  • platform identity
  • centralized verification
  • OAuth login flows
  • hosted trust infrastructure
  • server-side authority

But detached cryptographic attestations invert the model.

The authority lives with the signer.

The verifier does not need to trust a platform.

They only need:

  • the artifact
  • the proof bundle
  • the public verification material

That is it.

The final proof bundle generated tonight included:

  • a detached PGP signature
  • a bundled PGP public key
  • a Bitcoin proof JSON
  • a Nostr proof JSON
  • manifest.json
  • signers.json

All fully public.

The signers.json file indexes all signers and references the proof files:

  • Bitcoin address
  • public keys
  • npub
  • PGP fingerprint
  • signature schemes
  • proof file locations

The manifest tracks:

  • artifact SHA256
  • included proof types
  • bundle version
  • timestamps

What is especially interesting is that none of this required:

  • relay publishing
  • cloud infrastructure
  • external APIs
  • centralized verification services

Everything happened locally.

That is the part I continue coming back to.

Continuum is slowly becoming something much broader than “a Nostr client.”

It is increasingly looking more like a local-first cryptographic workspace.

A place where:

  • identities
  • signing authority
  • artifacts
  • attestations
  • archives
  • verification

all coexist locally under user control.

The more I think about it, the more I believe the foundational insight is actually this:

Signing is not publishing.

Most systems collapse:

  • authorship
  • signing
  • publishing
  • distribution
  • verification

into one step.

Continuum intentionally separates them.

And once those concepts are separated, very different possibilities emerge.

Detached artifact attestations were one of those possibilities.

Generalized Nostr signing was another.

Challenge-response authentication flows are likely another.

SSH signing identities will probably be next.

At some point you begin realizing:

PGP. Bitcoin. Nostr. SSH.

These are not really separate worlds.

They are all variations of the same deeper primitive:

challenge → sign → verify

That realization changes how you think about identity itself.


Write a comment
No comments yet.