| // 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_FORMATS_GIF_CONSTANTS_H_ | |
| #define THIRD_PARTY_CREDENTIO_FORMATS_GIF_CONSTANTS_H_ | |
| #include <cstdint> | |
| #include "absl/strings/string_view.h" | |
| namespace credentio { | |
| // GIF format: https://giflib.sourceforge.net/whatsinagif/bits_and_bytes.html | |
| // C2PA only supports GIF89a format: | |
| // https://spec.c2pa.org/specifications/specifications/2.2/specs/C2PA_Specification.html#_gif_specific_handling | |
| constexpr absl::string_view kGifHeaderBlock = "GIF89a"; | |
| // Header Block (6) + Logical Screen Descriptor (7) + Trailer (1) | |
| constexpr int64_t kMinGifSize = 6 + 7 + 1; | |
| // Introducers (First Byte) | |
| constexpr uint8_t kGifExtensionIntroducer = 0x21; | |
| constexpr uint8_t kGifImageDescriptorIntroducer = 0x2C; | |
| constexpr uint8_t kGifTrailerIntroducer = 0x3B; | |
| // Extension Label (Second Byte when introducer is 0x21) | |
| constexpr uint8_t kGifExtensionPlainText = 0x01; | |
| constexpr uint8_t kGifExtensionGraphicsControl = 0xF9; | |
| constexpr uint8_t kGifExtensionComment = 0xFE; | |
| constexpr uint8_t kGifExtensionApplication = 0xFF; | |
| // Corresponding C2PA Box Labels | |
| constexpr absl::string_view kGifLogicalScreenDescriptorLabel = "LSD"; | |
| constexpr absl::string_view kGifImageDescriptorLabel = "2C"; | |
| constexpr absl::string_view kGifTrailerLabel = "3B"; | |
| constexpr absl::string_view kGifImageDataLabel = "TBID"; | |
| constexpr absl::string_view kGifExtensionPlainTextLabel = "2101"; | |
| constexpr absl::string_view kGifExtensionGraphicsControlLabel = "21F9"; | |
| constexpr absl::string_view kGifExtensionCommentLabel = "21FE"; | |
| constexpr absl::string_view kGifExtensionApplicationLabel = "21FF"; | |
| constexpr absl::string_view kGifAfterLabel = "c2pa.after"; | |
| // C2PA Block Information | |
| // Embedding Information: | |
| // https://spec.c2pa.org/specifications/specifications/2.2/specs/C2PA_Specification.html#_embedding_manifests_into_gifs | |
| constexpr uint8_t kGifC2paExtensionInfoSize = 0x0B; | |
| constexpr absl::string_view kGifC2paIdentifier = "C2PA_GIF"; | |
| constexpr uint16_t kGifC2paAuthenticationCode = 0x0100; | |
| constexpr absl::string_view kGifC2paLabel = "C2PA"; | |
| } // namespace credentio | |
| #endif // THIRD_PARTY_CREDENTIO_FORMATS_GIF_CONSTANTS_H_ |