@aeternity/aepp-sdk 11.0.1 → 12.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/dist/aepp-sdk.browser-script.js +1 -1
- package/dist/aepp-sdk.browser-script.js.LICENSE.txt +12 -19
- package/dist/aepp-sdk.browser-script.js.map +1 -1
- package/dist/aepp-sdk.browser.js +1 -1
- package/dist/aepp-sdk.browser.js.map +1 -1
- package/dist/aepp-sdk.js +1 -1
- package/dist/aepp-sdk.js.map +1 -1
- package/es/AeSdk.d.ts +37 -0
- package/es/AeSdk.mjs +81 -0
- package/es/AeSdk.mjs.map +1 -0
- package/es/AeSdkAepp.d.ts +69 -0
- package/es/AeSdkAepp.mjs +175 -0
- package/es/AeSdkAepp.mjs.map +1 -0
- package/es/AeSdkBase.d.ts +212 -0
- package/es/AeSdkBase.mjs +310 -0
- package/es/AeSdkBase.mjs.map +1 -0
- package/es/AeSdkWallet.d.ts +103 -0
- package/es/AeSdkWallet.mjs +322 -0
- package/es/AeSdkWallet.mjs.map +1 -0
- package/es/Node.d.ts +44 -0
- package/es/Node.mjs +141 -0
- package/es/Node.mjs.map +1 -0
- package/es/account/Base.d.ts +65 -0
- package/es/account/Base.mjs +123 -0
- package/es/account/Base.mjs.map +1 -0
- package/es/account/Memory.d.ts +25 -0
- package/es/account/Memory.mjs +81 -0
- package/es/account/Memory.mjs.map +1 -0
- package/es/account/Rpc.d.ts +27 -0
- package/es/account/Rpc.mjs +79 -0
- package/es/account/Rpc.mjs.map +1 -0
- package/es/aens.d.ts +209 -0
- package/es/aens.mjs +332 -0
- package/es/aens.mjs.map +1 -0
- package/es/aepp-wallet-communication/connection/Browser.d.ts +32 -0
- package/es/aepp-wallet-communication/connection/Browser.mjs +70 -0
- package/es/aepp-wallet-communication/connection/Browser.mjs.map +1 -0
- package/es/aepp-wallet-communication/connection/BrowserRuntime.d.ts +17 -0
- package/es/aepp-wallet-communication/connection/BrowserRuntime.mjs +57 -0
- package/es/aepp-wallet-communication/connection/BrowserRuntime.mjs.map +1 -0
- package/es/aepp-wallet-communication/connection/BrowserWindowMessage.d.ts +35 -0
- package/es/aepp-wallet-communication/connection/BrowserWindowMessage.mjs +142 -0
- package/es/aepp-wallet-communication/connection/BrowserWindowMessage.mjs.map +1 -0
- package/es/aepp-wallet-communication/connection-proxy.d.ts +10 -0
- package/{src/utils/crypto-ts.ts → es/aepp-wallet-communication/connection-proxy.mjs} +15 -11
- package/es/aepp-wallet-communication/connection-proxy.mjs.map +1 -0
- package/es/aepp-wallet-communication/rpc/RpcClient.d.ts +33 -0
- package/es/aepp-wallet-communication/rpc/RpcClient.mjs +169 -0
- package/es/aepp-wallet-communication/rpc/RpcClient.mjs.map +1 -0
- package/es/aepp-wallet-communication/rpc/types.d.ts +77 -0
- package/es/aepp-wallet-communication/rpc/types.mjs +3 -0
- package/es/aepp-wallet-communication/rpc/types.mjs.map +1 -0
- package/es/aepp-wallet-communication/schema.d.ts +90 -46
- package/es/aepp-wallet-communication/schema.mjs +214 -0
- package/es/aepp-wallet-communication/schema.mjs.map +1 -0
- package/es/aepp-wallet-communication/wallet-detector.d.ts +24 -0
- package/es/aepp-wallet-communication/wallet-detector.mjs +63 -0
- package/es/aepp-wallet-communication/wallet-detector.mjs.map +1 -0
- package/es/apis/compiler/compiler.d.ts +92 -0
- package/es/apis/compiler/compiler.mjs +576 -0
- package/es/apis/compiler/compiler.mjs.map +1 -0
- package/es/apis/compiler/index.d.ts +2 -0
- package/es/apis/compiler/index.mjs +3 -0
- package/es/apis/compiler/index.mjs.map +1 -0
- package/es/apis/compiler/models/index.d.ts +248 -0
- package/es/apis/compiler/models/index.mjs +48 -0
- package/es/apis/compiler/models/index.mjs.map +1 -0
- package/es/apis/compiler/models/mappers.d.ts +23 -0
- package/es/apis/compiler/models/mappers.mjs +585 -0
- package/es/apis/compiler/models/mappers.mjs.map +1 -0
- package/es/apis/compiler/models/parameters.d.ts +13 -0
- package/es/apis/compiler/models/parameters.mjs +71 -0
- package/es/apis/compiler/models/parameters.mjs.map +1 -0
- package/es/apis/node/index.d.ts +2 -0
- package/es/apis/node/index.mjs +3 -0
- package/es/apis/node/index.mjs.map +1 -0
- package/es/apis/node/models/index.d.ts +1061 -0
- package/es/apis/node/models/index.mjs +2 -0
- package/es/apis/node/models/index.mjs.map +1 -0
- package/es/apis/node/models/mappers.d.ts +95 -0
- package/es/apis/node/models/mappers.mjs +4164 -0
- package/es/apis/node/models/mappers.mjs.map +1 -0
- package/es/apis/node/models/parameters.d.ts +17 -0
- package/es/apis/node/models/parameters.mjs +165 -0
- package/es/apis/node/models/parameters.mjs.map +1 -0
- package/es/apis/node/node.d.ts +215 -0
- package/es/apis/node/node.mjs +1165 -0
- package/es/apis/node/node.mjs.map +1 -0
- package/es/chain.d.ts +220 -0
- package/es/chain.mjs +524 -0
- package/es/chain.mjs.map +1 -0
- package/es/channel/handlers.d.ts +34 -0
- package/es/channel/handlers.mjs +147 -112
- package/es/channel/handlers.mjs.map +1 -1
- package/es/channel/index.d.ts +634 -0
- package/es/channel/index.mjs +898 -900
- package/es/channel/index.mjs.map +1 -1
- package/es/channel/internal.d.ts +100 -0
- package/es/channel/internal.mjs +97 -51
- package/es/channel/internal.mjs.map +1 -1
- package/es/contract/Compiler.d.ts +17 -0
- package/es/contract/Compiler.mjs +67 -0
- package/es/contract/Compiler.mjs.map +1 -0
- package/es/contract/aci.d.ts +125 -0
- package/es/contract/aci.mjs +199 -180
- package/es/contract/aci.mjs.map +1 -1
- package/es/contract/ga.d.ts +68 -0
- package/es/contract/ga.mjs +190 -0
- package/es/contract/ga.mjs.map +1 -0
- package/es/contract/methods.d.ts +68 -0
- package/es/contract/methods.mjs +101 -0
- package/es/contract/methods.mjs.map +1 -0
- package/es/index.d.ts +32 -0
- package/es/index.mjs +32 -40
- package/es/index.mjs.map +1 -1
- package/es/oracle.d.ts +154 -0
- package/es/oracle.mjs +288 -0
- package/es/oracle.mjs.map +1 -0
- package/es/spend.d.ts +61 -0
- package/es/spend.mjs +122 -0
- package/es/spend.mjs.map +1 -0
- package/es/tx/builder/constants.d.ts +41 -0
- package/es/tx/builder/constants.mjs +11 -19
- package/es/tx/builder/constants.mjs.map +1 -1
- package/es/tx/builder/field-types.d.ts +62 -0
- package/es/tx/builder/field-types.mjs +62 -10
- package/es/tx/builder/field-types.mjs.map +1 -1
- package/es/tx/builder/helpers.d.ts +131 -0
- package/es/tx/builder/helpers.mjs +71 -169
- package/es/tx/builder/helpers.mjs.map +1 -1
- package/es/tx/builder/index.d.ts +75 -0
- package/es/tx/builder/index.mjs +141 -323
- package/es/tx/builder/index.mjs.map +1 -1
- package/es/tx/builder/schema.d.ts +350 -0
- package/es/tx/builder/schema.mjs +173 -510
- package/es/tx/builder/schema.mjs.map +1 -1
- package/es/tx/index.d.ts +63 -0
- package/es/tx/index.mjs +171 -265
- package/es/tx/index.mjs.map +1 -1
- package/es/tx/min-fee.d.ts +20 -0
- package/es/tx/min-fee.mjs +148 -0
- package/es/tx/min-fee.mjs.map +1 -0
- package/es/tx/validator.d.ts +19 -0
- package/es/tx/validator.mjs +64 -71
- package/es/tx/validator.mjs.map +1 -1
- package/es/typings/@aeternity__argon2-browser/index.d.mjs +2 -0
- package/es/typings/@aeternity__argon2-browser/index.d.mjs.map +1 -0
- package/es/typings/@aeternity__uuid/index.d.mjs +2 -0
- package/es/typings/@aeternity__uuid/index.d.mjs.map +1 -0
- package/es/typings/bip32-path/index.d.mjs +2 -0
- package/es/typings/bip32-path/index.d.mjs.map +1 -0
- package/es/typings/blakejs/index.d.mjs.map +1 -1
- package/es/typings/tweetnacl-auth/index.d.mjs +2 -0
- package/es/typings/tweetnacl-auth/index.d.mjs.map +1 -0
- package/es/utils/amount-formatter.d.ts +42 -0
- package/es/utils/amount-formatter.mjs +28 -41
- package/es/utils/amount-formatter.mjs.map +1 -1
- package/es/utils/autorest.d.ts +6 -0
- package/es/utils/autorest.mjs +97 -0
- package/es/utils/autorest.mjs.map +1 -0
- package/es/utils/bignumber.d.ts +13 -0
- package/es/utils/bignumber.mjs +10 -8
- package/es/utils/bignumber.mjs.map +1 -1
- package/es/{bytes.d.ts → utils/bytes.d.ts} +10 -13
- package/es/utils/bytes.mjs +10 -14
- package/es/utils/bytes.mjs.map +1 -1
- package/es/utils/crypto.d.ts +103 -0
- package/es/utils/crypto.mjs +60 -68
- package/es/utils/crypto.mjs.map +1 -1
- package/es/utils/encoder.d.ts +26 -0
- package/es/utils/encoder.mjs +47 -51
- package/es/utils/encoder.mjs.map +1 -1
- package/es/{errors.d.ts → utils/errors.d.ts} +254 -57
- package/es/utils/errors.mjs +318 -125
- package/es/utils/errors.mjs.map +1 -1
- package/es/utils/hd-wallet.d.ts +34 -0
- package/es/utils/hd-wallet.mjs +27 -16
- package/es/utils/hd-wallet.mjs.map +1 -1
- package/es/utils/json-big.d.ts +5 -0
- package/es/utils/json-big.mjs +10 -14
- package/es/utils/json-big.mjs.map +1 -1
- package/es/utils/keystore.d.ts +51 -0
- package/es/utils/keystore.mjs +98 -193
- package/es/utils/keystore.mjs.map +1 -1
- package/es/{mptree.d.ts → utils/mptree.d.ts} +5 -8
- package/es/utils/mptree.mjs +13 -14
- package/es/utils/mptree.mjs.map +1 -1
- package/es/utils/other.d.ts +14 -0
- package/es/utils/other.mjs +21 -36
- package/es/utils/other.mjs.map +1 -1
- package/es/{semver-satisfies.d.ts → utils/semver-satisfies.d.ts} +0 -0
- package/es/utils/semver-satisfies.mjs.map +1 -1
- package/es/utils/string.d.ts +24 -0
- package/es/utils/string.mjs +8 -10
- package/es/utils/string.mjs.map +1 -1
- package/package.json +49 -39
- package/src/AeSdk.ts +65 -0
- package/src/AeSdkAepp.ts +167 -0
- package/src/AeSdkBase.ts +320 -0
- package/src/AeSdkWallet.ts +332 -0
- package/src/Node.ts +167 -0
- package/src/account/Base.ts +114 -0
- package/src/account/Memory.ts +83 -0
- package/src/account/Rpc.ts +67 -0
- package/src/aens.ts +391 -0
- package/src/aepp-wallet-communication/connection/Browser.ts +68 -0
- package/src/aepp-wallet-communication/connection/BrowserRuntime.ts +58 -0
- package/src/aepp-wallet-communication/connection/BrowserWindowMessage.ts +111 -0
- package/{es/utils/crypto-ts.mjs → src/aepp-wallet-communication/connection-proxy.ts} +16 -17
- package/src/aepp-wallet-communication/rpc/RpcClient.ts +137 -0
- package/src/aepp-wallet-communication/rpc/types.ts +66 -0
- package/src/aepp-wallet-communication/schema.ts +181 -0
- package/src/aepp-wallet-communication/wallet-detector.ts +71 -0
- package/src/apis/compiler/code-model-v4.yaml +2649 -0
- package/src/apis/compiler/compiler.ts +585 -0
- package/src/apis/compiler/index.ts +2 -0
- package/src/apis/compiler/models/index.ts +301 -0
- package/src/apis/compiler/models/mappers.ts +583 -0
- package/src/apis/compiler/models/parameters.ts +93 -0
- package/src/apis/node/code-model-v4.yaml +10046 -0
- package/src/apis/node/index.ts +2 -0
- package/src/apis/node/models/index.ts +1253 -0
- package/src/apis/node/models/mappers.ts +4278 -0
- package/src/apis/node/models/parameters.ts +188 -0
- package/src/apis/node/node.ts +1299 -0
- package/src/chain.ts +444 -0
- package/src/channel/{handlers.js → handlers.ts} +220 -128
- package/src/channel/index.ts +991 -0
- package/src/channel/internal.ts +345 -0
- package/src/contract/Compiler.ts +66 -0
- package/src/contract/aci.ts +529 -0
- package/src/contract/ga.ts +178 -0
- package/src/contract/methods.ts +118 -0
- package/src/index.ts +51 -0
- package/src/oracle.ts +342 -0
- package/src/spend.ts +152 -0
- package/src/tx/builder/{constants.js → constants.ts} +12 -16
- package/src/tx/builder/field-types.ts +111 -0
- package/src/tx/builder/helpers.ts +253 -0
- package/src/tx/builder/index.ts +394 -0
- package/src/tx/builder/schema.ts +771 -0
- package/src/tx/index.ts +199 -0
- package/src/tx/min-fee.ts +136 -0
- package/src/tx/validator.ts +226 -0
- package/src/typings/@aeternity__argon2-browser/index.d.ts +3 -0
- package/src/typings/@aeternity__uuid/index.d.ts +3 -0
- package/src/typings/bip32-path/index.d.ts +33 -0
- package/src/typings/tweetnacl-auth/index.d.ts +14 -0
- package/src/utils/amount-formatter.ts +29 -42
- package/src/utils/autorest.ts +90 -0
- package/src/utils/bignumber.ts +9 -11
- package/src/utils/bytes.ts +12 -14
- package/src/utils/crypto.ts +217 -0
- package/src/utils/encoder.ts +52 -55
- package/src/utils/errors.ts +268 -134
- package/src/utils/hd-wallet.ts +134 -0
- package/src/utils/json-big.ts +26 -0
- package/src/utils/keystore.ts +179 -0
- package/src/utils/mptree.ts +14 -14
- package/src/utils/other.ts +28 -43
- package/src/utils/string.ts +8 -10
- package/es/account/base.mjs +0 -179
- package/es/account/base.mjs.map +0 -1
- package/es/account/memory.mjs +0 -99
- package/es/account/memory.mjs.map +0 -1
- package/es/account/multiple.mjs +0 -179
- package/es/account/multiple.mjs.map +0 -1
- package/es/ae/aens.mjs +0 -404
- package/es/ae/aens.mjs.map +0 -1
- package/es/ae/aepp.mjs +0 -45
- package/es/ae/aepp.mjs.map +0 -1
- package/es/ae/contract.mjs +0 -159
- package/es/ae/contract.mjs.map +0 -1
- package/es/ae/index.mjs +0 -207
- package/es/ae/index.mjs.map +0 -1
- package/es/ae/oracle.mjs +0 -339
- package/es/ae/oracle.mjs.map +0 -1
- package/es/ae/universal.mjs +0 -45
- package/es/ae/universal.mjs.map +0 -1
- package/es/ae/wallet.mjs +0 -50
- package/es/ae/wallet.mjs.map +0 -1
- package/es/amount-formatter.d.ts +0 -58
- package/es/bignumber.d.ts +0 -18
- package/es/chain/index.mjs +0 -272
- package/es/chain/index.mjs.map +0 -1
- package/es/chain/node.mjs +0 -442
- package/es/chain/node.mjs.map +0 -1
- package/es/contract/compiler.mjs +0 -115
- package/es/contract/compiler.mjs.map +0 -1
- package/es/contract/ga/helpers.mjs +0 -30
- package/es/contract/ga/helpers.mjs.map +0 -1
- package/es/contract/ga/index.mjs +0 -178
- package/es/contract/ga/index.mjs.map +0 -1
- package/es/crypto-ts.d.ts +0 -9
- package/es/encoder.d.ts +0 -26
- package/es/node-pool/index.mjs +0 -188
- package/es/node-pool/index.mjs.map +0 -1
- package/es/node.mjs +0 -133
- package/es/node.mjs.map +0 -1
- package/es/other.d.ts +0 -31
- package/es/string.d.ts +0 -26
- package/es/tx/tx-object.mjs +0 -283
- package/es/tx/tx-object.mjs.map +0 -1
- package/es/tx/tx.mjs +0 -938
- package/es/tx/tx.mjs.map +0 -1
- package/es/utils/aepp-wallet-communication/connection/browser-runtime.mjs +0 -132
- package/es/utils/aepp-wallet-communication/connection/browser-runtime.mjs.map +0 -1
- package/es/utils/aepp-wallet-communication/connection/browser-window-message.mjs +0 -183
- package/es/utils/aepp-wallet-communication/connection/browser-window-message.mjs.map +0 -1
- package/es/utils/aepp-wallet-communication/connection/index.mjs +0 -87
- package/es/utils/aepp-wallet-communication/connection/index.mjs.map +0 -1
- package/es/utils/aepp-wallet-communication/content-script-bridge.mjs +0 -98
- package/es/utils/aepp-wallet-communication/content-script-bridge.mjs.map +0 -1
- package/es/utils/aepp-wallet-communication/helpers.mjs +0 -92
- package/es/utils/aepp-wallet-communication/helpers.mjs.map +0 -1
- package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.mjs +0 -375
- package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.mjs.map +0 -1
- package/es/utils/aepp-wallet-communication/rpc/rpc-client.mjs +0 -275
- package/es/utils/aepp-wallet-communication/rpc/rpc-client.mjs.map +0 -1
- package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.mjs +0 -541
- package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.mjs.map +0 -1
- package/es/utils/aepp-wallet-communication/schema.mjs +0 -102
- package/es/utils/aepp-wallet-communication/schema.mjs.map +0 -1
- package/es/utils/aepp-wallet-communication/wallet-detector.mjs +0 -110
- package/es/utils/aepp-wallet-communication/wallet-detector.mjs.map +0 -1
- package/es/utils/async-init.mjs +0 -64
- package/es/utils/async-init.mjs.map +0 -1
- package/es/utils/crypto-ts.mjs.map +0 -1
- package/es/utils/swagger.mjs +0 -164
- package/es/utils/swagger.mjs.map +0 -1
- package/src/account/base.js +0 -153
- package/src/account/memory.js +0 -83
- package/src/account/multiple.js +0 -162
- package/src/ae/aens.js +0 -361
- package/src/ae/aepp.js +0 -45
- package/src/ae/contract.js +0 -148
- package/src/ae/index.js +0 -168
- package/src/ae/oracle.js +0 -311
- package/src/ae/universal.js +0 -47
- package/src/ae/wallet.js +0 -50
- package/src/chain/index.js +0 -269
- package/src/chain/node.js +0 -320
- package/src/channel/index.js +0 -903
- package/src/channel/internal.js +0 -236
- package/src/contract/aci.js +0 -376
- package/src/contract/compiler.js +0 -100
- package/src/contract/ga/helpers.js +0 -19
- package/src/contract/ga/index.js +0 -150
- package/src/index.js +0 -89
- package/src/node-pool/index.js +0 -172
- package/src/node.js +0 -116
- package/src/tx/builder/field-types.js +0 -61
- package/src/tx/builder/helpers.js +0 -334
- package/src/tx/builder/index.js +0 -465
- package/src/tx/builder/schema.js +0 -1100
- package/src/tx/index.js +0 -301
- package/src/tx/tx-object.js +0 -187
- package/src/tx/tx.js +0 -631
- package/src/tx/validator.js +0 -181
- package/src/utils/aepp-wallet-communication/connection/browser-runtime.js +0 -119
- package/src/utils/aepp-wallet-communication/connection/browser-window-message.js +0 -165
- package/src/utils/aepp-wallet-communication/connection/index.js +0 -85
- package/src/utils/aepp-wallet-communication/content-script-bridge.js +0 -86
- package/src/utils/aepp-wallet-communication/helpers.js +0 -60
- package/src/utils/aepp-wallet-communication/rpc/aepp-rpc.js +0 -294
- package/src/utils/aepp-wallet-communication/rpc/rpc-client.js +0 -232
- package/src/utils/aepp-wallet-communication/rpc/wallet-rpc.js +0 -401
- package/src/utils/aepp-wallet-communication/schema.ts +0 -80
- package/src/utils/aepp-wallet-communication/wallet-detector.js +0 -92
- package/src/utils/async-init.js +0 -45
- package/src/utils/crypto.js +0 -219
- package/src/utils/hd-wallet.js +0 -100
- package/src/utils/json-big.js +0 -26
- package/src/utils/keystore.js +0 -219
- package/src/utils/swagger.js +0 -156
package/src/utils/crypto.js
DELETED
|
@@ -1,219 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* ISC License (ISC)
|
|
3
|
-
* Copyright 2018 aeternity developers
|
|
4
|
-
*
|
|
5
|
-
* Permission to use, copy, modify, and/or distribute this software for any
|
|
6
|
-
* purpose with or without fee is hereby granted, provided that the above
|
|
7
|
-
* copyright notice and this permission notice appear in all copies.
|
|
8
|
-
*
|
|
9
|
-
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
10
|
-
* REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
11
|
-
* AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
12
|
-
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
13
|
-
* LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
14
|
-
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
15
|
-
* PERFORMANCE OF THIS SOFTWARE.
|
|
16
|
-
*/
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Crypto module
|
|
20
|
-
* @module @aeternity/aepp-sdk/es/utils/crypto
|
|
21
|
-
* @example import { Crypto } from '@aeternity/aepp-sdk'
|
|
22
|
-
*/
|
|
23
|
-
|
|
24
|
-
import nacl from 'tweetnacl'
|
|
25
|
-
import aesjs from 'aes-js'
|
|
26
|
-
|
|
27
|
-
import { str2buf } from './bytes'
|
|
28
|
-
import { encode, decode, sha256hash } from './encoder'
|
|
29
|
-
import { hash } from './crypto-ts'
|
|
30
|
-
import { NotImplementedError } from './errors'
|
|
31
|
-
|
|
32
|
-
export * from './crypto-ts'
|
|
33
|
-
export { sha256hash }
|
|
34
|
-
|
|
35
|
-
const Ecb = aesjs.ModeOfOperation.ecb
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* Generate address from secret key
|
|
39
|
-
* @rtype (secret: String) => tx: Promise[String]
|
|
40
|
-
* @param {String} secret - Private key
|
|
41
|
-
* @return {String} Public key
|
|
42
|
-
*/
|
|
43
|
-
export function getAddressFromPriv (secret) {
|
|
44
|
-
const keys = nacl.sign.keyPair.fromSecretKey(str2buf(secret))
|
|
45
|
-
const publicBuffer = Buffer.from(keys.publicKey)
|
|
46
|
-
return encode(publicBuffer, 'ak')
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
/**
|
|
50
|
-
* Check if address is valid
|
|
51
|
-
* @rtype (input: String) => valid: Boolean
|
|
52
|
-
* @param {String} address - Address
|
|
53
|
-
* @param {String} prefix Transaction prefix. Default: 'ak'
|
|
54
|
-
* @return {Boolean} valid
|
|
55
|
-
*/
|
|
56
|
-
export function isAddressValid (address, prefix = 'ak') {
|
|
57
|
-
try {
|
|
58
|
-
decode(address, prefix)
|
|
59
|
-
return true
|
|
60
|
-
} catch (e) {
|
|
61
|
-
return false
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* Generate a random salt (positive integer)
|
|
67
|
-
* @rtype () => salt: Number
|
|
68
|
-
* @return {Number} random salt
|
|
69
|
-
*/
|
|
70
|
-
export function salt () {
|
|
71
|
-
return Math.floor(Math.random() * Math.floor(Number.MAX_SAFE_INTEGER))
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
/**
|
|
75
|
-
* Converts a positive integer to the smallest possible
|
|
76
|
-
* representation in a binary digit representation
|
|
77
|
-
* @rtype (value: Number) => Buffer
|
|
78
|
-
* @param {Number} value - Value to encode
|
|
79
|
-
* @return {Buffer} - Encoded data
|
|
80
|
-
*/
|
|
81
|
-
export function encodeUnsigned (value) {
|
|
82
|
-
const binary = Buffer.allocUnsafe(4)
|
|
83
|
-
binary.writeUInt32BE(value)
|
|
84
|
-
return binary.slice(binary.findIndex(i => i !== 0))
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
// Todo Duplicated in tx builder. remove
|
|
88
|
-
/**
|
|
89
|
-
* Compute contract address
|
|
90
|
-
* @rtype (owner: String, nonce: Number) => String
|
|
91
|
-
* @param {String} owner - Address of contract owner
|
|
92
|
-
* @param {Number} nonce - Round when contract was created
|
|
93
|
-
* @return {String} - Contract address
|
|
94
|
-
*/
|
|
95
|
-
export function encodeContractAddress (owner, nonce) {
|
|
96
|
-
const publicKey = decode(owner, 'ak')
|
|
97
|
-
const binary = Buffer.concat([publicKey, encodeUnsigned(nonce)])
|
|
98
|
-
return encode(hash(binary), 'ct')
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
// KEY-PAIR HELPERS
|
|
102
|
-
|
|
103
|
-
/**
|
|
104
|
-
* Generate keyPair from secret key
|
|
105
|
-
* @rtype (secret: Uint8Array) => KeyPair
|
|
106
|
-
* @param {Uint8Array} secret - secret key
|
|
107
|
-
* @return {Object} - Object with Private(privateKey) and Public(publicKey) keys
|
|
108
|
-
*/
|
|
109
|
-
export function generateKeyPairFromSecret (secret) {
|
|
110
|
-
return nacl.sign.keyPair.fromSecretKey(secret)
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
/**
|
|
114
|
-
* Generate a random ED25519 keypair
|
|
115
|
-
* @rtype (raw: Boolean) => {publicKey: String | Buffer, secretKey: String | Buffer}
|
|
116
|
-
* @param {Boolean} raw - Whether to return raw (binary) keys
|
|
117
|
-
* @return {Object} Key pair
|
|
118
|
-
*/
|
|
119
|
-
export function generateKeyPair (raw = false) {
|
|
120
|
-
// <node>/apps/aens/test/aens_test_utils.erl
|
|
121
|
-
const keyPair = nacl.sign.keyPair()
|
|
122
|
-
|
|
123
|
-
const publicBuffer = Buffer.from(keyPair.publicKey)
|
|
124
|
-
const secretBuffer = Buffer.from(keyPair.secretKey)
|
|
125
|
-
|
|
126
|
-
if (raw) {
|
|
127
|
-
return {
|
|
128
|
-
publicKey: publicBuffer,
|
|
129
|
-
secretKey: secretBuffer
|
|
130
|
-
}
|
|
131
|
-
} else {
|
|
132
|
-
return {
|
|
133
|
-
publicKey: encode(publicBuffer, 'ak'),
|
|
134
|
-
secretKey: secretBuffer.toString('hex')
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
/**
|
|
140
|
-
* Encrypt given data using `password`
|
|
141
|
-
* @rtype (password: String, binaryData: Buffer) => Uint8Array
|
|
142
|
-
* @param {String} password - Password to encrypt with
|
|
143
|
-
* @param {Buffer} binaryData - Data to encrypt
|
|
144
|
-
* @return {Uint8Array} Encrypted data
|
|
145
|
-
*/
|
|
146
|
-
export function encryptKey (password, binaryData) {
|
|
147
|
-
const hashedPasswordBytes = sha256hash(password)
|
|
148
|
-
const aesEcb = new Ecb(hashedPasswordBytes)
|
|
149
|
-
return aesEcb.encrypt(binaryData)
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
/**
|
|
153
|
-
* Decrypt given data using `password`
|
|
154
|
-
* @rtype (password: String, encrypted: String) => Uint8Array
|
|
155
|
-
* @param {String} password - Password to decrypt with
|
|
156
|
-
* @param {String} encrypted - Data to decrypt
|
|
157
|
-
* @return {Buffer} Decrypted data
|
|
158
|
-
*/
|
|
159
|
-
export function decryptKey (password, encrypted) {
|
|
160
|
-
const encryptedBytes = Buffer.from(encrypted)
|
|
161
|
-
const hashedPasswordBytes = sha256hash(password)
|
|
162
|
-
const aesEcb = new Ecb(hashedPasswordBytes)
|
|
163
|
-
return Buffer.from(aesEcb.decrypt(encryptedBytes))
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
// SIGNATURES
|
|
167
|
-
|
|
168
|
-
/**
|
|
169
|
-
* Generate signature
|
|
170
|
-
* @rtype (data: String|Buffer, privateKey: Buffer) => Buffer
|
|
171
|
-
* @param {String|Buffer} data - Data to sign
|
|
172
|
-
* @param {String|Buffer} privateKey - Key to sign with
|
|
173
|
-
* @return {Buffer|Uint8Array} Signature
|
|
174
|
-
*/
|
|
175
|
-
export function sign (data, privateKey) {
|
|
176
|
-
return nacl.sign.detached(Buffer.from(data), Buffer.from(privateKey))
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
/**
|
|
180
|
-
* Verify that signature was signed by public key
|
|
181
|
-
* @rtype (str: String, signature: Buffer, publicKey: Buffer) => Boolean
|
|
182
|
-
* @param {String|Buffer} str - Data to verify
|
|
183
|
-
* @param {Buffer} signature - Signature to verify
|
|
184
|
-
* @param {Buffer} publicKey - Key to verify against
|
|
185
|
-
* @return {Boolean} Valid?
|
|
186
|
-
*/
|
|
187
|
-
export function verify (str, signature, publicKey) {
|
|
188
|
-
return nacl.sign.detached.verify(new Uint8Array(str), signature, publicKey)
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
export function messageToHash (message) {
|
|
192
|
-
const p = Buffer.from('aeternity Signed Message:\n', 'utf8')
|
|
193
|
-
const msg = Buffer.from(message, 'utf8')
|
|
194
|
-
if (msg.length >= 0xFD) throw new NotImplementedError('Message too long')
|
|
195
|
-
return hash(Buffer.concat([Buffer.from([p.length]), p, Buffer.from([msg.length]), msg]))
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
export function signMessage (message, privateKey) {
|
|
199
|
-
return sign(messageToHash(message), privateKey)
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
export function verifyMessage (str, signature, publicKey) {
|
|
203
|
-
return verify(messageToHash(str), signature, publicKey)
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
/**
|
|
207
|
-
* Check key pair for validity
|
|
208
|
-
*
|
|
209
|
-
* Sign a message, and then verifying that signature
|
|
210
|
-
* @rtype (privateKey: Buffer, publicKey: Buffer) => Boolean
|
|
211
|
-
* @param {Buffer} privateKey - Private key to verify
|
|
212
|
-
* @param {Buffer} publicKey - Public key to verify
|
|
213
|
-
* @return {Boolean} Valid?
|
|
214
|
-
*/
|
|
215
|
-
export function isValidKeypair (privateKey, publicKey) {
|
|
216
|
-
const message = Buffer.from('TheMessage')
|
|
217
|
-
const signature = sign(message, privateKey)
|
|
218
|
-
return verify(message, signature, publicKey)
|
|
219
|
-
}
|
package/src/utils/hd-wallet.js
DELETED
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
import nacl from 'tweetnacl'
|
|
2
|
-
import { full as hmac } from 'tweetnacl-auth'
|
|
3
|
-
import { fromString } from 'bip32-path'
|
|
4
|
-
import { decryptKey, encryptKey } from './crypto'
|
|
5
|
-
import { encode } from '../tx/builder/helpers'
|
|
6
|
-
import {
|
|
7
|
-
InvalidDerivationPathError, NotHardenedSegmentError, UnsupportedChildIndexError
|
|
8
|
-
} from './errors'
|
|
9
|
-
|
|
10
|
-
const ED25519_CURVE = Buffer.from('ed25519 seed')
|
|
11
|
-
const HARDENED_OFFSET = 0x80000000
|
|
12
|
-
|
|
13
|
-
const toHex = (buffer) => Buffer.from(buffer).toString('hex')
|
|
14
|
-
|
|
15
|
-
export function derivePathFromKey (path, key) {
|
|
16
|
-
const segments = path === '' ? [] : fromString(path).toPathArray()
|
|
17
|
-
segments.forEach((segment, i) => {
|
|
18
|
-
if (segment < HARDENED_OFFSET) {
|
|
19
|
-
throw new NotHardenedSegmentError(`Segment #${i + 1} is not hardened`)
|
|
20
|
-
}
|
|
21
|
-
})
|
|
22
|
-
|
|
23
|
-
return segments.reduce((parentKey, segment) => deriveChild(parentKey, segment), key)
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
export function derivePathFromSeed (path, seed) {
|
|
27
|
-
if (!['m', 'm/'].includes(path.slice(0, 2))) {
|
|
28
|
-
throw new InvalidDerivationPathError()
|
|
29
|
-
}
|
|
30
|
-
const masterKey = getMasterKeyFromSeed(seed)
|
|
31
|
-
return derivePathFromKey(path.slice(2), masterKey)
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
function formatAccount (keys) {
|
|
35
|
-
const { secretKey, publicKey } = keys
|
|
36
|
-
return {
|
|
37
|
-
secretKey: toHex(secretKey),
|
|
38
|
-
publicKey: encode(publicKey, 'ak')
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
export function getKeyPair (secretKey) {
|
|
43
|
-
return nacl.sign.keyPair.fromSeed(secretKey)
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
export function getMasterKeyFromSeed (seed) {
|
|
47
|
-
const I = hmac(seed, ED25519_CURVE)
|
|
48
|
-
const IL = I.slice(0, 32)
|
|
49
|
-
const IR = I.slice(32)
|
|
50
|
-
return {
|
|
51
|
-
secretKey: IL,
|
|
52
|
-
chainCode: IR
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
export function deriveChild ({ secretKey, chainCode }, index) {
|
|
57
|
-
if (index < HARDENED_OFFSET) {
|
|
58
|
-
throw new UnsupportedChildIndexError(index)
|
|
59
|
-
}
|
|
60
|
-
const indexBuffer = Buffer.allocUnsafe(4)
|
|
61
|
-
indexBuffer.writeUInt32BE(index, 0)
|
|
62
|
-
|
|
63
|
-
const data = Buffer.concat([Buffer.alloc(1, 0), Buffer.from(secretKey), Buffer.from(indexBuffer)])
|
|
64
|
-
|
|
65
|
-
const I = hmac(data, chainCode)
|
|
66
|
-
const IL = I.slice(0, 32)
|
|
67
|
-
const IR = I.slice(32)
|
|
68
|
-
return {
|
|
69
|
-
secretKey: IL,
|
|
70
|
-
chainCode: IR
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
export function generateSaveHDWalletFromSeed (seed, password) {
|
|
75
|
-
const walletKey = derivePathFromSeed('m/44h/457h', seed)
|
|
76
|
-
return {
|
|
77
|
-
secretKey: toHex(encryptKey(password, walletKey.secretKey)),
|
|
78
|
-
chainCode: toHex(encryptKey(password, walletKey.chainCode))
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
export function getSaveHDWalletAccounts (saveHDWallet, password, accountCount) {
|
|
83
|
-
const walletKey = {
|
|
84
|
-
secretKey: decryptKey(password, Buffer.from(saveHDWallet.secretKey, 'hex')),
|
|
85
|
-
chainCode: decryptKey(password, Buffer.from(saveHDWallet.chainCode, 'hex'))
|
|
86
|
-
}
|
|
87
|
-
return (new Array(accountCount)).fill()
|
|
88
|
-
.map((_, idx) =>
|
|
89
|
-
formatAccount(getKeyPair(derivePathFromKey(`${idx}h/0h/0h`, walletKey).secretKey)))
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
export const getHdWalletAccountFromSeed = (seed, accountIdx) => {
|
|
93
|
-
const walletKey = derivePathFromSeed('m/44h/457h', seed)
|
|
94
|
-
const derived = derivePathFromKey(`${accountIdx}h/0h/0h`, walletKey)
|
|
95
|
-
const keyPair = getKeyPair(derived.secretKey)
|
|
96
|
-
return {
|
|
97
|
-
...formatAccount(keyPair),
|
|
98
|
-
idx: accountIdx
|
|
99
|
-
}
|
|
100
|
-
}
|
package/src/utils/json-big.js
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import JsonBig from '@aeternity/json-bigint'
|
|
2
|
-
import BigNumber from 'bignumber.js'
|
|
3
|
-
|
|
4
|
-
const jsonBig = JsonBig({ storeAsString: true })
|
|
5
|
-
|
|
6
|
-
const convertValuesToBigNumbers = value => {
|
|
7
|
-
if (typeof value === 'object' && value !== null && value.constructor === Object) {
|
|
8
|
-
return Object.entries(value)
|
|
9
|
-
.map(([key, value]) => [key, convertValuesToBigNumbers(value)])
|
|
10
|
-
.reduce((p, [k, v]) => ({ ...p, [k]: v }), {})
|
|
11
|
-
}
|
|
12
|
-
if (Array.isArray(value)) {
|
|
13
|
-
return value.map(item => convertValuesToBigNumbers(item))
|
|
14
|
-
}
|
|
15
|
-
if (typeof value === 'string' && BigNumber(value).toString(10) === value) {
|
|
16
|
-
const bn = BigNumber(value)
|
|
17
|
-
bn.toJSON = () => bn.toString(10)
|
|
18
|
-
return bn
|
|
19
|
-
}
|
|
20
|
-
return value
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export default {
|
|
24
|
-
stringify: (object, ...args) => jsonBig.stringify(convertValuesToBigNumbers(object), ...args),
|
|
25
|
-
parse: jsonBig.parse
|
|
26
|
-
}
|
package/src/utils/keystore.js
DELETED
|
@@ -1,219 +0,0 @@
|
|
|
1
|
-
import nacl from 'tweetnacl'
|
|
2
|
-
import { v4 as uuid } from '@aeternity/uuid'
|
|
3
|
-
import { ArgonType, hash } from '@aeternity/argon2-browser/dist/argon2-bundled.min.js'
|
|
4
|
-
import { encode } from '../tx/builder/helpers'
|
|
5
|
-
import { str2buf } from './bytes'
|
|
6
|
-
import {
|
|
7
|
-
ArgumentError, InvalidKeyError, UnsupportedAlgorithmError, InvalidPasswordError
|
|
8
|
-
} from './errors'
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* KeyStore module
|
|
12
|
-
* @module @aeternity/aepp-sdk/es/utils/keystore
|
|
13
|
-
* @example import { Keystore } from '@aeternity/aepp-sdk'
|
|
14
|
-
* @example const { Keystore } = require('@aeternity/aepp-sdk')
|
|
15
|
-
*/
|
|
16
|
-
|
|
17
|
-
const DEFAULTS = {
|
|
18
|
-
crypto: {
|
|
19
|
-
secret_type: 'ed25519',
|
|
20
|
-
symmetric_alg: 'xsalsa20-poly1305',
|
|
21
|
-
kdf: 'argon2id',
|
|
22
|
-
kdf_params: {
|
|
23
|
-
memlimit_kib: 65536,
|
|
24
|
-
opslimit: 3,
|
|
25
|
-
parallelism: 1
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
// DERIVED KEY PART
|
|
31
|
-
const DERIVED_KEY_FUNCTIONS = {
|
|
32
|
-
argon2id: deriveKeyUsingArgon2id
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
export async function deriveKeyUsingArgon2id (pass, salt, options) {
|
|
36
|
-
const { memlimit_kib: mem, opslimit: time } = options.kdf_params
|
|
37
|
-
|
|
38
|
-
const result = (await hash({
|
|
39
|
-
hashLen: 32,
|
|
40
|
-
pass,
|
|
41
|
-
salt,
|
|
42
|
-
time,
|
|
43
|
-
mem,
|
|
44
|
-
type: ArgonType.Argon2id
|
|
45
|
-
})).hash
|
|
46
|
-
return Buffer.from(result)
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
// CRYPTO PART
|
|
50
|
-
const CRYPTO_FUNCTIONS = {
|
|
51
|
-
'xsalsa20-poly1305': { encrypt: encryptXsalsa20Poly1305, decrypt: decryptXsalsa20Poly1305 }
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
function encryptXsalsa20Poly1305 ({ plaintext, key, nonce }) {
|
|
55
|
-
return nacl.secretbox(plaintext, nonce, key)
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
function decryptXsalsa20Poly1305 ({ ciphertext, key, nonce }) {
|
|
59
|
-
const res = nacl.secretbox.open(ciphertext, nonce, key)
|
|
60
|
-
if (!res) throw new InvalidPasswordError('Invalid password or nonce')
|
|
61
|
-
return res
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
* Symmetric private key encryption using secret (derived) key.
|
|
66
|
-
* @param {Buffer|string} plaintext Data to be encrypted.
|
|
67
|
-
* @param {Buffer|string} key Secret key.
|
|
68
|
-
* @param {Buffer|string} nonce Randomly generated nonce.
|
|
69
|
-
* @param {string=} algo Encryption algorithm (default: DEFAULTS.crypto.symmetric_alg).
|
|
70
|
-
* @return {Buffer} Encrypted data.
|
|
71
|
-
*/
|
|
72
|
-
function encrypt (plaintext, key, nonce, algo = DEFAULTS.crypto.symmetric_alg) {
|
|
73
|
-
if (!CRYPTO_FUNCTIONS[algo]) throw new UnsupportedAlgorithmError(algo)
|
|
74
|
-
return CRYPTO_FUNCTIONS[algo].encrypt({ plaintext, nonce, key })
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* Symmetric private key decryption using secret (derived) key.
|
|
79
|
-
* @param {Buffer|Uint8Array} ciphertext Data to be decrypted.
|
|
80
|
-
* @param {Buffer|Uint8Array} key Secret key.
|
|
81
|
-
* @param {Buffer|Uint8Array} nonce Nonce from key-object.
|
|
82
|
-
* @param {string=} algo Encryption algorithm.
|
|
83
|
-
* @return {Buffer} Decrypted data.
|
|
84
|
-
*/
|
|
85
|
-
function decrypt (ciphertext, key, nonce, algo) {
|
|
86
|
-
if (!CRYPTO_FUNCTIONS[algo]) throw new UnsupportedAlgorithmError(algo)
|
|
87
|
-
return CRYPTO_FUNCTIONS[algo].decrypt({ ciphertext, nonce, key })
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
/**
|
|
91
|
-
* Derive secret key from password with key derivation function.
|
|
92
|
-
* @param {string} password User-supplied password.
|
|
93
|
-
* @param {Buffer|Uint8Array} nonce Randomly generated nonce.
|
|
94
|
-
* @param {Object=} options Encryption parameters.
|
|
95
|
-
* @param {string=} options.kdf Key derivation function (default: DEFAULTS.crypto.kdf).
|
|
96
|
-
* @param {Object=} options.kdf_params KDF parameters (default: DEFAULTS.crypto.kdf_params).
|
|
97
|
-
* @return {Buffer} Secret key derived from password.
|
|
98
|
-
*/
|
|
99
|
-
async function deriveKey (password, nonce, options = {
|
|
100
|
-
kdf_params: DEFAULTS.crypto.kdf_params,
|
|
101
|
-
kdf: DEFAULTS.crypto.kdf
|
|
102
|
-
}) {
|
|
103
|
-
if (!nonce) throw new ArgumentError('nonce', 'provided', nonce)
|
|
104
|
-
if (password == null) throw new ArgumentError('password', 'provided', password)
|
|
105
|
-
|
|
106
|
-
if (!Object.prototype.hasOwnProperty.call(DERIVED_KEY_FUNCTIONS, options.kdf)) {
|
|
107
|
-
throw new UnsupportedAlgorithmError(options.kdf)
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
return DERIVED_KEY_FUNCTIONS[options.kdf](password, nonce, options)
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
/**
|
|
114
|
-
* Assemble key data object in secret-storage format.
|
|
115
|
-
* @param {Buffer} name Key name.
|
|
116
|
-
* @param {Buffer} derivedKey Password-derived secret key.
|
|
117
|
-
* @param {Buffer} privateKey Private key.
|
|
118
|
-
* @param {Buffer} nonce Randomly generated 24byte nonce.
|
|
119
|
-
* @param {Buffer} salt Randomly generated 16byte salt.
|
|
120
|
-
* @param {Object=} options Encryption parameters.
|
|
121
|
-
* @param {string=} options.kdf Key derivation function (default: argon2id).
|
|
122
|
-
* @param {string=} options.cipher Symmetric cipher (default: constants.cipher).
|
|
123
|
-
* @param {Object=} options.kdf_params KDF parameters (default: constants.<kdf>).
|
|
124
|
-
* @return {Object}
|
|
125
|
-
*/
|
|
126
|
-
function marshal (name, derivedKey, privateKey, nonce, salt, options = {}) {
|
|
127
|
-
const opt = Object.assign({}, DEFAULTS.crypto, options)
|
|
128
|
-
return Object.assign(
|
|
129
|
-
{ name, version: 1, public_key: getAddressFromPriv(privateKey), id: uuid() },
|
|
130
|
-
{
|
|
131
|
-
crypto: Object.assign(
|
|
132
|
-
{
|
|
133
|
-
secret_type: opt.secret_type,
|
|
134
|
-
symmetric_alg: opt.symmetric_alg,
|
|
135
|
-
ciphertext: Buffer.from(encrypt(Buffer.from(privateKey), derivedKey, nonce, opt.symmetric_alg)).toString('hex'),
|
|
136
|
-
cipher_params: { nonce: Buffer.from(nonce).toString('hex') }
|
|
137
|
-
},
|
|
138
|
-
{ kdf: opt.kdf, kdf_params: { ...opt.kdf_params, salt: Buffer.from(salt).toString('hex') } }
|
|
139
|
-
)
|
|
140
|
-
}
|
|
141
|
-
)
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
export function getAddressFromPriv (secret) {
|
|
145
|
-
const keys = nacl.sign.keyPair.fromSecretKey(str2buf(secret))
|
|
146
|
-
const publicBuffer = Buffer.from(keys.publicKey)
|
|
147
|
-
return encode(publicBuffer, 'ak')
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
/**
|
|
151
|
-
* Recover plaintext private key from secret-storage key object.
|
|
152
|
-
* @param {String} password Keystore object password.
|
|
153
|
-
* @param {Object} keyObject Keystore object.
|
|
154
|
-
* @return {Buffer} Plaintext private key.
|
|
155
|
-
*/
|
|
156
|
-
export async function recover (password, keyObject) {
|
|
157
|
-
validateKeyObj(keyObject)
|
|
158
|
-
const nonce = Uint8Array.from(str2buf(keyObject.crypto.cipher_params.nonce))
|
|
159
|
-
const salt = Uint8Array.from(str2buf(keyObject.crypto.kdf_params.salt))
|
|
160
|
-
const kdfParams = keyObject.crypto.kdf_params
|
|
161
|
-
const kdf = keyObject.crypto.kdf
|
|
162
|
-
|
|
163
|
-
const key = await decrypt(
|
|
164
|
-
Uint8Array.from(str2buf(keyObject.crypto.ciphertext)),
|
|
165
|
-
await deriveKey(password, salt, { kdf, kdf_params: kdfParams }),
|
|
166
|
-
nonce,
|
|
167
|
-
keyObject.crypto.symmetric_alg
|
|
168
|
-
)
|
|
169
|
-
if (!key) throw new InvalidPasswordError('Invalid password')
|
|
170
|
-
|
|
171
|
-
if (Buffer.from(key).length === 64) return Buffer.from(key).toString('hex')
|
|
172
|
-
return Buffer.from(key).toString('utf-8')
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
/**
|
|
176
|
-
* Export private key to keystore secret-storage format.
|
|
177
|
-
* @param {String} name Key name.
|
|
178
|
-
* @param {String} password User-supplied password.
|
|
179
|
-
* @param {String|Buffer} privateKey Private key as hex-string or a Buffer.
|
|
180
|
-
* @param {Buffer} nonce Randomly generated 24byte nonce.
|
|
181
|
-
* @param {Buffer} salt Randomly generated 16byte salt.
|
|
182
|
-
* @param {Object=} options Encryption parameters.
|
|
183
|
-
* @param {String=} options.kdf Key derivation function (default: pbkdf2).
|
|
184
|
-
* @param {String=} options.cipher Symmetric cipher (default: constants.cipher).
|
|
185
|
-
* @param {Object=} options.kdfparams KDF parameters (default: constants.<kdf>).
|
|
186
|
-
* @return {Object}
|
|
187
|
-
*/
|
|
188
|
-
export async function dump (
|
|
189
|
-
name,
|
|
190
|
-
password,
|
|
191
|
-
privateKey,
|
|
192
|
-
nonce = nacl.randomBytes(24),
|
|
193
|
-
salt = nacl.randomBytes(16),
|
|
194
|
-
options = {}
|
|
195
|
-
) {
|
|
196
|
-
const opt = Object.assign({}, DEFAULTS.crypto, options)
|
|
197
|
-
return marshal(
|
|
198
|
-
name,
|
|
199
|
-
await deriveKey(password, salt, opt),
|
|
200
|
-
typeof privateKey === 'string' ? Buffer.from(privateKey, 'hex') : privateKey,
|
|
201
|
-
nonce,
|
|
202
|
-
salt,
|
|
203
|
-
opt
|
|
204
|
-
)
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
export function validateKeyObj (obj) {
|
|
208
|
-
const root = ['crypto', 'id', 'version', 'public_key']
|
|
209
|
-
const cryptoKeys = ['cipher_params', 'ciphertext', 'symmetric_alg', 'kdf', 'kdf_params']
|
|
210
|
-
|
|
211
|
-
const missingRootKeys = root.filter(key => !Object.prototype.hasOwnProperty.call(obj, key))
|
|
212
|
-
if (missingRootKeys.length) throw new InvalidKeyError(`Invalid key file format. Require properties: ${missingRootKeys}`)
|
|
213
|
-
|
|
214
|
-
const missingCryptoKeys = cryptoKeys
|
|
215
|
-
.filter(key => !Object.prototype.hasOwnProperty.call(obj.crypto, key))
|
|
216
|
-
if (missingCryptoKeys.length) throw new InvalidKeyError(`Invalid key file format. Require properties: ${missingCryptoKeys}`)
|
|
217
|
-
|
|
218
|
-
return true
|
|
219
|
-
}
|