@aeternity/aepp-sdk 8.2.0 → 10.0.0-beta.1

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 (145) hide show
  1. package/README.md +16 -9
  2. package/dist/aepp-sdk.browser-script.js +1 -1
  3. package/dist/aepp-sdk.browser-script.js.LICENSE.txt +0 -9
  4. package/dist/aepp-sdk.browser-script.js.map +1 -1
  5. package/dist/aepp-sdk.browser.js +1 -1
  6. package/dist/aepp-sdk.browser.js.map +1 -1
  7. package/dist/aepp-sdk.js +1 -1
  8. package/dist/aepp-sdk.js.map +1 -1
  9. package/es/account/base.js +33 -119
  10. package/es/account/base.js.map +1 -1
  11. package/es/account/memory.js +17 -19
  12. package/es/account/memory.js.map +1 -1
  13. package/es/account/multiple.js +75 -154
  14. package/es/account/multiple.js.map +1 -1
  15. package/es/ae/aens.js +164 -599
  16. package/es/ae/aens.js.map +1 -1
  17. package/es/ae/contract.js +108 -916
  18. package/es/ae/contract.js.map +1 -1
  19. package/es/ae/index.js +89 -250
  20. package/es/ae/index.js.map +1 -1
  21. package/es/ae/oracle.js +132 -500
  22. package/es/ae/oracle.js.map +1 -1
  23. package/es/chain/index.js +4 -23
  24. package/es/chain/index.js.map +1 -1
  25. package/es/chain/node.js +292 -1018
  26. package/es/chain/node.js.map +1 -1
  27. package/es/channel/handlers.js +597 -1086
  28. package/es/channel/handlers.js.map +1 -1
  29. package/es/channel/index.js +203 -451
  30. package/es/channel/index.js.map +1 -1
  31. package/es/channel/internal.js +129 -301
  32. package/es/channel/internal.js.map +1 -1
  33. package/es/contract/aci/index.js +319 -491
  34. package/es/contract/aci/index.js.map +1 -1
  35. package/es/contract/aci/transformation.js +35 -711
  36. package/es/contract/aci/transformation.js.map +1 -1
  37. package/es/contract/compiler.js +129 -203
  38. package/es/contract/compiler.js.map +1 -1
  39. package/es/contract/ga/helpers.js +17 -122
  40. package/es/contract/ga/helpers.js.map +1 -1
  41. package/es/contract/ga/index.js +102 -247
  42. package/es/contract/ga/index.js.map +1 -1
  43. package/es/contract/index.js +1 -1
  44. package/es/contract/index.js.map +1 -1
  45. package/es/index.js +2 -3
  46. package/es/index.js.map +1 -1
  47. package/es/node-pool/index.js +54 -73
  48. package/es/node-pool/index.js.map +1 -1
  49. package/es/node.js +56 -157
  50. package/es/node.js.map +1 -1
  51. package/es/other.d.ts +1 -1
  52. package/es/tx/builder/helpers.js +49 -89
  53. package/es/tx/builder/helpers.js.map +1 -1
  54. package/es/tx/builder/index.js +205 -303
  55. package/es/tx/builder/index.js.map +1 -1
  56. package/es/tx/builder/schema.js +585 -573
  57. package/es/tx/builder/schema.js.map +1 -1
  58. package/es/tx/index.js +1 -1
  59. package/es/tx/index.js.map +1 -1
  60. package/es/tx/tx-object.js +105 -135
  61. package/es/tx/tx-object.js.map +1 -1
  62. package/es/tx/tx.js +810 -1586
  63. package/es/tx/tx.js.map +1 -1
  64. package/es/tx/validator.js +191 -426
  65. package/es/tx/validator.js.map +1 -1
  66. package/es/utils/aepp-wallet-communication/connection/browser-runtime.js +17 -21
  67. package/es/utils/aepp-wallet-communication/connection/browser-runtime.js.map +1 -1
  68. package/es/utils/aepp-wallet-communication/connection/browser-window-message.js +38 -74
  69. package/es/utils/aepp-wallet-communication/connection/browser-window-message.js.map +1 -1
  70. package/es/utils/aepp-wallet-communication/content-script-bridge.js +14 -15
  71. package/es/utils/aepp-wallet-communication/content-script-bridge.js.map +1 -1
  72. package/es/utils/aepp-wallet-communication/helpers.js +60 -105
  73. package/es/utils/aepp-wallet-communication/helpers.js.map +1 -1
  74. package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.js +179 -510
  75. package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.js.map +1 -1
  76. package/es/utils/aepp-wallet-communication/rpc/rpc-client.js +70 -89
  77. package/es/utils/aepp-wallet-communication/rpc/rpc-client.js.map +1 -1
  78. package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.js +354 -603
  79. package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.js.map +1 -1
  80. package/es/utils/aepp-wallet-communication/schema.js +43 -39
  81. package/es/utils/aepp-wallet-communication/schema.js.map +1 -1
  82. package/es/utils/aepp-wallet-communication/wallet-detector.js +32 -58
  83. package/es/utils/aepp-wallet-communication/wallet-detector.js.map +1 -1
  84. package/es/utils/amount-formatter.js +41 -61
  85. package/es/utils/amount-formatter.js.map +1 -1
  86. package/es/utils/async-init.js +28 -64
  87. package/es/utils/async-init.js.map +1 -1
  88. package/es/utils/bignumber.js +3 -11
  89. package/es/utils/bignumber.js.map +1 -1
  90. package/es/utils/bytes.js +5 -9
  91. package/es/utils/bytes.js.map +1 -1
  92. package/es/utils/crypto.js +49 -75
  93. package/es/utils/crypto.js.map +1 -1
  94. package/es/utils/hd-wallet.js +45 -81
  95. package/es/utils/hd-wallet.js.map +1 -1
  96. package/es/utils/json-big.js +16 -49
  97. package/es/utils/json-big.js.map +1 -1
  98. package/es/utils/keystore.js +81 -246
  99. package/es/utils/keystore.js.map +1 -1
  100. package/es/utils/mptree.js +88 -134
  101. package/es/utils/mptree.js.map +1 -1
  102. package/es/utils/other.js +10 -60
  103. package/es/utils/other.js.map +1 -1
  104. package/es/utils/semver-satisfies.js +9 -28
  105. package/es/utils/semver-satisfies.js.map +1 -1
  106. package/es/utils/string.js +4 -13
  107. package/es/utils/string.js.map +1 -1
  108. package/es/utils/swagger.js +85 -218
  109. package/es/utils/swagger.js.map +1 -1
  110. package/package.json +52 -43
  111. package/src/account/base.js +8 -9
  112. package/src/account/multiple.js +20 -16
  113. package/src/ae/aens.js +25 -21
  114. package/src/ae/contract.js +65 -246
  115. package/src/ae/index.js +31 -7
  116. package/src/ae/oracle.js +21 -17
  117. package/src/chain/index.js +2 -12
  118. package/src/chain/node.js +26 -29
  119. package/src/channel/handlers.js +0 -1
  120. package/src/channel/index.js +4 -5
  121. package/src/contract/aci/index.js +221 -106
  122. package/src/contract/aci/transformation.js +30 -422
  123. package/src/contract/compiler.js +45 -4
  124. package/src/contract/ga/helpers.js +2 -12
  125. package/src/contract/ga/index.js +22 -26
  126. package/src/index.js +2 -4
  127. package/src/node-pool/index.js +21 -12
  128. package/src/node.js +22 -26
  129. package/src/tx/builder/helpers.js +12 -24
  130. package/src/tx/builder/index.js +18 -15
  131. package/src/tx/builder/schema.js +43 -108
  132. package/src/tx/tx-object.js +0 -2
  133. package/src/tx/tx.js +157 -144
  134. package/src/tx/validator.js +134 -202
  135. package/src/utils/aepp-wallet-communication/rpc/aepp-rpc.js +1 -3
  136. package/src/utils/aepp-wallet-communication/rpc/wallet-rpc.js +9 -10
  137. package/src/utils/aepp-wallet-communication/schema.js +1 -3
  138. package/src/utils/amount-formatter.ts +1 -1
  139. package/src/utils/bignumber.ts +2 -1
  140. package/src/utils/crypto.js +4 -17
  141. package/src/utils/other.ts +1 -1
  142. package/src/utils/semver-satisfies.ts +1 -1
  143. package/src/utils/swagger.js +24 -7
  144. package/CHANGELOG.md +0 -1716
  145. package/src/contract/aci/helpers.js +0 -140
