The missing crypto module for Node.js. Bcrypto provides you with a consistent interface across Node.js and the browser. It is implemented as a Node.js addon for C libraries libtorsion and libsecp256k1 with corresponding implementations in JavaScript.
const rng = require('bcrypto/lib/random');
const entropy = rng.randomBytes(32);
const Hash256 = require('bcrypto/lib/hash256');
const digest = Hash256.digest(Buffer.alloc(32, 0xaa));
See the ./lib
directory for available modules and APIs.
nodejs (linux) | nodejs (macos) | nodejs (win) | browser | |
---|---|---|---|---|
aead | c (libtorsion¹) | c (libtorsion¹) | c (libtorsion) | js |
aes | c (libtorsion) | c (libtorsion) | c (libtorsion) | js |
bcrypt | c (libtorsion) | c (libtorsion) | c (libtorsion) | js |
blake2b{160,256,384,512} | c (libtorsion) | c (libtorsion) | c (libtorsion) | js |
blake2s{128,160,224,256} | c (libtorsion) | c (libtorsion) | c (libtorsion) | js |
bn | js w/ bigint | js w/ bigint | js w/ bigint | js |
chacha20 | c (libtorsion¹) | c (libtorsion¹) | c (libtorsion) | js |
cshake{128,256} | c (libtorsion¹) | c (libtorsion¹) | c (libtorsion) | js |
ctr-drbg | c (libtorsion) | c (libtorsion) | c (libtorsion) | js |
dsa | c (libtorsion) | c (libtorsion) | c (libtorsion) | js |
eb2k | c (libtorsion) | c (libtorsion) | c (libtorsion) | js |
ecies | c (libtorsion¹) | c (libtorsion¹) | c (libtorsion) | js |
ed25519 | c (libtorsion) | c (libtorsion) | c (libtorsion) | js |
ed448 | c (libtorsion) | c (libtorsion) | c (libtorsion) | js |
gost94 | c (libtorsion) | c (libtorsion) | c (libtorsion) | js |
hash160 | c (libtorsion¹) | c (libtorsion¹) | c (libtorsion) | js |
hash256 | c (libtorsion¹) | c (libtorsion¹) | c (libtorsion) | js |
hash-drbg | c (libtorsion) | c (libtorsion) | c (libtorsion) | js |
hkdf | c (libtorsion) | c (libtorsion) | c (libtorsion) | js |
hmac-drbg | c (libtorsion) | c (libtorsion) | c (libtorsion) | js |
keccak/sha3{224,256,384,512} | c (libtorsion¹) | c (libtorsion¹) | c (libtorsion) | js |
kmac{128,256} | c (libtorsion¹) | c (libtorsion¹) | c (libtorsion) | js |
md{2,4,5} | c (libtorsion) | c (libtorsion) | c (libtorsion) | js |
md5sha1 | c (libtorsion) | c (libtorsion) | c (libtorsion) | js |
merkle | js | js | js | js |
mrkl | js | js | js | js |
murmur3 | c (libtorsion) | c (libtorsion) | c (libtorsion) | js |
p{192,224,256,384,521} | c (libtorsion) | c (libtorsion) | c (libtorsion) | js |
pbkdf2 | c (libtorsion) | c (libtorsion) | c (libtorsion) | js |
pgp | js | js | js | js |
poly1305 | c (libtorsion) | c (libtorsion) | c (libtorsion) | js |
random | c (openssl²) | c (openssl²) | c (openssl²) | js³ |
rc4 | c (libtorsion) | c (libtorsion) | c (libtorsion) | js |
ripemd160 | c (libtorsion) | c (libtorsion) | c (libtorsion) | js |
rsa | c (libtorsion) | c (libtorsion) | c (libtorsion) | js |
rsaies | c (libtorsion¹) | c (libtorsion¹) | c (libtorsion) | js |
salsa20 | c (libtorsion¹) | c (libtorsion¹) | c (libtorsion) | js |
schnorr | c (libtorsion) | c (libtorsion) | c (libtorsion) | js |
scrypt | c (libtorsion) | c (libtorsion) | c (libtorsion) | js |
secp256k1 | c (libsecp256k1²) | c (libsecp256k1²) | c (libsecp256k1²) | js |
sha1 | c (libtorsion) | c (libtorsion) | c (libtorsion) | js |
sha{224,256,384,512} | c (libtorsion¹) | c (libtorsion¹) | c (libtorsion) | js |
shake{128,256} | c (libtorsion¹) | c (libtorsion¹) | c (libtorsion) | js |
siphash | c (libtorsion) | c (libtorsion) | c (libtorsion) | js |
ssh | js | js | js | js |
whirlpool | c (libtorsion) | c (libtorsion) | c (libtorsion) | js |
x25519 | c (libtorsion) | c (libtorsion) | c (libtorsion) | js |
x448 | c (libtorsion) | c (libtorsion) | c (libtorsion) | js |
- with x86-64 assembly
- optionally with libtorsion
- using the webcrypto api
If you contribute code to this project, you are implicitly allowing your code
to be distributed under the MIT license. You are also implicitly verifying that
all code is your original work. </legalese>
- Copyright (c) 2017-2019, Christopher Jeffrey (MIT License).
See LICENSE for more info.