Skip to content
This repository was archived by the owner on Oct 11, 2024. It is now read-only.
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 17 additions & 3 deletions proto/v2/e2ekeys.proto
Original file line number Diff line number Diff line change
Expand Up @@ -212,12 +212,26 @@ message KeyPromise {
Signature signature = 2;
}

// One node along a Merkle Tree authentication path.
message ProofNode {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This makes sense as a data storage type. I'm not sure it makes sense to return to the user.
If you agree, create a separate proto file in the v2 directory for internal storage types.a

// The coalesced substring at this node; all children start with this substring
int32 path_substring_length = 1; // In bits
bytes path_substring = 2;
// Only one left_child_hash or right_child_hash will be filled in; whichever
// one is along the path is left nil.
int64 left_child_epoch = 3;
bytes left_child_hash = 4;
int64 right_child_epoch = 5;
bytes right_child_hash = 6;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should nodes just contain their own epoch and hash rather than their children's?

}

// A Proof provides an authentication path through the Merkel Tree that
// proves that an item is present in the tree.
message Proof {
// Neighbors is a list of all the adacent nodes along the path from the leaf
// object to the root. To save space, hashes for empty subtrees are omitted.
repeated bytes neighbors = 1;
// The list of nodes along the path. The client can verify the proof by
// hashing the nodes and iteratively filling in the missing hash in the next
// node until it reaches the root, where it can compare the root hash.
repeated ProofNode proof_nodes = 1;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Lets keep this as an array of hashes, unless you see a reason to surface the node info to the client.

// The root node in the Merkle tree.
SignedRoot epoch = 3;
// Output of an verifiable unpredictable function on user.meta.user_id.
Expand Down