From c741b7e74cf6d725eb89d1c8a42fc4f3a7638723 Mon Sep 17 00:00:00 2001 From: Rand McKinney Date: Wed, 23 Oct 2024 14:57:26 -0700 Subject: [PATCH 1/4] Update images of error messages for validation etc --- docs/trust-list.mdx | 2 +- docs/verify.mdx | 46 ++++++++++++++++++++++-- static/img/verify-cc-unknown-source.png | Bin 17231 -> 25976 bytes static/img/verify-validation-error.png | Bin 0 -> 24085 bytes 4 files changed, 44 insertions(+), 4 deletions(-) create mode 100644 static/img/verify-validation-error.png diff --git a/docs/trust-list.mdx b/docs/trust-list.mdx index 53ee9d61..29fa9a61 100644 --- a/docs/trust-list.mdx +++ b/docs/trust-list.mdx @@ -23,7 +23,7 @@ The C2PA intends to publish an official public list of known certificates. Until The [contentcredentials.org](https://contentcredentials.org/) site hosts the following files that it uses to [validate signing certificates](https://c2pa.org/specifications/specifications/2.0/specs/C2PA_Specification.html#_c2pa_signers). Together, these files form the _temporary known certificate list_: - **The temporary end-entity certificate list** in https://contentcredentials.org/trust/allowed.pem consists of end-entity certificates. If the certificate is on this list, it is considered "known." To reduce bandwidth consumption, a [version with SHA-256 hashes](https://contentcredentials.org/trust/allowed.sha256.txt) of the certificates is also available. -- **The temporary known anchor list** in https://contentcredentials.org/trust/anchors.pem contains the list of known anchor certificates. If an end-entity [certificate's chain](../getting-started.mdx#signing-and-certificates) can be traced back to an anchor certificate on this list, the certificate is considered "known." +- **The temporary known anchor list** in https://contentcredentials.org/trust/anchors.pem contains the list of known anchor certificates. If an end-entity [certificate's chain](getting-started.mdx#signing-and-certificates) can be traced back to an anchor certificate on this list, the certificate is considered "known." - **The configuration file**, https://contentcredentials.org/trust/store.cfg, specifies the [Extended Key Usage (EKU)](https://datatracker.ietf.org/doc/html/rfc9336) values accepted for end-entity certificates. An end-entity certificate must have at least one of the EKUs in this list to be valid. ## Using the known certificate list diff --git a/docs/verify.mdx b/docs/verify.mdx index 75911632..9d19aa3a 100644 --- a/docs/verify.mdx +++ b/docs/verify.mdx @@ -170,6 +170,15 @@ For example, suppose you downloaded a file from Adobe Stock and renamed it `my_s This section displays the the issuer of the claim signature from the `signature_info.issuer` property in the active manifest, as shown in the example snippet below. It shows the organization name only if the signing certificate includes the "O" or [Organization Name attribute](https://www.alvestrand.no/objectid/2.5.4.10.html) (OID value 2.5.4.10) in the certificate's distinguished name information. +If the Content Credential was signed by a certificate that is NOT on the [known certificate list](verify-known-cert-list), such as the CAI test certificate built in to C2PA Tool, then Verify displays this notice: + +import verify_unknown_source from '../static/img/verify-cc-unknown-source.png'; + + + If the Content Credential was signed by a certificate on the [known certificate list](verify-known-cert-list), then this section also displays the time of the claim signature from the `signature_info.time` property in the active manifest, as shown in the example snippet below. The date is converted from UTC to the local time zone. ```json @@ -182,15 +191,46 @@ If the Content Credential was signed by a certificate on the [known certificate If the issuer string is too long, then the date might be truncated or not shown at all. If so, refer to the [**About this Content Credential**](#about-this-content-credential) section for the full date. -If the Content Credential was signed by a certificate that is NOT on the [known certificate list](verify-known-cert-list), then Verify displays this notice: +### Validation status -import verify_unknown_source from '../static/img/verify-cc-unknown-source.png'; +If the manifest has validation errors, then Verify displays this notice: + +import verify_validation_error from '../static/img/verify-validation-error.png'; +Verify displays this warning if the `validation_status` array contains any elements. For example, a [this image](https://contentcredentials.org/verify?source=https://c2pa.org/public-testfiles/image/jpeg/adobe-20220124-E-dat-CA.jpg) with a hard binding hash mismatch error, as shown in [this manifest store](https://c2pa.org/public-testfiles/image/jpeg/manifests/adobe-20220124-E-dat-CA/manifest_store.json): + +``` +"validation_status": [ + { + "code": "assertion.dataHash.mismatch", + "url": "self#jumbf=/c2pa/contentauth:urn:uuid:04cdf4ec-f713-4e47-a8d6-7af56501ce4b/c2pa.assertions/c2pa.hash.data", + "explanation": "asset hash error, name: jumbf manifest, error: hash verification( Hashes do not match )" + } + ] +``` + +Another example that can result in this message is [this image](https://contentcredentials.org/verify?source=https://c2pa.org/public-testfiles/image/jpeg/adobe-20220124-E-clm-CAICAI.jpg) with a missing referenced claim, as shown in [this manifest store](https://c2pa.org/public-testfiles/image/jpeg/manifests/adobe-20220124-E-clm-CAICAI/manifest_store.json): + +``` +"validation_status": [ + { + "code": "assertion.hashedURI.mismatch", + "url": "self#jumbf=c2pa.assertions/c2pa.ingredient__1", + "explanation": "hash does not match assertion data: self#jumbf=c2pa.assertions/c2pa.ingredient__1" + }, + { + "code": "claim.missing", + "url": "self#jumbf=/c2pa/contentbeef:urn:uuid:8bb8ad50-ef2f-4f75-b709-a0e302d58019", + "explanation": "ingredient not found" + } + ] +``` + ### Credit and usage The **Credit and usage** section displays information about the asset's author and usage rights, divided into these subsections: diff --git a/static/img/verify-cc-unknown-source.png b/static/img/verify-cc-unknown-source.png index e2a7d7d2b520a3208dd76ba808b01d46dc56eb3c..78f8528788a868ea4bcf68e2713c2e13ddcf2e38 100644 GIT binary patch literal 25976 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

AO|Y+9s4Y6Bu2lACTsTDp<0bMu6c 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 diff --git a/static/img/verify-validation-error.png b/static/img/verify-validation-error.png new file mode 100644 index 0000000000000000000000000000000000000000..dbce3645cbdcfe19690314c01afe83cb7d3a5695 GIT binary patch literal 24085 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 F{{zK*_d5Up literal 0 HcmV?d00001 From 6f23c6fd2f87332aa43a7f73b6f5939b3a325231 Mon Sep 17 00:00:00 2001 From: Rand McKinney Date: Wed, 23 Oct 2024 14:57:46 -0700 Subject: [PATCH 2/4] small edit --- docs/verify.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/verify.mdx b/docs/verify.mdx index 9d19aa3a..d3d6fefa 100644 --- a/docs/verify.mdx +++ b/docs/verify.mdx @@ -214,7 +214,7 @@ Verify displays this warning if the `validation_status` array contains any eleme ] ``` -Another example that can result in this message is [this image](https://contentcredentials.org/verify?source=https://c2pa.org/public-testfiles/image/jpeg/adobe-20220124-E-clm-CAICAI.jpg) with a missing referenced claim, as shown in [this manifest store](https://c2pa.org/public-testfiles/image/jpeg/manifests/adobe-20220124-E-clm-CAICAI/manifest_store.json): +Another example that can result in this message is shown in [this image](https://contentcredentials.org/verify?source=https://c2pa.org/public-testfiles/image/jpeg/adobe-20220124-E-clm-CAICAI.jpg) with a missing referenced claim, as shown in [this manifest store](https://c2pa.org/public-testfiles/image/jpeg/manifests/adobe-20220124-E-clm-CAICAI/manifest_store.json): ``` "validation_status": [ From dd3c29124047c65c95ceb9a290f0bc58cd2da042 Mon Sep 17 00:00:00 2001 From: Rand McKinney Date: Wed, 23 Oct 2024 15:19:36 -0700 Subject: [PATCH 3/4] Update spec links to 1.4, link to validation doc --- docs/js-sdk/getting-started/overview.mdx | 4 ++-- docs/js-sdk/guides/validation.mdx | 6 +++--- docs/manifest/validation.md | 6 +++--- docs/verify.mdx | 2 +- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/js-sdk/getting-started/overview.mdx b/docs/js-sdk/getting-started/overview.mdx index bff11152..b5ad0226 100644 --- a/docs/js-sdk/getting-started/overview.mdx +++ b/docs/js-sdk/getting-started/overview.mdx @@ -44,8 +44,8 @@ Key features of the JavaScript library include: - **Developer friendly**: Full TypeScript support and robust debugging support using the [debug](https://github.com/debug-js/debug) library make integration easy. - **Performance**: The processing code of the library uses a high-performance [WebAssembly](https://developer.mozilla.org/en-US/docs/WebAssembly) binary. Additionally, the library offloads processing tasks to a configurable Web Worker pool to enable parallelization and avoid blocking a web application's main thread. - **Lazy loading and processing**: Since images can be quite large, the library inspects the start of an asset file for C2PA manifest data before requesting the entire file, [if the server supports it](../guides/hosting#range-requests). The library will download the rest of the asset only if it finds the metadata marker. Additionally, it delays loading the WebAssembly binary until it makes the first processing request. -- **Adherence to the C2PA specification**: The library strives to maintain compliance with the [C2PA specification](https://c2pa.org/specifications/specifications/1.3/specs/C2PA_Specification.html) as much as possible, and the web components follow the [C2PA user experience guidance](https://c2pa.org/specifications/specifications/1.0/ux/UX_Recommendations.html) recommendations. -- **Security and encryption**: The library handles all [validation](https://c2pa.org/specifications/specifications/1.3/specs/C2PA_Specification.html#_validation) via the [Web Crypto API](https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API) and passes any validation errors back to the client. It supports all ECDSA and RSASSA-PSS algorithms listed in the [C2PA specification](https://c2pa.org/specifications/specifications/1.3/specs/C2PA_Specification.html#_digital_signatures). +- **Adherence to the C2PA specification**: The library strives to maintain compliance with the [C2PA specification](https://c2pa.org/specifications/specifications/1.4/specs/C2PA_Specification.html) as much as possible, and the web components follow the [C2PA user experience guidance](https://c2pa.org/specifications/specifications/1.0/ux/UX_Recommendations.html) recommendations. +- **Security and encryption**: The library handles all [validation](https://c2pa.org/specifications/specifications/1.4/specs/C2PA_Specification.html#_validation) via the [Web Crypto API](https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API) and passes any validation errors back to the client. It supports all ECDSA and RSASSA-PSS algorithms listed in the [C2PA specification](https://c2pa.org/specifications/specifications/1.4/specs/C2PA_Specification.html#_digital_signatures). :::caution The JavaScript library does not currently support Ed25519 signatures. :::caution diff --git a/docs/js-sdk/guides/validation.mdx b/docs/js-sdk/guides/validation.mdx index 3b74825d..d1415481 100644 --- a/docs/js-sdk/guides/validation.mdx +++ b/docs/js-sdk/guides/validation.mdx @@ -3,11 +3,11 @@ id: validation title: Validation & errors --- -Part of processing an asset involves [validating the manifests](https://c2pa.org/specifications/specifications/1.3/specs/C2PA_Specification.html#_validation) that it contains. During validation, errors can occur in the active manifest and in ingredients. +Part of processing an asset involves [validating the manifests](https://c2pa.org/specifications/specifications/1.4/specs/C2PA_Specification.html#_validation) that it contains. During validation, errors can occur in the active manifest and in ingredients. ## Validation errors in the active manifest -When [c2pa.read](../api/c2pa.c2pa#methods) loads C2PA assets, it validates the current manifest and assigns any [failure codes](https://c2pa.org/specifications/specifications/1.3/specs/C2PA_Specification.html#_failure_codes) to the `manifestStore.validationStatus` array. +When [c2pa.read](../api/c2pa.c2pa#methods) loads C2PA assets, it validates the current manifest and assigns any [failure codes](https://c2pa.org/specifications/specifications/1.4/specs/C2PA_Specification.html#_failure_codes) to the `manifestStore.validationStatus` array. Manifest validation errors can occur when: @@ -17,7 +17,7 @@ Manifest validation errors can occur when: ## Validation errors in ingredients -[Ingredients](../../introduction#key-concepts) are validated when they are imported into an asset. The results of this are stored in the manifest in the ingredient's [`validationStatus`](https://c2pa.org/specifications/specifications/1.3/specs/C2PA_Specification.html#_existing_manifests) object, which contains both [success](https://c2pa.org/specifications/specifications/1.3/specs/C2PA_Specification.html#_success_codes) and [failure](https://c2pa.org/specifications/specifications/1.3/specs/C2PA_Specification.html#_failure_codes) codes that represent the results of all of the validation checks that took place. +[Ingredients](../../introduction#key-concepts) are validated when they are imported into an asset. The results of this are stored in the manifest in the ingredient's [`validationStatus`](https://c2pa.org/specifications/specifications/1.4/specs/C2PA_Specification.html#_existing_manifests) object, which contains both [success](https://c2pa.org/specifications/specifications/1.4/specs/C2PA_Specification.html#_success_codes) and [failure](https://c2pa.org/specifications/specifications/1.4/specs/C2PA_Specification.html#_failure_codes) codes that represent the results of all of the validation checks that took place. Access validation errors in ingredients in JavaScript code as follows: diff --git a/docs/manifest/validation.md b/docs/manifest/validation.md index 3f6857b1..ed20109c 100644 --- a/docs/manifest/validation.md +++ b/docs/manifest/validation.md @@ -7,7 +7,7 @@ Processing an asset includes [validating the manifests](https://c2pa.org/specifi ## Validation errors in manifests -When you load an asset, all the manifests in the manifest store are validated and any [failure codes](https://c2pa.org/specifications/specifications/1.3/specs/C2PA_Specification.html#_failure_codes) are assigned to the `validation_status` array. Inspect the array to find the validation errors. Validation returns ONLY error codes; success is not explicitly indicated. +When you load an asset, all the manifests in the manifest store are validated and any [failure codes](https://c2pa.org/specifications/specifications/1.4/specs/C2PA_Specification.html#_failure_codes) are assigned to the `validation_status` array. Inspect the array to find the validation errors. Validation returns ONLY error codes; success is not explicitly indicated. Manifest validation errors can occur, for example, when: @@ -27,7 +27,7 @@ Only errors that are not already recorded in the `validation_status` of an ingre ## Error status codes -The following table describes some common validation error status codes. Refer to the [C2PA Technical Specification](https://c2pa.org/specifications/specifications/1.3/specs/C2PA_Specification.html#_failure_codes) for the full list. +The following table describes some common validation error status codes. Refer to the [C2PA Technical Specification](https://c2pa.org/specifications/specifications/1.4/specs/C2PA_Specification.html#_failure_codes) for the full list. | Validation Status Code| Description | Type of URI | | --------------------- | ------------ | ----------- | @@ -47,7 +47,7 @@ Validation error status codes can contain JUMBF URIs that reference assertions o - **Assertion URI**: A URI like `self#jumbf=c2pa.assertions/` where `` is either `stds.schema-org.*` or `c2pa.*`. - **Signature Box URI**: A URI like `self#jumbf=c2pa.signature`. -For more information, see the [C2PA Technical Specification](https://c2pa.org/specifications/specifications/1.3/specs/C2PA_Specification.html#_uri_references). +For more information, see the [C2PA Technical Specification](https://c2pa.org/specifications/specifications/1.4/specs/C2PA_Specification.html#_uri_references).