Nifty Pony Merchandise

    blake2
    DefinitelyTyped icon, indicating that this package has TypeScript declarations provided by the separate @types/blake2 package

    4.1.1 • Public • Published

    node-blake2

    NPM version Build status

    Why BLAKE2 for hashing? Because "BLAKE2 outperforms MD5, SHA-1, SHA-2, and SHA-3 on recent Intel CPUs" and has "no known security issues, whereas SHA-1, MD5, and SHA-512 are susceptible to length-extension". https://blake2.net/

    node-blake2 provides a stream-compatible blake2b, blake2bp, blake2s, and blake2sp Hash and KeyedHash for Node.js.

    node-blake2 was tested to work with the following compilers and platforms:

    Compiler Operating System Architecture
    GCC 8.3.0 10.2.0, 11.2.0 GNU/Linux Gentoo x86_64
    LLVM clang 11.1.0, 13.0.0 GNU/Linux Gentoo x86_64
    GCC 5.4.0 GNU/Linux Ubuntu 16.04 x86_64
    LLVM clang 11.1.0 OpenBSD 7.0 x86_64
    Apple LLVM clang 9.1.0 macOS 10.13 x86_64
    Visual Studio 2019 Windows 11 x86_64
    Visual Studio 2015 Windows 10 x86_64
    GCC 10.2.1 GNU/Linux Debian 11.2 aarch64 Cortex-A57
    Apple LLVM clang 12.0.5 macOS 12 aarch64 Apple M1

    Prerequisites for building on Windows

    Visual Studio Build Tools.

    Python is required by node-gyp.

    Starting with Node.js 12, Windows installer can automatically install Python and Visual Studio build tools.

    Install

    In your project, run:

    npm install blake2 --save

    or install from the GitHub repo:

    npm install vrza/node-blake2 --save

    Examples

    Unkeyed BLAKE2b

    var blake2 = require('blake2');
    var h = blake2.createHash('blake2b');
    h.update(Buffer.from("test"));
    console.log(h.digest("hex"));

    blake2.createHash works like node's crypto.createHash.

    Keyed BLAKE2b

    var blake2 = require('blake2');
    var h = blake2.createKeyedHash('blake2b', Buffer.from('key - up to 64 bytes for blake2b, 32 for blake2s'));
    h.update(Buffer.from("test"));
    console.log(h.digest("hex"));

    blake2.createKeyedHash takes a key argument like crypto.createHmac. Although it is not an HMAC, a keyed hash serves the same purpose.

    Important notes

    • blake2.create{Hash,KeyedHash} support algorithms blake2b, blake2bp, blake2s, and blake2sp.
    • Data passed to .update on blake2.{Hash,KeyedHash} must be a Buffer.
    • Keys passed to blake2.createKeyedHash(algo, key) must be a Buffer.
    • Just as with crypto.Hash, .digest() can only be called once.

    With streams

    This works exactly like it does with crypto.Hash. See b2sum.js.

    Custom digest length

    BLAKE2 can generate digests between 1-64 bytes for BLAKE2b and 1-32 bytes for BLAKE2s. Pass digestLength as an option to use a digest shorter than the default (maximum length):

    var blake2 = require('blake2');
    var h = blake2.createHash('blake2b', {digestLength: 16});
    h.update(Buffer.from("test"));
    h.digest(); // Returns a Buffer with 16 bytes

    or with a key:

    var blake2 = require('blake2');
    var h = blake2.createKeyedHash('blake2b', Buffer.from('my key'), {digestLength: 16});
    h.update(Buffer.from("test"));
    h.digest(); // Returns a Buffer with 16 bytes

    Note that BLAKE2 will generate completely different digests for shorter digest lengths; they are not simply a slice of the default digest.

    Copying a hash object

    You can call .copy() on a Hash or KeyedHash, which will return a new object with all of the internal BLAKE2 state copied from the source object.

    var blake2 = require('blake2');
    var h = blake2.createHash('blake2b');
    h.update(Buffer.from("test"));
    
    // Call .copy() before .digest(), because .digest() finalizes internal state
    var j = h.copy();
    
    // h is unaffected by updates to j
    j.update(Buffer.from("more"));
    
    console.log(h.digest());
    console.log(j.digest());

    Known issues

    • On Windows, node-blake2 requires enabling AVX instructions as a workaround for the way upstream build preprocessor detects support for SSE2.

    Install

    npm i blake2

    DownloadsWeekly Downloads

    2,413

    Version

    4.1.1

    License

    ISC

    Unpacked Size

    5.7 MB

    Total Files

    96

    Last publish

    Collaborators

    • ludios
    • vrza