F3. Checksum
(F3 v0.1.0)
Copy Markdown
XXH64 checksums for chunk bytes.
The pinned writer uses xxhash_rust Xxh64 with seed 0. Postscript
checksums stay recorded and are not recomputed. A chunk checksum is
checked only when the footer field is present.
Summary
Functions
Checks a chunk checksum. nil means the footer did not store one and
returns :ok. A mismatch is {:error, %F3.Error{category: :checksum}}.
This does not raise.
XXH64 of bytes with seed 0. bytes must be a binary. Any other term
raises FunctionClauseError.
XXH64 of bytes with an integer seed. Seed 0 matches xxh64/1.
Functions
@spec verify(binary(), non_neg_integer() | nil) :: :ok | {:error, F3.Error.t()}
Checks a chunk checksum. nil means the footer did not store one and
returns :ok. A mismatch is {:error, %F3.Error{category: :checksum}}.
This does not raise.
Examples
iex> :ok = F3.Checksum.verify("a", nil)
iex> :ok = F3.Checksum.verify("a", F3.Checksum.xxh64("a"))
iex> {:error, error} = F3.Checksum.verify("a", 1)
iex> error.message
"chunk checksum mismatch"
@spec xxh64(binary()) :: non_neg_integer()
XXH64 of bytes with seed 0. bytes must be a binary. Any other term
raises FunctionClauseError.
Examples
iex> F3.Checksum.xxh64("")
17241709254077376921
iex> F3.Checksum.xxh64("a")
15154266338359012955
@spec xxh64(binary(), integer()) :: non_neg_integer()
XXH64 of bytes with an integer seed. Seed 0 matches xxh64/1.
Examples
iex> F3.Checksum.xxh64("a", 0)
15154266338359012955