lights FAQ Forum   github.com/luapower/blake2
blake2

Hashing & Compression
blake2
sha2
md4
md5
hmac
xxhash
pmurhash
murmurhash3
crc32
zlib
minizip
libsodium

blake2

BLAKE2 hashing


local blake2 = require'blake2'

A ffi binding of the BLAKE2 fast cryptographic hash.

API

In the table below, ? is either s, b, sp or bp for each variant of the BLAKE2 algorithm.

blake2.blake2?(s, [size], [key], [#out]) -> s
blake2.blake2?(cdata, size, [key]) -> s
compute the hash of a string or a cdata buffer.
blake2.blake2?_digest([key, [#out] | opt_t]) -> digest
get an object/function that can consume multiple data chunks before returning the hash
digest[:update](s, [size])
digest[:update](cdata, size)
consume a data chunk
digest[:final]() -> s finalize and get the hash
digest:reset() prepare for another digestion

The hash is returned raw in a Lua string. To get it as hex use glue.tohex().

The optional key arg is for keyed hashing (up to 64 bytes for BLAKE2b, up to 32 bytes for BLAKE2s).

The optional #out arg is for reducing the length of the output hash.

The constructors blake2s_digest and blake2b_digest can take a table in place of the key arg in which more options can be specified:

  • salt='': salt for randomized hashing (up to 16 bytes for BLAKE2b, up to 8 bytes for BLAKE2s).
  • personal='': personalization string (up to 16 bytes for BLAKE2b, up to 8 bytes for BLAKE2s).
  • fanout=1: fanout (0 to 255, 0 if unlimited, 1 in sequential mode).
  • depth=1: maximal depth of tree (1 to 255, 255 if unlimited, 1 in sequential mode).
  • leaf_length=0: maximal byte length of leaf (0 to 2^32-1, 0 if unlimited or in sequential mode).
  • node_offset=0: node offset (0 to 2^64-1 for BLAKE2b, 0 to 2^48-1 for BLAKE2s, 0 for the first, leftmost, leaf, or in sequential mode).
  • node_depth=0: node depth (0 to 255, 0 for leaves, or in sequential mode).
  • inner_length=0: inner digest length (0 to 64 for BLAKE2b, 0 to 32 for BLAKE2s, 0 in sequential mode).
  • key=nil: key string for keyed hashing (up to 64 bytes for BLAKE2b, up to 32 bytes for BLAKE2s).
  • hash_length: optional, for reducing the length of the output hash.

NOTE: the salt and personal options are zero-padded so 'foo' is the same value as 'foo\0' or 'foo\0\0' with them (not so with key).

See section 2.10 in BLAKE2 specification for comprehensive review of tree hashing.


Last updated: 18 months ago | Edit on GitHub

Pkg type:Lua
Version: dev-18-g9fcef94
Last commit:
License: PD
Import: BLAKE2
Import ver: 9b8de73
Requires: none
Required by: none

Top