test_randombytes.js 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266
  1. /**
  2. * Created by bmf on 11/2/13.
  3. */
  4. var assert = require('assert');
  5. var sodium = require('../build/Release/sodium');
  6. describe("randombytes_buf", function () {
  7. it("sould return a buffer full of random data", function (done) {
  8. var b = Buffer.alloc(100);
  9. sodium.randombytes_buf(b);
  10. assert(!b.equals(Buffer.alloc(100)));
  11. done();
  12. });
  13. it("sould not change size of buffer", function (done) {
  14. var b = Buffer.alloc(100);
  15. sodium.randombytes_buf(b);
  16. assert(b.length == 100);
  17. done();
  18. });
  19. it("sould throw on argument being a string", function (done) {
  20. var v = "123";
  21. assert.throws(function() {
  22. sodium.randombytes_buf(v);
  23. });
  24. done();
  25. });
  26. it("sould throw on argument being a boolean", function (done) {
  27. var v = true;
  28. assert.throws(function() {
  29. sodium.randombytes_buf(v);
  30. });
  31. done();
  32. });
  33. it("sould throw on argument being an object", function (done) {
  34. var v = { a: 123 };
  35. assert.throws(function() {
  36. sodium.randombytes_buf(v);
  37. });
  38. done();
  39. });
  40. it("sould throw on argument being an array", function (done) {
  41. var v = [ 1, 2, 3];
  42. assert.throws(function() {
  43. sodium.randombytes_buf(v);
  44. });
  45. done();
  46. });
  47. });
  48. describe("randombytes_random", function () {
  49. it("sould return a random number", function (done) {
  50. var n = sodium.randombytes_random();
  51. assert(typeof n === "number");
  52. done();
  53. });
  54. });
  55. describe("randombytes_uniform", function () {
  56. it("sould return a random number smaller than 100", function (done) {
  57. var n = sodium.randombytes_uniform(100);
  58. assert(typeof n === "number");
  59. done();
  60. });
  61. it("sould throw on argument being a string", function (done) {
  62. var v = "123";
  63. assert.throws(function() {
  64. var n = sodium.randombytes_uniform(v);
  65. });
  66. done();
  67. });
  68. it("sould throw on argument being a boolean", function (done) {
  69. var v = true;
  70. assert.throws(function() {
  71. var n = sodium.randombytes_uniform(v);
  72. });
  73. done();
  74. });
  75. it("sould throw on argument being an object", function (done) {
  76. var v = { a: 123 };
  77. assert.throws(function() {
  78. var n = sodium.randombytes_uniform(v);
  79. });
  80. done();
  81. });
  82. it("sould throw on argument being an array", function (done) {
  83. var v = [ 1, 2, 3];
  84. assert.throws(function() {
  85. var n = sodium.randombytes_uniform(v);
  86. });
  87. done();
  88. });
  89. });
  90. describe("randombytes_buf_deterministic", function () {
  91. it("sould return a buffer full of random data", function (done) {
  92. var b = Buffer.alloc(100);
  93. var seed = Buffer.alloc(sodium.randombytes_SEEDBYTES);
  94. sodium.randombytes_buf_deterministic(b, seed);
  95. assert(!b.equals(Buffer.alloc(100)));
  96. done();
  97. });
  98. it("sould throw on argument being a string", function (done) {
  99. var v = "123";
  100. var seed = Buffer.alloc(sodium.randombytes_SEEDBYTES);
  101. assert.throws(function() {
  102. sodium.randombytes_buf_deterministic(v, seed);
  103. });
  104. done();
  105. });
  106. it("sould throw on argument being a number", function (done) {
  107. var v = 123;
  108. var seed = Buffer.alloc(sodium.randombytes_SEEDBYTES);
  109. assert.throws(function() {
  110. sodium.randombytes_buf_deterministic(v, seed);
  111. });
  112. done();
  113. });
  114. it("sould throw on argument being a boolean", function (done) {
  115. var v = true;
  116. var seed = Buffer.alloc(sodium.randombytes_SEEDBYTES);
  117. assert.throws(function() {
  118. sodium.randombytes_buf_deterministic(v, seed);
  119. });
  120. done();
  121. });
  122. it("sould throw on argument being an object", function (done) {
  123. var v = { a: 123 };
  124. var seed = Buffer.alloc(sodium.randombytes_SEEDBYTES);
  125. assert.throws(function() {
  126. sodium.randombytes_buf_deterministic(v, seed);
  127. });
  128. done();
  129. });
  130. it("sould throw on argument being an array", function (done) {
  131. var v = [ 1, 2, 3];
  132. var seed = Buffer.alloc(sodium.randombytes_SEEDBYTES);
  133. assert.throws(function() {
  134. sodium.randombytes_buf_deterministic(v, seed);
  135. });
  136. done();
  137. });
  138. it("sould throw on argument 2 being an invalid length seed", function (done) {
  139. var v = Buffer.alloc(100);
  140. var seed = Buffer.alloc(sodium.randombytes_SEEDBYTES + 100);
  141. assert.throws(function() {
  142. sodium.randombytes_buf_deterministic(v, seed);
  143. });
  144. done();
  145. });
  146. it("sould throw on argument 2 being a string", function (done) {
  147. var v = Buffer.alloc(100);
  148. var seed = "123";
  149. assert.throws(function() {
  150. sodium.randombytes_buf_deterministic(seed, v);
  151. });
  152. done();
  153. });
  154. it("sould throw on argument 2 being a bool", function (done) {
  155. var v = Buffer.alloc(100);
  156. var seed = true;
  157. assert.throws(function() {
  158. sodium.randombytes_buf_deterministic(seed, v);
  159. });
  160. done();
  161. });
  162. it("sould throw on argument 2 being a number", function (done) {
  163. var v = Buffer.alloc(100);
  164. var seed = 123;
  165. assert.throws(function() {
  166. sodium.randombytes_buf_deterministic(seed, v);
  167. });
  168. done();
  169. });
  170. it("sould throw on argument 2 being an object", function (done) {
  171. var v = Buffer.alloc(100);
  172. var seed = { a: "123" };
  173. assert.throws(function() {
  174. sodium.randombytes_buf_deterministic(seed, v);
  175. });
  176. done();
  177. });
  178. it("sould throw on argument 2 being an array", function (done) {
  179. var v = Buffer.alloc(100);
  180. var seed = [1, 2, 3];
  181. assert.throws(function() {
  182. sodium.randombytes_buf_deterministic(seed, v);
  183. });
  184. done();
  185. });
  186. it("sould generate a known sequence", function (done) {
  187. var b1 = Buffer.alloc(100);
  188. var b2 = Buffer.alloc(100);
  189. var b3 = Buffer.alloc(100);
  190. var b4 = Buffer.alloc(100);
  191. var c1 = Buffer.alloc(100);
  192. var c2 = Buffer.alloc(100);
  193. var c3 = Buffer.alloc(100);
  194. var c4 = Buffer.alloc(100);
  195. var seed1 = Buffer.alloc(sodium.randombytes_SEEDBYTES);
  196. var seed2 = Buffer.alloc(sodium.randombytes_SEEDBYTES);
  197. var seed3 = Buffer.alloc(sodium.randombytes_SEEDBYTES);
  198. var seed4 = Buffer.alloc(sodium.randombytes_SEEDBYTES);
  199. sodium.randombytes_buf_deterministic(b1, seed1);
  200. sodium.randombytes_buf_deterministic(b2, seed2);
  201. sodium.randombytes_buf_deterministic(b3, seed3);
  202. sodium.randombytes_buf_deterministic(b4, seed4);
  203. sodium.randombytes_buf_deterministic(c1, seed1);
  204. sodium.randombytes_buf_deterministic(c2, seed2);
  205. sodium.randombytes_buf_deterministic(c3, seed3);
  206. sodium.randombytes_buf_deterministic(c4, seed4);
  207. assert(b1.equals(c1));
  208. assert(b2.equals(c2));
  209. assert(b3.equals(c3));
  210. assert(b4.equals(c4));
  211. done();
  212. });
  213. });