Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/dchest/blake2s-js
BLAKE2s cryptographic hash function in JavaScript
https://github.com/dchest/blake2s-js
blake2 blake2s hash javascript
Last synced: 13 days ago
JSON representation
BLAKE2s cryptographic hash function in JavaScript
- Host: GitHub
- URL: https://github.com/dchest/blake2s-js
- Owner: dchest
- License: unlicense
- Created: 2012-12-29T17:15:31.000Z (almost 12 years ago)
- Default Branch: master
- Last Pushed: 2019-10-29T14:39:53.000Z (about 5 years ago)
- Last Synced: 2024-10-14T12:07:59.630Z (26 days ago)
- Topics: blake2, blake2s, hash, javascript
- Language: JavaScript
- Homepage: https://dchest.github.io/blake2s-js/
- Size: 137 KB
- Stars: 86
- Watchers: 12
- Forks: 15
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-nodejs-pure-js - BLAKE2s
README
BLAKE2s implementation in JavaScript
====================================BLAKE2 is a fast and secure cryptographic hash function.
This is a pure JavaScript public domain implementation of its BLAKE2s flavor
(currently without tree mode support).* [BLAKE2s-js Demo](https://dchest.github.io/blake2s-js/)
* [BLAKE2 Website](https://blake2.net)[![Build Status](https://travis-ci.org/dchest/blake2s-js.svg?branch=master)
](https://travis-ci.org/dchest/blake2s-js)**This implementation is maintained, but will not receive new features. If you're looking for a full implementation of BLAKE2s, BLAKE2Xs and BLAKE2b, see my packages from [StableLib](https://github.com/StableLib/stablelib): `@stablelib/blake2s`, `@stablelib/blake2xs`, and `@stablelib/blake2b`.**
Installation
------------Via NPM:
$ npm install blake2s-js
or just download `blake2s.min.js`.
Usage
-----### new BLAKE2s(digestLength, key)
### new BLAKE2s(digestLength, config)Creates a new instance of BLAKE2s hash with the given length of digest (default
and maximum 32) and an optional secret key (a `Uint8Array` or `Array` of
bytes) or config object in the following format:{
salt: // 8-byte Uint8Array or Array of bytes
personalization: // 8-byte Uint8Array or Array of bytes
key: // 0-32-byte Uint8Array or Array of bytes
}All keys in config are optional.
#### .update(data[, offset, length])
Updates the hash with data (a `Uint8Array` or `Array` of bytes). starting at
the given `offset` (optional, defaults to 0) and consuming the given `length`
(optional, defaults to the length of `data` minus `offset`).Returns this instance to enable method chaining.
#### .digest()
Returns a `Uint8Array` with the digest of consumed data. Further updates will
throw error. Repeat calls of `digest()` will return the same digest.#### .hexDigest()
Like `digest()`, but returns a hex-encoded string.
#### BLAKE2s.digestLength = 32
Maximum digest length.
#### BLAKE2s.blockLength = 64
Block size of the hash function.
#### BLAKE2s.keyLength = 32
Maximum key length.
#### BLAKE2s.personalizationLength = 8
Length of personalization parameter.
#### BLAKE2s.saltLength = 8
Length of salt parameter.
Example
-------```javascript
var h = new BLAKE2s(32);
h.update(new Uint8Array([1,2,3]));
h.hexDigest(); // returns string with hex digest
h.digest(); // returns Uint8Array// Keyed:
var key = new Uint8Array(BLAKE2s.keyLength);
window.crypto.getRandomValues(key);
var h = new BLAKE2s(32, key);
...// Keyed and salted:
var key = new Uint8Array(BLAKE2s.keyLength);
var salt = new Uint8Array(BLAKE2s.saltLength);
window.crypto.getRandomValues(key);
window.crypto.getRandomValues(salt);
var h = new BLAKE2s(32, { key: key, salt: salt });
...// Personalized:
var data = new Uint8Array([1, 2, 3]);
var pers1 = new Uint8Array([1, 0, 0, 0, 0, 0, 0, 0]);
var h1 = new BLAKE2s(32, { personalization: pers1 });
h1.update(data);var pers2 = new Uint8Array([2, 0, 0, 0, 0, 0, 0, 0]);
var h2 = new BLAKE2s(32, { personalization: pers2 });
h2.update(data);h1.hexDigest() !== h2.hexDigest() // true
```