Pure Javascript version of sodium-native
Problem: Both `crypto_secretbox_detached` and the corresponding `crypto_secretbox_open_detached` have a bug where the MAC is added as a suffix rather than the prefix. This creates a problem where the methods are compatible with each other but incompatible with other libsodium implementations. Solution: Reverse the backward implementation and ensure that the MAC is added to the output as a prefix rather than as a suffix. |
||
---|---|---|
internal | ||
.gitignore | ||
.travis.yml | ||
crypto_aead.js | ||
crypto_box.js | ||
crypto_generichash.js | ||
crypto_hash_sha256.js | ||
crypto_hash.js | ||
crypto_kdf.js | ||
crypto_kx.js | ||
crypto_onetimeauth.js | ||
crypto_scalarmult.js | ||
crypto_secretbox.js | ||
crypto_shorthash.js | ||
crypto_sign.js | ||
crypto_stream_chacha20.js | ||
crypto_stream.js | ||
crypto_verify.js | ||
example.js | ||
helpers.js | ||
index.js | ||
LICENSE | ||
memory.js | ||
package.json | ||
randombytes.js | ||
README.md | ||
test.js |
sodium-javascript
WIP - a pure javascript version of sodium-native. Based on tweetnacl
Usage
const sodium = require('sodium-javascript')
const key = Buffer.alloc(sodium.crypto_secretbox_KEYBYTES)
const nonce = Buffer.alloc(sodium.crypto_secretbox_NONCEBYTES)
sodium.randombytes_buf(key)
sodium.randombytes_buf(nonce)
const message = Buffer.from('Hello, World!')
const cipher = Buffer.alloc(message.length + sodium.crypto_secretbox_MACBYTES)
sodium.crypto_secretbox_easy(cipher, message, nonce, key)
console.log('Encrypted:', cipher)
const plainText = Buffer.alloc(cipher.length - sodium.crypto_secretbox_MACBYTES)
sodium.crypto_secretbox_open_easy(plainText, cipher, nonce, key)
console.log('Plaintext:', plainText.toString())
API
See sodium-native. This is a work in progress so all functions are not implemented yet.
This module is organised into individual submodules which can be required
independently for smaller bundles in the browser. To leverage automatic
switching between sodium-javascript
and sodium-native
, see
sodium-universal
.
Install
npm install sodium-javascript