| // 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 "google/protobuf/struct.proto"; |
| |
| message SoftBindingMetadataMap { |
| // Additional description of the implementation or author of the binding or |
| // the algorithm |
| string description = 1; |
| // Contact information for the implementation or author of the binding or the |
| // algorithm |
| string contact = 2; |
| // A web page containing more details about the implementation or author of |
| // the binding or the algorithm. |
| string informational_url = 3 [(cbor.tags) = { name: "informationalUrl" }]; |
| |
| // Additional metadata of the soft binding. |
| // * tstr => any |
| } |
| |
| message SoftBindingTimespanMap { |
| // Start of the time range (as milliseconds from media start) |
| int64 start = 1 [(cbor.tags) = { is_required: true, type: TYPE_UINT }]; |
| // End of the time range (as milliseconds from media start) |
| int64 end = 2 [(cbor.tags) = { is_required: true, type: TYPE_UINT }]; |
| } |
| |
| message SoftBindingScopeMap { |
| // CBOR byte string describing, in algorithm specific format, the part of the |
| // digital content over which the soft binding value has been computed" |
| bytes extent = 1; |
| // The time range over which the soft binding value has been computed. |
| SoftBindingTimespanMap timespan = 2; |
| // The region of interest over which the soft binding value has been computed. |
| // RegionOfInterestMap region = 3; |
| } |
| |
| message SoftBindingBlockMap { |
| SoftBindingScopeMap scope = 1 [(cbor.tags) = { is_required: true }]; |
| // CBOR byte string describing, in algorithm specific format, the value of the |
| // soft binding computed over this block of digital content" |
| bytes value = 2 [(cbor.tags) = { is_required: true }]; |
| } |
| |
| // Schema for Soft Binding Assertion (c2pa.soft-binding) |
| // Matches C2PA 2.4 technical specification. |
| message SoftBindingAssertion { |
| // A string identifying the soft binding algorithm and version of that |
| // algorithm used to compute the value, taken from the C2PA soft binding |
| // algorithm list. If this field is absent, the algorithm is taken from the |
| // `alg_soft` value of the enclosing structure. If both are present, the field |
| // in this structure is used. If no value is present in any of these places, |
| // this structure is invalid; there is no default. |
| string algorithm = 1 [(cbor.tags) = { is_required: true, name: "alg" }]; |
| repeated SoftBindingBlockMap blocks = 2 |
| [(cbor.tags) = { is_required: true, disallow_empty: true }]; |
| // For internal use in the manifest generator -- do not set or read. |
| bytes pad = 4 [(cbor.tags) = { mode: MODE_WRITE_ONLY }]; |
| // For internal use in the manifest generator -- do not set or read. |
| bytes pad2 = 5 [(cbor.tags) = { mode: MODE_WRITE_ONLY }]; |
| |
| // A human-readable description of what this hash covers |
| string name = 6; |
| |
| // CBOR byte string describing parameters of the soft binding algorithm. |
| bytes alg_params = 7 [(cbor.tags) = { name: "alg-params" }]; |
| |
| // Additional metadata of the soft binding. Useful for binding-specific |
| // information. |
| SoftBindingMetadataMap binding_metadata = 8 |
| [(cbor.tags) = { name: "bindingMetadata" }]; |
| |
| // Additional information about the assertion |
| // AssertionMetadataMap assertion_metadata = 9 |
| // [(cbor.tags) = { name: "metadata" }]; |
| } |