@steemit/steem-js 0.7.11 → 1.0.0

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.
Files changed (132) hide show
  1. package/README.md +203 -87
  2. package/dist/api/index.d.ts +128 -0
  3. package/dist/api/methods.d.ts +9 -0
  4. package/dist/api/rpc-auth.d.ts +43 -0
  5. package/dist/api/transports/base.d.ts +13 -0
  6. package/dist/api/transports/http.d.ts +9 -0
  7. package/dist/api/transports/index.d.ts +9 -0
  8. package/dist/api/transports/types.d.ts +35 -0
  9. package/dist/api/transports/ws.d.ts +18 -0
  10. package/dist/auth/ecc/index.d.ts +9 -0
  11. package/dist/auth/ecc/src/address.d.ts +13 -0
  12. package/dist/auth/ecc/src/aes.d.ts +16 -0
  13. package/dist/auth/ecc/src/brain_key.d.ts +1 -0
  14. package/dist/auth/ecc/src/ecdsa.d.ts +28 -0
  15. package/dist/auth/ecc/src/ecsignature.d.ts +19 -0
  16. package/dist/auth/ecc/src/enforce_types.d.ts +5 -0
  17. package/dist/auth/ecc/src/hash.d.ts +25 -0
  18. package/dist/auth/ecc/src/index.d.ts +9 -0
  19. package/dist/auth/ecc/src/key_private.d.ts +38 -0
  20. package/dist/auth/ecc/src/key_public.d.ts +41 -0
  21. package/dist/auth/ecc/src/key_utils.d.ts +9 -0
  22. package/dist/auth/ecc/src/signature.d.ts +18 -0
  23. package/dist/auth/ecc.d.ts +3 -0
  24. package/dist/auth/index.d.ts +48 -0
  25. package/dist/auth/key_classes.d.ts +3 -0
  26. package/dist/auth/serializer.d.ts +19 -0
  27. package/dist/broadcast/helpers.d.ts +11 -0
  28. package/dist/broadcast/index.d.ts +43 -0
  29. package/dist/broadcast/operations.d.ts +6 -0
  30. package/dist/config.d.ts +25 -0
  31. package/dist/crypto/index.d.ts +25 -0
  32. package/dist/formatter/index.d.ts +92 -0
  33. package/dist/index.cjs +25848 -0
  34. package/dist/index.cjs.map +1 -0
  35. package/dist/index.d.ts +30 -0
  36. package/dist/index.js +25812 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/index.umd.js +57513 -0
  39. package/dist/index.umd.js.map +1 -0
  40. package/dist/memo/index.d.ts +11 -0
  41. package/dist/operations/index.d.ts +44 -0
  42. package/dist/serializer/convert.d.ts +12 -0
  43. package/dist/serializer/index.d.ts +11 -0
  44. package/dist/serializer/number_utils.d.ts +8 -0
  45. package/dist/serializer/precision.d.ts +5 -0
  46. package/dist/serializer/types.d.ts +36 -0
  47. package/dist/types/index.d.ts +131 -0
  48. package/dist/types.d.ts +34 -0
  49. package/dist/utils/index.d.ts +8 -0
  50. package/dist/utils.d.ts +2 -0
  51. package/package.json +72 -67
  52. package/.circleci/config.yml +0 -23
  53. package/.dockerignore +0 -12
  54. package/.editorconfig +0 -20
  55. package/.eslintrc +0 -27
  56. package/LICENSE +0 -21
  57. package/circle.yml +0 -3
  58. package/config.json +0 -10
  59. package/dist/statistics.html +0 -208
  60. package/dist/steem-tests.min.js +0 -23
  61. package/dist/steem-tests.min.js.gz +0 -0
  62. package/dist/steem-tests.min.js.map +0 -1
  63. package/dist/steem.min.js +0 -18
  64. package/dist/steem.min.js.gz +0 -0
  65. package/dist/steem.min.js.map +0 -1
  66. package/lib/api/index.js +0 -422
  67. package/lib/api/methods.js +0 -413
  68. package/lib/api/transports/base.js +0 -72
  69. package/lib/api/transports/http.js +0 -172
  70. package/lib/api/transports/index.js +0 -20
  71. package/lib/api/transports/ws.js +0 -228
  72. package/lib/auth/ecc/README.md +0 -20
  73. package/lib/auth/ecc/index.js +0 -13
  74. package/lib/auth/ecc/package.json +0 -36
  75. package/lib/auth/ecc/src/address.js +0 -84
  76. package/lib/auth/ecc/src/aes.js +0 -184
  77. package/lib/auth/ecc/src/brain_key.js +0 -13
  78. package/lib/auth/ecc/src/ecdsa.js +0 -219
  79. package/lib/auth/ecc/src/ecsignature.js +0 -128
  80. package/lib/auth/ecc/src/enforce_types.js +0 -49
  81. package/lib/auth/ecc/src/hash.js +0 -67
  82. package/lib/auth/ecc/src/key_private.js +0 -212
  83. package/lib/auth/ecc/src/key_public.js +0 -215
  84. package/lib/auth/ecc/src/key_utils.js +0 -112
  85. package/lib/auth/ecc/src/signature.js +0 -187
  86. package/lib/auth/index.js +0 -126
  87. package/lib/auth/memo.js +0 -147
  88. package/lib/auth/serializer/README.md +0 -13
  89. package/lib/auth/serializer/index.js +0 -21
  90. package/lib/auth/serializer/package.json +0 -32
  91. package/lib/auth/serializer/src/ChainTypes.js +0 -90
  92. package/lib/auth/serializer/src/convert.js +0 -37
  93. package/lib/auth/serializer/src/error_with_cause.js +0 -42
  94. package/lib/auth/serializer/src/fast_parser.js +0 -77
  95. package/lib/auth/serializer/src/number_utils.js +0 -67
  96. package/lib/auth/serializer/src/object_id.js +0 -68
  97. package/lib/auth/serializer/src/operations.js +0 -787
  98. package/lib/auth/serializer/src/precision.js +0 -95
  99. package/lib/auth/serializer/src/serializer.js +0 -211
  100. package/lib/auth/serializer/src/template.js +0 -17
  101. package/lib/auth/serializer/src/types.js +0 -1238
  102. package/lib/auth/serializer/src/validation.js +0 -360
  103. package/lib/broadcast/helpers.js +0 -177
  104. package/lib/broadcast/index.js +0 -127
  105. package/lib/broadcast/operations.js +0 -255
  106. package/lib/browser.js +0 -29
  107. package/lib/config.js +0 -45
  108. package/lib/formatter.js +0 -189
  109. package/lib/index.js +0 -19
  110. package/lib/utils.js +0 -55
  111. package/node-4.dockerfile +0 -6
  112. package/node-6.dockerfile +0 -6
  113. package/test/Crypto.js +0 -100
  114. package/test/KeyFormats.js +0 -105
  115. package/test/all_types.js +0 -115
  116. package/test/api.test.js +0 -326
  117. package/test/broadcast.test.js +0 -225
  118. package/test/browser/BrowserTests.js +0 -55
  119. package/test/comment.test.js +0 -69
  120. package/test/hf20-accounts.test.js +0 -76
  121. package/test/hf21-sps.test.js +0 -78
  122. package/test/memo.test.js +0 -37
  123. package/test/number_utils.js +0 -28
  124. package/test/operations_test.js +0 -39
  125. package/test/smt.test.js +0 -347
  126. package/test/test-post.json +0 -13
  127. package/test/test.html +0 -13
  128. package/test/test_helper.js +0 -19
  129. package/test/types_test.js +0 -139
  130. package/webpack/makeConfig.js +0 -105
  131. package/webpack.config.js +0 -2
  132. package/yarn.lock +0 -3336
