A port of Frank Denis' libsodium cryptography library for React Native. This library is intended to be a drop-in replacement for pre-existing NodeJs and JavaScript ports.
Only a subset of the functions have been exposed, however, contributions are most welcome.
The goal of this project is to be thin, stable, unopionated wrapper around libsodium.
All methods exposed are more or less a direct translation of the libsodium C API. This means that most data types are buffers and you have to manage allocating return values and passing them in as arguments instead of receiving them as return values.
This makes this API harder to use than other libsodium wrappers out there, but also means that you'll be able to get a lot of performance / memory improvements as you can do stuff like inline encryption / decryption, re-use buffers etc.
npm install sodium-react-native-direct
import sodium from "sodium-react-native-direct";
const key = sodium_malloc(sodium.crypto_kdf_KEYBYTES)
const subkey = sodium_malloc(sodium.crypto_kdf_BYTES_MAX)
const ctx = sodium_malloc(sodium.crypto_kdf_CONTEXTBYTES
sodium.crypto_kdf_keygen(key);
sodium.crypto_kdf_derive_from_key(subkey, 1, ctx, key)
In your metro.config.js
add a mapping to resolve modules:
...
const config = {
resolver: {
extraNodeModules: {
'sodium-universal': path.resolve(__dirname, './node_modules/sodium-react-native-direct'),
},
blacklistRE: exclusionList([
/\/node_modules\/sodium-universal\/.*/,
]),
},
};
Full API documentation for each method may be found under the links in each section.
crypto_aead_xchacha20poly1305_ietf_keygen
crypto_aead_xchacha20poly1305_ietf_encrypt
crypto_aead_xchacha20poly1305_ietf_decrypt
crypto_aead_chacha20poly1305_ietf_keygen
crypto_aead_chacha20poly1305_ietf_encrypt
crypto_aead_chacha20poly1305_ietf_decrypt
crypto_aead_xchacha20poly1305_ietf_KEYBYTES
crypto_aead_xchacha20poly1305_ietf_NPUBBYTES
crypto_aead_xchacha20poly1305_ietf_ABYTES
crypto_aead_chacha20poly1305_ietf_KEYBYTES
crypto_aead_chacha20poly1305_ietf_NPUBBYTES
crypto_aead_chacha20poly1305_ietf_ABYTES
Curve25519 & Ed25519 arithmetic
crypto_core_ed25519_scalar_random
crypto_core_ed25519_add
crypto_core_ed25519_sub
crypto_core_ed25519_from_uniform
crypto_scalarmult
crypto_scalarmult_base
crypto_scalarmult_ed25519
crypto_scalarmult_ed25519_base
Clamping involves clearing the lowest 3 bits of the result, ensuring the result lies on the main subgroup of the curve. However, this breaks point inversion which is undesireable for some protcocols. See here for a more detailed explanation.
crypto_scalarmult_ed25519_noclamp
crypto_scalarmult_ed25519_base_noclamp
crypto_core_ed25519_SCALARBYTES
crypto_core_ed25519_BYTES
crypto_core_ed25519_UNIFORMBYTES
crypto_scalarmult_ed25519_BYTES
crypto_scalarmult_ed25519_SCALARBYTES
crypto_pwhash
crypto_pwhash_async
crypto_pwhash_BYTES_MIN
crypto_pwhash_BYTES_MAX
crypto_pwhash_PASSWD_MIN
crypto_pwhash_PASSWD_MAX
crypto_pwhash_SALTBYTES
crypto_pwhash_OPSLIMIT_MIN
crypto_pwhash_OPSLIMIT_MAX
crypto_pwhash_MEMLIMIT_MIN
crypto_pwhash_MEMLIMIT_MAX
crypto_pwhash_ALG_DEFAULT
crypto_pwhash_ALG_ARGON2I13
crypto_pwhash_ALG_ARGON2ID13
crypto_pwhash_BYTES_MIN
crypto_pwhash_BYTES_MAX
crypto_pwhash_PASSWD_MIN
crypto_pwhash_PASSWD_MAX
crypto_pwhash_SALTBYTES
crypto_pwhash_STRBYTES
crypto_pwhash_OPSLIMIT_MIN
crypto_pwhash_OPSLIMIT_MAX
crypto_pwhash_MEMLIMIT_MIN
crypto_pwhash_MEMLIMIT_MAX
crypto_pwhash_OPSLIMIT_INTERACTIVE
crypto_pwhash_MEMLIMIT_INTERACTIVE
crypto_pwhash_OPSLIMIT_MODERATE
crypto_pwhash_MEMLIMIT_MODERATE
crypto_pwhash_OPSLIMIT_SENSITIVE
crypto_pwhash_MEMLIMIT_SENSITIVE
crypto_generichash
crypto_generichash_init
crypto_generichash_update
crypto_generichash_final
crypto_generichash_batch
crypto_generichash_STATEBYTES
crypto_generichash_KEYBYTES_MIN
crypto_generichash_KEYBYTES_MAX
crypto_generichash_BYTES
crypto_generichash_BYTES_MIN
crypto_generichash_BYTES_MAX
crypto_kx_keypair
crypto_kx_PUBLICKEYBYTES
crypto_kx_SECRETKEYBYTES
crypto_kdf_keygen
crypto_kdf_derive_from_key
crypto_kdf_KEYBYTES
crypto_kdf_BYTES_MIN
crypto_kdf_BYTES_MAX
crypto_kdf_CONTEXTBYTES
crypto_secretstream_xchacha20poly1305_keygen
crypto_secretstream_xchacha20poly1305_init_push
crypto_secretstream_xchacha20poly1305_push
crypto_secretstream_xchacha20poly1305_init_pull
crypto_secretstream_xchacha20poly1305_pull
crypto_secretstream_xchacha20poly1305_STATEBYTES
crypto_secretstream_xchacha20poly1305_ABYTES
crypto_secretstream_xchacha20poly1305_HEADERBYTES
crypto_secretstream_xchacha20poly1305_KEYBYTES
crypto_secretstream_xchacha20poly1305_TAGBYTES
crypto_secretstream_xchacha20poly1305_MESSAGEBYTES_MAX
crypto_secretstream_xchacha20poly1305_TAG_MESSAGE
crypto_secretstream_xchacha20poly1305_TAG_PUSH
crypto_secretstream_xchacha20poly1305_TAG_REKEY
crypto_secretstream_xchacha20poly1305_TAG_FINAL
crypto_box_keypair
crypto_box_seal
crypto_box_seal_open
crypto_box_SEALBYTES
crypto_box_PUBLICKEYBYTES
crypto_box_SECRETKEYBYTES
crypto_box_SEEDBYTES
crypto_box_NONCEBYTES
crypto_box_MACBYTES
crypto_secretbox_easy
randombytes_buf
sodium_pad
sodium_unpad
Various helpers for securely handling memory.
sodium_memcmp // constant time
sodium_memzero
sodium_free
sodium_malloc
MIT
Made with create-react-native-library