@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,8 +1,3 @@
1
- import _Number$MAX_SAFE_INTEGER from "@babel/runtime-corejs3/core-js-stable/number/max-safe-integer";
2
- import _concatInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/concat";
3
- import _sliceInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/slice";
4
- import _findIndexInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/find-index";
5
-
6
1
  /*
7
2
  * ISC License (ISC)
8
3
  * Copyright 2018 aeternity developers
@@ -31,9 +26,10 @@ import nacl from 'tweetnacl';
31
26
  import aesjs from 'aes-js';
32
27
  import shajs from 'sha.js';
33
28
  import { str2buf, toBytes } from './bytes';
29
+ import { decode } from '../tx/builder/helpers';
34
30
  import { hash } from './crypto-ts';
35
31
  export * from './crypto-ts';
36
- var Ecb = aesjs.ModeOfOperation.ecb;
32
+ const Ecb = aesjs.ModeOfOperation.ecb;
37
33
  /**
38
34
  * Generate address from secret key
39
35
  * @rtype (secret: String) => tx: Promise[String]
@@ -42,9 +38,9 @@ var Ecb = aesjs.ModeOfOperation.ecb;
42
38
  */
43
39
 
44
40
  export function getAddressFromPriv(secret) {
45
- var keys = nacl.sign.keyPair.fromSecretKey(str2buf(secret));
46
- var publicBuffer = Buffer.from(keys.publicKey);
47
- return "ak_".concat(encodeBase58Check(publicBuffer));
41
+ const keys = nacl.sign.keyPair.fromSecretKey(str2buf(secret));
42
+ const publicBuffer = Buffer.from(keys.publicKey);
43
+ return `ak_${encodeBase58Check(publicBuffer)}`;
48
44
  }
49
45
  /**
50
46
  * Check if address is valid
@@ -55,11 +51,11 @@ export function getAddressFromPriv(secret) {
55
51
  */
56
52
 
