test_crypto_random.js 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. /**
  2. * Created by bmf on 10/31/13.
  3. */
  4. "use strict";
  5. var assert = require('assert');
  6. var sodium = require('../build/Release/sodium');
  7. describe('Randombytes', function() {
  8. it('should return a buffer of random numbers', function(done) {
  9. var buf = Buffer.alloc(100);
  10. sodium.randombytes_buf(buf);
  11. var zeros = 0;
  12. for(var i=0; i<buf.length; i++) {
  13. if(!buf[i]) {
  14. zeros++;
  15. }
  16. }
  17. // If buf is all zeros then randombytes did not work!
  18. assert.notEqual(zeros, buf.length);
  19. done();
  20. });
  21. it('random should generate a new number', function(done) {
  22. // Stir the pot and generate a new seed
  23. sodium.randombytes_stir();
  24. var r = sodium.randombytes_random() >>> 0;
  25. assert.equal(typeof r, 'number');
  26. assert.ok(r > 0);
  27. done();
  28. });
  29. it('uniform should generate a new number', function(done) {
  30. // Stir the pot and generate a new seed
  31. sodium.randombytes_stir();
  32. var r = sodium.randombytes_uniform(100) >>> 0;
  33. assert.equal(typeof r, 'number');
  34. assert.ok(r >= 0 && r <= 100);
  35. done();
  36. });
  37. it('should close file descriptor', function(done) {
  38. // Stir the pot and generate a new seed
  39. sodium.randombytes_stir();
  40. sodium.randombytes_close();
  41. done();
  42. });
  43. });
  44. describe("randombytes_buf verify parameters", function () {
  45. var buf = Buffer.allocUnsafe(100);
  46. it('bad param 1 string', function(done) {
  47. buf = "token";
  48. assert.throws(function() {
  49. sodium.randombytes_buf(buf);
  50. });
  51. done();
  52. });
  53. it('bad param 1 small number', function(done) {
  54. buf = 2;
  55. assert.throws(function() {
  56. sodium.randombytes_buf(buf);
  57. });
  58. done();
  59. });
  60. });