You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							60 lines
						
					
					
						
							1.7 KiB
						
					
					
				
			
		
		
	
	
							60 lines
						
					
					
						
							1.7 KiB
						
					
					
				var test = require('tape') | 
						|
var crypto = require('../') | 
						|
 | 
						|
var randomBytesFunctions = { | 
						|
  randomBytes: require('randombytes'), | 
						|
  pseudoRandomBytes: crypto.pseudoRandomBytes | 
						|
} | 
						|
 | 
						|
for (var randomBytesName in randomBytesFunctions) { | 
						|
  // Both randomBytes and pseudoRandomBytes should provide the same interface | 
						|
  var randomBytes = randomBytesFunctions[randomBytesName] | 
						|
 | 
						|
  test('get error message', function (t) { | 
						|
    try { | 
						|
      var b = randomBytes(10) | 
						|
      t.ok(Buffer.isBuffer(b)) | 
						|
      t.end() | 
						|
    } catch (err) { | 
						|
      t.ok(/not supported/.test(err.message), '"not supported"  is in error message') | 
						|
      t.end() | 
						|
    } | 
						|
  }) | 
						|
 | 
						|
  test(randomBytesName, function (t) { | 
						|
    t.plan(5) | 
						|
    t.equal(randomBytes(10).length, 10) | 
						|
    t.ok(Buffer.isBuffer(randomBytes(10))) | 
						|
    randomBytes(10, function (ex, bytes) { | 
						|
      t.error(ex) | 
						|
      t.equal(bytes.length, 10) | 
						|
      t.ok(Buffer.isBuffer(bytes)) | 
						|
      t.end() | 
						|
    }) | 
						|
  }) | 
						|
 | 
						|
  test(randomBytesName + ' seem random', function (t) { | 
						|
    var L = 1000 | 
						|
    var b = randomBytes(L) | 
						|
 | 
						|
    var mean = [].reduce.call(b, function (a, b) { return a + b }, 0) / L | 
						|
 | 
						|
    // test that the random numbers are plausably random. | 
						|
    // Math.random() will pass this, but this will catch | 
						|
    // terrible mistakes such as this blunder: | 
						|
    // https://github.com/dominictarr/crypto-browserify/commit/3267955e1df7edd1680e52aeede9a89506ed2464#commitcomment-7916835 | 
						|
 | 
						|
    // this doesn't check that the bytes are in a random *order* | 
						|
    // but it's better than nothing. | 
						|
 | 
						|
    var expected = 256 / 2 | 
						|
    var smean = Math.sqrt(mean) | 
						|
 | 
						|
    // console.log doesn't work right on testling, *grumble grumble* | 
						|
    console.log(JSON.stringify([expected - smean, mean, expected + smean])) | 
						|
    t.ok(mean < expected + smean) | 
						|
    t.ok(mean > expected - smean) | 
						|
 | 
						|
    t.end() | 
						|
  }) | 
						|
}
 | 
						|
 |