@@ -1,61 +1,30 @@
1
- import _Object$keys from "@babel/runtime-corejs3/core-js-stable/object/keys";
2
- import _Object$getOwnPropertySymbols from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols";
3
- import _filterInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/filter";
4
- import _Object$getOwnPropertyDescriptor from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor";
5
- import _forEachInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/for-each";
6
- import _Object$getOwnPropertyDescriptors from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors";
7
- import _Object$defineProperties from "@babel/runtime-corejs3/core-js-stable/object/define-properties";
8
- import _Object$defineProperty from "@babel/runtime-corejs3/core-js-stable/object/define-property";
9
- import _defineProperty from "@babel/runtime-corejs3/helpers/defineProperty";
10
- import _slicedToArray from "@babel/runtime-corejs3/helpers/slicedToArray";
11
- import _typeof from "@babel/runtime-corejs3/helpers/typeof";
12
-
13
- function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); if (enumerableOnly) { symbols = _filterInstanceProperty(symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
14
-
15
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { var _context4; _forEachInstanceProperty(_context4 = ownKeys(Object(source), true)).call(_context4, function (key) { _defineProperty(target, key, source[key]); }); } else if (_Object$getOwnPropertyDescriptors) { _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)); } else { var _context5; _forEachInstanceProperty(_context5 = ownKeys(Object(source))).call(_context5, function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } } return target; }
16
-
17
- import _reduceInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/reduce";
18
- import _mapInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/map";
19
- import _Object$entries from "@babel/runtime-corejs3/core-js-stable/object/entries";
20
- import _Array$isArray from "@babel/runtime-corejs3/core-js-stable/array/is-array";
21
- import _concatInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/concat";
22
1
  import JsonBig from '@aeternity/json-bigint';
23
2
  import BigNumber from 'bignumber.js';
