browser-random.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.randomBytes = void 0;
  4. var bytes_1 = require("@ethersproject/bytes");
  5. var logger_1 = require("@ethersproject/logger");
  6. var _version_1 = require("./_version");
  7. var logger = new logger_1.Logger(_version_1.version);
  8. // Debugging line for testing browser lib in node
  9. //const window = { crypto: { getRandomValues: () => { } } };
  10. // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/globalThis
  11. function getGlobal() {
  12. if (typeof self !== 'undefined') {
  13. return self;
  14. }
  15. if (typeof window !== 'undefined') {
  16. return window;
  17. }
  18. if (typeof global !== 'undefined') {
  19. return global;
  20. }
  21. throw new Error('unable to locate global object');
  22. }
  23. ;
  24. var anyGlobal = getGlobal();
  25. var crypto = anyGlobal.crypto || anyGlobal.msCrypto;
  26. if (!crypto || !crypto.getRandomValues) {
  27. logger.warn("WARNING: Missing strong random number source");
  28. crypto = {
  29. getRandomValues: function (buffer) {
  30. return logger.throwError("no secure random source avaialble", logger_1.Logger.errors.UNSUPPORTED_OPERATION, {
  31. operation: "crypto.getRandomValues"
  32. });
  33. }
  34. };
  35. }
  36. function randomBytes(length) {
  37. if (length <= 0 || length > 1024 || (length % 1) || length != length) {
  38. logger.throwArgumentError("invalid length", "length", length);
  39. }
  40. var result = new Uint8Array(length);
  41. crypto.getRandomValues(result);
  42. return (0, bytes_1.arrayify)(result);
  43. }
  44. exports.randomBytes = randomBytes;
  45. ;
  46. //# sourceMappingURL=browser-random.js.map