class NodeDigest

Defined at line 32 of file ../../src/lib/digest/node-digest.h

Digest wrapper functions for hashing data organized into "nodes" of a fixed size. The specific

algorithm is backwards compatible with BlobFS:

digest = Hash((id | data_off) + (data_len - data_off) + node_data + padding)

where:

* id is usage-specific (e.g. the tree level when used in a Merkle tree).

* data_off is the offset for a specific node.

* data_len is the total length of the data.

* node_data is the actual bytes from the node.

* padding is |kNodeSize - length| zeros.

Public Methods

zx_status_t SetNodeSize (size_t node_size)

Sets the node size if |node_size| satisfies |IsValidNodeSize|.

Defined at line 18 of file ../../src/lib/digest/node-digest.cc

zx_status_t Reset (size_t data_off, size_t data_len)

Wrapper for Digest::Init. This primes the working |digest_| initializing it

and hashing two values: the "locality", which is the bitwise-XOR of the |id_| and |data_off|,

and the "length", which is the |node_size_| or |data_len| - |data-off|, whichever is less.

Defined at line 26 of file ../../src/lib/digest/node-digest.cc

void NodeDigest ()

Defined at line 34 of file ../../src/lib/digest/node-digest.h

void ~NodeDigest ()

Defined at line 35 of file ../../src/lib/digest/node-digest.h

void NodeDigest (const NodeDigest & )

Defined at line 36 of file ../../src/lib/digest/node-digest.h

void NodeDigest (NodeDigest && )

Defined at line 36 of file ../../src/lib/digest/node-digest.h

NodeDigest & operator= (const NodeDigest & )

Defined at line 36 of file ../../src/lib/digest/node-digest.h

NodeDigest & operator= (NodeDigest && )

Defined at line 36 of file ../../src/lib/digest/node-digest.h

const Digest & get ()

Defined at line 38 of file ../../src/lib/digest/node-digest.h

size_t len ()

Defined at line 39 of file ../../src/lib/digest/node-digest.h

uint64_t id ()

Defined at line 40 of file ../../src/lib/digest/node-digest.h

size_t node_size ()

Defined at line 41 of file ../../src/lib/digest/node-digest.h

void set_id (uint64_t id)

Defined at line 42 of file ../../src/lib/digest/node-digest.h

size_t Append (const void * buf, size_t buf_len)

Wrapper for Digest::Update. This will hash data up to |buf_len| bytes from |buf|, and return

the number of bytes hashed.

Defined at line 44 of file ../../src/lib/digest/node-digest.cc

bool IsAligned (size_t data_off)

Returns true if |data_off| is aligned to a node boundary.

Defined at line 48 of file ../../src/lib/digest/node-digest.h

size_t ToNode (size_t data_off)

Returns the node number for a given |data_off|.

Defined at line 51 of file ../../src/lib/digest/node-digest.h

size_t PrevAligned (size_t data_off)

Returns the greatest node boundary that is not greater than |data_off|. Returns |data_off| if

it is node-aligned.

Defined at line 55 of file ../../src/lib/digest/node-digest.h

size_t NextAligned (size_t data_off)

Returns the smallest node boundary that is not less than |data_off|. Returns |data_off| if it

is node-aligned.

Defined at line 59 of file ../../src/lib/digest/node-digest.h

void PadWithZeros ()

Appends zeros to fill up the rest of the node.

Defined at line 61 of file ../../src/lib/digest/node-digest.cc

size_t MaxAligned ()

Returns the largest node-aligned offset.

Defined at line 62 of file ../../src/lib/digest/node-digest.h

bool IsValidNodeSize (size_t node_size)

Returns |true| if |node_size| is a power of 2 between |kMinNodeSize| and |kMaxNodeSize|.

Defined at line 77 of file ../../src/lib/digest/node-digest.h