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.