Comments (4)
I implemented this in #18 as part of the browserCrypto engine based off of @zzxz's investigation. I went with 32 bit signed integers for the randomly generated values as that is what the existing browserCrypto function expected.
After investigating the implementation differences between webbrowsers crypto.getRandomValues and nodejs's crypto.randomBytes i decided that there was no need to cache a pregenerated entropic array of results. NodeJS handles generation of the randomness differently.
I would have liked to use the asynchronous version of the randomBytes call, but that would have required a massive refactor of the entire module and i felt was not worth the effort at this time.
from random-js.
Absolutely worth looking into.
from random-js.
Here's a toy example to get a 32-bit unsigned int:
var crypto = require('crypto')
// Synchronous version.
var buffer = crypto.randomBytes(4) // => <Buffer 12 26 7a d4>
// Read a 32-bit unsigned int from the buffer.
var number = buffer.readUInt32BE()
// ...do unbiased things with the number :)
We could, like browserCrypto
, fill a larger buffer and read multiple values.
Buffer
allows us to read direct up to 48-bits of accuracy using readUIntBE
or readUIntLE
. Without going too far (as I'm not a crypto/random expert), getting into compliance with random-js 53-bits might require a bit more work.
Interestingly enough, we can simplify the random-js API to nativeMath
, crypto
, and mt19937()
(while still supporting browserCrypto
). Users of random-js could produce code that runs on either client or server without code changes.
from random-js.
This is available with v2.0.0-rc2.
const { nodeCrypto } = require('random-js');
nodeCrypto.next(); // uses require('crypto').randomBytes under-the-hood
from random-js.
Related Issues (20)
- Serialize and unserialize for later use HOT 1
- cannot be imported properly in jest backend HOT 2
- Question: Use It In Games? HOT 5
- Is it possible to seed nativeMath? HOT 1
- Cannot read property 'nativeMath' of undefined (2.0.0-rc2) HOT 1
- 2.0.0-rc2 doesn't build with webpack/babel HOT 1
- Is it good to feed MersenneTwister19937 with array of same integers except one? HOT 2
- TypeError: n(...).Random is not a constructor HOT 6
- MersenneTwister19937 is not defined HOT 1
- Include ".js" in imports HOT 1
- Can't build with webpack HOT 1
- Question: replicating exact functionality of Math.random() HOT 2
- feat: Add support for React Native HOT 7
- Force value to either min or max HOT 3
- Choose "best" engine automatically? HOT 1
- var random = new Random.Random() does not work when random-js is imported as a script HOT 1
- Automatic dependency updates
- Converting the build to GitHub Actions
- Better documentation on how to create custom engines in README.md
- Add documentation on how to use this library without Node.js and/or with Webpack 5+
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from random-js.