@aeternity/aepp-sdk 9.0.1 → 11.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/README.md +15 -14
- package/dist/aepp-sdk.browser-script.js +1 -1
- package/dist/aepp-sdk.browser-script.js.LICENSE.txt +7 -36
- 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/account/base.mjs +179 -0
- package/es/account/base.mjs.map +1 -0
- package/es/account/memory.mjs +99 -0
- package/es/account/memory.mjs.map +1 -0
- package/es/account/multiple.mjs +179 -0
- package/es/account/multiple.mjs.map +1 -0
- package/es/ae/aens.mjs +404 -0
- package/es/ae/aens.mjs.map +1 -0
- package/es/ae/{aepp.js → aepp.mjs} +9 -9
- package/es/ae/aepp.mjs.map +1 -0
- package/es/ae/contract.mjs +159 -0
- package/es/ae/contract.mjs.map +1 -0
- package/es/ae/index.mjs +207 -0
- package/es/ae/index.mjs.map +1 -0
- package/es/ae/oracle.mjs +339 -0
- package/es/ae/oracle.mjs.map +1 -0
- package/es/ae/{universal.js → universal.mjs} +10 -10
- package/es/ae/universal.mjs.map +1 -0
- package/es/ae/{wallet.js → wallet.mjs} +10 -10
- package/es/ae/wallet.mjs.map +1 -0
- package/es/aepp-wallet-communication/schema.d.ts +74 -0
- package/es/bignumber.d.ts +1 -7
- package/es/chain/{index.js → index.mjs} +29 -9
- package/es/chain/index.mjs.map +1 -0
- package/es/chain/node.mjs +442 -0
- package/es/chain/node.mjs.map +1 -0
- package/es/channel/handlers.mjs +1110 -0
- package/es/channel/handlers.mjs.map +1 -0
- package/es/channel/{index.js → index.mjs} +245 -472
- package/es/channel/index.mjs.map +1 -0
- package/es/channel/internal.mjs +283 -0
- package/es/channel/internal.mjs.map +1 -0
- package/es/contract/aci.mjs +477 -0
- package/es/contract/aci.mjs.map +1 -0
- package/es/contract/compiler.mjs +115 -0
- package/es/contract/compiler.mjs.map +1 -0
- package/es/contract/ga/helpers.mjs +30 -0
- package/es/contract/ga/helpers.mjs.map +1 -0
- package/es/contract/ga/index.mjs +178 -0
- package/es/contract/ga/index.mjs.map +1 -0
- package/es/errors.d.ts +284 -0
- package/es/index.mjs +57 -0
- package/es/index.mjs.map +1 -0
- package/es/node-pool/index.mjs +188 -0
- package/es/node-pool/index.mjs.map +1 -0
- package/es/node.mjs +133 -0
- package/es/node.mjs.map +1 -0
- package/es/other.d.ts +1 -1
- package/es/tx/builder/field-types.mjs +74 -0
- package/es/tx/builder/field-types.mjs.map +1 -0
- package/es/tx/builder/helpers.mjs +363 -0
- package/es/tx/builder/helpers.mjs.map +1 -0
- package/es/tx/builder/index.mjs +606 -0
- package/es/tx/builder/index.mjs.map +1 -0
- package/es/tx/builder/schema.mjs +760 -0
- package/es/tx/builder/schema.mjs.map +1 -0
- package/es/tx/{index.js → index.mjs} +107 -15
- package/es/tx/index.mjs.map +1 -0
- package/es/tx/tx-object.mjs +283 -0
- package/es/tx/tx-object.mjs.map +1 -0
- package/es/tx/tx.mjs +938 -0
- package/es/tx/tx.mjs.map +1 -0
- package/es/tx/validator.mjs +247 -0
- package/es/tx/validator.mjs.map +1 -0
- package/es/typings/blakejs/index.d.mjs +2 -0
- package/es/typings/blakejs/{index.d.js.map → index.d.mjs.map} +1 -1
- package/es/utils/aepp-wallet-communication/connection/{browser-runtime.js → browser-runtime.mjs} +27 -29
- package/es/utils/aepp-wallet-communication/connection/browser-runtime.mjs.map +1 -0
- package/es/utils/aepp-wallet-communication/connection/browser-window-message.mjs +183 -0
- package/es/utils/aepp-wallet-communication/connection/browser-window-message.mjs.map +1 -0
- package/es/utils/aepp-wallet-communication/connection/{index.js → index.mjs} +7 -3
- package/es/utils/aepp-wallet-communication/connection/index.mjs.map +1 -0
- package/es/utils/aepp-wallet-communication/{content-script-bridge.js → content-script-bridge.mjs} +29 -23
- package/es/utils/aepp-wallet-communication/content-script-bridge.mjs.map +1 -0
- package/es/utils/aepp-wallet-communication/helpers.mjs +92 -0
- package/es/utils/aepp-wallet-communication/helpers.mjs.map +1 -0
- package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.mjs +375 -0
- package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.mjs.map +1 -0
- package/es/utils/aepp-wallet-communication/rpc/rpc-client.mjs +275 -0
- package/es/utils/aepp-wallet-communication/rpc/rpc-client.mjs.map +1 -0
- package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.mjs +541 -0
- package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.mjs.map +1 -0
- package/es/utils/aepp-wallet-communication/schema.mjs +102 -0
- package/es/utils/aepp-wallet-communication/schema.mjs.map +1 -0
- package/es/utils/aepp-wallet-communication/wallet-detector.mjs +110 -0
- package/es/utils/aepp-wallet-communication/wallet-detector.mjs.map +1 -0
- package/es/utils/amount-formatter.mjs +139 -0
- package/es/utils/amount-formatter.mjs.map +1 -0
- package/es/utils/async-init.mjs +64 -0
- package/es/utils/async-init.mjs.map +1 -0
- package/es/utils/bignumber.mjs +21 -0
- package/es/utils/bignumber.mjs.map +1 -0
- package/es/utils/{bytes.js → bytes.mjs} +16 -12
- package/es/utils/bytes.mjs.map +1 -0
- package/es/utils/{crypto-ts.js → crypto-ts.mjs} +11 -3
- package/es/utils/crypto-ts.mjs.map +1 -0
- package/es/utils/crypto.mjs +239 -0
- package/es/utils/crypto.mjs.map +1 -0
- package/es/utils/errors.mjs +689 -0
- package/es/utils/errors.mjs.map +1 -0
- package/es/utils/hd-wallet.mjs +111 -0
- package/es/utils/hd-wallet.mjs.map +1 -0
- package/es/utils/json-big.mjs +45 -0
- package/es/utils/json-big.mjs.map +1 -0
- package/es/utils/keystore.mjs +240 -0
- package/es/utils/keystore.mjs.map +1 -0
- package/es/utils/mptree.mjs +161 -0
- package/es/utils/mptree.mjs.map +1 -0
- package/es/utils/other.mjs +43 -0
- package/es/utils/other.mjs.map +1 -0
- package/es/utils/semver-satisfies.mjs +16 -0
- package/es/utils/semver-satisfies.mjs.map +1 -0
- package/es/utils/{string.js → string.mjs} +5 -14
- package/es/utils/string.mjs.map +1 -0
- package/es/utils/swagger.mjs +164 -0
- package/es/utils/swagger.mjs.map +1 -0
- package/package.json +55 -62
- package/src/account/base.js +3 -1
- package/src/account/memory.js +13 -8
- package/src/account/multiple.js +31 -22
- package/src/ae/aens.js +75 -77
- package/src/ae/aepp.js +2 -2
- package/src/ae/contract.js +27 -291
- package/src/ae/index.js +9 -7
- package/src/ae/oracle.js +51 -28
- package/src/ae/universal.js +4 -2
- package/src/ae/wallet.js +2 -2
- package/src/chain/index.js +29 -6
- package/src/chain/node.js +95 -67
- package/src/channel/handlers.js +30 -21
- package/src/channel/index.js +44 -20
- package/src/channel/internal.js +30 -24
- package/src/contract/aci.js +376 -0
- package/src/contract/compiler.js +41 -91
- package/src/contract/ga/helpers.js +10 -13
- package/src/contract/ga/index.js +42 -33
- package/src/index.js +9 -10
- package/src/node-pool/index.js +29 -17
- package/src/node.js +33 -36
- package/src/tx/builder/field-types.js +61 -0
- package/src/tx/builder/helpers.js +126 -84
- package/src/tx/builder/index.js +83 -41
- package/src/tx/builder/schema.js +50 -40
- package/src/tx/index.js +101 -12
- package/src/tx/tx-object.js +35 -15
- package/src/tx/tx.js +232 -153
- package/src/tx/validator.js +34 -12
- package/src/utils/aepp-wallet-communication/connection/browser-runtime.js +11 -5
- package/src/utils/aepp-wallet-communication/connection/browser-window-message.js +35 -13
- package/src/utils/aepp-wallet-communication/connection/index.js +2 -1
- package/src/utils/aepp-wallet-communication/content-script-bridge.js +14 -7
- package/src/utils/aepp-wallet-communication/helpers.js +6 -14
- package/src/utils/aepp-wallet-communication/rpc/aepp-rpc.js +107 -60
- package/src/utils/aepp-wallet-communication/rpc/rpc-client.js +24 -11
- package/src/utils/aepp-wallet-communication/rpc/wallet-rpc.js +98 -56
- package/src/utils/aepp-wallet-communication/schema.ts +80 -0
- package/src/utils/aepp-wallet-communication/wallet-detector.js +6 -2
- package/src/utils/amount-formatter.ts +4 -3
- package/src/utils/async-init.js +10 -6
- package/src/utils/bignumber.ts +3 -10
- package/src/utils/bytes.ts +3 -2
- package/src/utils/crypto-ts.ts +2 -2
- package/src/utils/crypto.js +10 -144
- package/src/utils/errors.ts +683 -0
- package/src/utils/hd-wallet.js +11 -26
- package/src/utils/keystore.js +57 -53
- package/src/utils/mptree.ts +12 -6
- package/src/utils/other.ts +1 -1
- package/src/utils/semver-satisfies.ts +1 -1
- package/src/utils/swagger.js +75 -45
- package/es/account/base.js +0 -259
- package/es/account/base.js.map +0 -1
- package/es/account/memory.js +0 -86
- package/es/account/memory.js.map +0 -1
- package/es/account/multiple.js +0 -267
- package/es/account/multiple.js.map +0 -1
- package/es/ae/aens.js +0 -829
- package/es/ae/aens.js.map +0 -1
- package/es/ae/aepp.js.map +0 -1
- package/es/ae/contract.js +0 -985
- package/es/ae/contract.js.map +0 -1
- package/es/ae/index.js +0 -442
- package/es/ae/index.js.map +0 -1
- package/es/ae/oracle.js +0 -690
- package/es/ae/oracle.js.map +0 -1
- package/es/ae/universal.js.map +0 -1
- package/es/ae/wallet.js.map +0 -1
- package/es/chain/index.js.map +0 -1
- package/es/chain/node.js +0 -1119
- package/es/chain/node.js.map +0 -1
- package/es/channel/handlers.js +0 -1601
- package/es/channel/handlers.js.map +0 -1
- package/es/channel/index.js.map +0 -1
- package/es/channel/internal.js +0 -438
- package/es/channel/internal.js.map +0 -1
- package/es/contract/aci/helpers.js +0 -298
- package/es/contract/aci/helpers.js.map +0 -1
- package/es/contract/aci/index.js +0 -517
- package/es/contract/aci/index.js.map +0 -1
- package/es/contract/aci/transformation.js +0 -742
- package/es/contract/aci/transformation.js.map +0 -1
- package/es/contract/compiler.js +0 -316
- package/es/contract/compiler.js.map +0 -1
- package/es/contract/ga/helpers.js +0 -120
- package/es/contract/ga/helpers.js.map +0 -1
- package/es/contract/ga/index.js +0 -307
- package/es/contract/ga/index.js.map +0 -1
- package/es/contract/index.js +0 -158
- package/es/contract/index.js.map +0 -1
- package/es/index.js +0 -57
- package/es/index.js.map +0 -1
- package/es/node-pool/index.js +0 -204
- package/es/node-pool/index.js.map +0 -1
- package/es/node.js +0 -228
- package/es/node.js.map +0 -1
- package/es/tx/builder/helpers.js +0 -355
- package/es/tx/builder/helpers.js.map +0 -1
- package/es/tx/builder/index.js +0 -686
- package/es/tx/builder/index.js.map +0 -1
- package/es/tx/builder/schema.js +0 -695
- package/es/tx/builder/schema.js.map +0 -1
- package/es/tx/index.js.map +0 -1
- package/es/tx/tx-object.js +0 -297
- package/es/tx/tx-object.js.map +0 -1
- package/es/tx/tx.js +0 -1757
- package/es/tx/tx.js.map +0 -1
- package/es/tx/validator.js +0 -344
- package/es/tx/validator.js.map +0 -1
- package/es/typings/blakejs/index.d.js +0 -2
- package/es/utils/aepp-wallet-communication/connection/browser-runtime.js.map +0 -1
- package/es/utils/aepp-wallet-communication/connection/browser-window-message.js +0 -211
- package/es/utils/aepp-wallet-communication/connection/browser-window-message.js.map +0 -1
- package/es/utils/aepp-wallet-communication/connection/index.js.map +0 -1
- package/es/utils/aepp-wallet-communication/content-script-bridge.js.map +0 -1
- package/es/utils/aepp-wallet-communication/helpers.js +0 -148
- package/es/utils/aepp-wallet-communication/helpers.js.map +0 -1
- package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.js +0 -652
- package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.js.map +0 -1
- package/es/utils/aepp-wallet-communication/rpc/rpc-client.js +0 -285
- package/es/utils/aepp-wallet-communication/rpc/rpc-client.js.map +0 -1
- package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.js +0 -763
- package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.js.map +0 -1
- package/es/utils/aepp-wallet-communication/schema.js +0 -103
- package/es/utils/aepp-wallet-communication/schema.js.map +0 -1
- package/es/utils/aepp-wallet-communication/wallet-detector.js +0 -135
- package/es/utils/aepp-wallet-communication/wallet-detector.js.map +0 -1
- package/es/utils/amount-formatter.js +0 -152
- package/es/utils/amount-formatter.js.map +0 -1
- package/es/utils/async-init.js +0 -103
- package/es/utils/async-init.js.map +0 -1
- package/es/utils/bignumber.js +0 -36
- package/es/utils/bignumber.js.map +0 -1
- package/es/utils/bytes.js.map +0 -1
- package/es/utils/crypto-ts.js.map +0 -1
- package/es/utils/crypto.js +0 -358
- package/es/utils/crypto.js.map +0 -1
- package/es/utils/hd-wallet.js +0 -148
- package/es/utils/hd-wallet.js.map +0 -1
- package/es/utils/json-big.js +0 -78
- package/es/utils/json-big.js.map +0 -1
- package/es/utils/keystore.js +0 -393
- package/es/utils/keystore.js.map +0 -1
- package/es/utils/mptree.js +0 -198
- package/es/utils/mptree.js.map +0 -1
- package/es/utils/other.js +0 -93
- package/es/utils/other.js.map +0 -1
- package/es/utils/semver-satisfies.js +0 -35
- package/es/utils/semver-satisfies.js.map +0 -1
- package/es/utils/string.js.map +0 -1
- package/es/utils/swagger.js +0 -269
- package/es/utils/swagger.js.map +0 -1
- package/src/contract/aci/helpers.js +0 -140
- package/src/contract/aci/index.js +0 -191
- package/src/contract/aci/transformation.js +0 -464
- package/src/contract/index.js +0 -159
- package/src/utils/aepp-wallet-communication/schema.js +0 -110
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/errors.ts"],"names":["BaseError","Error","constructor","message","name","AccountError","AensError","AeppError","ChannelError","CompilerError","ContractError","CryptographyError","NodeError","TransactionError","WalletError","ArgumentError","argumentName","requirement","argumentValue","IllegalArgumentError","ArgumentCountMismatchError","functionName","requiredCount","providedCount","InsufficientBalanceError","InvalidDenominationError","InvalidNameError","MissingParamError","NoBrowserFoundError","NoSerializerFoundError","RequestTimedOutError","requestTime","currentHeight","height","undefined","TxTimedOutError","blocks","th","status","join","TypeError","UnsupportedPlatformError","UnsupportedProtocolError","NotImplementedError","UnsupportedVersionError","dependency","version","geVersion","ltVersion","InternalError","InvalidKeypairError","UnavailableAccountError","address","AensPointerContextError","nameOrId","prefix","InsufficientNameFeeError","nameFee","minNameFee","InvalidAensNameError","DuplicateCallbackError","InvalidRpcMessageError","MissingCallbackError","id","UnAuthorizedAccountError","onAccount","UnknownRpcClientError","UnsubscribedAccountError","ChannelCallError","ChannelConnectionError","ChannelPingTimedOutError","UnexpectedChannelMessageError","UnknownChannelStateError","InvalidAuthDataError","BytecodeMismatchError","source","DuplicateContractError","InactiveContractError","contractAddress","InvalidMethodInvocationError","MissingContractAddressError","MissingContractDefError","MissingFunctionNameError","NodeInvocationError","NoSuchContractFunctionError","NotPayableFunctionError","amount","fn","MissingEventDefinitionError","eventNameHash","eventAddress","AmbiguousEventDefinitionError","matchedEvents","map","InvalidChecksumError","InvalidDerivationPathError","InvalidKeyError","InvalidPasswordError","MerkleTreeHashMismatchError","MissingNodeInTreeError","UnsupportedAlgorithmError","algo","NotHardenedSegmentError","UnknownNodeLengthError","nodeLength","UnknownPathNibbleError","nibble","UnsupportedChildIndexError","index","DisconnectedError","DuplicateNodeError","NodeNotFoundError","DecodeError","EncodeError","PayloadLengthError","DryRunError","IllegalBidFeeError","InvalidSignatureError","InvalidTxError","InvalidTxParamsError","NoDefaultAensPointerError","PrefixMismatchError","requiredPrefix","PrefixNotFoundError","tag","SchemaNotFoundError","TagNotFoundError","TxNotInChainError","txHash","UnknownTxError","UnsupportedABIversionError","UnsupportedVMversionError","AlreadyConnectedError","MessageDirectionError","NoWalletConnectedError","RpcConnectionError"],"mappings":"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","sourcesContent":["/**\n * Error module\n * @module @aeternity/aepp-sdk/es/utils/errors\n * @example import { BytecodeMismatchError } from '@aeternity/aepp-sdk'\n */\n\n/**\n * aepp-sdk originated error\n */\nexport abstract class BaseError extends Error {\n constructor (message: string) {\n super(message)\n this.name = 'BaseError'\n }\n}\n\nexport class AccountError extends BaseError {\n constructor (message: string) {\n super(message)\n this.name = 'AccountError'\n }\n}\n\nexport class AensError extends BaseError {\n constructor (message: string) {\n super(message)\n this.name = 'AensError'\n }\n}\n\nexport class AeppError extends BaseError {\n constructor (message: string) {\n super(message)\n this.name = 'AeppError'\n }\n}\n\nexport class ChannelError extends BaseError {\n constructor (message: string) {\n super(message)\n this.name = 'ChannelError'\n }\n}\n\nexport class CompilerError extends BaseError {\n constructor (message: string) {\n super(message)\n this.name = 'CompilerError'\n }\n}\n\nexport class ContractError extends BaseError {\n constructor (message: string) {\n super(message)\n this.name = 'ContractError'\n }\n}\n\nexport class CryptographyError extends BaseError {\n constructor (message: string) {\n super(message)\n this.name = 'CryptographyError'\n }\n}\n\nexport class NodeError extends BaseError {\n constructor (message: string) {\n super(message)\n this.name = 'NodeError'\n }\n}\n\nexport class TransactionError extends BaseError {\n constructor (message: string) {\n super(message)\n this.name = 'TransactionError'\n }\n}\n\nexport class WalletError extends BaseError {\n constructor (message: string) {\n super(message)\n this.name = 'WalletError'\n }\n}\n\n/* Common error patterns */\nexport class ArgumentError extends BaseError {\n constructor (argumentName: string, requirement: string, argumentValue: any) {\n super(`${argumentName} should be ${requirement}, got ${argumentValue} instead`)\n this.name = 'ArgumentError'\n }\n}\n\nexport class IllegalArgumentError extends CryptographyError {\n constructor (message: string) {\n super(message)\n this.name = 'IllegalArgumentError'\n }\n}\n\nexport class ArgumentCountMismatchError extends BaseError {\n constructor (functionName: string, requiredCount: number, providedCount: number) {\n super(`${functionName} expects ${requiredCount} arguments, got ${providedCount} instead`)\n this.name = 'ArgumentCountMismatchError'\n }\n}\n\nexport class InsufficientBalanceError extends BaseError {\n constructor (message: string) {\n super(message)\n this.name = 'InsufficientBalanceError'\n }\n}\n\nexport class InvalidDenominationError extends BaseError {\n constructor (message: string) {\n super(message)\n this.name = 'InvalidDenominationError'\n }\n}\n\nexport class InvalidNameError extends BaseError {\n constructor (message: string) {\n super(message)\n this.name = 'InvalidNameError'\n }\n}\n\nexport class MissingParamError extends BaseError {\n constructor (message: string) {\n super(message)\n this.name = 'MissingParamError'\n }\n}\n\nexport class NoBrowserFoundError extends BaseError {\n constructor () {\n super('Browser is not detected')\n this.name = 'NoBrowserFoundError'\n }\n}\n\nexport class NoSerializerFoundError extends BaseError {\n constructor () {\n super('Byte serialization not supported')\n this.name = 'NoSerializerFoundError'\n }\n}\n\nexport class RequestTimedOutError extends BaseError {\n constructor (requestTime: number);\n constructor (requestTime: number, currentHeight?: number, height?: number) {\n if (currentHeight !== undefined && height !== undefined) {\n super(`Giving up after ${requestTime}ms, current height: ${currentHeight}, desired height: ${height}`)\n } else {\n super(`Giving up after ${requestTime} ms`)\n }\n this.name = 'RequestTimedOutError'\n }\n}\n\nexport class TxTimedOutError extends BaseError {\n constructor (blocks: number, th: string, status?: string) {\n super([\n `Giving up after ${blocks} blocks mined`,\n `transaction hash: ${th}`,\n ...status ? [`status: ${status}`] : []\n ].join(', '))\n this.name = 'TxTimedOutError'\n }\n}\n\nexport class TypeError extends BaseError {\n constructor (message: string) {\n super(message)\n this.name = 'TypeError'\n }\n}\n\nexport class UnsupportedPlatformError extends BaseError {\n constructor (message: string) {\n super(message)\n this.name = 'UnsupportedPlatformError'\n }\n}\n\nexport class UnsupportedProtocolError extends BaseError {\n constructor (message: string) {\n super(message)\n this.name = 'UnsupportedProtocolError'\n }\n}\n\nexport class NotImplementedError extends BaseError {\n constructor (message: string) {\n super(message)\n this.name = 'NotImplementedError'\n }\n}\n\nexport class UnsupportedVersionError extends BaseError {\n constructor (dependency: string, version: string, geVersion: string, ltVersion: string) {\n super(`Unsupported ${dependency} version ${version}. Supported: >= ${geVersion} < ${ltVersion}`)\n this.name = 'UnsupportedVersionError'\n }\n}\n\nexport class InternalError extends BaseError {\n constructor (message: string) {\n super(message)\n this.name = 'InternalError'\n }\n}\n\n/* keypair an account related errors */\nexport class InvalidKeypairError extends AccountError {\n constructor (message: string) {\n super(message)\n this.name = 'InvalidKeypairError'\n }\n}\n\nexport class UnavailableAccountError extends AccountError {\n constructor (address: string) {\n super(`Account for ${address} not available`)\n this.name = 'UnavailableAccountError'\n }\n}\n\n/* errors originating from AENS operation */\nexport class AensPointerContextError extends AensError {\n constructor (nameOrId: string, prefix: string) {\n super(`Name ${nameOrId} don't have pointers for ${prefix}`)\n this.name = 'AensPointerContextError'\n }\n}\n\nexport class InsufficientNameFeeError extends AensError {\n constructor (nameFee: number, minNameFee: number) {\n super(`the provided fee ${nameFee} is not enough to execute the claim, required: ${minNameFee}`)\n this.name = 'InsufficientNameFeeError'\n }\n}\n\nexport class InvalidAensNameError extends AensError {\n constructor (message: string) {\n super(message)\n this.name = 'InvalidAensNameError'\n }\n}\n\n/* Aepp Errors */\nexport class DuplicateCallbackError extends AeppError {\n constructor () {\n super('Callback Already exist')\n this.name = 'DuplicateCallbackError'\n }\n}\n\nexport class InvalidRpcMessageError extends AeppError {\n constructor (message: string) {\n super(`Received invalid message: ${message}`)\n this.name = 'InvalidRpcMessageError'\n }\n}\n\nexport class MissingCallbackError extends AeppError {\n constructor (id: string) {\n super(`Can't find callback for this messageId ${id}`)\n this.name = 'MissingCallbackError'\n }\n}\n\nexport class UnAuthorizedAccountError extends AeppError {\n constructor (onAccount: string) {\n super(`You do not have access to account ${onAccount}`)\n this.name = 'UnAuthorizedAccountError'\n }\n}\n\nexport class UnknownRpcClientError extends AeppError {\n constructor (id: string) {\n super(`RpcClient with id ${id} do not exist`)\n this.name = 'UnknownRpcClientError'\n }\n}\n\nexport class UnsubscribedAccountError extends AeppError {\n constructor () {\n super('You are not subscribed for an account.')\n this.name = 'UnsubscribedAccountError'\n }\n}\n\n/* Channel originated errors */\nexport class ChannelCallError extends ChannelError {\n constructor (message: string) {\n super(message)\n this.name = 'ChannelCallError'\n }\n}\n\nexport class ChannelConnectionError extends ChannelError {\n constructor (message: string) {\n super(message)\n this.name = 'ChannelConnectionError'\n }\n}\n\nexport class ChannelPingTimedOutError extends ChannelError {\n constructor () {\n super('Server pong timed out')\n this.name = 'ChannelPingTimedOutError'\n }\n}\n\nexport class UnexpectedChannelMessageError extends ChannelError {\n constructor (message: string) {\n super(message)\n this.name = 'UnexpectedChannelMessageError'\n }\n}\n\nexport class UnknownChannelStateError extends ChannelError {\n constructor () {\n super('State Channels FSM entered unknown state')\n this.name = 'UnknownChannelStateError'\n }\n}\n\n/* compiler issued errors */\n/* errors from option validations */\nexport class InvalidAuthDataError extends CompilerError {\n constructor (message: string) {\n super(message)\n this.name = 'InvalidAuthDataError'\n }\n}\n\n/* contract invocation errors */\nexport class BytecodeMismatchError extends ContractError {\n constructor (source: string) {\n super(`Contract ${source} do not correspond to the bytecode deployed on the chain`)\n this.name = 'BytecodeMismatchError'\n }\n}\n\nexport class DuplicateContractError extends ContractError {\n constructor () {\n super('Contract already deployed')\n this.name = 'DuplicateContractError'\n }\n}\n\nexport class InactiveContractError extends ContractError {\n constructor (contractAddress: string) {\n super(`Contract with address ${contractAddress} not active`)\n this.name = 'InactiveContractError'\n }\n}\n\nexport class InvalidMethodInvocationError extends ContractError {\n constructor (message: string) {\n super(message)\n this.name = 'InvalidMethodInvocationError'\n }\n}\n\nexport class MissingContractAddressError extends ContractError {\n constructor (message: string) {\n super(message)\n this.name = 'MissingContractAddressError'\n }\n}\n\nexport class MissingContractDefError extends ContractError {\n constructor () {\n super('Either ACI or source code is required')\n this.name = 'MissingContractDefError'\n }\n}\n\nexport class MissingFunctionNameError extends ContractError {\n constructor () {\n super('Function name is required')\n this.name = 'MissingFunctionNameError'\n }\n}\n\nexport class NodeInvocationError extends ContractError {\n constructor (message?: string) {\n message = message ?? ''\n super(`Invocation failed${message === '' ? '' : `: \"${message}\"`}`)\n this.name = 'NodeInvocationError'\n }\n}\n\nexport class NoSuchContractFunctionError extends ContractError {\n constructor (name: string) {\n super(`Function ${name} doesn't exist in contract`)\n this.name = 'NoSuchContractFunctionError'\n }\n}\n\nexport class NotPayableFunctionError extends ContractError {\n constructor (amount: string, fn: string) {\n super(\n `You try to pay \"${amount}\" to function \"${fn}\" which is not payable. ` +\n 'Only payable function can accept tokens')\n this.name = 'NotPayableFunctionError'\n }\n}\n\nexport class MissingEventDefinitionError extends ContractError {\n constructor (eventNameHash: string, eventAddress: string) {\n super(\n `Can't find definition of ${eventNameHash} event emitted by ${eventAddress}` +\n ' (use omitUnknown option to ignore events like this)'\n )\n this.name = 'MissingEventDefinitionError'\n }\n}\n\nexport class AmbiguousEventDefinitionError extends ContractError {\n constructor (eventAddress: string, matchedEvents: [string, string][]) {\n super(\n `Found multiple definitions of \"${matchedEvents[0][1]}\" event emitted by ${eventAddress}` +\n ` in ${matchedEvents.map(([name]) => `\"${name}\"`).join(', ')} contracts` +\n ' (use contractAddressToName option to specify contract name corresponding to address)'\n )\n this.name = 'AmbiguousEventDefinitionError'\n }\n}\n\n/* cryptography errors */\nexport class InvalidChecksumError extends CryptographyError {\n constructor () {\n super('Invalid checksum')\n this.name = 'InvalidChecksumError'\n }\n}\n\nexport class InvalidDerivationPathError extends CryptographyError {\n constructor () {\n super('Invalid path')\n this.name = 'InvalidDerivationPathError'\n }\n}\n\nexport class InvalidKeyError extends CryptographyError {\n constructor (message: string) {\n super(message)\n this.name = 'InvalidKeyError'\n }\n}\n\nexport class InvalidPasswordError extends CryptographyError {\n constructor (message: string) {\n super(message)\n this.name = 'InvalidPasswordError'\n }\n}\n\nexport class MerkleTreeHashMismatchError extends CryptographyError {\n constructor () {\n super('Node hash is not equal to provided one')\n this.name = 'MerkleTreeHashMismatchError'\n }\n}\n\nexport class MissingNodeInTreeError extends CryptographyError {\n constructor (message: string) {\n super(message)\n this.name = 'MissingNodeInTreeError'\n }\n}\n\nexport class UnsupportedAlgorithmError extends CryptographyError {\n constructor (algo: string) {\n super(algo + ' is not available')\n this.name = 'UnsupportedAlgorithmError'\n }\n}\n\nexport class NotHardenedSegmentError extends CryptographyError {\n constructor (message: string) {\n super(message)\n this.name = 'NotHardenedSegmentError'\n }\n}\n\nexport class UnknownNodeLengthError extends CryptographyError {\n constructor (nodeLength: number) {\n super(`Unknown node length: ${nodeLength}`)\n this.name = 'UnknownNodeLengthError'\n }\n}\n\nexport class UnknownPathNibbleError extends CryptographyError {\n constructor (nibble: number) {\n super(`Unknown path nibble: ${nibble}`)\n this.name = 'UnknownPathNibbleError'\n }\n}\n\nexport class UnsupportedChildIndexError extends CryptographyError {\n constructor (index: string) {\n super(`Child index #${index} is not supported`)\n this.name = 'UnsupportedChildIndexError'\n }\n}\n\n/* Node errors */\nexport class DisconnectedError extends NodeError {\n constructor () {\n super('Can not get node info. Node is not connected')\n this.name = 'DisconnectedError'\n }\n}\n\nexport class DuplicateNodeError extends NodeError {\n constructor (name: string) {\n super(`Node with name ${name} already exist`)\n this.name = 'DuplicateNodeError'\n }\n}\n\nexport class NodeNotFoundError extends NodeError {\n constructor (message: string) {\n super(message)\n this.name = 'NodeNotFoundError'\n }\n}\n\n/* transaction related errors */\nexport class DecodeError extends TransactionError {\n constructor (message: string) {\n super(message)\n this.name = 'DecodeError'\n }\n}\n\nexport class EncodeError extends TransactionError {\n constructor (message: string) {\n super(message)\n this.name = 'EncodeError'\n }\n}\n\nexport class PayloadLengthError extends TransactionError {\n constructor (message: string) {\n super(message)\n this.name = 'PayloadLengthError'\n }\n}\n\nexport class DryRunError extends TransactionError {\n constructor (message: string) {\n super(message)\n this.name = 'DryRunError'\n }\n}\n\nexport class IllegalBidFeeError extends TransactionError {\n constructor (message: string) {\n super(message)\n this.name = 'IllegalBidFeeError'\n }\n}\n\nexport class InvalidSignatureError extends TransactionError {\n constructor (message: string) {\n super(message)\n this.name = 'InvalidSignatureError'\n }\n}\n\nexport class InvalidTxError extends TransactionError {\n constructor (message: string) {\n super(message)\n this.name = 'InvalidTxError'\n }\n}\n\nexport class InvalidTxParamsError extends TransactionError {\n constructor (message: string) {\n super(message)\n this.name = 'InvalidTxParamsError'\n }\n}\n\nexport class NoDefaultAensPointerError extends TransactionError {\n constructor (prefix: string) {\n super(`Default AENS pointer key is not defined for ${prefix} prefix`)\n this.name = 'NoDefaultAensPointerError'\n }\n}\n\nexport class PrefixMismatchError extends TransactionError {\n constructor (prefix: string, requiredPrefix: string) {\n super(`Encoded string have a wrong type: ${prefix} (expected: ${requiredPrefix})`)\n this.name = 'PrefixMismatchError'\n }\n}\n\nexport class PrefixNotFoundError extends TransactionError {\n constructor (tag: string) {\n super(`Prefix for id-tag ${tag} not found.`)\n this.name = 'PrefixNotFoundError'\n }\n}\n\nexport class SchemaNotFoundError extends TransactionError {\n constructor (message: string) {\n super(message)\n this.name = 'SchemaNotFoundError'\n }\n}\n\nexport class TagNotFoundError extends TransactionError {\n constructor (prefix: string) {\n super(`Id tag for prefix ${prefix} not found.`)\n this.name = 'DecodeError'\n }\n}\n\nexport class TxNotInChainError extends TransactionError {\n constructor (txHash: string) {\n super(`Transaction ${txHash} is removed from chain`)\n this.name = 'TxNotInChainError'\n }\n}\n\nexport class UnknownTxError extends TransactionError {\n constructor (message: string) {\n super(message)\n this.name = 'UnknownTxError'\n }\n}\n\nexport class UnsupportedABIversionError extends TransactionError {\n constructor (message: string) {\n super(message)\n this.name = 'UnsupportedABIversionError'\n }\n}\n\nexport class UnsupportedVMversionError extends TransactionError {\n constructor (message: string) {\n super(message)\n this.name = 'UnsupportedVMversionError'\n }\n}\n\n/* Wallet Errors */\nexport class AlreadyConnectedError extends WalletError {\n constructor (message: string) {\n super(message)\n this.name = 'AlreadyConnectedError'\n }\n}\n\nexport class MessageDirectionError extends WalletError {\n constructor (message: string) {\n super(message)\n this.name = 'MessageDirectionError'\n }\n}\n\nexport class NoWalletConnectedError extends WalletError {\n constructor (message: string) {\n super(message)\n this.name = 'NoWalletConnectedError'\n }\n}\n\nexport class RpcConnectionError extends WalletError {\n constructor (message: string) {\n super(message)\n this.name = 'RpcConnectionError'\n }\n}\n"],"file":"errors.mjs"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import _buffer from "buffer";
|
|
2
|
+
const {
|
|
3
|
+
Buffer: _Buffer
|
|
4
|
+
} = _buffer;
|
|
5
|
+
import nacl from 'tweetnacl';
|
|
6
|
+
import _tweetnaclAuth from 'tweetnacl-auth';
|
|
7
|
+
const {
|
|
8
|
+
full: hmac
|
|
9
|
+
} = _tweetnaclAuth;
|
|
10
|
+
import _bip32Path from 'bip32-path';
|
|
11
|
+
const {
|
|
12
|
+
fromString
|
|
13
|
+
} = _bip32Path;
|
|
14
|
+
import { decryptKey, encryptKey } from "./crypto.mjs";
|
|
15
|
+
import { encode } from "../tx/builder/helpers.mjs";
|
|
16
|
+
import { InvalidDerivationPathError, NotHardenedSegmentError, UnsupportedChildIndexError } from "./errors.mjs";
|
|
17
|
+
|
|
18
|
+
const ED25519_CURVE = _Buffer.from('ed25519 seed');
|
|
19
|
+
|
|
20
|
+
const HARDENED_OFFSET = 0x80000000;
|
|
21
|
+
|
|
22
|
+
const toHex = buffer => _Buffer.from(buffer).toString('hex');
|
|
23
|
+
|
|
24
|
+
export function derivePathFromKey(path, key) {
|
|
25
|
+
const segments = path === '' ? [] : fromString(path).toPathArray();
|
|
26
|
+
segments.forEach((segment, i) => {
|
|
27
|
+
if (segment < HARDENED_OFFSET) {
|
|
28
|
+
throw new NotHardenedSegmentError(`Segment #${i + 1} is not hardened`);
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
return segments.reduce((parentKey, segment) => deriveChild(parentKey, segment), key);
|
|
32
|
+
}
|
|
33
|
+
export function derivePathFromSeed(path, seed) {
|
|
34
|
+
if (!['m', 'm/'].includes(path.slice(0, 2))) {
|
|
35
|
+
throw new InvalidDerivationPathError();
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
const masterKey = getMasterKeyFromSeed(seed);
|
|
39
|
+
return derivePathFromKey(path.slice(2), masterKey);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function formatAccount(keys) {
|
|
43
|
+
const {
|
|
44
|
+
secretKey,
|
|
45
|
+
publicKey
|
|
46
|
+
} = keys;
|
|
47
|
+
return {
|
|
48
|
+
secretKey: toHex(secretKey),
|
|
49
|
+
publicKey: encode(publicKey, 'ak')
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export function getKeyPair(secretKey) {
|
|
54
|
+
return nacl.sign.keyPair.fromSeed(secretKey);
|
|
55
|
+
}
|
|
56
|
+
export function getMasterKeyFromSeed(seed) {
|
|
57
|
+
const I = hmac(seed, ED25519_CURVE);
|
|
58
|
+
const IL = I.slice(0, 32);
|
|
59
|
+
const IR = I.slice(32);
|
|
60
|
+
return {
|
|
61
|
+
secretKey: IL,
|
|
62
|
+
chainCode: IR
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
export function deriveChild(_ref, index) {
|
|
66
|
+
let {
|
|
67
|
+
secretKey,
|
|
68
|
+
chainCode
|
|
69
|
+
} = _ref;
|
|
70
|
+
|
|
71
|
+
if (index < HARDENED_OFFSET) {
|
|
72
|
+
throw new UnsupportedChildIndexError(index);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
const indexBuffer = _Buffer.allocUnsafe(4);
|
|
76
|
+
|
|
77
|
+
indexBuffer.writeUInt32BE(index, 0);
|
|
78
|
+
|
|
79
|
+
const data = _Buffer.concat([_Buffer.alloc(1, 0), _Buffer.from(secretKey), _Buffer.from(indexBuffer)]);
|
|
80
|
+
|
|
81
|
+
const I = hmac(data, chainCode);
|
|
82
|
+
const IL = I.slice(0, 32);
|
|
83
|
+
const IR = I.slice(32);
|
|
84
|
+
return {
|
|
85
|
+
secretKey: IL,
|
|
86
|
+
chainCode: IR
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
export function generateSaveHDWalletFromSeed(seed, password) {
|
|
90
|
+
const walletKey = derivePathFromSeed('m/44h/457h', seed);
|
|
91
|
+
return {
|
|
92
|
+
secretKey: toHex(encryptKey(password, walletKey.secretKey)),
|
|
93
|
+
chainCode: toHex(encryptKey(password, walletKey.chainCode))
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
export function getSaveHDWalletAccounts(saveHDWallet, password, accountCount) {
|
|
97
|
+
const walletKey = {
|
|
98
|
+
secretKey: decryptKey(password, _Buffer.from(saveHDWallet.secretKey, 'hex')),
|
|
99
|
+
chainCode: decryptKey(password, _Buffer.from(saveHDWallet.chainCode, 'hex'))
|
|
100
|
+
};
|
|
101
|
+
return new Array(accountCount).fill().map((_, idx) => formatAccount(getKeyPair(derivePathFromKey(`${idx}h/0h/0h`, walletKey).secretKey)));
|
|
102
|
+
}
|
|
103
|
+
export const getHdWalletAccountFromSeed = (seed, accountIdx) => {
|
|
104
|
+
const walletKey = derivePathFromSeed('m/44h/457h', seed);
|
|
105
|
+
const derived = derivePathFromKey(`${accountIdx}h/0h/0h`, walletKey);
|
|
106
|
+
const keyPair = getKeyPair(derived.secretKey);
|
|
107
|
+
return { ...formatAccount(keyPair),
|
|
108
|
+
idx: accountIdx
|
|
109
|
+
};
|
|
110
|
+
};
|
|
111
|
+
//# sourceMappingURL=hd-wallet.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/hd-wallet.js"],"names":["nacl","decryptKey","encryptKey","encode","InvalidDerivationPathError","NotHardenedSegmentError","UnsupportedChildIndexError","ED25519_CURVE","from","HARDENED_OFFSET","toHex","buffer","toString","derivePathFromKey","path","key","segments","fromString","toPathArray","forEach","segment","i","reduce","parentKey","deriveChild","derivePathFromSeed","seed","includes","slice","masterKey","getMasterKeyFromSeed","formatAccount","keys","secretKey","publicKey","getKeyPair","sign","keyPair","fromSeed","I","hmac","IL","IR","chainCode","index","indexBuffer","allocUnsafe","writeUInt32BE","data","concat","alloc","generateSaveHDWalletFromSeed","password","walletKey","getSaveHDWalletAccounts","saveHDWallet","accountCount","Array","fill","map","_","idx","getHdWalletAccountFromSeed","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 { decryptKey, encryptKey } from './crypto'\nimport { encode } from '../tx/builder/helpers'\nimport {\n InvalidDerivationPathError, NotHardenedSegmentError, UnsupportedChildIndexError\n} from './errors'\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 NotHardenedSegmentError(`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 InvalidDerivationPathError()\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: encode(publicKey, 'ak')\n }\n}\n\nexport function getKeyPair (secretKey) {\n return nacl.sign.keyPair.fromSeed(secretKey)\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 UnsupportedChildIndexError(index)\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 generateSaveHDWalletFromSeed (seed, password) {\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 getHdWalletAccountFromSeed = (seed, accountIdx) => {\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"],"file":"hd-wallet.mjs"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import JsonBig from '@aeternity/json-bigint';
|
|
2
|
+
import BigNumber from 'bignumber.js';
|
|
3
|
+
const jsonBig = JsonBig({
|
|
4
|
+
storeAsString: true
|
|
5
|
+
});
|
|
6
|
+
|
|
7
|
+
const convertValuesToBigNumbers = value => {
|
|
8
|
+
if (typeof value === 'object' && value !== null && value.constructor === Object) {
|
|
9
|
+
return Object.entries(value).map(_ref => {
|
|
10
|
+
let [key, value] = _ref;
|
|
11
|
+
return [key, convertValuesToBigNumbers(value)];
|
|
12
|
+
}).reduce((p, _ref2) => {
|
|
13
|
+
let [k, v] = _ref2;
|
|
14
|
+
return { ...p,
|
|
15
|
+
[k]: v
|
|
16
|
+
};
|
|
17
|
+
}, {});
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
if (Array.isArray(value)) {
|
|
21
|
+
return value.map(item => convertValuesToBigNumbers(item));
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
if (typeof value === 'string' && BigNumber(value).toString(10) === value) {
|
|
25
|
+
const bn = BigNumber(value);
|
|
26
|
+
|
|
27
|
+
bn.toJSON = () => bn.toString(10);
|
|
28
|
+
|
|
29
|
+
return bn;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
return value;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
export default {
|
|
36
|
+
stringify: function (object) {
|
|
37
|
+
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
|
38
|
+
args[_key - 1] = arguments[_key];
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
return jsonBig.stringify(convertValuesToBigNumbers(object), ...args);
|
|
42
|
+
},
|
|
43
|
+
parse: jsonBig.parse
|
|
44
|
+
};
|
|
45
|
+
//# sourceMappingURL=json-big.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/json-big.js"],"names":["JsonBig","BigNumber","jsonBig","storeAsString","convertValuesToBigNumbers","value","constructor","Object","entries","map","key","reduce","p","k","v","Array","isArray","item","toString","bn","toJSON","stringify","object","args","parse"],"mappings":"AAAA,OAAOA,OAAP,MAAoB,wBAApB;AACA,OAAOC,SAAP,MAAsB,cAAtB;AAEA,MAAMC,OAAO,GAAGF,OAAO,CAAC;AAAEG,EAAAA,aAAa,EAAE;AAAjB,CAAD,CAAvB;;AAEA,MAAMC,yBAAyB,GAAGC,KAAK,IAAI;AACzC,MAAI,OAAOA,KAAP,KAAiB,QAAjB,IAA6BA,KAAK,KAAK,IAAvC,IAA+CA,KAAK,CAACC,WAAN,KAAsBC,MAAzE,EAAiF;AAC/E,WAAOA,MAAM,CAACC,OAAP,CAAeH,KAAf,EACJI,GADI,CACA;AAAA,UAAC,CAACC,GAAD,EAAML,KAAN,CAAD;AAAA,aAAkB,CAACK,GAAD,EAAMN,yBAAyB,CAACC,KAAD,CAA/B,CAAlB;AAAA,KADA,EAEJM,MAFI,CAEG,CAACC,CAAD;AAAA,UAAI,CAACC,CAAD,EAAIC,CAAJ,CAAJ;AAAA,aAAgB,EAAE,GAAGF,CAAL;AAAQ,SAACC,CAAD,GAAKC;AAAb,OAAhB;AAAA,KAFH,EAEsC,EAFtC,CAAP;AAGD;;AACD,MAAIC,KAAK,CAACC,OAAN,CAAcX,KAAd,CAAJ,EAA0B;AACxB,WAAOA,KAAK,CAACI,GAAN,CAAUQ,IAAI,IAAIb,yBAAyB,CAACa,IAAD,CAA3C,CAAP;AACD;;AACD,MAAI,OAAOZ,KAAP,KAAiB,QAAjB,IAA6BJ,SAAS,CAACI,KAAD,CAAT,CAAiBa,QAAjB,CAA0B,EAA1B,MAAkCb,KAAnE,EAA0E;AACxE,UAAMc,EAAE,GAAGlB,SAAS,CAACI,KAAD,CAApB;;AACAc,IAAAA,EAAE,CAACC,MAAH,GAAY,MAAMD,EAAE,CAACD,QAAH,CAAY,EAAZ,CAAlB;;AACA,WAAOC,EAAP;AACD;;AACD,SAAOd,KAAP;AACD,CAfD;;AAiBA,eAAe;AACbgB,EAAAA,SAAS,EAAE,UAACC,MAAD;AAAA,sCAAYC,IAAZ;AAAYA,MAAAA,IAAZ;AAAA;;AAAA,WAAqBrB,OAAO,CAACmB,SAAR,CAAkBjB,yBAAyB,CAACkB,MAAD,CAA3C,EAAqD,GAAGC,IAAxD,CAArB;AAAA,GADE;AAEbC,EAAAA,KAAK,EAAEtB,OAAO,CAACsB;AAFF,CAAf","sourcesContent":["import JsonBig from '@aeternity/json-bigint'\nimport BigNumber from 'bignumber.js'\n\nconst jsonBig = JsonBig({ storeAsString: true })\n\nconst convertValuesToBigNumbers = value => {\n if (typeof value === 'object' && value !== null && value.constructor === Object) {\n return Object.entries(value)\n .map(([key, value]) => [key, convertValuesToBigNumbers(value)])\n .reduce((p, [k, v]) => ({ ...p, [k]: v }), {})\n }\n if (Array.isArray(value)) {\n return value.map(item => convertValuesToBigNumbers(item))\n }\n if (typeof value === 'string' && BigNumber(value).toString(10) === value) {\n const bn = BigNumber(value)\n bn.toJSON = () => bn.toString(10)\n return bn\n }\n return value\n}\n\nexport default {\n stringify: (object, ...args) => jsonBig.stringify(convertValuesToBigNumbers(object), ...args),\n parse: jsonBig.parse\n}\n"],"file":"json-big.mjs"}
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
import _buffer from "buffer";
|
|
2
|
+
const {
|
|
3
|
+
Buffer: _Buffer
|
|
4
|
+
} = _buffer;
|
|
5
|
+
import nacl from 'tweetnacl';
|
|
6
|
+
import { v4 as uuid } from '@aeternity/uuid';
|
|
7
|
+
import _aeternityArgon2BrowserDistArgon2BundledMinJs from '@aeternity/argon2-browser/dist/argon2-bundled.min.js';
|
|
8
|
+
const {
|
|
9
|
+
ArgonType,
|
|
10
|
+
hash
|
|
11
|
+
} = _aeternityArgon2BrowserDistArgon2BundledMinJs;
|
|
12
|
+
import { encode } from "../tx/builder/helpers.mjs";
|
|
13
|
+
import { str2buf } from "./bytes.mjs";
|
|
14
|
+
import { ArgumentError, InvalidKeyError, UnsupportedAlgorithmError, InvalidPasswordError } from "./errors.mjs";
|
|
15
|
+
/**
|
|
16
|
+
* KeyStore module
|
|
17
|
+
* @module @aeternity/aepp-sdk/es/utils/keystore
|
|
18
|
+
* @example import { Keystore } from '@aeternity/aepp-sdk'
|
|
19
|
+
* @example const { Keystore } = require('@aeternity/aepp-sdk')
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
const DEFAULTS = {
|
|
23
|
+
crypto: {
|
|
24
|
+
secret_type: 'ed25519',
|
|
25
|
+
symmetric_alg: 'xsalsa20-poly1305',
|
|
26
|
+
kdf: 'argon2id',
|
|
27
|
+
kdf_params: {
|
|
28
|
+
memlimit_kib: 65536,
|
|
29
|
+
opslimit: 3,
|
|
30
|
+
parallelism: 1
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}; // DERIVED KEY PART
|
|
34
|
+
|
|
35
|
+
const DERIVED_KEY_FUNCTIONS = {
|
|
36
|
+
argon2id: deriveKeyUsingArgon2id
|
|
37
|
+
};
|
|
38
|
+
export async function deriveKeyUsingArgon2id(pass, salt, options) {
|
|
39
|
+
const {
|
|
40
|
+
memlimit_kib: mem,
|
|
41
|
+
opslimit: time
|
|
42
|
+
} = options.kdf_params;
|
|
43
|
+
const result = (await hash({
|
|
44
|
+
hashLen: 32,
|
|
45
|
+
pass,
|
|
46
|
+
salt,
|
|
47
|
+
time,
|
|
48
|
+
mem,
|
|
49
|
+
type: ArgonType.Argon2id
|
|
50
|
+
})).hash;
|
|
51
|
+
return _Buffer.from(result);
|
|
52
|
+
} // CRYPTO PART
|
|
53
|
+
|
|
54
|
+
const CRYPTO_FUNCTIONS = {
|
|
55
|
+
'xsalsa20-poly1305': {
|
|
56
|
+
encrypt: encryptXsalsa20Poly1305,
|
|
57
|
+
decrypt: decryptXsalsa20Poly1305
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
function encryptXsalsa20Poly1305(_ref) {
|
|
62
|
+
let {
|
|
63
|
+
plaintext,
|
|
64
|
+
key,
|
|
65
|
+
nonce
|
|
66
|
+
} = _ref;
|
|
67
|
+
return nacl.secretbox(plaintext, nonce, key);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
function decryptXsalsa20Poly1305(_ref2) {
|
|
71
|
+
let {
|
|
72
|
+
ciphertext,
|
|
73
|
+
key,
|
|
74
|
+
nonce
|
|
75
|
+
} = _ref2;
|
|
76
|
+
const res = nacl.secretbox.open(ciphertext, nonce, key);
|
|
77
|
+
if (!res) throw new InvalidPasswordError('Invalid password or nonce');
|
|
78
|
+
return res;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Symmetric private key encryption using secret (derived) key.
|
|
82
|
+
* @param {Buffer|string} plaintext Data to be encrypted.
|
|
83
|
+
* @param {Buffer|string} key Secret key.
|
|
84
|
+
* @param {Buffer|string} nonce Randomly generated nonce.
|
|
85
|
+
* @param {string=} algo Encryption algorithm (default: DEFAULTS.crypto.symmetric_alg).
|
|
86
|
+
* @return {Buffer} Encrypted data.
|
|
87
|
+
*/
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
function encrypt(plaintext, key, nonce) {
|
|
91
|
+
let algo = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : DEFAULTS.crypto.symmetric_alg;
|
|
92
|
+
if (!CRYPTO_FUNCTIONS[algo]) throw new UnsupportedAlgorithmError(algo);
|
|
93
|
+
return CRYPTO_FUNCTIONS[algo].encrypt({
|
|
94
|
+
plaintext,
|
|
95
|
+
nonce,
|
|
96
|
+
key
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Symmetric private key decryption using secret (derived) key.
|
|
101
|
+
* @param {Buffer|Uint8Array} ciphertext Data to be decrypted.
|
|
102
|
+
* @param {Buffer|Uint8Array} key Secret key.
|
|
103
|
+
* @param {Buffer|Uint8Array} nonce Nonce from key-object.
|
|
104
|
+
* @param {string=} algo Encryption algorithm.
|
|
105
|
+
* @return {Buffer} Decrypted data.
|
|
106
|
+
*/
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
function decrypt(ciphertext, key, nonce, algo) {
|
|
110
|
+
if (!CRYPTO_FUNCTIONS[algo]) throw new UnsupportedAlgorithmError(algo);
|
|
111
|
+
return CRYPTO_FUNCTIONS[algo].decrypt({
|
|
112
|
+
ciphertext,
|
|
113
|
+
nonce,
|
|
114
|
+
key
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Derive secret key from password with key derivation function.
|
|
119
|
+
* @param {string} password User-supplied password.
|
|
120
|
+
* @param {Buffer|Uint8Array} nonce Randomly generated nonce.
|
|
121
|
+
* @param {Object=} options Encryption parameters.
|
|
122
|
+
* @param {string=} options.kdf Key derivation function (default: DEFAULTS.crypto.kdf).
|
|
123
|
+
* @param {Object=} options.kdf_params KDF parameters (default: DEFAULTS.crypto.kdf_params).
|
|
124
|
+
* @return {Buffer} Secret key derived from password.
|
|
125
|
+
*/
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
async function deriveKey(password, nonce) {
|
|
129
|
+
let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {
|
|
130
|
+
kdf_params: DEFAULTS.crypto.kdf_params,
|
|
131
|
+
kdf: DEFAULTS.crypto.kdf
|
|
132
|
+
};
|
|
133
|
+
if (!nonce) throw new ArgumentError('nonce', 'provided', nonce);
|
|
134
|
+
if (password == null) throw new ArgumentError('password', 'provided', password);
|
|
135
|
+
|
|
136
|
+
if (!Object.prototype.hasOwnProperty.call(DERIVED_KEY_FUNCTIONS, options.kdf)) {
|
|
137
|
+
throw new UnsupportedAlgorithmError(options.kdf);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
return DERIVED_KEY_FUNCTIONS[options.kdf](password, nonce, options);
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Assemble key data object in secret-storage format.
|
|
144
|
+
* @param {Buffer} name Key name.
|
|
145
|
+
* @param {Buffer} derivedKey Password-derived secret key.
|
|
146
|
+
* @param {Buffer} privateKey Private key.
|
|
147
|
+
* @param {Buffer} nonce Randomly generated 24byte nonce.
|
|
148
|
+
* @param {Buffer} salt Randomly generated 16byte salt.
|
|
149
|
+
* @param {Object=} options Encryption parameters.
|
|
150
|
+
* @param {string=} options.kdf Key derivation function (default: argon2id).
|
|
151
|
+
* @param {string=} options.cipher Symmetric cipher (default: constants.cipher).
|
|
152
|
+
* @param {Object=} options.kdf_params KDF parameters (default: constants.<kdf>).
|
|
153
|
+
* @return {Object}
|
|
154
|
+
*/
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
function marshal(name, derivedKey, privateKey, nonce, salt) {
|
|
158
|
+
let options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};
|
|
159
|
+
const opt = Object.assign({}, DEFAULTS.crypto, options);
|
|
160
|
+
return Object.assign({
|
|
161
|
+
name,
|
|
162
|
+
version: 1,
|
|
163
|
+
public_key: getAddressFromPriv(privateKey),
|
|
164
|
+
id: uuid()
|
|
165
|
+
}, {
|
|
166
|
+
crypto: Object.assign({
|
|
167
|
+
secret_type: opt.secret_type,
|
|
168
|
+
symmetric_alg: opt.symmetric_alg,
|
|
169
|
+
ciphertext: _Buffer.from(encrypt(_Buffer.from(privateKey), derivedKey, nonce, opt.symmetric_alg)).toString('hex'),
|
|
170
|
+
cipher_params: {
|
|
171
|
+
nonce: _Buffer.from(nonce).toString('hex')
|
|
172
|
+
}
|
|
173
|
+
}, {
|
|
174
|
+
kdf: opt.kdf,
|
|
175
|
+
kdf_params: { ...opt.kdf_params,
|
|
176
|
+
salt: _Buffer.from(salt).toString('hex')
|
|
177
|
+
}
|
|
178
|
+
})
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
export function getAddressFromPriv(secret) {
|
|
183
|
+
const keys = nacl.sign.keyPair.fromSecretKey(str2buf(secret));
|
|
184
|
+
|
|
185
|
+
const publicBuffer = _Buffer.from(keys.publicKey);
|
|
186
|
+
|
|
187
|
+
return encode(publicBuffer, 'ak');
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Recover plaintext private key from secret-storage key object.
|
|
191
|
+
* @param {String} password Keystore object password.
|
|
192
|
+
* @param {Object} keyObject Keystore object.
|
|
193
|
+
* @return {Buffer} Plaintext private key.
|
|
194
|
+
*/
|
|
195
|
+
|
|
196
|
+
export async function recover(password, keyObject) {
|
|
197
|
+
validateKeyObj(keyObject);
|
|
198
|
+
const nonce = Uint8Array.from(str2buf(keyObject.crypto.cipher_params.nonce));
|
|
199
|
+
const salt = Uint8Array.from(str2buf(keyObject.crypto.kdf_params.salt));
|
|
200
|
+
const kdfParams = keyObject.crypto.kdf_params;
|
|
201
|
+
const kdf = keyObject.crypto.kdf;
|
|
202
|
+
const key = await decrypt(Uint8Array.from(str2buf(keyObject.crypto.ciphertext)), await deriveKey(password, salt, {
|
|
203
|
+
kdf,
|
|
204
|
+
kdf_params: kdfParams
|
|
205
|
+
}), nonce, keyObject.crypto.symmetric_alg);
|
|
206
|
+
if (!key) throw new InvalidPasswordError('Invalid password');
|
|
207
|
+
if (_Buffer.from(key).length === 64) return _Buffer.from(key).toString('hex');
|
|
208
|
+
return _Buffer.from(key).toString('utf-8');
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Export private key to keystore secret-storage format.
|
|
212
|
+
* @param {String} name Key name.
|
|
213
|
+
* @param {String} password User-supplied password.
|
|
214
|
+
* @param {String|Buffer} privateKey Private key as hex-string or a Buffer.
|
|
215
|
+
* @param {Buffer} nonce Randomly generated 24byte nonce.
|
|
216
|
+
* @param {Buffer} salt Randomly generated 16byte salt.
|
|
217
|
+
* @param {Object=} options Encryption parameters.
|
|
218
|
+
* @param {String=} options.kdf Key derivation function (default: pbkdf2).
|
|
219
|
+
* @param {String=} options.cipher Symmetric cipher (default: constants.cipher).
|
|
220
|
+
* @param {Object=} options.kdfparams KDF parameters (default: constants.<kdf>).
|
|
221
|
+
* @return {Object}
|
|
222
|
+
*/
|
|
223
|
+
|
|
224
|
+
export async function dump(name, password, privateKey) {
|
|
225
|
+
let nonce = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : nacl.randomBytes(24);
|
|
226
|
+
let salt = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : nacl.randomBytes(16);
|
|
227
|
+
let options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};
|
|
228
|
+
const opt = Object.assign({}, DEFAULTS.crypto, options);
|
|
229
|
+
return marshal(name, await deriveKey(password, salt, opt), typeof privateKey === 'string' ? _Buffer.from(privateKey, 'hex') : privateKey, nonce, salt, opt);
|
|
230
|
+
}
|
|
231
|
+
export function validateKeyObj(obj) {
|
|
232
|
+
const root = ['crypto', 'id', 'version', 'public_key'];
|
|
233
|
+
const cryptoKeys = ['cipher_params', 'ciphertext', 'symmetric_alg', 'kdf', 'kdf_params'];
|
|
234
|
+
const missingRootKeys = root.filter(key => !Object.prototype.hasOwnProperty.call(obj, key));
|
|
235
|
+
if (missingRootKeys.length) throw new InvalidKeyError(`Invalid key file format. Require properties: ${missingRootKeys}`);
|
|
236
|
+
const missingCryptoKeys = cryptoKeys.filter(key => !Object.prototype.hasOwnProperty.call(obj.crypto, key));
|
|
237
|
+
if (missingCryptoKeys.length) throw new InvalidKeyError(`Invalid key file format. Require properties: ${missingCryptoKeys}`);
|
|
238
|
+
return true;
|
|
239
|
+
}
|
|
240
|
+
//# sourceMappingURL=keystore.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/keystore.js"],"names":["nacl","v4","uuid","encode","str2buf","ArgumentError","InvalidKeyError","UnsupportedAlgorithmError","InvalidPasswordError","DEFAULTS","crypto","secret_type","symmetric_alg","kdf","kdf_params","memlimit_kib","opslimit","parallelism","DERIVED_KEY_FUNCTIONS","argon2id","deriveKeyUsingArgon2id","pass","salt","options","mem","time","result","hash","hashLen","type","ArgonType","Argon2id","from","CRYPTO_FUNCTIONS","encrypt","encryptXsalsa20Poly1305","decrypt","decryptXsalsa20Poly1305","plaintext","key","nonce","secretbox","ciphertext","res","open","algo","deriveKey","password","Object","prototype","hasOwnProperty","call","marshal","name","derivedKey","privateKey","opt","assign","version","public_key","getAddressFromPriv","id","toString","cipher_params","secret","keys","sign","keyPair","fromSecretKey","publicBuffer","publicKey","recover","keyObject","validateKeyObj","Uint8Array","kdfParams","length","dump","randomBytes","obj","root","cryptoKeys","missingRootKeys","filter","missingCryptoKeys"],"mappings":"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","sourcesContent":["import nacl from 'tweetnacl'\nimport { v4 as uuid } from '@aeternity/uuid'\nimport { ArgonType, hash } from '@aeternity/argon2-browser/dist/argon2-bundled.min.js'\nimport { encode } from '../tx/builder/helpers'\nimport { str2buf } from './bytes'\nimport {\n ArgumentError, InvalidKeyError, UnsupportedAlgorithmError, InvalidPasswordError\n} from './errors'\n\n/**\n * KeyStore module\n * @module @aeternity/aepp-sdk/es/utils/keystore\n * @example import { Keystore } from '@aeternity/aepp-sdk'\n * @example const { Keystore } = require('@aeternity/aepp-sdk')\n */\n\nconst DEFAULTS = {\n crypto: {\n secret_type: 'ed25519',\n symmetric_alg: 'xsalsa20-poly1305',\n kdf: 'argon2id',\n kdf_params: {\n memlimit_kib: 65536,\n opslimit: 3,\n parallelism: 1\n }\n }\n}\n\n// DERIVED KEY PART\nconst DERIVED_KEY_FUNCTIONS = {\n argon2id: deriveKeyUsingArgon2id\n}\n\nexport async function deriveKeyUsingArgon2id (pass, salt, options) {\n const { memlimit_kib: mem, opslimit: time } = options.kdf_params\n\n const result = (await hash({\n hashLen: 32,\n pass,\n salt,\n time,\n mem,\n type: ArgonType.Argon2id\n })).hash\n return Buffer.from(result)\n}\n\n// CRYPTO PART\nconst CRYPTO_FUNCTIONS = {\n 'xsalsa20-poly1305': { encrypt: encryptXsalsa20Poly1305, decrypt: decryptXsalsa20Poly1305 }\n}\n\nfunction encryptXsalsa20Poly1305 ({ plaintext, key, nonce }) {\n return nacl.secretbox(plaintext, nonce, key)\n}\n\nfunction decryptXsalsa20Poly1305 ({ ciphertext, key, nonce }) {\n const res = nacl.secretbox.open(ciphertext, nonce, key)\n if (!res) throw new InvalidPasswordError('Invalid password or nonce')\n return res\n}\n\n/**\n * Symmetric private key encryption using secret (derived) key.\n * @param {Buffer|string} plaintext Data to be encrypted.\n * @param {Buffer|string} key Secret key.\n * @param {Buffer|string} nonce Randomly generated nonce.\n * @param {string=} algo Encryption algorithm (default: DEFAULTS.crypto.symmetric_alg).\n * @return {Buffer} Encrypted data.\n */\nfunction encrypt (plaintext, key, nonce, algo = DEFAULTS.crypto.symmetric_alg) {\n if (!CRYPTO_FUNCTIONS[algo]) throw new UnsupportedAlgorithmError(algo)\n return CRYPTO_FUNCTIONS[algo].encrypt({ plaintext, nonce, key })\n}\n\n/**\n * Symmetric private key decryption using secret (derived) key.\n * @param {Buffer|Uint8Array} ciphertext Data to be decrypted.\n * @param {Buffer|Uint8Array} key Secret key.\n * @param {Buffer|Uint8Array} nonce Nonce from key-object.\n * @param {string=} algo Encryption algorithm.\n * @return {Buffer} Decrypted data.\n */\nfunction decrypt (ciphertext, key, nonce, algo) {\n if (!CRYPTO_FUNCTIONS[algo]) throw new UnsupportedAlgorithmError(algo)\n return CRYPTO_FUNCTIONS[algo].decrypt({ ciphertext, nonce, key })\n}\n\n/**\n * Derive secret key from password with key derivation function.\n * @param {string} password User-supplied password.\n * @param {Buffer|Uint8Array} nonce Randomly generated nonce.\n * @param {Object=} options Encryption parameters.\n * @param {string=} options.kdf Key derivation function (default: DEFAULTS.crypto.kdf).\n * @param {Object=} options.kdf_params KDF parameters (default: DEFAULTS.crypto.kdf_params).\n * @return {Buffer} Secret key derived from password.\n */\nasync function deriveKey (password, nonce, options = {\n kdf_params: DEFAULTS.crypto.kdf_params,\n kdf: DEFAULTS.crypto.kdf\n}) {\n if (!nonce) throw new ArgumentError('nonce', 'provided', nonce)\n if (password == null) throw new ArgumentError('password', 'provided', password)\n\n if (!Object.prototype.hasOwnProperty.call(DERIVED_KEY_FUNCTIONS, options.kdf)) {\n throw new UnsupportedAlgorithmError(options.kdf)\n }\n\n return DERIVED_KEY_FUNCTIONS[options.kdf](password, nonce, options)\n}\n\n/**\n * Assemble key data object in secret-storage format.\n * @param {Buffer} name Key name.\n * @param {Buffer} derivedKey Password-derived secret key.\n * @param {Buffer} privateKey Private key.\n * @param {Buffer} nonce Randomly generated 24byte nonce.\n * @param {Buffer} salt Randomly generated 16byte salt.\n * @param {Object=} options Encryption parameters.\n * @param {string=} options.kdf Key derivation function (default: argon2id).\n * @param {string=} options.cipher Symmetric cipher (default: constants.cipher).\n * @param {Object=} options.kdf_params KDF parameters (default: constants.<kdf>).\n * @return {Object}\n */\nfunction marshal (name, derivedKey, privateKey, nonce, salt, options = {}) {\n const opt = Object.assign({}, DEFAULTS.crypto, options)\n return Object.assign(\n { name, version: 1, public_key: getAddressFromPriv(privateKey), id: uuid() },\n {\n crypto: Object.assign(\n {\n secret_type: opt.secret_type,\n symmetric_alg: opt.symmetric_alg,\n ciphertext: Buffer.from(encrypt(Buffer.from(privateKey), derivedKey, nonce, opt.symmetric_alg)).toString('hex'),\n cipher_params: { nonce: Buffer.from(nonce).toString('hex') }\n },\n { kdf: opt.kdf, kdf_params: { ...opt.kdf_params, salt: Buffer.from(salt).toString('hex') } }\n )\n }\n )\n}\n\nexport function getAddressFromPriv (secret) {\n const keys = nacl.sign.keyPair.fromSecretKey(str2buf(secret))\n const publicBuffer = Buffer.from(keys.publicKey)\n return encode(publicBuffer, 'ak')\n}\n\n/**\n * Recover plaintext private key from secret-storage key object.\n * @param {String} password Keystore object password.\n * @param {Object} keyObject Keystore object.\n * @return {Buffer} Plaintext private key.\n */\nexport async function recover (password, keyObject) {\n validateKeyObj(keyObject)\n const nonce = Uint8Array.from(str2buf(keyObject.crypto.cipher_params.nonce))\n const salt = Uint8Array.from(str2buf(keyObject.crypto.kdf_params.salt))\n const kdfParams = keyObject.crypto.kdf_params\n const kdf = keyObject.crypto.kdf\n\n const key = await decrypt(\n Uint8Array.from(str2buf(keyObject.crypto.ciphertext)),\n await deriveKey(password, salt, { kdf, kdf_params: kdfParams }),\n nonce,\n keyObject.crypto.symmetric_alg\n )\n if (!key) throw new InvalidPasswordError('Invalid password')\n\n if (Buffer.from(key).length === 64) return Buffer.from(key).toString('hex')\n return Buffer.from(key).toString('utf-8')\n}\n\n/**\n * Export private key to keystore secret-storage format.\n * @param {String} name Key name.\n * @param {String} password User-supplied password.\n * @param {String|Buffer} privateKey Private key as hex-string or a Buffer.\n * @param {Buffer} nonce Randomly generated 24byte nonce.\n * @param {Buffer} salt Randomly generated 16byte salt.\n * @param {Object=} options Encryption parameters.\n * @param {String=} options.kdf Key derivation function (default: pbkdf2).\n * @param {String=} options.cipher Symmetric cipher (default: constants.cipher).\n * @param {Object=} options.kdfparams KDF parameters (default: constants.<kdf>).\n * @return {Object}\n */\nexport async function dump (\n name,\n password,\n privateKey,\n nonce = nacl.randomBytes(24),\n salt = nacl.randomBytes(16),\n options = {}\n) {\n const opt = Object.assign({}, DEFAULTS.crypto, options)\n return marshal(\n name,\n await deriveKey(password, salt, opt),\n typeof privateKey === 'string' ? Buffer.from(privateKey, 'hex') : privateKey,\n nonce,\n salt,\n opt\n )\n}\n\nexport function validateKeyObj (obj) {\n const root = ['crypto', 'id', 'version', 'public_key']\n const cryptoKeys = ['cipher_params', 'ciphertext', 'symmetric_alg', 'kdf', 'kdf_params']\n\n const missingRootKeys = root.filter(key => !Object.prototype.hasOwnProperty.call(obj, key))\n if (missingRootKeys.length) throw new InvalidKeyError(`Invalid key file format. Require properties: ${missingRootKeys}`)\n\n const missingCryptoKeys = cryptoKeys\n .filter(key => !Object.prototype.hasOwnProperty.call(obj.crypto, key))\n if (missingCryptoKeys.length) throw new InvalidKeyError(`Invalid key file format. Require properties: ${missingCryptoKeys}`)\n\n return true\n}\n"],"file":"keystore.mjs"}
|