The Basic Constraints extension must follow RFC 5280 section 4.2.1.9. The issuerUniqueID and subjectUniqueID optional fields of the TBSCertificate sequence must not be present. The private credential store shall only allow trust in signer certificates directly entries in the private credential store cannot issue credentials and shall not be included as trust anchors during validation. The private credential store shall only apply to validating signed C2PA manifests, and shall not apply to validating time-stamps. Credentials in the private credential store may be self-issued, and may be anonymous or pseudonymous (that is, containing no identifying information about the signer, or information that only identifies by pseudonym). For example, a journalist may choose to add sources to their private credential store to facilitate accepting and validating media with C2PA provenance data attached, even though the sources themselves would have no reason to be on an externally-maintained trust list used broadly by the general public. This store is intended as an "address book" of credentials they have chosen to trust based on an out-of-band relationship. The algorithm used shall be determined using the `alg` field from the corresponding entry in the `merkle` field array in the BMFF hash structure.Ī validator may also allow the user to create and maintain a private credential store of signing credentials for each credential type. Null hashes are not included in this array. if the manifest itself contains the leaf-most row of the Merkle tree. Note that this array may not be present, e.g. ? "hashes":, An ordered array representing the set of additional hashes required to reach a hash in the Merkle tree specified in the manifest from leaf-most (peer of this node) to root-most (child of node in manifest).
"location": int, Zero-based index into the leaf-most Merkle tree row corresponding to this 'mdat' box or portion of this 'mdat' box
"localId": int, A local id indicating which 'mdat' box this entry pertains to. "uniqueId": int, A unique integer used to differentiate local ids a portion of an 'mdat' box when a Merkle tree is used", The data structure used to store sufficient information to validate a single 'mdat' box or ? "Sec-CH-UA":, A human readable string naming the claim_generator ? "claim_generator_hints": generator-hints-map, size (1.max-tstr-length), A string identifying the algorithm used to compute all soft binding assertions listed in this claim unless otherwise overridden, taken from the C2PA soft binding algorithm identifier registry." This provides the value for the 'alg' field in data-hash and hashed-uri structures contained in this claim size (1.max-tstr-length), A string identifying the cryptographic hash algorithm used to compute all data hash assertions listed in this claim unless otherwise overridden, taken from the C2PA data hash algorithm identifier registry. ? "redacted_assertions":, List of hashed URI references to the assertions of ingredient manifests being redacted
size (1.max-tstr-length), name of the asset, size (1.max-tstr-length), uniquely identifies a specific version of an asset "dc:format": tstr, media type of the asset "signature": jumbf-uri-type, JUMBF URI reference to the signature of this claim
"claim_generator": tstr, A User-Agent string formatted as per, for including the name and version of the claims generator that created the claim "description": "CBOR byte string containing the hash value" If no value is present in any of these places, this structure is invalid there is no default." If both are present, the field in this structure is used. If this field is absent, the hash algorithm is taken from an enclosing structure as defined by that structure. "description": "A string identifying the cryptographic hash algorithm used to compute all hashes in this claim, taken from the C2PA hash algorithm identifier list. "description": "The data structure used to store a reference to a local URL and its hash", Recursively Validating Integrity of Ingredients Validate the Credential Revocation Information Embedding a Reference to the Active Manifest