{"id":13822710,"url":"https://github.com/iqlusioninc/veriform","last_synced_at":"2025-05-13T16:18:39.108Z","repository":{"id":40263528,"uuid":"85912338","full_name":"iqlusioninc/veriform","owner":"iqlusioninc","description":"Security-oriented protobuf-like serialization format with \"Merkleized\" content hashing support","archived":false,"fork":false,"pushed_at":"2023-01-17T13:01:05.000Z","size":663,"stargazers_count":118,"open_issues_count":16,"forks_count":5,"subscribers_count":7,"default_branch":"develop","last_synced_at":"2025-05-03T18:38:23.735Z","etag":null,"topics":["authorization","credentials","cryptography","hash-algorithm","merkle","protobuf","security","serialization"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/iqlusioninc.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-03-23T05:55:21.000Z","updated_at":"2024-10-11T09:49:10.000Z","dependencies_parsed_at":"2023-02-10T09:45:53.786Z","dependency_job_id":null,"html_url":"https://github.com/iqlusioninc/veriform","commit_stats":null,"previous_names":["zcred/veriform","zcred/zser"],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iqlusioninc%2Fveriform","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iqlusioninc%2Fveriform/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iqlusioninc%2Fveriform/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iqlusioninc%2Fveriform/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/iqlusioninc","download_url":"https://codeload.github.com/iqlusioninc/veriform/tar.gz/refs/heads/develop","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253457999,"owners_count":21911774,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["authorization","credentials","cryptography","hash-algorithm","merkle","protobuf","security","serialization"],"created_at":"2024-08-04T08:02:13.919Z","updated_at":"2025-05-13T16:18:39.073Z","avatar_url":"https://github.com/iqlusioninc.png","language":"Rust","funding_links":[],"categories":["Rust"],"sub_categories":[],"readme":"# ![Veriform](https://raw.githubusercontent.com/iqlusioninc/veriform/develop/img/veriform.png)\n\n[![Build Status][build-image]][build-link]\n[![Apache 2.0 licensed][license-image]][license-link]\n\n**Veriform** is a cryptographically verifiable data serialization format\ninspired by [Protocol Buffers], useful for things like credentials, transparency\nlogs, and \"blockchain\" applications.\n\n[Specification]\n\n## Rationale (a.k.a. \"[Oh no! Not another serialization format!][ohno]\")\n\n\u003e If you look at another engineer's work and think, \"That's dumb. Why don't you just...\"\n\u003e Take a breath. Find out why the problem is hard. _—[Adrienne Porter Felt][apf]_\n\n*[Obligatory xkcd]*\n\nVeriform is similar in design to [Protocol Buffers], which is at its core\na schema-driven format. It also includes a small amount of information which\nmakes it partly self-describing, \"wire types\", however they are too limited to\n[comprehend serialized messages in absence of a schema][protobuf limitations].\n\nWithout a fully self-describing wire format, it isn't possible to implement\nVeriform's primary distinguishing feature: \"Merkleized\" content hashing\nwhich functions even if some of the fields in a message aren't known by the\nschema. This means that the sender and receiver of a message don't need to\nbe working with the same version of a schema to agree on a message hash,\nwhich enables schema evolution.\n\nVeriform is not intended to be a general purpose serialization format: for that\nwe recommend something like [Protocol Buffers] or [Cap'n Proto]. While it's fine\nto use Veriform for general purpose serialization if it fits your needs, it's\nlacking many features such as an associated RPC protocol. Instead, Veriform is\nthe sort of thing you might use for the credentials passed as part of an RPC\nprotocol.\n\nAnother interesting use case for Veriform is Certificate Transparency or otherwise\n\"blockchain\"-like systems that heavily rely on cryptographic integrity and\nMerkle proofs.\n\nVeriform's data model is isomorphic with a subset of [TJSON], a microformat\nwhich extends JSON with richer types. All Veriform documents can be bidirectionally\ntranscoded to/from TJSON with no data loss. Furthermore, TJSON documents\ncan be authenticated with the same Merkleized hashing scheme as Veriform,\nmeaning signatures for one encoding will validate in the other.\n\n## Comparison with other serialization formats\n\nThe table below compares Veriform to the other formats:\n\n| Name          | Schemas         | Self-Describing  | Integers        | Authentication     | Standardization |\n|---------------|-----------------|------------------|-----------------|--------------------|-----------------|\n| **Veriform**  | :green_heart:†  | :green_heart:    | [vint64]        | Structured Hashing | None            |\n| [ASN.1 DER]   | :broken_heart:  | :yellow_heart:   | Fixed-Width     | Canonicalization   | ITU/IETF        |\n| [Cap'n Proto] | :green_heart:   | :green_heart:    | Fixed-Width     | Canonicalization   | None            |\n| [CBOR]        | :broken_heart:  | :green_heart:    | Fixed-Width     | Canonicalization   | IETF            |\n| [csexp]       | :broken_heart:  | :green_heart:    | Fixed-Width     | Canonicalization   | IETF            |\n| [MessagePack] | :broken_heart:  | :green_heart:    | Fixed-Width     | None               | None            |\n| [Protobuf]    | :green_heart:   | :broken_heart:   | [LEB128]        | Canonicalization   | None            |\n| [XDR]         | :green_heart:   | :broken_heart:   | Fixed-Width     | None               | IETF            |\n\n*†NOTE: Coming soon!*\n\n## Status\n\nVeriform does not yet provide the minimum viable functionality it needs to be\nuseful. The table below covers the current implementation state:\n\n| Status             | Feature               | Notes             |\n|--------------------|-----------------------|-------------------|\n| :construction:     | Message Decoding      | In progress       |\n| :no_entry:         | Message Encoding      | Not started       |\n| :construction:     | Structured Hashing    | In progress       |\n| :no_entry:         | Schemas               | Not started       |\n| :construction:     | [TJSON] Transcoding   | In progress       |\n\nNOTE: Veriform is a multi-language monorepo: all implementations in all languages\nwithin the repo are intended to implement the spec in its current state and\nshare a consistent feature set. The progress above applies equally to all\nlanguage implementations currently within the repo.\n\n## Copyright\n\nCopyright © 2017-2020 Tony Arcieri\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\n## Contribution\n\nUnless you explicitly state otherwise, any contribution intentionally\nsubmitted for inclusion in the work by you shall be licensed as above,\nwithout any additional terms or conditions.\n\n[//]: # (badges)\n\n[build-image]: https://github.com/iqlusioninc/veriform/workflows/Rust/badge.svg?branch=develop\u0026event=push\n[build-link]: https://github.com/iqlusioninc/veriform/actions?query=workflow%3ARust\n[license-image]: https://img.shields.io/badge/license-Apache2.0-blue.svg\n[license-link]: https://github.com/iqlusioninc/veriform/blob/develop/LICENSE\n\n[//]: # (general links)\n\n[Specification]: https://github.com/iqlusioninc/veriform/blob/develop/spec/draft-veriform-spec.md\n[ohno]: https://scottlocklin.wordpress.com/2017/04/02/please-stop-writing-new-serialization-protocols/\n[apf]: https://twitter.com/__apf__/status/867751153026482177\n[Obligatory xkcd]: https://xkcd.com/927/\n[Protocol Buffers]: https://developers.google.com/protocol-buffers/\n[protobuf limitations]: https://github.com/google/protobuf/issues/2629\n[TJSON]: https://www.tjson.org/\n[vint64]: https://github.com/iqlusioninc/veriform/blob/develop/spec/draft-veriform-spec.md#64-bit-unsigned-variable-width-integers-vint64\n\n[//]: # (comparison table links)\n\n[ASN.1 DER]: https://www.itu.int/rec/T-REC-X.690-201508-I/en\n[Cap'n Proto]: https://capnproto.org/\n[CBOR]: https://tools.ietf.org/html/rfc7049\n[csexp]: https://en.wikipedia.org/wiki/Canonical_S-expressions\n[MessagePack]: https://msgpack.org/\n[LEB128]: https://en.wikipedia.org/wiki/LEB128\n[Protobuf]: https://developers.google.com/protocol-buffers/\n[XDR]: https://en.wikipedia.org/wiki/External_Data_Representation\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fiqlusioninc%2Fveriform","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fiqlusioninc%2Fveriform","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fiqlusioninc%2Fveriform/lists"}