# fast-sha256

> SHA-256, HMAC and PBKDF2 implementation with typed arrays for modern browsers and Node.js

Latest version **1.3.0** (published 2020-01-16) · Unlicense license · 0 weekly downloads

## Install

```sh
npm install fast-sha256
pnpm add fast-sha256
yarn add fast-sha256
bun add fast-sha256
```

## Health

**Score 25/100 (F)** — status: abandoned.

Positive: has types; no vulnerabilities; high quality score.

Warnings: low downloads; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.3.0 |
| Published | 2020-01-16 |
| First published | 2014-07-11 |
| Weekly downloads | 0 |
| License | Unlicense |
| TypeScript types | bundled |
| Module format | CommonJS |
| Dependencies | 0 |
| Unpacked size | 26.6 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 137 |
| Author | Dmitry Chestnykh |
| Maintainers | dchest |
| Keywords | hash, sha256, pbkdf2, cryptography, crypto, hmac |

## Links

- npm: https://www.npmjs.com/package/fast-sha256
- Repository: https://github.com/dchest/fast-sha256-js
- Homepage: https://github.com/dchest/fast-sha256-js#readme
- Issues: https://github.com/dchest/fast-sha256-js/issues
- npm.io page: https://npm.io/package/fast-sha256

## Alternatives

- [@gemini-wallet/core](https://npm.io/package/@gemini-wallet/core.md) — 515.6K weekly downloads
- [utility](https://npm.io/package/utility.md) — 416.6K weekly downloads
- [@primno/dpapi](https://npm.io/package/@primno/dpapi.md) — 7.2K weekly downloads
- [pi-readseek](https://npm.io/package/pi-readseek.md) — 3.7K weekly downloads
- [@emilia-protocol/verify](https://npm.io/package/@emilia-protocol/verify.md) — 1.1K weekly downloads

## Recent versions

- 1.3.0 (latest) — 2020-01-16
- 1.2.0 — 2020-01-06
- 1.1.1 — 2019-10-28
- 1.1.0 — 2017-11-17
- 1.0.0 — 2016-03-18
- 0.9.2 — 2014-09-03
- 0.9.1 — 2014-07-11

## README

fast-sha256-js
==============

SHA-256 implementation for JavaScript/TypeScript with typed arrays
that works in modern browsers and Node.js.
Implements the hash function, HMAC, and PBKDF2.

Public domain. No warranty.

[![Build Status](https://travis-ci.org/dchest/fast-sha256-js.svg?branch=master)
](https://travis-ci.org/dchest/fast-sha256-js)


Installation
------------

You can install fast-sha256-js via [NPM](https://www.npmjs.org/):

    $ npm install fast-sha256

or [download source code](https://github.com/dchest/fast-sha256-js/releases).


Usage
-----

Functions accept and return `Uint8Array`s.
To convert strings, use external library (for example,
[nacl.util](https://github.com/dchest/tweetnacl-util-js/)).

### sha256(message)

Returns a SHA-256 hash of the message.


### sha256.hmac(key, message)

Returns an HMAC-SHA-256 of the message for the key.


### sha256.pbkdf2(password, salt, rounds, dkLen)

Returns a key of length dkLen derived using PBKDF2-HMAC-SHA256
from the given password, salt, and the number of rounds.


### sha256.hkdf(key, salt, info?, length?)

Returns a key of the given length derived using HKDF as
described in RFC 5869.

There are also classes `Hash` and `HMAC`:

### new sha256.Hash()

Constructor for hash instance. Should be used with `new`.
Available methods: `update()`, `digest()`, `reset()`, etc.

### new sha256.HMAC(key)

Constructor for HMAC instance. Should be used with `new`.
Available methods: `update()`, `digest()`, `reset()`, etc.

See comments in `src/sha256.ts` for details.


Usage with TypeScript
---------------------

```typescript
import sha256, { Hash, HMAC } from "fast-sha256";

sha256(data) // default export is hash

const h = new HMAC(key); // also Hash and HMAC classes
const mac = h.update(data).digest();

// alternatively:

import * as sha256 from "fast-sha256";

sha256.pbkdf2(password, salt, iterations, dkLen); // returns derived key
sha256.hash(data)

const hasher = new sha256.Hash();
hasher.update(data1);
hasher.update(data2);
const result = hasher.digest();
```


Testing and building
--------------------

Install development dependencies:

    $ npm install

Build JavaScript, minified version, and typings:

    $ npm run build

Run tests:

    $ npm test

Run tests on a different source file:

    $ SHA256_SRC=sha256.min.js npm test

Run benchmark:

    $ npm run bench

(or in a browser, open `tests/bench.html`).

Lint:

    $ npm run lint


Notes
-----

While this implementation is pretty fast compared to previous generation
implementations, if you need an even faster one, check out
[asmCrypto](https://github.com/vibornoff/asmcrypto.js).

---
_Source: https://npm.io/package/fast-sha256 · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
