type Tile … // TileForIndex returns the tile of fixed height h ≥ 1 // and least width storing the given hash storage index. // // If h ≤ 0, [TileForIndex] panics. func TileForIndex(h int, index int64) Tile { … } // tileForIndex returns the tile of height h ≥ 1 // storing the given hash index, which can be // reconstructed using tileHash(data[start:end]). func tileForIndex(h int, index int64) (t Tile, start, end int) { … } // HashFromTile returns the hash at the given storage index, // provided that t == TileForIndex(t.H, index) or a wider version, // and data is t's tile data (of length at least t.W*HashSize). func HashFromTile(t Tile, data []byte, index int64) (Hash, error) { … } // tileHash computes the subtree hash corresponding to the (2^K)-1 hashes in data. func tileHash(data []byte) Hash { … } // NewTiles returns the coordinates of the tiles of height h ≥ 1 // that must be published when publishing from a tree of // size newTreeSize to replace a tree of size oldTreeSize. // (No tiles need to be published for a tree of size zero.) // // If h ≤ 0, NewTiles panics. func NewTiles(h int, oldTreeSize, newTreeSize int64) []Tile { … } // ReadTileData reads the hashes for tile t from r // and returns the corresponding tile data. func ReadTileData(t Tile, r HashReader) ([]byte, error) { … } const pathBase … // Path returns a tile coordinate path describing t. func (t Tile) Path() string { … } // ParseTilePath parses a tile coordinate path. func ParseTilePath(path string) (Tile, error) { … } type badPathError … func (e *badPathError) Error() string { … } type TileReader … // TileHashReader returns a HashReader that satisfies requests // by loading tiles of the given tree. // // The returned [HashReader] checks that loaded tiles are // valid for the given tree. Therefore, any hashes returned // by the HashReader are already proven to be in the tree. func TileHashReader(tree Tree, tr TileReader) HashReader { … } type tileHashReader … // tileParent returns t's k'th tile parent in the tiles for a tree of size n. // If there is no such parent, tileParent returns Tile{}. func tileParent(t Tile, k int, n int64) Tile { … } func (r *tileHashReader) ReadHashes(indexes []int64) ([]Hash, error) { … }