Join GitHub today
GitHub is home to over 40 million developers working together to host and review code, manage projects, and build software together.Sign up
Initial Specification and Implementation #1
There are two main APIs that you will be working with:
At the protocol level, you have:
The lifecycle will look like this:
The important thing is, most developers will only see steps 1, 8, and 11. And step 1 will be performed by their tooling, not by their own manual code.
And yet, despite allowing APIs that look as simple as
This lets you plug in a summary hash from a Chronicle and query a pool of other Chronicle instances to ensure they have a record of it stored. The envisioned use case: 1. Have a local-ish replica of the WordPress Chronicle. 2. For each update of the local-ish Chronicle, cross-reference against other instances to ensure some quorum (e.g. at least 3 of 5) of Chronicle instances see the same record. This implements part 2 of that use case. Part 1 (having a source Chronicle that is parsed to assemble Action objects, which should allow anyone to deterministically reproduce the current snapshot of trusted public keys and software updates) is the next thing to be developed. Continuing on: 3. Developer tools for signing releases. 4, Infrastructure plumbing for ensuring updates are streamed to the source Chronicle that seeds part 1. And then we will develop other open source projects that consume libgossamer in some which way.
Signatures are hex-encoded and consists of a 4-byte header which identifies the hash and signature algorithms being employed. Currently supported: - Ed25519 + SHA384 (WordPress core used this) - Ed25519 + BLAKE2b In the future, we may employ something like FALCOLN or SPHINCS+. Ref: https://csrc.nist.gov/projects/post-quantum-cryptography/round-2-submissions
- Added a layer of indirection with SignedMessage - You can create a SignedMessage from a Message or Action - You can verify that a SignedMessage was signed by the relevant provider OR by the "super provider" (i.e. break glass feature for letting core teams cope with key compromise) - Added Synchronizer API for downloading updates from a Chronicle - Added Source API for streaming updates from a pool of Chronicle replicas (used by the Synchronizer) - Added Scribe API for publishing updates to the source Chronicle (not currently used) - DbInterface: Persist metadata about the last successful summary hash (or Merkle root, when we get around to Trillian support) - HttpInterface: Added post() method - Action: Added a lot of get*() and with*() methods