Skip to main content

TransparencyLog

Struct TransparencyLog 

Source
pub struct TransparencyLog { /* private fields */ }
Expand description

Append-only Merkle log.

Maintains an internal subtree-roots cache keyed by (level, index) so Self::inclusion_proof runs in O(log n) instead of O(n) (issue #36). The cache is in-memory only — no on-disk format change.

subtree_roots[level][j] is the hash of the COMPLETE 2^level subtree covering leaves [j*2^level, (j+1)*2^level). Only fully-populated subtrees are stored; partial right-edge subtrees are recomputed on demand from the cached children (still O(log n) total).

Implementations§

Source§

impl TransparencyLog

Source

pub fn new() -> Self

Construct an empty log with no operator master key set.

Source

pub fn set_operator(&mut self, master_key: VerifyingKey)

Register the operator master key used to verify STHs.

Source

pub fn tree_size(&self) -> u64

Number of leaves currently in the log.

Source

pub fn root_hash(&self) -> [u8; 32]

Current Merkle root hash. Returns the empty-tree sentinel when the log has no entries.

Uses the subtree-roots cache (issue #36): O(log n) for any tree size, vs O(n) before the cache.

Source

pub fn entry(&self, index: u64) -> Option<&LogEntry>

Look up the entry at index, if any.

Source

pub fn entries(&self) -> &[LogEntry]

All entries in log order.

Source

pub fn leaf_hash_at(&self, index: u64) -> Option<[u8; 32]>

Return the stored leaf hash for the entry at index, if any.

Pairs with Self::inclusion_proof and verify_inclusion_proof: a verifier holding only the log and a pinned root hash can verify any entry’s inclusion without needing the original payload bytes.

Returns None when index >= tree_size() or when index does not fit in usize.

Source

pub fn append( &mut self, kind: LogEntryKind, payload: &[u8], timestamp_version: u64, ) -> Result<u64>

Append a new leaf and return its sequence number.

§Errors

Returns Err on arithmetic overflow of the sequence counter (unreachable in practice below 2^64 entries).

Source

pub fn inclusion_proof(&self, leaf_index: u64) -> Result<InclusionProof>

Generate an inclusion proof for the leaf at leaf_index.

§Errors

Returns Err if leaf_index >= tree_size.

Source

pub fn canonical_tree_head(&self) -> Vec<u8>

Canonical bytes of the current tree head, used as the message the operator signs.

Source

pub fn sign_tree_head(&self, operator_key: &SigningKey) -> SignedTreeHead

Produce a SignedTreeHead for the current state.

Source

pub fn verify_tree_head(&self, sth: &SignedTreeHead) -> Result<()>

Verify a SignedTreeHead against the registered operator master key and against the log’s current root.

§Errors

Returns Err if no operator is registered, if the signature does not verify, or if the STH’s root_hash does not match the log’s current root.

Trait Implementations§

Source§

impl Debug for TransparencyLog

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for TransparencyLog

Source§

fn default() -> TransparencyLog

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more