Loading…
Loading…
Evaluate
Reproduce the guarantees yourself, in about fifteen minutes, without an account or a call. You need Node 20 or later. The results shown are what these commands print for the sample proof.
Step 1
Download a production proof and the file it covers: sample.txt and sample.txt.bitgraph.json. It is BitGraph count 16 of a v13 epoch, the second file of a two-file collection.
npx @mikeargento/bitgraph-sdk verify sample.txt --proof sample.txt.bitgraph.json --pcr0 adaad0bef62292d35197ae8db19e40685229f1a1e6070a7c77a148c4ada88ee66a1ca50819eebc2017c6716a49f2692f
TRUE These exact bytes are file 2 of a tree of 2, whose root was bound by BitGraph's published enclave image v13, as the AWS Nitro hardware attests, at 2026-10-21T01:37:40.960Z.
Disconnect from the network after the first run, which installs the verifier; it still checks.
Step 2
An image made with ChatGPT carries a C2PA manifest signed by OpenAI, naming the tool that made it. Dropped on Make, the image and its manifest became two leaves of one tree, bound in one action: the credential now has an independent recording of when these exact bytes, picture and manifest together, existed.

npx @mikeargento/bitgraph-sdk verify chatgpt-image.png --proof chatgpt-image.png.bitgraph.json npx @mikeargento/bitgraph-sdk verify chatgpt-image.png.c2pa --proof chatgpt-image.png.c2pa.bitgraph.json
TRUE These exact bytes are file 2 of a tree of 4, whose root was bound by BitGraph's published enclave image v13, as the AWS Nitro hardware attests, at 2026-10-28T03:09:03.881Z. TRUE These exact bytes are file 3 of a tree of 4, … at 2026-10-28T03:09:03.881Z.
The two proofs share one root and one attested time. Check the credential itself, OpenAI’s signature and the tool it names, with any C2PA tool such as c2patool. The two answers are independent: OpenAI’s credential says what made the image; BitGraph says when these exact bytes were bound.
Step 3
Edit the proof or the file and verify again. Each change fails, for its own reason, with exit code 2.
| Attack | How | Result |
|---|---|---|
| Different bytes | Change one character of sample.txt | FALSE: the file is not in the tree this proof binds |
| Moved position | Edit commit.counter | FALSE: user_data is not this proof's signed-body hash |
| Rewritten history | Edit commit.prevB64 | FALSE: user_data is not this proof's signed-body hash |
| Different image claimed | Edit environment.measurement | FALSE: PCR0 … is not the proof's measurement |
| Signature tampered | Change one character of signer.signatureB64 | FALSE: signature does not match |
| Unaccepted image | Pin a different --pcr0 | FALSE: PCR0 … is not an image this verifier accepts |
| Forged with a new key | Re-sign a body with a key you generate (the verifier's test) | Passes a signature-only check; FALSE with attestation |
For example, moving the proof to another position:
node -e 'const f="sample.txt.bitgraph.json",p=JSON.parse(require("fs").readFileSync(f));p.commit.counter="18";require("fs").writeFileSync("moved.json",JSON.stringify(p))'
npx @mikeargento/bitgraph-sdk verify sample.txt --proof moved.jsonStep 4
Bind any file on the live service. It is hashed on your machine and only the digest is sent; the proof is saved beside it.
npx -p @mikeargento/bitgraph-sdk bitgraph make yourfile npx @mikeargento/bitgraph-sdk verify yourfile --proof yourfile.bitgraph.json
BitGraphs are permanent, and the digest appears in the public ledger. Bind a file you are content to have on record, or a fresh random one. Or drop files on Make in a browser.
Step 5
The PCR0 every proof is checked against comes from public source. Build it twice from a clean state and compare; Nitro hardware is not needed to build (Docker on linux/amd64 is).
git clone https://github.com/mikeargento/bitgraph && cd bitgraph ./server/commit-service/reproducible-build/verify-pcr0.sh enclave-v13 adaad0bef62292d35197ae8db19e40685229f1a1e6070a7c77a148c4ada88ee66a1ca50819eebc2017c6716a49f2692f
The measurement reproduces; the image file does not byte-for-byte, because its header embeds a build time. Pins and notes: server/commit-service/reproducible-build/PINS.md.
Step 6
npm install npm test --workspace=packages/verify
Step 7
For a deeper evaluation: a proof-of-concept on your own data, keyed access above the public limits, the threat model in detail, and technical diligence materials under NDA.
Read first: the mechanism and threat model, and the integration interface.
Request