npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

blake2

v5.0.0

Published

All four BLAKE2 variants (blake2b, blake2bp, blake2s, blake2sp) for Node.js, with stream support

Downloads

20,266

Readme

node-blake2

NPM version Build status

Why BLAKE2 for hashing? "BLAKE2 is a cryptographic hash function faster than MD5, SHA-1, SHA-2, and SHA-3, yet is at least as secure as the latest standard SHA-3. BLAKE2 has been adopted by many projects due to its high speed, security, and simplicity." https://blake2.net/

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

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

| Compiler | Operating System | Architecture | |-----------------------------------|-----------------------------|--------------------------| | GCC 8.3.0, 10.2.0, 11.2.0, 12.2.1 | GNU/Linux Gentoo | x86_64 | | LLVM clang 11.1.0, 13.0.0, 15.0.7 | 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 RPi OS 2021-10-30 | armv7l Cortex-A53 RPi 3 | | GCC 10.2.1 | GNU/Linux Debian 11.2 | aarch64 Cortex-A57 QEMU | | GCC 9.3.0 | GNU/Linux Ubuntu 20.04 | aarch64 Cortex-A72 RPi 4 | | 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.

The Node.js 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 the upstream build preprocessor detects support for SSE2.