client

package
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 14, 2025 License: Apache-2.0 Imports: 23 Imported by: 0

Documentation

Overview

Package client provides client support for interacting with logs that uses the tlog-tiles API.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func CheckConsistency

func CheckConsistency(ctx context.Context, f TileFetcherFunc, cp []log.Checkpoint) error

CheckConsistency is a wapper function which simplifies verifying consistency between two or more checkpoints.

func FetchCheckpoint

func FetchCheckpoint(ctx context.Context, f CheckpointFetcherFunc, v note.Verifier, origin string) (*log.Checkpoint, []byte, *note.Note, error)

FetchCheckpoint retrieves and opens a checkpoint from the log. Returns both the parsed structure and the raw serialised checkpoint.

func FetchLeafHashes

func FetchLeafHashes(ctx context.Context, f TileFetcherFunc, first, N, logSize uint64) ([][]byte, error)

FetchLeafHashes fetches N consecutive leaf hashes starting with the leaf at index first.

func FetchRangeNodes

func FetchRangeNodes(ctx context.Context, s uint64, f TileFetcherFunc) ([][]byte, error)

FetchRangeNodes returns the set of nodes representing the compact range covering a log of size s.

func GetEntryBundle

func GetEntryBundle(ctx context.Context, f EntryBundleFetcherFunc, i, logSize uint64) (staticct.EntryBundle, error)

GetEntryBundle fetches the entry bundle at the given _tile index_.

func PartialOrFullResource

func PartialOrFullResource(ctx context.Context, p uint8, f func(context.Context, uint8) ([]byte, error)) ([]byte, error)

PartialOrFullResource calls the provided function with the provided partial resource size value in order to fetch and return a static resource. If p is non-zero, and f returns os.ErrNotExist, this function will try to fetch the corresponding full resource by calling f a second time passing zero.

Types

type CheckpointFetcherFunc

type CheckpointFetcherFunc func(ctx context.Context) ([]byte, error)

CheckpointFetcherFunc is the signature of a function which can retrieve the latest checkpoint from a log's data storage.

Note that the implementation of this MUST return (either directly or wrapped) an os.ErrIsNotExist when the file referenced by path does not exist, e.g. a HTTP based implementation MUST return this error when it receives a 404 StatusCode.

type ConsensusCheckpointFunc

type ConsensusCheckpointFunc func(ctx context.Context, logSigV note.Verifier, origin string) (*log.Checkpoint, []byte, *note.Note, error)

ConsensusCheckpointFunc is a function which returns the largest checkpoint known which is signed by logSigV and satisfies some consensus algorithm.

This is intended to provide a hook for adding a consensus view of a log, e.g. via witnessing.

func UnilateralConsensus

func UnilateralConsensus(f CheckpointFetcherFunc) ConsensusCheckpointFunc

UnilateralConsensus blindly trusts the source log, returning the checkpoint it provided.

type EntryBundleFetcherFunc

type EntryBundleFetcherFunc func(ctx context.Context, bundleIndex uint64, p uint8) ([]byte, error)

EntryBundleFetcherFunc is the signature of a function which can fetch the raw data for a given entry bundle.

Note that the implementation of this MUST:

  • when asked to fetch a partial entry bundle (i.e. p != 0), fall-back to fetching the corresponding full bundle if the partial one does not exist.
  • return (either directly or wrapped) an os.ErrIsNotExist when neither the requested bundle nor any fallback bundle exists.

type ErrInconsistency

type ErrInconsistency struct {
	SmallerRaw []byte
	LargerRaw  []byte
	Proof      [][]byte

	Wrapped error
}

ErrInconsistency should be returned when there has been an error proving consistency between log states. The raw log state representations are included as-returned by the target log, this ensures that evidence of inconsistent log updates are available to the caller of the method(s) returning this error.

func (ErrInconsistency) Error

func (e ErrInconsistency) Error() string

func (ErrInconsistency) Unwrap

func (e ErrInconsistency) Unwrap() error

type FileFetcher

type FileFetcher struct {
	Root string
}

FileFetcher knows how to fetch log artifacts from a filesystem rooted at Root.

func (FileFetcher) ReadCheckpoint

func (f FileFetcher) ReadCheckpoint(_ context.Context) ([]byte, error)

func (FileFetcher) ReadEntryBundle

func (f FileFetcher) ReadEntryBundle(ctx context.Context, i uint64, p uint8) ([]byte, error)

func (FileFetcher) ReadIssuer

func (f FileFetcher) ReadIssuer(ctx context.Context, hash []byte) ([]byte, error)

func (FileFetcher) ReadTile

func (f FileFetcher) ReadTile(ctx context.Context, l, i uint64, p uint8) ([]byte, error)

type HTTPFetcher

type HTTPFetcher struct {
	// contains filtered or unexported fields
}

HTTPFetcher knows how to fetch log artifacts from a log being served via HTTP.

func NewHTTPFetcher

func NewHTTPFetcher(rootURL *url.URL, c *http.Client) (*HTTPFetcher, error)

