# 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.
