| // 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. | |
| // | |
| #ifndef THIRD_PARTY_CREDENTIO_TESTING_JUMBF_UTILS_H_ | |
| #define THIRD_PARTY_CREDENTIO_TESTING_JUMBF_UTILS_H_ | |
| #include <cstdint> | |
| #include <optional> | |
| #include <string> | |
| #include "absl/strings/string_view.h" | |
| #include "absl/types/span.h" | |
| #include "assertion/assertion_encoder.h" | |
| #include "jumbf/box.h" | |
| #include "proto/assertion.pb.h" | |
| namespace credentio { | |
| // Parses the given bytes as a JUMBF superbox. The underlying bytes must outlive | |
| // the returned SuperBox. | |
| jumbf::SuperBox ParseSuperBoxOrDie(const std::string* bytes); | |
| // NOTE: Helpers below returning jumbf::SuperBox set `raw_bytes` to a fixed | |
| // test value. | |
| jumbf::SuperBox CreateManifestStore( | |
| absl::Span<const jumbf::SuperBox> manifests); | |
| jumbf::SuperBox CreateStandardManifest(absl::string_view label, | |
| absl::Span<const jumbf::SuperBox> boxes); | |
| jumbf::SuperBox CreateUpdateManifest(absl::string_view label, | |
| absl::Span<const jumbf::SuperBox> boxes); | |
| jumbf::SuperBox CreateAssertionStoreBox(); | |
| jumbf::SuperBox CreateAssertionStoreBox( | |
| absl::Span<const jumbf::SuperBox> assertions); | |
| jumbf::SuperBox CreateAssertionBoxFromCbor(absl::string_view label, | |
| absl::string_view cbor); | |
| jumbf::SuperBox CreateAssertionBoxFromEmbeddedFile( | |
| absl::string_view label, absl::string_view media_type, | |
| absl::string_view file_contents, | |
| std::optional<absl::string_view> file_name = std::nullopt); | |
| jumbf::SuperBox CreateActionsAssertionBoxFromCbor(absl::string_view cbor); | |
| jumbf::SuperBox CreateBmffBasedHashAssertionBoxFromCbor(absl::string_view cbor); | |
| jumbf::SuperBox CreateDataHashAssertionBoxFromCbor(absl::string_view cbor); | |
| jumbf::SuperBox CreateAssertionBoxFromJson(absl::string_view label, | |
| absl::string_view json); | |
| // Returns a serialized claim signature JUMBF box. | |
| std::string EncodeClaimSignatureBox(absl::string_view cbor); | |
| // Returns a serialized assertion JUMBF box. | |
| std::string EncodeAssertionBoxOrDie(const Assertion& assertion, | |
| const AssertionEncoder& encoder); | |
| // Returns the hash of the given box per | |
| // https://spec.c2pa.org/specifications/specifications/2.4/specs/C2PA_Specification.html#_hashed_uris. | |
| std::string GetHash(absl::string_view algorithm, const jumbf::SuperBox& box); | |
| // This creates the start of a manifest store payload, just enough to pass | |
| // MightBeC2paManifestStore(...). | |
| std::string CreateStartOfManifestStorePayload( | |
| absl::Span<const uint8_t> prefix = {}); | |
| } // namespace credentio | |
| #endif // THIRD_PARTY_CREDENTIO_TESTING_JUMBF_UTILS_H_ |