Create

Sign what you make. Prove it is you.

provcheck verifies · provcheck-kit signs, binds your identity, and publishes the receipt

Five-minute setup

Three one-time commands. init creates your local keys, login connects your atproto identity, publish writes your certificate fingerprint to your DID so recipients can cross-check it.

$ provcheck-kit init                     # mint a fresh ES256 keypair
$ provcheck-kit login -u me.bsky.social  # attach an atproto identity
$ provcheck-kit publish                  # publish the cert fingerprint to atproto

One flag per render

Sign each output with --embed-identity. That binds your atproto identity to the C2PA signature, so the receipt carries both the cryptographic signature and the identity attestation.

$ provcheck-kit sign --embed-identity ./render.wav

On the receiving side, --auto-identity fills in the signer's published identity automatically during verification.

$ provcheck --auto-identity ./render.wav

Key lifecycle

Keys live in your operating system keychain by default. For CI and headless environments, point at an age-encrypted key file with --age-file. For physical-token continuity, generate the key on a Yubikey PIV slot with --yubikey: the private key is created on-device and never extractable.

  • provcheck-kit init --yubikeyMint the signing key on a Yubikey PIV slot 9c. Requires the PIV PIN to be changed from the factory default first via ykman piv access change-pin.
  • provcheck-kit listEvery signing-key record published under your DID.
  • provcheck-kit revokeWrite an audit-preserving tombstone for a key.
  • provcheck-kit rotateMint, publish, and revoke in one atomic step.
  • provcheck-kit export-backup / import-backupAge-encrypted backup and restore, with optional recovery recipients.

Integration patterns

Pull the Linux binary into a slim container so signing happens inside your render pipeline image.

FROM debian:bookworm-slim
ARG PROVCHECK_VERSION  # pin to a release tag: github.com/CreativeMayhemLtd/provcheck/releases
RUN apt-get update && apt-get install -y curl ca-certificates && rm -rf /var/lib/apt/lists/*
RUN curl -L "https://github.com/CreativeMayhemLtd/provcheck/releases/download/${PROVCHECK_VERSION}/provcheck-kit-${PROVCHECK_VERSION}-linux-x86_64.tar.gz" \
  | tar -xzf - --strip-components=1 -C /usr/local/bin/

At render time:

$ provcheck-kit sign /path/to/output.wav --embed-identity --action created

On the verification side, gate a release on a passing verdict. Exit 0 is a pass, exit 1 is a fail, exit 2 is an I/O error.

$ provcheck --quiet --require-trusted --trust-store roots.pem rendered.wav || {
    >   echo "rendered file failed C2PA verification, aborting publish"; exit 1
    > }

ComfyUI

A signing node for ComfyUI ships with provcheck as an open-source custom node, so you can sign renders inside your ComfyUI graph. Production integration and support (pipeline wiring, custom trust policy, operational help) are available as a paid engagement: contact [email protected].

What a signed file proves, and what it does not

A VERIFIED + attested result proves two things: the file carries an intact C2PA signature, and the signer controls the atproto identity published with it. That is a strong, checkable link between the content and a public handle.

It does not prove the content is true, accurate, or unedited beyond what the manifest records, and it is not passport-level identity. It tells you which handle signed, not who the human behind the handle is.

An [UNSIGNED] result means no claim was attached. provcheck reports it and returns exit 1. Unsigned is not "fake"; it simply means there is nothing to verify.

A watermark detection is a third, independent signal. It means a neural watermark was found in the media itself, with a reported confidence. It is evidence about the media, separate from the signature and the identity attestation.

A Yubikey-backed signature carries the same cryptographic weight as a software-backed one: the verifier sees identical manifest bytes. The hardware-backed identity matters for continuity: the private key cannot be exfiltrated, lost in a cloud-storage sync, or copied to a second machine. It survives laptop theft.

Next

Get the tools.

Release binaries and SBOMs are on GitHub. The developer reference covers the verifier CLI, JSON output, and strict-mode flags.