@bitgo/sdk-core 1.0.2-rc.0 → 1.1.0-rc.10
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/CHANGELOG.md +115 -0
- package/dist/src/account-lib/baseCoin/baseKeyPair.d.ts +27 -0
- package/dist/src/account-lib/baseCoin/baseKeyPair.d.ts.map +1 -0
- package/dist/src/account-lib/baseCoin/baseKeyPair.js +3 -0
- package/dist/src/account-lib/baseCoin/baseTransaction.d.ts +71 -0
- package/dist/src/account-lib/baseCoin/baseTransaction.d.ts.map +1 -0
- package/dist/src/account-lib/baseCoin/baseTransaction.js +69 -0
- package/dist/src/account-lib/baseCoin/baseTransactionBuilder.d.ts +128 -0
- package/dist/src/account-lib/baseCoin/baseTransactionBuilder.d.ts.map +1 -0
- package/dist/src/account-lib/baseCoin/baseTransactionBuilder.js +138 -0
- package/dist/src/account-lib/baseCoin/baseTransactionBuilderFactory.d.ts +29 -0
- package/dist/src/account-lib/baseCoin/baseTransactionBuilderFactory.d.ts.map +1 -0
- package/dist/src/account-lib/baseCoin/baseTransactionBuilderFactory.js +19 -0
- package/dist/src/account-lib/baseCoin/baseUtils.d.ts +45 -0
- package/dist/src/account-lib/baseCoin/baseUtils.d.ts.map +1 -0
- package/dist/src/account-lib/baseCoin/baseUtils.js +3 -0
- package/dist/src/account-lib/baseCoin/blsKeyPair.d.ts +75 -0
- package/dist/src/account-lib/baseCoin/blsKeyPair.d.ts.map +1 -0
- package/dist/src/account-lib/baseCoin/blsKeyPair.js +179 -0
- package/dist/src/account-lib/baseCoin/ed25519KeyPair.d.ts +50 -0
- package/dist/src/account-lib/baseCoin/ed25519KeyPair.d.ts.map +1 -0
- package/dist/src/account-lib/baseCoin/ed25519KeyPair.js +145 -0
- package/dist/src/account-lib/baseCoin/enum.d.ts +43 -0
- package/dist/src/account-lib/baseCoin/enum.d.ts.map +1 -0
- package/dist/src/account-lib/baseCoin/enum.js +70 -0
- package/dist/src/account-lib/baseCoin/errors.d.ts +59 -0
- package/dist/src/account-lib/baseCoin/errors.d.ts.map +1 -0
- package/dist/src/account-lib/baseCoin/errors.js +105 -0
- package/dist/src/account-lib/baseCoin/iface.d.ts +155 -0
- package/dist/src/account-lib/baseCoin/iface.d.ts.map +1 -0
- package/dist/src/account-lib/baseCoin/iface.js +38 -0
- package/dist/src/account-lib/baseCoin/index.d.ts +12 -0
- package/dist/src/account-lib/baseCoin/index.d.ts.map +1 -0
- package/dist/src/account-lib/baseCoin/index.js +31 -0
- package/dist/src/account-lib/baseCoin/secp256k1ExtendedKeyPair.d.ts +55 -0
- package/dist/src/account-lib/baseCoin/secp256k1ExtendedKeyPair.d.ts.map +1 -0
- package/dist/src/account-lib/baseCoin/secp256k1ExtendedKeyPair.js +124 -0
- package/dist/src/account-lib/index.d.ts +5 -0
- package/dist/src/account-lib/index.d.ts.map +1 -0
- package/dist/src/account-lib/index.js +17 -0
- package/dist/src/account-lib/mpc/curves/baseCurve.d.ts +19 -0
- package/dist/src/account-lib/mpc/curves/baseCurve.d.ts.map +1 -0
- package/dist/src/account-lib/mpc/curves/baseCurve.js +6 -0
- package/dist/src/account-lib/mpc/curves/ed25519.d.ts +17 -0
- package/dist/src/account-lib/mpc/curves/ed25519.d.ts.map +1 -0
- package/dist/src/account-lib/mpc/curves/ed25519.js +57 -0
- package/dist/src/account-lib/mpc/curves/index.d.ts +6 -0
- package/dist/src/account-lib/mpc/curves/index.d.ts.map +1 -0
- package/dist/src/account-lib/mpc/curves/index.js +8 -0
- package/dist/src/account-lib/mpc/curves/secp256k1.d.ts +17 -0
- package/dist/src/account-lib/mpc/curves/secp256k1.d.ts.map +1 -0
- package/dist/src/account-lib/mpc/curves/secp256k1.js +70 -0
- package/dist/src/account-lib/mpc/hdTree.d.ts +24 -0
- package/dist/src/account-lib/mpc/hdTree.d.ts.map +1 -0
- package/dist/src/account-lib/mpc/hdTree.js +94 -0
- package/dist/src/account-lib/mpc/index.d.ts +8 -0
- package/dist/src/account-lib/mpc/index.d.ts.map +1 -0
- package/dist/src/account-lib/mpc/index.js +23 -0
- package/dist/src/account-lib/mpc/shamir.d.ts +26 -0
- package/dist/src/account-lib/mpc/shamir.d.ts.map +1 -0
- package/dist/src/account-lib/mpc/shamir.js +86 -0
- package/dist/src/account-lib/mpc/tss/ecdsa/ecdsa.d.ts +25 -0
- package/dist/src/account-lib/mpc/tss/ecdsa/ecdsa.d.ts.map +1 -0
- package/dist/src/account-lib/mpc/tss/ecdsa/ecdsa.js +121 -0
- package/dist/src/account-lib/mpc/tss/ecdsa/index.d.ts +4 -0
- package/dist/src/account-lib/mpc/tss/ecdsa/index.d.ts.map +1 -0
- package/dist/src/account-lib/mpc/tss/ecdsa/index.js +29 -0
- package/dist/src/account-lib/mpc/tss/ecdsa/types.d.ts +40 -0
- package/dist/src/account-lib/mpc/tss/ecdsa/types.d.ts.map +1 -0
- package/dist/src/account-lib/mpc/tss/ecdsa/types.js +3 -0
- package/dist/src/account-lib/mpc/tss/eddsa/eddsa.d.ts +29 -0
- package/dist/src/account-lib/mpc/tss/eddsa/eddsa.d.ts.map +1 -0
- package/dist/src/account-lib/mpc/tss/eddsa/eddsa.js +273 -0
- package/dist/src/account-lib/mpc/tss/eddsa/index.d.ts +4 -0
- package/dist/src/account-lib/mpc/tss/eddsa/index.d.ts.map +1 -0
- package/dist/src/account-lib/mpc/tss/eddsa/index.js +30 -0
- package/dist/src/account-lib/mpc/tss/eddsa/types.d.ts +70 -0
- package/dist/src/account-lib/mpc/tss/eddsa/types.d.ts.map +1 -0
- package/dist/src/account-lib/mpc/tss/eddsa/types.js +3 -0
- package/dist/src/account-lib/mpc/tss/index.d.ts +6 -0
- package/dist/src/account-lib/mpc/tss/index.d.ts.map +1 -0
- package/dist/src/account-lib/mpc/tss/index.js +35 -0
- package/dist/src/account-lib/mpc/util.d.ts +8 -0
- package/dist/src/account-lib/mpc/util.d.ts.map +1 -0
- package/dist/src/account-lib/mpc/util.js +42 -0
- package/dist/src/account-lib/util/crypto.d.ts +106 -0
- package/dist/src/account-lib/util/crypto.d.ts.map +1 -0
- package/dist/src/account-lib/util/crypto.js +269 -0
- package/dist/src/account-lib/util/ed25519KeyDeriver.d.ts +49 -0
- package/dist/src/account-lib/util/ed25519KeyDeriver.d.ts.map +1 -0
- package/dist/src/account-lib/util/ed25519KeyDeriver.js +87 -0
- package/dist/src/api/bip32path.d.ts +24 -0
- package/dist/src/api/bip32path.d.ts.map +1 -0
- package/dist/src/api/bip32path.js +45 -0
- package/dist/src/api/index.d.ts +3 -0
- package/dist/src/api/index.d.ts.map +1 -0
- package/dist/src/{v2 → api}/index.js +2 -2
- package/dist/src/api/types.d.ts +20 -0
- package/dist/src/api/types.d.ts.map +1 -0
- package/dist/src/api/types.js +3 -0
- package/dist/src/bitgo/baseCoin/baseCoin.d.ts +230 -0
- package/dist/src/bitgo/baseCoin/baseCoin.d.ts.map +1 -0
- package/dist/src/bitgo/baseCoin/baseCoin.js +292 -0
- package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts +257 -0
- package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts.map +1 -0
- package/dist/src/bitgo/baseCoin/iBaseCoin.js +3 -0
- package/dist/src/bitgo/baseCoin/index.d.ts +3 -0
- package/dist/src/bitgo/baseCoin/index.d.ts.map +1 -0
- package/dist/src/bitgo/baseCoin/index.js +15 -0
- package/dist/src/bitgo/bip32util.d.ts +17 -0
- package/dist/src/bitgo/bip32util.d.ts.map +1 -0
- package/dist/src/bitgo/bip32util.js +59 -0
- package/dist/src/bitgo/bitcoin.d.ts +16 -0
- package/dist/src/bitgo/bitcoin.d.ts.map +1 -0
- package/dist/src/bitgo/bitcoin.js +52 -0
- package/dist/src/bitgo/bitgoBase.d.ts +22 -0
- package/dist/src/bitgo/bitgoBase.d.ts.map +1 -0
- package/dist/src/bitgo/bitgoBase.js +3 -0
- package/dist/src/bitgo/coinFactory.d.ts +31 -0
- package/dist/src/bitgo/coinFactory.d.ts.map +1 -0
- package/dist/src/bitgo/coinFactory.js +59 -0
- package/dist/src/bitgo/config.d.ts +8 -0
- package/dist/src/bitgo/config.d.ts.map +1 -0
- package/dist/src/bitgo/config.js +25 -0
- package/dist/src/bitgo/ecdh.d.ts +24 -0
- package/dist/src/bitgo/ecdh.d.ts.map +1 -0
- package/dist/src/bitgo/ecdh.js +80 -0
- package/dist/src/bitgo/enterprise/enterprise.d.ts +64 -0
- package/dist/src/bitgo/enterprise/enterprise.d.ts.map +1 -0
- package/dist/src/bitgo/enterprise/enterprise.js +120 -0
- package/dist/src/bitgo/enterprise/enterprises.d.ts +25 -0
- package/dist/src/bitgo/enterprise/enterprises.d.ts.map +1 -0
- package/dist/src/bitgo/enterprise/enterprises.js +70 -0
- package/dist/src/bitgo/enterprise/iEnterprise.d.ts +15 -0
- package/dist/src/bitgo/enterprise/iEnterprise.d.ts.map +1 -0
- package/dist/src/bitgo/enterprise/iEnterprise.js +3 -0
- package/dist/src/bitgo/enterprise/iEnterprises.d.ts +10 -0
- package/dist/src/bitgo/enterprise/iEnterprises.d.ts.map +1 -0
- package/dist/src/bitgo/enterprise/iEnterprises.js +3 -0
- package/dist/src/bitgo/enterprise/index.d.ts +5 -0
- package/dist/src/bitgo/enterprise/index.d.ts.map +1 -0
- package/dist/src/bitgo/enterprise/index.js +17 -0
- package/dist/src/{v2 → bitgo}/environments.d.ts +0 -0
- package/dist/src/bitgo/environments.d.ts.map +1 -0
- package/dist/src/bitgo/environments.js +142 -0
- package/dist/src/bitgo/errors.d.ts +83 -0
- package/dist/src/bitgo/errors.d.ts.map +1 -0
- package/dist/src/bitgo/errors.js +163 -0
- package/dist/src/bitgo/index.d.ts +26 -0
- package/dist/src/bitgo/index.d.ts.map +1 -0
- package/dist/src/bitgo/index.js +51 -0
- package/dist/src/bitgo/internal/index.d.ts +3 -0
- package/dist/src/bitgo/internal/index.d.ts.map +1 -0
- package/dist/src/bitgo/internal/index.js +15 -0
- package/dist/src/bitgo/internal/internal.d.ts +19 -0
- package/dist/src/bitgo/internal/internal.d.ts.map +1 -0
- package/dist/src/bitgo/internal/internal.js +33 -0
- package/dist/src/bitgo/internal/keycard.d.ts +33 -0
- package/dist/src/bitgo/internal/keycard.d.ts.map +1 -0
- package/dist/src/bitgo/internal/keycard.js +304 -0
- package/dist/src/bitgo/keychain/iKeychains.d.ts +118 -0
- package/dist/src/bitgo/keychain/iKeychains.d.ts.map +1 -0
- package/dist/src/bitgo/keychain/iKeychains.js +10 -0
- package/dist/src/bitgo/keychain/index.d.ts +3 -0
- package/dist/src/bitgo/keychain/index.d.ts.map +1 -0
- package/dist/src/bitgo/keychain/index.js +15 -0
- package/dist/src/bitgo/keychain/keychains.d.ts +90 -0
- package/dist/src/bitgo/keychain/keychains.d.ts.map +1 -0
- package/dist/src/bitgo/keychain/keychains.js +280 -0
- package/dist/src/bitgo/market/iMarkets.d.ts +12 -0
- package/dist/src/bitgo/market/iMarkets.d.ts.map +1 -0
- package/dist/src/bitgo/market/iMarkets.js +3 -0
- package/dist/src/bitgo/market/index.d.ts +3 -0
- package/dist/src/bitgo/market/index.d.ts.map +1 -0
- package/dist/src/bitgo/market/index.js +15 -0
- package/dist/src/bitgo/market/markets.d.ts +29 -0
- package/dist/src/bitgo/market/markets.d.ts.map +1 -0
- package/dist/src/bitgo/market/markets.js +70 -0
- package/dist/src/bitgo/pendingApproval/iPendingApproval.d.ts +73 -0
- package/dist/src/bitgo/pendingApproval/iPendingApproval.d.ts.map +1 -0
- package/dist/src/bitgo/pendingApproval/iPendingApproval.js +28 -0
- package/dist/src/bitgo/pendingApproval/iPendingApprovals.d.ts +16 -0
- package/dist/src/bitgo/pendingApproval/iPendingApprovals.d.ts.map +1 -0
- package/dist/src/bitgo/pendingApproval/iPendingApprovals.js +3 -0
- package/dist/src/bitgo/pendingApproval/index.d.ts +5 -0
- package/dist/src/bitgo/pendingApproval/index.d.ts.map +1 -0
- package/dist/src/bitgo/pendingApproval/index.js +17 -0
- package/dist/src/bitgo/pendingApproval/pendingApproval.d.ts +99 -0
- package/dist/src/bitgo/pendingApproval/pendingApproval.d.ts.map +1 -0
- package/dist/src/bitgo/pendingApproval/pendingApproval.js +319 -0
- package/dist/src/bitgo/pendingApproval/pendingApprovals.d.ts +19 -0
- package/dist/src/bitgo/pendingApproval/pendingApprovals.d.ts.map +1 -0
- package/dist/src/bitgo/pendingApproval/pendingApprovals.js +76 -0
- package/dist/src/bitgo/recovery/index.d.ts +2 -0
- package/dist/src/bitgo/recovery/index.d.ts.map +1 -0
- package/dist/src/bitgo/recovery/index.js +14 -0
- package/dist/src/bitgo/recovery/initiate.d.ts +49 -0
- package/dist/src/bitgo/recovery/initiate.d.ts.map +1 -0
- package/dist/src/bitgo/recovery/initiate.js +119 -0
- package/dist/src/bitgo/trading/affirmation.d.ts +35 -0
- package/dist/src/bitgo/trading/affirmation.d.ts.map +1 -0
- package/dist/src/bitgo/trading/affirmation.js +53 -0
- package/dist/src/bitgo/trading/affirmations.d.ts +23 -0
- package/dist/src/bitgo/trading/affirmations.d.ts.map +1 -0
- package/dist/src/bitgo/trading/affirmations.js +45 -0
- package/dist/src/bitgo/trading/iAffirmation.d.ts +15 -0
- package/dist/src/bitgo/trading/iAffirmation.d.ts.map +1 -0
- package/dist/src/bitgo/trading/iAffirmation.js +13 -0
- package/dist/src/bitgo/trading/iAffirmations.d.ts +10 -0
- package/dist/src/bitgo/trading/iAffirmations.d.ts.map +1 -0
- package/dist/src/bitgo/trading/iAffirmations.js +3 -0
- package/dist/src/bitgo/trading/iSettlement.d.ts +25 -0
- package/dist/src/bitgo/trading/iSettlement.d.ts.map +1 -0
- package/dist/src/bitgo/trading/iSettlement.js +17 -0
- package/dist/src/bitgo/trading/iSettlements.d.ts +19 -0
- package/dist/src/bitgo/trading/iSettlements.d.ts.map +1 -0
- package/dist/src/bitgo/trading/iSettlements.js +3 -0
- package/dist/src/bitgo/trading/iTradingAccount.d.ts +41 -0
- package/dist/src/bitgo/trading/iTradingAccount.d.ts.map +1 -0
- package/dist/src/bitgo/trading/iTradingAccount.js +3 -0
- package/dist/src/bitgo/trading/iTradingPartner.d.ts +14 -0
- package/dist/src/bitgo/trading/iTradingPartner.d.ts.map +1 -0
- package/dist/src/bitgo/trading/iTradingPartner.js +17 -0
- package/dist/src/bitgo/trading/iTradingPartners.d.ts +15 -0
- package/dist/src/bitgo/trading/iTradingPartners.d.ts.map +1 -0
- package/dist/src/bitgo/trading/iTradingPartners.js +9 -0
- package/dist/src/bitgo/trading/index.d.ts +18 -0
- package/dist/src/bitgo/trading/index.d.ts.map +1 -0
- package/dist/src/bitgo/trading/index.js +30 -0
- package/dist/src/bitgo/trading/lock.d.ts +16 -0
- package/dist/src/bitgo/trading/lock.d.ts.map +1 -0
- package/dist/src/bitgo/trading/lock.js +12 -0
- package/dist/src/bitgo/trading/payload.d.ts +22 -0
- package/dist/src/bitgo/trading/payload.d.ts.map +1 -0
- package/dist/src/bitgo/trading/payload.js +3 -0
- package/dist/src/bitgo/trading/settlement.d.ts +16 -0
- package/dist/src/bitgo/trading/settlement.d.ts.map +1 -0
- package/dist/src/bitgo/trading/settlement.js +21 -0
- package/dist/src/bitgo/trading/settlements.d.ts +32 -0
- package/dist/src/bitgo/trading/settlements.d.ts.map +1 -0
- package/dist/src/bitgo/trading/settlements.js +61 -0
- package/dist/src/bitgo/trading/trade.d.ts +29 -0
- package/dist/src/bitgo/trading/trade.d.ts.map +1 -0
- package/dist/src/bitgo/trading/trade.js +11 -0
- package/dist/src/bitgo/trading/tradingAccount.d.ts +53 -0
- package/dist/src/bitgo/trading/tradingAccount.d.ts.map +1 -0
- package/dist/src/bitgo/trading/tradingAccount.js +127 -0
- package/dist/src/bitgo/trading/tradingPartner.d.ts +26 -0
- package/dist/src/bitgo/trading/tradingPartner.d.ts.map +1 -0
- package/dist/src/bitgo/trading/tradingPartner.js +31 -0
- package/dist/src/bitgo/trading/tradingPartners.d.ts +24 -0
- package/dist/src/bitgo/trading/tradingPartners.d.ts.map +1 -0
- package/dist/src/bitgo/trading/tradingPartners.js +32 -0
- package/dist/src/bitgo/tss/eddsa/eddsa.d.ts +102 -0
- package/dist/src/bitgo/tss/eddsa/eddsa.d.ts.map +1 -0
- package/dist/src/bitgo/tss/eddsa/eddsa.js +256 -0
- package/dist/src/bitgo/tss/eddsa/index.d.ts +6 -0
- package/dist/src/bitgo/tss/eddsa/index.d.ts.map +1 -0
- package/dist/src/bitgo/tss/eddsa/index.js +37 -0
- package/dist/src/bitgo/tss/eddsa/types.d.ts +23 -0
- package/dist/src/bitgo/tss/eddsa/types.d.ts.map +1 -0
- package/dist/src/bitgo/tss/eddsa/types.js +3 -0
- package/dist/src/bitgo/tss/index.d.ts +5 -0
- package/dist/src/bitgo/tss/index.d.ts.map +1 -0
- package/dist/src/bitgo/tss/index.js +39 -0
- package/dist/src/bitgo/tss/types.d.ts +6 -0
- package/dist/src/bitgo/tss/types.d.ts.map +1 -0
- package/dist/src/bitgo/tss/types.js +10 -0
- package/dist/src/bitgo/types.d.ts +4 -0
- package/dist/src/bitgo/types.d.ts.map +1 -0
- package/dist/src/bitgo/types.js +3 -0
- package/dist/src/bitgo/utils/abstractUtxoCoinUtil.d.ts +6 -0
- package/dist/src/bitgo/utils/abstractUtxoCoinUtil.d.ts.map +1 -0
- package/dist/src/bitgo/utils/abstractUtxoCoinUtil.js +30 -0
- package/dist/src/bitgo/utils/blsUtils.d.ts +51 -0
- package/dist/src/bitgo/utils/blsUtils.d.ts.map +1 -0
- package/dist/src/bitgo/utils/blsUtils.js +166 -0
- package/dist/src/bitgo/utils/iBlsUtils.d.ts +14 -0
- package/dist/src/bitgo/utils/iBlsUtils.d.ts.map +1 -0
- package/dist/src/bitgo/utils/iBlsUtils.js +3 -0
- package/dist/src/bitgo/utils/index.d.ts +12 -0
- package/dist/src/bitgo/utils/index.d.ts.map +1 -0
- package/dist/src/bitgo/utils/index.js +37 -0
- package/dist/src/bitgo/utils/mpcUtils.d.ts +31 -0
- package/dist/src/bitgo/utils/mpcUtils.d.ts.map +1 -0
- package/dist/src/bitgo/utils/mpcUtils.js +55 -0
- package/dist/src/bitgo/utils/opengpgUtils.d.ts +51 -0
- package/dist/src/bitgo/utils/opengpgUtils.d.ts.map +1 -0
- package/dist/src/bitgo/utils/opengpgUtils.js +136 -0
- package/dist/src/bitgo/utils/promise-utils.d.ts +5 -0
- package/dist/src/bitgo/utils/promise-utils.d.ts.map +1 -0
- package/dist/src/bitgo/utils/promise-utils.js +12 -0
- package/dist/src/bitgo/utils/triple.d.ts +3 -0
- package/dist/src/bitgo/utils/triple.d.ts.map +1 -0
- package/dist/src/bitgo/utils/triple.js +8 -0
- package/dist/src/bitgo/utils/tss/eddsa/eddsa.d.ts +117 -0
- package/dist/src/bitgo/utils/tss/eddsa/eddsa.d.ts.map +1 -0
- package/dist/src/bitgo/utils/tss/eddsa/eddsa.js +351 -0
- package/dist/src/bitgo/utils/tss/eddsa/index.d.ts +5 -0
- package/dist/src/bitgo/utils/tss/eddsa/index.d.ts.map +1 -0
- package/dist/src/bitgo/utils/tss/eddsa/index.js +29 -0
- package/dist/src/bitgo/utils/tss/eddsa/types.d.ts +72 -0
- package/dist/src/bitgo/utils/tss/eddsa/types.d.ts.map +1 -0
- package/dist/src/bitgo/utils/tss/eddsa/types.js +10 -0
- package/dist/src/bitgo/utils/tss/index.d.ts +4 -0
- package/dist/src/bitgo/utils/tss/index.d.ts.map +1 -0
- package/dist/src/bitgo/utils/tss/index.js +29 -0
- package/dist/src/bitgo/utils/util.d.ts +77 -0
- package/dist/src/bitgo/utils/util.d.ts.map +1 -0
- package/dist/src/bitgo/utils/util.js +198 -0
- package/dist/src/bitgo/wallet/iWallet.d.ts +510 -0
- package/dist/src/bitgo/wallet/iWallet.d.ts.map +1 -0
- package/dist/src/bitgo/wallet/iWallet.js +3 -0
- package/dist/src/bitgo/wallet/iWallets.d.ts +105 -0
- package/dist/src/bitgo/wallet/iWallets.d.ts.map +1 -0
- package/dist/src/bitgo/wallet/iWallets.js +3 -0
- package/dist/src/bitgo/wallet/index.d.ts +5 -0
- package/dist/src/bitgo/wallet/index.d.ts.map +1 -0
- package/dist/src/bitgo/wallet/index.js +17 -0
- package/dist/src/bitgo/wallet/wallet.d.ts +650 -0
- package/dist/src/bitgo/wallet/wallet.d.ts.map +1 -0
- package/dist/src/bitgo/wallet/wallet.js +2039 -0
- package/dist/src/bitgo/wallet/wallets.d.ts +134 -0
- package/dist/src/bitgo/wallet/wallets.d.ts.map +1 -0
- package/dist/src/bitgo/wallet/wallets.js +605 -0
- package/dist/src/bitgo/webhook/iWebhooks.d.ts +26 -0
- package/dist/src/bitgo/webhook/iWebhooks.d.ts.map +1 -0
- package/dist/src/bitgo/webhook/iWebhooks.js +3 -0
- package/dist/src/bitgo/webhook/index.d.ts +3 -0
- package/dist/src/bitgo/webhook/index.d.ts.map +1 -0
- package/dist/src/bitgo/webhook/index.js +15 -0
- package/dist/src/bitgo/webhook/webhooks.d.ts +43 -0
- package/dist/src/bitgo/webhook/webhooks.d.ts.map +1 -0
- package/dist/src/bitgo/webhook/webhooks.js +102 -0
- package/dist/src/{bigojsError.d.ts → bitgojsError.d.ts} +1 -1
- package/dist/src/bitgojsError.d.ts.map +1 -0
- package/dist/src/bitgojsError.js +11 -0
- package/dist/src/common.d.ts +1 -1
- package/dist/src/common.d.ts.map +1 -1
- package/dist/src/common.js +3 -3
- package/dist/src/index.d.ts +4 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +6 -5
- package/dist/tsconfig.tsbuildinfo +3458 -153
- package/package.json +27 -3
- package/dist/src/bigojsError.d.ts.map +0 -1
- package/dist/src/bigojsError.js +0 -11
- package/dist/src/v2/environments.d.ts.map +0 -1
- package/dist/src/v2/environments.js +0 -142
- package/dist/src/v2/index.d.ts +0 -3
- package/dist/src/v2/index.d.ts.map +0 -1
- package/dist/src/v2/types.d.ts +0 -2
- package/dist/src/v2/types.d.ts.map +0 -1
- package/dist/src/v2/types.js +0 -3
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { ExtendedKeys } from '../baseCoin/iface';
|
|
3
|
+
/**
|
|
4
|
+
* @param {string} xpub - a base-58 encoded extended public key (BIP32)
|
|
5
|
+
* @returns {string} the uncompressed public key in hexadecimal
|
|
6
|
+
*/
|
|
7
|
+
export declare function xpubToUncompressedPub(xpub: string): string;
|
|
8
|
+
/**
|
|
9
|
+
* @param {string} xprv - base58-encoded extended private key (BIP32)
|
|
10
|
+
* @returns {string} the hex-encoded raw private key
|
|
11
|
+
*/
|
|
12
|
+
export declare function xprvToRawPrv(xprv: string): string;
|
|
13
|
+
/**
|
|
14
|
+
* @param {string} prv - Private key in hex format to get the extended keys for
|
|
15
|
+
* @returns {ExtendedKeys} xprv and xpub in string format
|
|
16
|
+
*/
|
|
17
|
+
export declare function rawPrvToExtendedKeys(prv: string): ExtendedKeys;
|
|
18
|
+
/**
|
|
19
|
+
* Whether the input is a valid BIP32 xpub or not
|
|
20
|
+
*
|
|
21
|
+
* @param xpub
|
|
22
|
+
*/
|
|
23
|
+
export declare function isValidXpub(xpub: string): boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Whether the input is a valid BIP32 xprv or not
|
|
26
|
+
*
|
|
27
|
+
* @param xprv
|
|
28
|
+
*/
|
|
29
|
+
export declare function isValidXprv(xprv: string): boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Whether the input is a valid secp256k1 public key
|
|
32
|
+
*
|
|
33
|
+
* @param pub
|
|
34
|
+
*/
|
|
35
|
+
export declare function isValidPub(pub: string): boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Whether the input is a valid secp256k1 private key
|
|
38
|
+
*
|
|
39
|
+
* @param prv
|
|
40
|
+
*/
|
|
41
|
+
export declare function isValidPrv(prv: string): boolean;
|
|
42
|
+
/**
|
|
43
|
+
* Whether the input is a valid ed25519 private key
|
|
44
|
+
*
|
|
45
|
+
* @param {string} prv A hexadecimal private key to validate
|
|
46
|
+
* @returns {boolean} Whether the input is a valid public key or not
|
|
47
|
+
*/
|
|
48
|
+
export declare function isValidEd25519Seed(prv: string): boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Whether the input is a valid ed25519 private key
|
|
51
|
+
*
|
|
52
|
+
* @param {string} prv A hexadecimal private key to validate
|
|
53
|
+
* @returns {boolean} Whether the input is a valid public key or not
|
|
54
|
+
*/
|
|
55
|
+
export declare function isValidEd25519SecretKey(prv: string): boolean;
|
|
56
|
+
/**
|
|
57
|
+
* Whether the input is a valid ed25519 public key
|
|
58
|
+
*
|
|
59
|
+
* @param {string} pub A hexadecimal public key to validate
|
|
60
|
+
* @returns {boolean} Whether the input is a valid public key or not
|
|
61
|
+
*/
|
|
62
|
+
export declare function isValidEd25519PublicKey(pub: string): boolean;
|
|
63
|
+
/**
|
|
64
|
+
* Whether the input is a valid BLS private key
|
|
65
|
+
*
|
|
66
|
+
* @param {string} prv a private key to validate
|
|
67
|
+
* @returns {boolean} Whether the input is a valid private key or not
|
|
68
|
+
*/
|
|
69
|
+
export declare function isValidBLSPrivateKey(prv: string): boolean;
|
|
70
|
+
/**
|
|
71
|
+
* Whether input is a valid BLS public key
|
|
72
|
+
*
|
|
73
|
+
* @param {string} pub the public key to validate
|
|
74
|
+
* @returns {boolean} Whether input is a valid public key or not
|
|
75
|
+
*/
|
|
76
|
+
export declare function isValidBLSPublicKey(pub: string): boolean;
|
|
77
|
+
/**
|
|
78
|
+
* Returns an hex string of the given buffer
|
|
79
|
+
*
|
|
80
|
+
* @param {Buffer | Uint8Array} buffer - the buffer to be converted to hex
|
|
81
|
+
* @returns {string} - the hex value
|
|
82
|
+
*/
|
|
83
|
+
export declare function toHex(buffer: Buffer | Uint8Array): string;
|
|
84
|
+
/**
|
|
85
|
+
* Returns an hex string of the given bigint
|
|
86
|
+
*
|
|
87
|
+
* @param {bigint} bigint - the bigint to be converted to hex
|
|
88
|
+
* @returns {string} - the hex value
|
|
89
|
+
*/
|
|
90
|
+
export declare function bigIntToHex(bigint: bigint): string;
|
|
91
|
+
/**
|
|
92
|
+
* Check if base58 decoded string is equale to length
|
|
93
|
+
*
|
|
94
|
+
* @param {string} value - string to be checked
|
|
95
|
+
* @param {number} length - expected decoded length
|
|
96
|
+
* @return {boolean} if the string can decoded as base58 and match the expected length
|
|
97
|
+
*/
|
|
98
|
+
export declare function isBase58(value: string, length: number): boolean;
|
|
99
|
+
/**
|
|
100
|
+
* Returns a Uint8Array of the given hex string
|
|
101
|
+
*
|
|
102
|
+
* @param {string} str - the hex string to be converted
|
|
103
|
+
* @returns {string} - the Uint8Array value
|
|
104
|
+
*/
|
|
105
|
+
export declare function toUint8Array(str: string): Uint8Array;
|
|
106
|
+
//# sourceMappingURL=crypto.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../../../src/account-lib/util/crypto.ts"],"names":[],"mappings":";AAMA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGjD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAO1D;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAUjD;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAM9D;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAYjD;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAYjD;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAO/C;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAO/C;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAOvD;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAO5D;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAO5D;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAMzD;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAOxD;AAED;;;;;GAKG;AACH,wBAAgB,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM,CAEzD;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAGlD;AAED;;;;;;GAMG;AAEH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAM/D;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAEpD"}
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
+
if (mod && mod.__esModule) return mod;
|
|
16
|
+
var result = {};
|
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
+
__setModuleDefault(result, mod);
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
21
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
22
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
23
|
+
};
|
|
24
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
+
exports.toUint8Array = exports.isBase58 = exports.bigIntToHex = exports.toHex = exports.isValidBLSPublicKey = exports.isValidBLSPrivateKey = exports.isValidEd25519PublicKey = exports.isValidEd25519SecretKey = exports.isValidEd25519Seed = exports.isValidPrv = exports.isValidPub = exports.isValidXprv = exports.isValidXpub = exports.rawPrvToExtendedKeys = exports.xprvToRawPrv = exports.xpubToUncompressedPub = void 0;
|
|
26
|
+
const bip32 = __importStar(require("bip32"));
|
|
27
|
+
const bitcoinjs_lib_1 = require("bitcoinjs-lib");
|
|
28
|
+
const nacl = __importStar(require("tweetnacl"));
|
|
29
|
+
const hex = __importStar(require("@stablelib/hex"));
|
|
30
|
+
const bls = __importStar(require("noble-bls12-381"));
|
|
31
|
+
const strip_hex_prefix_1 = __importDefault(require("strip-hex-prefix"));
|
|
32
|
+
const bs58_1 = __importDefault(require("bs58"));
|
|
33
|
+
/**
|
|
34
|
+
* @param {string} xpub - a base-58 encoded extended public key (BIP32)
|
|
35
|
+
* @returns {string} the uncompressed public key in hexadecimal
|
|
36
|
+
*/
|
|
37
|
+
function xpubToUncompressedPub(xpub) {
|
|
38
|
+
if (!isValidXpub(xpub)) {
|
|
39
|
+
throw new Error('invalid xpub');
|
|
40
|
+
}
|
|
41
|
+
return bitcoinjs_lib_1.ECPair.fromPublicKey(bip32.fromBase58(xpub, bitcoinjs_lib_1.networks.bitcoin).publicKey, {
|
|
42
|
+
compressed: false,
|
|
43
|
+
}).publicKey.toString('hex');
|
|
44
|
+
}
|
|
45
|
+
exports.xpubToUncompressedPub = xpubToUncompressedPub;
|
|
46
|
+
/**
|
|
47
|
+
* @param {string} xprv - base58-encoded extended private key (BIP32)
|
|
48
|
+
* @returns {string} the hex-encoded raw private key
|
|
49
|
+
*/
|
|
50
|
+
function xprvToRawPrv(xprv) {
|
|
51
|
+
if (!isValidXprv(xprv)) {
|
|
52
|
+
throw new Error('invalid xprv');
|
|
53
|
+
}
|
|
54
|
+
const { privateKey } = bip32.fromBase58(xprv, bitcoinjs_lib_1.networks.bitcoin);
|
|
55
|
+
if (!privateKey) {
|
|
56
|
+
throw new Error('invalid xprv');
|
|
57
|
+
}
|
|
58
|
+
return privateKey.toString('hex');
|
|
59
|
+
}
|
|
60
|
+
exports.xprvToRawPrv = xprvToRawPrv;
|
|
61
|
+
/**
|
|
62
|
+
* @param {string} prv - Private key in hex format to get the extended keys for
|
|
63
|
+
* @returns {ExtendedKeys} xprv and xpub in string format
|
|
64
|
+
*/
|
|
65
|
+
function rawPrvToExtendedKeys(prv) {
|
|
66
|
+
const hd = bip32.fromPrivateKey(Buffer.from(prv, 'hex'), Buffer.alloc(32));
|
|
67
|
+
return {
|
|
68
|
+
xprv: hd.toBase58(),
|
|
69
|
+
xpub: hd.neutered().toBase58(),
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
exports.rawPrvToExtendedKeys = rawPrvToExtendedKeys;
|
|
73
|
+
/**
|
|
74
|
+
* Whether the input is a valid BIP32 xpub or not
|
|
75
|
+
*
|
|
76
|
+
* @param xpub
|
|
77
|
+
*/
|
|
78
|
+
function isValidXpub(xpub) {
|
|
79
|
+
if (xpub.substr(0, 4) !== 'xpub') {
|
|
80
|
+
// check for xpub formats we don't support, such as tpub
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
try {
|
|
84
|
+
bip32.fromBase58(xpub, bitcoinjs_lib_1.networks.bitcoin);
|
|
85
|
+
}
|
|
86
|
+
catch (err) {
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
// if HD generation didn't throw, it is a valid xpub
|
|
90
|
+
return true;
|
|
91
|
+
}
|
|
92
|
+
exports.isValidXpub = isValidXpub;
|
|
93
|
+
/**
|
|
94
|
+
* Whether the input is a valid BIP32 xprv or not
|
|
95
|
+
*
|
|
96
|
+
* @param xprv
|
|
97
|
+
*/
|
|
98
|
+
function isValidXprv(xprv) {
|
|
99
|
+
if (xprv.substr(0, 4) !== 'xprv') {
|
|
100
|
+
// check for xprv formats we don't support
|
|
101
|
+
return false;
|
|
102
|
+
}
|
|
103
|
+
try {
|
|
104
|
+
bip32.fromBase58(xprv, bitcoinjs_lib_1.networks.bitcoin);
|
|
105
|
+
}
|
|
106
|
+
catch (err) {
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
109
|
+
// if HD generation didn't throw, it is a valid xprv
|
|
110
|
+
return true;
|
|
111
|
+
}
|
|
112
|
+
exports.isValidXprv = isValidXprv;
|
|
113
|
+
/**
|
|
114
|
+
* Whether the input is a valid secp256k1 public key
|
|
115
|
+
*
|
|
116
|
+
* @param pub
|
|
117
|
+
*/
|
|
118
|
+
function isValidPub(pub) {
|
|
119
|
+
try {
|
|
120
|
+
bitcoinjs_lib_1.ECPair.fromPublicKey(Buffer.from(pub, 'hex'));
|
|
121
|
+
}
|
|
122
|
+
catch (e) {
|
|
123
|
+
return false;
|
|
124
|
+
}
|
|
125
|
+
return true;
|
|
126
|
+
}
|
|
127
|
+
exports.isValidPub = isValidPub;
|
|
128
|
+
/**
|
|
129
|
+
* Whether the input is a valid secp256k1 private key
|
|
130
|
+
*
|
|
131
|
+
* @param prv
|
|
132
|
+
*/
|
|
133
|
+
function isValidPrv(prv) {
|
|
134
|
+
try {
|
|
135
|
+
bitcoinjs_lib_1.ECPair.fromPrivateKey(Buffer.from(prv, 'hex'));
|
|
136
|
+
}
|
|
137
|
+
catch (e) {
|
|
138
|
+
return false;
|
|
139
|
+
}
|
|
140
|
+
return true;
|
|
141
|
+
}
|
|
142
|
+
exports.isValidPrv = isValidPrv;
|
|
143
|
+
/**
|
|
144
|
+
* Whether the input is a valid ed25519 private key
|
|
145
|
+
*
|
|
146
|
+
* @param {string} prv A hexadecimal private key to validate
|
|
147
|
+
* @returns {boolean} Whether the input is a valid public key or not
|
|
148
|
+
*/
|
|
149
|
+
function isValidEd25519Seed(prv) {
|
|
150
|
+
try {
|
|
151
|
+
const decodedPrv = toUint8Array(prv);
|
|
152
|
+
return decodedPrv.length === nacl.sign.seedLength;
|
|
153
|
+
}
|
|
154
|
+
catch (e) {
|
|
155
|
+
return false;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
exports.isValidEd25519Seed = isValidEd25519Seed;
|
|
159
|
+
/**
|
|
160
|
+
* Whether the input is a valid ed25519 private key
|
|
161
|
+
*
|
|
162
|
+
* @param {string} prv A hexadecimal private key to validate
|
|
163
|
+
* @returns {boolean} Whether the input is a valid public key or not
|
|
164
|
+
*/
|
|
165
|
+
function isValidEd25519SecretKey(prv) {
|
|
166
|
+
try {
|
|
167
|
+
const decodedPrv = toUint8Array(prv);
|
|
168
|
+
return decodedPrv.length === nacl.sign.secretKeyLength;
|
|
169
|
+
}
|
|
170
|
+
catch (e) {
|
|
171
|
+
return false;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
exports.isValidEd25519SecretKey = isValidEd25519SecretKey;
|
|
175
|
+
/**
|
|
176
|
+
* Whether the input is a valid ed25519 public key
|
|
177
|
+
*
|
|
178
|
+
* @param {string} pub A hexadecimal public key to validate
|
|
179
|
+
* @returns {boolean} Whether the input is a valid public key or not
|
|
180
|
+
*/
|
|
181
|
+
function isValidEd25519PublicKey(pub) {
|
|
182
|
+
try {
|
|
183
|
+
const decodedPub = new Uint8Array(Buffer.from(pub, 'hex'));
|
|
184
|
+
return decodedPub.length === nacl.sign.publicKeyLength;
|
|
185
|
+
}
|
|
186
|
+
catch (e) {
|
|
187
|
+
return false;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
exports.isValidEd25519PublicKey = isValidEd25519PublicKey;
|
|
191
|
+
/**
|
|
192
|
+
* Whether the input is a valid BLS private key
|
|
193
|
+
*
|
|
194
|
+
* @param {string} prv a private key to validate
|
|
195
|
+
* @returns {boolean} Whether the input is a valid private key or not
|
|
196
|
+
*/
|
|
197
|
+
function isValidBLSPrivateKey(prv) {
|
|
198
|
+
try {
|
|
199
|
+
return bls.Fr.isValid(BigInt(prv));
|
|
200
|
+
}
|
|
201
|
+
catch (e) {
|
|
202
|
+
return false;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
exports.isValidBLSPrivateKey = isValidBLSPrivateKey;
|
|
206
|
+
/**
|
|
207
|
+
* Whether input is a valid BLS public key
|
|
208
|
+
*
|
|
209
|
+
* @param {string} pub the public key to validate
|
|
210
|
+
* @returns {boolean} Whether input is a valid public key or not
|
|
211
|
+
*/
|
|
212
|
+
function isValidBLSPublicKey(pub) {
|
|
213
|
+
try {
|
|
214
|
+
bls.PointG1.fromCompressedHex(strip_hex_prefix_1.default(pub)).assertValidity();
|
|
215
|
+
return true;
|
|
216
|
+
}
|
|
217
|
+
catch (e) {
|
|
218
|
+
return false;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
exports.isValidBLSPublicKey = isValidBLSPublicKey;
|
|
222
|
+
/**
|
|
223
|
+
* Returns an hex string of the given buffer
|
|
224
|
+
*
|
|
225
|
+
* @param {Buffer | Uint8Array} buffer - the buffer to be converted to hex
|
|
226
|
+
* @returns {string} - the hex value
|
|
227
|
+
*/
|
|
228
|
+
function toHex(buffer) {
|
|
229
|
+
return hex.encode(buffer, true);
|
|
230
|
+
}
|
|
231
|
+
exports.toHex = toHex;
|
|
232
|
+
/**
|
|
233
|
+
* Returns an hex string of the given bigint
|
|
234
|
+
*
|
|
235
|
+
* @param {bigint} bigint - the bigint to be converted to hex
|
|
236
|
+
* @returns {string} - the hex value
|
|
237
|
+
*/
|
|
238
|
+
function bigIntToHex(bigint) {
|
|
239
|
+
const hex = bigint.toString(16);
|
|
240
|
+
return '0x' + '0'.slice(0, hex.length % 2) + hex;
|
|
241
|
+
}
|
|
242
|
+
exports.bigIntToHex = bigIntToHex;
|
|
243
|
+
/**
|
|
244
|
+
* Check if base58 decoded string is equale to length
|
|
245
|
+
*
|
|
246
|
+
* @param {string} value - string to be checked
|
|
247
|
+
* @param {number} length - expected decoded length
|
|
248
|
+
* @return {boolean} if the string can decoded as base58 and match the expected length
|
|
249
|
+
*/
|
|
250
|
+
function isBase58(value, length) {
|
|
251
|
+
try {
|
|
252
|
+
return !!value && bs58_1.default.decode(value).length === length;
|
|
253
|
+
}
|
|
254
|
+
catch (e) {
|
|
255
|
+
return false;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
exports.isBase58 = isBase58;
|
|
259
|
+
/**
|
|
260
|
+
* Returns a Uint8Array of the given hex string
|
|
261
|
+
*
|
|
262
|
+
* @param {string} str - the hex string to be converted
|
|
263
|
+
* @returns {string} - the Uint8Array value
|
|
264
|
+
*/
|
|
265
|
+
function toUint8Array(str) {
|
|
266
|
+
return hex.decode(str);
|
|
267
|
+
}
|
|
268
|
+
exports.toUint8Array = toUint8Array;
|
|
269
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J5cHRvLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FjY291bnQtbGliL3V0aWwvY3J5cHRvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw2Q0FBK0I7QUFDL0IsaURBQWlEO0FBQ2pELGdEQUFrQztBQUNsQyxvREFBc0M7QUFDdEMscURBQXVDO0FBQ3ZDLHdFQUE4QztBQUU5QyxnREFBd0I7QUFFeEI7OztHQUdHO0FBQ0gsU0FBZ0IscUJBQXFCLENBQUMsSUFBWTtJQUNoRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ3RCLE1BQU0sSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7S0FDakM7SUFDRCxPQUFPLHNCQUFNLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLHdCQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxFQUFFO1FBQzlFLFVBQVUsRUFBRSxLQUFLO0tBQ2xCLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQy9CLENBQUM7QUFQRCxzREFPQztBQUVEOzs7R0FHRztBQUNILFNBQWdCLFlBQVksQ0FBQyxJQUFZO0lBQ3ZDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDdEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztLQUNqQztJQUVELE1BQU0sRUFBRSxVQUFVLEVBQUUsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSx3QkFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2hFLElBQUksQ0FBQyxVQUFVLEVBQUU7UUFDZixNQUFNLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0tBQ2pDO0lBQ0QsT0FBTyxVQUFVLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BDLENB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SUFDeEMsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQyxPQUFPLElBQUksR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNuRCxDQUFDO0FBSEQsa0NBR0M7QUFFRDs7Ozs7O0dBTUc7QUFFSCxTQUFnQixRQUFRLENBQUMsS0FBYSxFQUFFLE1BQWM7SUFDcEQsSUFBSTtRQUNGLE9BQU8sQ0FBQyxDQUFDLEtBQUssSUFBSSxjQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUM7S0FDeEQ7SUFBQyxPQUFPLENBQUMsRUFBRTtRQUNWLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7QUFDSCxDQUFDO0FBTkQsNEJBTUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLFlBQVksQ0FBQyxHQUFXO0lBQ3RDLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6QixDQUFDO0FBRkQsb0NBRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBiaXAzMiBmcm9tICdiaXAzMic7XG5pbXBvcnQgeyBFQ1BhaXIsIG5ldHdvcmtzIH0gZnJvbSAnYml0Y29pbmpzLWxpYic7XG5pbXBvcnQgKiBhcyBuYWNsIGZyb20gJ3R3ZWV0bmFjbCc7XG5pbXBvcnQgKiBhcyBoZXggZnJvbSAnQHN0YWJsZWxpYi9oZXgnO1xuaW1wb3J0ICogYXMgYmxzIGZyb20gJ25vYmxlLWJsczEyLTM4MSc7XG5pbXBvcnQgc3RyaXBIZXhQcmVmaXggZnJvbSAnc3RyaXAtaGV4LXByZWZpeCc7XG5pbXBvcnQgeyBFeHRlbmRlZEtleXMgfSBmcm9tICcuLi9iYXNlQ29pbi9pZmFjZSc7XG5pbXBvcnQgYnM1OCBmcm9tICdiczU4JztcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30geHB1YiAtIGEgYmFzZS01OCBlbmNvZGVkIGV4dGVuZGVkIHB1YmxpYyBrZXkgKEJJUDMyKVxuICogQHJldHVybnMge3N0cmluZ30gdGhlIHVuY29tcHJlc3NlZCBwdWJsaWMga2V5IGluIGhleGFkZWNpbWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB4cHViVG9VbmNvbXByZXNzZWRQdWIoeHB1Yjogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKCFpc1ZhbGlkWHB1Yih4cHViKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCB4cHViJyk7XG4gIH1cbiAgcmV0dXJuIEVDUGFpci5mcm9tUHVibGljS2V5KGJpcDMyLmZyb21CYXNlNTgoeHB1YiwgbmV0d29ya3MuYml0Y29pbikucHVibGljS2V5LCB7XG4gICAgY29tcHJlc3NlZDogZmFsc2UsXG4gIH0pLnB1YmxpY0tleS50b1N0cmluZygnaGV4Jyk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHhwcnYgLSBiYXNlNTgtZW5jb2RlZCBleHRlbmRlZCBwcml2YXRlIGtleSAoQklQMzIpXG4gKiBAcmV0dXJucyB7c3RyaW5nfSB0aGUgaGV4LWVuY29kZWQgcmF3IHByaXZhdGUga2V5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB4cHJ2VG9SYXdQcnYoeHBydjogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKCFpc1ZhbGlkWHBydih4cHJ2KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCB4cHJ2Jyk7XG4gIH1cblxuICBjb25zdCB7IHByaXZhdGVLZXkgfSA9IGJpcDMyLmZyb21CYXNlNTgoeHBydiwgbmV0d29ya3MuYml0Y29pbik7XG4gIGlmICghcHJpdmF0ZUtleSkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCB4cHJ2Jyk7XG4gIH1cbiAgcmV0dXJuIHByaXZhdGVLZXkudG9TdHJpbmcoJ2hleCcpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcnYgLSBQcml2YXRlIGtleSBpbiBoZXggZm9ybWF0IHRvIGdldCB0aGUgZXh0ZW5kZWQga2V5cyBmb3JcbiAqIEByZXR1cm5zIHtFeHRlbmRlZEtleXN9IHhwcnYgYW5kIHhwdWIgaW4gc3RyaW5nIGZvcm1hdFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmF3UHJ2VG9FeHRlbmRlZEtleXMocHJ2OiBzdHJpbmcpOiBFeHRlbmRlZEtleXMge1xuICBjb25zdCBoZCA9IGJpcDMyLmZyb21Qcml2YXRlS2V5KEJ1ZmZlci5mcm9tKHBydiwgJ2hleCcpLCBCdWZmZXIuYWxsb2MoMzIpKTtcbiAgcmV0dXJuIHtcbiAgICB4cHJ2OiBoZC50b0Jhc2U1OCgpLFxuICAgIHhwdWI6IGhkLm5ldXRlcmVkKCkudG9CYXNlNTgoKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBXaGV0aGVyIHRoZSBpbnB1dCBpcyBhIHZhbGlkIEJJUDMyIHhwdWIgb3Igbm90XG4gKlxuICogQHBhcmFtIHhwdWJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRYcHViKHhwdWI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAoeHB1Yi5zdWJzdHIoMCwgNCkgIT09ICd4cHViJykge1xuICAgIC8vIGNoZWNrIGZvciB4cHViIGZvcm1hdHMgd2UgZG9uJ3Qgc3VwcG9ydCwgc3VjaCBhcyB0cHViXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHRyeSB7XG4gICAgYmlwMzIuZnJvbUJhc2U1OCh4cHViLCBuZXR3b3Jrcy5iaXRjb2luKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIGlmIEhEIGdlbmVyYXRpb24gZGlkbid0IHRocm93LCBpdCBpcyBhIHZhbGlkIHhwdWJcbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogV2hldGhlciB0aGUgaW5wdXQgaXMgYSB2YWxpZCBCSVAzMiB4cHJ2IG9yIG5vdFxuICpcbiAqIEBwYXJhbSB4cHJ2XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkWHBydih4cHJ2OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKHhwcnYuc3Vic3RyKDAsIDQpICE9PSAneHBydicpIHtcbiAgICAvLyBjaGVjayBmb3IgeHBydiBmb3JtYXRzIHdlIGRvbid0IHN1cHBvcnRcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdHJ5IHtcbiAgICBiaXAzMi5mcm9tQmFzZTU4KHhwcnYsIG5ldHdvcmtzLmJpdGNvaW4pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gaWYgSEQgZ2VuZXJhdGlvbiBkaWRuJ3QgdGhyb3csIGl0IGlzIGEgdmFsaWQgeHBydlxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBXaGV0aGVyIHRoZSBpbnB1dCBpcyBhIHZhbGlkIHNlY3AyNTZrMSBwdWJsaWMga2V5XG4gKlxuICogQHBhcmFtIHB1YlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZFB1YihwdWI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICB0cnkge1xuICAgIEVDUGFpci5mcm9tUHVibGljS2V5KEJ1ZmZlci5mcm9tKHB1YiwgJ2hleCcpKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBXaGV0aGVyIHRoZSBpbnB1dCBpcyBhIHZhbGlkIHNlY3AyNTZrMSBwcml2YXRlIGtleVxuICpcbiAqIEBwYXJhbSBwcnZcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRQcnYocHJ2OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgdHJ5IHtcbiAgICBFQ1BhaXIuZnJvbVByaXZhdGVLZXkoQnVmZmVyLmZyb20ocHJ2LCAnaGV4JykpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIFdoZXRoZXIgdGhlIGlucHV0IGlzIGEgdmFsaWQgZWQyNTUxOSBwcml2YXRlIGtleVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcnYgQSBoZXhhZGVjaW1hbCBwcml2YXRlIGtleSB0byB2YWxpZGF0ZVxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIGlucHV0IGlzIGEgdmFsaWQgcHVibGljIGtleSBvciBub3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRFZDI1NTE5U2VlZChwcnY6IHN0cmluZyk6IGJvb2xlYW4ge1xuICB0cnkge1xuICAgIGNvbnN0IGRlY29kZWRQcnYgPSB0b1VpbnQ4QXJyYXkocHJ2KTtcbiAgICByZXR1cm4gZGVjb2RlZFBydi5sZW5ndGggPT09IG5hY2wuc2lnbi5zZWVkTGVuZ3RoO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogV2hldGhlciB0aGUgaW5wdXQgaXMgYSB2YWxpZCBlZDI1NTE5IHByaXZhdGUga2V5XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBydiBBIGhleGFkZWNpbWFsIHByaXZhdGUga2V5IHRvIHZhbGlkYXRlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGUgaW5wdXQgaXMgYSB2YWxpZCBwdWJsaWMga2V5IG9yIG5vdFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZEVkMjU1MTlTZWNyZXRLZXkocHJ2OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBkZWNvZGVkUHJ2ID0gdG9VaW50OEFycmF5KHBydik7XG4gICAgcmV0dXJuIGRlY29kZWRQcnYubGVuZ3RoID09PSBuYWNsLnNpZ24uc2VjcmV0S2V5TGVuZ3RoO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogV2hldGhlciB0aGUgaW5wdXQgaXMgYSB2YWxpZCBlZDI1NTE5IHB1YmxpYyBrZXlcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcHViIEEgaGV4YWRlY2ltYWwgcHVibGljIGtleSB0byB2YWxpZGF0ZVxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIGlucHV0IGlzIGEgdmFsaWQgcHVibGljIGtleSBvciBub3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRFZDI1NTE5UHVibGljS2V5KHB1Yjogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgY29uc3QgZGVjb2RlZFB1YiA9IG5ldyBVaW50OEFycmF5KEJ1ZmZlci5mcm9tKHB1YiwgJ2hleCcpKTtcbiAgICByZXR1cm4gZGVjb2RlZFB1Yi5sZW5ndGggPT09IG5hY2wuc2lnbi5wdWJsaWNLZXlMZW5ndGg7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBXaGV0aGVyIHRoZSBpbnB1dCBpcyBhIHZhbGlkIEJMUyBwcml2YXRlIGtleVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcnYgYSBwcml2YXRlIGtleSB0byB2YWxpZGF0ZVxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIGlucHV0IGlzIGEgdmFsaWQgcHJpdmF0ZSBrZXkgb3Igbm90XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkQkxTUHJpdmF0ZUtleShwcnY6IHN0cmluZyk6IGJvb2xlYW4ge1xuICB0cnkge1xuICAgIHJldHVybiBibHMuRnIuaXNWYWxpZChCaWdJbnQocHJ2KSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBXaGV0aGVyIGlucHV0IGlzIGEgdmFsaWQgQkxTIHB1YmxpYyBrZXlcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcHViIHRoZSBwdWJsaWMga2V5IHRvIHZhbGlkYXRlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBpbnB1dCBpcyBhIHZhbGlkIHB1YmxpYyBrZXkgb3Igbm90XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkQkxTUHVibGljS2V5KHB1Yjogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgYmxzLlBvaW50RzEuZnJvbUNvbXByZXNzZWRIZXgoc3RyaXBIZXhQcmVmaXgocHViKSkuYXNzZXJ0VmFsaWRpdHkoKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgYW4gaGV4IHN0cmluZyBvZiB0aGUgZ2l2ZW4gYnVmZmVyXG4gKlxuICogQHBhcmFtIHtCdWZmZXIgfCBVaW50OEFycmF5fSBidWZmZXIgLSB0aGUgYnVmZmVyIHRvIGJlIGNvbnZlcnRlZCB0byBoZXhcbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gdGhlIGhleCB2YWx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9IZXgoYnVmZmVyOiBCdWZmZXIgfCBVaW50OEFycmF5KTogc3RyaW5nIHtcbiAgcmV0dXJuIGhleC5lbmNvZGUoYnVmZmVyLCB0cnVlKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFuIGhleCBzdHJpbmcgb2YgdGhlIGdpdmVuIGJpZ2ludFxuICpcbiAqIEBwYXJhbSB7YmlnaW50fSBiaWdpbnQgLSB0aGUgYmlnaW50IHRvIGJlIGNvbnZlcnRlZCB0byBoZXhcbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gdGhlIGhleCB2YWx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYmlnSW50VG9IZXgoYmlnaW50OiBiaWdpbnQpOiBzdHJpbmcge1xuICBjb25zdCBoZXggPSBiaWdpbnQudG9TdHJpbmcoMTYpO1xuICByZXR1cm4gJzB4JyArICcwJy5zbGljZSgwLCBoZXgubGVuZ3RoICUgMikgKyBoZXg7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYmFzZTU4IGRlY29kZWQgc3RyaW5nIGlzIGVxdWFsZSB0byBsZW5ndGhcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUgLSBzdHJpbmcgdG8gYmUgY2hlY2tlZFxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aCAtIGV4cGVjdGVkIGRlY29kZWQgbGVuZ3RoXG4gKiBAcmV0dXJuIHtib29sZWFufSBpZiB0aGUgc3RyaW5nIGNhbiBkZWNvZGVkIGFzIGJhc2U1OCBhbmQgbWF0Y2ggdGhlIGV4cGVjdGVkIGxlbmd0aFxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Jhc2U1OCh2YWx1ZTogc3RyaW5nLCBsZW5ndGg6IG51bWJlcik6IGJvb2xlYW4ge1xuICB0cnkge1xuICAgIHJldHVybiAhIXZhbHVlICYmIGJzNTguZGVjb2RlKHZhbHVlKS5sZW5ndGggPT09IGxlbmd0aDtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgYSBVaW50OEFycmF5IG9mIHRoZSBnaXZlbiBoZXggc3RyaW5nXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0ciAtIHRoZSBoZXggc3RyaW5nIHRvIGJlIGNvbnZlcnRlZFxuICogQHJldHVybnMge3N0cmluZ30gLSB0aGUgVWludDhBcnJheSB2YWx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9VaW50OEFycmF5KHN0cjogc3RyaW5nKTogVWludDhBcnJheSB7XG4gIHJldHVybiBoZXguZGVjb2RlKHN0cik7XG59XG4iXX0=
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
export interface HdKeypair {
|
|
3
|
+
key: Buffer;
|
|
4
|
+
chainCode: Buffer;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Heirarchical determinisitic key derivation for the ed25519 elliptic curve,
|
|
8
|
+
* as defined in SLIP-0010.
|
|
9
|
+
*
|
|
10
|
+
* https://github.com/stellar/stellar-protocol/blob/master/ecosystem/sep-0005.md
|
|
11
|
+
* https://github.com/satoshilabs/slips/blob/master/slip-0010.md
|
|
12
|
+
*/
|
|
13
|
+
export declare class Ed25519KeyDeriver {
|
|
14
|
+
/**
|
|
15
|
+
* This key derivation code was copied and adapted from:
|
|
16
|
+
* https://github.com/chatch/stellar-hd-wallet/blob/612c12325ca9047dce460016fb7d148f55f575ca/src/hd-key.js
|
|
17
|
+
*
|
|
18
|
+
* There have been some slight modifications to improve typescript support.
|
|
19
|
+
*
|
|
20
|
+
* The original ed25519-hd-key module is licensed under "GPL-3".
|
|
21
|
+
*/
|
|
22
|
+
private static readonly ED25519_CURVE;
|
|
23
|
+
private static readonly HARDENED_OFFSET;
|
|
24
|
+
private static readonly PATH_REGEX;
|
|
25
|
+
/**
|
|
26
|
+
* Derive a SLIP-0010 key given a path and master key seed.
|
|
27
|
+
*
|
|
28
|
+
* @param path derivation path
|
|
29
|
+
* @param seed key seed
|
|
30
|
+
*/
|
|
31
|
+
static derivePath(path: string, seed: string): HdKeypair;
|
|
32
|
+
/**
|
|
33
|
+
* Generate a SLIP-0010 master key from the entropy seed
|
|
34
|
+
*
|
|
35
|
+
* @param seed master key seed used to recreate master key
|
|
36
|
+
*/
|
|
37
|
+
private static getMasterKeyFromSeed;
|
|
38
|
+
/**
|
|
39
|
+
* Calculate a child private key given the parent key, the chain code, and the child index.
|
|
40
|
+
*
|
|
41
|
+
* @param key parent key
|
|
42
|
+
* @param chainCode chain code for parent key
|
|
43
|
+
* @param index index of child to derive
|
|
44
|
+
*/
|
|
45
|
+
private static CKDPriv;
|
|
46
|
+
private static replaceDerive;
|
|
47
|
+
private static isValidPath;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=ed25519KeyDeriver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ed25519KeyDeriver.d.ts","sourceRoot":"","sources":["../../../../src/account-lib/util/ed25519KeyDeriver.ts"],"names":[],"mappings":";AAKA,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;GAMG;AACH,qBAAa,iBAAiB;IAC5B;;;;;;;OAOG;IAEH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAkB;IACvD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAc;IACrD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAkC;IAEpE;;;;;OAKG;WACW,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS;IAY/D;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAWnC;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,OAAO;IAatB,OAAO,CAAC,MAAM,CAAC,aAAa,CAA+D;IAC3F,OAAO,CAAC,MAAM,CAAC,WAAW;CAM3B"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.Ed25519KeyDeriver = void 0;
|
|
7
|
+
/**
|
|
8
|
+
* @prettier
|
|
9
|
+
*/
|
|
10
|
+
const create_hmac_1 = __importDefault(require("create-hmac"));
|
|
11
|
+
/**
|
|
12
|
+
* Heirarchical determinisitic key derivation for the ed25519 elliptic curve,
|
|
13
|
+
* as defined in SLIP-0010.
|
|
14
|
+
*
|
|
15
|
+
* https://github.com/stellar/stellar-protocol/blob/master/ecosystem/sep-0005.md
|
|
16
|
+
* https://github.com/satoshilabs/slips/blob/master/slip-0010.md
|
|
17
|
+
*/
|
|
18
|
+
class Ed25519KeyDeriver {
|
|
19
|
+
/**
|
|
20
|
+
* Derive a SLIP-0010 key given a path and master key seed.
|
|
21
|
+
*
|
|
22
|
+
* @param path derivation path
|
|
23
|
+
* @param seed key seed
|
|
24
|
+
*/
|
|
25
|
+
static derivePath(path, seed) {
|
|
26
|
+
if (!this.isValidPath(path)) {
|
|
27
|
+
throw new Error('Invalid derivation path');
|
|
28
|
+
}
|
|
29
|
+
const { key, chainCode } = this.getMasterKeyFromSeed(seed);
|
|
30
|
+
const segments = path.split('/').slice(1).map(this.replaceDerive);
|
|
31
|
+
return segments.reduce((parentKeys, segment) => this.CKDPriv(parentKeys, segment + Ed25519KeyDeriver.HARDENED_OFFSET), { key, chainCode });
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Generate a SLIP-0010 master key from the entropy seed
|
|
35
|
+
*
|
|
36
|
+
* @param seed master key seed used to recreate master key
|
|
37
|
+
*/
|
|
38
|
+
static getMasterKeyFromSeed(seed) {
|
|
39
|
+
const hmac = create_hmac_1.default('sha512', Ed25519KeyDeriver.ED25519_CURVE);
|
|
40
|
+
const I = hmac.update(Buffer.from(seed, 'hex')).digest();
|
|
41
|
+
const IL = I.slice(0, 32);
|
|
42
|
+
const IR = I.slice(32);
|
|
43
|
+
return {
|
|
44
|
+
key: IL,
|
|
45
|
+
chainCode: IR,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Calculate a child private key given the parent key, the chain code, and the child index.
|
|
50
|
+
*
|
|
51
|
+
* @param key parent key
|
|
52
|
+
* @param chainCode chain code for parent key
|
|
53
|
+
* @param index index of child to derive
|
|
54
|
+
*/
|
|
55
|
+
static CKDPriv({ key, chainCode }, index) {
|
|
56
|
+
const indexBuffer = Buffer.allocUnsafe(4);
|
|
57
|
+
indexBuffer.writeUInt32BE(index, 0);
|
|
58
|
+
const data = Buffer.concat([Buffer.alloc(1, 0), key, indexBuffer]);
|
|
59
|
+
const I = create_hmac_1.default('sha512', chainCode).update(data).digest();
|
|
60
|
+
const IL = I.slice(0, 32);
|
|
61
|
+
const IR = I.slice(32);
|
|
62
|
+
return {
|
|
63
|
+
key: IL,
|
|
64
|
+
chainCode: IR,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
static isValidPath(path) {
|
|
68
|
+
if (!Ed25519KeyDeriver.PATH_REGEX.test(path)) {
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
return !path.split('/').slice(1).map(this.replaceDerive).some(isNaN);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
exports.Ed25519KeyDeriver = Ed25519KeyDeriver;
|
|
75
|
+
/**
|
|
76
|
+
* This key derivation code was copied and adapted from:
|
|
77
|
+
* https://github.com/chatch/stellar-hd-wallet/blob/612c12325ca9047dce460016fb7d148f55f575ca/src/hd-key.js
|
|
78
|
+
*
|
|
79
|
+
* There have been some slight modifications to improve typescript support.
|
|
80
|
+
*
|
|
81
|
+
* The original ed25519-hd-key module is licensed under "GPL-3".
|
|
82
|
+
*/
|
|
83
|
+
Ed25519KeyDeriver.ED25519_CURVE = 'ed25519 seed';
|
|
84
|
+
Ed25519KeyDeriver.HARDENED_OFFSET = 0x80000000;
|
|
85
|
+
Ed25519KeyDeriver.PATH_REGEX = new RegExp("^m(\\/[0-9]+')+$");
|
|
86
|
+
Ed25519KeyDeriver.replaceDerive = (val) => parseInt(val.replace("'", ''), 10);
|
|
87
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWQyNTUxOUtleURlcml2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYWNjb3VudC1saWIvdXRpbC9lZDI1NTE5S2V5RGVyaXZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTs7R0FFRztBQUNILDhEQUFxQztBQU9yQzs7Ozs7O0dBTUc7QUFDSCxNQUFhLGlCQUFpQjtJQWM1Qjs7Ozs7T0FLRztJQUNJLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBWSxFQUFFLElBQVk7UUFDakQsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDM0IsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1NBQzVDO1FBQ0QsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0QsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNsRSxPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQ3BCLENBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsT0FBTyxHQUFHLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxFQUM5RixFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsQ0FDbkIsQ0FBQztJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssTUFBTSxDQUFDLG9CQUFvQixDQUFDLElBQVk7UUFDOUMsTUFBTSxJQUFJLEdBQUcscUJBQVUsQ0FBQyxRQUFRLEVBQUUsaUJBQWlCLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDbkUsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3pELE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzFCLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdkIsT0FBTztZQUNMLEdBQUcsRUFBRSxFQUFFO1lBQ1AsU0FBUyxFQUFFLEVBQUU7U0FDZCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNLLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFhLEVBQUUsS0FBYTtRQUNqRSxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3BDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUNuRSxNQUFNLENBQUMsR0FBRyxxQkFBVSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDaEUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDMUIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN2QixPQUFPO1lBQ0wsR0FBRyxFQUFFLEVBQUU7WUFDUCxTQUFTLEVBQUUsRUFBRTtTQUNkLENBQUM7SUFDSixDQUFDO0lBR08sTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFZO1FBQ3JDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzVDLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkUsQ0FBQzs7QUExRUgsOENBMkVDO0FBMUVDOzs7Ozs7O0dBT0c7QUFFcUIsK0JBQWEsR0FBRyxjQUFjLENBQUM7QUFDL0IsaUNBQWUsR0FBRyxVQUFVLENBQUM7QUFDN0IsNEJBQVUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBd0RyRCwrQkFBYSxHQUFHLENBQUMsR0FBVyxFQUFVLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBwcmV0dGllclxuICovXG5pbXBvcnQgY3JlYXRlSG1hYyBmcm9tICdjcmVhdGUtaG1hYyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGRLZXlwYWlyIHtcbiAga2V5OiBCdWZmZXI7XG4gIGNoYWluQ29kZTogQnVmZmVyO1xufVxuXG4vKipcbiAqIEhlaXJhcmNoaWNhbCBkZXRlcm1pbmlzaXRpYyBrZXkgZGVyaXZhdGlvbiBmb3IgdGhlIGVkMjU1MTkgZWxsaXB0aWMgY3VydmUsXG4gKiBhcyBkZWZpbmVkIGluIFNMSVAtMDAxMC5cbiAqXG4gKiBodHRwczovL2dpdGh1Yi5jb20vc3RlbGxhci9zdGVsbGFyLXByb3RvY29sL2Jsb2IvbWFzdGVyL2Vjb3N5c3RlbS9zZXAtMDAwNS5tZFxuICogaHR0cHM6Ly9naXRodWIuY29tL3NhdG9zaGlsYWJzL3NsaXBzL2Jsb2IvbWFzdGVyL3NsaXAtMDAxMC5tZFxuICovXG5leHBvcnQgY2xhc3MgRWQyNTUxOUtleURlcml2ZXIge1xuICAvKipcbiAgICogVGhpcyBrZXkgZGVyaXZhdGlvbiBjb2RlIHdhcyBjb3BpZWQgYW5kIGFkYXB0ZWQgZnJvbTpcbiAgICogaHR0cHM6Ly9naXRodWIuY29tL2NoYXRjaC9zdGVsbGFyLWhkLXdhbGxldC9ibG9iLzYxMmMxMjMyNWNhOTA0N2RjZTQ2MDAxNmZiN2QxNDhmNTVmNTc1Y2Evc3JjL2hkLWtleS5qc1xuICAgKlxuICAgKiBUaGVyZSBoYXZlIGJlZW4gc29tZSBzbGlnaHQgbW9kaWZpY2F0aW9ucyB0byBpbXByb3ZlIHR5cGVzY3JpcHQgc3VwcG9ydC5cbiAgICpcbiAgICogVGhlIG9yaWdpbmFsIGVkMjU1MTktaGQta2V5IG1vZHVsZSBpcyBsaWNlbnNlZCB1bmRlciBcIkdQTC0zXCIuXG4gICAqL1xuXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEVEMjU1MTlfQ1VSVkUgPSAnZWQyNTUxOSBzZWVkJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgSEFSREVORURfT0ZGU0VUID0gMHg4MDAwMDAwMDtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgUEFUSF9SRUdFWCA9IG5ldyBSZWdFeHAoXCJebShcXFxcL1swLTldKycpKyRcIik7XG5cbiAgLyoqXG4gICAqIERlcml2ZSBhIFNMSVAtMDAxMCBrZXkgZ2l2ZW4gYSBwYXRoIGFuZCBtYXN0ZXIga2V5IHNlZWQuXG4gICAqXG4gICAqIEBwYXJhbSBwYXRoIGRlcml2YXRpb24gcGF0aFxuICAgKiBAcGFyYW0gc2VlZCBrZXkgc2VlZFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBkZXJpdmVQYXRoKHBhdGg6IHN0cmluZywgc2VlZDogc3RyaW5nKTogSGRLZXlwYWlyIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZFBhdGgocGF0aCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBkZXJpdmF0aW9uIHBhdGgnKTtcbiAgICB9XG4gICAgY29uc3QgeyBrZXksIGNoYWluQ29kZSB9ID0gdGhpcy5nZXRNYXN0ZXJLZXlGcm9tU2VlZChzZWVkKTtcbiAgICBjb25zdCBzZWdtZW50cyA9IHBhdGguc3BsaXQoJy8nKS5zbGljZSgxKS5tYXAodGhpcy5yZXBsYWNlRGVyaXZlKTtcbiAgICByZXR1cm4gc2VnbWVudHMucmVkdWNlKFxuICAgICAgKHBhcmVudEtleXMsIHNlZ21lbnQpID0+IHRoaXMuQ0tEUHJpdihwYXJlbnRLZXlzLCBzZWdtZW50ICsgRWQyNTUxOUtleURlcml2ZXIuSEFSREVORURfT0ZGU0VUKSxcbiAgICAgIHsga2V5LCBjaGFpbkNvZGUgfVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgYSBTTElQLTAwMTAgbWFzdGVyIGtleSBmcm9tIHRoZSBlbnRyb3B5IHNlZWRcbiAgICpcbiAgICogQHBhcmFtIHNlZWQgbWFzdGVyIGtleSBzZWVkIHVzZWQgdG8gcmVjcmVhdGUgbWFzdGVyIGtleVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0TWFzdGVyS2V5RnJvbVNlZWQoc2VlZDogc3RyaW5nKSB7XG4gICAgY29uc3QgaG1hYyA9IGNyZWF0ZUhtYWMoJ3NoYTUxMicsIEVkMjU1MTlLZXlEZXJpdmVyLkVEMjU1MTlfQ1VSVkUpO1xuICAgIGNvbnN0IEkgPSBobWFjLnVwZGF0ZShCdWZmZXIuZnJvbShzZWVkLCAnaGV4JykpLmRpZ2VzdCgpO1xuICAgIGNvbnN0IElMID0gSS5zbGljZSgwLCAzMik7XG4gICAgY29uc3QgSVIgPSBJLnNsaWNlKDMyKTtcbiAgICByZXR1cm4ge1xuICAgICAga2V5OiBJTCxcbiAgICAgIGNoYWluQ29kZTogSVIsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgYSBjaGlsZCBwcml2YXRlIGtleSBnaXZlbiB0aGUgcGFyZW50IGtleSwgdGhlIGNoYWluIGNvZGUsIGFuZCB0aGUgY2hpbGQgaW5kZXguXG4gICAqXG4gICAqIEBwYXJhbSBrZXkgcGFyZW50IGtleVxuICAgKiBAcGFyYW0gY2hhaW5Db2RlIGNoYWluIGNvZGUgZm9yIHBhcmVudCBrZXlcbiAgICogQHBhcmFtIGluZGV4IGluZGV4IG9mIGNoaWxkIHRvIGRlcml2ZVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgQ0tEUHJpdih7IGtleSwgY2hhaW5Db2RlIH06IEhkS2V5cGFpciwgaW5kZXg6IG51bWJlcik6IEhkS2V5cGFpciB7XG4gICAgY29uc3QgaW5kZXhCdWZmZXIgPSBCdWZmZXIuYWxsb2NVbnNhZmUoNCk7XG4gICAgaW5kZXhCdWZmZXIud3JpdGVVSW50MzJCRShpbmRleCwgMCk7XG4gICAgY29uc3QgZGF0YSA9IEJ1ZmZlci5jb25jYXQoW0J1ZmZlci5hbGxvYygxLCAwKSwga2V5LCBpbmRleEJ1ZmZlcl0pO1xuICAgIGNvbnN0IEkgPSBjcmVhdGVIbWFjKCdzaGE1MTInLCBjaGFpbkNvZGUpLnVwZGF0ZShkYXRhKS5kaWdlc3QoKTtcbiAgICBjb25zdCBJTCA9IEkuc2xpY2UoMCwgMzIpO1xuICAgIGNvbnN0IElSID0gSS5zbGljZSgzMik7XG4gICAgcmV0dXJuIHtcbiAgICAgIGtleTogSUwsXG4gICAgICBjaGFpbkNvZGU6IElSLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyByZXBsYWNlRGVyaXZlID0gKHZhbDogc3RyaW5nKTogbnVtYmVyID0+IHBhcnNlSW50KHZhbC5yZXBsYWNlKFwiJ1wiLCAnJyksIDEwKTtcbiAgcHJpdmF0ZSBzdGF0aWMgaXNWYWxpZFBhdGgocGF0aDogc3RyaW5nKSB7XG4gICAgaWYgKCFFZDI1NTE5S2V5RGVyaXZlci5QQVRIX1JFR0VYLnRlc3QocGF0aCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuICFwYXRoLnNwbGl0KCcvJykuc2xpY2UoMSkubWFwKHRoaXMucmVwbGFjZURlcml2ZSkuc29tZShpc05hTik7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @prettier
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* BitGoJS includes some custom hand-rolled bip32 derivation logic in `bitcoin.ts`, which sadly
|
|
6
|
+
* has numerous bugs.
|
|
7
|
+
*
|
|
8
|
+
* One of the effects is that the methods accept invalid bip32 paths:
|
|
9
|
+
* - the `m` prefix is ignored ('m/0' === '0')
|
|
10
|
+
* - path components that cannot be parsed as base-10 numbers are mapped to `0` ('0/x' === '0/0')
|
|
11
|
+
* - path components with trailing characters after numerals are accepted, trailing characters
|
|
12
|
+
* are ignored ('1x' === '1')
|
|
13
|
+
*
|
|
14
|
+
* This probably does not cover everything but it should cover most bugs encountered in our code.
|
|
15
|
+
*
|
|
16
|
+
* This method attempts to convert a "legacy path", which may be invalid, to a standard bip32 path:
|
|
17
|
+
* meaning the result should be equivalent to the input path when passed to either our custom
|
|
18
|
+
* derivation log or when passed to a standard bip32 library.
|
|
19
|
+
*
|
|
20
|
+
* @param path - legacy path
|
|
21
|
+
* @return string - somewhat sanitized path that can be passed to standard bip32 libraries
|
|
22
|
+
*/
|
|
23
|
+
export declare function sanitizeLegacyPath(path: string): string;
|
|
24
|
+
//# sourceMappingURL=bip32path.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bip32path.d.ts","sourceRoot":"","sources":["../../../src/api/bip32path.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAkBvD"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @prettier
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.sanitizeLegacyPath = void 0;
|
|
7
|
+
/**
|
|
8
|
+
* BitGoJS includes some custom hand-rolled bip32 derivation logic in `bitcoin.ts`, which sadly
|
|
9
|
+
* has numerous bugs.
|
|
10
|
+
*
|
|
11
|
+
* One of the effects is that the methods accept invalid bip32 paths:
|
|
12
|
+
* - the `m` prefix is ignored ('m/0' === '0')
|
|
13
|
+
* - path components that cannot be parsed as base-10 numbers are mapped to `0` ('0/x' === '0/0')
|
|
14
|
+
* - path components with trailing characters after numerals are accepted, trailing characters
|
|
15
|
+
* are ignored ('1x' === '1')
|
|
16
|
+
*
|
|
17
|
+
* This probably does not cover everything but it should cover most bugs encountered in our code.
|
|
18
|
+
*
|
|
19
|
+
* This method attempts to convert a "legacy path", which may be invalid, to a standard bip32 path:
|
|
20
|
+
* meaning the result should be equivalent to the input path when passed to either our custom
|
|
21
|
+
* derivation log or when passed to a standard bip32 library.
|
|
22
|
+
*
|
|
23
|
+
* @param path - legacy path
|
|
24
|
+
* @return string - somewhat sanitized path that can be passed to standard bip32 libraries
|
|
25
|
+
*/
|
|
26
|
+
function sanitizeLegacyPath(path) {
|
|
27
|
+
const parts = path
|
|
28
|
+
.split('/')
|
|
29
|
+
.filter((p) => p !== '')
|
|
30
|
+
.filter((p, i) => i !== 0 || p !== 'm')
|
|
31
|
+
.map((p) => {
|
|
32
|
+
const hardened = p.slice(-1) === "'";
|
|
33
|
+
const v = parseInt(p.slice(0, hardened ? -1 : undefined), 10);
|
|
34
|
+
if (Number.isNaN(v)) {
|
|
35
|
+
return '0';
|
|
36
|
+
}
|
|
37
|
+
return String(v) + (hardened ? "'" : '');
|
|
38
|
+
});
|
|
39
|
+
if (parts.length === 0) {
|
|
40
|
+
throw new Error(`empty path`);
|
|
41
|
+
}
|
|
42
|
+
return parts.join('/');
|
|
43
|
+
}
|
|
44
|
+
exports.sanitizeLegacyPath = sanitizeLegacyPath;
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlwMzJwYXRoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwaS9iaXAzMnBhdGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOztHQUVHOzs7QUFFSDs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBQ0gsU0FBZ0Isa0JBQWtCLENBQUMsSUFBWTtJQUM3QyxNQUFNLEtBQUssR0FBYSxJQUFJO1NBQ3pCLEtBQUssQ0FBQyxHQUFHLENBQUM7U0FDVixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDdkIsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDO1NBQ3RDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQ1QsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQztRQUNyQyxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDOUQsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ25CLE9BQU8sR0FBRyxDQUFDO1NBQ1o7UUFDRCxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMzQyxDQUFDLENBQUMsQ0FBQztJQUVMLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDdEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztLQUMvQjtJQUNELE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6QixDQUFDO0FBbEJELGdEQWtCQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHByZXR0aWVyXG4gKi9cblxuLyoqXG4gKiBCaXRHb0pTIGluY2x1ZGVzIHNvbWUgY3VzdG9tIGhhbmQtcm9sbGVkIGJpcDMyIGRlcml2YXRpb24gbG9naWMgaW4gYGJpdGNvaW4udHNgLCB3aGljaCBzYWRseVxuICogaGFzIG51bWVyb3VzIGJ1Z3MuXG4gKlxuICogT25lIG9mIHRoZSBlZmZlY3RzIGlzIHRoYXQgdGhlIG1ldGhvZHMgYWNjZXB0IGludmFsaWQgYmlwMzIgcGF0aHM6XG4gKiAtIHRoZSBgbWAgcHJlZml4IGlzIGlnbm9yZWQgKCdtLzAnID09PSAnMCcpXG4gKiAtIHBhdGggY29tcG9uZW50cyB0aGF0IGNhbm5vdCBiZSBwYXJzZWQgYXMgYmFzZS0xMCBudW1iZXJzIGFyZSBtYXBwZWQgdG8gYDBgICgnMC94JyA9PT0gJzAvMCcpXG4gKiAtIHBhdGggY29tcG9uZW50cyB3aXRoIHRyYWlsaW5nIGNoYXJhY3RlcnMgYWZ0ZXIgbnVtZXJhbHMgYXJlIGFjY2VwdGVkLCB0cmFpbGluZyBjaGFyYWN0ZXJzXG4gKiAgIGFyZSBpZ25vcmVkICgnMXgnID09PSAnMScpXG4gKlxuICogVGhpcyBwcm9iYWJseSBkb2VzIG5vdCBjb3ZlciBldmVyeXRoaW5nIGJ1dCBpdCBzaG91bGQgY292ZXIgbW9zdCBidWdzIGVuY291bnRlcmVkIGluIG91ciBjb2RlLlxuICpcbiAqIFRoaXMgbWV0aG9kIGF0dGVtcHRzIHRvIGNvbnZlcnQgYSBcImxlZ2FjeSBwYXRoXCIsIHdoaWNoIG1heSBiZSBpbnZhbGlkLCB0byBhIHN0YW5kYXJkIGJpcDMyIHBhdGg6XG4gKiBtZWFuaW5nIHRoZSByZXN1bHQgc2hvdWxkIGJlIGVxdWl2YWxlbnQgdG8gdGhlIGlucHV0IHBhdGggd2hlbiBwYXNzZWQgdG8gZWl0aGVyIG91ciBjdXN0b21cbiAqIGRlcml2YXRpb24gbG9nIG9yIHdoZW4gcGFzc2VkIHRvIGEgc3RhbmRhcmQgYmlwMzIgbGlicmFyeS5cbiAqXG4gKiBAcGFyYW0gcGF0aCAtIGxlZ2FjeSBwYXRoXG4gKiBAcmV0dXJuIHN0cmluZyAtIHNvbWV3aGF0IHNhbml0aXplZCBwYXRoIHRoYXQgY2FuIGJlIHBhc3NlZCB0byBzdGFuZGFyZCBiaXAzMiBsaWJyYXJpZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNhbml0aXplTGVnYWN5UGF0aChwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBwYXJ0czogc3RyaW5nW10gPSBwYXRoXG4gICAgLnNwbGl0KCcvJylcbiAgICAuZmlsdGVyKChwKSA9PiBwICE9PSAnJylcbiAgICAuZmlsdGVyKChwLCBpKSA9PiBpICE9PSAwIHx8IHAgIT09ICdtJylcbiAgICAubWFwKChwKSA9PiB7XG4gICAgICBjb25zdCBoYXJkZW5lZCA9IHAuc2xpY2UoLTEpID09PSBcIidcIjtcbiAgICAgIGNvbnN0IHYgPSBwYXJzZUludChwLnNsaWNlKDAsIGhhcmRlbmVkID8gLTEgOiB1bmRlZmluZWQpLCAxMCk7XG4gICAgICBpZiAoTnVtYmVyLmlzTmFOKHYpKSB7XG4gICAgICAgIHJldHVybiAnMCc7XG4gICAgICB9XG4gICAgICByZXR1cm4gU3RyaW5nKHYpICsgKGhhcmRlbmVkID8gXCInXCIgOiAnJyk7XG4gICAgfSk7XG5cbiAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgZW1wdHkgcGF0aGApO1xuICB9XG4gIHJldHVybiBwYXJ0cy5qb2luKCcvJyk7XG59XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/api/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC"}
|
|
@@ -10,6 +10,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
10
10
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
11
11
|
};
|
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
-
__exportStar(require("./
|
|
13
|
+
__exportStar(require("./bip32path"), exports);
|
|
14
14
|
__exportStar(require("./types"), exports);
|
|
15
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLDhDQUE0QjtBQUM1QiwwQ0FBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2JpcDMycGF0aCc7XG5leHBvcnQgKiBmcm9tICcuL3R5cGVzJztcbiJdfQ==
|