blob: 98a041d43d89541fb761e41f8f911d21b6fa9ee9 [file] [view]
# 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://c2pa/jumbf/parse.h): Recursively parses a
superbox and all contained boxes into
[view-only structs](http://c2pa/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://c2pa/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, c2pa/jumbf. Internal
parsing functions are located in the
["internal" subdirectory](http://c2pa/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.