24
- var jsonBig = JsonBig({
3
+ const jsonBig = JsonBig({
25
4
  storeAsString: true
26
5
  });
27
6
 
28
- var convertValuesToBigNumbers = function convertValuesToBigNumbers(value) {
29
- if (_typeof(value) === 'object' && value !== null && value.constructor === Object) {
30
- var _context, _context2;
31
-
32
- return _reduceInstanceProperty(_context = _mapInstanceProperty(_context2 = _Object$entries(value)).call(_context2, function (_ref) {
33
- var _ref2 = _slicedToArray(_ref, 2),
34
- key = _ref2[0],
35
- value = _ref2[1];
36
-
7
+ const convertValuesToBigNumbers = value => {
8
+ if (typeof value === 'object' && value !== null && value.constructor === Object) {
9
+ return Object.entries(value).map(_ref => {
10
+ let [key, value] = _ref;
37
11
  return [key, convertValuesToBigNumbers(value)];
38
- })).call(_context, function (p, _ref3) {
39
- var _ref4 = _slicedToArray(_ref3, 2),
40
- k = _ref4[0],
41
- v = _ref4[1];
42
-
43
- return _objectSpread(_objectSpread({}, p), {}, _defineProperty({}, k, v));
12
+ }).reduce((p, _ref2) => {
13
+ let [k, v] = _ref2;
14
+ return { ...p,
15
+ [k]: v
16
+ };
44
17
  }, {});
45
18
  }
46
19
 
47
- if (_Array$isArray(value)) {
48
- return _mapInstanceProperty(value).call(value, function (item) {
49
- return convertValuesToBigNumbers(item);
50
- });
20
+ if (Array.isArray(value)) {
21
+ return value.map(item => convertValuesToBigNumbers(item));
51
22
  }
52
23
 
53
24
  if (typeof value === 'string' && BigNumber(value).toString(10) === value) {
54
- var bn = BigNumber(value);
25
+ const bn = BigNumber(value);
55
26
 
56
- bn.toJSON = function () {
57
- return bn.toString(10);
58
- };
27
+ bn.toJSON = () => bn.toString(10);
59
28
 
60
29
  return bn;
61
30
  }
@@ -64,14 +33,12 @@ var convertValuesToBigNumbers = function convertValuesToBigNumbers(value) {
64
33
  };
65
34
 
66
35
  export default {
67
- stringify: function stringify(object) {
68
- var _context3;
69
-
36
+ stringify: function (object) {
70
37
  for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
71
38
  args[_key - 1] = arguments[_key];
72
39
  }
73
40
 
74
- return jsonBig.stringify.apply(jsonBig, _concatInstanceProperty(_context3 = [convertValuesToBigNumbers(object)]).call(_context3, args));
41
+ return jsonBig.stringify(convertValuesToBigNumbers(object), ...args);
75
42
  },
76
43
  parse: jsonBig.parse
77
44
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/json-big.js"],"names":["JsonBig","BigNumber","jsonBig","storeAsString","convertValuesToBigNumbers","value","constructor","Object","key","p","k","v","item","toString","bn","toJSON","stringify","object","args","parse"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,OAAOA,OAAP,MAAoB,wBAApB;AACA,OAAOC,SAAP,MAAsB,cAAtB;AAEA,IAAMC,OAAO,GAAGF,OAAO,CAAC;AAAEG,EAAAA,aAAa,EAAE;AAAjB,CAAD,CAAvB;;AAEA,IAAMC,yBAAyB,GAAG,SAA5BA,yBAA4B,CAAAC,KAAK,EAAI;AACzC,MAAI,QAAOA,KAAP,MAAiB,QAAjB,IAA6BA,KAAK,KAAK,IAAvC,IAA+CA,KAAK,CAACC,WAAN,KAAsBC,MAAzE,EAAiF;AAAA;;AAC/E,WAAO,oFAAeF,KAAf,mBACA;AAAA;AAAA,UAAEG,GAAF;AAAA,UAAOH,KAAP;;AAAA,aAAkB,CAACG,GAAD,EAAMJ,yBAAyB,CAACC,KAAD,CAA/B,CAAlB;AAAA,KADA,kBAEG,UAACI,CAAD;AAAA;AAAA,UAAKC,CAAL;AAAA,UAAQC,CAAR;;AAAA,6CAAqBF,CAArB,2BAAyBC,CAAzB,EAA6BC,CAA7B;AAAA,KAFH,EAEsC,EAFtC,CAAP;AAGD;;AACD,MAAI,eAAcN,KAAd,CAAJ,EAA0B;AACxB,WAAO,qBAAAA,KAAK,MAAL,CAAAA,KAAK,EAAK,UAAAO,IAAI;AAAA,aAAIR,yBAAyB,CAACQ,IAAD,CAA7B;AAAA,KAAT,CAAZ;AACD;;AACD,MAAI,OAAOP,KAAP,KAAiB,QAAjB,IAA6BJ,SAAS,CAACI,KAAD,CAAT,CAAiBQ,QAAjB,CAA0B,EAA1B,MAAkCR,KAAnE,EAA0E;AACxE,QAAMS,EAAE,GAAGb,SAAS,CAACI,KAAD,CAApB;;AACAS,IAAAA,EAAE,CAACC,MAAH,GAAY;AAAA,aAAMD,EAAE,CAACD,QAAH,CAAY,EAAZ,CAAN;AAAA,KAAZ;;AACA,WAAOC,EAAP;AACD;;AACD,SAAOT,KAAP;AACD,CAfD;;AAiBA,eAAe;AACbW,EAAAA,SAAS,EAAE,mBAACC,MAAD;AAAA;;AAAA,sCAAYC,IAAZ;AAAYA,MAAAA,IAAZ;AAAA;;AAAA,WAAqBhB,OAAO,CAACc,SAAR,OAAAd,OAAO,uCAAWE,yBAAyB,CAACa,MAAD,CAApC,mBAAiDC,IAAjD,EAA5B;AAAA,GADE;AAEbC,EAAAA,KAAK,EAAEjB,OAAO,CAACiB;AAFF,CAAf","sourcesContent":["import JsonBig from '@aeternity/json-bigint'\nimport BigNumber from 'bignumber.js'\n\nconst jsonBig = JsonBig({ storeAsString: true })\n\nconst convertValuesToBigNumbers = value => {\n if (typeof value === 'object' && value !== null && value.constructor === Object) {\n return Object.entries(value)\n .map(([key, value]) => [key, convertValuesToBigNumbers(value)])\n .reduce((p, [k, v]) => ({ ...p, [k]: v }), {})\n }\n if (Array.isArray(value)) {\n return value.map(item => convertValuesToBigNumbers(item))\n }\n if (typeof value === 'string' && BigNumber(value).toString(10) === value) {\n const bn = BigNumber(value)\n bn.toJSON = () => bn.toString(10)\n return bn\n }\n return value\n}\n\nexport default {\n stringify: (object, ...args) => jsonBig.stringify(convertValuesToBigNumbers(object), ...args),\n parse: jsonBig.parse\n}\n"],"file":"json-big.js"}
1
+ {"version":3,"sources":["../../src/utils/json-big.js"],"names":["JsonBig","BigNumber","jsonBig","storeAsString","convertValuesToBigNumbers","value","constructor","Object","entries","map","key","reduce","p","k","v","Array","isArray","item","toString","bn","toJSON","stringify","object","args","parse"],"mappings":"AAAA,OAAOA,OAAP,MAAoB,wBAApB;AACA,OAAOC,SAAP,MAAsB,cAAtB;AAEA,MAAMC,OAAO,GAAGF,OAAO,CAAC;AAAEG,EAAAA,aAAa,EAAE;AAAjB,CAAD,CAAvB;;AAEA,MAAMC,yBAAyB,GAAGC,KAAK,IAAI;AACzC,MAAI,OAAOA,KAAP,KAAiB,QAAjB,IAA6BA,KAAK,KAAK,IAAvC,IAA+CA,KAAK,CAACC,WAAN,KAAsBC,MAAzE,EAAiF;AAC/E,WAAOA,MAAM,CAACC,OAAP,CAAeH,KAAf,EACJI,GADI,CACA;AAAA,UAAC,CAACC,GAAD,EAAML,KAAN,CAAD;AAAA,aAAkB,CAACK,GAAD,EAAMN,yBAAyB,CAACC,KAAD,CAA/B,CAAlB;AAAA,KADA,EAEJM,MAFI,CAEG,CAACC,CAAD;AAAA,UAAI,CAACC,CAAD,EAAIC,CAAJ,CAAJ;AAAA,aAAgB,EAAE,GAAGF,CAAL;AAAQ,SAACC,CAAD,GAAKC;AAAb,OAAhB;AAAA,KAFH,EAEsC,EAFtC,CAAP;AAGD;;AACD,MAAIC,KAAK,CAACC,OAAN,CAAcX,KAAd,CAAJ,EAA0B;AACxB,WAAOA,KAAK,CAACI,GAAN,CAAUQ,IAAI,IAAIb,yBAAyB,CAACa,IAAD,CAA3C,CAAP;AACD;;AACD,MAAI,OAAOZ,KAAP,KAAiB,QAAjB,IAA6BJ,SAAS,CAACI,KAAD,CAAT,CAAiBa,QAAjB,CAA0B,EAA1B,MAAkCb,KAAnE,EAA0E;AACxE,UAAMc,EAAE,GAAGlB,SAAS,CAACI,KAAD,CAApB;;AACAc,IAAAA,EAAE,CAACC,MAAH,GAAY,MAAMD,EAAE,CAACD,QAAH,CAAY,EAAZ,CAAlB;;AACA,WAAOC,EAAP;AACD;;AACD,SAAOd,KAAP;AACD,CAfD;;AAiBA,eAAe;AACbgB,EAAAA,SAAS,EAAE,UAACC,MAAD;AAAA,sCAAYC,IAAZ;AAAYA,MAAAA,IAAZ;AAAA;;AAAA,WAAqBrB,OAAO,CAACmB,SAAR,CAAkBjB,yBAAyB,CAACkB,MAAD,CAA3C,EAAqD,GAAGC,IAAxD,CAArB;AAAA,GADE;AAEbC,EAAAA,KAAK,EAAEtB,OAAO,CAACsB;AAFF,CAAf","sourcesContent":["import JsonBig from '@aeternity/json-bigint'\nimport BigNumber from 'bignumber.js'\n\nconst jsonBig = JsonBig({ storeAsString: true })\n\nconst convertValuesToBigNumbers = value => {\n if (typeof value === 'object' && value !== null && value.constructor === Object) {\n return Object.entries(value)\n .map(([key, value]) => [key, convertValuesToBigNumbers(value)])\n .reduce((p, [k, v]) => ({ ...p, [k]: v }), {})\n }\n if (Array.isArray(value)) {\n return value.map(item => convertValuesToBigNumbers(item))\n }\n if (typeof value === 'string' && BigNumber(value).toString(10) === value) {\n const bn = BigNumber(value)\n bn.toJSON = () => bn.toString(10)\n return bn\n }\n return value\n}\n\nexport default {\n stringify: (object, ...args) => jsonBig.stringify(convertValuesToBigNumbers(object), ...args),\n parse: jsonBig.parse\n}\n"],"file":"json-big.js"}
@@ -1,26 +1,9 @@
1
- import _Object$keys from "@babel/runtime-corejs3/core-js-stable/object/keys";
2
- import _Object$getOwnPropertySymbols from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols";
3
- import _Object$getOwnPropertyDescriptor from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor";
4
- import _forEachInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/for-each";
5
- import _Object$getOwnPropertyDescriptors from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors";
6
- import _Object$defineProperties from "@babel/runtime-corejs3/core-js-stable/object/define-properties";
7
- import _Object$defineProperty from "@babel/runtime-corejs3/core-js-stable/object/define-property";
8
- import _defineProperty from "@babel/runtime-corejs3/helpers/defineProperty";
9
- import _asyncToGenerator from "@babel/runtime-corejs3/helpers/asyncToGenerator";
10
- import _regeneratorRuntime from "@babel/runtime-corejs3/regenerator";
11
-
12
- function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); if (enumerableOnly) { symbols = _filterInstanceProperty(symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
13
-
14
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { var _context6; _forEachInstanceProperty(_context6 = ownKeys(Object(source), true)).call(_context6, function (key) { _defineProperty(target, key, source[key]); }); } else if (_Object$getOwnPropertyDescriptors) { _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)); } else { var _context7; _forEachInstanceProperty(_context7 = ownKeys(Object(source))).call(_context7, function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } } return target; }
15
-
16
- import _Object$assign from "@babel/runtime-corejs3/core-js-stable/object/assign";
17
- import _filterInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/filter";
18
1
  import nacl from 'tweetnacl';
19
2
  import { v4 as uuid } from 'uuid';
20
3
  import { encodeBase58Check } from './crypto';
21
4
  import { str2buf } from './bytes';
22
5
 
23
- var _sodium = require('libsodium-wrappers-sumo');
6
+ const _sodium = require('libsodium-wrappers-sumo');
24
7
  /**
25
8
  * KeyStore module
26
9
  * @module @aeternity/aepp-sdk/es/utils/keystore
@@ -29,7 +12,7 @@ var _sodium = require('libsodium-wrappers-sumo');
29
12
  */
30
13
 
31
14
 
32
- var DEFAULTS = {
15
+ const DEFAULTS = {
33
16
  crypto: {
34
17
  secret_type: 'ed25519',
35
18
  symmetric_alg: 'xsalsa20-poly1305',
@@ -42,53 +25,24 @@ var DEFAULTS = {
42
25
  }
43
26
  }; // DERIVED KEY PART
44
27
 
45
- var DERIVED_KEY_FUNCTIONS = {
28
+ const DERIVED_KEY_FUNCTIONS = {
46
29
  argon2id: deriveKeyUsingArgon2id
47
30
  };
48
- export function deriveKeyUsingArgon2id(_x, _x2, _x3) {
49
- return _deriveKeyUsingArgon2id.apply(this, arguments);
31
+ export async function deriveKeyUsingArgon2id(password, salt, options) {
32
+ const {
33
+ memlimit_kib: memoryCost,
34
+ opslimit: timeCost
35
+ } = options.kdf_params; // const isBrowser = !(typeof module !== 'undefined' && module.exports)
36
+
37
+ return _sodium.ready.then(async () => {
38
+ // tslint:disable-next-line:typedef
39
+ const sodium = _sodium;
40
+ const result = sodium.crypto_pwhash(32, password, salt, timeCost, memoryCost * 1024, sodium.crypto_pwhash_ALG_ARGON2ID13);
41
+ return Buffer.from(result);
42
+ });
50
43
  } // CRYPTO PART
51
44
 
52
- function _deriveKeyUsingArgon2id() {
53
- _deriveKeyUsingArgon2id = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(password, salt, options) {
54
- var _options$kdf_params, memoryCost, timeCost;
55
-
56
- return _regeneratorRuntime.wrap(function _callee2$(_context2) {
57
- while (1) {
58
- switch (_context2.prev = _context2.next) {
59
- case 0:
60
- _options$kdf_params = options.kdf_params, memoryCost = _options$kdf_params.memlimit_kib, timeCost = _options$kdf_params.opslimit; // const isBrowser = !(typeof module !== 'undefined' && module.exports)
61
-
62
- return _context2.abrupt("return", _sodium.ready.then( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
63
- var sodium, result;
64
- return _regeneratorRuntime.wrap(function _callee$(_context) {
65
- while (1) {
66
- switch (_context.prev = _context.next) {
67
- case 0:
68
- // tslint:disable-next-line:typedef
69
- sodium = _sodium;
70
- result = sodium.crypto_pwhash(32, password, salt, timeCost, memoryCost * 1024, sodium.crypto_pwhash_ALG_ARGON2ID13);
71
- return _context.abrupt("return", Buffer.from(result));
72
-
73
- case 3:
74
- case "end":
75
- return _context.stop();
76
- }
77
- }
78
- }, _callee);
79
- }))));
80
-
81
- case 2:
82
- case "end":
83
- return _context2.stop();
84
- }
85
- }
86
- }, _callee2);
87
- }));
88
- return _deriveKeyUsingArgon2id.apply(this, arguments);
89
- }
90
-
91
- var CRYPTO_FUNCTIONS = {
45
+ const CRYPTO_FUNCTIONS = {
92
46
  'xsalsa20-poly1305': {
93
47
  encrypt: encryptXsalsa20Poly1305,
94
48
  decrypt: decryptXsalsa20Poly1305
@@ -96,17 +50,21 @@ var CRYPTO_FUNCTIONS = {
96
50
  };
97
51
 
98
52
  function encryptXsalsa20Poly1305(_ref) {
99
- var plaintext = _ref.plaintext,
100
- key = _ref.key,
101
- nonce = _ref.nonce;
53
+ let {
54
+ plaintext,
55
+ key,
56
+ nonce
57
+ } = _ref;
102
58
  return nacl.secretbox(plaintext, nonce, key);
103
59
  }
104
60
 
105
61
  function decryptXsalsa20Poly1305(_ref2) {
106
- var ciphertext = _ref2.ciphertext,
107
- key = _ref2.key,
108
- nonce = _ref2.nonce;
109
- var res = nacl.secretbox.open(ciphertext, nonce, key);
62
+ let {
63
+ ciphertext,
64
+ key,
65
+ nonce
66
+ } = _ref2;
67
+ const res = nacl.secretbox.open(ciphertext, nonce, key);
110
68
  if (!res) throw new Error('Invalid password or nonce');
111
69
  return res;
112
70
  }
@@ -121,12 +79,12 @@ function decryptXsalsa20Poly1305(_ref2) {
121
79
 
122
80
 
123
81
  function encrypt(plaintext, key, nonce) {
124
- var algo = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : DEFAULTS.crypto.symmetric_alg;
82
+ let algo = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : DEFAULTS.crypto.symmetric_alg;
125
83
  if (!CRYPTO_FUNCTIONS[algo]) throw new Error(algo + ' is not available');
126
84
  return CRYPTO_FUNCTIONS[algo].encrypt({
127
- plaintext: plaintext,
128
- nonce: nonce,
129
- key: key
85
+ plaintext,
86
+ nonce,
87
+ key
130
88
  });
131
89
  }
132
90
  /**
@@ -142,9 +100,9 @@ function encrypt(plaintext, key, nonce) {
142
100
  function decrypt(ciphertext, key, nonce, algo) {
143
101
  if (!CRYPTO_FUNCTIONS[algo]) throw new Error(algo + ' is not available');
144
102
  return CRYPTO_FUNCTIONS[algo].decrypt({
145
- ciphertext: ciphertext,
146
- nonce: nonce,
147
- key: key
103
+ ciphertext,
104
+ nonce,
105
+ key
148
106
  });
149
107
  }
150
108
  /**
@@ -158,8 +116,18 @@ function decrypt(ciphertext, key, nonce, algo) {
158
116
  */
159
117
 
160
118
 
161
- function deriveKey(_x4, _x5) {
162
- return _deriveKey.apply(this, arguments);
119
+ async function deriveKey(password, nonce) {
120
+ let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {
121
+ kdf_params: DEFAULTS.crypto.kdf_params,
122
+ kdf: DEFAULTS.crypto.kdf
123
+ };
124
+
125
+ if (typeof password === 'undefined' || password === null || !nonce) {
126
+ throw new Error('Must provide password and nonce to derive a key');
127
+ }
128
+
129
+ if (!Object.prototype.hasOwnProperty.call(DERIVED_KEY_FUNCTIONS, options.kdf)) throw new Error('Unsupported kdf type');
130
+ return DERIVED_KEY_FUNCTIONS[options.kdf](password, nonce, options);
163
131
  }
164
132
  /**
165
133
  * Assemble key data object in secret-storage format.
@@ -176,59 +144,16 @@ function deriveKey(_x4, _x5) {
176
144
  */
177
145
 
178
146
 
179
- function _deriveKey() {
180
- _deriveKey = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3(password, nonce) {
181
- var options,
182
- _args3 = arguments;
183
- return _regeneratorRuntime.wrap(function _callee3$(_context3) {
184
- while (1) {
185
- switch (_context3.prev = _context3.next) {
186
- case 0:
187
- options = _args3.length > 2 && _args3[2] !== undefined ? _args3[2] : {
188
- kdf_params: DEFAULTS.crypto.kdf_params,
189
- kdf: DEFAULTS.crypto.kdf
190
- };
191
-
192
- if (!(typeof password === 'undefined' || password === null || !nonce)) {
193
- _context3.next = 3;
194
- break;
195
- }
196
-
197
- throw new Error('Must provide password and nonce to derive a key');
198
-
199
- case 3:
200
- if (Object.prototype.hasOwnProperty.call(DERIVED_KEY_FUNCTIONS, options.kdf)) {
201
- _context3.next = 5;
202
- break;
203
- }
204
-
205
- throw new Error('Unsupported kdf type');
206
-
207
- case 5:
208
- return _context3.abrupt("return", DERIVED_KEY_FUNCTIONS[options.kdf](password, nonce, options));
209
-
210
- case 6:
211
- case "end":
212
- return _context3.stop();
213
- }
214
- }
215
- }, _callee3);
216
- }));
217
- return _deriveKey.apply(this, arguments);
218
- }
219
-
220
147
  function marshal(name, derivedKey, privateKey, nonce, salt) {
221
- var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};
222
-
223
- var opt = _Object$assign({}, DEFAULTS.crypto, options);
224
-
225
- return _Object$assign({
226
- name: name,
148
+ let options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};
149
+ const opt = Object.assign({}, DEFAULTS.crypto, options);
150
+ return Object.assign({
151
+ name,
227
152
  version: 1,
228
153
  public_key: getAddressFromPriv(privateKey),
229
154
  id: uuid()
230
155
  }, {
231
- crypto: _Object$assign({
156
+ crypto: Object.assign({
232
157
  secret_type: opt.secret_type,
233
158
  symmetric_alg: opt.symmetric_alg,
234
159
  ciphertext: Buffer.from(encrypt(Buffer.from(privateKey), derivedKey, nonce, opt.symmetric_alg)).toString('hex'),
@@ -237,17 +162,17 @@ function marshal(name, derivedKey, privateKey, nonce, salt) {
237
162
  }
238
163
  }, {
239
164
  kdf: opt.kdf,
240
- kdf_params: _objectSpread(_objectSpread({}, opt.kdf_params), {}, {
165
+ kdf_params: { ...opt.kdf_params,
241
166
  salt: Buffer.from(salt).toString('hex')
242
- })
167
+ }
243
168
  })
244
169
  });
245
170
  }
246
171
 
247
172
  export function getAddressFromPriv(secret) {
248
- var keys = nacl.sign.keyPair.fromSecretKey(str2buf(secret));
249
- var publicBuffer = Buffer.from(keys.publicKey);
250
- return "ak_".concat(encodeBase58Check(publicBuffer));
173
+ const keys = nacl.sign.keyPair.fromSecretKey(str2buf(secret));
174
+ const publicBuffer = Buffer.from(keys.publicKey);
175
+ return `ak_${encodeBase58Check(publicBuffer)}`;
251
176
  }
252
177
  /**
253
178
  * Recover plaintext private key from secret-storage key object.
@@ -256,8 +181,19 @@ export function getAddressFromPriv(secret) {
256
181
  * @return {Buffer} Plaintext private key.
257
182
  */
258
183
 
259
- export function recover(_x6, _x7) {
260
- return _recover.apply(this, arguments);
184
+ export async function recover(password, keyObject) {
185
+ validateKeyObj(keyObject);
186
+ const nonce = Uint8Array.from(str2buf(keyObject.crypto.cipher_params.nonce));
187
+ const salt = Uint8Array.from(str2buf(keyObject.crypto.kdf_params.salt));
188
+ const kdfParams = keyObject.crypto.kdf_params;
189
+ const kdf = keyObject.crypto.kdf;
190
+ const key = await decrypt(Uint8Array.from(str2buf(keyObject.crypto.ciphertext)), await deriveKey(password, salt, {
191
+ kdf,
192
+ kdf_params: kdfParams
193
+ }), nonce, keyObject.crypto.symmetric_alg);
194
+ if (!key) throw new Error('Invalid password');
195
+ if (Buffer.from(key).length === 64) return Buffer.from(key).toString('hex');
196
+ return Buffer.from(key).toString('utf-8');
261
197
  }
262
198
  /**
263
199
  * Export private key to keystore secret-storage format.
@@ -273,121 +209,20 @@ export function recover(_x6, _x7) {
273
209
  * @return {Object}
274
210
  */
275
211
 
276
- function _recover() {
277
- _recover = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee4(password, keyObject) {
278
- var nonce, salt, kdfParams, kdf, key;
279
- return _regeneratorRuntime.wrap(function _callee4$(_context4) {
280
- while (1) {
281
- switch (_context4.prev = _context4.next) {
282
- case 0:
283
- validateKeyObj(keyObject);
284
- nonce = Uint8Array.from(str2buf(keyObject.crypto.cipher_params.nonce));
285
- salt = Uint8Array.from(str2buf(keyObject.crypto.kdf_params.salt));
286
- kdfParams = keyObject.crypto.kdf_params;
287
- kdf = keyObject.crypto.kdf;
288
- _context4.t0 = decrypt;
289
- _context4.t1 = Uint8Array.from(str2buf(keyObject.crypto.ciphertext));
290
- _context4.next = 9;
291
- return deriveKey(password, salt, {
292
- kdf: kdf,
293
- kdf_params: kdfParams
294
- });
295
-
296
- case 9:
297
- _context4.t2 = _context4.sent;
298
- _context4.t3 = nonce;
299
- _context4.t4 = keyObject.crypto.symmetric_alg;
300
- _context4.next = 14;
301
- return (0, _context4.t0)(_context4.t1, _context4.t2, _context4.t3, _context4.t4);
302
-
303
- case 14:
304
- key = _context4.sent;
305
-
306
- if (key) {
307
- _context4.next = 17;
308
- break;
309
- }
310
-
311
- throw new Error('Invalid password');
312
-
313
- case 17:
314
- if (!(Buffer.from(key).length === 64)) {
315
- _context4.next = 19;
316
- break;
317
- }
318
-
319
- return _context4.abrupt("return", Buffer.from(key).toString('hex'));
320
-
321
- case 19:
322
- return _context4.abrupt("return", Buffer.from(key).toString('utf-8'));
323
-
324
- case 20:
325
- case "end":
326
- return _context4.stop();
327
- }
328
- }
329
- }, _callee4);
330
- }));
331
- return _recover.apply(this, arguments);
332
- }
333
-
334
- export function dump(_x8, _x9, _x10) {
335
- return _dump.apply(this, arguments);
212
+ export async function dump(name, password, privateKey) {
213
+ let nonce = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : nacl.randomBytes(24);
214
+ let salt = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : nacl.randomBytes(16);
215
+ let options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};
216
+ const opt = Object.assign({}, DEFAULTS.crypto, options);
217
+ return marshal(name, await deriveKey(password, salt, opt), privateKey, nonce, salt, opt);
336
218
  }
337
-
338
- function _dump() {
339
- _dump = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee5(name, password, privateKey) {
340
- var nonce,
341
- salt,
342
- options,
343
- opt,
344
- _args5 = arguments;
345
- return _regeneratorRuntime.wrap(function _callee5$(_context5) {
346
- while (1) {
347
- switch (_context5.prev = _context5.next) {
348
- case 0:
349
- nonce = _args5.length > 3 && _args5[3] !== undefined ? _args5[3] : nacl.randomBytes(24);
350
- salt = _args5.length > 4 && _args5[4] !== undefined ? _args5[4] : nacl.randomBytes(16);
351
- options = _args5.length > 5 && _args5[5] !== undefined ? _args5[5] : {};
352
- opt = _Object$assign({}, DEFAULTS.crypto, options);
353
- _context5.t0 = marshal;
354
- _context5.t1 = name;
355
- _context5.next = 8;
356
- return deriveKey(password, salt, opt);
357
-
358
- case 8:
359
- _context5.t2 = _context5.sent;
360
- _context5.t3 = privateKey;
361
- _context5.t4 = nonce;
362
- _context5.t5 = salt;
363
- _context5.t6 = opt;
364
- return _context5.abrupt("return", (0, _context5.t0)(_context5.t1, _context5.t2, _context5.t3, _context5.t4, _context5.t5, _context5.t6));
365
-
366
- case 14:
367
- case "end":
368
- return _context5.stop();
369
- }
370
- }
371
- }, _callee5);
372
- }));
373
- return _dump.apply(this, arguments);
374
- }
375
-
376
219
  export function validateKeyObj(obj) {
377
- var root = ['crypto', 'id', 'version', 'public_key'];
378
- var cryptoKeys = ['cipher_params', 'ciphertext', 'symmetric_alg', 'kdf', 'kdf_params'];
379
-
380
- var missingRootKeys = _filterInstanceProperty(root).call(root, function (key) {
381
- return !Object.prototype.hasOwnProperty.call(obj, key);
382
- });
383
-
384
- if (missingRootKeys.length) throw new Error("Invalid key file format. Require properties: ".concat(missingRootKeys));
385
-
386
- var missingCryptoKeys = _filterInstanceProperty(cryptoKeys).call(cryptoKeys, function (key) {
387
- return !Object.prototype.hasOwnProperty.call(obj.crypto, key);
388
- });
389
-
390
- if (missingCryptoKeys.length) throw new Error("Invalid key file format. Require properties: ".concat(missingCryptoKeys));
220
+ const root = ['crypto', 'id', 'version', 'public_key'];
221
+ const cryptoKeys = ['cipher_params', 'ciphertext', 'symmetric_alg', 'kdf', 'kdf_params'];
222
+ const missingRootKeys = root.filter(key => !Object.prototype.hasOwnProperty.call(obj, key));
223
+ if (missingRootKeys.length) throw new Error(`Invalid key file format. Require properties: ${missingRootKeys}`);
224
+ const missingCryptoKeys = cryptoKeys.filter(key => !Object.prototype.hasOwnProperty.call(obj.crypto, key));
225
+ if (missingCryptoKeys.length) throw new Error(`Invalid key file format. Require properties: ${missingCryptoKeys}`);
391
226
  return true;
392
227
  }
393
228
  //# sourceMappingURL=keystore.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/keystore.js"],"names":["nacl","v4","uuid","encodeBase58Check","str2buf","_sodium","require","DEFAULTS","crypto","secret_type","symmetric_alg","kdf","kdf_params","memlimit_kib","opslimit","parallelism","DERIVED_KEY_FUNCTIONS","argon2id","deriveKeyUsingArgon2id","password","salt","options","memoryCost","timeCost","ready","then","sodium","result","crypto_pwhash","crypto_pwhash_ALG_ARGON2ID13","Buffer","from","CRYPTO_FUNCTIONS","encrypt","encryptXsalsa20Poly1305","decrypt","decryptXsalsa20Poly1305","plaintext","key","nonce","secretbox","ciphertext","res","open","Error","algo","deriveKey","Object","prototype","hasOwnProperty","call","marshal","name","derivedKey","privateKey","opt","version","public_key","getAddressFromPriv","id","toString","cipher_params","secret","keys","sign","keyPair","fromSecretKey","publicBuffer","publicKey","recover","keyObject","validateKeyObj","Uint8Array","kdfParams","length","dump","randomBytes","obj","root","cryptoKeys","missingRootKeys","missingCryptoKeys"],"mappings":"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","sourcesContent":["import nacl from 'tweetnacl'\nimport { v4 as uuid } from 'uuid'\n\nimport { encodeBase58Check } from './crypto'\nimport { str2buf } from './bytes'\n\nconst _sodium = require('libsodium-wrappers-sumo')\n\n/**\n * KeyStore module\n * @module @aeternity/aepp-sdk/es/utils/keystore\n * @example import { Keystore } from '@aeternity/aepp-sdk'\n * @example const { Keystore } = require('@aeternity/aepp-sdk')\n */\n\nconst DEFAULTS = {\n crypto: {\n secret_type: 'ed25519',\n symmetric_alg: 'xsalsa20-poly1305',\n kdf: 'argon2id',\n kdf_params: {\n memlimit_kib: 65536,\n opslimit: 3,\n parallelism: 1\n }\n }\n}\n\n// DERIVED KEY PART\nconst DERIVED_KEY_FUNCTIONS = {\n argon2id: deriveKeyUsingArgon2id\n}\n\nexport async function deriveKeyUsingArgon2id (password, salt, options) {\n const { memlimit_kib: memoryCost, opslimit: timeCost } = options.kdf_params\n // const isBrowser = !(typeof module !== 'undefined' && module.exports)\n\n return _sodium.ready.then(async () => {\n // tslint:disable-next-line:typedef\n const sodium = _sodium\n\n const result = sodium.crypto_pwhash(\n 32,\n password,\n salt,\n timeCost,\n memoryCost * 1024,\n sodium.crypto_pwhash_ALG_ARGON2ID13\n )\n return Buffer.from(result)\n })\n}\n\n// CRYPTO PART\nconst CRYPTO_FUNCTIONS = {\n 'xsalsa20-poly1305': { encrypt: encryptXsalsa20Poly1305, decrypt: decryptXsalsa20Poly1305 }\n}\n\nfunction encryptXsalsa20Poly1305 ({ plaintext, key, nonce }) {\n return nacl.secretbox(plaintext, nonce, key)\n}\n\nfunction decryptXsalsa20Poly1305 ({ ciphertext, key, nonce }) {\n const res = nacl.secretbox.open(ciphertext, nonce, key)\n if (!res) throw new Error('Invalid password or nonce')\n return res\n}\n\n/**\n * Symmetric private key encryption using secret (derived) key.\n * @param {buffer|string} plaintext Data to be encrypted.\n * @param {buffer|string} key Secret key.\n * @param {buffer|string} nonce Randomly generated nonce.\n * @param {string=} algo Encryption algorithm (default: DEFAULTS.crypto.symmetric_alg).\n * @return {buffer} Encrypted data.\n */\nfunction encrypt (plaintext, key, nonce, algo = DEFAULTS.crypto.symmetric_alg) {\n if (!CRYPTO_FUNCTIONS[algo]) throw new Error(algo + ' is not available')\n return CRYPTO_FUNCTIONS[algo].encrypt({ plaintext, nonce, key })\n}\n\n/**\n * Symmetric private key decryption using secret (derived) key.\n * @param {buffer|Uint8Array} ciphertext Data to be decrypted.\n * @param {buffer|Uint8Array} key Secret key.\n * @param {buffer|Uint8Array} nonce Nonce from key-object.\n * @param {string=} algo Encryption algorithm.\n * @return {buffer} Decrypted data.\n */\nfunction decrypt (ciphertext, key, nonce, algo) {\n if (!CRYPTO_FUNCTIONS[algo]) throw new Error(algo + ' is not available')\n return CRYPTO_FUNCTIONS[algo].decrypt({ ciphertext, nonce, key })\n}\n\n/**\n * Derive secret key from password with key derivation function.\n * @param {string} password User-supplied password.\n * @param {buffer|Uint8Array} nonce Randomly generated nonce.\n * @param {Object=} options Encryption parameters.\n * @param {string=} options.kdf Key derivation function (default: DEFAULTS.crypto.kdf).\n * @param {Object=} options.kdf_params KDF parameters (default: DEFAULTS.crypto.kdf_params).\n * @return {buffer} Secret key derived from password.\n */\nasync function deriveKey (password, nonce, options = {\n kdf_params: DEFAULTS.crypto.kdf_params,\n kdf: DEFAULTS.crypto.kdf\n}) {\n if (typeof password === 'undefined' || password === null || !nonce) {\n throw new Error('Must provide password and nonce to derive a key')\n }\n\n if (!Object.prototype.hasOwnProperty.call(DERIVED_KEY_FUNCTIONS, options.kdf)) throw new Error('Unsupported kdf type')\n\n return DERIVED_KEY_FUNCTIONS[options.kdf](password, nonce, options)\n}\n\n/**\n * Assemble key data object in secret-storage format.\n * @param {buffer} name Key name.\n * @param {buffer} derivedKey Password-derived secret key.\n * @param {buffer} privateKey Private key.\n * @param {buffer} nonce Randomly generated 24byte nonce.\n * @param {buffer} salt Randomly generated 16byte salt.\n * @param {Object=} options Encryption parameters.\n * @param {string=} options.kdf Key derivation function (default: argon2id).\n * @param {string=} options.cipher Symmetric cipher (default: constants.cipher).\n * @param {Object=} options.kdf_params KDF parameters (default: constants.<kdf>).\n * @return {Object}\n */\nfunction marshal (name, derivedKey, privateKey, nonce, salt, options = {}) {\n const opt = Object.assign({}, DEFAULTS.crypto, options)\n return Object.assign(\n { name, version: 1, public_key: getAddressFromPriv(privateKey), id: uuid() },\n {\n crypto: Object.assign(\n {\n secret_type: opt.secret_type,\n symmetric_alg: opt.symmetric_alg,\n ciphertext: Buffer.from(encrypt(Buffer.from(privateKey), derivedKey, nonce, opt.symmetric_alg)).toString('hex'),\n cipher_params: { nonce: Buffer.from(nonce).toString('hex') }\n },\n { kdf: opt.kdf, kdf_params: { ...opt.kdf_params, salt: Buffer.from(salt).toString('hex') } }\n )\n }\n )\n}\n\nexport function getAddressFromPriv (secret) {\n const keys = nacl.sign.keyPair.fromSecretKey(str2buf(secret))\n const publicBuffer = Buffer.from(keys.publicKey)\n return `ak_${encodeBase58Check(publicBuffer)}`\n}\n\n/**\n * Recover plaintext private key from secret-storage key object.\n * @param {String} password Keystore object password.\n * @param {Object} keyObject Keystore object.\n * @return {Buffer} Plaintext private key.\n */\nexport async function recover (password, keyObject) {\n validateKeyObj(keyObject)\n const nonce = Uint8Array.from(str2buf(keyObject.crypto.cipher_params.nonce))\n const salt = Uint8Array.from(str2buf(keyObject.crypto.kdf_params.salt))\n const kdfParams = keyObject.crypto.kdf_params\n const kdf = keyObject.crypto.kdf\n\n const key = await decrypt(\n Uint8Array.from(str2buf(keyObject.crypto.ciphertext)),\n await deriveKey(password, salt, { kdf, kdf_params: kdfParams }),\n nonce,\n keyObject.crypto.symmetric_alg\n )\n if (!key) throw new Error('Invalid password')\n\n if (Buffer.from(key).length === 64) return Buffer.from(key).toString('hex')\n return Buffer.from(key).toString('utf-8')\n}\n\n/**\n * Export private key to keystore secret-storage format.\n * @param {String} name Key name.\n * @param {String} password User-supplied password.\n * @param {String} privateKey Private key.\n * @param {Buffer} nonce Randomly generated 24byte nonce.\n * @param {Buffer} salt Randomly generated 16byte salt.\n * @param {Object=} options Encryption parameters.\n * @param {String=} options.kdf Key derivation function (default: pbkdf2).\n * @param {String=} options.cipher Symmetric cipher (default: constants.cipher).\n * @param {Object=} options.kdfparams KDF parameters (default: constants.<kdf>).\n * @return {Object}\n */\nexport async function dump (name, password, privateKey, nonce = nacl.randomBytes(24), salt = nacl.randomBytes(16), options = {}) {\n const opt = Object.assign({}, DEFAULTS.crypto, options)\n return marshal(\n name,\n await deriveKey(password, salt, opt),\n privateKey,\n nonce,\n salt,\n opt\n )\n}\n\nexport function validateKeyObj (obj) {\n const root = ['crypto', 'id', 'version', 'public_key']\n const cryptoKeys = ['cipher_params', 'ciphertext', 'symmetric_alg', 'kdf', 'kdf_params']\n\n const missingRootKeys = root.filter(key => !Object.prototype.hasOwnProperty.call(obj, key))\n if (missingRootKeys.length) throw new Error(`Invalid key file format. Require properties: ${missingRootKeys}`)\n\n const missingCryptoKeys = cryptoKeys.filter(key => !Object.prototype.hasOwnProperty.call(obj.crypto, key))\n if (missingCryptoKeys.length) throw new Error(`Invalid key file format. Require properties: ${missingCryptoKeys}`)\n\n return true\n}\n"],"file":"keystore.js"}
1
+ {"version":3,"sources":["../../src/utils/keystore.js"],"names":["nacl","v4","uuid","encodeBase58Check","str2buf","_sodium","require","DEFAULTS","crypto","secret_type","symmetric_alg","kdf","kdf_params","memlimit_kib","opslimit","parallelism","DERIVED_KEY_FUNCTIONS","argon2id","deriveKeyUsingArgon2id","password","salt","options","memoryCost","timeCost","ready","then","sodium","result","crypto_pwhash","crypto_pwhash_ALG_ARGON2ID13","Buffer","from","CRYPTO_FUNCTIONS","encrypt","encryptXsalsa20Poly1305","decrypt","decryptXsalsa20Poly1305","plaintext","key","nonce","secretbox","ciphertext","res","open","Error","algo","deriveKey","Object","prototype","hasOwnProperty","call","marshal","name","derivedKey","privateKey","opt","assign","version","public_key","getAddressFromPriv","id","toString","cipher_params","secret","keys","sign","keyPair","fromSecretKey","publicBuffer","publicKey","recover","keyObject","validateKeyObj","Uint8Array","kdfParams","length","dump","randomBytes","obj","root","cryptoKeys","missingRootKeys","filter","missingCryptoKeys"],"mappings":"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","sourcesContent":["import nacl from 'tweetnacl'\nimport { v4 as uuid } from 'uuid'\n\nimport { encodeBase58Check } from './crypto'\nimport { str2buf } from './bytes'\n\nconst _sodium = require('libsodium-wrappers-sumo')\n\n/**\n * KeyStore module\n * @module @aeternity/aepp-sdk/es/utils/keystore\n * @example import { Keystore } from '@aeternity/aepp-sdk'\n * @example const { Keystore } = require('@aeternity/aepp-sdk')\n */\n\nconst DEFAULTS = {\n crypto: {\n secret_type: 'ed25519',\n symmetric_alg: 'xsalsa20-poly1305',\n kdf: 'argon2id',\n kdf_params: {\n memlimit_kib: 65536,\n opslimit: 3,\n parallelism: 1\n }\n }\n}\n\n// DERIVED KEY PART\nconst DERIVED_KEY_FUNCTIONS = {\n argon2id: deriveKeyUsingArgon2id\n}\n\nexport async function deriveKeyUsingArgon2id (password, salt, options) {\n const { memlimit_kib: memoryCost, opslimit: timeCost } = options.kdf_params\n // const isBrowser = !(typeof module !== 'undefined' && module.exports)\n\n return _sodium.ready.then(async () => {\n // tslint:disable-next-line:typedef\n const sodium = _sodium\n\n const result = sodium.crypto_pwhash(\n 32,\n password,\n salt,\n timeCost,\n memoryCost * 1024,\n sodium.crypto_pwhash_ALG_ARGON2ID13\n )\n return Buffer.from(result)\n })\n}\n\n// CRYPTO PART\nconst CRYPTO_FUNCTIONS = {\n 'xsalsa20-poly1305': { encrypt: encryptXsalsa20Poly1305, decrypt: decryptXsalsa20Poly1305 }\n}\n\nfunction encryptXsalsa20Poly1305 ({ plaintext, key, nonce }) {\n return nacl.secretbox(plaintext, nonce, key)\n}\n\nfunction decryptXsalsa20Poly1305 ({ ciphertext, key, nonce }) {\n const res = nacl.secretbox.open(ciphertext, nonce, key)\n if (!res) throw new Error('Invalid password or nonce')\n return res\n}\n\n/**\n * Symmetric private key encryption using secret (derived) key.\n * @param {buffer|string} plaintext Data to be encrypted.\n * @param {buffer|string} key Secret key.\n * @param {buffer|string} nonce Randomly generated nonce.\n * @param {string=} algo Encryption algorithm (default: DEFAULTS.crypto.symmetric_alg).\n * @return {buffer} Encrypted data.\n */\nfunction encrypt (plaintext, key, nonce, algo = DEFAULTS.crypto.symmetric_alg) {\n if (!CRYPTO_FUNCTIONS[algo]) throw new Error(algo + ' is not available')\n return CRYPTO_FUNCTIONS[algo].encrypt({ plaintext, nonce, key })\n}\n\n/**\n * Symmetric private key decryption using secret (derived) key.\n * @param {buffer|Uint8Array} ciphertext Data to be decrypted.\n * @param {buffer|Uint8Array} key Secret key.\n * @param {buffer|Uint8Array} nonce Nonce from key-object.\n * @param {string=} algo Encryption algorithm.\n * @return {buffer} Decrypted data.\n */\nfunction decrypt (ciphertext, key, nonce, algo) {\n if (!CRYPTO_FUNCTIONS[algo]) throw new Error(algo + ' is not available')\n return CRYPTO_FUNCTIONS[algo].decrypt({ ciphertext, nonce, key })\n}\n\n/**\n * Derive secret key from password with key derivation function.\n * @param {string} password User-supplied password.\n * @param {buffer|Uint8Array} nonce Randomly generated nonce.\n * @param {Object=} options Encryption parameters.\n * @param {string=} options.kdf Key derivation function (default: DEFAULTS.crypto.kdf).\n * @param {Object=} options.kdf_params KDF parameters (default: DEFAULTS.crypto.kdf_params).\n * @return {buffer} Secret key derived from password.\n */\nasync function deriveKey (password, nonce, options = {\n kdf_params: DEFAULTS.crypto.kdf_params,\n kdf: DEFAULTS.crypto.kdf\n}) {\n if (typeof password === 'undefined' || password === null || !nonce) {\n throw new Error('Must provide password and nonce to derive a key')\n }\n\n if (!Object.prototype.hasOwnProperty.call(DERIVED_KEY_FUNCTIONS, options.kdf)) throw new Error('Unsupported kdf type')\n\n return DERIVED_KEY_FUNCTIONS[options.kdf](password, nonce, options)\n}\n\n/**\n * Assemble key data object in secret-storage format.\n * @param {buffer} name Key name.\n * @param {buffer} derivedKey Password-derived secret key.\n * @param {buffer} privateKey Private key.\n * @param {buffer} nonce Randomly generated 24byte nonce.\n * @param {buffer} salt Randomly generated 16byte salt.\n * @param {Object=} options Encryption parameters.\n * @param {string=} options.kdf Key derivation function (default: argon2id).\n * @param {string=} options.cipher Symmetric cipher (default: constants.cipher).\n * @param {Object=} options.kdf_params KDF parameters (default: constants.<kdf>).\n * @return {Object}\n */\nfunction marshal (name, derivedKey, privateKey, nonce, salt, options = {}) {\n const opt = Object.assign({}, DEFAULTS.crypto, options)\n return Object.assign(\n { name, version: 1, public_key: getAddressFromPriv(privateKey), id: uuid() },\n {\n crypto: Object.assign(\n {\n secret_type: opt.secret_type,\n symmetric_alg: opt.symmetric_alg,\n ciphertext: Buffer.from(encrypt(Buffer.from(privateKey), derivedKey, nonce, opt.symmetric_alg)).toString('hex'),\n cipher_params: { nonce: Buffer.from(nonce).toString('hex') }\n },\n { kdf: opt.kdf, kdf_params: { ...opt.kdf_params, salt: Buffer.from(salt).toString('hex') } }\n )\n }\n )\n}\n\nexport function getAddressFromPriv (secret) {\n const keys = nacl.sign.keyPair.fromSecretKey(str2buf(secret))\n const publicBuffer = Buffer.from(keys.publicKey)\n return `ak_${encodeBase58Check(publicBuffer)}`\n}\n\n/**\n * Recover plaintext private key from secret-storage key object.\n * @param {String} password Keystore object password.\n * @param {Object} keyObject Keystore object.\n * @return {Buffer} Plaintext private key.\n */\nexport async function recover (password, keyObject) {\n validateKeyObj(keyObject)\n const nonce = Uint8Array.from(str2buf(keyObject.crypto.cipher_params.nonce))\n const salt = Uint8Array.from(str2buf(keyObject.crypto.kdf_params.salt))\n const kdfParams = keyObject.crypto.kdf_params\n const kdf = keyObject.crypto.kdf\n\n const key = await decrypt(\n Uint8Array.from(str2buf(keyObject.crypto.ciphertext)),\n await deriveKey(password, salt, { kdf, kdf_params: kdfParams }),\n nonce,\n keyObject.crypto.symmetric_alg\n )\n if (!key) throw new Error('Invalid password')\n\n if (Buffer.from(key).length === 64) return Buffer.from(key).toString('hex')\n return Buffer.from(key).toString('utf-8')\n}\n\n/**\n * Export private key to keystore secret-storage format.\n * @param {String} name Key name.\n * @param {String} password User-supplied password.\n * @param {String} privateKey Private key.\n * @param {Buffer} nonce Randomly generated 24byte nonce.\n * @param {Buffer} salt Randomly generated 16byte salt.\n * @param {Object=} options Encryption parameters.\n * @param {String=} options.kdf Key derivation function (default: pbkdf2).\n * @param {String=} options.cipher Symmetric cipher (default: constants.cipher).\n * @param {Object=} options.kdfparams KDF parameters (default: constants.<kdf>).\n * @return {Object}\n */\nexport async function dump (name, password, privateKey, nonce = nacl.randomBytes(24), salt = nacl.randomBytes(16), options = {}) {\n const opt = Object.assign({}, DEFAULTS.crypto, options)\n return marshal(\n name,\n await deriveKey(password, salt, opt),\n privateKey,\n nonce,\n salt,\n opt\n )\n}\n\nexport function validateKeyObj (obj) {\n const root = ['crypto', 'id', 'version', 'public_key']\n const cryptoKeys = ['cipher_params', 'ciphertext', 'symmetric_alg', 'kdf', 'kdf_params']\n\n const missingRootKeys = root.filter(key => !Object.prototype.hasOwnProperty.call(obj, key))\n if (missingRootKeys.length) throw new Error(`Invalid key file format. Require properties: ${missingRootKeys}`)\n\n const missingCryptoKeys = cryptoKeys.filter(key => !Object.prototype.hasOwnProperty.call(obj.crypto, key))\n if (missingCryptoKeys.length) throw new Error(`Invalid key file format. Require properties: ${missingCryptoKeys}`)\n\n return true\n}\n"],"file":"keystore.js"}