@aeternity/aepp-sdk 10.0.0-beta.1 → 11.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -14
- package/dist/aepp-sdk.browser-script.js +1 -1
- package/dist/aepp-sdk.browser-script.js.LICENSE.txt +7 -27
- 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.js → base.mjs} +23 -11
- package/es/account/base.mjs.map +1 -0
- package/es/account/{memory.js → memory.mjs} +29 -14
- package/es/account/memory.mjs.map +1 -0
- package/es/account/{multiple.js → multiple.mjs} +14 -11
- package/es/account/multiple.mjs.map +1 -0
- package/es/ae/{aens.js → aens.mjs} +69 -59
- 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.js → index.mjs} +12 -10
- package/es/ae/index.mjs.map +1 -0
- package/es/ae/{oracle.js → oracle.mjs} +37 -20
- 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} +28 -8
- package/es/chain/index.mjs.map +1 -0
- package/es/chain/{node.js → node.mjs} +133 -90
- package/es/chain/node.mjs.map +1 -0
- package/es/channel/{handlers.js → handlers.mjs} +18 -20
- package/es/channel/handlers.mjs.map +1 -0
- package/es/channel/{index.js → index.mjs} +43 -22
- package/es/channel/index.mjs.map +1 -0
- package/es/channel/{internal.js → internal.mjs} +51 -35
- 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.js → index.mjs} +40 -28
- package/es/contract/ga/index.mjs.map +1 -0
- package/es/encoder.d.ts +26 -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.js → index.mjs} +15 -12
- package/es/node-pool/index.mjs.map +1 -0
- package/es/{node.js → node.mjs} +17 -11
- package/es/node.mjs.map +1 -0
- package/es/tx/builder/constants.mjs +108 -0
- package/es/tx/builder/constants.mjs.map +1 -0
- 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 +321 -0
- package/es/tx/builder/helpers.mjs.map +1 -0
- package/es/tx/builder/{index.js → index.mjs} +92 -74
- package/es/tx/builder/index.mjs.map +1 -0
- package/es/tx/builder/{schema.js → schema.mjs} +16 -172
- package/es/tx/builder/schema.mjs.map +1 -0
- package/es/tx/{index.js → index.mjs} +106 -14
- package/es/tx/index.mjs.map +1 -0
- package/es/tx/{tx-object.js → tx-object.mjs} +31 -18
- package/es/tx/tx-object.mjs.map +1 -0
- package/es/tx/{tx.js → tx.mjs} +15 -14
- package/es/tx/tx.mjs.map +1 -0
- package/es/tx/{validator.js → validator.mjs} +72 -33
- 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} +10 -8
- package/es/utils/aepp-wallet-communication/connection/browser-runtime.mjs.map +1 -0
- package/es/utils/aepp-wallet-communication/connection/{browser-window-message.js → browser-window-message.mjs} +25 -17
- 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} +15 -8
- package/es/utils/aepp-wallet-communication/content-script-bridge.mjs.map +1 -0
- package/es/utils/aepp-wallet-communication/{helpers.js → helpers.mjs} +3 -14
- package/es/utils/aepp-wallet-communication/helpers.mjs.map +1 -0
- package/es/utils/aepp-wallet-communication/rpc/{aepp-rpc.js → aepp-rpc.mjs} +126 -72
- package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.mjs.map +1 -0
- package/es/utils/aepp-wallet-communication/rpc/{rpc-client.js → rpc-client.mjs} +23 -14
- package/es/utils/aepp-wallet-communication/rpc/rpc-client.mjs.map +1 -0
- package/es/utils/aepp-wallet-communication/rpc/{wallet-rpc.js → wallet-rpc.mjs} +116 -91
- 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.js → wallet-detector.mjs} +6 -5
- package/es/utils/aepp-wallet-communication/wallet-detector.mjs.map +1 -0
- package/es/utils/{amount-formatter.js → amount-formatter.mjs} +14 -7
- package/es/utils/amount-formatter.mjs.map +1 -0
- package/es/utils/{async-init.js → async-init.mjs} +8 -11
- package/es/utils/async-init.mjs.map +1 -0
- package/es/utils/{bignumber.js → bignumber.mjs} +2 -9
- package/es/utils/bignumber.mjs.map +1 -0
- package/es/utils/{bytes.js → bytes.mjs} +16 -8
- 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.js → crypto.mjs} +42 -156
- package/es/utils/crypto.mjs.map +1 -0
- package/es/utils/encoder.mjs +106 -0
- package/es/utils/encoder.mjs.map +1 -0
- package/es/utils/errors.mjs +689 -0
- package/es/utils/errors.mjs.map +1 -0
- package/es/utils/{hd-wallet.js → hd-wallet.mjs} +33 -34
- package/es/utils/hd-wallet.mjs.map +1 -0
- package/es/utils/{json-big.js → json-big.mjs} +1 -1
- package/es/utils/{json-big.js.map → json-big.mjs.map} +1 -1
- package/es/utils/{keystore.js → keystore.mjs} +63 -51
- package/es/utils/keystore.mjs.map +1 -0
- package/es/utils/{mptree.js → mptree.mjs} +21 -12
- package/es/utils/mptree.mjs.map +1 -0
- package/es/utils/{other.js → other.mjs} +2 -2
- package/es/utils/other.mjs.map +1 -0
- package/es/utils/{semver-satisfies.js → semver-satisfies.mjs} +1 -1
- package/es/utils/{semver-satisfies.js.map → semver-satisfies.mjs.map} +1 -1
- package/es/utils/{string.js → string.mjs} +1 -1
- package/es/utils/{string.js.map → string.mjs.map} +1 -1
- package/es/utils/{swagger.js → swagger.mjs} +49 -15
- package/es/utils/swagger.mjs.map +1 -0
- package/package.json +49 -58
- package/src/account/base.js +3 -1
- package/src/account/memory.js +13 -8
- package/src/account/multiple.js +16 -6
- package/src/ae/aens.js +52 -58
- package/src/ae/aepp.js +2 -2
- package/src/ae/contract.js +21 -154
- package/src/ae/index.js +6 -4
- package/src/ae/oracle.js +33 -14
- 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 -65
- package/src/channel/handlers.js +30 -20
- package/src/channel/index.js +46 -16
- package/src/channel/internal.js +35 -30
- package/src/contract/aci.js +376 -0
- package/src/contract/compiler.js +22 -113
- package/src/contract/ga/helpers.js +10 -6
- package/src/contract/ga/index.js +31 -24
- package/src/index.js +9 -8
- package/src/node-pool/index.js +13 -10
- package/src/node.js +11 -10
- package/src/tx/builder/constants.js +100 -0
- package/src/tx/builder/field-types.js +61 -0
- package/src/tx/builder/helpers.js +99 -103
- package/src/tx/builder/index.js +81 -40
- package/src/tx/builder/schema.js +44 -132
- package/src/tx/index.js +101 -12
- package/src/tx/tx-object.js +35 -15
- package/src/tx/tx.js +110 -35
- package/src/tx/validator.js +25 -5
- 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 +106 -57
- package/src/utils/aepp-wallet-communication/rpc/rpc-client.js +24 -11
- package/src/utils/aepp-wallet-communication/rpc/wallet-rpc.js +95 -53
- 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 +1 -9
- package/src/utils/bytes.ts +3 -2
- package/src/utils/crypto-ts.ts +2 -2
- package/src/utils/crypto.js +11 -155
- package/src/utils/encoder.ts +101 -0
- 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/swagger.js +68 -45
- package/es/account/base.js.map +0 -1
- package/es/account/memory.js.map +0 -1
- package/es/account/multiple.js.map +0 -1
- package/es/ae/aens.js.map +0 -1
- package/es/ae/aepp.js.map +0 -1
- package/es/ae/contract.js +0 -308
- package/es/ae/contract.js.map +0 -1
- package/es/ae/index.js.map +0 -1
- 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.map +0 -1
- package/es/channel/handlers.js.map +0 -1
- package/es/channel/index.js.map +0 -1
- 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 -356
- package/es/contract/aci/index.js.map +0 -1
- package/es/contract/aci/transformation.js +0 -66
- package/es/contract/aci/transformation.js.map +0 -1
- package/es/contract/compiler.js +0 -242
- package/es/contract/compiler.js.map +0 -1
- package/es/contract/ga/helpers.js +0 -22
- package/es/contract/ga/helpers.js.map +0 -1
- 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 -56
- package/es/index.js.map +0 -1
- package/es/node-pool/index.js.map +0 -1
- package/es/node.js.map +0 -1
- package/es/tx/builder/helpers.js +0 -318
- package/es/tx/builder/helpers.js.map +0 -1
- package/es/tx/builder/index.js.map +0 -1
- package/es/tx/builder/schema.js.map +0 -1
- package/es/tx/index.js.map +0 -1
- package/es/tx/tx-object.js.map +0 -1
- package/es/tx/tx.js.map +0 -1
- 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.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.map +0 -1
- package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.js.map +0 -1
- package/es/utils/aepp-wallet-communication/rpc/rpc-client.js.map +0 -1
- package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.js.map +0 -1
- package/es/utils/aepp-wallet-communication/schema.js +0 -107
- package/es/utils/aepp-wallet-communication/schema.js.map +0 -1
- package/es/utils/aepp-wallet-communication/wallet-detector.js.map +0 -1
- package/es/utils/amount-formatter.js.map +0 -1
- package/es/utils/async-init.js.map +0 -1
- 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.map +0 -1
- package/es/utils/hd-wallet.js.map +0 -1
- package/es/utils/keystore.js.map +0 -1
- package/es/utils/mptree.js.map +0 -1
- package/es/utils/other.js.map +0 -1
- package/es/utils/swagger.js.map +0 -1
- package/src/contract/aci/index.js +0 -310
- package/src/contract/aci/transformation.js +0 -72
- package/src/contract/index.js +0 -159
- package/src/utils/aepp-wallet-communication/schema.js +0 -108
|
@@ -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"}
|
|
@@ -1,25 +1,38 @@
|
|
|
1
|
+
import _buffer from "buffer";
|
|
2
|
+
const {
|
|
3
|
+
Buffer: _Buffer
|
|
4
|
+
} = _buffer;
|
|
1
5
|
import nacl from 'tweetnacl';
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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
|
+
|
|
7
20
|
const HARDENED_OFFSET = 0x80000000;
|
|
8
21
|
|
|
9
|
-
const toHex = buffer =>
|
|
22
|
+
const toHex = buffer => _Buffer.from(buffer).toString('hex');
|
|
10
23
|
|
|
11
24
|
export function derivePathFromKey(path, key) {
|
|
12
25
|
const segments = path === '' ? [] : fromString(path).toPathArray();
|
|
13
26
|
segments.forEach((segment, i) => {
|
|
14
27
|
if (segment < HARDENED_OFFSET) {
|
|
15
|
-
throw new
|
|
28
|
+
throw new NotHardenedSegmentError(`Segment #${i + 1} is not hardened`);
|
|
16
29
|
}
|
|
17
30
|
});
|
|
18
31
|
return segments.reduce((parentKey, segment) => deriveChild(parentKey, segment), key);
|
|
19
32
|
}
|
|
20
33
|
export function derivePathFromSeed(path, seed) {
|
|
21
34
|
if (!['m', 'm/'].includes(path.slice(0, 2))) {
|
|
22
|
-
throw new
|
|
35
|
+
throw new InvalidDerivationPathError();
|
|
23
36
|
}
|
|
24
37
|
|
|
25
38
|
const masterKey = getMasterKeyFromSeed(seed);
|
|
@@ -33,16 +46,13 @@ function formatAccount(keys) {
|
|
|
33
46
|
} = keys;
|
|
34
47
|
return {
|
|
35
48
|
secretKey: toHex(secretKey),
|
|
36
|
-
publicKey:
|
|
49
|
+
publicKey: encode(publicKey, 'ak')
|
|
37
50
|
};
|
|
38
51
|
}
|
|
39
52
|
|
|
40
53
|
export function getKeyPair(secretKey) {
|
|
41
54
|
return nacl.sign.keyPair.fromSeed(secretKey);
|
|
42
55
|
}
|
|
43
|
-
export function generateMnemonic() {
|
|
44
|
-
return genMnemonic();
|
|
45
|
-
}
|
|
46
56
|
export function getMasterKeyFromSeed(seed) {
|
|
47
57
|
const I = hmac(seed, ED25519_CURVE);
|
|
48
58
|
const IL = I.slice(0, 32);
|
|
@@ -59,12 +69,15 @@ export function deriveChild(_ref, index) {
|
|
|
59
69
|
} = _ref;
|
|
60
70
|
|
|
61
71
|
if (index < HARDENED_OFFSET) {
|
|
62
|
-
throw new
|
|
72
|
+
throw new UnsupportedChildIndexError(index);
|
|
63
73
|
}
|
|
64
74
|
|
|
65
|
-
const indexBuffer =
|
|
75
|
+
const indexBuffer = _Buffer.allocUnsafe(4);
|
|
76
|
+
|
|
66
77
|
indexBuffer.writeUInt32BE(index, 0);
|
|
67
|
-
|
|
78
|
+
|
|
79
|
+
const data = _Buffer.concat([_Buffer.alloc(1, 0), _Buffer.from(secretKey), _Buffer.from(indexBuffer)]);
|
|
80
|
+
|
|
68
81
|
const I = hmac(data, chainCode);
|
|
69
82
|
const IL = I.slice(0, 32);
|
|
70
83
|
const IR = I.slice(32);
|
|
@@ -73,12 +86,7 @@ export function deriveChild(_ref, index) {
|
|
|
73
86
|
chainCode: IR
|
|
74
87
|
};
|
|
75
88
|
}
|
|
76
|
-
export function
|
|
77
|
-
if (!validateMnemonic(mnemonic)) {
|
|
78
|
-
throw new Error('Invalid mnemonic');
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
const seed = mnemonicToSeed(mnemonic);
|
|
89
|
+
export function generateSaveHDWalletFromSeed(seed, password) {
|
|
82
90
|
const walletKey = derivePathFromSeed('m/44h/457h', seed);
|
|
83
91
|
return {
|
|
84
92
|
secretKey: toHex(encryptKey(password, walletKey.secretKey)),
|
|
@@ -87,13 +95,12 @@ export function generateSaveHDWallet(mnemonic, password) {
|
|
|
87
95
|
}
|
|
88
96
|
export function getSaveHDWalletAccounts(saveHDWallet, password, accountCount) {
|
|
89
97
|
const walletKey = {
|
|
90
|
-
secretKey: decryptKey(password,
|
|
91
|
-
chainCode: decryptKey(password,
|
|
98
|
+
secretKey: decryptKey(password, _Buffer.from(saveHDWallet.secretKey, 'hex')),
|
|
99
|
+
chainCode: decryptKey(password, _Buffer.from(saveHDWallet.chainCode, 'hex'))
|
|
92
100
|
};
|
|
93
101
|
return new Array(accountCount).fill().map((_, idx) => formatAccount(getKeyPair(derivePathFromKey(`${idx}h/0h/0h`, walletKey).secretKey)));
|
|
94
102
|
}
|
|
95
|
-
export const
|
|
96
|
-
const seed = mnemonicToSeed(mnemonic);
|
|
103
|
+
export const getHdWalletAccountFromSeed = (seed, accountIdx) => {
|
|
97
104
|
const walletKey = derivePathFromSeed('m/44h/457h', seed);
|
|
98
105
|
const derived = derivePathFromKey(`${accountIdx}h/0h/0h`, walletKey);
|
|
99
106
|
const keyPair = getKeyPair(derived.secretKey);
|
|
@@ -101,12 +108,4 @@ export const getHdWalletAccountFromMnemonic = (mnemonic, accountIdx) => {
|
|
|
101
108
|
idx: accountIdx
|
|
102
109
|
};
|
|
103
110
|
};
|
|
104
|
-
|
|
105
|
-
getHdWalletAccountFromMnemonic,
|
|
106
|
-
getSaveHDWalletAccounts,
|
|
107
|
-
generateSaveHDWallet,
|
|
108
|
-
generateMnemonic,
|
|
109
|
-
deriveChild,
|
|
110
|
-
getMasterKeyFromSeed
|
|
111
|
-
};
|
|
112
|
-
//# sourceMappingURL=hd-wallet.js.map
|
|
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"}
|
|
@@ -1 +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.
|
|
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"}
|
|
@@ -1,9 +1,17 @@
|
|
|
1
|
+
import _buffer from "buffer";
|
|
2
|
+
const {
|
|
3
|
+
Buffer: _Buffer
|
|
4
|
+
} = _buffer;
|
|
1
5
|
import nacl from 'tweetnacl';
|
|
2
|
-
import { v4 as uuid } from 'uuid';
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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";
|
|
7
15
|
/**
|
|
8
16
|
* KeyStore module
|
|
9
17
|
* @module @aeternity/aepp-sdk/es/utils/keystore
|
|
@@ -11,7 +19,6 @@ const _sodium = require('libsodium-wrappers-sumo');
|
|
|
11
19
|
* @example const { Keystore } = require('@aeternity/aepp-sdk')
|
|
12
20
|
*/
|
|
13
21
|
|
|
14
|
-
|
|
15
22
|
const DEFAULTS = {
|
|
16
23
|
crypto: {
|
|
17
24
|
secret_type: 'ed25519',
|
|
@@ -28,18 +35,20 @@ const DEFAULTS = {
|
|
|
28
35
|
const DERIVED_KEY_FUNCTIONS = {
|
|
29
36
|
argon2id: deriveKeyUsingArgon2id
|
|
30
37
|
};
|
|
31
|
-
export async function deriveKeyUsingArgon2id(
|
|
38
|
+
export async function deriveKeyUsingArgon2id(pass, salt, options) {
|
|
32
39
|
const {
|
|
33
|
-
memlimit_kib:
|
|
34
|
-
opslimit:
|
|
35
|
-
} = options.kdf_params;
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
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);
|
|
43
52
|
} // CRYPTO PART
|
|
44
53
|
|
|
45
54
|
const CRYPTO_FUNCTIONS = {
|
|
@@ -65,22 +74,22 @@ function decryptXsalsa20Poly1305(_ref2) {
|
|
|
65
74
|
nonce
|
|
66
75
|
} = _ref2;
|
|
67
76
|
const res = nacl.secretbox.open(ciphertext, nonce, key);
|
|
68
|
-
if (!res) throw new
|
|
77
|
+
if (!res) throw new InvalidPasswordError('Invalid password or nonce');
|
|
69
78
|
return res;
|
|
70
79
|
}
|
|
71
80
|
/**
|
|
72
81
|
* Symmetric private key encryption using secret (derived) key.
|
|
73
|
-
* @param {
|
|
74
|
-
* @param {
|
|
75
|
-
* @param {
|
|
82
|
+
* @param {Buffer|string} plaintext Data to be encrypted.
|
|
83
|
+
* @param {Buffer|string} key Secret key.
|
|
84
|
+
* @param {Buffer|string} nonce Randomly generated nonce.
|
|
76
85
|
* @param {string=} algo Encryption algorithm (default: DEFAULTS.crypto.symmetric_alg).
|
|
77
|
-
* @return {
|
|
86
|
+
* @return {Buffer} Encrypted data.
|
|
78
87
|
*/
|
|
79
88
|
|
|
80
89
|
|
|
81
90
|
function encrypt(plaintext, key, nonce) {
|
|
82
91
|
let algo = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : DEFAULTS.crypto.symmetric_alg;
|
|
83
|
-
if (!CRYPTO_FUNCTIONS[algo]) throw new
|
|
92
|
+
if (!CRYPTO_FUNCTIONS[algo]) throw new UnsupportedAlgorithmError(algo);
|
|
84
93
|
return CRYPTO_FUNCTIONS[algo].encrypt({
|
|
85
94
|
plaintext,
|
|
86
95
|
nonce,
|
|
@@ -89,16 +98,16 @@ function encrypt(plaintext, key, nonce) {
|
|
|
89
98
|
}
|
|
90
99
|
/**
|
|
91
100
|
* Symmetric private key decryption using secret (derived) key.
|
|
92
|
-
* @param {
|
|
93
|
-
* @param {
|
|
94
|
-
* @param {
|
|
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.
|
|
95
104
|
* @param {string=} algo Encryption algorithm.
|
|
96
|
-
* @return {
|
|
105
|
+
* @return {Buffer} Decrypted data.
|
|
97
106
|
*/
|
|
98
107
|
|
|
99
108
|
|
|
100
109
|
function decrypt(ciphertext, key, nonce, algo) {
|
|
101
|
-
if (!CRYPTO_FUNCTIONS[algo]) throw new
|
|
110
|
+
if (!CRYPTO_FUNCTIONS[algo]) throw new UnsupportedAlgorithmError(algo);
|
|
102
111
|
return CRYPTO_FUNCTIONS[algo].decrypt({
|
|
103
112
|
ciphertext,
|
|
104
113
|
nonce,
|
|
@@ -108,11 +117,11 @@ function decrypt(ciphertext, key, nonce, algo) {
|
|
|
108
117
|
/**
|
|
109
118
|
* Derive secret key from password with key derivation function.
|
|
110
119
|
* @param {string} password User-supplied password.
|
|
111
|
-
* @param {
|
|
120
|
+
* @param {Buffer|Uint8Array} nonce Randomly generated nonce.
|
|
112
121
|
* @param {Object=} options Encryption parameters.
|
|
113
122
|
* @param {string=} options.kdf Key derivation function (default: DEFAULTS.crypto.kdf).
|
|
114
123
|
* @param {Object=} options.kdf_params KDF parameters (default: DEFAULTS.crypto.kdf_params).
|
|
115
|
-
* @return {
|
|
124
|
+
* @return {Buffer} Secret key derived from password.
|
|
116
125
|
*/
|
|
117
126
|
|
|
118
127
|
|
|
@@ -121,21 +130,22 @@ async function deriveKey(password, nonce) {
|
|
|
121
130
|
kdf_params: DEFAULTS.crypto.kdf_params,
|
|
122
131
|
kdf: DEFAULTS.crypto.kdf
|
|
123
132
|
};
|
|
133
|
+
if (!nonce) throw new ArgumentError('nonce', 'provided', nonce);
|
|
134
|
+
if (password == null) throw new ArgumentError('password', 'provided', password);
|
|
124
135
|
|
|
125
|
-
if (
|
|
126
|
-
throw new
|
|
136
|
+
if (!Object.prototype.hasOwnProperty.call(DERIVED_KEY_FUNCTIONS, options.kdf)) {
|
|
137
|
+
throw new UnsupportedAlgorithmError(options.kdf);
|
|
127
138
|
}
|
|
128
139
|
|
|
129
|
-
if (!Object.prototype.hasOwnProperty.call(DERIVED_KEY_FUNCTIONS, options.kdf)) throw new Error('Unsupported kdf type');
|
|
130
140
|
return DERIVED_KEY_FUNCTIONS[options.kdf](password, nonce, options);
|
|
131
141
|
}
|
|
132
142
|
/**
|
|
133
143
|
* Assemble key data object in secret-storage format.
|
|
134
|
-
* @param {
|
|
135
|
-
* @param {
|
|
136
|
-
* @param {
|
|
137
|
-
* @param {
|
|
138
|
-
* @param {
|
|
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.
|
|
139
149
|
* @param {Object=} options Encryption parameters.
|
|
140
150
|
* @param {string=} options.kdf Key derivation function (default: argon2id).
|
|
141
151
|
* @param {string=} options.cipher Symmetric cipher (default: constants.cipher).
|
|
@@ -156,14 +166,14 @@ function marshal(name, derivedKey, privateKey, nonce, salt) {
|
|
|
156
166
|
crypto: Object.assign({
|
|
157
167
|
secret_type: opt.secret_type,
|
|
158
168
|
symmetric_alg: opt.symmetric_alg,
|
|
159
|
-
ciphertext:
|
|
169
|
+
ciphertext: _Buffer.from(encrypt(_Buffer.from(privateKey), derivedKey, nonce, opt.symmetric_alg)).toString('hex'),
|
|
160
170
|
cipher_params: {
|
|
161
|
-
nonce:
|
|
171
|
+
nonce: _Buffer.from(nonce).toString('hex')
|
|
162
172
|
}
|
|
163
173
|
}, {
|
|
164
174
|
kdf: opt.kdf,
|
|
165
175
|
kdf_params: { ...opt.kdf_params,
|
|
166
|
-
salt:
|
|
176
|
+
salt: _Buffer.from(salt).toString('hex')
|
|
167
177
|
}
|
|
168
178
|
})
|
|
169
179
|
});
|
|
@@ -171,8 +181,10 @@ function marshal(name, derivedKey, privateKey, nonce, salt) {
|
|
|
171
181
|
|
|
172
182
|
export function getAddressFromPriv(secret) {
|
|
173
183
|
const keys = nacl.sign.keyPair.fromSecretKey(str2buf(secret));
|
|
174
|
-
|
|
175
|
-
|
|
184
|
+
|
|
185
|
+
const publicBuffer = _Buffer.from(keys.publicKey);
|
|
186
|
+
|
|
187
|
+
return encode(publicBuffer, 'ak');
|
|
176
188
|
}
|
|
177
189
|
/**
|
|
178
190
|
* Recover plaintext private key from secret-storage key object.
|
|
@@ -191,15 +203,15 @@ export async function recover(password, keyObject) {
|
|
|
191
203
|
kdf,
|
|
192
204
|
kdf_params: kdfParams
|
|
193
205
|
}), nonce, keyObject.crypto.symmetric_alg);
|
|
194
|
-
if (!key) throw new
|
|
195
|
-
if (
|
|
196
|
-
return
|
|
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');
|
|
197
209
|
}
|
|
198
210
|
/**
|
|
199
211
|
* Export private key to keystore secret-storage format.
|
|
200
212
|
* @param {String} name Key name.
|
|
201
213
|
* @param {String} password User-supplied password.
|
|
202
|
-
* @param {String} privateKey Private key.
|
|
214
|
+
* @param {String|Buffer} privateKey Private key as hex-string or a Buffer.
|
|
203
215
|
* @param {Buffer} nonce Randomly generated 24byte nonce.
|
|
204
216
|
* @param {Buffer} salt Randomly generated 16byte salt.
|
|
205
217
|
* @param {Object=} options Encryption parameters.
|
|
@@ -214,15 +226,15 @@ export async function dump(name, password, privateKey) {
|
|
|
214
226
|
let salt = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : nacl.randomBytes(16);
|
|
215
227
|
let options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};
|
|
216
228
|
const opt = Object.assign({}, DEFAULTS.crypto, options);
|
|
217
|
-
return marshal(name, await deriveKey(password, salt, opt), privateKey, nonce, salt, opt);
|
|
229
|
+
return marshal(name, await deriveKey(password, salt, opt), typeof privateKey === 'string' ? _Buffer.from(privateKey, 'hex') : privateKey, nonce, salt, opt);
|
|
218
230
|
}
|
|
219
231
|
export function validateKeyObj(obj) {
|
|
220
232
|
const root = ['crypto', 'id', 'version', 'public_key'];
|
|
221
233
|
const cryptoKeys = ['cipher_params', 'ciphertext', 'symmetric_alg', 'kdf', 'kdf_params'];
|
|
222
234
|
const missingRootKeys = root.filter(key => !Object.prototype.hasOwnProperty.call(obj, key));
|
|
223
|
-
if (missingRootKeys.length) throw new
|
|
235
|
+
if (missingRootKeys.length) throw new InvalidKeyError(`Invalid key file format. Require properties: ${missingRootKeys}`);
|
|
224
236
|
const missingCryptoKeys = cryptoKeys.filter(key => !Object.prototype.hasOwnProperty.call(obj.crypto, key));
|
|
225
|
-
if (missingCryptoKeys.length) throw new
|
|
237
|
+
if (missingCryptoKeys.length) throw new InvalidKeyError(`Invalid key file format. Require properties: ${missingCryptoKeys}`);
|
|
226
238
|
return true;
|
|
227
239
|
}
|
|
228
|
-
//# sourceMappingURL=keystore.
|
|
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"}
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
import _buffer from "buffer";
|
|
2
|
+
const {
|
|
3
|
+
Buffer: _Buffer
|
|
4
|
+
} = _buffer;
|
|
5
|
+
|
|
1
6
|
/*
|
|
2
7
|
* ISC License (ISC)
|
|
3
8
|
* Copyright (c) 2021 aeternity developers
|
|
@@ -14,8 +19,12 @@
|
|
|
14
19
|
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
15
20
|
* PERFORMANCE OF THIS SOFTWARE.
|
|
16
21
|
*/
|
|
17
|
-
import
|
|
18
|
-
|
|
22
|
+
import _rlp from 'rlp';
|
|
23
|
+
const {
|
|
24
|
+
encode: rlpEncode
|
|
25
|
+
} = _rlp;
|
|
26
|
+
import { hash } from "./crypto-ts.mjs";
|
|
27
|
+
import { MerkleTreeHashMismatchError, MissingNodeInTreeError, UnknownPathNibbleError, UnknownNodeLengthError } from "./errors.mjs";
|
|
19
28
|
var NodeType;
|
|
20
29
|
|
|
21
30
|
(function (NodeType) {
|
|
@@ -26,7 +35,7 @@ var NodeType;
|
|
|
26
35
|
|
|
27
36
|
export default class MPTree {
|
|
28
37
|
static nodeHash(node) {
|
|
29
|
-
return
|
|
38
|
+
return _Buffer.from(hash(rlpEncode(node))).toString('hex');
|
|
30
39
|
}
|
|
31
40
|
/**
|
|
32
41
|
* Deserialize Merkle Patricia Tree
|
|
@@ -39,10 +48,10 @@ export default class MPTree {
|
|
|
39
48
|
constructor(binary) {
|
|
40
49
|
this.rootHash = binary[0].toString('hex');
|
|
41
50
|
this.nodes = Object.fromEntries(binary[1].map(node => [node[0].toString('hex'), node[1]]));
|
|
42
|
-
if (this.nodes[this.rootHash] === undefined) throw new
|
|
51
|
+
if (this.nodes[this.rootHash] === undefined) throw new MissingNodeInTreeError('Can\'t find a node by root hash');
|
|
43
52
|
Object.entries(this.nodes).forEach(_ref => {
|
|
44
53
|
let [key, node] = _ref;
|
|
45
|
-
if (MPTree.nodeHash(node) !== key) throw new
|
|
54
|
+
if (MPTree.nodeHash(node) !== key) throw new MerkleTreeHashMismatchError();
|
|
46
55
|
const {
|
|
47
56
|
type,
|
|
48
57
|
payload
|
|
@@ -52,14 +61,14 @@ export default class MPTree {
|
|
|
52
61
|
case NodeType.Branch:
|
|
53
62
|
payload.slice(0, 16).filter(n => n.length).forEach(n => {
|
|
54
63
|
if (this.nodes[n.toString('hex')] === undefined) {
|
|
55
|
-
throw new
|
|
64
|
+
throw new MissingNodeInTreeError('Can\'t find a node by hash in branch node');
|
|
56
65
|
}
|
|
57
66
|
});
|
|
58
67
|
break;
|
|
59
68
|
|
|
60
69
|
case NodeType.Extension:
|
|
61
70
|
if (this.nodes[payload[0].toString('hex')] === undefined) {
|
|
62
|
-
throw new
|
|
71
|
+
throw new MissingNodeInTreeError('Can\'t find a node by hash in extension node');
|
|
63
72
|
}
|
|
64
73
|
|
|
65
74
|
}
|
|
@@ -83,7 +92,7 @@ export default class MPTree {
|
|
|
83
92
|
{
|
|
84
93
|
const path = node[0].toString('hex');
|
|
85
94
|
const nibble = parseInt(path[0], 16);
|
|
86
|
-
if (nibble > 3) throw new
|
|
95
|
+
if (nibble > 3) throw new UnknownPathNibbleError(nibble);
|
|
87
96
|
const type = nibble <= 1 ? NodeType.Extension : NodeType.Leaf;
|
|
88
97
|
const slice = [0, 2].includes(nibble) ? 2 : 1;
|
|
89
98
|
return {
|
|
@@ -94,7 +103,7 @@ export default class MPTree {
|
|
|
94
103
|
}
|
|
95
104
|
|
|
96
105
|
default:
|
|
97
|
-
throw new
|
|
106
|
+
throw new UnknownNodeLengthError(node.length);
|
|
98
107
|
}
|
|
99
108
|
}
|
|
100
109
|
/**
|
|
@@ -105,9 +114,9 @@ export default class MPTree {
|
|
|
105
114
|
|
|
106
115
|
|
|
107
116
|
serialize() {
|
|
108
|
-
return [
|
|
117
|
+
return [_Buffer.from(this.rootHash, 'hex'), Object.entries(this.nodes).map(_ref2 => {
|
|
109
118
|
let [mptHash, value] = _ref2;
|
|
110
|
-
return [
|
|
119
|
+
return [_Buffer.from(mptHash, 'hex'), value];
|
|
111
120
|
})];
|
|
112
121
|
}
|
|
113
122
|
/**
|
|
@@ -149,4 +158,4 @@ export default class MPTree {
|
|
|
149
158
|
}
|
|
150
159
|
|
|
151
160
|
}
|
|
152
|
-
//# sourceMappingURL=mptree.
|
|
161
|
+
//# sourceMappingURL=mptree.mjs.map
|