| # JUMBF Parser | |
| This is a basic parser for the binary format described in ISO/IEC 19566-5. It is | |
| intended to be a general-purpose library, but was created specifically for C2PA, | |
| and only the features specifically needed for that use case have been developed | |
| or tested. | |
| ## Supported features | |
| ### Parsing | |
| - [`ConsumeSuperBox(...)`](http://credentio/jumbf/parse.h): Recursively parses | |
| a superbox and all contained boxes into | |
| [view-only structs](http://credentio/jumbf/box.h). | |
| - Basic box structure: Complete | |
| - Box file format (Annex A): Complete | |
| - Content Types (Annex B): Partial, only supports: | |
| - JSON (B.4) | |
| - Embedded file (B.6) | |
| - CBOR (B.7) | |
| - C2PA Salt (Not defined by JUMBF, see C2PA 2.0 section 8.3.1.3) | |
| Other content types can be parsed, but will be returned as `UnknownBox`, and | |
| callers are responsible for interpreting the TBox value and handling the raw | |
| bytes appropriately. | |
| - References and requests (Annex C): Partial, only supports: | |
| - Lookup of boxes by URI or path (C.2) | |
| ## Serialization | |
| - [`SuperBoxBuilder`](http://credentio/jumbf/box_builder.h): Stateful builder | |
| for creating superboxes. | |
| - Basic box / superbox structure: Complete | |
| - Box file format (Annex A): Complete except for the following: | |
| - Description box numerical IDs | |
| - Description box hashes | |
| - Content Types (Annex B): All supported but callers are responsible for | |
| assembling raw payload and using the correct TBox value. | |
| ## Validation | |
| This library is intentionally very permissive. It only validates box lengths and | |
| the presence of description and content boxes within super boxes. | |
| Callers are responsible for checking that content box types align with those | |
| declared in description boxes. | |
| ## Super Box naming convention | |
| The standard, somewhat confusingly, uses the term "JUMBF box" to refer to a | |
| "superbox that shall contain exactly one JUMBF Description Box followed by one | |
| or more JUMBF Content Boxes and at most one Padding Box." However, there are no | |
| mentions anywhere in the standard of "superboxes" that are not "JUMBF Boxes". | |
| So, for the sake of clarity, this library uses the term "Super Box" (in code as | |
| "SuperBox" or "super_box") in place of the term "JUMBF box" as defined by the | |
| standard. | |
| ## Directory structure | |
| The public API is contained in the top-level directory, credentio/jumbf. | |
| Internal parsing functions are located in the | |
| ["internal" subdirectory](http://credentio/jumbf/internal). | |
| As a general rule, recursive parsing and assembling of the output format happens | |
| in the top-level directory, while functions in the internal subdirectory handle | |
| consuming the raw bytes. |