| Filename | Latest commit message | Latest commit date |
|---|---|---|
c2pa-binding §4.9: a store of wai.asset.c2pa may carry the envelope's ISCC as the C2PA soft binding io.iscc.v0 of IEP-0020, beside the identifier: the Image-Code of the envelope's picture (where it is not featureless), the Data-Code and the Instance-Code of its bytes, with the generator named in bindingMetadata. It has its own assertion shape and its own verify step: the units are computed again from the envelope and the binding is held to them, each equal (iscc_mismatch); it is the last of the soft bindings (manifest_malformed otherwise) and names no robustness claim (soft_binding_unevidenced). iscc §5: matching compares a binding's Data-, Text-, Audio-, Video- and Meta-Codes with the asset's unit of the same type where the validator holds the input, under a threshold for each type, the decision in integers; a pair of Meta-Codes is reported and never a match. iscc §4.9: IEP-0002 was read. The meta element is read as a data URL (RFC 2397, base64) or a JSON object in the JSON Canonicalization Scheme (RFC 8785), numbers as ECMA-262 writes them, computed exactly; the text says where the IEP is silent or differs from the public vectors. tools/wai_iscc_unicode_tables.py pins the SHA-256 of the tables it writes; --check and tests/iscc.rs hold the committed tables to it, and CI runs both. No runner image carries a Python of Unicode 17.0.0, so CI checks the pin; a Python that does also regenerates. Corpora c2pa-identity/ (three good stores and eleven negatives more; the vectors it held keep their bytes) and iscc/ are regenerated; c2pa_live_verify.py and iscc_verify.py compute all of it again and drop each new check in turn. Co-Authored-By: Claude <[email protected]> |
||
| .. | ||
| pictures | ||
| public.json | ||
| README.md | ||
| vectors.json | ||
live-conformance/iscc — ISCC content identifiers
The corpus of extensions/iscc.md §6: the ISO 24138 codes WAI computes,
held to the standard's public test vectors, and WAI's own cases of pre-processing and matching.
Files.
public.json, not generated: the public test vectors, one case to a line, whose SHA-256 the extension pins. Itsimage,audio,instance,code,seq_encode,seq_decode,data,video,textandmetasections are transcribed from the ISCC reference implementation's conformance data, version 1.5.0 (a JSON file whose SHA-256 is1609adb921983baf83f9aaf049ab8dc23f828c214f57c29e2bf852346c678eff, published under the Apache License 2.0 by the ISCC Foundation): each case's name, its inputs (a 32 × 32 grey picture, a Chromaprint fingerprint, bytes in hexadecimal, units, frame signatures, a text, a name with a description and a meta element) and its expected output. Ametacase'smetais the meta element as the source file gives it,{"dataUrl": …}or{"json": …}, the JSON object as the text the source file writes it in; itspayloadis the bytes §4.9 reads of it, in hexadecimal, which for a JSON object are the bytes the source file's own output states;metaReadis that output'smeta, the data URL; andtitleRead,descriptionReadandmetahashare itsname,descriptionandmetahash. Itsiep20_*sections are typed from IEP-0020 §10.1 and §10.2 as fetched on 10 November 2026: the four-unit sequence with its bytes, canonical form and base64, Table 2's sequences a decoder refuses (each with the table's reason), the sequence it accepts, and Table 3's featureless Image-Codes with their bits set per segment.vectors.jsonandpictures/, written bywai_iscc_vectors genfrom fixed seeds: each picture's size, the SHA-256 of its 32 × 32 picture (§4.3), its Image-Code of 256 bits and whether it is featureless;thresholds, one for each type that can be a candidate match; and each match of a soft binding (binding, an ISCC-SEQ in hexadecimal) against an asset: its bytes, a picture's PNG (asset) or abufferbylengthandseedwith the bytes atflipcomplemented, and the inputs the validator holds for it (text;audio, a fingerprint;video, frame signatures byframesandseed;seed, atitle, adescriptionand apayload), under the case's ownthresholdswhere it states them, with what §5 states:exact,matched,scoreand each pair compared; and the generated cases of §4.6 to §4.9:data(a buffer bylengthandseed, itschunks' lengths and its Data-Code),video(frame signatures byframesandseed, and their Video-Code),text(a text, itscollapse, itscharactersand its Text-Code) andmeta(atitle, adescriptionand apayload, what §4.9 reads of them, themetahashand the Meta-Code; where the case gives a meta element,metaas above, thepayloadread of it andmetaRead, its data URL), every code of 256 bits; andmetaRefused, meta elements §4.9 refuses, each with itsreason.
Equivalence. A conforming implementation computes every public vector's code, refuses or
accepts every sequence as stated, and gives every picture and match the values vectors.json
states (§6).
Provenance. The pictures are ramps, discs and bars the generator draws, written as PNG by the packaging corpus's still writer; one is the first picture with one pixel altered after a binding was computed from it, and one a single pixel.
Checked by. wai_iscc_vectors verify and tests/iscc.rs in wai-rs, and ../iscc_verify.py,
the second implementation, written from the extension's text and the IEPs, which also requires
every mutated copy to be caught and every one of its own checks, dropped, to be caught.
The four codes' tables. The minhash, gear and winner-take-all tables are in the extension's
Annex A, transcribed from the reference implementation's source, version 1.5.0 (Copyright
2016-2026 Titusz Pan, Apache License 2.0), each source file named there by its SHA-256. The
Rust implementation holds them in wai-rs/src/iscc/tables.rs, and the Python one reads them
from the extension. The Rust implementation's Unicode data (unicode_tables.rs, of the Unicode
Character Database 17.0.0, Unicode License v3) is written by
tools/wai_iscc_unicode_tables.py; the Python one uses its own library's.
Not cross-checked. The JSON objects' payloads beyond the public vectors' four (the members' order, the numbers' digits, the strings' escapes) are held to the two implementations here and to RFC 8785 Appendix B's samples, which both replay in their own tests, not to another canonicaliser. The pictures' Image-Codes, and so the matches of pictures, are WAI's pre-processing's (§4.3); they are held to the two implementations here, not to another ISCC tool, whose pre-processing differs (iscc §4.3). The public vectors are the cross-check of the transform, the codec and the other codes. The generated texts' collapses are held to two Unicode libraries that may be of different versions (iscc §4.7); they hold only characters assigned by Unicode 6.0.