• Stars
    star
    116
  • Rank 303,894 (Top 6 %)
  • Language
    Rust
  • License
    Apache License 2.0
  • Created over 7 years ago
  • Updated almost 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Security-oriented protobuf-like serialization format with "Merkleized" content hashing support

Veriform

Build Status Apache 2.0 licensed

Veriform is a cryptographically verifiable data serialization format inspired by Protocol Buffers, useful for things like credentials, transparency logs, and "blockchain" applications.

Specification

Rationale (a.k.a. "Oh no! Not another serialization format!")

If you look at another engineer's work and think, "That's dumb. Why don't you just..." Take a breath. Find out why the problem is hard. β€”Adrienne Porter Felt

Obligatory xkcd

Veriform is similar in design to Protocol Buffers, which is at its core a schema-driven format. It also includes a small amount of information which makes it partly self-describing, "wire types", however they are too limited to comprehend serialized messages in absence of a schema.

Without a fully self-describing wire format, it isn't possible to implement Veriform's primary distinguishing feature: "Merkleized" content hashing which functions even if some of the fields in a message aren't known by the schema. This means that the sender and receiver of a message don't need to be working with the same version of a schema to agree on a message hash, which enables schema evolution.

Veriform is not intended to be a general purpose serialization format: for that we recommend something like Protocol Buffers or Cap'n Proto. While it's fine to use Veriform for general purpose serialization if it fits your needs, it's lacking many features such as an associated RPC protocol. Instead, Veriform is the sort of thing you might use for the credentials passed as part of an RPC protocol.

Another interesting use case for Veriform is Certificate Transparency or otherwise "blockchain"-like systems that heavily rely on cryptographic integrity and Merkle proofs.

Veriform's data model is isomorphic with a subset of TJSON, a microformat which extends JSON with richer types. All Veriform documents can be bidirectionally transcoded to/from TJSON with no data loss. Furthermore, TJSON documents can be authenticated with the same Merkleized hashing scheme as Veriform, meaning signatures for one encoding will validate in the other.

Comparison with other serialization formats

The table below compares Veriform to the other formats:

Name Schemas Self-Describing Integers Authentication Standardization
Veriform πŸ’šβ€  πŸ’š vint64 Structured Hashing None
ASN.1 DER πŸ’” πŸ’› Fixed-Width Canonicalization ITU/IETF
Cap'n Proto πŸ’š πŸ’š Fixed-Width Canonicalization None
CBOR πŸ’” πŸ’š Fixed-Width Canonicalization IETF
csexp πŸ’” πŸ’š Fixed-Width Canonicalization IETF
MessagePack πŸ’” πŸ’š Fixed-Width None None
Protobuf πŸ’š πŸ’” LEB128 Canonicalization None
XDR πŸ’š πŸ’” Fixed-Width None IETF

†NOTE: Coming soon!

Status

Veriform does not yet provide the minimum viable functionality it needs to be useful. The table below covers the current implementation state:

Status Feature Notes
🚧 Message Decoding In progress
β›” Message Encoding Not started
🚧 Structured Hashing In progress
β›” Schemas Not started
🚧 TJSON Transcoding In progress

NOTE: Veriform is a multi-language monorepo: all implementations in all languages within the repo are intended to implement the spec in its current state and share a consistent feature set. The progress above applies equally to all language implementations currently within the repo.

Copyright

Copyright Β© 2017-2020 Tony Arcieri

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

https://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you shall be licensed as above, without any additional terms or conditions.

More Repositories

1

abscissa

Application microframework with command-line option parsing, configuration, error handling, logging, and shell interactions
Rust
569
star
2

crates

A collection of open source Rust crates from iqlusion
Rust
444
star
3

sear

Signed/Encrypted ARchive: always-encrypted tar-like archive tool with optional signature support
Rust
354
star
4

tmkms

Tendermint KMS: Key Management System for Tendermint Validators
Rust
331
star
5

yubikey.rs

Pure Rust YubiKey host-side driver for PIV-based RSA/ECC key storage + signing/encryption support
Rust
218
star
6

cargo-rpm

Cargo subcommand for building .rpm releases of Rust projects
Rust
154
star
7

armistice

Hardware private key storage for next-generation cryptography (e.g. BLS) supporting USB armory MkII devices
Rust
110
star
8

synchronicity

Distributed build system providing cryptographic proofs-of-reproducibility via Byzantine Fault Tolerant (BFT) consensus
Rust
92
star
9

liquidity-staking-module

Go
87
star
10

yubihsm.rs

Pure Rust client for YubiHSM2 devices
Rust
64
star
11

usbarmory.rs

Bare metal Rust support for USB armory MkII devices
Rust
58
star
12

keychain-services.rs

Rust access to macOS Keychain Services (experimental)
Rust
57
star
13

cosmon

Sagan is an observability tool for Cosmos and other Tendermint applications
Rust
37
star
14

canister

Deploy self-contained binaries from GCP Container Registry (gcr.io) as systemd service units
Rust
29
star
15

iqkms

Cryptographic key management service providing a gRPC API and support for a variety of key storage methods including YubiHSM2 devices
Rust
15
star
16

delphi

Oracle feeder service (presently supporting Terra)
Rust
14
star
17

LiquidStakingWG

Working group for a standard liquid staking module for Cosmos Chain
HTML
14
star
18

ethereum_hsm_signer

HSM signer via GRPC interface for eth sigs
Rust
5
star
19

0L-iqlusion-engineering-fund

0L Blockchain Engineering fund
2
star
20

iap_proxy

A client side proxy that wraps an http request with Google Identity Aware Proxy
Go
2
star
21

research

Iqlusion Inc research collaboration repo
1
star
22

0l-iqlusion-fulltime-engineering

1
star
23

observatory

CometBFT node monitoring
Rust
1
star