native chacha20/poly1305 bindings in nodejs
npm install chacha-nativechacha native
===

Node bindings for Chacha20/poly1305, api is identical to my pure JavaScript library, Chacha20 is based
on this implementation with Poly1305 based on poly1305-donna by way of libressl. By default it implements the
IETF 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');
`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 for more info (the iv length for gcm is also 96 bit fyi).
`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.
`js`
var hmac = chacha.createHmac(key);
API is identical to an hmac in node, so it's a stream with update and digest methods.
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.