Skip to content

Commit 11073b8

Browse files
committed
Polish edits, check links
1 parent 469e974 commit 11073b8

File tree

6 files changed

+25
-24
lines changed

6 files changed

+25
-24
lines changed

docs/signing/get-cert.md

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,7 @@ To sign manifest claims, you must have an X.509 v3 security certificate and key
1111

1212
## Certificate authorities (CAs)
1313

14-
To create or modify Content Credentials, you must purchase a signing certificate from a certificate authority (CA).
15-
16-
There are many CAs that issue certificates. Some popular ones include:
14+
You must purchase a signing certificate from a certificate authority (CA). There are many CAs that issue certificates. Some popular ones include:
1715

1816
- GlobalSign: [S/MIME email signing](https://shop.globalsign.com/en/secure-email), [document signing](https://shop.globalsign.com/en/document-signing)
1917
- IdenTrust: [S/MIME email signing](https://www.identrust.com/digital-certificates/secure-email-smime), [document signing](https://www.identrust.com/digital-certificates/document-signing)
@@ -49,7 +47,7 @@ You sign the CSR with your private key; this proves to the CA that you have cont
4947

5048
## Certificate requirements
5149

52-
A signing certificate and key (credentials) must conform to the requirements in the [C2PA specification Trust Model section](https://c2pa.org/specifications/specifications/2.1/specs/C2PA_Specification.html#_trust_model). The certificate must:
50+
A signing certificate and key (credentials) must conform to the requirements in the [C2PA specification X.509 Certificates section](https://c2pa.org/specifications/specifications/2.1/specs/C2PA_Specification.html#x509_certificates); specifically, it must:
5351

5452
- Follow the public key infrastructure (PKI) X.509 V3 specification.
5553
- Have the Key Usage (KU) extension, which must be marked as critical.
@@ -70,6 +68,8 @@ If you want the C2PA [Verify tool](https://verify.contentauthenticity.org/) to d
7068

7169
The following table describes the signature algorithms and types that the CAI SDK supports. You must supply credentials (certificates and keys) that correspond to the signing algorithm (`signatureAlgorithm`). Signing/validation will fail if the the supplied credentials don't support the signature type.
7270

71+
This table is provided for convenience, and is based on information in the [C2PA specification](https://c2pa.org/specifications/specifications/2.1/specs/C2PA_Specification.html#x509_certificates). The specification is authoritative; refer to it for more details. The C2PA specification also covers two other certificates for timestamp responses and OCSP certificate revocation, which are not covered here.
72+
7373
| Certificate `signatureAlgorithm` | Description | Recommended signature type | RFC Reference |
7474
| -------------------------------- | ------------ | -------------------------- | ------------- |
7575
| `ecdsa-with-SHA256` | ECDSA with SHA-256 | ES256<sup>\*</sup> | [RFC 5758 section 3.2](https://www.rfc-editor.org/rfc/rfc5758.html#section-3.2) |
@@ -85,8 +85,6 @@ The following table describes the signature algorithms and types that the CAI SD
8585

8686
<sup>*</sup> ES256, ES384, and ES512 signatures must be in IEEE P1363 format.
8787

88-
---
8988

90-
The information in this table is based on the [C2PA specification Trust Model section](https://c2pa.org/specifications/specifications/2.1/specs/C2PA_Specification.html#_trust_model). The C2PA specification also covers two other certificates for timestamp responses and OCSP certificate revocation, which are not covered here.
9189

9290

docs/signing/index.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@ Be sure to read [Getting started](getting-started.mdx#signing-and-certificates)
99

1010
As you're developing an application that uses the CAI SDK, there are three ways to sign manifest claims, depending on where you are in your development process:
1111
1. **Initial prototyping and development**: Use the test certificates and keys included with the SDK libraries to sign claims. These certs and keys are provided for convenience, but aren't valid for actual signing. For more information, see [Using test certificates](test-certs.md).
12-
1. **Local/internal testing**: Once your code is working with the test certs and keys:
13-
- [Purchase your own certificate](get-cert.md) from a certificate authority (CA).
14-
- Then your application can [use the certificate and key *locally*](local-signing.md) (directly from the file system) to sign manifest claims; however, this is NOT safe in production.
12+
1. **Local/internal testing**: Once your code is working with the test certs and keys, you can move on to:
13+
- [Purchase your own certificate](get-cert.md) from a certificate authority (CA).
14+
- Change your application to [use the certificate and key *locally*](local-signing.md) (directly from the file system) to sign manifest claims; however, this is NOT safe in production.
1515
1. **Production testing/deployment**: To secure your private key for use in a publicly-accessible production application, store it in a hardware security module (HSM) or key management service (KMS) where your application can access it securely .
1616

1717
:::note

docs/signing/local-signing.md

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,7 @@ Trust lists connect the end-entity certificate that signed a manifest back to th
1313

1414
The simplest way to add a C2PA manifest to an asset file and sign it is by using C2PA Tool (`c2patool`). You can run C2PA Tool manually from the command line (for example, during development) and more generally from any executable program that can call out to the shell, such as a Node.js application as shown in the [c2patool Node.js service example](../c2pa-node-example).
1515

16-
Similarly, using the Rust SDK, you can [add a manifest to an asset file](https://docs.rs/c2pa/latest/c2pa/#example-adding-a-manifest-to-a-file), referencing the certificate and private key file. For a simple example of creating and signing a manifest from a C program, see the [c2c2pa repository](https://github.com/contentauth/c2c2pa).
17-
18-
The prerelease libraries for [Node.js](../c2pa-node), [Python](../c2pa-python), and [C++/C](../c2pa-c) can also add and sign a manifest.
16+
Similarly, using the Rust SDK, you can [add a manifest to an asset file](https://docs.rs/c2pa/latest/c2pa/#example-adding-a-manifest-to-a-file), referencing the certificate and private key file. The prerelease libraries for [Node.js](../c2pa-node), [Python](../c2pa-python), and [C++/C](../c2pa-c) can also add and sign a manifest.
1917

2018
:::warning Warning
2119
Accessing a private key and certificate directly from the file system is fine during development, but doing so in production is not secure. Instead use a Key Management Service (KMS) or a hardware security module (HSM) to access the certificate and key; For more information, see [Using a certificate in production](prod-cert.mdx).

docs/signing/prod-cert.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ Some useful references for handling keys and certificates include:
2222

2323
## Pre-production steps
2424

25-
Because using a KMS can be complex, you may want to start by using a local "mock" service such as LocalStack (for Amazon KMS). Doing this enables you to test your code before you set up a production KMS.
25+
Because using a KMS can be complex, you may want to start by using a local "mock" service (such as LocalStack for Amazon KMS) as illustrated in the [c2pa-python-example](c2pa-python-example/readme.md#using-localstack). Doing this enables you to test your code before you set up a production KMS.
2626

2727
You can also create a self-signed certificate for development purposes. The resulting manifests signed with this certificate won't be trusted, but you can use it to run the application to see how it works before purchasing a real certificate from a CA.
2828

docs/signing/test-certs.md

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,18 @@ id: test-certs
33
title: Using test certificates
44
---
55

6-
For development and testing, C2PA Tool, the Rust library, and the CAI prerelease libraries include one or more [test certificates](signing-certs.md#test-certificates) and private keys for use during development. While these test certificates and keys are useful during development and testing, for production deployment you must use your own private key and certificate.
7-
8-
The [Rust library `sdk/tests/fixtures/certs/` folder](https://github.com/contentauth/c2pa-rs/tree/main/sdk/tests/fixtures/certs) contains certificates and signing keys for many of the supported signature types [described below](prod-cert.mdx#signature-types).
9-
10-
The CAI prerelease libraries also provide a subset of test certificates in each repository's `tests/fixtures` folder. The Node.js library even provides a [`CreateTestSigner()`](https://github.com/contentauth/c2pa-node/blob/main/docs/README.md#createtestsigner) convenience function to create a local signer instance using the test certificate.
11-
126
The CAI SDK does not allow you to use a self-signed certificate to sign a manifest.
137

8+
For initial development and testing, the SDK provides example *test certificates* and private keys:
9+
- The [Rust library `sdk/tests/fixtures/certs/` folder](https://github.com/contentauth/c2pa-rs/tree/main/sdk/tests/fixtures/certs) contains certificates and signing keys for many of the supported [signature types](get-cert.md#signature-types).
10+
- The prerelease libraries (Node.js, Python, and C++) provide a subset of test certificates in each repository's `tests/fixtures` folder. The Node.js library even provides a [`CreateTestSigner()`](https://github.com/contentauth/c2pa-node/blob/main/docs/README.md#createtestsigner) convenience function to create a local signer instance using the test certificate.
11+
1412
:::warning Warning
15-
The test certificates are for use during development and testing only. Do not use them in production!
13+
While these test credentials are useful during development, you must [get your own certificate](get-cert.md) and use your own private key for production deployment.
1614
:::
1715

18-
Although not recommended due to complexity and difficulty, you can create your own certificates for development and testing. Follow the requirements in the C2PA Technical Specification [Credential Types](https://c2pa.org/specifications/specifications/1.4/specs/C2PA_Specification.html#_credential_types) and [Digital Signatures](https://c2pa.org/specifications/specifications/1.4/specs/C2PA_Specification.html#_digital_signatures) sections.
16+
Although not recommended due to complexity and difficulty, you can create your own certificates for development and testing. Follow the requirements in the C2PA Technical Specification [X.509 Certificates](https://c2pa.org/specifications/specifications/2.1/specs/C2PA_Specification.html#x509_certificates) and [Digital Signatures](https://c2pa.org/specifications/specifications/2.1/specs/C2PA_Specification.html#_digital_signatures) sections.
17+
18+
For manifest claims signed with one of the test certificates, the C2PA Verify tool will display the message "The Content Credential issuer couldn't be recognized." See [Using the Verify tool](../verify.mdx#signing-information) for more information.
19+
1920

docs/verify.mdx

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -166,9 +166,9 @@ For example, suppose you downloaded a file from Adobe Stock and renamed it `my_s
166166
}
167167
```
168168

169-
**Signing information**
169+
#### Signing information
170170

171-
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 in the SDK, then Verify displays "Unrecognized" at the top of this section with this notice:
171+
If the Content Credential was signed by a certificate that is NOT on the [known certificate list](verify-known-cert-list), such as one of the SDK's [test certificates](signing/test-certs.md), then Verify displays "Unrecognized" at the top of this section with this notice:
172172

173173
import verify_unknown_source from '../static/img/verify-cc-unknown-source.png';
174174

@@ -177,7 +177,11 @@ import verify_unknown_source from '../static/img/verify-cc-unknown-source.png';
177177
style={{ width: '283px', display: 'block', margin: '10px auto' }}
178178
/>
179179

180-
However, if the Content Credential was signed by a certificate on the [known certificate list](verify-known-cert-list), then this section displays the name of 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.
180+
However, if the Content Credential was signed by a certificate on the [known certificate list](verify-known-cert-list), then this section displays the name of the issuer of the claim signature from the `signature_info.issuer` property in the active manifest, as shown in the example snippet below.
181+
182+
:::note
183+
This section 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.
184+
:::
181185

182186
For signers on the known certificate list, 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.
183187

0 commit comments

Comments
 (0)