123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191 |
- var forge = require('./forge');
- require('./aes');
- require('./sha256');
- require('./prng');
- require('./util');
- (function() {
- if(forge.random && forge.random.getBytes) {
- module.exports = forge.random;
- return;
- }
- (function(jQuery) {
- var prng_aes = {};
- var _prng_aes_output = new Array(4);
- var _prng_aes_buffer = forge.util.createBuffer();
- prng_aes.formatKey = function(key) {
-
- var tmp = forge.util.createBuffer(key);
- key = new Array(4);
- key[0] = tmp.getInt32();
- key[1] = tmp.getInt32();
- key[2] = tmp.getInt32();
- key[3] = tmp.getInt32();
-
- return forge.aes._expandKey(key, false);
- };
- prng_aes.formatSeed = function(seed) {
-
- var tmp = forge.util.createBuffer(seed);
- seed = new Array(4);
- seed[0] = tmp.getInt32();
- seed[1] = tmp.getInt32();
- seed[2] = tmp.getInt32();
- seed[3] = tmp.getInt32();
- return seed;
- };
- prng_aes.cipher = function(key, seed) {
- forge.aes._updateBlock(key, seed, _prng_aes_output, false);
- _prng_aes_buffer.putInt32(_prng_aes_output[0]);
- _prng_aes_buffer.putInt32(_prng_aes_output[1]);
- _prng_aes_buffer.putInt32(_prng_aes_output[2]);
- _prng_aes_buffer.putInt32(_prng_aes_output[3]);
- return _prng_aes_buffer.getBytes();
- };
- prng_aes.increment = function(seed) {
-
- ++seed[3];
- return seed;
- };
- prng_aes.md = forge.md.sha256;
- function spawnPrng() {
- var ctx = forge.prng.create(prng_aes);
-
- ctx.getBytes = function(count, callback) {
- return ctx.generate(count, callback);
- };
-
- ctx.getBytesSync = function(count) {
- return ctx.generate(count);
- };
- return ctx;
- }
- var _ctx = spawnPrng();
- var getRandomValues = null;
- var globalScope = forge.util.globalScope;
- var _crypto = globalScope.crypto || globalScope.msCrypto;
- if(_crypto && _crypto.getRandomValues) {
- getRandomValues = function(arr) {
- return _crypto.getRandomValues(arr);
- };
- }
- if(forge.options.usePureJavaScript ||
- (!forge.util.isNodejs && !getRandomValues)) {
-
-
- if(typeof window === 'undefined' || window.document === undefined) {
-
- }
-
- _ctx.collectInt(+new Date(), 32);
-
- if(typeof(navigator) !== 'undefined') {
- var _navBytes = '';
- for(var key in navigator) {
- try {
- if(typeof(navigator[key]) == 'string') {
- _navBytes += navigator[key];
- }
- } catch(e) {
-
- }
- }
- _ctx.collect(_navBytes);
- _navBytes = null;
- }
-
- if(jQuery) {
-
- jQuery().mousemove(function(e) {
-
- _ctx.collectInt(e.clientX, 16);
- _ctx.collectInt(e.clientY, 16);
- });
-
- jQuery().keypress(function(e) {
- _ctx.collectInt(e.charCode, 8);
- });
- }
- }
- if(!forge.random) {
- forge.random = _ctx;
- } else {
-
- for(var key in _ctx) {
- forge.random[key] = _ctx[key];
- }
- }
- forge.random.createInstance = spawnPrng;
- module.exports = forge.random;
- })(typeof(jQuery) !== 'undefined' ? jQuery : null);
- })();
|