57
53
  export function isAddressValid(address) {
58
- var prefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'ak';
54
+ let prefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'ak';
59
55
  if (typeof address !== 'string') return false;
60
56
 
61
57
  try {
62
- return decodeBase58Check(assertedType(address, prefix)).length === 32;
58
+ return decode(address, prefix).length === 32;
63
59
  } catch (e) {
64
60
  return false;
65
61
  }
@@ -91,7 +87,7 @@ export function sha256hash(input) {
91
87
  */
92
88
 
93
89
  export function salt() {
94
- return Math.floor(Math.random() * Math.floor(_Number$MAX_SAFE_INTEGER));
90
+ return Math.floor(Math.random() * Math.floor(Number.MAX_SAFE_INTEGER));
95
91
  }
96
92
  /**
97
93
  * Base64check encode given `input`
@@ -101,25 +97,19 @@ export function salt() {
101
97
  */
102
98
 
103
99
  export function encodeBase64Check(input) {
104
- var buffer = Buffer.from(input);
105
- var checksum = checkSumFn(input);
106
-
107
- var payloadWithChecksum = _concatInstanceProperty(Buffer).call(Buffer, [buffer, checksum], buffer.length + 4);
108
-
100
+ const buffer = Buffer.from(input);
101
+ const checksum = checkSumFn(input);
102
+ const payloadWithChecksum = Buffer.concat([buffer, checksum], buffer.length + 4);
109
103
  return payloadWithChecksum.toString('base64');
110
104
  }
111
105
  export function checkSumFn(payload) {
112
- var _context;
113
-
114
- return _sliceInstanceProperty(_context = sha256hash(sha256hash(payload))).call(_context, 0, 4);
106
+ return sha256hash(sha256hash(payload)).slice(0, 4);
115
107
  }
116
108
 
117
109
  function decodeRaw(buffer) {
118
- var payload = _sliceInstanceProperty(buffer).call(buffer, 0, -4);
119
-
120
- var checksum = _sliceInstanceProperty(buffer).call(buffer, -4);
121
-
122
- var newChecksum = checkSumFn(payload);
110
+ const payload = buffer.slice(0, -4);
111
+ const checksum = buffer.slice(-4);
112
+ const newChecksum = checkSumFn(payload);
123
113
  if (!checksum.equals(newChecksum)) return;
124
114
  return payload;
125
115
  }
@@ -132,8 +122,8 @@ function decodeRaw(buffer) {
132
122
 
133
123
 
134
124
  export function decodeBase64Check(str) {
135
- var buffer = Buffer.from(str, 'base64');
136
- var payload = decodeRaw(buffer);
125
+ const buffer = Buffer.from(str, 'base64');
126
+ const payload = decodeRaw(buffer);
137
127
  if (!payload) throw new Error('Invalid checksum');
138
128
  return Buffer.from(payload);
139
129
  }
@@ -166,11 +156,9 @@ export function decodeBase58Check(str) {
166
156
  */
167
157
 
168
158
  export function encodeUnsigned(value) {
169
- var binary = Buffer.allocUnsafe(4);
159
+ const binary = Buffer.allocUnsafe(4);
170
160
  binary.writeUInt32BE(value);
171
- return _sliceInstanceProperty(binary).call(binary, _findIndexInstanceProperty(binary).call(binary, function (i) {
172
- return i !== 0;
173
- }));
161
+ return binary.slice(binary.findIndex(i => i !== 0));
174
162
  } // Todo Duplicated in tx builder. remove
175
163
 
176
164
  /**
@@ -182,11 +170,9 @@ export function encodeUnsigned(value) {
182
170
  */
183
171
 
184
172
  export function encodeContractAddress(owner, nonce) {
185
- var publicKey = decodeBase58Check(assertedType(owner, 'ak'));
186
-
187
- var binary = _concatInstanceProperty(Buffer).call(Buffer, [publicKey, encodeUnsigned(nonce)]);
188
-
189
- return "ct_".concat(encodeBase58Check(hash(binary)));
173
+ const publicKey = decode(owner, 'ak');
174
+ const binary = Buffer.concat([publicKey, encodeUnsigned(nonce)]);
175
+ return `ct_${encodeBase58Check(hash(binary))}`;
190
176
  } // KEY-PAIR HELPERS
191
177
 
192
178
  /**
@@ -207,11 +193,11 @@ export function generateKeyPairFromSecret(secret) {
207
193
  */
208
194
 
209
195
  export function generateKeyPair() {
210
- var raw = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
196
+ let raw = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
211
197
  // <node>/apps/aens/test/aens_test_utils.erl
212
- var keyPair = nacl.sign.keyPair();
213
- var publicBuffer = Buffer.from(keyPair.publicKey);
214
- var secretBuffer = Buffer.from(keyPair.secretKey);
198
+ const keyPair = nacl.sign.keyPair();
199
+ const publicBuffer = Buffer.from(keyPair.publicKey);
200
+ const secretBuffer = Buffer.from(keyPair.secretKey);
215
201
 
216
202
  if (raw) {
217
203
  return {
@@ -220,7 +206,7 @@ export function generateKeyPair() {
220
206
  };
221
207
  } else {
222
208
  return {
223
- publicKey: "ak_".concat(encodeBase58Check(publicBuffer)),
209
+ publicKey: `ak_${encodeBase58Check(publicBuffer)}`,
224
210
  secretKey: secretBuffer.toString('hex')
225
211
  };
226
212
  }
@@ -234,8 +220,8 @@ export function generateKeyPair() {
234
220
  */
235
221
 
236
222
  export function encryptKey(password, binaryData) {
237
- var hashedPasswordBytes = sha256hash(password);
238
- var aesEcb = new Ecb(hashedPasswordBytes);
223
+ const hashedPasswordBytes = sha256hash(password);
224
+ const aesEcb = new Ecb(hashedPasswordBytes);
239
225
  return aesEcb.encrypt(binaryData);
240
226
  }
241
227
  /**
@@ -247,9 +233,9 @@ export function encryptKey(password, binaryData) {
247
233
  */
248
234
 
249
235
  export function decryptKey(password, encrypted) {
250
- var encryptedBytes = Buffer.from(encrypted);
251
- var hashedPasswordBytes = sha256hash(password);
252
- var aesEcb = new Ecb(hashedPasswordBytes);
236
+ const encryptedBytes = Buffer.from(encrypted);
237
+ const hashedPasswordBytes = sha256hash(password);
238
+ const aesEcb = new Ecb(hashedPasswordBytes);
253
239
  return Buffer.from(aesEcb.decrypt(encryptedBytes));
254
240
  } // SIGNATURES
255
241
 
@@ -277,10 +263,10 @@ export function verify(str, signature, publicKey) {
277
263
  return nacl.sign.detached.verify(new Uint8Array(str), signature, publicKey);
278
264
  }
279
265
  export function messageToHash(message) {
280
- var p = Buffer.from('aeternity Signed Message:\n', 'utf8');
281
- var msg = Buffer.from(message, 'utf8');
266
+ const p = Buffer.from('aeternity Signed Message:\n', 'utf8');
267
+ const msg = Buffer.from(message, 'utf8');
282
268
  if (msg.length >= 0xFD) throw new Error('message too long');
283
- return hash(_concatInstanceProperty(Buffer).call(Buffer, [Buffer.from([p.length]), p, Buffer.from([msg.length]), msg]));
269
+ return hash(Buffer.concat([Buffer.from([p.length]), p, Buffer.from([msg.length]), msg]));
284
270
  }
285
271
  export function signMessage(message, privateKey) {
286
272
  return sign(messageToHash(message), privateKey);
@@ -297,21 +283,9 @@ export function verifyMessage(str, signature, publicKey) {
297
283
  */
298
284
 
299
285
  export function aeEncodeKey(binaryKey) {
300
- var publicKeyBuffer = Buffer.from(binaryKey, 'hex');
301
- var pubKeyAddress = encodeBase58Check(publicKeyBuffer);
302
- return "ak_".concat(pubKeyAddress);
303
- }
304
- /**
305
- * Assert encoded type and return its payload
306
- * @rtype (data: String, type: String) => String, throws: Error
307
- * @param {String} data - ae data
308
- * @param {String} type - Prefix
309
- * @param {Boolean} omitError - Return false instead of throwing the error if data doesn't match expected type
310
- * @return {String|Boolean} Payload
311
- */
312
-
313
- export function assertedType(data, type, omitError) {
314
- if (RegExp("^".concat(type, "_.+$")).test(data)) return data.split('_')[1];else if (omitError) return false;else throw new Error("Data doesn't match expected type ".concat(type));
286
+ const publicKeyBuffer = Buffer.from(binaryKey, 'hex');
287
+ const pubKeyAddress = encodeBase58Check(publicKeyBuffer);
288
+ return `ak_${pubKeyAddress}`;
315
289
  }
316
290
  /**
317
291
  * Check key pair for validity
@@ -324,8 +298,8 @@ export function assertedType(data, type, omitError) {
324
298
  */
325
299
 
326
300
  export function isValidKeypair(privateKey, publicKey) {
327
- var message = Buffer.from('TheMessage');
328
- var signature = sign(message, privateKey);
301
+ const message = Buffer.from('TheMessage');
302
+ const signature = sign(message, privateKey);
329
303
  return verify(message, signature, publicKey);
330
304
  }
331
305
  /**
@@ -339,10 +313,10 @@ export function isValidKeypair(privateKey, publicKey) {
339
313
  */
340
314
 
341
315
  export function encryptData(msg, publicKey) {
342
- var ephemeralKeyPair = nacl.box.keyPair();
343
- var pubKeyUInt8Array = decodeBase58Check(assertedType(publicKey, 'ak'));
344
- var nonce = nacl.randomBytes(nacl.box.nonceLength);
345
- var encryptedMessage = nacl.box(Buffer.from(msg), nonce, ed2curve.convertPublicKey(pubKeyUInt8Array), ephemeralKeyPair.secretKey);
316
+ const ephemeralKeyPair = nacl.box.keyPair();
317
+ const pubKeyUInt8Array = decode(publicKey, 'ak');
318
+ const nonce = nacl.randomBytes(nacl.box.nonceLength);
319
+ const encryptedMessage = nacl.box(Buffer.from(msg), nonce, ed2curve.convertPublicKey(pubKeyUInt8Array), ephemeralKeyPair.secretKey);
346
320
  return {
347
321
  ciphertext: Buffer.from(encryptedMessage).toString('hex'),
348
322
  ephemPubKey: Buffer.from(ephemeralKeyPair.publicKey).toString('hex'),
@@ -359,11 +333,11 @@ export function encryptData(msg, publicKey) {
359
333
  */
360
334
 
361
335
  export function decryptData(secretKey, encryptedData) {
362
- var receiverSecretKeyUint8Array = ed2curve.convertSecretKey(Buffer.from(secretKey, 'hex'));
363
- var nonce = Buffer.from(encryptedData.nonce, 'hex');
364
- var ciphertext = Buffer.from(encryptedData.ciphertext, 'hex');
365
- var ephemPubKey = Buffer.from(encryptedData.ephemPubKey, 'hex');
366
- var decrypted = nacl.box.open(ciphertext, nonce, ephemPubKey, receiverSecretKeyUint8Array);
336
+ const receiverSecretKeyUint8Array = ed2curve.convertSecretKey(Buffer.from(secretKey, 'hex'));
337
+ const nonce = Buffer.from(encryptedData.nonce, 'hex');
338
+ const ciphertext = Buffer.from(encryptedData.ciphertext, 'hex');
339
+ const ephemPubKey = Buffer.from(encryptedData.ephemPubKey, 'hex');
340
+ const decrypted = nacl.box.open(ciphertext, nonce, ephemPubKey, receiverSecretKeyUint8Array);
367
341
  return decrypted ? Buffer.from(decrypted) : decrypted;
368
342
  }
369
343
  //# sourceMappingURL=crypto.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/crypto.js"],"names":["bs58check","ed2curve","nacl","aesjs","shajs","str2buf","toBytes","hash","Ecb","ModeOfOperation","ecb","getAddressFromPriv","secret","keys","sign","keyPair","fromSecretKey","publicBuffer","Buffer","from","publicKey","encodeBase58Check","isAddressValid","address","prefix","decodeBase58Check","assertedType","length","e","addressFromDecimal","decimalAddress","aeEncodeKey","sha256hash","input","update","digest","salt","Math","floor","random","encodeBase64Check","buffer","checksum","checkSumFn","payloadWithChecksum","toString","payload","decodeRaw","newChecksum","equals","decodeBase64Check","str","Error","encode","decode","encodeUnsigned","value","binary","allocUnsafe","writeUInt32BE","i","encodeContractAddress","owner","nonce","generateKeyPairFromSecret","generateKeyPair","raw","secretBuffer","secretKey","encryptKey","password","binaryData","hashedPasswordBytes","aesEcb","encrypt","decryptKey","encrypted","encryptedBytes","decrypt","data","privateKey","detached","verify","signature","Uint8Array","messageToHash","message","p","msg","signMessage","verifyMessage","binaryKey","publicKeyBuffer","pubKeyAddress","type","omitError","RegExp","test","split","isValidKeypair","encryptData","ephemeralKeyPair","box","pubKeyUInt8Array","randomBytes","nonceLength","encryptedMessage","convertPublicKey","ciphertext","ephemPubKey","version","decryptData","encryptedData","receiverSecretKeyUint8Array","convertSecretKey","decrypted","open"],"mappings":"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","sourcesContent":["/*\n * ISC License (ISC)\n * Copyright 2018 aeternity developers\n *\n * Permission to use, copy, modify, and/or distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\n * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n * PERFORMANCE OF THIS SOFTWARE.\n */\n\n/**\n * Crypto module\n * @module @aeternity/aepp-sdk/es/utils/crypto\n * @example import { Crypto } from '@aeternity/aepp-sdk'\n */\n\nimport bs58check from 'bs58check'\nimport ed2curve from 'ed2curve'\nimport nacl from 'tweetnacl'\nimport aesjs from 'aes-js'\nimport shajs from 'sha.js'\n\nimport { str2buf, toBytes } from './bytes'\nimport { hash } from './crypto-ts'\n\nexport * from './crypto-ts'\n\nconst Ecb = aesjs.ModeOfOperation.ecb\n\n/**\n * Generate address from secret key\n * @rtype (secret: String) => tx: Promise[String]\n * @param {String} secret - Private key\n * @return {String} Public key\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 * Check if address is valid\n * @rtype (input: String) => valid: Boolean\n * @param {String} address - Address\n * @param {String} prefix Transaction prefix. Default: 'ak'\n * @return {Boolean} valid\n */\nexport function isAddressValid (address, prefix = 'ak') {\n if (typeof address !== 'string') return false\n try {\n return decodeBase58Check(assertedType(address, prefix)).length === 32\n } catch (e) {\n return false\n }\n}\n\n/**\n * Parse decimal address and return base58Check encoded address with prefix 'ak'\n * @rtype (input: String) => address: String\n * @param {String} decimalAddress - Address\n * @return {String} address\n */\nexport function addressFromDecimal (decimalAddress) {\n return aeEncodeKey(toBytes(decimalAddress, true))\n}\n\n/**\n * Calculate SHA256 hash of `input`\n * @rtype (input: String) => hash: String\n * @param {String} input - Data to hash\n * @return {String} Hash\n */\nexport function sha256hash (input) {\n return shajs('sha256').update(input).digest()\n}\n\n/**\n * Generate a random salt (positive integer)\n * @rtype () => salt: Number\n * @return {Number} random salt\n */\nexport function salt () {\n return Math.floor(Math.random() * Math.floor(Number.MAX_SAFE_INTEGER))\n}\n\n/**\n * Base64check encode given `input`\n * @rtype (input: String|buffer) => Buffer\n * @param {String} input - Data to encode\n * @return {Buffer} Base64check encoded data\n */\nexport function encodeBase64Check (input) {\n const buffer = Buffer.from(input)\n const checksum = checkSumFn(input)\n const payloadWithChecksum = Buffer.concat([buffer, checksum], buffer.length + 4)\n return payloadWithChecksum.toString('base64')\n}\n\nexport function checkSumFn (payload) {\n return sha256hash(sha256hash(payload)).slice(0, 4)\n}\n\nfunction decodeRaw (buffer) {\n const payload = buffer.slice(0, -4)\n const checksum = buffer.slice(-4)\n const newChecksum = checkSumFn(payload)\n\n if (!checksum.equals(newChecksum)) return\n\n return payload\n}\n\n/**\n * Base64check decode given `str`\n * @rtype (str: String) => Buffer\n * @param {String} str - Data to decode\n * @return {Buffer} Base64check decoded data\n */\nexport function decodeBase64Check (str) {\n const buffer = Buffer.from(str, 'base64')\n const payload = decodeRaw(buffer)\n if (!payload) throw new Error('Invalid checksum')\n return Buffer.from(payload)\n}\n\n/**\n * Base58 encode given `input`\n * @rtype (input: String) => String\n * @param {String|Buffer} input - Data to encode\n * @return {String} Base58 encoded data\n */\nexport function encodeBase58Check (input) {\n return bs58check.encode(Buffer.from(input))\n}\n\n/**\n * Base58 decode given `str`\n * @rtype (str: String) => Buffer\n * @param {String} str - Data to decode\n * @return {Buffer} Base58 decoded data\n */\nexport function decodeBase58Check (str) {\n return bs58check.decode(str)\n}\n\n/**\n * Converts a positive integer to the smallest possible\n * representation in a binary digit representation\n * @rtype (value: Number) => Buffer\n * @param {Number} value - Value to encode\n * @return {Buffer} - Encoded data\n */\nexport function encodeUnsigned (value) {\n const binary = Buffer.allocUnsafe(4)\n binary.writeUInt32BE(value)\n return binary.slice(binary.findIndex(i => i !== 0))\n}\n\n// Todo Duplicated in tx builder. remove\n/**\n * Compute contract address\n * @rtype (owner: String, nonce: Number) => String\n * @param {String} owner - Address of contract owner\n * @param {Number} nonce - Round when contract was created\n * @return {String} - Contract address\n */\nexport function encodeContractAddress (owner, nonce) {\n const publicKey = decodeBase58Check(assertedType(owner, 'ak'))\n const binary = Buffer.concat([publicKey, encodeUnsigned(nonce)])\n return `ct_${encodeBase58Check(hash(binary))}`\n}\n\n// KEY-PAIR HELPERS\n\n/**\n * Generate keyPair from secret key\n * @rtype (secret: Uint8Array) => KeyPair\n * @param {Uint8Array} secret - secret key\n * @return {Object} - Object with Private(privateKey) and Public(publicKey) keys\n */\nexport function generateKeyPairFromSecret (secret) {\n return nacl.sign.keyPair.fromSecretKey(secret)\n}\n\n/**\n * Generate a random ED25519 keypair\n * @rtype (raw: Boolean) => {publicKey: String, secretKey: String} | {publicKey: Buffer, secretKey: Buffer}\n * @param {Boolean} raw - Whether to return raw (binary) keys\n * @return {Object} Key pair\n */\nexport function generateKeyPair (raw = false) {\n // <node>/apps/aens/test/aens_test_utils.erl\n const keyPair = nacl.sign.keyPair()\n\n const publicBuffer = Buffer.from(keyPair.publicKey)\n const secretBuffer = Buffer.from(keyPair.secretKey)\n\n if (raw) {\n return {\n publicKey: publicBuffer,\n secretKey: secretBuffer\n }\n } else {\n return {\n publicKey: `ak_${encodeBase58Check(publicBuffer)}`,\n secretKey: secretBuffer.toString('hex')\n }\n }\n}\n\n/**\n * Encrypt given data using `password`\n * @rtype (password: String, binaryData: Buffer) => Uint8Array\n * @param {String} password - Password to encrypt with\n * @param {Buffer} binaryData - Data to encrypt\n * @return {Uint8Array} Encrypted data\n */\nexport function encryptKey (password, binaryData) {\n const hashedPasswordBytes = sha256hash(password)\n const aesEcb = new Ecb(hashedPasswordBytes)\n return aesEcb.encrypt(binaryData)\n}\n\n/**\n * Decrypt given data using `password`\n * @rtype (password: String, encrypted: String) => Uint8Array\n * @param {String} password - Password to decrypt with\n * @param {String} encrypted - Data to decrypt\n * @return {Buffer} Decrypted data\n */\nexport function decryptKey (password, encrypted) {\n const encryptedBytes = Buffer.from(encrypted)\n const hashedPasswordBytes = sha256hash(password)\n const aesEcb = new Ecb(hashedPasswordBytes)\n return Buffer.from(aesEcb.decrypt(encryptedBytes))\n}\n\n// SIGNATURES\n\n/**\n * Generate signature\n * @rtype (data: String|Buffer, privateKey: Buffer) => Buffer\n * @param {String|Buffer} data - Data to sign\n * @param {String|Buffer} privateKey - Key to sign with\n * @return {Buffer|Uint8Array} Signature\n */\nexport function sign (data, privateKey) {\n return nacl.sign.detached(Buffer.from(data), Buffer.from(privateKey))\n}\n\n/**\n * Verify that signature was signed by public key\n * @rtype (str: String, signature: Buffer, publicKey: Buffer) => Boolean\n * @param {String|Buffer} str - Data to verify\n * @param {Buffer} signature - Signature to verify\n * @param {Buffer} publicKey - Key to verify against\n * @return {Boolean} Valid?\n */\nexport function verify (str, signature, publicKey) {\n return nacl.sign.detached.verify(new Uint8Array(str), signature, publicKey)\n}\n\nexport function messageToHash (message) {\n const p = Buffer.from('aeternity Signed Message:\\n', 'utf8')\n const msg = Buffer.from(message, 'utf8')\n if (msg.length >= 0xFD) throw new Error('message too long')\n return hash(Buffer.concat([Buffer.from([p.length]), p, Buffer.from([msg.length]), msg]))\n}\n\nexport function signMessage (message, privateKey) {\n return sign(messageToHash(message), privateKey)\n}\n\nexport function verifyMessage (str, signature, publicKey) {\n return verify(messageToHash(str), signature, publicKey)\n}\n\n/**\n * æternity readable public keys are the base58-encoded public key, prepended\n * with 'ak_'\n * @rtype (binaryKey: Buffer) => String\n * @param {Buffer} binaryKey - Key to encode\n * @return {String} Encoded key\n */\nexport function aeEncodeKey (binaryKey) {\n const publicKeyBuffer = Buffer.from(binaryKey, 'hex')\n const pubKeyAddress = encodeBase58Check(publicKeyBuffer)\n return `ak_${pubKeyAddress}`\n}\n\n/**\n * Assert encoded type and return its payload\n * @rtype (data: String, type: String) => String, throws: Error\n * @param {String} data - ae data\n * @param {String} type - Prefix\n * @param {Boolean} omitError - Return false instead of throwing the error if data doesn't match expected type\n * @return {String|Boolean} Payload\n */\nexport function assertedType (data, type, omitError) {\n if (RegExp(`^${type}_.+$`).test(data)) return data.split('_')[1]\n else if (omitError) return false\n else throw new Error(`Data doesn't match expected type ${type}`)\n}\n\n/**\n * Check key pair for validity\n *\n * Sign a message, and then verifying that signature\n * @rtype (privateKey: Buffer, publicKey: Buffer) => Boolean\n * @param {Buffer} privateKey - Private key to verify\n * @param {Buffer} publicKey - Public key to verify\n * @return {Boolean} Valid?\n */\nexport function isValidKeypair (privateKey, publicKey) {\n const message = Buffer.from('TheMessage')\n const signature = sign(message, privateKey)\n return verify(message, signature, publicKey)\n}\n\n/**\n * This function encrypts a message using base58check encoded and 'ak' prefixed\n * publicKey such that only the corresponding secretKey will\n * be able to decrypt\n * @rtype (msg: String, publicKey: String) => Object\n * @param {Buffer} msg - Data to encode\n * @param {String} publicKey - Public key\n * @return {Object}\n */\nexport function encryptData (msg, publicKey) {\n const ephemeralKeyPair = nacl.box.keyPair()\n const pubKeyUInt8Array = decodeBase58Check(assertedType(publicKey, 'ak'))\n const nonce = nacl.randomBytes(nacl.box.nonceLength)\n\n const encryptedMessage = nacl.box(\n Buffer.from(msg),\n nonce,\n ed2curve.convertPublicKey(pubKeyUInt8Array),\n ephemeralKeyPair.secretKey\n )\n\n return {\n ciphertext: Buffer.from(encryptedMessage).toString('hex'),\n ephemPubKey: Buffer.from(ephemeralKeyPair.publicKey).toString('hex'),\n nonce: Buffer.from(nonce).toString('hex'),\n version: 'x25519-xsalsa20-poly1305'\n }\n}\n\n/**\n * This function decrypt a message using secret key\n * @rtype (secretKey: String, encryptedData: Object) => Buffer|null\n * @param {String} secretKey - Secret key\n * @param {Object} encryptedData - Encrypted data\n * @return {Buffer|null}\n */\nexport function decryptData (secretKey, encryptedData) {\n const receiverSecretKeyUint8Array = ed2curve.convertSecretKey(Buffer.from(secretKey, 'hex'))\n const nonce = Buffer.from(encryptedData.nonce, 'hex')\n const ciphertext = Buffer.from(encryptedData.ciphertext, 'hex')\n const ephemPubKey = Buffer.from(encryptedData.ephemPubKey, 'hex')\n const decrypted = nacl.box.open(\n ciphertext,\n nonce,\n ephemPubKey,\n receiverSecretKeyUint8Array\n )\n return decrypted ? Buffer.from(decrypted) : decrypted\n}\n"],"file":"crypto.js"}
1
+ {"version":3,"sources":["../../src/utils/crypto.js"],"names":["bs58check","ed2curve","nacl","aesjs","shajs","str2buf","toBytes","decode","hash","Ecb","ModeOfOperation","ecb","getAddressFromPriv","secret","keys","sign","keyPair","fromSecretKey","publicBuffer","Buffer","from","publicKey","encodeBase58Check","isAddressValid","address","prefix","length","e","addressFromDecimal","decimalAddress","aeEncodeKey","sha256hash","input","update","digest","salt","Math","floor","random","Number","MAX_SAFE_INTEGER","encodeBase64Check","buffer","checksum","checkSumFn","payloadWithChecksum","concat","toString","payload","slice","decodeRaw","newChecksum","equals","decodeBase64Check","str","Error","encode","decodeBase58Check","encodeUnsigned","value","binary","allocUnsafe","writeUInt32BE","findIndex","i","encodeContractAddress","owner","nonce","generateKeyPairFromSecret","generateKeyPair","raw","secretBuffer","secretKey","encryptKey","password","binaryData","hashedPasswordBytes","aesEcb","encrypt","decryptKey","encrypted","encryptedBytes","decrypt","data","privateKey","detached","verify","signature","Uint8Array","messageToHash","message","p","msg","signMessage","verifyMessage","binaryKey","publicKeyBuffer","pubKeyAddress","isValidKeypair","encryptData","ephemeralKeyPair","box","pubKeyUInt8Array","randomBytes","nonceLength","encryptedMessage","convertPublicKey","ciphertext","ephemPubKey","version","decryptData","encryptedData","receiverSecretKeyUint8Array","convertSecretKey","decrypted","open"],"mappings":"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","sourcesContent":["/*\n * ISC License (ISC)\n * Copyright 2018 aeternity developers\n *\n * Permission to use, copy, modify, and/or distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\n * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n * PERFORMANCE OF THIS SOFTWARE.\n */\n\n/**\n * Crypto module\n * @module @aeternity/aepp-sdk/es/utils/crypto\n * @example import { Crypto } from '@aeternity/aepp-sdk'\n */\n\nimport bs58check from 'bs58check'\nimport ed2curve from 'ed2curve'\nimport nacl from 'tweetnacl'\nimport aesjs from 'aes-js'\nimport shajs from 'sha.js'\n\nimport { str2buf, toBytes } from './bytes'\nimport { decode } from '../tx/builder/helpers'\nimport { hash } from './crypto-ts'\n\nexport * from './crypto-ts'\n\nconst Ecb = aesjs.ModeOfOperation.ecb\n\n/**\n * Generate address from secret key\n * @rtype (secret: String) => tx: Promise[String]\n * @param {String} secret - Private key\n * @return {String} Public key\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 * Check if address is valid\n * @rtype (input: String) => valid: Boolean\n * @param {String} address - Address\n * @param {String} prefix Transaction prefix. Default: 'ak'\n * @return {Boolean} valid\n */\nexport function isAddressValid (address, prefix = 'ak') {\n if (typeof address !== 'string') return false\n try {\n return decode(address, prefix).length === 32\n } catch (e) {\n return false\n }\n}\n\n/**\n * Parse decimal address and return base58Check encoded address with prefix 'ak'\n * @rtype (input: String) => address: String\n * @param {String} decimalAddress - Address\n * @return {String} address\n */\nexport function addressFromDecimal (decimalAddress) {\n return aeEncodeKey(toBytes(decimalAddress, true))\n}\n\n/**\n * Calculate SHA256 hash of `input`\n * @rtype (input: String) => hash: String\n * @param {String} input - Data to hash\n * @return {String} Hash\n */\nexport function sha256hash (input) {\n return shajs('sha256').update(input).digest()\n}\n\n/**\n * Generate a random salt (positive integer)\n * @rtype () => salt: Number\n * @return {Number} random salt\n */\nexport function salt () {\n return Math.floor(Math.random() * Math.floor(Number.MAX_SAFE_INTEGER))\n}\n\n/**\n * Base64check encode given `input`\n * @rtype (input: String|buffer) => Buffer\n * @param {String} input - Data to encode\n * @return {Buffer} Base64check encoded data\n */\nexport function encodeBase64Check (input) {\n const buffer = Buffer.from(input)\n const checksum = checkSumFn(input)\n const payloadWithChecksum = Buffer.concat([buffer, checksum], buffer.length + 4)\n return payloadWithChecksum.toString('base64')\n}\n\nexport function checkSumFn (payload) {\n return sha256hash(sha256hash(payload)).slice(0, 4)\n}\n\nfunction decodeRaw (buffer) {\n const payload = buffer.slice(0, -4)\n const checksum = buffer.slice(-4)\n const newChecksum = checkSumFn(payload)\n\n if (!checksum.equals(newChecksum)) return\n\n return payload\n}\n\n/**\n * Base64check decode given `str`\n * @rtype (str: String) => Buffer\n * @param {String} str - Data to decode\n * @return {Buffer} Base64check decoded data\n */\nexport function decodeBase64Check (str) {\n const buffer = Buffer.from(str, 'base64')\n const payload = decodeRaw(buffer)\n if (!payload) throw new Error('Invalid checksum')\n return Buffer.from(payload)\n}\n\n/**\n * Base58 encode given `input`\n * @rtype (input: String) => String\n * @param {String|Buffer} input - Data to encode\n * @return {String} Base58 encoded data\n */\nexport function encodeBase58Check (input) {\n return bs58check.encode(Buffer.from(input))\n}\n\n/**\n * Base58 decode given `str`\n * @rtype (str: String) => Buffer\n * @param {String} str - Data to decode\n * @return {Buffer} Base58 decoded data\n */\nexport function decodeBase58Check (str) {\n return bs58check.decode(str)\n}\n\n/**\n * Converts a positive integer to the smallest possible\n * representation in a binary digit representation\n * @rtype (value: Number) => Buffer\n * @param {Number} value - Value to encode\n * @return {Buffer} - Encoded data\n */\nexport function encodeUnsigned (value) {\n const binary = Buffer.allocUnsafe(4)\n binary.writeUInt32BE(value)\n return binary.slice(binary.findIndex(i => i !== 0))\n}\n\n// Todo Duplicated in tx builder. remove\n/**\n * Compute contract address\n * @rtype (owner: String, nonce: Number) => String\n * @param {String} owner - Address of contract owner\n * @param {Number} nonce - Round when contract was created\n * @return {String} - Contract address\n */\nexport function encodeContractAddress (owner, nonce) {\n const publicKey = decode(owner, 'ak')\n const binary = Buffer.concat([publicKey, encodeUnsigned(nonce)])\n return `ct_${encodeBase58Check(hash(binary))}`\n}\n\n// KEY-PAIR HELPERS\n\n/**\n * Generate keyPair from secret key\n * @rtype (secret: Uint8Array) => KeyPair\n * @param {Uint8Array} secret - secret key\n * @return {Object} - Object with Private(privateKey) and Public(publicKey) keys\n */\nexport function generateKeyPairFromSecret (secret) {\n return nacl.sign.keyPair.fromSecretKey(secret)\n}\n\n/**\n * Generate a random ED25519 keypair\n * @rtype (raw: Boolean) => {publicKey: String, secretKey: String} | {publicKey: Buffer, secretKey: Buffer}\n * @param {Boolean} raw - Whether to return raw (binary) keys\n * @return {Object} Key pair\n */\nexport function generateKeyPair (raw = false) {\n // <node>/apps/aens/test/aens_test_utils.erl\n const keyPair = nacl.sign.keyPair()\n\n const publicBuffer = Buffer.from(keyPair.publicKey)\n const secretBuffer = Buffer.from(keyPair.secretKey)\n\n if (raw) {\n return {\n publicKey: publicBuffer,\n secretKey: secretBuffer\n }\n } else {\n return {\n publicKey: `ak_${encodeBase58Check(publicBuffer)}`,\n secretKey: secretBuffer.toString('hex')\n }\n }\n}\n\n/**\n * Encrypt given data using `password`\n * @rtype (password: String, binaryData: Buffer) => Uint8Array\n * @param {String} password - Password to encrypt with\n * @param {Buffer} binaryData - Data to encrypt\n * @return {Uint8Array} Encrypted data\n */\nexport function encryptKey (password, binaryData) {\n const hashedPasswordBytes = sha256hash(password)\n const aesEcb = new Ecb(hashedPasswordBytes)\n return aesEcb.encrypt(binaryData)\n}\n\n/**\n * Decrypt given data using `password`\n * @rtype (password: String, encrypted: String) => Uint8Array\n * @param {String} password - Password to decrypt with\n * @param {String} encrypted - Data to decrypt\n * @return {Buffer} Decrypted data\n */\nexport function decryptKey (password, encrypted) {\n const encryptedBytes = Buffer.from(encrypted)\n const hashedPasswordBytes = sha256hash(password)\n const aesEcb = new Ecb(hashedPasswordBytes)\n return Buffer.from(aesEcb.decrypt(encryptedBytes))\n}\n\n// SIGNATURES\n\n/**\n * Generate signature\n * @rtype (data: String|Buffer, privateKey: Buffer) => Buffer\n * @param {String|Buffer} data - Data to sign\n * @param {String|Buffer} privateKey - Key to sign with\n * @return {Buffer|Uint8Array} Signature\n */\nexport function sign (data, privateKey) {\n return nacl.sign.detached(Buffer.from(data), Buffer.from(privateKey))\n}\n\n/**\n * Verify that signature was signed by public key\n * @rtype (str: String, signature: Buffer, publicKey: Buffer) => Boolean\n * @param {String|Buffer} str - Data to verify\n * @param {Buffer} signature - Signature to verify\n * @param {Buffer} publicKey - Key to verify against\n * @return {Boolean} Valid?\n */\nexport function verify (str, signature, publicKey) {\n return nacl.sign.detached.verify(new Uint8Array(str), signature, publicKey)\n}\n\nexport function messageToHash (message) {\n const p = Buffer.from('aeternity Signed Message:\\n', 'utf8')\n const msg = Buffer.from(message, 'utf8')\n if (msg.length >= 0xFD) throw new Error('message too long')\n return hash(Buffer.concat([Buffer.from([p.length]), p, Buffer.from([msg.length]), msg]))\n}\n\nexport function signMessage (message, privateKey) {\n return sign(messageToHash(message), privateKey)\n}\n\nexport function verifyMessage (str, signature, publicKey) {\n return verify(messageToHash(str), signature, publicKey)\n}\n\n/**\n * æternity readable public keys are the base58-encoded public key, prepended\n * with 'ak_'\n * @rtype (binaryKey: Buffer) => String\n * @param {Buffer} binaryKey - Key to encode\n * @return {String} Encoded key\n */\nexport function aeEncodeKey (binaryKey) {\n const publicKeyBuffer = Buffer.from(binaryKey, 'hex')\n const pubKeyAddress = encodeBase58Check(publicKeyBuffer)\n return `ak_${pubKeyAddress}`\n}\n\n/**\n * Check key pair for validity\n *\n * Sign a message, and then verifying that signature\n * @rtype (privateKey: Buffer, publicKey: Buffer) => Boolean\n * @param {Buffer} privateKey - Private key to verify\n * @param {Buffer} publicKey - Public key to verify\n * @return {Boolean} Valid?\n */\nexport function isValidKeypair (privateKey, publicKey) {\n const message = Buffer.from('TheMessage')\n const signature = sign(message, privateKey)\n return verify(message, signature, publicKey)\n}\n\n/**\n * This function encrypts a message using base58check encoded and 'ak' prefixed\n * publicKey such that only the corresponding secretKey will\n * be able to decrypt\n * @rtype (msg: String, publicKey: String) => Object\n * @param {Buffer} msg - Data to encode\n * @param {String} publicKey - Public key\n * @return {Object}\n */\nexport function encryptData (msg, publicKey) {\n const ephemeralKeyPair = nacl.box.keyPair()\n const pubKeyUInt8Array = decode(publicKey, 'ak')\n const nonce = nacl.randomBytes(nacl.box.nonceLength)\n\n const encryptedMessage = nacl.box(\n Buffer.from(msg),\n nonce,\n ed2curve.convertPublicKey(pubKeyUInt8Array),\n ephemeralKeyPair.secretKey\n )\n\n return {\n ciphertext: Buffer.from(encryptedMessage).toString('hex'),\n ephemPubKey: Buffer.from(ephemeralKeyPair.publicKey).toString('hex'),\n nonce: Buffer.from(nonce).toString('hex'),\n version: 'x25519-xsalsa20-poly1305'\n }\n}\n\n/**\n * This function decrypt a message using secret key\n * @rtype (secretKey: String, encryptedData: Object) => Buffer|null\n * @param {String} secretKey - Secret key\n * @param {Object} encryptedData - Encrypted data\n * @return {Buffer|null}\n */\nexport function decryptData (secretKey, encryptedData) {\n const receiverSecretKeyUint8Array = ed2curve.convertSecretKey(Buffer.from(secretKey, 'hex'))\n const nonce = Buffer.from(encryptedData.nonce, 'hex')\n const ciphertext = Buffer.from(encryptedData.ciphertext, 'hex')\n const ephemPubKey = Buffer.from(encryptedData.ephemPubKey, 'hex')\n const decrypted = nacl.box.open(\n ciphertext,\n nonce,\n ephemPubKey,\n receiverSecretKeyUint8Array\n )\n return decrypted ? Buffer.from(decrypted) : decrypted\n}\n"],"file":"crypto.js"}
@@ -1,65 +1,39 @@
1
- import _defineProperty from "@babel/runtime-corejs3/helpers/defineProperty";
2
-
3
- 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; }
4
-
5
- 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; }
6
-
7
- import _forEachInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/for-each";
8
- import _reduceInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/reduce";
9
- import _includesInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/includes";
10
- import _sliceInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/slice";
11
- import _concatInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/concat";
12
- import _mapInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/map";
13
- import _fillInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/fill";
14
- import _Object$keys from "@babel/runtime-corejs3/core-js-stable/object/keys";
15
- import _Object$getOwnPropertySymbols from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols";
16
- import _filterInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/filter";
17
- import _Object$getOwnPropertyDescriptor from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor";
18
- import _Object$getOwnPropertyDescriptors from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors";
19
- import _Object$defineProperties from "@babel/runtime-corejs3/core-js-stable/object/define-properties";
20
- import _Object$defineProperty from "@babel/runtime-corejs3/core-js-stable/object/define-property";
21
1
  import nacl from 'tweetnacl';
22
2
  import { full as hmac } from 'tweetnacl-auth';
23
3
  import { fromString } from 'bip32-path';
24
4
  import { validateMnemonic, mnemonicToSeed, generateMnemonic as genMnemonic } from '@aeternity/bip39';
25
5
  import { decryptKey, encodeBase58Check, encryptKey } from './crypto';
26
- var ED25519_CURVE = Buffer.from('ed25519 seed');
27
- var HARDENED_OFFSET = 0x80000000;
6
+ const ED25519_CURVE = Buffer.from('ed25519 seed');
7
+ const HARDENED_OFFSET = 0x80000000;
28
8
 
29
- var toHex = function toHex(buffer) {
30
- return Buffer.from(buffer).toString('hex');
31
- };
9
+ const toHex = buffer => Buffer.from(buffer).toString('hex');
32
10
 
33
11
  export function derivePathFromKey(path, key) {
34
- var segments = path === '' ? [] : fromString(path).toPathArray();
35
-
36
- _forEachInstanceProperty(segments).call(segments, function (segment, i) {
12
+ const segments = path === '' ? [] : fromString(path).toPathArray();
13
+ segments.forEach((segment, i) => {
37
14
  if (segment < HARDENED_OFFSET) {
38
- throw new Error("Segment #".concat(i + 1, " is not hardened"));
15
+ throw new Error(`Segment #${i + 1} is not hardened`);
39
16
  }
40
17
  });
41
-
42
- return _reduceInstanceProperty(segments).call(segments, function (parentKey, segment) {
43
- return deriveChild(parentKey, segment);
44
- }, key);
18
+ return segments.reduce((parentKey, segment) => deriveChild(parentKey, segment), key);
45
19
  }
46
20
  export function derivePathFromSeed(path, seed) {
47
- var _context;
48
-
49
- if (!_includesInstanceProperty(_context = ['m', 'm/']).call(_context, _sliceInstanceProperty(path).call(path, 0, 2))) {
21
+ if (!['m', 'm/'].includes(path.slice(0, 2))) {
50
22
  throw new Error('Invalid path');
51
23
  }
52
24
 
53
- var masterKey = getMasterKeyFromSeed(seed);
54
- return derivePathFromKey(_sliceInstanceProperty(path).call(path, 2), masterKey);
25
+ const masterKey = getMasterKeyFromSeed(seed);
26
+ return derivePathFromKey(path.slice(2), masterKey);
55
27
  }
56
28
 
57
29
  function formatAccount(keys) {
58
- var secretKey = keys.secretKey,
59
- publicKey = keys.publicKey;
30
+ const {
31
+ secretKey,
32
+ publicKey
33
+ } = keys;
60
34
  return {
61
35
  secretKey: toHex(secretKey),
62
- publicKey: "ak_".concat(encodeBase58Check(publicKey))
36
+ publicKey: `ak_${encodeBase58Check(publicKey)}`
63
37
  };
64
38
  }
65
39
 
@@ -70,36 +44,30 @@ export function generateMnemonic() {
70
44
  return genMnemonic();
71
45
  }
72
46
  export function getMasterKeyFromSeed(seed) {
73
- var I = hmac(seed, ED25519_CURVE);
74
-
75
- var IL = _sliceInstanceProperty(I).call(I, 0, 32);
76
-
77
- var IR = _sliceInstanceProperty(I).call(I, 32);
78
-
47
+ const I = hmac(seed, ED25519_CURVE);
48
+ const IL = I.slice(0, 32);
49
+ const IR = I.slice(32);
79
50
  return {
80
51
  secretKey: IL,
81
52
  chainCode: IR
82
53
  };
83
54
  }
84
55
  export function deriveChild(_ref, index) {
85
- var secretKey = _ref.secretKey,
86
- chainCode = _ref.chainCode;
56
+ let {
57
+ secretKey,
58
+ chainCode
59
+ } = _ref;
87
60
 
88
61
  if (index < HARDENED_OFFSET) {
89
- throw new Error("Child index #".concat(index, " is not supported"));
62
+ throw new Error(`Child index #${index} is not supported`);
90
63
  }
91
64
 
92
- var indexBuffer = Buffer.allocUnsafe(4);
65
+ const indexBuffer = Buffer.allocUnsafe(4);
93
66
  indexBuffer.writeUInt32BE(index, 0);
94
-
95
- var data = _concatInstanceProperty(Buffer).call(Buffer, [Buffer.alloc(1, 0), Buffer.from(secretKey), Buffer.from(indexBuffer)]);
96
-
97
- var I = hmac(data, chainCode);
98
-
99
- var IL = _sliceInstanceProperty(I).call(I, 0, 32);
100
-
101
- var IR = _sliceInstanceProperty(I).call(I, 32);
102
-
67
+ const data = Buffer.concat([Buffer.alloc(1, 0), Buffer.from(secretKey), Buffer.from(indexBuffer)]);
68
+ const I = hmac(data, chainCode);
69
+ const IL = I.slice(0, 32);
70
+ const IR = I.slice(32);
103
71
  return {
104
72
  secretKey: IL,
105
73
  chainCode: IR
@@ -110,39 +78,35 @@ export function generateSaveHDWallet(mnemonic, password) {
110
78
  throw new Error('Invalid mnemonic');
111
79
  }
112
80
 
113
- var seed = mnemonicToSeed(mnemonic);
114
- var walletKey = derivePathFromSeed('m/44h/457h', seed);
81
+ const seed = mnemonicToSeed(mnemonic);
82
+ const walletKey = derivePathFromSeed('m/44h/457h', seed);
115
83
  return {
116
84
  secretKey: toHex(encryptKey(password, walletKey.secretKey)),
117
85
  chainCode: toHex(encryptKey(password, walletKey.chainCode))
118
86
  };
119
87
  }
120
88
  export function getSaveHDWalletAccounts(saveHDWallet, password, accountCount) {
121
- var _context2, _context3;
122
-
123
- var walletKey = {
89
+ const walletKey = {
124
90
  secretKey: decryptKey(password, Buffer.from(saveHDWallet.secretKey, 'hex')),
125
91
  chainCode: decryptKey(password, Buffer.from(saveHDWallet.chainCode, 'hex'))
126
92
  };
127
- return _mapInstanceProperty(_context2 = _fillInstanceProperty(_context3 = new Array(accountCount)).call(_context3)).call(_context2, function (_, idx) {
128
- return formatAccount(getKeyPair(derivePathFromKey("".concat(idx, "h/0h/0h"), walletKey).secretKey));
129
- });
93
+ return new Array(accountCount).fill().map((_, idx) => formatAccount(getKeyPair(derivePathFromKey(`${idx}h/0h/0h`, walletKey).secretKey)));
130
94
  }
131
- export var getHdWalletAccountFromMnemonic = function getHdWalletAccountFromMnemonic(mnemonic, accountIdx) {
132
- var seed = mnemonicToSeed(mnemonic);
133
- var walletKey = derivePathFromSeed('m/44h/457h', seed);
134
- var derived = derivePathFromKey("".concat(accountIdx, "h/0h/0h"), walletKey);
135
- var keyPair = getKeyPair(derived.secretKey);
136
- return _objectSpread(_objectSpread({}, formatAccount(keyPair)), {}, {
95
+ export const getHdWalletAccountFromMnemonic = (mnemonic, accountIdx) => {
96
+ const seed = mnemonicToSeed(mnemonic);
97
+ const walletKey = derivePathFromSeed('m/44h/457h', seed);
98
+ const derived = derivePathFromKey(`${accountIdx}h/0h/0h`, walletKey);
99
+ const keyPair = getKeyPair(derived.secretKey);
100
+ return { ...formatAccount(keyPair),
137
101
  idx: accountIdx
138
- });
102
+ };
139
103
  };
140
104
  export default {
141
- getHdWalletAccountFromMnemonic: getHdWalletAccountFromMnemonic,
142
- getSaveHDWalletAccounts: getSaveHDWalletAccounts,
143
- generateSaveHDWallet: generateSaveHDWallet,
144
- generateMnemonic: generateMnemonic,
145
- deriveChild: deriveChild,
146
- getMasterKeyFromSeed: getMasterKeyFromSeed
105
+ getHdWalletAccountFromMnemonic,
106
+ getSaveHDWalletAccounts,
107
+ generateSaveHDWallet,
108
+ generateMnemonic,
109
+ deriveChild,
110
+ getMasterKeyFromSeed
147
111
  };
148
112
  //# sourceMappingURL=hd-wallet.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/hd-wallet.js"],"names":["nacl","full","hmac","fromString","validateMnemonic","mnemonicToSeed","generateMnemonic","genMnemonic","decryptKey","encodeBase58Check","encryptKey","ED25519_CURVE","Buffer","from","HARDENED_OFFSET","toHex","buffer","toString","derivePathFromKey","path","key","segments","toPathArray","segment","i","Error","parentKey","deriveChild","derivePathFromSeed","seed","masterKey","getMasterKeyFromSeed","formatAccount","keys","secretKey","publicKey","getKeyPair","sign","keyPair","fromSeed","I","IL","IR","chainCode","index","indexBuffer","allocUnsafe","writeUInt32BE","data","alloc","generateSaveHDWallet","mnemonic","password","walletKey","getSaveHDWalletAccounts","saveHDWallet","accountCount","Array","_","idx","getHdWalletAccountFromMnemonic","accountIdx","derived"],"mappings":"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","sourcesContent":["import nacl from 'tweetnacl'\nimport { full as hmac } from 'tweetnacl-auth'\nimport { fromString } from 'bip32-path'\nimport { validateMnemonic, mnemonicToSeed, generateMnemonic as genMnemonic } from '@aeternity/bip39'\nimport { decryptKey, encodeBase58Check, encryptKey } from './crypto'\n\nconst ED25519_CURVE = Buffer.from('ed25519 seed')\nconst HARDENED_OFFSET = 0x80000000\n\nconst toHex = (buffer) => Buffer.from(buffer).toString('hex')\n\nexport function derivePathFromKey (path, key) {\n const segments = path === '' ? [] : fromString(path).toPathArray()\n segments.forEach((segment, i) => {\n if (segment < HARDENED_OFFSET) {\n throw new Error(`Segment #${i + 1} is not hardened`)\n }\n })\n\n return segments.reduce((parentKey, segment) => deriveChild(parentKey, segment), key)\n}\n\nexport function derivePathFromSeed (path, seed) {\n if (!['m', 'm/'].includes(path.slice(0, 2))) {\n throw new Error('Invalid path')\n }\n const masterKey = getMasterKeyFromSeed(seed)\n return derivePathFromKey(path.slice(2), masterKey)\n}\n\nfunction formatAccount (keys) {\n const { secretKey, publicKey } = keys\n return {\n secretKey: toHex(secretKey),\n publicKey: `ak_${encodeBase58Check(publicKey)}`\n }\n}\n\nexport function getKeyPair (secretKey) {\n return nacl.sign.keyPair.fromSeed(secretKey)\n}\n\nexport function generateMnemonic () {\n return genMnemonic()\n}\n\nexport function getMasterKeyFromSeed (seed) {\n const I = hmac(seed, ED25519_CURVE)\n const IL = I.slice(0, 32)\n const IR = I.slice(32)\n return {\n secretKey: IL,\n chainCode: IR\n }\n}\n\nexport function deriveChild ({ secretKey, chainCode }, index) {\n if (index < HARDENED_OFFSET) {\n throw new Error(`Child index #${index} is not supported`)\n }\n const indexBuffer = Buffer.allocUnsafe(4)\n indexBuffer.writeUInt32BE(index, 0)\n\n const data = Buffer.concat([Buffer.alloc(1, 0), Buffer.from(secretKey), Buffer.from(indexBuffer)])\n\n const I = hmac(data, chainCode)\n const IL = I.slice(0, 32)\n const IR = I.slice(32)\n return {\n secretKey: IL,\n chainCode: IR\n }\n}\n\nexport function generateSaveHDWallet (mnemonic, password) {\n if (!validateMnemonic(mnemonic)) {\n throw new Error('Invalid mnemonic')\n }\n const seed = mnemonicToSeed(mnemonic)\n const walletKey = derivePathFromSeed('m/44h/457h', seed)\n return {\n secretKey: toHex(encryptKey(password, walletKey.secretKey)),\n chainCode: toHex(encryptKey(password, walletKey.chainCode))\n }\n}\n\nexport function getSaveHDWalletAccounts (saveHDWallet, password, accountCount) {\n const walletKey = {\n secretKey: decryptKey(password, Buffer.from(saveHDWallet.secretKey, 'hex')),\n chainCode: decryptKey(password, Buffer.from(saveHDWallet.chainCode, 'hex'))\n }\n return (new Array(accountCount)).fill()\n .map((_, idx) =>\n formatAccount(getKeyPair(derivePathFromKey(`${idx}h/0h/0h`, walletKey).secretKey)))\n}\n\nexport const getHdWalletAccountFromMnemonic = (mnemonic, accountIdx) => {\n const seed = mnemonicToSeed(mnemonic)\n const walletKey = derivePathFromSeed('m/44h/457h', seed)\n const derived = derivePathFromKey(`${accountIdx}h/0h/0h`, walletKey)\n const keyPair = getKeyPair(derived.secretKey)\n return {\n ...formatAccount(keyPair),\n idx: accountIdx\n }\n}\n\nexport default {\n getHdWalletAccountFromMnemonic,\n getSaveHDWalletAccounts,\n generateSaveHDWallet,\n generateMnemonic,\n deriveChild,\n getMasterKeyFromSeed\n}\n"],"file":"hd-wallet.js"}
1
+ {"version":3,"sources":["../../src/utils/hd-wallet.js"],"names":["nacl","full","hmac","fromString","validateMnemonic","mnemonicToSeed","generateMnemonic","genMnemonic","decryptKey","encodeBase58Check","encryptKey","ED25519_CURVE","Buffer","from","HARDENED_OFFSET","toHex","buffer","toString","derivePathFromKey","path","key","segments","toPathArray","forEach","segment","i","Error","reduce","parentKey","deriveChild","derivePathFromSeed","seed","includes","slice","masterKey","getMasterKeyFromSeed","formatAccount","keys","secretKey","publicKey","getKeyPair","sign","keyPair","fromSeed","I","IL","IR","chainCode","index","indexBuffer","allocUnsafe","writeUInt32BE","data","concat","alloc","generateSaveHDWallet","mnemonic","password","walletKey","getSaveHDWalletAccounts","saveHDWallet","accountCount","Array","fill","map","_","idx","getHdWalletAccountFromMnemonic","accountIdx","derived"],"mappings":"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","sourcesContent":["import nacl from 'tweetnacl'\nimport { full as hmac } from 'tweetnacl-auth'\nimport { fromString } from 'bip32-path'\nimport { validateMnemonic, mnemonicToSeed, generateMnemonic as genMnemonic } from '@aeternity/bip39'\nimport { decryptKey, encodeBase58Check, encryptKey } from './crypto'\n\nconst ED25519_CURVE = Buffer.from('ed25519 seed')\nconst HARDENED_OFFSET = 0x80000000\n\nconst toHex = (buffer) => Buffer.from(buffer).toString('hex')\n\nexport function derivePathFromKey (path, key) {\n const segments = path === '' ? [] : fromString(path).toPathArray()\n segments.forEach((segment, i) => {\n if (segment < HARDENED_OFFSET) {\n throw new Error(`Segment #${i + 1} is not hardened`)\n }\n })\n\n return segments.reduce((parentKey, segment) => deriveChild(parentKey, segment), key)\n}\n\nexport function derivePathFromSeed (path, seed) {\n if (!['m', 'm/'].includes(path.slice(0, 2))) {\n throw new Error('Invalid path')\n }\n const masterKey = getMasterKeyFromSeed(seed)\n return derivePathFromKey(path.slice(2), masterKey)\n}\n\nfunction formatAccount (keys) {\n const { secretKey, publicKey } = keys\n return {\n secretKey: toHex(secretKey),\n publicKey: `ak_${encodeBase58Check(publicKey)}`\n }\n}\n\nexport function getKeyPair (secretKey) {\n return nacl.sign.keyPair.fromSeed(secretKey)\n}\n\nexport function generateMnemonic () {\n return genMnemonic()\n}\n\nexport function getMasterKeyFromSeed (seed) {\n const I = hmac(seed, ED25519_CURVE)\n const IL = I.slice(0, 32)\n const IR = I.slice(32)\n return {\n secretKey: IL,\n chainCode: IR\n }\n}\n\nexport function deriveChild ({ secretKey, chainCode }, index) {\n if (index < HARDENED_OFFSET) {\n throw new Error(`Child index #${index} is not supported`)\n }\n const indexBuffer = Buffer.allocUnsafe(4)\n indexBuffer.writeUInt32BE(index, 0)\n\n const data = Buffer.concat([Buffer.alloc(1, 0), Buffer.from(secretKey), Buffer.from(indexBuffer)])\n\n const I = hmac(data, chainCode)\n const IL = I.slice(0, 32)\n const IR = I.slice(32)\n return {\n secretKey: IL,\n chainCode: IR\n }\n}\n\nexport function generateSaveHDWallet (mnemonic, password) {\n if (!validateMnemonic(mnemonic)) {\n throw new Error('Invalid mnemonic')\n }\n const seed = mnemonicToSeed(mnemonic)\n const walletKey = derivePathFromSeed('m/44h/457h', seed)\n return {\n secretKey: toHex(encryptKey(password, walletKey.secretKey)),\n chainCode: toHex(encryptKey(password, walletKey.chainCode))\n }\n}\n\nexport function getSaveHDWalletAccounts (saveHDWallet, password, accountCount) {\n const walletKey = {\n secretKey: decryptKey(password, Buffer.from(saveHDWallet.secretKey, 'hex')),\n chainCode: decryptKey(password, Buffer.from(saveHDWallet.chainCode, 'hex'))\n }\n return (new Array(accountCount)).fill()\n .map((_, idx) =>\n formatAccount(getKeyPair(derivePathFromKey(`${idx}h/0h/0h`, walletKey).secretKey)))\n}\n\nexport const getHdWalletAccountFromMnemonic = (mnemonic, accountIdx) => {\n const seed = mnemonicToSeed(mnemonic)\n const walletKey = derivePathFromSeed('m/44h/457h', seed)\n const derived = derivePathFromKey(`${accountIdx}h/0h/0h`, walletKey)\n const keyPair = getKeyPair(derived.secretKey)\n return {\n ...formatAccount(keyPair),\n idx: accountIdx\n }\n}\n\nexport default {\n getHdWalletAccountFromMnemonic,\n getSaveHDWalletAccounts,\n generateSaveHDWallet,\n generateMnemonic,\n deriveChild,\n getMasterKeyFromSeed\n}\n"],"file":"hd-wallet.js"}