1"use strict";(globalThis.webpackChunkopensource_contentauth_org=globalThis.webpackChunkopensource_contentauth_org||[]).push([[849],{6164:e=>{e.exports=JSON.parse('{"version":{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"docs":[{"type":"link","href":"/docs/introduction","label":"CAI open source SDK","docId":"introduction","unlisted":false},{"type":"category","label":"Getting started","collapsed":true,"items":[{"type":"link","href":"/docs/getting-started/faqs","label":"FAQs","docId":"getting-started/faqs","unlisted":false},{"type":"link","href":"/docs/getting-started/glossary","label":"Glossary","docId":"getting-started/glossary","unlisted":false},{"type":"link","href":"/docs/getting-started/inspect","label":"Using ACA Inspect","docId":"getting-started/inspect","unlisted":false}],"collapsible":true,"href":"/docs/getting-started/"},{"type":"category","label":"Understanding manifests","collapsed":true,"items":[{"type":"category","label":"Reading manifest data","collapsed":true,"items":[{"type":"link","href":"/docs/manifest/reading/reading-ingredients","label":"Reading ingredients","docId":"manifest/reading/reading-ingredients","unlisted":false},{"type":"link","href":"/docs/manifest/reading/reading-cawg-id","label":"Reading CAWG identity assertions","docId":"manifest/reading/reading-cawg-id","unlisted":false},{"type":"link","href":"/docs/manifest/reading/legacy-manifests","label":"Reading legacy manifest data","docId":"manifest/reading/legacy-manifests","unlisted":false},{"type":"link","href":"/docs/manifest/reading/manifest-validation","label":"Validating manifests","docId":"manifest/reading/manifest-validation","unlisted":false}],"collapsible":true,"href":"/docs/manifest/reading/"},{"type":"category","label":"Writing manifest data","collapsed":true,"items":[{"type":"link","href":"/docs/manifest/writing/ingredients","label":"Writing ingredients","docId":"manifest/writing/ingredients","unlisted":false},{"type":"link","href":"/docs/manifest/writing/assertions-actions","label":"Writing assertions and actions","docId":"manifest/writing/assertions-actions","unlisted":false}],"collapsible":true,"href":"/docs/manifest/writing/"},{"type":"link","href":"/docs/manifest/manifest-examples","label":"Examples","docId":"manifest/manifest-examples","unlisted":false}],"collapsible":true,"href":"/docs/manifest/understanding-manifest"},{"type":"category","label":"Working with the SDK","collapsed":true,"items":[{"type":"link","href":"/docs/tasks/settings","label":"Configuring settings","docId":"tasks/settings","unlisted":false},{"type":"link","href":"/docs/tasks/read","label":"Reading manifest data","docId":"tasks/read","unlisted":false},{"type":"link","href":"/docs/tasks/get-resources","label":"Getting manifest resources","docId":"tasks/get-resources","unlisted":false},{"type":"link","href":"/docs/tasks/intents","label":"Using builder intents","docId":"tasks/intents","unlisted":false},{"type":"link","href":"/docs/tasks/archives","label":"Using working stores and archives","docId":"tasks/archives","unlisted":false},{"type":"link","href":"/docs/tasks/build","label":"Adding and signing a manifest","docId":"tasks/build","unlisted":false}],"collapsible":true,"href":"/docs/tasks/"},{"type":"category","label":"Signing and certificates","collapsed":true,"items":[{"type":"link","href":"/docs/signing/test-certs","label":"Using test certificates","docId":"signing/test-certs","unlisted":false},{"type":"link","href":"/docs/signing/get-cert","label":"Getting a certificate","docId":"signing/get-cert","unlisted":false},{"type":"link","href":"/docs/signing/local-signing","label":"Signing with local credentials","docId":"signing/local-signing","unlisted":false},{"type":"link","href":"/docs/signing/prod-cert","label":"Using a certificate in production","docId":"signing/prod-cert","unlisted":false}],"collapsible":true,"href":"/docs/signing/"},{"type":"category","label":"C2PA Tool","collapsed":true,"items":[{"type":"link","href":"/docs/sdk-repos/c2patool/docs/usage","label":"Using C2PA Tool","docId":"sdk-repos/c2patool/docs/usage","unlisted":false},{"type":"link","href":"/docs/sdk-repos/c2patool/docs/supported-formats","label":"Supported media formats","docId":"sdk-repos/c2patool/docs/supported-formats","unlisted":false},{"type":"link","href":"/docs/sdk-repos/c2patool/docs/manifest","label":"Using a manifest file","docId":"sdk-repos/c2patool/docs/manifest","unlisted":false},{"type":"link","href":"/docs/sdk-repos/c2patool/docs/signing","label":"Signing assets with C2PA Tool","docId":"sdk-repos/c2patool/docs/signing","unlisted":false},{"type":"link","href":"/docs/sdk-repos/c2patool/docs/cawg_x509_signing","label":"Adding CAWG identity assertions","docId":"sdk-repos/c2patool/docs/cawg_x509_signing","unlisted":false},{"type":"link","href":"/docs/sdk-repos/c2patool/docs/changelog","label":"Change log","docId":"sdk-repos/c2patool/docs/changelog","unlisted":false},{"type":"link","label":"GitHub","href":"https://github.com/contentauth/c2patool"}],"collapsible":true,"href":"/docs/sdk-repos/c2patool/"},{"type":"category","label":"Rust library","collapsed":true,"items":[{"type":"link","href":"/docs/sdk-repos/c2pa-rs/docs/usage","label":"Using the Rust library","docId":"sdk-repos/c2pa-rs/docs/usage","unlisted":false},{"type":"link","href":"/docs/sdk-repos/c2pa-rs/docs/supported-formats","label":"Supported media formats","docId":"sdk-repos/c2pa-rs/docs/supported-formats","unlisted":false},{"type":"link","href":"/docs/sdk-repos/c2pa-rs/docs/context-settings","label":"Configuring SDK settings","docId":"sdk-repos/c2pa-rs/docs/context-settings","unlisted":false},{"type":"link","href":"/docs/sdk-repos/c2pa-rs/docs/working-stores","label":"Using working stores and archives","docId":"sdk-repos/c2pa-rs/docs/working-stores","unlisted":false},{"type":"link","href":"/docs/sdk-repos/c2pa-rs/docs/intents","label":"Using Builder intents","docId":"sdk-repos/c2pa-rs/docs/intents","unlisted":false},{"type":"link","href":"/docs/sdk-repos/c2pa-rs/docs/progress_callbacks","label":"Progress callbacks","docId":"sdk-repos/c2pa-rs/docs/progress_callbacks","unlisted":false},{"type":"link","href":"/docs/sdk-repos/c2pa-rs/docs/cawg-identity","label":"Using CAWG identity assertions","docId":"sdk-repos/c2pa-rs/docs/cawg-identity","unlisted":false},{"type":"link","href":"/docs/sdk-repos/c2pa-rs/docs/redaction","label":"Redaction","docId":"sdk-repos/c2pa-rs/docs/redaction","unlisted":false},{"type":"link","href":"/docs/sdk-repos/c2pa-rs/docs/instanceid-behavior","label":"InstanceID behavior","docId":"sdk-repos/c2pa-rs/docs/instanceid-behavior","unlisted":false},{"type":"link","href":"/docs/sdk-repos/c2pa-rs/docs/embeddable-api","label":"Embeddable signing API","docId":"sdk-repos/c2pa-rs/docs/embeddable-api","unlisted":false},{"type":"link","href":"/docs/sdk-repos/c2pa-rs/docs/release-notes","label":"Release notes (Rust)","docId":"sdk-repos/c2pa-rs/docs/release-notes","unlisted":false},{"type":"category","label":"Release process","items":[{"type":"link","label":"Deprecation policy","href":"https://github.com/contentauth/c2pa-rs/blob/main/docs/deprecation-policy.md"},{"type":"link","label":"Experimental features","href":"https://github.com/contentauth/c2pa-rs/blob/main/docs/experimental-features.md"},{"type":"link","label":"Support tiers","href":"https://github.com/contentauth/c2pa-rs/blob/main/docs/support-tiers.md"}],"collapsed":true,"collapsible":true,"href":"/docs/sdk-repos/c2pa-rs/docs/release-process"},{"type":"link","label":"API documentation","href":"https://docs.rs/c2pa"},{"type":"link","label":"GitHub","href":"https://github.com/contentauth/c2pa-rs"}],"collapsible":true,"href":"/docs/sdk-repos/c2pa-rs/"},{"type":"category","label":"SDK object reference","collapsed":true,"items":[{"type":"link","href":"/docs/manifest/json-ref/reader-schema","label":"Reader","docId":"manifest/json-ref/reader-schema","unlisted":false},{"type":"link","href":"/docs/manifest/json-ref/builder-schema","label":"Builder","docId":"manifest/json-ref/builder-schema","unlisted":false},{"type":"link","href":"/docs/manifest/json-ref/manifest-definition-schema","label":"ManifestDefinition","docId":"manifest/json-ref/manifest-definition-schema","unlisted":false},{"type":"link","href":"/docs/manifest/json-ref/settings-schema","label":"Settings","docId":"manifest/json-ref/settings-schema","unlisted":false}],"collapsible":true,"href":"/docs/manifest/json-ref/"},{"type":"category","label":"Python library","collapsed":true,"items":[{"type":"link","href":"/docs/sdk-repos/c2pa-python/docs/usage","label":"Using the Python library","docId":"sdk-repos/c2pa-python/docs/usage","unlisted":false},{"type":"link","href":"/docs/sdk-repos/c2pa-python/docs/supported-formats","label":"Supported media formats","docId":"sdk-repos/c2pa-python/docs/supported-formats","unlisted":false},{"type":"link","href":"/docs/sdk-repos/c2pa-python/docs/class-diagram","label":"Class diagram","docId":"sdk-repos/c2pa-python/docs/class-diagram","unlisted":false},{"type":"link","href":"/docs/sdk-repos/c2pa-python/docs/context-settings","label":"Configuring SDK settings","docId":"sdk-repos/c2pa-python/docs/context-settings","unlisted":false},{"type":"link","href":"/docs/sdk-repos/c2pa-python/docs/intents","label":"Using Builder intents","docId":"sdk-repos/c2pa-python/docs/intents","unlisted":false},{"type":"link","href":"/docs/sdk-repos/c2pa-python/docs/working-stores","label":"Manifests, working stores, and archives","docId":"sdk-repos/c2pa-python/docs/working-stores","unlisted":false},{"type":"link","href":"/docs/sdk-repos/c2pa-python/docs/selective-manifests","label":"Selective manifest construction","docId":"sdk-repos/c2pa-python/docs/selective-manifests","unlisted":false},{"type":"link","href":"/docs/sdk-repos/c2pa-python/docs/examples","label":"Python example code","docId":"sdk-repos/c2pa-python/docs/examples","unlisted":false},{"type":"link","href":"/docs/sdk-repos/c2pa-python/docs/release-notes","label":"Release notes (Python)","docId":"sdk-repos/c2pa-python/docs/release-notes","unlisted":false},{"type":"link","href":"/docs/sdk-repos/c2pa-python-example/","label":"C2PA Python example","docId":"sdk-repos/c2pa-python-example/readme","unlisted":false},{"type":"link","label":"API documentation","href":"https://contentauth.github.io/c2pa-python/api/c2pa/index.html"},{"type":"link","label":"GitHub","href":"https://github.com/contentauth/c2pa-python"}],"collapsible":true,"href":"/docs/sdk-repos/c2pa-python/"},{"type":"category","label":"C++ library","collapsed":true,"items":[{"type":"link","href":"/docs/sdk-repos/c2pa-cpp/docs/usage","label":"Using the C++ library","docId":"sdk-repos/c2pa-cpp/docs/usage","unlisted":false},{"type":"link","href":"/docs/sdk-repos/c2pa-cpp/docs/supported-formats","label":"Supported media formats","docId":"sdk-repos/c2pa-cpp/docs/supported-formats","unlisted":false},{"type":"link","href":"/docs/sdk-repos/c2pa-cpp/docs/context-settings","label":"Configuring SDK settings","docId":"sdk-repos/c2pa-cpp/docs/context-settings","unlisted":false},{"type":"link","href":"/docs/sdk-repos/c2pa-cpp/docs/intents","label":"Using Builder intents","docId":"sdk-repos/c2pa-cpp/docs/intents","unlisted":false},{"type":"link","href":"/docs/sdk-repos/c2pa-cpp/docs/working-stores","label":"Using working stores and archives","docId":"sdk-repos/c2pa-cpp/docs/working-stores","unlisted":false},{"type":"link","href":"/docs/sdk-repos/c2pa-cpp/docs/selective-manifests","label":"Selective manifest construction","docId":"sdk-repos/c2pa-cpp/docs/selective-manifests","unlisted":false},{"type":"link","href":"/docs/sdk-repos/c2pa-cpp/docs/embeddable-api","label":"Embeddable signing API","docId":"sdk-repos/c2pa-cpp/docs/embeddable-api","unlisted":false},{"type":"link","href":"/docs/sdk-repos/c2pa-cpp/docs/release-notes","label":"Release notes (C++)","docId":"sdk-repos/c2pa-cpp/docs/release-notes","unlisted":false},{"type":"link","href":"/docs/sdk-repos/c2pa-cpp/docs/faqs","label":"FAQs","docId":"sdk-repos/c2pa-cpp/docs/faqs","unlisted":false},{"type":"link","label":"API documentation","href":"https://contentauth.github.io/c2pa-cpp/
1annotated.html"},{"type":"link","label":"GitHub","href":"https://github.com/contentauth/c2pa-cpp"}],"collapsible":true,"href":"/docs/sdk-repos/c2pa-cpp/"},{"type":"category","label":"JavaScript library","collapsed":true,"items":[{"type":"link","href":"/docs/sdk-repos/c2pa-js/packages/c2pa-web/","label":"c2pa-web","docId":"sdk-repos/c2pa-js/packages/c2pa-web/README","unlisted":false},{"type":"link","href":"/docs/sdk-repos/c2pa-js/packages/c2pa-types/","label":"c2pa-types","docId":"sdk-repos/c2pa-js/packages/c2pa-types/README","unlisted":false},{"type":"link","href":"/docs/sdk-repos/c2pa-js/packages/c2pa-wasm/","label":"c2pa-wasm","docId":"sdk-repos/c2pa-js/packages/c2pa-wasm/README","unlisted":false},{"type":"link","href":"/docs/sdk-repos/c2pa-js/packages/c2pa-utilities/","label":"c2pa-utilities","docId":"sdk-repos/c2pa-js/packages/c2pa-utilities/README","unlisted":false},{"type":"link","href":"/docs/sdk-repos/c2pa-js/supported-formats","label":"Supported media formats","docId":"sdk-repos/c2pa-js/supported-formats","unlisted":false},{"type":"link","label":"API documentation","href":"https://contentauth.github.io/c2pa-js/modules/_contentauth_c2pa-web.html"},{"type":"link","label":"GitHub","href":"https://github.com/contentauth/c2pa-js"}],"collapsible":true,"href":"/docs/sdk-repos/c2pa-js/"},{"type":"category","label":"Node.js library","collapsed":true,"items":[{"type":"link","label":"API documentation","href":"https://contentauth.github.io/c2pa-js/modules/_contentauth_c2pa-node.html"},{"type":"link","label":"GitHub","href":"https://github.com/contentauth/c2pa-js/tree/main/packages/c2pa-node"}],"collapsible":true,"href":"/docs/sdk-repos/c2pa-js/packages/c2pa-node/"},{"type":"category","label":"Mobile libraries","collapsed":true,"items":[{"type":"category","label":"iOS/macOS (Swift)","collapsed":true,"items":[{"type":"link","href":"/docs/sdk-repos/c2pa-ios-example/","label":"Example iOS app","docId":"sdk-repos/c2pa-ios-example/README","unlisted":false},{"type":"link","label":"API documentation","href":"https://contentauth.github.io/c2pa-swift/documentation/c2pa/"},{"type":"link","label":"GitHub","href":"https://github.com/contentauth/c2pa-swift"}],"collapsible":true,"href":"/docs/sdk-repos/c2pa-swift/"},{"type":"category","label":"Android (Kotlin)","collapsed":true,"items":[{"type":"link","href":"/docs/sdk-repos/c2pa-android-example/","label":"Example Android app","docId":"sdk-repos/c2pa-android-example/README","unlisted":false},{"type":"link","label":"API documentation","href":"https://contentauth.github.io/c2pa-android/"},{"type":"link","label":"GitHub","href":"https://github.com/contentauth/c2pa-android"}],"collapsible":true,"href":"/docs/sdk-repos/c2pa-android/"},{"type":"link","href":"/docs/cawg-mobile","label":"CAWG on mobile","docId":"cawg-mobile","unlisted":false}],"collapsible":true,"href":"/docs/mobile"},{"type":"category","label":"C2PA conformance program","collapsed":true,"items":[{"type":"link","href":"/docs/conformance/trust-lists","label":"Trust lists","docId":"conformance/trust-lists","unlisted":false}],"collapsible":true,"href":"/docs/conformance/"},{"type":"category","label":"Durable Content Credentials","collapsed":true,"items":[{"type":"link","href":"/docs/durable-cr/sb-algs","label":"Watermarking and fingerprinting","docId":"durable-cr/sb-algs","unlisted":false},{"type":"category","label":"TrustMark watermarking","collapsed":true,"items":[{"type":"link","href":"/docs/sdk-repos/trustmark/","label":"Overview","docId":"sdk-repos/trustmark/README","unlisted":false},{"type":"link","href":"/docs/sdk-repos/trustmark/python/CONFIG","label":"Configuration","docId":"sdk-repos/trustmark/python/CONFIG","unlisted":false},{"type":"link","href":"/docs/sdk-repos/trustmark/c2pa/","label":"Using with C2PA","docId":"sdk-repos/trustmark/c2pa/README","unlisted":false},{"type":"link","href":"/docs/sdk-repos/trustmark/js/","label":"JavaScript example","docId":"sdk-repos/trustmark/js/README","unlisted":false},{"type":"link","href":"/docs/sdk-repos/trustmark/rust/","label":"Rust implementation","docId":"sdk-repos/trustmark/rust/README","unlisted":false},{"type":"link","href":"/docs/sdk-repos/trustmark/rust/crates/trustmark-cli/","label":"Rust CLI","docId":"sdk-repos/trustmark/rust/crates/trustmark-cli/README","unlisted":false},{"type":"link","label":"TrustMark Rust API docs","href":"https://docs.rs/trustmark"},{"type":"link","href":"/docs/durable-cr/tm-faq","label":"FAQ","docId":"durable-cr/tm-faq","unlisted":false},{"type":"link","label":"GitHub","href":"https://github.com/adobe/trustmark/"}],"collapsible":true,"href":"/docs/durable-cr/trustmark-intro"}],"collapsible":true,"href":"/docs/durable-cr/"},{"type":"link","href":"/docs/community-resources","label":"Community resources","docId":"community-resources","unlisted":false}]},"docs":{"cawg-mobile":{"id":"cawg-mobile","title":"CAWG creator assertions for mobile apps","description":"Introduction","sidebar":"docs"},"community-resources":{"id":"community-resources","title":"Community resources","description":"The Content Authenticity Initiative has an active and growing community of developers collaborating on the ecosystem of open-source for content provenance creation and validation.","sidebar":"docs"},"conformance/index":{"id":"conformance/index","title":"C2PA conformance program","description":"The C2PA conformance program helps to ensure that products that read and create Content Credentials are compliant with the C2PA Content Credentials specification.","sidebar":"docs"},"conformance/trust-lists":{"id":"conformance/trust-lists","title":"Trust lists","de
1scription":"C2PA maintains two trust lists: the C2PA trust list and the C2PA time-stamping authority (TSA) trust list_.","sidebar":"docs"},"durable-cr/index":{"id":"durable-cr/index","title":"Durable Content Credentials","description":"Durable Content Credentials is a concept that helps content provenance to persist across content platforms by using C2PA manifest data in conjunction with:","sidebar":"docs"},"durable-cr/sb-algs":{"id":"durable-cr/sb-algs","title":"Watermarking and fingerprinting algorithms","description":"The C2PA specification refers to watermarking and content fingerprinting as soft bindings, which can be used to find digital content, even if the underlying bits differ. The C2PA specification requires that soft bindings be generated using one of the algorithms approved by the C2PA Technical Working Group.","sidebar":"docs"},"durable-cr/tm-faq":{"id":"durable-cr/tm-faq","title":"TrustMark FAQ","description":"- General Usage and Adoption","sidebar":"docs"},"durable-cr/trustmark-intro":{"id":"durable-cr/trustmark-intro","title":"TrustMark watermarking","description":"TrustMark is an open-source universal watermarking system for images that:","sidebar":"docs"},"getting-started/faqs":{"id":"getting-started/faqs","title":"Frequently-asked questions","description":"C2PA FAQs.","sidebar":"docs"},"getting-started/glossary":{"id":"getting-started/glossary","title":"Glossary","description":"This glossary defines key terms used throughout the documentation and expands on the Glossary in the C2PA Content Credentials specification.","sidebar":"docs"},"getting-started/index":{"id":"getting-started/index","title":"Getting started with Content Credentials","description":"This is a technical introduction to the Content Authenticity Initiative (CAI) open-source SDK that provides initial context and an overview of the technical aspects of implementing CAI solutions.","sidebar":"docs"},"getting-started/inspect":{"id":"getting-started/inspect","title":"Using the inspect tool on Adobe Content Authenticity (Beta)","description":"The Inspect tool on Adobe Content Authenticity (Beta) (often referred to as \\"ACA Inspect\\" or simply \\"Inspect\\") is a C2PA conforming validator product that can display and apply Content Credentials for various asset types.","sidebar":"docs"},"introduction":{"id":"introduction","title":"CAI open source SDK","description":"You\'re strongly encouraged to read this introduction and Getting started for some basic background and context, before you dive right into development. Working with manifests also has some useful information, regardless of which language and library you use.","sidebar":"docs"},"manifest/json-ref/builder-schema":{"id":"manifest/json-ref/builder-schema","title":"Builder reference","description":"This is a beta release of this reference. It is a work in progress and may have issues or errors.","sidebar":"docs"},"manifest/json-ref/index":{"id":"manifest/json-ref/index","title":"SDK object reference","description":"These references are generated from the Rust library but apply to all the language bindings (libraries). But note that not all languages may be up-to-date with the latest changes in the Rust library.","sidebar":"docs"},"manifest/json-ref/manifest-definition-schema":{"id":"manifest/json-ref/manifest-definition-schema","title":"ManifestDefinition reference","description":"This is a beta release of this reference. It is a work in progress and may have issues or errors.","sidebar":"docs"},"manifest/json-ref/reader-schema":{"id":"manifest/json-ref/reader-schema","title":"Reader reference","description":"This is a beta release of this reference. It is a work in progress and may have issues or errors.","sidebar":"docs"},"manifest/json-ref/settings-schema":{"id":"manifest/json-ref/settings-schema","title":"Settings reference","description":"This is a beta release of this reference. It is a work in progress and may have issues or errors.","sidebar":"docs"},"manifest/manifest-examples":{"id":"manifest/manifest-examples","title":"Manifest examples","description":"The example-assets repository contains some sample assets that demonstrate Content Credentials, including links to view the corresponding manifest reports from the C2PA Tool and to inspect the assets using Verify. See the README as rendered in GitHub Pages.","sidebar":"docs"},"manifest/reading/legacy-manifests":{"id":"manifest/reading/legacy-manifests","title":"Reading legacy manifest data","description":"As much as possible, an application should write manifest data that conforms to the recent version 2.2 C2PA te
1chnical specification, but should be able to read and validate manifest data that conforms to earlier versions of the specification. This ensures that your application is \\"backward-compatible\\" and can still validate older assets with claims that were written in the past.","sidebar":"docs"},"manifest/reading/manifest-validation":{"id":"manifest/reading/manifest-validation","title":"Validating manifests","description":"Processing an asset includes validating the manifests in the associated manifest store. During validation, errors can occur in the active manifest and in ingredients.","sidebar":"docs"},"manifest/reading/reading-cawg-id":{"id":"manifest/reading/reading-cawg-id","title":"Reading CAWG identity assertions","description":"For a video walkthrough of adding a CAWG identity assertion when publishing an image, see Signing an image at publish with a CAWG identity assertion from the Content Credentials Foundations course.","sidebar":"docs"},"manifest/reading/reading-index":{"id":"manifest/reading/reading-index","title":"Reading and validating manifest data","description":"For a video walkthrough of reading and validating Content Credentials in a web browser, see Reading and validating C2PA data with Javascript in the browser from the Content Credentials Foundations course.","sidebar":"docs"},"manifest/reading/reading-ingredients":{"id":"manifest/reading/reading-ingredients","title":"Reading ingredients","description":"Overview","sidebar":"docs"},"manifest/understanding-manifest":{"id":"manifest/understanding-manifest","title":"Understanding manifests","description":"The concept of a manifest is central to how Content Credentials work.","sidebar":"docs"},"manifest/writing/assertions-actions":{"id":"manifest/writing/assertions-actions","title":"Writing assertions and actions","description":"Overview","sidebar":"docs"},"manifest/writing/ingredients":{"id":"manifest/writing/ingredients","title":"Writing ingredients","description":"Overview","sidebar":"docs"},"manifest/writing/writing-index":{"id":"manifest/writing/writing-index","title":"Building and writing manifest data","description":"Use a Builder structure to define and construct manifest data for writing. The Rust library and other language libraries provide methods and objects for working with this structure.","sidebar":"docs"},"mobile":{"id":"mobile","title":"Mobile libraries","description":"These projects are available to enable developing apps for mobile devices:","sidebar":"docs"},"node-landing":{"id":"node-landing","title":"Node.js library","description":"The c2pa-node-v2 repo has been merged into the c2pa-js repo."},"prod-cert":{"id":"prod-cert","title":"Redirect","description":"This page will be redirected to https://opensource.contentauthenticity.org/docs/signing/prod-cert."},"sdk-repos/c2pa-android-example/README":{"id":"sdk-repos/c2pa-android-example/README","title":"C2PA Android example app","description":"The c2pa-android-example repository contains a prototype Android application demonstrating how to capture photos and videos, embed Content Credentials, and then sign them.","sidebar":"docs"},"sdk-repos/c2pa-android/README":{"id":"sdk-repos/c2pa-android/README","title":"C2PA Android library","description":"This project provides Android bindings for the Content Authenticity (CAI). It wraps the C2PA Rust implementation using its C API bindings to provide native Android support via an AAR library.","sidebar":"docs"},"sdk-repos/c2pa-cpp/docs/context-settings":{"id":"sdk-repos/c2pa-cpp/docs/context-settings","title":"Configuring the SDK with Context and Settings","description":"This guide explains how to configure the C2PA SDK using Context and Settings. The configuration controls SDK behavior including verification, trust anchors, thumbnails, signing, and more.","sidebar":"docs"},"sdk-repos/c2pa-cpp/docs/embeddable-api":{"id":"sdk-repos/c2pa-cpp/docs/embeddable-api","title":"Embeddable signing API","description":"[!WARNING]","sidebar":"docs"},"sdk-repos/c2pa-cpp/docs/faqs":{"id":"sdk-repos/c2pa-cpp/docs/faqs","title":"Frequently asked questions","description":"When do I use Reader versus Builder?","sidebar":"docs"},"sdk-repos/c2pa-cpp/docs/intents":{"id":"sdk-repos/c2pa-cpp/docs/intents","title":"Using Builder intents","description":"Intents enable validation, add actions required by the C2PA specification, and help prevent invalid operations when using a Builder. Intents are about the operation (create, edit, or update) executed on the source asset.","sidebar":"docs"},"sdk-repos/c2pa-cpp/docs/release-notes":{"id":"sdk-repos/c2pa-cpp/docs/release-notes","title":"Release notes","de
1scription":"3 Mar 2026","sidebar":"docs"},"sdk-repos/c2pa-cpp/docs/selective-manifests":{"id":"sdk-repos/c2pa-cpp/docs/selective-manifests","title":"Selective manifest construction","description":"You can use Builder and Reader together to selectively construct manifests, keeping only the parts you need and omitting the rest. This is useful when you don\'t want to include all ingredients in a working store (for example, when some ingredient assets are not visible).","sidebar":"docs"},"sdk-repos/c2pa-cpp/docs/supported-formats":{"id":"sdk-repos/c2pa-cpp/docs/supported-formats","title":"Supported file formats","description":"The following table summarizes the supported media (asset) file formats. This information is based on what the Rust library supports; other libraries in the SDK support the same formats unless noted otherwise.","sidebar":"docs"},"sdk-repos/c2pa-cpp/docs/usage":{"id":"sdk-repos/c2pa-cpp/docs/usage","title":"Using the C++ library","description":"To use this library, include the header file in your code as follows:","sidebar":"docs"},"sdk-repos/c2pa-cpp/docs/working-stores":{"id":"sdk-repos/c2pa-cpp/docs/working-stores","title":"Manifests, working stores, and archives","description":"This table summarizes the fundamental entities that you work with when using the CAI SDK.","sidebar":"docs"},"sdk-repos/c2pa-cpp/readme":{"id":"sdk-repos/c2pa-cpp/readme","title":"CAI SDK C++ library","description":"The c2pa-cpp repository implements C++ APIs that:","sidebar":"docs"},"sdk-repos/c2pa-ios-example/README":{"id":"sdk-repos/c2pa-ios-example/README","title":"C2PA iOS Example","description":"Overview","sidebar":"docs"},"sdk-repos/c2pa-js/packages/c2pa-node/README":{"id":"sdk-repos/c2pa-js/packages/c2pa-node/README","title":"CAI Node.js library","description":"@contentauth/c2pa-node is a Node.js library in the c2pa-js monorepo that can:","sidebar":"docs"},"sdk-repos/c2pa-js/packages/c2pa-types/README":{"id":"sdk-repos/c2pa-js/packages/c2pa-types/README","title":"c2pa-types","description":"Exports TypeScript types used by c2pa-web that are auto-generated from c2pa-rs structs.","sidebar":"docs"},"sdk-repos/c2pa-js/packages/c2pa-utilities/README":{"id":"sdk-repos/c2pa-js/packages/c2pa-utilities/README","title":"c2pa-utilities","description":"c2pa-utilities is a home for shared utilities and libraries used by both c2pa-web and c2pa-node. Most clients will get these transitively as a dependency of one of those two packages, but @contentauth/c2pa-utilities is also published standalone for cases where you want to reuse a piece of it directly.","sidebar":"docs"},"sdk-repos/c2pa-js/packages/c2pa-wasm/README":{"id":"sdk-repos/c2pa-js/packages/c2pa-wasm/README","title":"c2pa-wasm","description":"The WebAssembly wrapper for c2pa-rs that powers c2pa-web, built with wasm-bindgen. While these bindings can be used directly, most users will prefer the convenience of c2pa-web.","sidebar":"docs"},"sdk-repos/c2pa-js/packages/c2pa-web/README":{"id":"sdk-repos/c2pa-js/packages/c2pa-web/README","title":"c2pa-web","description":"The SDK for interacting with C2PA metadata on the web.","sidebar":"docs"},"sdk-repos/c2pa-js/README":{"id":"sdk-repos/c2pa-js/README","title":"CAI JavaScript library","description":"Overview","sidebar":"docs"},"sdk-repos/c2pa-js/supported-formats":{"id":"sdk-repos/c2pa-js/supported-formats","title":"Supported file formats","description":"The following table summarizes the supported media (asset) file formats. This information is based on what the Rust library supports; other libraries in the SDK support the same formats unless noted otherwise.","sidebar":"docs"},"sdk-repos/c2pa-python-example/readme":{"id":"sdk-repos/c2pa-python-example/readme","title":"C2PA Python example","description":"Overview","sidebar":"docs"},"sdk-repos/c2pa-python/docs/class-diagram":{"id":"sdk-repos/c2pa-python/docs/class-diagram","title":"Class diagram","description":"This diagram shows the public classes in the Python library and their relationships.","sidebar":"docs"},"sdk-repos/c2pa-python/docs/context-settings":{"id":"sdk-repos/c2pa-python/docs/context-settings","title":"Context and settings","de
1scription":"This guide shows you how to configure the C2PA Python SDK using the Context API with declarative settings in JSON format.","sidebar":"docs"},"sdk-repos/c2pa-python/docs/examples":{"id":"sdk-repos/c2pa-python/docs/examples","title":"Python example code","description":"The examples directory contains some small examples of using this Python library.","sidebar":"docs"},"sdk-repos/c2pa-python/docs/intents":{"id":"sdk-repos/c2pa-python/docs/intents","title":"Using Builder intents","description":"Intents enable validation, add the actions required by the C2PA specification, and help prevent invalid operations when using a Builder. Intents are about the operation (create, edit, update) executed on the source asset.","sidebar":"docs"},"sdk-repos/c2pa-python/docs/release-notes":{"id":"sdk-repos/c2pa-python/docs/release-notes","title":"Release notes","description":"Version 0.33.0","sidebar":"docs"},"sdk-repos/c2pa-python/docs/selective-manifests":{"id":"sdk-repos/c2pa-python/docs/selective-manifests","title":"Selective manifest construction","description":"You can use Builder and Reader together to selectively construct manifests: keeping only the parts you need and omitting the rest. This is useful when you don\'t want to include all ingredients in a working store (for example, when some ingredient assets are not visible).","sidebar":"docs"},"sdk-repos/c2pa-python/docs/supported-formats":{"id":"sdk-repos/c2pa-python/docs/supported-formats","title":"Supported file formats","description":"The following table summarizes the supported media (asset) file formats. This information is based on what the Rust library supports; other libraries in the SDK support the same formats unless noted otherwise.","sidebar":"docs"},"sdk-repos/c2pa-python/docs/usage":{"id":"sdk-repos/c2pa-python/docs/usage","title":"Using the Python library","description":"This package works with media files in the supported formats.","sidebar":"docs"},"sdk-repos/c2pa-python/docs/working-stores":{"id":"sdk-repos/c2pa-python/docs/working-stores","title":"Manifests, working stores, and archives","description":"This table summarizes the fundamental entities that you work with when using the CAI SDK.","sidebar":"docs"},"sdk-repos/c2pa-python/readme":{"id":"sdk-repos/c2pa-python/readme","title":"C2PA Python library","description":"The c2pa-python repository provides a Python library that can:","sidebar":"docs"},"sdk-repos/c2pa-rs/docs/cawg-identity":{"id":"sdk-repos/c2pa-rs/docs/cawg-identity","title":"Using the CAWG identity assertion","description":"The CAI Rust library includes an implementation of the Creator Assertions Working Group (CAWG) identity assertion specification.","sidebar":"docs"},"sdk-repos/c2pa-rs/docs/context-settings":{"id":"sdk-repos/c2pa-rs/docs/context-settings","title":"Configuring SDK settings","description":"This guide shows you how to configure the C2PA Rust library using the Context API with declarative settings in JSON format.","sidebar":"docs"},"sdk-repos/c2pa-rs/docs/embeddable-api":{"id":"sdk-repos/c2pa-rs/docs/embeddable-api","title":"Embeddable signing API","description":"[!WARNING]","sidebar":"docs"},"sdk-repos/c2pa-rs/docs/instanceid-behavior":{"id":"sdk-repos/c2pa-rs/docs/instanceid-behavior","title":"C2PA SDK instanceID behavior","description":"The C2PA claim\'s instanceID field is intended to bind the claim to a specific incarnation of an asset. When the asset contains XMP, xmpMM:InstanceID is the canonical source of this value and must agree with the claim.","sidebar":"docs"},"sdk-repos/c2pa-rs/docs/intents":{"id":"sdk-repos/c2pa-rs/docs/intents","title":"Intents","description":"Intents tell the C2PA Builder what kind of manifest you are creating. They enable validation, add required default actions, and help prevent invalid operations.","sidebar":"docs"},"sdk-repos/c2pa-rs/docs/progress_callbacks":{"id":"sdk-repos/c2pa-rs/docs/progress_callbacks","title":"Progress and cancellation API","description":"Overview","sidebar":"docs"},"sdk-repos/c2pa-rs/docs/redaction":{"id":"sdk-repos/c2pa-rs/docs/redaction","title":"Redaction","description":"Redaction removes an assertion from a prior manifest in the C2PA claim chain.","sidebar":"docs"},"sdk-repos/c2pa-rs/docs/release-notes":{"id":"sdk-repos/c2pa-rs/docs/release-notes","title":"Release notes","de
1scription":"Refer to the CHANGELOG for detailed changes derived from Git commit history.","sidebar":"docs"},"sdk-repos/c2pa-rs/docs/release-process":{"id":"sdk-repos/c2pa-rs/docs/release-process","title":"Open-source release process","description":"This document describes how we release c2pa-rs and its related crates, and the branching model that supports it. It applies to the 0.x (pre-1.0) phase; we will revisit it as we approach a 1.0 stability commitment.","sidebar":"docs"},"sdk-repos/c2pa-rs/docs/supported-formats":{"id":"sdk-repos/c2pa-rs/docs/supported-formats","title":"Supported file formats","description":"The following table summarizes the supported media (asset) file formats. This information is based on what the Rust library supports; other libraries in the SDK support the same formats unless noted otherwise.","sidebar":"docs"},"sdk-repos/c2pa-rs/docs/usage":{"id":"sdk-repos/c2pa-rs/docs/usage","title":"Using the Rust library","description":"Supported platforms","sidebar":"docs"},"sdk-repos/c2pa-rs/docs/working-stores":{"id":"sdk-repos/c2pa-rs/docs/working-stores","title":"Working stores and archives","description":"Many workflows need to pause and resume manifest authoring or reuse previously validated ingredients. Working stores and C2PA archives (or simply archives) provide a standard way to save and restore this state of a Builder.","sidebar":"docs"},"sdk-repos/c2pa-rs/readme":{"id":"sdk-repos/c2pa-rs/readme","title":"CAI Rust library","description":"Tier 1A Tier 1B Tier 2 Latest Version docs.rs codecov","sidebar":"docs"},"sdk-repos/c2pa-swift/README":{"id":"sdk-repos/c2pa-swift/README","title":"C2PA Swift","description":"Tests","sidebar":"docs"},"sdk-repos/c2patool/docs/cawg_x509_signing":{"id":"sdk-repos/c2patool/docs/cawg_x509_signing","title":"Using an X.509 certificate for CAWG signing","description":"c2patool supports two ways to attach a CAWG X.509 identity assertion to a signed asset:","sidebar":"docs"},"sdk-repos/c2patool/docs/changelog":{"id":"sdk-repos/c2patool/docs/changelog","title":"Changelog","description":"All notable changes to this project will be documented in this file.","sidebar":"docs"},"sdk-repos/c2patool/docs/manifest":{"id":"sdk-repos/c2patool/docs/manifest","title":"Manifest definition file","description":"C2PA Tool reads a manifest definition JSON file with a .json extension. This file defines a single manifest to be added to an asset\'s manifest store.","sidebar":"docs"},"sdk-repos/c2patool/docs/signing":{"id":"sdk-repos/c2patool/docs/signing","title":"Signing assets with C2PA Tool","description":"C2PA assets may carry two independent signatures:","sidebar":"docs"},"sdk-repos/c2patool/docs/supported-formats":{"id":"sdk-repos/c2patool/docs/supported-formats","title":"Supported file formats","description":"The following table summarizes the supported media (asset) file formats. This information is based on what the Rust library supports; other libraries in the SDK support the same formats unless noted otherwise.","sidebar":"docs"},"sdk-repos/c2patool/docs/usage":{"id":"sdk-repos/c2patool/docs/usage","title":"Using C2PA Tool","description":"C2PA Tool\'s command-line syntax is:","sidebar":"docs"},"sdk-repos/c2patool/readme":{"id":"sdk-repos/c2patool/readme","title":"C2PA command line tool","description":"CI Latest Version codecov","sidebar":"docs"},"sdk-repos/trustmark/c2pa/README":{"id":"sdk-repos/trustmark/c2pa/README","title":"Using TrustMark with C2PA","description":"Open standards such as Content Credentials, developed by the Coalition for Content Provenance and Authenticity(C2PA), describe ways to encode information about an image\u2019s history or provenance, such as how and when it was made. This information is usually carried within the image\u2019s metadata.","sidebar":"docs"},"sdk-repos/trustmark/FAQ":{"id":"sdk-repos/trustmark/FAQ","title":"FAQ","description":"Frequently asked questions for general users and implementors of the TrustMark image watermarking algorithm described in the official paper and code repository."},"sdk-repos/trustmark/js/README":{"id":"sdk-repos/trustmark/js/README","title":"TrustMark JavaScript example","description":"The js directory contains an example JavaScript implementation of decoding TrustMark watermarks embedded in images. It provides a minimal example of a client-side JavaScript application, would could be applied, for example, to a browser extension.","sidebar":"docs"},"sdk-repos/trustmark/python/CONFIG":{"id":"sdk-repos/trustmark/python/CONFIG","title":"Configuring TrustMark","description":"Overview","sidebar":"docs"},"sdk-repos/trustmark/README":{"id":"sdk-repos/trustmark/README","title":"TrustMark","description":"This repository contains the official, open source implementation of TrustMark watermarking for the Content Authenticity Initiative (CAI) as described
1in:","sidebar":"docs"},"sdk-repos/trustmark/rust/crates/trustmark-cli/README":{"id":"sdk-repos/trustmark/rust/crates/trustmark-cli/README","title":"TrustMark CLI","description":"The Rust implementation includes a CLI wrapper for the trustmark crate.","sidebar":"docs"},"sdk-repos/trustmark/rust/README":{"id":"sdk-repos/trustmark/rust/README","title":"TrustMark \u2014 Rust implementation","description":"An implementation in Rust of TrustMark watermarking, as described in TrustMark - Universal Watermarking for Arbitrary Resolution Images (arXiv:2311.18297) by Tu Bui, Shruti Agarwal, and John Collomosse .","sidebar":"docs"},"signing/get-cert":{"id":"signing/get-cert","title":"Getting a signing certificate","description":"Best practices for handling keys and certificates are beyond the scope of this documentation. Always protect your private keys with the highest level of security; for example, never share them through insecure channels such as email.","sidebar":"docs"},"signing/local-signing":{"id":"signing/local-signing","title":"Signing with local credentials","description":"Overview","sidebar":"docs"},"signing/prod-cert":{"id":"signing/prod-cert","title":"Using a signing certificate in production","description":"Accessing a private key and certificate directly from the local file system is fine during development, but doing so in production is not secure. Instead use one or both of:","sidebar":"docs"},"signing/signing-and-certs":{"id":"signing/signing-and-certs","title":"Signing and certificates","description":"Be sure to read Getting started for some basic background on public-key infrastructure (PKI) technology, certificates, and signing manifests.","sidebar":"docs"},"signing/test-certs":{"id":"signing/test-certs","title":"Using test certificates","description":"The CAI SDK does not allow you to use a self-signed certificate to sign a manifest.","sidebar":"docs"},"tasks/archives":{"id":"tasks/archives","title":"Using working stores and archives","description":"Working stores and archives provide a standard way to save and restore the state of a Builder:","sidebar":"docs"},"tasks/build":{"id":"tasks/build","title":"Adding and signing a manifest","description":"","sidebar":"docs"},"tasks/get-resources":{"id":"tasks/get-resources","title":"Getting resources from a manifest","description":"Manifest data can include binary resources such as thumbnail and icon images which are referenced by JUMBF URIs in manifest data.","sidebar":"docs"},"tasks/index":{"id":"tasks/index","title":"Working with the SDK","description":"At a high level, using the CAI open-source SDK is the same in every language, but how you accomplish each task is specific to the language you\'re using.","sidebar":"docs"},"tasks/intents":{"id":"tasks/intents","title":"Using builder intents","description":"Intents tell the Builder what kind of manifest you are creating. They enable validation, add required default actions, and help prevent invalid operations.","sidebar":"docs"},"tasks/read":{"id":"tasks/read","title":"Reading and verifying manifest data","description":"","sidebar":"docs"},"tasks/settings":{"id":"tasks/settings","title":"Configuring SDK settings with Context","description":"Regardless of which language you\'re working in, you use the Context and Settings classes to control SDK behavior including verification, trust anchors, thumbnails, signing, and more:","sidebar":"docs"}}}}')}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.