NewHTTPFetcher creates a new HTTPFetcher for the log rooted at the given URL, using the provided HTTP client.

rootURL should end in a trailing slash. c may be nil, in which case http.DefaultClient will be used.

func (*HTTPFetcher) EnableRetries

func (h *HTTPFetcher) EnableRetries(maxRetries uint)

EnableRetries causes requests which result in a non-permanent error to be retried with up to maxRetries attempts.

func (HTTPFetcher) ReadCheckpoint

func (h HTTPFetcher) ReadCheckpoint(ctx context.Context) ([]byte, error)

func (HTTPFetcher) ReadEntryBundle

func (h HTTPFetcher) ReadEntryBundle(ctx context.Context, i uint64, p uint8) ([]byte, error)

func (HTTPFetcher) ReadIssuer

func (h HTTPFetcher) ReadIssuer(ctx context.Context, hash []byte) ([]byte, error)

func (HTTPFetcher) ReadTile

func (h HTTPFetcher) ReadTile(ctx context.Context, l, i uint64, p uint8) ([]byte, error)

func (*HTTPFetcher) SetAuthorizationHeader

func (h *HTTPFetcher) SetAuthorizationHeader(v string)

SetAuthorizationHeader sets the value to be used with an Authorization: header for every request made by this fetcher.

func (*HTTPFetcher) SetUserAgent

func (h *HTTPFetcher) SetUserAgent(ua string)

SetUserAgent sets the user agent to use when sending requests.

type LogStateTracker

type LogStateTracker struct {
	CPFetcher   CheckpointFetcherFunc
	TileFetcher TileFetcherFunc
	// Origin is the expected first line of checkpoints from the log.
	Origin              string
	ConsensusCheckpoint ConsensusCheckpointFunc

	// LatestConsistentRaw holds the raw bytes of the latest proven-consistent
	// LogState seen by this tracker.
	LatestConsistentRaw []byte
	// LatestConsistent is the deserialised form of LatestConsistentRaw
	LatestConsistent log.Checkpoint
	// The note with signatures and other metadata about the checkpoint
	CheckpointNote *note.Note
	// ProofBuilder for building proofs at LatestConsistent checkpoint.
	ProofBuilder *ProofBuilder

	CpSigVerifier note.Verifier
}

LogStateTracker represents a client-side view of a target log's state. This tracker handles verification that updates to the tracked log state are consistent with previously seen states.

func NewLogStateTracker

func NewLogStateTracker(ctx context.Context, cpF CheckpointFetcherFunc, tF TileFetcherFunc, checkpointRaw []byte, nV note.Verifier, origin string, cc ConsensusCheckpointFunc) (LogStateTracker, error)

NewLogStateTracker creates a newly initialised tracker. If a serialised LogState representation is provided then this is used as the initial tracked state, otherwise a log state is fetched from the target log.

func (*LogStateTracker) Update

func (lst *LogStateTracker) Update(ctx context.Context) ([]byte, [][]byte, []byte, error)

Update attempts to update the local view of the target log's state. If a more recent logstate is found, this method will attempt to prove that it is consistent with the local state before updating the tracker's view. Returns the old checkpoint, consistency proof, and newer checkpoint used to update. If the LatestConsistent checkpoint is 0 sized, no consistency proof will be returned since it would be meaningless to do so.

type ProofBuilder

type ProofBuilder struct {
	// contains filtered or unexported fields
}

ProofBuilder knows how to build inclusion and consistency proofs from tiles. Since the tiles commit only to immutable nodes, the job of building proofs is slightly more complex as proofs can touch "ephemeral" nodes, so these need to be synthesized.

func NewProofBuilder

func NewProofBuilder(ctx context.Context, cp log.Checkpoint, f TileFetcherFunc) (*ProofBuilder, error)

NewProofBuilder creates a new ProofBuilder object for a given tree size. The returned ProofBuilder can be re-used for proofs related to a given tree size, but it is not thread-safe and should not be accessed concurrently.

func (*ProofBuilder) ConsistencyProof

func (pb *ProofBuilder) ConsistencyProof(ctx context.Context, smaller, larger uint64) ([][]byte, error)

ConsistencyProof constructs a consistency proof between the two passed in tree sizes. This function uses the passed-in function to retrieve tiles containing any log tree nodes necessary to build the proof.

func (*ProofBuilder) InclusionProof

func (pb *ProofBuilder) InclusionProof(ctx context.Context, index uint64) ([][]byte, error)

InclusionProof constructs an inclusion proof for the leaf at index in a tree of the given size. This function uses the passed-in function to retrieve tiles containing any log tree nodes necessary to build the proof.

type TileFetcherFunc

type TileFetcherFunc func(ctx context.Context, level, index uint64, p uint8) ([]byte, error)

TileFetcherFunc is the signature of a function which can fetch the raw data for a given tile.

Note that the implementation of this MUST:

  • when asked to fetch a partial tile (i.e. p != 0), fall-back to fetching the corresponding full tile if the partial one does not exist.
  • return (either directly or wrapped) an os.ErrIsNotExist when neither the requested tile nor any fallback tile exists.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL