| // 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. | |
| // | |
| // Intermediate types to represent partially-parsed JUMBF structures. Most | |
| // contain references back to the underlying serialized array to minimize | |
| // copies. This behavior is more thoroughly documented at the functions that | |
| // return these structs. | |
| #ifndef THIRD_PARTY_CREDENTIO_JUMBF_INTERNAL_INTERMEDIATE_H_ | |
| #define THIRD_PARTY_CREDENTIO_JUMBF_INTERNAL_INTERMEDIATE_H_ | |
| #include <cstdint> | |
| #include <optional> | |
| #include <vector> | |
| #include "absl/strings/string_view.h" | |
| #include "uuid/uuid.h" | |
| namespace jumbf_internal { | |
| // A generic box structure, may be of any type (see section 4.3 of standard) | |
| struct IntermediateBox { | |
| absl::string_view payload; | |
| // The original serialized representation of this box. | |
| absl::string_view serialized; | |
| uint32_t type; | |
| // Whether this box has an LBox of 0, indicating that it extends to the end | |
| // of the file. | |
| bool implicit_length; | |
| bool operator==(const IntermediateBox&) const = default; | |
| }; | |
| // A description box (see section A.3 of standard) | |
| struct IntermediateDescriptionBox { | |
| // The type UUID, referred to simply as "type" in section A.3, not to be | |
| // confused with the 32 bit box type described in section 4.3 (all description | |
| // boxes must have box type "jumd"). | |
| credentio::Uuid type_uuid; | |
| bool requestable; | |
| std::optional<absl::string_view> label; | |
| std::optional<uint32_t> id; | |
| // The SHA-256 hash of the associated content boxes. In identical byte order | |
| // to the serialized form as defined in the standard. Note that this value is | |
| // not verified during the initial parse stage that produces this intermediate | |
| // struct. | |
| std::optional<absl::string_view> hash; | |
| std::optional<IntermediateBox> private_box; | |
| bool operator==(const IntermediateDescriptionBox&) const = default; | |
| }; | |
| // A Super Box, according to the naming convention used in this library. In the | |
| // standard it's referred to as a "JUMBF Box" with the term "superbox" simply | |
| // meaning a box that contains other boxes (see section A.2 of the standard). | |
| struct IntermediateSuperBox { | |
| IntermediateDescriptionBox description; | |
| std::vector<IntermediateBox> content; | |
| // The original serialized representation of this box. | |
| absl::string_view serialized; | |
| bool operator==(const IntermediateSuperBox&) const = default; | |
| }; | |
| } // namespace jumbf_internal | |
| #endif // THIRD_PARTY_CREDENTIO_JUMBF_INTERNAL_INTERMEDIATE_H_ |