# chacha-native

> native chacha20/poly1305 bindings in nodejs

Latest version **2.0.3** (published 2019-12-12) · MIT license · 0 weekly downloads

## Install

```sh
npm install chacha-native
pnpm add chacha-native
yarn add chacha-native
bun add chacha-native
```

## Health

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

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 2.0.3 |
| Published | 2019-12-12 |
| First published | 2015-03-16 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 3 |
| Unpacked size | 45.9 KB |
| Known vulnerabilities | 0 |
| Install scripts | yes |
| GitHub stars | 6 |
| Maintainers | cwmma |

## Links

- npm: https://www.npmjs.com/package/chacha-native
- Repository: https://github.com/calvinmetcalf/chacha-native
- Homepage: https://github.com/calvinmetcalf/chacha-native#readme
- Issues: https://github.com/calvinmetcalf/chacha-native/issues
- npm.io page: https://npm.io/package/chacha-native

## Dependencies (3)

- [nan](https://npm.io/package/nan.md) ^2.4.0
- [bindings](https://npm.io/package/bindings.md) ^1.2.1
- [inherits](https://npm.io/package/inherits.md) ^2.0.1

## Recent versions

- 2.0.3 (latest) — 2019-12-12
- 2.0.2 — 2017-05-09
- 2.0.1 — 2016-03-31
- 2.0.0 — 2015-09-10
- 1.2.2 — 2015-06-19
- 1.2.1 — 2015-04-29
- 1.2.0 — 2015-03-20
- 1.1.1 — 2015-03-18
- 1.1.0 — 2015-03-17
- 1.0.0 — 2015-03-16

## README

chacha native
===
[![Build Status](https://travis-ci.org/calvinmetcalf/chacha-native.svg)](https://travis-ci.org/calvinmetcalf/chacha-native)

Node bindings for Chacha20/poly1305, api is identical to [my pure JavaScript library](https://github.com/calvinmetcalf/chacha20poly1305), Chacha20 is based
on [this implementation](http://chacha20.insanecoding.org/) with Poly1305 based on [poly1305-donna](https://github.com/floodyberry/poly1305-donna) by way of [libressl](https://github.com/libressl-portable/openbsd/blob/6e5b37ae2618b181b18de9cb33262259e681fb85/src/lib/libssl/src/crypto/poly1305/poly1305.h). By default it implements the
[IETF](https://tools.ietf.org/html/draft-irtf-cfrg-chacha20-poly1305-10) version
of the chacha20 poly1305 aead, but the legacy method does the version compatibale with borringssl and others.

API
===

```js
var chacha = require('chacha-native');
```

# ChaCha20 Poly1305

```js
var cipher =  chacha.createCipher(key, nonce);
var decipher =  chacha.createDecipher(key, nonce);
```

Create a cipher object by passing it a 256 bit key and 96 bit nonce, API is
identical to crypto.createCipheriv()/createDecipheriv in node >= 11 with a gcm
mode, in other words, e.g.

```js
cipher.setAAD(nonencrypteddata);// must be called before data
var tag = cipher.getAuthTag();// must be called after finish or end

decipher.setAAD(nonencrypteddata);// must be called before data
decipher.setAuthTag(tag);// must be called before data
```

decipher with throw if you don't set a tag or the tag doesn't match. See the [node docs](https://github.com/joyent/node/blob/cfcb1de130867197cbc9c6012b7e84e08e53d032/doc/api/crypto.markdown#cryptocreatecipherivalgorithm-key-iv) for more info (the iv length for gcm is also 96 bit fyi).

# ChaCha20


```js
var cipher =  chacha.chacha(key, nonce);
```

The API is identical to a cipher/decipher object in node >= 10. Encryption and decryption are the same.

# Poly1305

```js
var hmac =  chacha.createHmac(key);
```

API is identical to an hmac in node, so it's a stream with update and digest methods.

# Legacy Aead

A variant version of the aead that is compatible with boringssl.

```js
var cipher =  new chacha.AeadLegacy(key, nonce);
var decipher =  new chacha.AeadLegacy(key, nonce, true);
```

The third parameter is whether it should decipher, otherwise identical to createCipher/createDecipher. Doesn't implement variable length tags.

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