@korekoi/react-native-get-random-values
v0.2.4
Published
⚡️ A fast implementation of `crypto.getRandomValues` for React Native
Downloads
2,259
Readme
Features
- 🫳 Drop-in replacement for
crypto.getRandomValues
- ⚡ Uses JSI for faster operations between Native and JS
- 🔒 Native C++ secure randomization using libsodium
Installation
npm install @korekoi/react-native-get-random-values
Dependencies
This library needs these dependencies to be installed in your project before you can use it:
npm install react-native-nitro-modules
Usage
import "@korekoi/react-native-get-random-values"
const array = new Uint8Array(32);
global.crypto.getRandomValues(array);
See the example app
How does it compare to other alternatives?
The most downloaded and probably the only available library to polyfill this method (until now) has been LinusU/react-native-get-random-values, but our solution has a couple improvements:
- JSI, Native and JavaScript communicate through a memory reference and not by serializing data in Base64 back-and-forth, which results in faster operations
- Randomization is made using libsodium for both iOS and Android
- instead of Java SecureRandom for Android and Objective-C SecRandomCopyBytes or Swift SecRandomCopyBytes for iOS
Benchmark
Percentage represents how much faster JSI is compared to B64
| iOS | iOS Simulator | Android | | ---------------------------------------------------------------------------- | --------------------------------------------------------------------------- | -------------------------- | | | | Feel free to open an issue | | iPhone 13 on iOS 17 | iPhone 16 Pro Simulator, iOS 18, running on an MacBook Air M1 2020 16GB ram | | | 10k loops at 65535 bytes with Base 64 crashed the app | | |