Create a Trust Profile

new

Define what "trusted" means for your use case. Pick a template, toggle the checks that matter, and export a config file you can share.

Signature chain
Valid cryptographic signature anchored to a trust root
required
Capture timestamp
UTC time set by camera at the moment of exposure
optional
Author identity
Name and credential of the person who made the image
optional
Edit history
Complete chain of signed actions from capture to publication
optional
AI declaration
Explicit statement about whether AI was used
required
GPS / location
Geolocation embedded or explicitly withheld
optional
Copyright / licence
Rights declaration and usage terms
optional
Data mining declaration
Data mining usage permissions
optional
Pixel hash binding
SHA-256 of pixel data matches signed hash
required

Live preview

YAML
# My Trust Profile
# Generated by JPEG Trust Profile Builder
---
metadata:
  name: "My Trust Profile"
  issuer: "JPEG Trust Profile Builder"
  date: "2026-11-08T12:51:54.143Z"
  version: "1.0.0"
  language: en

---
# Required checks

- id: required_checks_info
  title: "Required checks"
  report_text: "Required checks for My Trust Profile"

- id: signature_chain
  description: "Valid cryptographic signature anchored to a trust root"
  expression: >
    manifests[0].status.signature == "claimSignature.validated" || manifests[0].'claim.v2'.signature_status == "claimSignature.validated" || (manifests[0] == null && (declaration.'claim.v2'.signature_status == "claimSignature.validated" || declaration.claim.signature_status == "claimSignature.validated"))
  report_text:
    'true':
      en: "Valid signature chain found"
    'false':
      en: "No valid signature chain"

- id: ai_declaration
  description: "Explicit statement about whether AI was used"
  expression: >
    length(manifests[?assertions.'cawg.training-mining'.entries.'cawg.ai_training' != null]) > 0 || declaration.assertions.'cawg.training-mining'.entries.'cawg.ai_training' != null || length(manifests[?assertions.'cawg.training-mining'.entries.'cawg.ai_inference' != null]) > 0 || declaration.assertions.'cawg.training-mining'.entries.'cawg.ai_inference' != null || declaration.assertions.'cawg.ai_training' != null || declaration.assertions.'cawg.ai_inference' != null
  report_text:
    'true':
      en: "AI usage declaration is present"
    'false':
      en: "No AI usage declaration found"

- id: pixel_hash
  description: "SHA-256 of pixel data matches signed hash"
  expression: >
    manifests[0].status.content == "assertion.dataHash.match" || manifests[0].'claim.v2'.content_status == "assertion.dataHash.match" || (manifests[0] == null && (declaration.'claim.v2'.content_status == "assertion.dataHash.match" || declaration.claim.content_status == "assertion.dataHash.match"))
  report_text:
    'true':
      en: "Pixel hash matches — content integrity verified"
    'false':
      en: "Pixel hash mismatch — content may have been modified"