spice-js 2.7.39 → 2.7.40

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -8,6 +8,23 @@ exports.default = void 0;
8
8
  function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
9
9
  function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
10
10
  var crypto = require("crypto");
11
+ var util = require("util");
12
+ var pbkdf2 = util.promisify(crypto.pbkdf2);
13
+ var randomBytes = util.promisify(crypto.randomBytes);
14
+
15
+ // crypto.pbkdf2 throws synchronously on a non-string value or a missing salt.
16
+ // Inside a Promise executor that throw was swallowed and the promise never
17
+ // settled, hanging the request. Numbers hash as their string form; anything
18
+ // else rejects.
19
+ function toHashInput(value, name) {
20
+ if (typeof value === "number" && Number.isFinite(value)) {
21
+ return String(value);
22
+ }
23
+ if (typeof value === "string" || Buffer.isBuffer(value)) {
24
+ return value;
25
+ }
26
+ throw new TypeError(name + " must be a string");
27
+ }
11
28
  class Crypt {
12
29
  constructor() {
13
30
  this.salt = "";
@@ -16,69 +33,26 @@ class Crypt {
16
33
  encrypt(value) {
17
34
  var _this = this;
18
35
  return _asyncToGenerator(function* () {
19
- var that = _this;
20
- return new Promise(/*#__PURE__*/function () {
21
- var _ref = _asyncToGenerator(function* (resolve, reject) {
22
- try {
23
- if (!value) {
24
- reject(new Error('Value must not be empty'));
25
- }
26
- var salt = yield that.generateRandumString(128);
27
- var hash_obj = yield that.findHash(value, salt);
28
- resolve(hash_obj);
29
- } catch (e) {
30
- reject(e);
31
- }
32
- });
33
- return function (_x, _x2) {
34
- return _ref.apply(this, arguments);
35
- };
36
- }());
36
+ if (!value) {
37
+ throw new Error('Value must not be empty');
38
+ }
39
+ var salt = yield _this.generateRandumString(128);
40
+ return _this.findHash(value, salt);
37
41
  })();
38
42
  }
39
43
  generateRandumString(length) {
40
44
  return _asyncToGenerator(function* () {
41
- return new Promise(/*#__PURE__*/function () {
42
- var _ref2 = _asyncToGenerator(function* (resolve, reject) {
43
- if (!length) {
44
- length = 64;
45
- }
46
- crypto.randomBytes(length, function (err, bytes) {
47
- if (err) {
48
- reject(err);
49
- }
50
- var ran_bytes = new Buffer(bytes).toString('hex');
51
- resolve(ran_bytes);
52
- });
53
- });
54
- return function (_x3, _x4) {
55
- return _ref2.apply(this, arguments);
56
- };
57
- }());
45
+ var bytes = yield randomBytes(length || 64);
46
+ return bytes.toString('hex');
58
47
  })();
59
48
  }
60
49
  findHash(value, salt) {
61
50
  return _asyncToGenerator(function* () {
62
- try {
63
- return new Promise(/*#__PURE__*/function () {
64
- var _ref3 = _asyncToGenerator(function* (resolve, reject) {
65
- crypto.pbkdf2(value, salt, 7000, 256, 'sha512', (err, hash) => {
66
- if (err) {
67
- reject(err);
68
- }
69
- var object = {};
70
- object.hash = new Buffer(hash).toString('hex');
71
- object.salt = salt;
72
- resolve(object);
73
- });
74
- });
75
- return function (_x5, _x6) {
76
- return _ref3.apply(this, arguments);
77
- };
78
- }());
79
- } catch (e) {
80
- return Promise.reject(e);
81
- }
51
+ var hash = yield pbkdf2(toHashInput(value, 'Value'), toHashInput(salt, 'Salt'), 7000, 256, 'sha512');
52
+ return {
53
+ hash: hash.toString('hex'),
54
+ salt: salt
55
+ };
82
56
  })();
83
57
  }
84
58
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "spice-js",
3
- "version": "2.7.39",
3
+ "version": "2.7.40",
4
4
  "description": "spice",
5
5
  "main": "build/index.js",
6
6
  "repository": {
@@ -4,6 +4,24 @@
4
4
  */
5
5
 
6
6
  var crypto = require("crypto");
7
+ var util = require("util");
8
+
9
+ var pbkdf2 = util.promisify(crypto.pbkdf2);
10
+ var randomBytes = util.promisify(crypto.randomBytes);
11
+
12
+ // crypto.pbkdf2 throws synchronously on a non-string value or a missing salt.
13
+ // Inside a Promise executor that throw was swallowed and the promise never
14
+ // settled, hanging the request. Numbers hash as their string form; anything
15
+ // else rejects.
16
+ function toHashInput(value, name) {
17
+ if (typeof value === "number" && Number.isFinite(value)) {
18
+ return String(value);
19
+ }
20
+ if (typeof value === "string" || Buffer.isBuffer(value)) {
21
+ return value;
22
+ }
23
+ throw new TypeError(name + " must be a string");
24
+ }
7
25
 
8
26
  export default class Crypt {
9
27
  constructor() {
@@ -12,54 +30,22 @@ export default class Crypt {
12
30
  }
13
31
 
14
32
  async encrypt(value) {
15
- let that = this;
16
- return new Promise(async (resolve, reject) => {
17
- try {
18
- if (!value) {
19
- reject(new Error('Value must not be empty'))
20
- }
21
- var salt = await that.generateRandumString(128);
22
- var hash_obj = await that.findHash(value, salt);
23
- resolve(hash_obj);
24
- } catch (e) {
25
- reject(e);
26
- }
27
- });
33
+ if (!value) {
34
+ throw new Error('Value must not be empty');
35
+ }
36
+ var salt = await this.generateRandumString(128);
37
+ return this.findHash(value, salt);
28
38
  }
29
39
 
30
40
 
31
41
  async generateRandumString(length) {
32
- return new Promise(async (resolve, reject) => {
33
- if (!length) {
34
- length = 64;
35
- }
36
- crypto.randomBytes(length, function (err, bytes) {
37
- if (err) {
38
- reject(err);
39
- }
40
- var ran_bytes = new Buffer(bytes).toString('hex');
41
- resolve(ran_bytes);
42
- });
43
- });
42
+ var bytes = await randomBytes(length || 64);
43
+ return bytes.toString('hex');
44
44
  }
45
45
 
46
46
 
47
47
  async findHash(value, salt) {
48
- try {
49
- return new Promise(async (resolve, reject) => {
50
- crypto.pbkdf2(value, salt, 7000, 256, 'sha512',
51
- (err, hash) => {
52
- if (err) {
53
- reject(err);
54
- }
55
- var object = {};
56
- object.hash = new Buffer(hash).toString('hex');
57
- object.salt = salt;
58
- resolve(object);
59
- });
60
- });
61
- } catch (e) {
62
- return Promise.reject(e);
63
- }
48
+ var hash = await pbkdf2(toHashInput(value, 'Value'), toHashInput(salt, 'Salt'), 7000, 256, 'sha512');
49
+ return { hash: hash.toString('hex'), salt: salt };
64
50
  }
65
- }
51
+ }