| // Copyright 2026 Google LLC | |
| // | |
| // Licensed under the Apache License, Version 2.0 (the "License"); | |
| // you may not use this file except in compliance with the License. | |
| // You may obtain a copy of the License at | |
| // | |
| // https://www.apache.org/licenses/LICENSE-2.0 | |
| // | |
| // Unless required by applicable law or agreed to in writing, software | |
| // distributed under the License is distributed on an "AS IS" BASIS, | |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| // See the License for the specific language governing permissions and | |
| // limitations under the License. | |
| // | |
| edition = "2024"; | |
| package credentio; | |
| import "cbor/tags.proto"; | |
| import "proto/hashed_uri.proto"; | |
| // Based on `multi-asset-hash-map`: | |
| // https://spec.c2pa.org/specifications/specifications/2.4/specs/C2PA_Specification.html#_general_box_hash. | |
| message MultiAssetHashAssertion { | |
| repeated MultiAssetPart parts = 1 | |
| [(cbor.tags) = { is_required: true, disallow_empty: true }]; | |
| // For internal use in the manifest generator -- do not set or read. | |
| bytes pad = 2 [(cbor.tags) = { is_required: true }]; | |
| // For internal use in the manifest generator -- do not set or read. | |
| bytes pad2 = 3; | |
| } | |
| // Based on `locator-map`: | |
| // https://spec.c2pa.org/specifications/specifications/2.4/specs/C2PA_Specification.html#_schema_and_example_6. | |
| // Either the `byte_offset` and `length` of a byte range or the `bmff_box` of a | |
| // BMFF box. | |
| message MultiAssetPartLocation { | |
| // These two fields are used to specify a window of bytes within a file. | |
| int64 byte_offset = 1 [(cbor.tags) = { name: "byteOffset", type: TYPE_UINT }]; | |
| int64 length = 2 [(cbor.tags) = { type: TYPE_UINT }]; | |
| // This field is used to specify a BMFF box. | |
| string bmff_box = 3 [(cbor.tags) = { name: "bmffBox" }]; | |
| } | |
| message MultiAssetPart { | |
| // The location of the hash part. | |
| MultiAssetPartLocation location = 1; | |
| // The hash of the part. | |
| HashedUri hash_assertion = 2 [(cbor.tags) = { name: "hashAssertion" }]; | |
| // Whether the hash is optional. | |
| bool is_optional = 3 [(cbor.tags) = { name: "optional" }]; | |
| } |