@@ -1,228 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
-
7
- var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
8
-
9
- var _bluebird = require('bluebird');
10
-
11
- var _bluebird2 = _interopRequireDefault(_bluebird);
12
-
13
- var _detectNode = require('detect-node');
14
-
15
- var _detectNode2 = _interopRequireDefault(_detectNode);
16
-
17
- var _debug = require('debug');
18
-
19
- var _debug2 = _interopRequireDefault(_debug);
20
-
21
- var _base = require('./base');
22
-
23
- var _base2 = _interopRequireDefault(_base);
24
-
25
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
26
-
27
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
28
-
29
- function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
30
-
31
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
32
-
33
- var WebSocket = void 0;
34
- if (_detectNode2.default) {
35
- WebSocket = require('ws'); // eslint-disable-line global-require
36
- } else if (typeof window !== 'undefined') {
37
- WebSocket = window.WebSocket;
38
- } else {
39
- throw new Error("Couldn't decide on a `WebSocket` class");
40
- }
41
-
42
- var debug = (0, _debug2.default)('steem:ws');
43
-
44
- var WsTransport = function (_Transport) {
45
- _inherits(WsTransport, _Transport);
46
-
47
- function WsTransport() {
48
- var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
49
-
50
- _classCallCheck(this, WsTransport);
51
-
52
- var _this = _possibleConstructorReturn(this, (WsTransport.__proto__ || Object.getPrototypeOf(WsTransport)).call(this, Object.assign({ id: 0 }, options)));
53
-
54
- _this._requests = new Map();
55
- _this.inFlight = 0;
56
- _this.isOpen = false;
57
- return _this;
58
- }
59
-
60
- _createClass(WsTransport, [{
61
- key: 'start',
62
- value: function start() {
63
- var _this2 = this;
64
-
65
- if (this.startPromise) {
66
- return this.startPromise;
67
- }
68
-
69
- this.startPromise = new _bluebird2.default(function (resolve, reject) {
70
- _this2.ws = new WebSocket(_this2.options.websocket);
71
- _this2.ws.onerror = function (err) {
72
- _this2.startPromise = null;
73
- reject(err);
74
- };
75
- _this2.ws.onopen = function () {
76
- _this2.isOpen = true;
77
- _this2.ws.onerror = _this2.onError.bind(_this2);
78
- _this2.ws.onmessage = _this2.onMessage.bind(_this2);
79
- _this2.ws.onclose = _this2.onClose.bind(_this2);
80
- resolve();
81
- };
82
- });
83
- return this.startPromise;
84
- }
85
- }, {
86
- key: 'stop',
87
- value: function stop() {
88
- debug('Stopping...');
89
-
90
- this.startPromise = null;
91
- this.isOpen = false;
92
- this._requests.clear();
93
-
94
- if (this.ws) {
95
- this.ws.onerror = this.ws.onmessage = this.ws.onclose = null;
96
- this.ws.close();
97
- this.ws = null;
98
- }
99
- }
100
- }, {
101
- key: 'send',
102
- value: function send(api, data, callback) {
103
- var _this3 = this;
104
-
105
- debug('Steem::send', api, data);
106
- return this.start().then(function () {
107
- var deferral = {};
108
- new _bluebird2.default(function (resolve, reject) {
109
- deferral.resolve = function (val) {
110
- resolve(val);
111
- callback(null, val);
112
- };
113
- deferral.reject = function (val) {
114
- reject(val);
115
- callback(val);
116
- };
117
- });
118
-
119
- if (_this3.options.useAppbaseApi) {
120
- api = 'condenser_api';
121
- }
122
-
123
- var _request = {
124
- deferral: deferral,
125
- startedAt: Date.now(),
126
- message: {
127
- id: data.id || _this3.id++,
128
- method: 'call',
129
- jsonrpc: '2.0',
130
- params: [api, data.method, data.params]
131
- }
132
- };
133
- _this3.inFlight++;
134
- _this3._requests.set(_request.message.id, _request);
135
- _this3.ws.send(JSON.stringify(_request.message));
136
- return deferral;
137
- });
138
- }
139
- }, {
140
- key: 'onError',
141
- value: function onError(error) {
142
- var _iteratorNormalCompletion = true;
143
- var _didIteratorError = false;
144
- var _iteratorError = undefined;
145
-
146
- try {
147
- for (var _iterator = this._requests[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
148
- var _request = _step.value;
149
-
150
- _request.deferral.reject(error);
151
- }
152
- } catch (err) {
153
- _didIteratorError = true;
154
- _iteratorError = err;
155
- } finally {
156
- try {
157
- if (!_iteratorNormalCompletion && _iterator.return) {
158
- _iterator.return();
159
- }
160
- } finally {
161
- if (_didIteratorError) {
162
- throw _iteratorError;
163
- }
164
- }
165
- }
166
-
167
- this.stop();
168
- }
169
- }, {
170
- key: 'onClose',
171
- value: function onClose() {
172
- var error = new Error('Connection was closed');
173
- var _iteratorNormalCompletion2 = true;
174
- var _didIteratorError2 = false;
175
- var _iteratorError2 = undefined;
176
-
177
- try {
178
- for (var _iterator2 = this._requests[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
179
- var _request = _step2.value;
180
-
181
- _request.deferral.reject(error);
182
- }
183
- } catch (err) {
184
- _didIteratorError2 = true;
185
- _iteratorError2 = err;
186
- } finally {
187
- try {
188
- if (!_iteratorNormalCompletion2 && _iterator2.return) {
189
- _iterator2.return();
190
- }
191
- } finally {
192
- if (_didIteratorError2) {
193
- throw _iteratorError2;
194
- }
195
- }
196
- }
197
-
198
- this._requests.clear();
199
- }
200
- }, {
201
- key: 'onMessage',
202
- value: function onMessage(websocketMessage) {
203
- var message = JSON.parse(websocketMessage.data);
204
- debug('-- Steem.onMessage -->', message.id);
205
- if (!this._requests.has(message.id)) {
206
- throw new Error('Panic: no request in queue for message id ' + message.id);
207
- }
208
- var _request = this._requests.get(message.id);
209
- this._requests.delete(message.id);
210
-
211
- var errorCause = message.error;
212
- if (errorCause) {
213
- var err = new Error(
214
- // eslint-disable-next-line prefer-template
215
- (errorCause.message || 'Failed to complete operation') + ' (see err.payload for the full error payload)');
216
- err.payload = message;
217
- _request.deferral.reject(err);
218
- } else {
219
- this.emit('track-performance', _request.message.method, Date.now() - _request.startedAt);
220
- _request.deferral.resolve(message.result);
221
- }
222
- }
223
- }]);
224
-
225
- return WsTransport;
226
- }(_base2.default);
227
-
228
- exports.default = WsTransport;
@@ -1,20 +0,0 @@
1
- # Elliptic curve cryptography functions (ECC)
2
- Private Key, Public Key, Cryptographic Signature, AES, Encryption / Decryption
3
-
4
- ```js
5
- import {Address, Aes, PrivateKey, PublicKey, Signature} from "ecc"
6
- ```
7
-
8
- # Configure
9
- Update `./.npmrc` if you need to change something:
10
- ```bash
11
- ecc:default_address_prefix = STM
12
- ```
13
-
14
- # See Also
15
- * [Config](./config/index.js)
16
- * [Address](./src/address.js)
17
- * [Aes](./src/aes.js)
18
- * [PrivateKey](./src/key_private.js)
19
- * [PublicKey](./src/key_public.js)
20
- * [Signature](./src/signature.js)
@@ -1,13 +0,0 @@
1
- "use strict";
2
-
3
- module.exports = {
4
- Address: require("./src/address"),
5
- Aes: require("./src/aes"),
6
- PrivateKey: require("./src/key_private"),
7
- PublicKey: require("./src/key_public"),
8
- Signature: require("./src/signature"),
9
- brainKey: require("./src/brain_key"),
10
- key_utils: require("./src/key_utils"),
11
- hash: require("./src/hash"),
12
- ecc_config: require("../../config")
13
- };
@@ -1,36 +0,0 @@
1
- {
2
- "name": "ecc",
3
- "version": "1.0.0",
4
- "description": "Elliptic curve cryptography functions",
5
- "keywords": "ECC, Private Key, Public Key, Cryptographic Signature, AES, Encryption, Decryption",
6
- "main": "index.js",
7
- "config": {
8
- "address_prefix": "STM"
9
- },
10
- "scripts": {
11
- "test": "mocha --compilers js:babel-core/register --recursive",
12
- "test:watch": "npm test -- --watch"
13
- },
14
- "dependencies": {
15
- "bigi": "^1.4.1",
16
- "bs58": "^3.0.0",
17
- "bytebuffer": "^5.0.0",
18
- "crypto-js": "^3.1.5",
19
- "ecurve": "^1.0.2",
20
- "secure-random": "^1.1.1"
21
- },
22
- "author": "cryptonomex",
23
- "license": "BSD-2-Clause-FreeBSD",
24
- "devDependencies": {
25
- "assert": "^1.3.0",
26
- "babel-cli": "^6.2.0",
27
- "babel-core": "^6.2.0",
28
- "babel-preset-es2015": "^6.1.18",
29
- "mocha": "^2.3.4"
30
- },
31
- "_babel": {
32
- "presets": [
33
- "es2015"
34
- ]
35
- }
36
- }
@@ -1,84 +0,0 @@
1
- 'use strict';
2
-
3
- var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
4
-
5
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
6
-
7
- var assert = require('assert');
8
- var config = require('../../../config');
9
- var hash = require('./hash');
10
- var base58 = require('bs58');
11
-
12
- /** Addresses are shortened non-reversable hashes of a public key. The full PublicKey is preferred.
13
- @deprecated
14
- */
15
-
16
- var Address = function () {
17
- function Address(addy) {
18
- _classCallCheck(this, Address);
19
-
20
- this.addy = addy;
21
- }
22
-
23
- _createClass(Address, [{
24
- key: 'toBuffer',
25
- value: function toBuffer() {
26
- return this.addy;
27
- }
28
- }, {
29
- key: 'toString',
30
- value: function toString() {
31
- var address_prefix = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : config.get('address_prefix');
32
-
33
- var checksum = hash.ripemd160(this.addy);
34
- var addy = Buffer.concat([this.addy, checksum.slice(0, 4)]);
35
- return address_prefix + base58.encode(addy);
36
- }
37
- }], [{
38
- key: 'fromBuffer',
39
- value: function fromBuffer(buffer) {
40
- var _hash = hash.sha512(buffer);
41
- var addy = hash.ripemd160(_hash);
42
- return new Address(addy);
43
- }
44
- }, {
45
- key: 'fromString',
46
- value: function fromString(string) {
47
- var address_prefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : config.get('address_prefix');
48
-
49
- var prefix = string.slice(0, address_prefix.length);
50
- assert.equal(address_prefix, prefix, 'Expecting key to begin with ' + address_prefix + ', instead got ' + prefix);
51
- var addy = string.slice(address_prefix.length);
52
- addy = new Buffer(base58.decode(addy), 'binary');
53
- var checksum = addy.slice(-4);
54
- addy = addy.slice(0, -4);
55
- var new_checksum = hash.ripemd160(addy);
56
- new_checksum = new_checksum.slice(0, 4);
57
- assert.deepEqual(checksum, new_checksum, 'Checksum did not match');
58
- return new Address(addy);
59
- }
60
-
61
- /** @return Address - Compressed PTS format (by default) */
62
-
63
- }, {
64
- key: 'fromPublic',
65
- value: function fromPublic(public_key) {
66
- var compressed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
67
- var version = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 56;
68
-
69
- var sha2 = hash.sha256(public_key.toBuffer(compressed));
70
- var rep = hash.ripemd160(sha2);
71
- var versionBuffer = new Buffer(1);
72
- versionBuffer.writeUInt8(0xFF & version, 0);
73
- var addr = Buffer.concat([versionBuffer, rep]);
74
- var check = hash.sha256(addr);
75
- check = hash.sha256(check);
76
- var buffer = Buffer.concat([addr, check.slice(0, 4)]);
77
- return new Address(hash.ripemd160(buffer));
78
- }
79
- }]);
80
-
81
- return Address;
82
- }();
83
-
84
- module.exports = Address;
@@ -1,184 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.encrypt = encrypt;
7
- exports.decrypt = decrypt;
8
-
9
- var _secureRandom = require('secure-random');
10
-
11
- var _secureRandom2 = _interopRequireDefault(_secureRandom);
12
-
13
- var _bytebuffer = require('bytebuffer');
14
-
15
- var _bytebuffer2 = _interopRequireDefault(_bytebuffer);
16
-
17
- var _browserifyAes = require('browserify-aes');
18
-
19
- var _browserifyAes2 = _interopRequireDefault(_browserifyAes);
20
-
21
- var _assert = require('assert');
22
-
23
- var _assert2 = _interopRequireDefault(_assert);
24
-
25
- var _key_public = require('./key_public');
26
-
27
- var _key_public2 = _interopRequireDefault(_key_public);
28
-
29
- var _key_private = require('./key_private');
30
-
31
- var _key_private2 = _interopRequireDefault(_key_private);
32
-
33
- var _hash = require('./hash');
34
-
35
- var _hash2 = _interopRequireDefault(_hash);
36
-
37
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
38
-
39
- var Long = _bytebuffer2.default.Long;
40
-
41
- /**
42
- Spec: http://localhost:3002/steem/@dantheman/how-to-encrypt-a-memo-when-transferring-steem
43
- @throws {Error|TypeError} - "Invalid Key, ..."
44
- @arg {PrivateKey} private_key - required and used for decryption
45
- @arg {PublicKey} public_key - required and used to calcualte the shared secret
46
- @arg {string} [nonce = uniqueNonce()] - assigned a random unique uint64
47
-
48
- @return {object}
49
- @property {string} nonce - random or unique uint64, provides entropy when re-using the same private/public keys.
50
- @property {Buffer} message - Plain text message
51
- @property {number} checksum - shared secret checksum
52
- */
53
- function encrypt(private_key, public_key, message) {
54
- var nonce = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : uniqueNonce();
55
-
56
- return crypt(private_key, public_key, nonce, message);
57
- }
58
-
59
- /**
60
- Spec: http://localhost:3002/steem/@dantheman/how-to-encrypt-a-memo-when-transferring-steem
61
- @arg {PrivateKey} private_key - required and used for decryption
62
- @arg {PublicKey} public_key - required and used to calcualte the shared secret
63
- @arg {string} nonce - random or unique uint64, provides entropy when re-using the same private/public keys.
64
- @arg {Buffer} message - Encrypted or plain text message
65
- @arg {number} checksum - shared secret checksum
66
- @throws {Error|TypeError} - "Invalid Key, ..."
67
- @return {Buffer} - message
68
- */
69
- function decrypt(private_key, public_key, nonce, message, checksum) {
70
- return crypt(private_key, public_key, nonce, message, checksum).message;
71
- }
72
-
73
- /**
74
- @arg {Buffer} message - Encrypted or plain text message (see checksum)
75
- @arg {number} checksum - shared secret checksum (null to encrypt, non-null to decrypt)
76
- */
77
- function crypt(private_key, public_key, nonce, message, checksum) {
78
- private_key = toPrivateObj(private_key);
79
- if (!private_key) throw new TypeError('private_key is required');
80
-
81
- public_key = toPublicObj(public_key);
82
- if (!public_key) throw new TypeError('public_key is required');
83
-
84
- nonce = toLongObj(nonce);
85
- if (!nonce) throw new TypeError('nonce is required');
86
-
87
- if (!Buffer.isBuffer(message)) {
88
- if (typeof message !== 'string') throw new TypeError('message should be buffer or string');
89
- message = new Buffer(message, 'binary');
90
- }
91
- if (checksum && typeof checksum !== 'number') throw new TypeError('checksum should be a number');
92
-
93
- var S = private_key.get_shared_secret(public_key);
94
- var ebuf = new _bytebuffer2.default(_bytebuffer2.default.DEFAULT_CAPACITY, _bytebuffer2.default.LITTLE_ENDIAN);
95
- ebuf.writeUint64(nonce);
96
- ebuf.append(S.toString('binary'), 'binary');
97
- ebuf = new Buffer(ebuf.copy(0, ebuf.offset).toBinary(), 'binary');
98
- var encryption_key = _hash2.default.sha512(ebuf);
99
-
100
- // D E B U G
101
- // console.log('crypt', {
102
- // priv_to_pub: private_key.toPublicKey().toString(),
103
- // pub: public_key.toString(),
104
- // nonce: nonce.toString(),
105
- // message: message.length,
106
- // checksum,
107
- // S: S.toString('hex'),
108
- // encryption_key: encryption_key.toString('hex'),
109
- // })
110
-
111
- var iv = encryption_key.slice(32, 48);
112
- var key = encryption_key.slice(0, 32);
113
-
114
- // check is first 64 bit of sha256 hash treated as uint64_t truncated to 32 bits.
115
- var check = _hash2.default.sha256(encryption_key);
116
- check = check.slice(0, 4);
117
- var cbuf = _bytebuffer2.default.fromBinary(check.toString('binary'), _bytebuffer2.default.DEFAULT_CAPACITY, _bytebuffer2.default.LITTLE_ENDIAN);
118
- check = cbuf.readUint32();
119
-
120
- if (checksum) {
121
- if (check !== checksum) throw new Error('Invalid key');
122
- message = cryptoJsDecrypt(message, key, iv);
123
- } else {
124
- message = cryptoJsEncrypt(message, key, iv);
125
- }
126
- return { nonce: nonce, message: message, checksum: check };
127
- }
128
-
129
- /** This method does not use a checksum, the returned data must be validated some other way.
130
- @arg {string|Buffer} ciphertext - binary format
131
- @return {Buffer}
132
- */
133
- function cryptoJsDecrypt(message, key, iv) {
134
- (0, _assert2.default)(message, "Missing cipher text");
135
- message = toBinaryBuffer(message);
136
- var decipher = _browserifyAes2.default.createDecipheriv('aes-256-cbc', key, iv);
137
- // decipher.setAutoPadding(true)
138
- message = Buffer.concat([decipher.update(message), decipher.final()]);
139
- return message;
140
- }
141
-
142
- /** This method does not use a checksum, the returned data must be validated some other way.
143
- @arg {string|Buffer} plaintext - binary format
144
- @return {Buffer} binary
145
- */
146
- function cryptoJsEncrypt(message, key, iv) {
147
- (0, _assert2.default)(message, "Missing plain text");
148
- message = toBinaryBuffer(message);
149
- var cipher = _browserifyAes2.default.createCipheriv('aes-256-cbc', key, iv);
150
- // cipher.setAutoPadding(true)
151
- message = Buffer.concat([cipher.update(message), cipher.final()]);
152
- return message;
153
- }
154
-
155
- /** @return {string} unique 64 bit unsigned number string. Being time based, this is careful to never choose the same nonce twice. This value could be recorded in the blockchain for a long time.
156
- */
157
- function uniqueNonce() {
158
- if (unique_nonce_entropy === null) {
159
- var b = _secureRandom2.default.randomUint8Array(2);
160
- unique_nonce_entropy = parseInt(b[0] << 8 | b[1], 10);
161
- }
162
- var long = Long.fromNumber(Date.now());
163
- var entropy = ++unique_nonce_entropy % 0xFFFF;
164
- // console.log('uniqueNonce date\t', ByteBuffer.allocate(8).writeUint64(long).toHex(0))
165
- // console.log('uniqueNonce entropy\t', ByteBuffer.allocate(8).writeUint64(Long.fromNumber(entropy)).toHex(0))
166
- long = long.shiftLeft(16).or(Long.fromNumber(entropy));
167
- // console.log('uniqueNonce final\t', ByteBuffer.allocate(8).writeUint64(long).toHex(0))
168
- return long.toString();
169
- }
170
- var unique_nonce_entropy = null;
171
- // for(let i=1; i < 10; i++) key.uniqueNonce()
172
-
173
- var toPrivateObj = function toPrivateObj(o) {
174
- return o ? o.d ? o : _key_private2.default.fromWif(o) : o /*null or undefined*/;
175
- };
176
- var toPublicObj = function toPublicObj(o) {
177
- return o ? o.Q ? o : _key_public2.default.fromString(o) : o /*null or undefined*/;
178
- };
179
- var toLongObj = function toLongObj(o) {
180
- return o ? Long.isLong(o) ? o : Long.fromString(o) : o;
181
- };
182
- var toBinaryBuffer = function toBinaryBuffer(o) {
183
- return o ? Buffer.isBuffer(o) ? o : new Buffer(o, 'binary') : o;
184
- };
@@ -1,13 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.normalize = normalize;
7
- function normalize(brain_key) {
8
- if (typeof brain_key !== 'string') {
9
- throw new Error("string required for brain_key");
10
- }
11
- brain_key = brain_key.trim();
12
- return brain_key.split(/[\t\n\v\f\r ]+/).join(' ');
13
- }