@bitgo-beta/sdk-core 8.2.1-beta.202 → 8.2.1-beta.2021
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/dist/src/account-lib/baseCoin/baseTransaction.d.ts +0 -1
- package/dist/src/account-lib/baseCoin/baseTransaction.d.ts.map +1 -1
- package/dist/src/account-lib/baseCoin/baseTransactionBuilder.d.ts +3 -3
- package/dist/src/account-lib/baseCoin/baseTransactionBuilder.d.ts.map +1 -1
- package/dist/src/account-lib/baseCoin/baseTransactionBuilder.js +4 -3
- package/dist/src/account-lib/baseCoin/ed25519KeyPair.d.ts +1 -0
- package/dist/src/account-lib/baseCoin/ed25519KeyPair.d.ts.map +1 -1
- package/dist/src/account-lib/baseCoin/ed25519KeyPair.js +41 -29
- package/dist/src/account-lib/baseCoin/enum.d.ts +58 -5
- package/dist/src/account-lib/baseCoin/enum.d.ts.map +1 -1
- package/dist/src/account-lib/baseCoin/enum.js +109 -10
- package/dist/src/account-lib/baseCoin/errors.d.ts +3 -0
- package/dist/src/account-lib/baseCoin/errors.d.ts.map +1 -1
- package/dist/src/account-lib/baseCoin/errors.js +8 -2
- package/dist/src/account-lib/baseCoin/iface.d.ts +19 -35
- package/dist/src/account-lib/baseCoin/iface.d.ts.map +1 -1
- package/dist/src/account-lib/baseCoin/iface.js +26 -18
- package/dist/src/account-lib/baseCoin/index.d.ts +1 -1
- package/dist/src/account-lib/baseCoin/index.d.ts.map +1 -1
- package/dist/src/account-lib/baseCoin/index.js +8 -5
- package/dist/src/account-lib/baseCoin/messages/baseMessage.d.ts +88 -0
- package/dist/src/account-lib/baseCoin/messages/baseMessage.d.ts.map +1 -0
- package/dist/src/account-lib/baseCoin/messages/baseMessage.js +154 -0
- package/dist/src/account-lib/baseCoin/messages/baseMessageBuilder.d.ts +67 -0
- package/dist/src/account-lib/baseCoin/messages/baseMessageBuilder.d.ts.map +1 -0
- package/dist/src/account-lib/baseCoin/messages/baseMessageBuilder.js +144 -0
- package/dist/src/account-lib/baseCoin/messages/baseMessageBuilderFactory.d.ts +33 -0
- package/dist/src/account-lib/baseCoin/messages/baseMessageBuilderFactory.d.ts.map +1 -0
- package/dist/src/account-lib/baseCoin/messages/baseMessageBuilderFactory.js +45 -0
- package/dist/src/account-lib/baseCoin/messages/iface.d.ts +164 -0
- package/dist/src/account-lib/baseCoin/messages/iface.d.ts.map +1 -0
- package/dist/src/account-lib/baseCoin/messages/iface.js +3 -0
- package/dist/src/account-lib/baseCoin/messages/index.d.ts +6 -0
- package/dist/src/account-lib/baseCoin/messages/index.d.ts.map +1 -0
- package/dist/src/account-lib/baseCoin/messages/index.js +22 -0
- package/dist/src/account-lib/baseCoin/messages/simple/index.d.ts +3 -0
- package/dist/src/account-lib/baseCoin/messages/simple/index.d.ts.map +1 -0
- package/dist/src/account-lib/baseCoin/messages/simple/index.js +19 -0
- package/dist/src/account-lib/baseCoin/messages/simple/simpleMessage.d.ts +13 -0
- package/dist/src/account-lib/baseCoin/messages/simple/simpleMessage.d.ts.map +1 -0
- package/dist/src/account-lib/baseCoin/messages/simple/simpleMessage.js +28 -0
- package/dist/src/account-lib/baseCoin/messages/simple/simpleMessageBuilder.d.ts +21 -0
- package/dist/src/account-lib/baseCoin/messages/simple/simpleMessageBuilder.d.ts.map +1 -0
- package/dist/src/account-lib/baseCoin/messages/simple/simpleMessageBuilder.js +28 -0
- package/dist/src/account-lib/baseCoin/secp256k1ExtendedKeyPair.d.ts +1 -2
- package/dist/src/account-lib/baseCoin/secp256k1ExtendedKeyPair.d.ts.map +1 -1
- package/dist/src/account-lib/baseCoin/secp256k1ExtendedKeyPair.js +38 -26
- package/dist/src/account-lib/index.js +23 -9
- package/dist/src/account-lib/mpc/index.d.ts +1 -1
- package/dist/src/account-lib/mpc/index.d.ts.map +1 -1
- package/dist/src/account-lib/mpc/index.js +6 -2
- package/dist/src/account-lib/mpc/tss/ecdsa/ecdsa.d.ts +2 -3
- package/dist/src/account-lib/mpc/tss/ecdsa/ecdsa.d.ts.map +1 -1
- package/dist/src/account-lib/mpc/tss/ecdsa/ecdsa.js +376 -354
- package/dist/src/account-lib/mpc/tss/ecdsa/index.js +23 -9
- package/dist/src/account-lib/mpc/tss/ecdsa/rangeproof.d.ts +2 -2
- package/dist/src/account-lib/mpc/tss/ecdsa/rangeproof.d.ts.map +1 -1
- package/dist/src/account-lib/mpc/tss/ecdsa/rangeproof.js +3 -3
- package/dist/src/account-lib/mpc/tss/ecdsa/types.d.ts +46 -53
- package/dist/src/account-lib/mpc/tss/ecdsa/types.d.ts.map +1 -1
- package/dist/src/account-lib/mpc/tss/ecdsa/types.js +1 -1
- package/dist/src/account-lib/mpc/tss/eddsa/eddsa.d.ts +0 -1
- package/dist/src/account-lib/mpc/tss/eddsa/eddsa.d.ts.map +1 -1
- package/dist/src/account-lib/mpc/tss/eddsa/eddsa.js +66 -69
- package/dist/src/account-lib/mpc/tss/eddsa/index.js +23 -9
- package/dist/src/account-lib/mpc/tss/eddsa/types.d.ts +1 -1
- package/dist/src/account-lib/mpc/tss/eddsa/types.d.ts.map +1 -1
- package/dist/src/account-lib/mpc/tss/eddsa/types.js +1 -1
- package/dist/src/account-lib/mpc/tss/index.js +23 -9
- package/dist/src/account-lib/mpc/util.d.ts +7 -1
- package/dist/src/account-lib/mpc/util.d.ts.map +1 -1
- package/dist/src/account-lib/mpc/util.js +24 -1
- package/dist/src/account-lib/staking/index.js +6 -2
- package/dist/src/account-lib/staking/utils.js +3 -3
- package/dist/src/account-lib/util/crypto.d.ts +8 -2
- package/dist/src/account-lib/util/crypto.d.ts.map +1 -1
- package/dist/src/account-lib/util/crypto.js +69 -38
- package/dist/src/account-lib/util/ed25519KeyDeriver.d.ts +2 -1
- package/dist/src/account-lib/util/ed25519KeyDeriver.d.ts.map +1 -1
- package/dist/src/account-lib/util/ed25519KeyDeriver.js +5 -3
- package/dist/src/api/bip32path.js +2 -3
- package/dist/src/api/index.js +6 -2
- package/dist/src/api/types.d.ts +31 -0
- package/dist/src/api/types.d.ts.map +1 -1
- package/dist/src/api/types.js +1 -1
- package/dist/src/bitgo/address-book/address-book.d.ts.map +1 -1
- package/dist/src/bitgo/address-book/address-book.js +20 -12
- package/dist/src/bitgo/address-book/index.js +6 -2
- package/dist/src/bitgo/address-book/types.d.ts +36 -36
- package/dist/src/bitgo/address-book/types.d.ts.map +1 -1
- package/dist/src/bitgo/baseCoin/baseCoin.d.ts +123 -12
- package/dist/src/bitgo/baseCoin/baseCoin.d.ts.map +1 -1
- package/dist/src/bitgo/baseCoin/baseCoin.js +203 -16
- package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts +290 -27
- package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts.map +1 -1
- package/dist/src/bitgo/baseCoin/iBaseCoin.js +14 -3
- package/dist/src/bitgo/baseCoin/index.js +6 -2
- package/dist/src/bitgo/bip32util.d.ts +3 -16
- package/dist/src/bitgo/bip32util.d.ts.map +1 -1
- package/dist/src/bitgo/bip32util.js +4 -56
- package/dist/src/bitgo/bitcoin.d.ts +0 -1
- package/dist/src/bitgo/bitcoin.d.ts.map +1 -1
- package/dist/src/bitgo/bitcoin.js +26 -13
- package/dist/src/bitgo/bitgoBase.d.ts +17 -4
- package/dist/src/bitgo/bitgoBase.d.ts.map +1 -1
- package/dist/src/bitgo/bitgoBase.js +1 -1
- package/dist/src/bitgo/coinFactory.d.ts +17 -3
- package/dist/src/bitgo/coinFactory.d.ts.map +1 -1
- package/dist/src/bitgo/coinFactory.js +26 -3
- package/dist/src/bitgo/config.d.ts +3 -101
- package/dist/src/bitgo/config.d.ts.map +1 -1
- package/dist/src/bitgo/config.js +26 -15
- package/dist/src/bitgo/defi/defiVault.d.ts +137 -0
- package/dist/src/bitgo/defi/defiVault.d.ts.map +1 -0
- package/dist/src/bitgo/defi/defiVault.js +379 -0
- package/dist/src/bitgo/defi/iDefiVault.d.ts +81 -0
- package/dist/src/bitgo/defi/iDefiVault.d.ts.map +1 -0
- package/dist/src/bitgo/defi/iDefiVault.js +6 -0
- package/dist/src/bitgo/defi/index.d.ts +3 -0
- package/dist/src/bitgo/defi/index.d.ts.map +1 -0
- package/dist/src/bitgo/defi/index.js +22 -0
- package/dist/src/bitgo/ecdh.d.ts +0 -1
- package/dist/src/bitgo/ecdh.d.ts.map +1 -1
- package/dist/src/bitgo/ecdh.js +26 -13
- package/dist/src/bitgo/enterprise/enterprise.d.ts +9 -4
- package/dist/src/bitgo/enterprise/enterprise.d.ts.map +1 -1
- package/dist/src/bitgo/enterprise/enterprise.js +47 -21
- package/dist/src/bitgo/enterprise/enterprises.js +27 -13
- package/dist/src/bitgo/enterprise/iEnterprise.d.ts +5 -3
- package/dist/src/bitgo/enterprise/iEnterprise.d.ts.map +1 -1
- package/dist/src/bitgo/enterprise/iEnterprise.js +1 -1
- package/dist/src/bitgo/enterprise/index.js +6 -2
- package/dist/src/bitgo/environments.d.ts +68 -3
- package/dist/src/bitgo/environments.d.ts.map +1 -1
- package/dist/src/bitgo/environments.js +414 -34
- package/dist/src/bitgo/errors.d.ts +182 -1
- package/dist/src/bitgo/errors.d.ts.map +1 -1
- package/dist/src/bitgo/errors.js +177 -3
- package/dist/src/bitgo/evm/evmUtils.d.ts +26 -0
- package/dist/src/bitgo/evm/evmUtils.d.ts.map +1 -0
- package/dist/src/bitgo/evm/evmUtils.js +50 -0
- package/dist/src/bitgo/index.d.ts +5 -1
- package/dist/src/bitgo/index.d.ts.map +1 -1
- package/dist/src/bitgo/index.js +31 -11
- package/dist/src/bitgo/inscriptionBuilder/iInscriptionBuilder.d.ts +3 -3
- package/dist/src/bitgo/inscriptionBuilder/iInscriptionBuilder.d.ts.map +1 -1
- package/dist/src/bitgo/inscriptionBuilder/iInscriptionBuilder.js +1 -1
- package/dist/src/bitgo/inscriptionBuilder/index.js +6 -2
- package/dist/src/bitgo/internal/index.js +6 -2
- package/dist/src/bitgo/internal/internal.js +5 -6
- package/dist/src/bitgo/internal/keycard.d.ts +12 -8
- package/dist/src/bitgo/internal/keycard.d.ts.map +1 -1
- package/dist/src/bitgo/internal/keycard.js +60 -48
- package/dist/src/bitgo/keychain/decryptKeychain.d.ts +14 -0
- package/dist/src/bitgo/keychain/decryptKeychain.d.ts.map +1 -0
- package/dist/src/bitgo/keychain/decryptKeychain.js +36 -0
- package/dist/src/bitgo/keychain/iKeychains.d.ts +128 -11
- package/dist/src/bitgo/keychain/iKeychains.d.ts.map +1 -1
- package/dist/src/bitgo/keychain/iKeychains.js +2 -2
- package/dist/src/bitgo/keychain/index.d.ts +1 -0
- package/dist/src/bitgo/keychain/index.d.ts.map +1 -1
- package/dist/src/bitgo/keychain/index.js +7 -2
- package/dist/src/bitgo/keychain/keychains.d.ts +55 -7
- package/dist/src/bitgo/keychain/keychains.d.ts.map +1 -1
- package/dist/src/bitgo/keychain/keychains.js +282 -52
- package/dist/src/bitgo/keychain/ovcJsonCodec.d.ts +3 -3
- package/dist/src/bitgo/keychain/ovcJsonCodec.d.ts.map +1 -1
- package/dist/src/bitgo/keychain/ovcJsonCodec.js +23 -9
- package/dist/src/bitgo/legacyBitcoin.d.ts +0 -1
- package/dist/src/bitgo/legacyBitcoin.d.ts.map +1 -1
- package/dist/src/bitgo/legacyBitcoin.js +27 -13
- package/dist/src/bitgo/lightning/lightningWalletUtil.d.ts +7 -0
- package/dist/src/bitgo/lightning/lightningWalletUtil.d.ts.map +1 -0
- package/dist/src/bitgo/lightning/lightningWalletUtil.js +25 -0
- package/dist/src/bitgo/market/iMarkets.d.ts +2 -2
- package/dist/src/bitgo/market/iMarkets.d.ts.map +1 -1
- package/dist/src/bitgo/market/index.js +6 -2
- package/dist/src/bitgo/market/markets.js +23 -9
- package/dist/src/bitgo/pendingApproval/iPendingApproval.d.ts +5 -1
- package/dist/src/bitgo/pendingApproval/iPendingApproval.d.ts.map +1 -1
- package/dist/src/bitgo/pendingApproval/iPendingApproval.js +4 -4
- package/dist/src/bitgo/pendingApproval/index.js +6 -2
- package/dist/src/bitgo/pendingApproval/pendingApproval.d.ts +20 -8
- package/dist/src/bitgo/pendingApproval/pendingApproval.d.ts.map +1 -1
- package/dist/src/bitgo/pendingApproval/pendingApproval.js +246 -111
- package/dist/src/bitgo/pendingApproval/pendingApprovals.js +23 -9
- package/dist/src/bitgo/proofs/WalletProofs.d.ts +19 -0
- package/dist/src/bitgo/proofs/WalletProofs.d.ts.map +1 -0
- package/dist/src/bitgo/proofs/WalletProofs.js +37 -0
- package/dist/src/bitgo/proofs/index.d.ts +2 -0
- package/dist/src/bitgo/proofs/index.d.ts.map +1 -0
- package/dist/src/bitgo/proofs/index.js +6 -0
- package/dist/src/bitgo/proofs/types.d.ts +80 -0
- package/dist/src/bitgo/proofs/types.d.ts.map +1 -0
- package/dist/src/bitgo/proofs/types.js +80 -0
- package/dist/src/bitgo/recovery/index.js +6 -2
- package/dist/src/bitgo/recovery/initiate.d.ts +13 -3
- package/dist/src/bitgo/recovery/initiate.d.ts.map +1 -1
- package/dist/src/bitgo/recovery/initiate.js +49 -41
- package/dist/src/bitgo/safe/derivableEd25519Pub.d.ts +88 -0
- package/dist/src/bitgo/safe/derivableEd25519Pub.d.ts.map +1 -0
- package/dist/src/bitgo/safe/derivableEd25519Pub.js +204 -0
- package/dist/src/bitgo/safe/iSafe.d.ts +87 -0
- package/dist/src/bitgo/safe/iSafe.d.ts.map +1 -0
- package/dist/src/bitgo/safe/iSafe.js +3 -0
- package/dist/src/bitgo/safe/iSafes.d.ts +94 -0
- package/dist/src/bitgo/safe/iSafes.d.ts.map +1 -0
- package/dist/src/bitgo/safe/iSafes.js +3 -0
- package/dist/src/bitgo/safe/index.d.ts +7 -0
- package/dist/src/bitgo/safe/index.d.ts.map +1 -0
- package/dist/src/bitgo/safe/index.js +23 -0
- package/dist/src/bitgo/safe/safe.d.ts +61 -0
- package/dist/src/bitgo/safe/safe.d.ts.map +1 -0
- package/dist/src/bitgo/safe/safe.js +230 -0
- package/dist/src/bitgo/safe/safeDerivation.d.ts +30 -0
- package/dist/src/bitgo/safe/safeDerivation.d.ts.map +1 -0
- package/dist/src/bitgo/safe/safeDerivation.js +122 -0
- package/dist/src/bitgo/safe/safes.d.ts +107 -0
- package/dist/src/bitgo/safe/safes.d.ts.map +1 -0
- package/dist/src/bitgo/safe/safes.js +315 -0
- package/dist/src/bitgo/staking/goStakingInterfaces.d.ts +136 -0
- package/dist/src/bitgo/staking/goStakingInterfaces.d.ts.map +1 -0
- package/dist/src/bitgo/staking/goStakingInterfaces.js +3 -0
- package/dist/src/bitgo/staking/goStakingWallet.d.ts +62 -0
- package/dist/src/bitgo/staking/goStakingWallet.d.ts.map +1 -0
- package/dist/src/bitgo/staking/goStakingWallet.js +141 -0
- package/dist/src/bitgo/staking/iGoStakingWallet.d.ts +17 -0
- package/dist/src/bitgo/staking/iGoStakingWallet.d.ts.map +1 -0
- package/dist/src/bitgo/staking/iGoStakingWallet.js +3 -0
- package/dist/src/bitgo/staking/iStakingWallet.d.ts +157 -8
- package/dist/src/bitgo/staking/iStakingWallet.d.ts.map +1 -1
- package/dist/src/bitgo/staking/iStakingWallet.js +2 -2
- package/dist/src/bitgo/staking/index.d.ts +3 -0
- package/dist/src/bitgo/staking/index.d.ts.map +1 -1
- package/dist/src/bitgo/staking/index.js +9 -2
- package/dist/src/bitgo/staking/stakingWallet.d.ts +21 -8
- package/dist/src/bitgo/staking/stakingWallet.d.ts.map +1 -1
- package/dist/src/bitgo/staking/stakingWallet.js +140 -7
- package/dist/src/bitgo/trading/iTradingAccount.d.ts +13 -1
- package/dist/src/bitgo/trading/iTradingAccount.d.ts.map +1 -1
- package/dist/src/bitgo/trading/iTradingAccount.js +1 -1
- package/dist/src/bitgo/trading/index.d.ts +1 -0
- package/dist/src/bitgo/trading/index.d.ts.map +1 -1
- package/dist/src/bitgo/trading/index.js +7 -2
- package/dist/src/bitgo/trading/network/decrypt-aes-gcm.d.ts +8 -0
- package/dist/src/bitgo/trading/network/decrypt-aes-gcm.d.ts.map +1 -0
- package/dist/src/bitgo/trading/network/decrypt-aes-gcm.js +31 -0
- package/dist/src/bitgo/trading/network/decrypt-rsa.d.ts +8 -0
- package/dist/src/bitgo/trading/network/decrypt-rsa.d.ts.map +1 -0
- package/dist/src/bitgo/trading/network/decrypt-rsa.js +23 -0
- package/dist/src/bitgo/trading/network/decrypt.d.ts +14 -0
- package/dist/src/bitgo/trading/network/decrypt.d.ts.map +1 -0
- package/dist/src/bitgo/trading/network/decrypt.js +23 -0
- package/dist/src/bitgo/trading/network/encrypt-aes-gcm.d.ts +8 -0
- package/dist/src/bitgo/trading/network/encrypt-aes-gcm.d.ts.map +1 -0
- package/dist/src/bitgo/trading/network/encrypt-aes-gcm.js +25 -0
- package/dist/src/bitgo/trading/network/encrypt-rsa-browser.d.ts +8 -0
- package/dist/src/bitgo/trading/network/encrypt-rsa-browser.d.ts.map +1 -0
- package/dist/src/bitgo/trading/network/encrypt-rsa-browser.js +65 -0
- package/dist/src/bitgo/trading/network/encrypt-rsa.d.ts +8 -0
- package/dist/src/bitgo/trading/network/encrypt-rsa.d.ts.map +1 -0
- package/dist/src/bitgo/trading/network/encrypt-rsa.js +23 -0
- package/dist/src/bitgo/trading/network/encrypt.d.ts +37 -0
- package/dist/src/bitgo/trading/network/encrypt.d.ts.map +1 -0
- package/dist/src/bitgo/trading/network/encrypt.js +58 -0
- package/dist/src/bitgo/trading/network/index.d.ts +2 -0
- package/dist/src/bitgo/trading/network/index.d.ts.map +1 -1
- package/dist/src/bitgo/trading/network/index.js +8 -2
- package/dist/src/bitgo/trading/network/network.d.ts +4 -3
- package/dist/src/bitgo/trading/network/network.d.ts.map +1 -1
- package/dist/src/bitgo/trading/network/network.js +24 -27
- package/dist/src/bitgo/trading/network/types.d.ts +79 -46
- package/dist/src/bitgo/trading/network/types.d.ts.map +1 -1
- package/dist/src/bitgo/trading/network/types.js +1 -1
- package/dist/src/bitgo/trading/network/utils.d.ts +20 -0
- package/dist/src/bitgo/trading/network/utils.d.ts.map +1 -0
- package/dist/src/bitgo/trading/network/utils.js +54 -0
- package/dist/src/bitgo/trading/tradingAccount.d.ts +15 -1
- package/dist/src/bitgo/trading/tradingAccount.d.ts.map +1 -1
- package/dist/src/bitgo/trading/tradingAccount.js +55 -7
- package/dist/src/bitgo/tss/bitgoPubKeys.d.ts +49 -0
- package/dist/src/bitgo/tss/bitgoPubKeys.d.ts.map +1 -0
- package/dist/src/bitgo/tss/bitgoPubKeys.js +92 -0
- package/dist/src/bitgo/tss/common.d.ts +41 -6
- package/dist/src/bitgo/tss/common.d.ts.map +1 -1
- package/dist/src/bitgo/tss/common.js +124 -17
- package/dist/src/bitgo/tss/ecdsa/ecdsa.d.ts +6 -4
- package/dist/src/bitgo/tss/ecdsa/ecdsa.d.ts.map +1 -1
- package/dist/src/bitgo/tss/ecdsa/ecdsa.js +78 -66
- package/dist/src/bitgo/tss/ecdsa/ecdsaMPCv2.d.ts +15 -0
- package/dist/src/bitgo/tss/ecdsa/ecdsaMPCv2.d.ts.map +1 -0
- package/dist/src/bitgo/tss/ecdsa/ecdsaMPCv2.js +167 -0
- package/dist/src/bitgo/tss/ecdsa/index.d.ts +1 -0
- package/dist/src/bitgo/tss/ecdsa/index.d.ts.map +1 -1
- package/dist/src/bitgo/tss/ecdsa/index.js +25 -10
- package/dist/src/bitgo/tss/ecdsa/types.d.ts +27 -27
- package/dist/src/bitgo/tss/ecdsa/types.d.ts.map +1 -1
- package/dist/src/bitgo/tss/ecdsa/types.js +3 -3
- package/dist/src/bitgo/tss/eddsa/eddsa.d.ts +15 -6
- package/dist/src/bitgo/tss/eddsa/eddsa.d.ts.map +1 -1
- package/dist/src/bitgo/tss/eddsa/eddsa.js +47 -40
- package/dist/src/bitgo/tss/eddsa/eddsaMPCv2.d.ts +42 -0
- package/dist/src/bitgo/tss/eddsa/eddsaMPCv2.d.ts.map +1 -0
- package/dist/src/bitgo/tss/eddsa/eddsaMPCv2.js +104 -0
- package/dist/src/bitgo/tss/eddsa/index.js +23 -9
- package/dist/src/bitgo/tss/eddsa/types.d.ts +4 -4
- package/dist/src/bitgo/tss/eddsa/types.d.ts.map +1 -1
- package/dist/src/bitgo/tss/index.d.ts +3 -2
- package/dist/src/bitgo/tss/index.d.ts.map +1 -1
- package/dist/src/bitgo/tss/index.js +26 -10
- package/dist/src/bitgo/tss/types.d.ts +3 -3
- package/dist/src/bitgo/tss/types.d.ts.map +1 -1
- package/dist/src/bitgo/tss/types.js +2 -2
- package/dist/src/bitgo/types.d.ts +3 -3
- package/dist/src/bitgo/types.d.ts.map +1 -1
- package/dist/src/bitgo/utils/abstractUtxoCoinUtil.d.ts +10 -0
- package/dist/src/bitgo/utils/abstractUtxoCoinUtil.d.ts.map +1 -1
- package/dist/src/bitgo/utils/abstractUtxoCoinUtil.js +76 -14
- package/dist/src/bitgo/utils/codecProps.js +24 -11
- package/dist/src/bitgo/utils/codecs.d.ts +11 -0
- package/dist/src/bitgo/utils/codecs.d.ts.map +1 -0
- package/dist/src/bitgo/utils/codecs.js +59 -0
- package/dist/src/bitgo/utils/decode.d.ts.map +1 -1
- package/dist/src/bitgo/utils/decode.js +30 -16
- package/dist/src/bitgo/utils/index.d.ts +4 -2
- package/dist/src/bitgo/utils/index.d.ts.map +1 -1
- package/dist/src/bitgo/utils/index.js +27 -11
- package/dist/src/bitgo/utils/messageTypes.d.ts +40 -0
- package/dist/src/bitgo/utils/messageTypes.d.ts.map +1 -0
- package/dist/src/bitgo/utils/messageTypes.js +17 -0
- package/dist/src/bitgo/utils/mpcUtils.d.ts +4 -4
- package/dist/src/bitgo/utils/mpcUtils.d.ts.map +1 -1
- package/dist/src/bitgo/utils/mpcUtils.js +175 -14
- package/dist/src/bitgo/utils/notEmpty.d.ts +2 -0
- package/dist/src/bitgo/utils/notEmpty.d.ts.map +1 -0
- package/dist/src/bitgo/utils/notEmpty.js +7 -0
- package/dist/src/bitgo/utils/opengpgUtils.d.ts +11 -7
- package/dist/src/bitgo/utils/opengpgUtils.d.ts.map +1 -1
- package/dist/src/bitgo/utils/opengpgUtils.js +79 -62
- package/dist/src/bitgo/utils/postWithCodec.d.ts.map +1 -1
- package/dist/src/bitgo/utils/postWithCodec.js +4 -38
- package/dist/src/bitgo/utils/promise-utils.d.ts +1 -1
- package/dist/src/bitgo/utils/promise-utils.d.ts.map +1 -1
- package/dist/src/bitgo/utils/promise-utils.js +2 -3
- package/dist/src/bitgo/utils/transactionUtils.d.ts +9 -0
- package/dist/src/bitgo/utils/transactionUtils.d.ts.map +1 -0
- package/dist/src/bitgo/utils/transactionUtils.js +29 -0
- package/dist/src/bitgo/utils/triple.d.ts +1 -1
- package/dist/src/bitgo/utils/triple.d.ts.map +1 -1
- package/dist/src/bitgo/utils/triple.js +2 -3
- package/dist/src/bitgo/utils/tss/addressVerification.d.ts +62 -0
- package/dist/src/bitgo/utils/tss/addressVerification.d.ts.map +1 -0
- package/dist/src/bitgo/utils/tss/addressVerification.js +93 -0
- package/dist/src/bitgo/utils/tss/baseTSSUtils.d.ts +94 -17
- package/dist/src/bitgo/utils/tss/baseTSSUtils.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/baseTSSUtils.js +305 -45
- package/dist/src/bitgo/utils/tss/baseTypes.d.ts +432 -55
- package/dist/src/bitgo/utils/tss/baseTypes.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/baseTypes.js +47 -22
- package/dist/src/bitgo/utils/tss/ecdsa/SMC/utils.d.ts +23 -0
- package/dist/src/bitgo/utils/tss/ecdsa/SMC/utils.d.ts.map +1 -0
- package/dist/src/bitgo/utils/tss/ecdsa/SMC/utils.js +157 -0
- package/dist/src/bitgo/utils/tss/ecdsa/base.d.ts +28 -0
- package/dist/src/bitgo/utils/tss/ecdsa/base.d.ts.map +1 -0
- package/dist/src/bitgo/utils/tss/ecdsa/base.js +53 -0
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.d.ts +25 -51
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.js +173 -246
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts +216 -0
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts.map +1 -0
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +1053 -0
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2KeyGenSender.d.ts +8 -0
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2KeyGenSender.d.ts.map +1 -0
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2KeyGenSender.js +16 -0
- package/dist/src/bitgo/utils/tss/ecdsa/index.d.ts +4 -0
- package/dist/src/bitgo/utils/tss/ecdsa/index.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/index.js +10 -2
- package/dist/src/bitgo/utils/tss/ecdsa/types.d.ts +7 -10
- package/dist/src/bitgo/utils/tss/ecdsa/types.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/types.js +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/typesMPCv2.d.ts +107 -0
- package/dist/src/bitgo/utils/tss/ecdsa/typesMPCv2.d.ts.map +1 -0
- package/dist/src/bitgo/utils/tss/ecdsa/typesMPCv2.js +55 -0
- package/dist/src/bitgo/utils/tss/eddsa/SMC/utils.d.ts +21 -0
- package/dist/src/bitgo/utils/tss/eddsa/SMC/utils.d.ts.map +1 -0
- package/dist/src/bitgo/utils/tss/eddsa/SMC/utils.js +118 -0
- package/dist/src/bitgo/utils/tss/eddsa/base.d.ts +18 -0
- package/dist/src/bitgo/utils/tss/eddsa/base.d.ts.map +1 -0
- package/dist/src/bitgo/utils/tss/eddsa/base.js +64 -0
- package/dist/src/bitgo/utils/tss/eddsa/eddsa.d.ts +38 -11
- package/dist/src/bitgo/utils/tss/eddsa/eddsa.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/eddsa/eddsa.js +254 -96
- package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts +204 -0
- package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts.map +1 -0
- package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.js +862 -0
- package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2KeyGenSender.d.ts +6 -0
- package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2KeyGenSender.d.ts.map +1 -0
- package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2KeyGenSender.js +16 -0
- package/dist/src/bitgo/utils/tss/eddsa/index.d.ts +4 -0
- package/dist/src/bitgo/utils/tss/eddsa/index.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/eddsa/index.js +29 -8
- package/dist/src/bitgo/utils/tss/eddsa/types.d.ts +12 -7
- package/dist/src/bitgo/utils/tss/eddsa/types.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/eddsa/types.js +1 -1
- package/dist/src/bitgo/utils/tss/eddsa/typesEddsaMPCv2.d.ts +40 -0
- package/dist/src/bitgo/utils/tss/eddsa/typesEddsaMPCv2.d.ts.map +1 -0
- package/dist/src/bitgo/utils/tss/eddsa/typesEddsaMPCv2.js +44 -0
- package/dist/src/bitgo/utils/tss/index.d.ts +5 -0
- package/dist/src/bitgo/utils/tss/index.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/index.js +29 -10
- package/dist/src/bitgo/utils/tss/preHashedSignable.d.ts +23 -0
- package/dist/src/bitgo/utils/tss/preHashedSignable.d.ts.map +1 -0
- package/dist/src/bitgo/utils/tss/preHashedSignable.js +26 -0
- package/dist/src/bitgo/utils/tss/recipientUtils.d.ts +41 -0
- package/dist/src/bitgo/utils/tss/recipientUtils.d.ts.map +1 -0
- package/dist/src/bitgo/utils/tss/recipientUtils.js +142 -0
- package/dist/src/bitgo/utils/tss/redpallas/SMC/utils.d.ts +29 -0
- package/dist/src/bitgo/utils/tss/redpallas/SMC/utils.d.ts.map +1 -0
- package/dist/src/bitgo/utils/tss/redpallas/SMC/utils.js +126 -0
- package/dist/src/bitgo/utils/tss/redpallas/index.d.ts +4 -0
- package/dist/src/bitgo/utils/tss/redpallas/index.d.ts.map +1 -0
- package/dist/src/bitgo/utils/tss/redpallas/index.js +20 -0
- package/dist/src/bitgo/utils/tss/redpallas/redpallasMPCv2.d.ts +27 -0
- package/dist/src/bitgo/utils/tss/redpallas/redpallasMPCv2.d.ts.map +1 -0
- package/dist/src/bitgo/utils/tss/redpallas/redpallasMPCv2.js +43 -0
- package/dist/src/bitgo/utils/tss/redpallas/redpallasMPCv2KeyGenSender.d.ts +45 -0
- package/dist/src/bitgo/utils/tss/redpallas/redpallasMPCv2KeyGenSender.d.ts.map +1 -0
- package/dist/src/bitgo/utils/tss/redpallas/redpallasMPCv2KeyGenSender.js +55 -0
- package/dist/src/bitgo/utils/tss/serializedTxHexVerify.d.ts +8 -0
- package/dist/src/bitgo/utils/tss/serializedTxHexVerify.d.ts.map +1 -0
- package/dist/src/bitgo/utils/tss/serializedTxHexVerify.js +13 -0
- package/dist/src/bitgo/utils/tss/signableConsistency.d.ts +12 -0
- package/dist/src/bitgo/utils/tss/signableConsistency.d.ts.map +1 -0
- package/dist/src/bitgo/utils/tss/signableConsistency.js +9 -0
- package/dist/src/bitgo/utils/txRequest.d.ts +10 -0
- package/dist/src/bitgo/utils/txRequest.d.ts.map +1 -0
- package/dist/src/bitgo/utils/txRequest.js +49 -0
- package/dist/src/bitgo/utils/util.js +24 -10
- package/dist/src/bitgo/utils/wallet.d.ts +7 -0
- package/dist/src/bitgo/utils/wallet.d.ts.map +1 -0
- package/dist/src/bitgo/utils/wallet.js +48 -0
- package/dist/src/bitgo/v1Wallets.d.ts +170 -0
- package/dist/src/bitgo/v1Wallets.d.ts.map +1 -0
- package/dist/src/bitgo/v1Wallets.js +3 -0
- package/dist/src/bitgo/wallet/BuildParams.d.ts +81 -1
- package/dist/src/bitgo/wallet/BuildParams.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/BuildParams.js +85 -11
- package/dist/src/bitgo/wallet/iWallet.d.ts +580 -31
- package/dist/src/bitgo/wallet/iWallet.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/iWallet.js +1 -1
- package/dist/src/bitgo/wallet/iWallets.d.ts +310 -16
- package/dist/src/bitgo/wallet/iWallets.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/iWallets.js +84 -3
- package/dist/src/bitgo/wallet/index.d.ts +1 -0
- package/dist/src/bitgo/wallet/index.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/index.js +7 -2
- package/dist/src/bitgo/wallet/safeKeychain.d.ts +52 -0
- package/dist/src/bitgo/wallet/safeKeychain.d.ts.map +1 -0
- package/dist/src/bitgo/wallet/safeKeychain.js +97 -0
- package/dist/src/bitgo/wallet/wallet.d.ts +365 -28
- package/dist/src/bitgo/wallet/wallet.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/wallet.js +2202 -381
- package/dist/src/bitgo/wallet/wallets.d.ts +93 -4
- package/dist/src/bitgo/wallet/wallets.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/wallets.js +1242 -155
- package/dist/src/bitgo/walletUtil/iMessageProvider.d.ts +12 -0
- package/dist/src/bitgo/walletUtil/iMessageProvider.d.ts.map +1 -0
- package/dist/src/bitgo/walletUtil/iMessageProvider.js +3 -0
- package/dist/src/bitgo/walletUtil/index.d.ts +3 -0
- package/dist/src/bitgo/walletUtil/index.d.ts.map +1 -0
- package/dist/src/bitgo/walletUtil/index.js +19 -0
- package/dist/src/bitgo/walletUtil/midnightMessageProvider.d.ts +22 -0
- package/dist/src/bitgo/walletUtil/midnightMessageProvider.d.ts.map +1 -0
- package/dist/src/bitgo/walletUtil/midnightMessageProvider.js +95 -0
- package/dist/src/bitgo/walletUtil/signAccountBasedMidnightClaimMessages.d.ts +9 -0
- package/dist/src/bitgo/walletUtil/signAccountBasedMidnightClaimMessages.d.ts.map +1 -0
- package/dist/src/bitgo/walletUtil/signAccountBasedMidnightClaimMessages.js +72 -0
- package/dist/src/bitgo/walletUtil/utxoMessageProof.d.ts +15 -0
- package/dist/src/bitgo/walletUtil/utxoMessageProof.d.ts.map +1 -0
- package/dist/src/bitgo/walletUtil/utxoMessageProof.js +40 -0
- package/dist/src/bitgo/webhook/index.js +6 -2
- package/dist/src/bitgo/webhook/webhooks.js +23 -9
- package/dist/src/coins/fiat.d.ts +45 -0
- package/dist/src/coins/fiat.d.ts.map +1 -0
- package/dist/src/coins/fiat.js +94 -0
- package/dist/src/coins/index.d.ts +1 -6
- package/dist/src/coins/index.d.ts.map +1 -1
- package/dist/src/coins/index.js +7 -8
- package/dist/src/coins/ofc.d.ts +21 -2
- package/dist/src/coins/ofc.d.ts.map +1 -1
- package/dist/src/coins/ofc.js +29 -3
- package/dist/src/coins/ofcToken.d.ts +15 -4
- package/dist/src/coins/ofcToken.d.ts.map +1 -1
- package/dist/src/coins/ofcToken.js +43 -5
- package/dist/src/coins/susd.d.ts +3 -2
- package/dist/src/coins/susd.d.ts.map +1 -1
- package/dist/src/coins/susd.js +5 -1
- package/dist/src/common.js +27 -13
- package/dist/src/index.d.ts +9 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +40 -11
- package/dist/src/lightning.d.ts +20 -0
- package/dist/src/lightning.d.ts.map +1 -0
- package/dist/src/lightning.js +13 -0
- package/dist/src/units.js +5 -6
- package/dist/test/unit/account-lib/baseCoin/messages/baseMessage.d.ts +2 -0
- package/dist/test/unit/account-lib/baseCoin/messages/baseMessage.d.ts.map +1 -0
- package/dist/test/unit/account-lib/baseCoin/messages/baseMessage.js +207 -0
- package/dist/test/unit/account-lib/baseCoin/messages/baseMessageBuilder.d.ts +2 -0
- package/dist/test/unit/account-lib/baseCoin/messages/baseMessageBuilder.d.ts.map +1 -0
- package/dist/test/unit/account-lib/baseCoin/messages/baseMessageBuilder.js +174 -0
- package/dist/test/unit/account-lib/baseCoin/messages/baseMessageBuilderFactory.d.ts +2 -0
- package/dist/test/unit/account-lib/baseCoin/messages/baseMessageBuilderFactory.d.ts.map +1 -0
- package/dist/test/unit/account-lib/baseCoin/messages/baseMessageBuilderFactory.js +108 -0
- package/dist/test/unit/account-lib/baseCoin/messages/fixtures.d.ts +46 -0
- package/dist/test/unit/account-lib/baseCoin/messages/fixtures.d.ts.map +1 -0
- package/dist/test/unit/account-lib/baseCoin/messages/fixtures.js +69 -0
- package/dist/test/unit/account-lib/mpc/tss/ecdsa/ecdsa.js +91 -29
- package/dist/test/unit/account-lib/mpc/util.d.ts +2 -0
- package/dist/test/unit/account-lib/mpc/util.d.ts.map +1 -0
- package/dist/test/unit/account-lib/mpc/util.js +53 -0
- package/dist/test/unit/bitgo/address-book/address-book.d.ts +2 -0
- package/dist/test/unit/bitgo/address-book/address-book.d.ts.map +1 -0
- package/dist/test/unit/bitgo/address-book/address-book.js +159 -0
- package/dist/test/unit/bitgo/defi/defiVault.d.ts +2 -0
- package/dist/test/unit/bitgo/defi/defiVault.d.ts.map +1 -0
- package/dist/test/unit/bitgo/defi/defiVault.js +600 -0
- package/dist/test/unit/bitgo/environment.d.ts +2 -0
- package/dist/test/unit/bitgo/environment.d.ts.map +1 -0
- package/dist/test/unit/bitgo/environment.js +38 -0
- package/dist/test/unit/bitgo/errors.d.ts +2 -0
- package/dist/test/unit/bitgo/errors.d.ts.map +1 -0
- package/dist/test/unit/bitgo/errors.js +262 -0
- package/dist/test/unit/bitgo/keychain/keychains.d.ts +2 -0
- package/dist/test/unit/bitgo/keychain/keychains.d.ts.map +1 -0
- package/dist/test/unit/bitgo/keychain/keychains.js +138 -0
- package/dist/test/unit/bitgo/recovery/initiate.d.ts +2 -0
- package/dist/test/unit/bitgo/recovery/initiate.d.ts.map +1 -0
- package/dist/test/unit/bitgo/recovery/initiate.js +159 -0
- package/dist/test/unit/bitgo/safe/derivableEd25519Pub.d.ts +2 -0
- package/dist/test/unit/bitgo/safe/derivableEd25519Pub.d.ts.map +1 -0
- package/dist/test/unit/bitgo/safe/derivableEd25519Pub.js +137 -0
- package/dist/test/unit/bitgo/safe/fixtures/derivableEd25519Pub.json +197 -0
- package/dist/test/unit/bitgo/safe/safe.d.ts +2 -0
- package/dist/test/unit/bitgo/safe/safe.d.ts.map +1 -0
- package/dist/test/unit/bitgo/safe/safe.js +277 -0
- package/dist/test/unit/bitgo/safe/safes.d.ts +2 -0
- package/dist/test/unit/bitgo/safe/safes.d.ts.map +1 -0
- package/dist/test/unit/bitgo/safe/safes.js +364 -0
- package/dist/test/unit/bitgo/trading/network/encrypt.d.ts +2 -0
- package/dist/test/unit/bitgo/trading/network/encrypt.d.ts.map +1 -0
- package/dist/test/unit/bitgo/trading/network/encrypt.js +71 -0
- package/dist/test/unit/bitgo/trading/network/network.test.d.ts +2 -0
- package/dist/test/unit/bitgo/trading/network/network.test.d.ts.map +1 -0
- package/dist/test/unit/bitgo/trading/network/network.test.js +136 -0
- package/dist/test/unit/bitgo/trading/tradingAccount.d.ts +2 -0
- package/dist/test/unit/bitgo/trading/tradingAccount.d.ts.map +1 -0
- package/dist/test/unit/bitgo/trading/tradingAccount.js +192 -0
- package/dist/test/unit/bitgo/tss/bitgoPubKeys.d.ts +2 -0
- package/dist/test/unit/bitgo/tss/bitgoPubKeys.d.ts.map +1 -0
- package/dist/test/unit/bitgo/tss/bitgoPubKeys.js +66 -0
- package/dist/test/unit/bitgo/utils/abstractUtxoCoinUtil.js +45 -4
- package/dist/test/unit/bitgo/utils/messageTypes.d.ts +2 -0
- package/dist/test/unit/bitgo/utils/messageTypes.d.ts.map +1 -0
- package/dist/test/unit/bitgo/utils/messageTypes.js +64 -0
- package/dist/test/unit/bitgo/utils/mpcUtils.wrapApprove.d.ts +2 -0
- package/dist/test/unit/bitgo/utils/mpcUtils.wrapApprove.d.ts.map +1 -0
- package/dist/test/unit/bitgo/utils/mpcUtils.wrapApprove.js +106 -0
- package/dist/test/unit/bitgo/utils/notEmpty.d.ts +2 -0
- package/dist/test/unit/bitgo/utils/notEmpty.d.ts.map +1 -0
- package/dist/test/unit/bitgo/utils/notEmpty.js +15 -0
- package/dist/test/unit/bitgo/utils/postWithCodec.js +32 -38
- package/dist/test/unit/bitgo/utils/tss/addressVerification.d.ts +2 -0
- package/dist/test/unit/bitgo/utils/tss/addressVerification.d.ts.map +1 -0
- package/dist/test/unit/bitgo/utils/tss/addressVerification.js +251 -0
- package/dist/test/unit/bitgo/utils/tss/baseTSSUtils.d.ts +2 -0
- package/dist/test/unit/bitgo/utils/tss/baseTSSUtils.d.ts.map +1 -0
- package/dist/test/unit/bitgo/utils/tss/baseTSSUtils.js +348 -0
- package/dist/test/unit/bitgo/utils/tss/ecdsa/ecdsaEncryptionVersion.d.ts +2 -0
- package/dist/test/unit/bitgo/utils/tss/ecdsa/ecdsaEncryptionVersion.d.ts.map +1 -0
- package/dist/test/unit/bitgo/utils/tss/ecdsa/ecdsaEncryptionVersion.js +94 -0
- package/dist/test/unit/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts +2 -0
- package/dist/test/unit/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts.map +1 -0
- package/dist/test/unit/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +999 -0
- package/dist/test/unit/bitgo/utils/tss/ecdsa/gpgKeys.d.ts +5 -0
- package/dist/test/unit/bitgo/utils/tss/ecdsa/gpgKeys.d.ts.map +1 -0
- package/dist/test/unit/bitgo/utils/tss/ecdsa/gpgKeys.js +36 -0
- package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaExternalSigner.d.ts +2 -0
- package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaExternalSigner.d.ts.map +1 -0
- package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaExternalSigner.js +158 -0
- package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts +2 -0
- package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts.map +1 -0
- package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaMPCv2.js +1918 -0
- package/dist/test/unit/bitgo/utils/tss/eddsa/smcUtil.d.ts +2 -0
- package/dist/test/unit/bitgo/utils/tss/eddsa/smcUtil.d.ts.map +1 -0
- package/dist/test/unit/bitgo/utils/tss/eddsa/smcUtil.js +311 -0
- package/dist/test/unit/bitgo/utils/tss/preHashedSignable.d.ts +2 -0
- package/dist/test/unit/bitgo/utils/tss/preHashedSignable.d.ts.map +1 -0
- package/dist/test/unit/bitgo/utils/tss/preHashedSignable.js +55 -0
- package/dist/test/unit/bitgo/utils/tss/recipientUtils.d.ts +2 -0
- package/dist/test/unit/bitgo/utils/tss/recipientUtils.d.ts.map +1 -0
- package/dist/test/unit/bitgo/utils/tss/recipientUtils.js +374 -0
- package/dist/test/unit/bitgo/utils/tss/redpallas/redpallasMPCv2.d.ts +2 -0
- package/dist/test/unit/bitgo/utils/tss/redpallas/redpallasMPCv2.d.ts.map +1 -0
- package/dist/test/unit/bitgo/utils/tss/redpallas/redpallasMPCv2.js +80 -0
- package/dist/test/unit/bitgo/utils/tss/redpallas/smcUtil.d.ts +2 -0
- package/dist/test/unit/bitgo/utils/tss/redpallas/smcUtil.d.ts.map +1 -0
- package/dist/test/unit/bitgo/utils/tss/redpallas/smcUtil.js +279 -0
- package/dist/test/unit/bitgo/utils/tss/redpallasBitgoGpgKey.d.ts +2 -0
- package/dist/test/unit/bitgo/utils/tss/redpallasBitgoGpgKey.d.ts.map +1 -0
- package/dist/test/unit/bitgo/utils/tss/redpallasBitgoGpgKey.js +111 -0
- package/dist/test/unit/bitgo/utils/txRequest.d.ts +2 -0
- package/dist/test/unit/bitgo/utils/txRequest.d.ts.map +1 -0
- package/dist/test/unit/bitgo/utils/txRequest.js +179 -0
- package/dist/test/unit/bitgo/utils/wallet.d.ts +2 -0
- package/dist/test/unit/bitgo/utils/wallet.d.ts.map +1 -0
- package/dist/test/unit/bitgo/utils/wallet.js +55 -0
- package/dist/test/unit/bitgo/wallet/BuildParams.d.ts +2 -0
- package/dist/test/unit/bitgo/wallet/BuildParams.d.ts.map +1 -0
- package/dist/test/unit/bitgo/wallet/BuildParams.js +141 -0
- package/dist/test/unit/bitgo/wallet/SendTransactionRequest.js +79 -9
- package/dist/test/unit/bitgo/wallet/getAccountResources.d.ts +2 -0
- package/dist/test/unit/bitgo/wallet/getAccountResources.d.ts.map +1 -0
- package/dist/test/unit/bitgo/wallet/getAccountResources.js +133 -0
- package/dist/test/unit/bitgo/wallet/getPotentialStuckTxs.d.ts +2 -0
- package/dist/test/unit/bitgo/wallet/getPotentialStuckTxs.d.ts.map +1 -0
- package/dist/test/unit/bitgo/wallet/getPotentialStuckTxs.js +88 -0
- package/dist/test/unit/bitgo/wallet/getResourceDelegations.d.ts +2 -0
- package/dist/test/unit/bitgo/wallet/getResourceDelegations.d.ts.map +1 -0
- package/dist/test/unit/bitgo/wallet/getResourceDelegations.js +118 -0
- package/dist/test/unit/bitgo/wallet/ofcWalletAddressCreation.d.ts +2 -0
- package/dist/test/unit/bitgo/wallet/ofcWalletAddressCreation.d.ts.map +1 -0
- package/dist/test/unit/bitgo/wallet/ofcWalletAddressCreation.js +141 -0
- package/dist/test/unit/bitgo/wallet/ofcWalletSignTransaction.d.ts +2 -0
- package/dist/test/unit/bitgo/wallet/ofcWalletSignTransaction.d.ts.map +1 -0
- package/dist/test/unit/bitgo/wallet/ofcWalletSignTransaction.js +185 -0
- package/dist/test/unit/bitgo/wallet/prebuildTransactionTypes.d.ts +2 -0
- package/dist/test/unit/bitgo/wallet/prebuildTransactionTypes.d.ts.map +1 -0
- package/dist/test/unit/bitgo/wallet/prebuildTransactionTypes.js +20 -0
- package/dist/test/unit/bitgo/wallet/resourceManagement.d.ts +3 -0
- package/dist/test/unit/bitgo/wallet/resourceManagement.d.ts.map +1 -0
- package/dist/test/unit/bitgo/wallet/resourceManagement.js +441 -0
- package/dist/test/unit/bitgo/wallet/safeGetUserPrv.d.ts +5 -0
- package/dist/test/unit/bitgo/wallet/safeGetUserPrv.d.ts.map +1 -0
- package/dist/test/unit/bitgo/wallet/safeGetUserPrv.js +671 -0
- package/dist/test/unit/bitgo/wallet/tokenApproval.d.ts +2 -0
- package/dist/test/unit/bitgo/wallet/tokenApproval.d.ts.map +1 -0
- package/dist/test/unit/bitgo/wallet/tokenApproval.js +201 -0
- package/dist/test/unit/bitgo/wallet/walletEvmAddressCreation.d.ts +2 -0
- package/dist/test/unit/bitgo/wallet/walletEvmAddressCreation.d.ts.map +1 -0
- package/dist/test/unit/bitgo/wallet/walletEvmAddressCreation.js +181 -0
- package/dist/test/unit/bitgo/wallet/walletOptionsCodecs.d.ts +2 -0
- package/dist/test/unit/bitgo/wallet/walletOptionsCodecs.d.ts.map +1 -0
- package/dist/test/unit/bitgo/wallet/walletOptionsCodecs.js +69 -0
- package/dist/test/unit/bitgo/wallet/walletTssAddressVerification.d.ts +2 -0
- package/dist/test/unit/bitgo/wallet/walletTssAddressVerification.d.ts.map +1 -0
- package/dist/test/unit/bitgo/wallet/walletTssAddressVerification.js +320 -0
- package/dist/test/unit/bitgo/wallet/walletsEncryptionVersion.d.ts +2 -0
- package/dist/test/unit/bitgo/wallet/walletsEncryptionVersion.d.ts.map +1 -0
- package/dist/test/unit/bitgo/wallet/walletsEncryptionVersion.js +293 -0
- package/dist/test/unit/bitgo/wallet/walletsEvmKeyring.d.ts +2 -0
- package/dist/test/unit/bitgo/wallet/walletsEvmKeyring.d.ts.map +1 -0
- package/dist/test/unit/bitgo/wallet/walletsEvmKeyring.js +216 -0
- package/dist/test/unit/bitgo/wallet/walletsExternalSigner.d.ts +2 -0
- package/dist/test/unit/bitgo/wallet/walletsExternalSigner.d.ts.map +1 -0
- package/dist/test/unit/bitgo/wallet/walletsExternalSigner.js +675 -0
- package/dist/test/unit/bitgo/wallet/walletsGoAccount.d.ts +2 -0
- package/dist/test/unit/bitgo/wallet/walletsGoAccount.d.ts.map +1 -0
- package/dist/test/unit/bitgo/wallet/walletsGoAccount.js +150 -0
- package/dist/test/unit/bitgo/wallet/walletsWebauthn.d.ts +2 -0
- package/dist/test/unit/bitgo/wallet/walletsWebauthn.d.ts.map +1 -0
- package/dist/test/unit/bitgo/wallet/walletsWebauthn.js +201 -0
- package/dist/test/unit/coins/ofc.d.ts +2 -0
- package/dist/test/unit/coins/ofc.d.ts.map +1 -0
- package/dist/test/unit/coins/ofc.js +124 -0
- package/dist/test/unit/lightning.d.ts +2 -0
- package/dist/test/unit/lightning.d.ts.map +1 -0
- package/dist/test/unit/lightning.js +23 -0
- package/dist/test/unit/units.d.ts.map +1 -1
- package/dist/test/unit/units.js +64 -64
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +23 -21
- package/.eslintignore +0 -5
- package/CHANGELOG.md +0 -1712
- package/dist/src/account-lib/baseCoin/blsKeyPair.d.ts +0 -77
- package/dist/src/account-lib/baseCoin/blsKeyPair.d.ts.map +0 -1
- package/dist/src/account-lib/baseCoin/blsKeyPair.js +0 -209
- package/dist/src/bitgo/lightning/iLightning.d.ts +0 -186
- package/dist/src/bitgo/lightning/iLightning.d.ts.map +0 -1
- package/dist/src/bitgo/lightning/iLightning.js +0 -106
- package/dist/src/bitgo/lightning/index.d.ts +0 -5
- package/dist/src/bitgo/lightning/index.d.ts.map +0 -1
- package/dist/src/bitgo/lightning/index.js +0 -17
- package/dist/src/bitgo/lightning/lightning.d.ts +0 -25
- package/dist/src/bitgo/lightning/lightning.d.ts.map +0 -1
- package/dist/src/bitgo/lightning/lightning.js +0 -111
- package/dist/src/bitgo/lightning/lightningUtils.d.ts +0 -46
- package/dist/src/bitgo/lightning/lightningUtils.d.ts.map +0 -1
- package/dist/src/bitgo/lightning/lightningUtils.js +0 -133
- package/dist/src/bitgo/lightning/lnurlCodec.d.ts +0 -3
- package/dist/src/bitgo/lightning/lnurlCodec.d.ts.map +0 -1
- package/dist/src/bitgo/lightning/lnurlCodec.js +0 -28
- package/dist/src/bitgo/utils/blsUtils.d.ts +0 -52
- package/dist/src/bitgo/utils/blsUtils.d.ts.map +0 -1
- package/dist/src/bitgo/utils/blsUtils.js +0 -237
- package/dist/src/bitgo/utils/iBlsUtils.d.ts +0 -14
- package/dist/src/bitgo/utils/iBlsUtils.d.ts.map +0 -1
- package/dist/src/bitgo/utils/iBlsUtils.js +0 -3
- package/dist/src/coins/fiateur.d.ts +0 -31
- package/dist/src/coins/fiateur.d.ts.map +0 -1
- package/dist/src/coins/fiateur.js +0 -57
- package/dist/src/coins/fiatgbp.d.ts +0 -31
- package/dist/src/coins/fiatgbp.d.ts.map +0 -1
- package/dist/src/coins/fiatgbp.js +0 -57
- package/dist/src/coins/fiatusd.d.ts +0 -31
- package/dist/src/coins/fiatusd.d.ts.map +0 -1
- package/dist/src/coins/fiatusd.js +0 -57
- package/dist/src/coins/tfiateur.d.ts +0 -11
- package/dist/src/coins/tfiateur.d.ts.map +0 -1
- package/dist/src/coins/tfiateur.js +0 -17
- package/dist/src/coins/tfiatgbp.d.ts +0 -11
- package/dist/src/coins/tfiatgbp.d.ts.map +0 -1
- package/dist/src/coins/tfiatgbp.js +0 -17
- package/dist/src/coins/tfiatusd.d.ts +0 -11
- package/dist/src/coins/tfiatusd.d.ts.map +0 -1
- package/dist/src/coins/tfiatusd.js +0 -17
- package/dist/src/openssl/index.d.ts +0 -5
- package/dist/src/openssl/index.d.ts.map +0 -1
- package/dist/src/openssl/index.js +0 -9
- package/dist/test/unit/openssl.d.ts +0 -2
- package/dist/test/unit/openssl.d.ts.map +0 -1
- package/dist/test/unit/openssl.js +0 -39
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
|
@@ -11,23 +15,34 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
|
|
|
11
15
|
}) : function(o, v) {
|
|
12
16
|
o["default"] = v;
|
|
13
17
|
});
|
|
14
|
-
var __importStar = (this && this.__importStar) || function (
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
};
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
21
35
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
22
36
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
23
37
|
};
|
|
24
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
39
|
exports.Keychains = void 0;
|
|
26
|
-
const _ = __importStar(require("lodash"));
|
|
27
40
|
const assert_1 = __importDefault(require("assert"));
|
|
41
|
+
const _ = __importStar(require("lodash"));
|
|
28
42
|
const common = __importStar(require("../../common"));
|
|
43
|
+
const errors_1 = require("../errors");
|
|
44
|
+
const derivableEd25519Pub_1 = require("../safe/derivableEd25519Pub");
|
|
29
45
|
const utils_1 = require("../utils");
|
|
30
|
-
const decode_1 = require("../utils/decode");
|
|
31
46
|
const ovcJsonCodec_1 = require("./ovcJsonCodec");
|
|
32
47
|
class Keychains {
|
|
33
48
|
constructor(bitgo, baseCoin) {
|
|
@@ -107,21 +122,28 @@ class Keychains {
|
|
|
107
122
|
continue;
|
|
108
123
|
}
|
|
109
124
|
try {
|
|
110
|
-
const updatedKeychain = this.updateSingleKeychainPassword({
|
|
125
|
+
const updatedKeychain = await this.updateSingleKeychainPassword({
|
|
111
126
|
keychain: key,
|
|
112
127
|
oldPassword: params.oldPassword,
|
|
113
128
|
newPassword: params.newPassword,
|
|
129
|
+
encryptionVersion: params.encryptionVersion,
|
|
114
130
|
});
|
|
115
131
|
if (updatedKeychain.encryptedPrv) {
|
|
116
|
-
|
|
132
|
+
// Both TSS and multi-user-ofc keys have multiple public keys in their key document and thus need to use objectID
|
|
133
|
+
const changedKeyIdentifier = updatedKeychain.type === 'tss' || Keychains.isMultiUserKey(updatedKeychain)
|
|
134
|
+
? updatedKeychain.id
|
|
135
|
+
: updatedKeychain.pub;
|
|
117
136
|
if (changedKeyIdentifier) {
|
|
118
137
|
changedKeys[changedKeyIdentifier] = updatedKeychain.encryptedPrv;
|
|
119
138
|
}
|
|
120
139
|
}
|
|
121
140
|
}
|
|
122
141
|
catch (e) {
|
|
123
|
-
// if the password was incorrect, silence the error, throw otherwise
|
|
124
|
-
|
|
142
|
+
// if the password was incorrect, silence the error, throw otherwise.
|
|
143
|
+
// updateSingleKeychainPassword wraps a wrong-password (or corrupt input) failure as
|
|
144
|
+
// 'failed to update keychain password: ...', so treat that as a skip-able error.
|
|
145
|
+
if (!e.message.includes('private key is incorrect') &&
|
|
146
|
+
!e.message.includes('failed to update keychain password')) {
|
|
125
147
|
throw e;
|
|
126
148
|
}
|
|
127
149
|
}
|
|
@@ -136,14 +158,41 @@ class Keychains {
|
|
|
136
158
|
return changedKeys;
|
|
137
159
|
}
|
|
138
160
|
/**
|
|
139
|
-
*
|
|
161
|
+
* Determine the encryption version of a ciphertext by inspecting its "v" field.
|
|
162
|
+
* - v1 (SJCL / PBKDF2-SHA256 + AES-256-CCM): "v" absent or explicitly 1
|
|
163
|
+
* - v2 (Argon2id + AES-256-GCM): "v" === 2
|
|
164
|
+
* Throws on unrecognized values so callers cannot silently mis-handle unknown envelopes.
|
|
165
|
+
*/
|
|
166
|
+
getEncryptionVersion(ciphertext) {
|
|
167
|
+
let envelope;
|
|
168
|
+
try {
|
|
169
|
+
envelope = JSON.parse(ciphertext);
|
|
170
|
+
}
|
|
171
|
+
catch (e) {
|
|
172
|
+
throw new Error(`Failed to parse ciphertext envelope: ${e.message}`);
|
|
173
|
+
}
|
|
174
|
+
if (envelope.v === 2) {
|
|
175
|
+
return 2;
|
|
176
|
+
}
|
|
177
|
+
if (envelope.v === undefined || envelope.v === 1) {
|
|
178
|
+
return 1;
|
|
179
|
+
}
|
|
180
|
+
throw new Error(`Unrecognized encryption version: ${String(envelope.v)}`);
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Update the password used to decrypt a single keychain. Defaults to preserving the
|
|
184
|
+
* source envelope version (v1 stays v1, v2 stays v2), so this is a no-op with respect to
|
|
185
|
+
* encryption version unless the caller opts in. Pass `encryptionVersion: 2` to explicitly
|
|
186
|
+
* upgrade a v1 (SJCL) keychain to v2 (Argon2id + AES-256-GCM) as part of the password change
|
|
187
|
+
* (e.g. once a caller is ready, after the Sept 15 breaking-change window closes).
|
|
140
188
|
* @param params
|
|
141
189
|
* @param params.keychain - The keychain whose password should be updated
|
|
142
190
|
* @param params.oldPassword - The old password used for encrypting the key
|
|
143
191
|
* @param params.newPassword - The new password to be used for encrypting the key
|
|
144
|
-
* @
|
|
192
|
+
* @param params.encryptionVersion - Optional envelope version to emit; defaults to the source envelope's version
|
|
193
|
+
* @returns {Promise<Keychain>}
|
|
145
194
|
*/
|
|
146
|
-
updateSingleKeychainPassword(params = {}) {
|
|
195
|
+
async updateSingleKeychainPassword(params = {}) {
|
|
147
196
|
if (!_.isString(params.oldPassword)) {
|
|
148
197
|
throw new Error('expected old password to be a string');
|
|
149
198
|
}
|
|
@@ -155,20 +204,44 @@ class Keychains {
|
|
|
155
204
|
}
|
|
156
205
|
const oldEncryptedPrv = params.keychain.encryptedPrv;
|
|
157
206
|
try {
|
|
158
|
-
const decryptedPrv = this.bitgo.decrypt({ input: oldEncryptedPrv, password: params.oldPassword });
|
|
159
|
-
const newEncryptedPrv = this.bitgo.encrypt({
|
|
207
|
+
const decryptedPrv = await this.bitgo.decrypt({ input: oldEncryptedPrv, password: params.oldPassword });
|
|
208
|
+
const newEncryptedPrv = await this.bitgo.encrypt({
|
|
209
|
+
input: decryptedPrv,
|
|
210
|
+
password: params.newPassword,
|
|
211
|
+
encryptionVersion: params.encryptionVersion ?? this.getEncryptionVersion(oldEncryptedPrv),
|
|
212
|
+
});
|
|
160
213
|
return _.assign({}, params.keychain, { encryptedPrv: newEncryptedPrv });
|
|
161
214
|
}
|
|
162
215
|
catch (e) {
|
|
163
216
|
// catching an error here means that the password was incorrect or, less likely, the input to decrypt is corrupted
|
|
164
|
-
|
|
217
|
+
const errorDetail = e instanceof Error ? e.message : String(e);
|
|
218
|
+
throw new Error(`failed to update keychain password: ${errorDetail}`);
|
|
165
219
|
}
|
|
166
220
|
}
|
|
221
|
+
/**
|
|
222
|
+
* Decrypt an encrypted private key with `passphrase` and re-encrypt it as a v2
|
|
223
|
+
* (Argon2id + AES-256-GCM) envelope with the same passphrase.
|
|
224
|
+
*
|
|
225
|
+
* Used to upgrade legacy v1 (SJCL) envelopes to v2 without changing the passphrase.
|
|
226
|
+
* Callers that need to try a fallback passphrase (e.g. an original passphrase from
|
|
227
|
+
* before a password rotation) should handle that themselves — this primitive does one
|
|
228
|
+
* thing and lets decryption errors surface directly.
|
|
229
|
+
*/
|
|
230
|
+
async reencryptAsV2(encryptedPrv, passphrase) {
|
|
231
|
+
const prv = await this.bitgo.decrypt({ input: encryptedPrv, password: passphrase });
|
|
232
|
+
return this.bitgo.encrypt({ input: prv, password: passphrase, encryptionVersion: 2 });
|
|
233
|
+
}
|
|
167
234
|
/**
|
|
168
235
|
* Create a public/private key pair
|
|
169
|
-
* @param params
|
|
236
|
+
* @param params - optional params
|
|
237
|
+
* @param params.seed optional - seed to use for keypair generation
|
|
238
|
+
* @param params.isRootKey optional - whether the resulting keypair should be a root key
|
|
239
|
+
* @returns {KeyPair} - the generated keypair
|
|
170
240
|
*/
|
|
171
241
|
create(params = {}) {
|
|
242
|
+
if (params?.isRootKey) {
|
|
243
|
+
return this.baseCoin.generateRootKeyPair(params.seed);
|
|
244
|
+
}
|
|
172
245
|
return this.baseCoin.generateKeyPair(params.seed);
|
|
173
246
|
}
|
|
174
247
|
/**
|
|
@@ -186,6 +259,9 @@ class Keychains {
|
|
|
186
259
|
'originalPasscodeEncryptionCode',
|
|
187
260
|
'enterprise',
|
|
188
261
|
'derivedFromParentWithSeed',
|
|
262
|
+
'derivedFromParentWithHardenedPath',
|
|
263
|
+
'parent',
|
|
264
|
+
'safeId',
|
|
189
265
|
]);
|
|
190
266
|
if (!_.isUndefined(params.disableKRSEmail)) {
|
|
191
267
|
if (!_.isBoolean(params.disableKRSEmail)) {
|
|
@@ -209,6 +285,8 @@ class Keychains {
|
|
|
209
285
|
originalPasscodeEncryptionCode: params.originalPasscodeEncryptionCode,
|
|
210
286
|
enterprise: params.enterprise,
|
|
211
287
|
derivedFromParentWithSeed: params.derivedFromParentWithSeed,
|
|
288
|
+
derivedFromParentWithHardenedPath: params.derivedFromParentWithHardenedPath,
|
|
289
|
+
parent: params.parent,
|
|
212
290
|
disableKRSEmail: params.disableKRSEmail,
|
|
213
291
|
krsSpecific: params.krsSpecific,
|
|
214
292
|
keyShares: params.keyShares,
|
|
@@ -216,6 +294,11 @@ class Keychains {
|
|
|
216
294
|
backupGPGPublicKey: params.backupGPGPublicKey,
|
|
217
295
|
algoUsed: params.algoUsed,
|
|
218
296
|
isDistributedCustody: params.isDistributedCustody,
|
|
297
|
+
isMPCv2: params.isMPCv2,
|
|
298
|
+
coinSpecific: params.coinSpecific,
|
|
299
|
+
webauthnDevices: params.webauthnDevices,
|
|
300
|
+
webauthnInfo: params.webauthnInfo,
|
|
301
|
+
safeId: params.safeId,
|
|
219
302
|
})
|
|
220
303
|
.result();
|
|
221
304
|
}
|
|
@@ -240,6 +323,27 @@ class Keychains {
|
|
|
240
323
|
// if the provider is undefined, we generate a local key and add the source details
|
|
241
324
|
const key = this.create();
|
|
242
325
|
_.extend(params, key);
|
|
326
|
+
if (params.passphrase !== undefined) {
|
|
327
|
+
_.extend(params, {
|
|
328
|
+
encryptedPrv: await this.bitgo.encrypt({
|
|
329
|
+
input: key.prv,
|
|
330
|
+
password: params.passphrase,
|
|
331
|
+
encryptionVersion: params.encryptionVersion,
|
|
332
|
+
}),
|
|
333
|
+
});
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
// Wallet Safes v1 slot ④ (`ed25519Multisig`): make the backup root soft-derivable by folding a
|
|
337
|
+
// fresh chain code into `pub`. Nothing else on the wire changes — the chain code has no field of
|
|
338
|
+
// its own, and callers recover it with `decodeDerivableEd25519Pub` on the returned pub.
|
|
339
|
+
//
|
|
340
|
+
// The slot is identified from the generated pub itself: `safeId` marks it as a safe root, and a
|
|
341
|
+
// StrKey ed25519 pub narrows it to slot ④. That is exact — slot ① roots are secp256k1 (an xpub,
|
|
342
|
+
// which already carries its own chain code) and slots ②③ are MPC, which run through `createMpc`
|
|
343
|
+
// and never reach here.
|
|
344
|
+
const withKey = params;
|
|
345
|
+
if (params.safeId !== undefined && withKey.pub !== undefined && (0, derivableEd25519Pub_1.isValidEd25519StrKeyPublicKey)(withKey.pub)) {
|
|
346
|
+
withKey.pub = (0, derivableEd25519Pub_1.encodeDerivableEd25519Pub)(withKey.pub, (0, derivableEd25519Pub_1.generateEd25519ChainCodeBase32)());
|
|
243
347
|
}
|
|
244
348
|
const serverResponse = await this.add(params);
|
|
245
349
|
return _.extend({}, serverResponse, _.pick(params, ['prv', 'encryptedPrv', 'provider', 'source']));
|
|
@@ -265,26 +369,75 @@ class Keychains {
|
|
|
265
369
|
* @return {Promise<KeychainsTriplet>} newly created User, Backup, and BitGo keys
|
|
266
370
|
*/
|
|
267
371
|
async createMpc(params) {
|
|
372
|
+
if (params.multisigType !== 'tss') {
|
|
373
|
+
throw new Error('Unsupported multi-sig type');
|
|
374
|
+
}
|
|
375
|
+
const tssSettings = await this.bitgo
|
|
376
|
+
.get(this.bitgo.microservicesUrl('/api/v2/tss/settings'))
|
|
377
|
+
.query({ enterprise: params.enterprise })
|
|
378
|
+
.result();
|
|
379
|
+
const multisigTypeVersion = tssSettings.coinSettings[this.baseCoin.getFamily()]?.walletCreationSettings?.multiSigTypeVersion;
|
|
380
|
+
const isMPCv2 = multisigTypeVersion === 'MPCv2';
|
|
381
|
+
if (params.safeId && !isMPCv2) {
|
|
382
|
+
// The legacy MPCv1 ceremonies accept a safeId for signature compatibility but silently
|
|
383
|
+
// ignore it (see EDDSAUtils.default.createKeychains / ECDSAUtils.EcdsaUtils.createKeychains),
|
|
384
|
+
// so the resulting keys never get tagged with the safe and WP's finalize step rejects them
|
|
385
|
+
// with a generic 400. Fail fast here instead of letting that confusing error surface later.
|
|
386
|
+
throw new errors_1.SafeMpcCeremonyUnsupportedError(this.baseCoin.getFamily());
|
|
387
|
+
}
|
|
268
388
|
let MpcUtils;
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
if (_.isUndefined(params.passphrase)) {
|
|
275
|
-
throw new Error('missing required param passphrase');
|
|
276
|
-
}
|
|
277
|
-
MpcUtils = utils_1.BlsUtils;
|
|
278
|
-
break;
|
|
279
|
-
default:
|
|
280
|
-
throw new Error('Unsupported multi-sig type');
|
|
389
|
+
if (this.baseCoin.getMPCAlgorithm() === 'eddsa') {
|
|
390
|
+
MpcUtils = isMPCv2 ? utils_1.EDDSAUtils.EddsaMPCv2Utils : utils_1.EDDSAUtils.default;
|
|
391
|
+
}
|
|
392
|
+
else {
|
|
393
|
+
MpcUtils = isMPCv2 ? utils_1.ECDSAUtils.EcdsaMPCv2Utils : utils_1.ECDSAUtils.EcdsaUtils;
|
|
281
394
|
}
|
|
282
395
|
const mpcUtils = new MpcUtils(this.bitgo, this.baseCoin);
|
|
283
396
|
return await mpcUtils.createKeychains({
|
|
284
397
|
passphrase: params.passphrase,
|
|
285
398
|
enterprise: params.enterprise,
|
|
286
399
|
originalPasscodeEncryptionCode: params.originalPasscodeEncryptionCode,
|
|
287
|
-
|
|
400
|
+
retrofit: params.retrofit,
|
|
401
|
+
webauthnInfo: params.webauthnInfo,
|
|
402
|
+
encryptionVersion: params.encryptionVersion,
|
|
403
|
+
safeId: params.safeId,
|
|
404
|
+
});
|
|
405
|
+
}
|
|
406
|
+
async recreateMpc(params) {
|
|
407
|
+
(0, assert_1.default)(params.coin, new Error('missing required param coin'));
|
|
408
|
+
(0, assert_1.default)(params.walletId, new Error('missing required param walletId'));
|
|
409
|
+
(0, assert_1.default)(params.otp, new Error('missing required param otp'));
|
|
410
|
+
(0, assert_1.default)(params.passphrase, new Error('missing required param passphrase'));
|
|
411
|
+
(0, assert_1.default)(params.encryptedMaterial.encryptedWalletPassphrase, new Error('missing required param encryptedWalletPassphrase'));
|
|
412
|
+
(0, assert_1.default)(params.encryptedMaterial.encryptedUserKey, new Error('missing required param encryptedUserKey'));
|
|
413
|
+
(0, assert_1.default)(params.encryptedMaterial.encryptedBackupKey, new Error('missing required param encryptedBackupKey'));
|
|
414
|
+
await this.bitgo.post(this.bitgo.microservicesUrl('/api/v1/user/unlock')).send({ otp: params.otp }).result();
|
|
415
|
+
const { recoveryInfo } = await this.bitgo
|
|
416
|
+
.post(this.bitgo.microservicesUrl(`/api/v2/${params.coin}/wallet/${params.walletId}/passcoderecovery`))
|
|
417
|
+
.result();
|
|
418
|
+
if (!recoveryInfo || !('passcodeEncryptionCode' in recoveryInfo)) {
|
|
419
|
+
throw new Error('failed to get recovery info');
|
|
420
|
+
}
|
|
421
|
+
const decryptedWalletPassphrase = await this.bitgo.decrypt({
|
|
422
|
+
input: params.encryptedMaterial.encryptedWalletPassphrase,
|
|
423
|
+
password: recoveryInfo.passcodeEncryptionCode,
|
|
424
|
+
});
|
|
425
|
+
const decryptedUserKey = await this.bitgo.decrypt({
|
|
426
|
+
input: params.encryptedMaterial.encryptedUserKey,
|
|
427
|
+
password: decryptedWalletPassphrase,
|
|
428
|
+
});
|
|
429
|
+
const decryptedBackupKey = await this.bitgo.decrypt({
|
|
430
|
+
input: params.encryptedMaterial.encryptedBackupKey,
|
|
431
|
+
password: decryptedWalletPassphrase,
|
|
432
|
+
});
|
|
433
|
+
return this.createMpc({
|
|
434
|
+
...params,
|
|
435
|
+
multisigType: 'tss',
|
|
436
|
+
retrofit: {
|
|
437
|
+
decryptedUserKey,
|
|
438
|
+
decryptedBackupKey,
|
|
439
|
+
walletId: params.walletId,
|
|
440
|
+
},
|
|
288
441
|
});
|
|
289
442
|
}
|
|
290
443
|
/**
|
|
@@ -292,11 +445,11 @@ class Keychains {
|
|
|
292
445
|
* and creates a corresponding TSS BitGo key. It also returns the JSON that needs
|
|
293
446
|
* to be uploaded back to the OVCs containing the BitGo -> OVC shares.
|
|
294
447
|
* @param ovcOutputJson JSON format of the file downloaded from the OVC for platform
|
|
448
|
+
* @param enterprise Optional enterprise ID associated with the key
|
|
295
449
|
* @returns {BitGoKeyFromOvcShares}
|
|
296
450
|
*/
|
|
297
|
-
async createTssBitGoKeyFromOvcShares(ovcOutputJson) {
|
|
298
|
-
|
|
299
|
-
const decodedOvcOutput = decode_1.decodeOrElse(ovcJsonCodec_1.OvcToBitGoJSON.name, ovcJsonCodec_1.OvcToBitGoJSON, ovcOutputJson, (errors) => {
|
|
451
|
+
async createTssBitGoKeyFromOvcShares(ovcOutputJson, enterprise) {
|
|
452
|
+
const decodedOvcOutput = (0, utils_1.decodeOrElse)(ovcJsonCodec_1.OvcToBitGoJSON.name, ovcJsonCodec_1.OvcToBitGoJSON, ovcOutputJson, (errors) => {
|
|
300
453
|
throw new Error(`Error(s) parsing OVC JSON: ${errors}`);
|
|
301
454
|
});
|
|
302
455
|
if (decodedOvcOutput.state !== 1) {
|
|
@@ -312,16 +465,16 @@ class Keychains {
|
|
|
312
465
|
to: 'bitgo',
|
|
313
466
|
publicShare: ovc1.ovcToBitgoShare.publicShare,
|
|
314
467
|
privateShare: ovc1.ovcToBitgoShare.privateShare,
|
|
315
|
-
privateShareProof:
|
|
316
|
-
vssProof:
|
|
468
|
+
privateShareProof: ovc1.ovcToBitgoShare.uSig.toString() ?? '',
|
|
469
|
+
vssProof: ovc1.ovcToBitgoShare.vssProof ?? '',
|
|
317
470
|
},
|
|
318
471
|
{
|
|
319
472
|
from: 'backup',
|
|
320
473
|
to: 'bitgo',
|
|
321
474
|
publicShare: ovc2.ovcToBitgoShare.publicShare,
|
|
322
475
|
privateShare: ovc2.ovcToBitgoShare.privateShare,
|
|
323
|
-
privateShareProof:
|
|
324
|
-
vssProof:
|
|
476
|
+
privateShareProof: ovc2.ovcToBitgoShare.uSig.toString() ?? '',
|
|
477
|
+
vssProof: ovc2.ovcToBitgoShare.vssProof ?? '',
|
|
325
478
|
},
|
|
326
479
|
];
|
|
327
480
|
const key = await this.baseCoin.keychains().add({
|
|
@@ -330,18 +483,19 @@ class Keychains {
|
|
|
330
483
|
keyType: 'tss',
|
|
331
484
|
userGPGPublicKey: ovc1.gpgPubKey,
|
|
332
485
|
backupGPGPublicKey: ovc2.gpgPubKey,
|
|
486
|
+
enterprise,
|
|
333
487
|
});
|
|
334
|
-
assert_1.default(key.keyShares);
|
|
335
|
-
assert_1.default(key.commonKeychain);
|
|
336
|
-
assert_1.default(key.walletHSMGPGPublicKeySigs);
|
|
488
|
+
(0, assert_1.default)(key.keyShares);
|
|
489
|
+
(0, assert_1.default)(key.commonKeychain);
|
|
490
|
+
(0, assert_1.default)(key.walletHSMGPGPublicKeySigs);
|
|
337
491
|
const bitgoToUserShare = key.keyShares.find((value) => value.from === 'bitgo' && value.to === 'user');
|
|
338
|
-
assert_1.default(bitgoToUserShare);
|
|
339
|
-
assert_1.default(bitgoToUserShare.vssProof);
|
|
340
|
-
assert_1.default(bitgoToUserShare.paillierPublicKey);
|
|
492
|
+
(0, assert_1.default)(bitgoToUserShare);
|
|
493
|
+
(0, assert_1.default)(bitgoToUserShare.vssProof);
|
|
494
|
+
(0, assert_1.default)(bitgoToUserShare.paillierPublicKey);
|
|
341
495
|
const bitgoToBackupShare = key.keyShares.find((value) => value.from === 'bitgo' && value.to === 'backup');
|
|
342
|
-
assert_1.default(bitgoToBackupShare);
|
|
343
|
-
assert_1.default(bitgoToBackupShare.vssProof);
|
|
344
|
-
assert_1.default(bitgoToBackupShare.paillierPublicKey);
|
|
496
|
+
(0, assert_1.default)(bitgoToBackupShare);
|
|
497
|
+
(0, assert_1.default)(bitgoToBackupShare.vssProof);
|
|
498
|
+
(0, assert_1.default)(bitgoToBackupShare.paillierPublicKey);
|
|
345
499
|
// Create JSON data with platform shares for OVC-1 and OVC-2
|
|
346
500
|
const bitgoToOvcOutput = {
|
|
347
501
|
wallet: {
|
|
@@ -382,10 +536,86 @@ class Keychains {
|
|
|
382
536
|
bitGoKeyId: key.id,
|
|
383
537
|
bitGoOutputJsonForOvc: bitgoToOvcOutput,
|
|
384
538
|
};
|
|
385
|
-
return
|
|
539
|
+
return (0, utils_1.decodeOrElse)(ovcJsonCodec_1.BitGoKeyFromOvcShares.name, ovcJsonCodec_1.BitGoKeyFromOvcShares, output, (errors) => {
|
|
386
540
|
throw new Error(`Error producing the output: ${errors}`);
|
|
387
541
|
});
|
|
388
542
|
}
|
|
543
|
+
/**
|
|
544
|
+
* Create user keychain, encrypt the private key with the wallet passphrase and store it in BitGo.
|
|
545
|
+
* @param walletPassphrase
|
|
546
|
+
* @returns Keychain including the decrypted private key
|
|
547
|
+
*/
|
|
548
|
+
async createUserKeychain(walletPassphrase, encryptionVersion, session) {
|
|
549
|
+
const keychains = this.baseCoin.keychains();
|
|
550
|
+
const newKeychain = keychains.create();
|
|
551
|
+
const originalPasscodeEncryptionCode = (0, utils_1.generateRandomPassword)(5);
|
|
552
|
+
// When a session is threaded in (typically from a bulk operation that already ran the KDF
|
|
553
|
+
// once), reuse it so this envelope's AES key derives via HKDF instead of another Argon2.
|
|
554
|
+
const encryptedPrv = session
|
|
555
|
+
? await session.encrypt(newKeychain.prv)
|
|
556
|
+
: await this.bitgo.encrypt({
|
|
557
|
+
password: walletPassphrase,
|
|
558
|
+
input: newKeychain.prv,
|
|
559
|
+
encryptionVersion,
|
|
560
|
+
});
|
|
561
|
+
return {
|
|
562
|
+
...(await keychains.add({
|
|
563
|
+
encryptedPrv,
|
|
564
|
+
originalPasscodeEncryptionCode,
|
|
565
|
+
pub: newKeychain.pub,
|
|
566
|
+
source: 'user',
|
|
567
|
+
})),
|
|
568
|
+
prv: newKeychain.prv,
|
|
569
|
+
};
|
|
570
|
+
}
|
|
571
|
+
/**
|
|
572
|
+
* Rotate an ofc multi-user-keychain by recreating a new keypair, encrypt it using the user password and sent it to WP
|
|
573
|
+
* This is only meant to be called by ofc multi-user-wallet's key, and will throw if otherwise.
|
|
574
|
+
*
|
|
575
|
+
* Requires 2fa auth before calling. Call the bitgo.unlock() SDK method to unlock the session first.
|
|
576
|
+
* @param params parameters for the rotate keychain method
|
|
577
|
+
* @return rotatedKeychain
|
|
578
|
+
*/
|
|
579
|
+
async rotateKeychain(params) {
|
|
580
|
+
const keyChain = await this.get({ id: params.id });
|
|
581
|
+
if (!Keychains.isMultiUserKey(keyChain)) {
|
|
582
|
+
throw new Error(`rotateKeychain is only permitted for ofc multi-user-key wallet`);
|
|
583
|
+
}
|
|
584
|
+
let pub, encryptedPrv;
|
|
585
|
+
if ('encryptedPrv' in params) {
|
|
586
|
+
// client passed in pub and encryptedPrv directly
|
|
587
|
+
pub = params.pub;
|
|
588
|
+
encryptedPrv = params.encryptedPrv;
|
|
589
|
+
}
|
|
590
|
+
else {
|
|
591
|
+
// bitgo generate pub and prv and encrypt it
|
|
592
|
+
const { pub: keyPub, prv: keyPrv } = this.create();
|
|
593
|
+
if (!keyPub) {
|
|
594
|
+
throw Error('Expected a public key to be generated');
|
|
595
|
+
}
|
|
596
|
+
pub = keyPub;
|
|
597
|
+
encryptedPrv = await this.bitgo.encrypt({
|
|
598
|
+
input: keyPrv,
|
|
599
|
+
password: params.password,
|
|
600
|
+
encryptionVersion: params.encryptionVersion,
|
|
601
|
+
});
|
|
602
|
+
}
|
|
603
|
+
return this.bitgo
|
|
604
|
+
.put(this.baseCoin.url(`/key/${params.id}`))
|
|
605
|
+
.send({
|
|
606
|
+
encryptedPrv,
|
|
607
|
+
pub,
|
|
608
|
+
reqId: params.reqId,
|
|
609
|
+
})
|
|
610
|
+
.result();
|
|
611
|
+
}
|
|
612
|
+
/**
|
|
613
|
+
* Static helper method to determine if a keychain is a ofc multi-user-key
|
|
614
|
+
* @param keychain
|
|
615
|
+
*/
|
|
616
|
+
static isMultiUserKey(keychain) {
|
|
617
|
+
return (keychain.coinSpecific?.ofc?.['features'] ?? []).includes('multi-user-key');
|
|
618
|
+
}
|
|
389
619
|
}
|
|
390
620
|
exports.Keychains = Keychains;
|
|
391
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Y2hhaW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2JpdGdvL2tleWNoYWluL2tleWNoYWlucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsMENBQTRCO0FBQzVCLG9EQUE0QjtBQUM1QixxREFBdUM7QUFHdkMsb0NBQTJFO0FBaUIzRSw0Q0FBK0M7QUFDL0MsaURBQXVGO0FBRXZGLE1BQWEsU0FBUztJQUlwQixZQUFZLEtBQWdCLEVBQUUsUUFBbUI7UUFDL0MsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDM0IsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQTBCO1FBQ2xDLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBRTFELElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1NBQ3ZDO1FBRUQsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUNyQixJQUFJLE1BQU0sQ0FBQyxLQUFLLEVBQUU7WUFDaEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDM0M7UUFDRCxPQUFPLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxHQUFHLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUM1RixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lB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LENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQS9ZRCw4QkErWUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgKiBhcyBjb21tb24gZnJvbSAnLi4vLi4vY29tbW9uJztcbmltcG9ydCB7IElCYXNlQ29pbiwgS2V5Y2hhaW5zVHJpcGxldCwgS2V5UGFpciB9IGZyb20gJy4uL2Jhc2VDb2luJztcbmltcG9ydCB7IEJpdEdvQmFzZSB9IGZyb20gJy4uL2JpdGdvQmFzZSc7XG5pbXBvcnQgeyBCbHNVdGlscywgUmVxdWVzdFRyYWNlciwgRUREU0FVdGlscywgRUNEU0FVdGlscyB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7XG4gIEFkZEtleWNoYWluT3B0aW9ucyxcbiAgQXBpS2V5U2hhcmUsXG4gIENoYW5nZWRLZXljaGFpbnMsXG4gIENyZWF0ZUJhY2t1cE9wdGlvbnMsXG4gIENyZWF0ZUJpdEdvT3B0aW9ucyxcbiAgQ3JlYXRlTXBjT3B0aW9ucyxcbiAgR2V0S2V5Y2hhaW5PcHRpb25zLFxuICBHZXRLZXlzRm9yU2lnbmluZ09wdGlvbnMsXG4gIElLZXljaGFpbnMsXG4gIEtleWNoYWluLFxuICBMaXN0S2V5Y2hhaW5PcHRpb25zLFxuICBMaXN0S2V5Y2hhaW5zUmVzdWx0LFxuICBVcGRhdGVQYXNzd29yZE9wdGlvbnMsXG4gIFVwZGF0ZVNpbmdsZUtleWNoYWluUGFzc3dvcmRPcHRpb25zLFxufSBmcm9tICcuL2lLZXljaGFpbnMnO1xuaW1wb3J0IHsgZGVjb2RlT3JFbHNlIH0gZnJvbSAnLi4vdXRpbHMvZGVjb2RlJztcbmltcG9ydCB7IEJpdEdvS2V5RnJvbU92Y1NoYXJlcywgQml0R29Ub092Y0pTT04sIE92Y1RvQml0R29KU09OIH0gZnJvbSAnLi9vdmNKc29uQ29kZWMnO1xuXG5leHBvcnQgY2xhc3MgS2V5Y2hhaW5zIGltcGxlbWVudHMgSUtleWNoYWlucyB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYml0Z286IEJpdEdvQmFzZTtcbiAgcHJpdmF0ZSByZWFkb25seSBiYXNlQ29pbjogSUJhc2VDb2luO1xuXG4gIGNvbnN0cnVjdG9yKGJpdGdvOiBCaXRHb0Jhc2UsIGJhc2VDb2luOiBJQmFzZUNvaW4pIHtcbiAgICB0aGlzLmJpdGdvID0gYml0Z287XG4gICAgdGhpcy5iYXNlQ29pbiA9IGJhc2VDb2luO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhIGtleWNoYWluIGJ5IElEXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHBhcmFtIHBhcmFtcy5pZFxuICAgKiBAcGFyYW0gcGFyYW1zLnhwdWIgKG9wdGlvbmFsKVxuICAgKiBAcGFyYW0gcGFyYW1zLmV0aEFkZHJlc3MgKG9wdGlvbmFsKVxuICAgKiBAcGFyYW0gcGFyYW1zLnJlcUlkIChvcHRpb25hbClcbiAgICovXG4gIGFzeW5jIGdldChwYXJhbXM6IEdldEtleWNoYWluT3B0aW9ucyk6IFByb21pc2U8S2V5Y2hhaW4+IHtcbiAgICBjb21tb24udmFsaWRhdGVQYXJhbXMocGFyYW1zLCBbXSwgWyd4cHViJywgJ2V0aEFkZHJlc3MnXSk7XG5cbiAgICBpZiAoXy5pc1VuZGVmaW5lZChwYXJhbXMuaWQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2lkIG11c3QgYmUgZGVmaW5lZCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGlkID0gcGFyYW1zLmlkO1xuICAgIGlmIChwYXJhbXMucmVxSWQpIHtcbiAgICAgIHRoaXMuYml0Z28uc2V0UmVxdWVzdFRyYWNlcihwYXJhbXMucmVxSWQpO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5iaXRnby5nZXQodGhpcy5iYXNlQ29pbi51cmwoJy9rZXkvJyArIGVuY29kZVVSSUNvbXBvbmVudChpZCkpKS5yZXN1bHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBsaXN0IHRoZSB1c2VycyBrZXljaGFpbnNcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcGFyYW0gcGFyYW1zLmxpbWl0IC0gTWF4IG51bWJlciBvZiByZXN1bHRzIGluIGEgc2luZ2xlIGNhbGwuXG4gICAqIEBwYXJhbSBwYXJhbXMucHJldklkIC0gQ29udGludWUgaXRlcmF0aW5nIChwcm92aWRlZCBieSBuZXh0QmF0Y2hQcmV2SWQgaW4gdGhlIHByZXZpb3VzIGxpc3QpXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgYXN5bmMgbGlzdChwYXJhbXM6IExpc3RLZXljaGFpbk9wdGlvbnMgPSB7fSk6IFByb21pc2U8TGlzdEtleWNoYWluc1Jlc3VsdD4ge1xuICAgIGNvbnN0IHF1ZXJ5T2JqZWN0OiBhbnkgPSB7fTtcblxuICAgIGlmICghXy5pc1VuZGVmaW5lZChwYXJhbXMubGltaXQpKSB7XG4gICAgICBpZiAoIV8uaXNOdW1iZXIocGFyYW1zLmxpbWl0KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgbGltaXQgYXJndW1lbnQsIGV4cGVjdGluZyBudW1iZXInKTtcbiAgICAgIH1cbiAgICAgIHF1ZXJ5T2JqZWN0LmxpbWl0ID0gcGFyYW1zLmxpbWl0O1xuICAgIH1cbiAgICBpZiAoIV8uaXNVbmRlZmluZWQocGFyYW1zLnByZXZJZCkpIHtcbiAgICAgIGlmICghXy5pc1N0cmluZyhwYXJhbXMucHJldklkKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcHJldklkIGFyZ3VtZW50LCBleHBlY3Rpbmcgc3RyaW5nJyk7XG4gICAgICB9XG4gICAgICBxdWVyeU9iamVjdC5wcmV2SWQgPSBwYXJhbXMucHJldklkO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmJpdGdvLmdldCh0aGlzLmJhc2VDb2luLnVybCgnL2tleScpKS5xdWVyeShxdWVyeU9iamVjdCkucmVzdWx0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hhbmdlIHRoZSBkZWNyeXB0aW9uIHBhc3N3b3JkIGZvciBhbGwgcG9zc2libGUga2V5Y2hhaW5zIGFzc29jaWF0ZWQgd2l0aCBhIHVzZXIuXG4gICAqXG4gICAqIFRoaXMgZnVuY3Rpb24gaXRlcmF0ZXMgdGhyb3VnaCBhbGwga2V5cyBhc3NvY2lhdGVkIHdpdGggdGhlIHVzZXIsIGRlY3J5cHRzXG4gICAqIHRoZW0gd2l0aCB0aGUgb2xkIHBhc3N3b3JkIGFuZCByZS1lbmNyeXB0cyB0aGVtIHdpdGggdGhlIG5ldyBwYXNzd29yZC5cbiAgICpcbiAgICogVGhpcyBzaG91bGQgYmUgY2FsbGVkIHdoZW4gYSB1c2VyIGNoYW5nZXMgdGhlaXIgbG9naW4gcGFzc3dvcmQsIGFuZCBhcmUgZXhwZWN0aW5nXG4gICAqIHRoYXQgdGhlaXIgd2FsbGV0IHBhc3N3b3JkcyBhcmUgY2hhbmdlZCB0byBtYXRjaCB0aGUgbmV3IGxvZ2luIHBhc3N3b3JkLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEBwYXJhbSBwYXJhbXMub2xkUGFzc3dvcmQgLSBUaGUgb2xkIHBhc3N3b3JkIHVzZWQgZm9yIGVuY3J5cHRpbmcgdGhlIGtleVxuICAgKiBAcGFyYW0gcGFyYW1zLm5ld1Bhc3N3b3JkIC0gVGhlIG5ldyBwYXNzd29yZCB0byBiZSB1c2VkIGZvciBlbmNyeXB0aW5nIHRoZSBrZXlcbiAgICogQHJldHVybnMgY2hhbmdlZEtleXMgT2JqZWN0IC0gZS5nLjpcbiAgICogIHtcbiAgICogICAgeHB1YjE6IGVuY3J5cHRlZFBydixcbiAgICogICAgLi4uXG4gICAqICB9XG4gICAqL1xuICBhc3luYyB1cGRhdGVQYXNzd29yZChwYXJhbXM6IFVwZGF0ZVBhc3N3b3JkT3B0aW9ucyk6IFByb21pc2U8Q2hhbmdlZEtleWNoYWlucz4ge1xuICAgIGNvbW1vbi52YWxpZGF0ZVBhcmFtcyhwYXJhbXMsIFsnb2xkUGFzc3dvcmQnLCAnbmV3UGFzc3dvcmQnXSwgW10pO1xuICAgIGNvbnN0IGNoYW5nZWRLZXlzOiBDaGFuZ2VkS2V5Y2hhaW5zID0ge307XG4gICAgbGV0IHByZXZJZDtcbiAgICBsZXQga2V5c0xlZnQgPSB0cnVlO1xuICAgIHdoaWxlIChrZXlzTGVmdCkge1xuICAgICAgY29uc3QgcmVzdWx0OiBMaXN0S2V5Y2hhaW5zUmVzdWx0ID0gYXdhaXQgdGhpcy5saXN0KHsgbGltaXQ6IDUwMCwgcHJldklkIH0pO1xuICAgICAgZm9yIChjb25zdCBrZXkgb2YgcmVzdWx0LmtleXMpIHtcbiAgICAgICAgY29uc3Qgb2xkRW5jcnlwdGVkUHJ2ID0ga2V5LmVuY3J5cHRlZFBydjtcbiAgICAgICAgaWYgKF8uaXNVbmRlZmluZWQob2xkRW5jcnlwdGVkUHJ2KSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgdXBkYXRlZEtleWNoYWluID0gdGhpcy51cGRhdGVTaW5nbGVLZXljaGFpblBhc3N3b3JkKHtcbiAgICAgICAgICAgIGtleWNoYWluOiBrZXksXG4gICAgICAgICAgICBvbGRQYXNzd29yZDogcGFyYW1zLm9sZFBhc3N3b3JkLFxuICAgICAgICAgICAgbmV3UGFzc3dvcmQ6IHBhcmFtcy5uZXdQYXNzd29yZCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAodXBkYXRlZEtleWNoYWluLmVuY3J5cHRlZFBydikge1xuICAgICAgICAgICAgY29uc3QgY2hhbmdlZEtleUlkZW50aWZpZXIgPVxuICAgICAgICAgICAgICB1cGRhdGVkS2V5Y2hhaW4udHlwZSA9PT0gJ3RzcycgPyB1cGRhdGVkS2V5Y2hhaW4uY29tbW9uS2V5Y2hhaW4gOiB1cGRhdGVkS2V5Y2hhaW4ucHViO1xuICAgICAgICAgICAgaWYgKGNoYW5nZWRLZXlJZGVudGlmaWVyKSB7XG4gICAgICAgICAgICAgIGNoYW5nZWRLZXlzW2NoYW5nZWRLZXlJZGVudGlmaWVyXSA9IHVwZGF0ZWRLZXljaGFpbi5lbmNyeXB0ZWRQcnY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgLy8gaWYgdGhlIHBhc3N3b3JkIHdhcyBpbmNvcnJlY3QsIHNpbGVuY2UgdGhlIGVycm9yLCB0aHJvdyBvdGhlcndpc2VcbiAgICAgICAgICBpZiAoIWUubWVzc2FnZS5pbmNsdWRlcygncHJpdmF0ZSBrZXkgaXMgaW5jb3JyZWN0JykpIHtcbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocmVzdWx0Lm5leHRCYXRjaFByZXZJZCkge1xuICAgICAgICBwcmV2SWQgPSByZXN1bHQubmV4dEJhdGNoUHJldklkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAga2V5c0xlZnQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNoYW5nZWRLZXlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgcGFzc3dvcmQgdXNlZCB0byBkZWNyeXB0IGEgc2luZ2xlIGtleWNoYWluXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHBhcmFtIHBhcmFtcy5rZXljaGFpbiAtIFRoZSBrZXljaGFpbiB3aG9zZSBwYXNzd29yZCBzaG91bGQgYmUgdXBkYXRlZFxuICAgKiBAcGFyYW0gcGFyYW1zLm9sZFBhc3N3b3JkIC0gVGhlIG9sZCBwYXNzd29yZCB1c2VkIGZvciBlbmNyeXB0aW5nIHRoZSBrZXlcbiAgICogQHBhcmFtIHBhcmFtcy5uZXdQYXNzd29yZCAtIFRoZSBuZXcgcGFzc3dvcmQgdG8gYmUgdXNlZCBmb3IgZW5jcnlwdGluZyB0aGUga2V5XG4gICAqIEByZXR1cm5zIHtvYmplY3R9XG4gICAqL1xuICB1cGRhdGVTaW5nbGVLZXljaGFpblBhc3N3b3JkKHBhcmFtczogVXBkYXRlU2luZ2xlS2V5Y2hhaW5QYXNzd29yZE9wdGlvbnMgPSB7fSk6IEtleWNoYWluIHtcbiAgICBpZiAoIV8uaXNTdHJpbmcocGFyYW1zLm9sZFBhc3N3b3JkKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdleHBlY3RlZCBvbGQgcGFzc3dvcmQgdG8gYmUgYSBzdHJpbmcnKTtcbiAgICB9XG5cbiAgICBpZiAoIV8uaXNTdHJpbmcocGFyYW1zLm5ld1Bhc3N3b3JkKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdleHBlY3RlZCBuZXcgcGFzc3dvcmQgdG8gYmUgYSBzdHJpbmcnKTtcbiAgICB9XG5cbiAgICBpZiAoIV8uaXNPYmplY3QocGFyYW1zLmtleWNoYWluKSB8fCAhXy5pc1N0cmluZyhwYXJhbXMua2V5Y2hhaW4uZW5jcnlwdGVkUHJ2KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdleHBlY3RlZCBrZXljaGFpbiB0byBiZSBhbiBvYmplY3Qgd2l0aCBhbiBlbmNyeXB0ZWRQcnYgcHJvcGVydHknKTtcbiAgICB9XG5cbiAgICBjb25zdCBvbGRFbmNyeXB0ZWRQcnYgPSBwYXJhbXMua2V5Y2hhaW4uZW5jcnlwdGVkUHJ2O1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkZWNyeXB0ZWRQcnYgPSB0aGlzLmJpdGdvLmRlY3J5cHQoeyBpbnB1dDogb2xkRW5jcnlwdGVkUHJ2LCBwYXNzd29yZDogcGFyYW1zLm9sZFBhc3N3b3JkIH0pO1xuICAgICAgY29uc3QgbmV3RW5jcnlwdGVkUHJ2ID0gdGhpcy5iaXRnby5lbmNyeXB0KHsgaW5wdXQ6IGRlY3J5cHRlZFBydiwgcGFzc3dvcmQ6IHBhcmFtcy5uZXdQYXNzd29yZCB9KTtcbiAgICAgIHJldHVybiBfLmFzc2lnbih7fSwgcGFyYW1zLmtleWNoYWluLCB7IGVuY3J5cHRlZFBydjogbmV3RW5jcnlwdGVkUHJ2IH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGNhdGNoaW5nIGFuIGVycm9yIGhlcmUgbWVhbnMgdGhhdCB0aGUgcGFzc3dvcmQgd2FzIGluY29ycmVjdCBvciwgbGVzcyBsaWtlbHksIHRoZSBpbnB1dCB0byBkZWNyeXB0IGlzIGNvcnJ1cHRlZFxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdwYXNzd29yZCB1c2VkIHRvIGRlY3J5cHQga2V5Y2hhaW4gcHJpdmF0ZSBrZXkgaXMgaW5jb3JyZWN0Jyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHB1YmxpYy9wcml2YXRlIGtleSBwYWlyXG4gICAqIEBwYXJhbSBwYXJhbXMuc2VlZFxuICAgKi9cbiAgY3JlYXRlKHBhcmFtczogeyBzZWVkPzogQnVmZmVyIH0gPSB7fSk6IEtleVBhaXIge1xuICAgIHJldHVybiB0aGlzLmJhc2VDb2luLmdlbmVyYXRlS2V5UGFpcihwYXJhbXMuc2VlZCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEga2V5Y2hhaW4gdG8gQml0R28ncyByZWNvcmRzXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICovXG4gIGFzeW5jIGFkZChwYXJhbXM6IEFkZEtleWNoYWluT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxLZXljaGFpbj4ge1xuICAgIHBhcmFtcyA9IHBhcmFtcyB8fCB7fTtcbiAgICBjb21tb24udmFsaWRhdGVQYXJhbXMoXG4gICAgICBwYXJhbXMsXG4gICAgICBbXSxcbiAgICAgIFtcbiAgICAgICAgJ3B1YicsXG4gICAgICAgICdlbmNyeXB0ZWRQcnYnLFxuICAgICAgICAna2V5VHlwZScsXG4gICAgICAgICd0eXBlJyxcbiAgICAgICAgJ3NvdXJjZScsXG4gICAgICAgICdvcmlnaW5hbFBhc3Njb2RlRW5jcnlwdGlvbkNvZGUnLFxuICAgICAgICAnZW50ZXJwcmlzZScsXG4gICAgICAgICdkZXJpdmVkRnJvbVBhcmVudFdpdGhTZWVkJyxcbiAgICAgIF1cbiAgICApO1xuXG4gICAgaWYgKCFfLmlzVW5kZWZpbmVkKHBhcmFtcy5kaXNhYmxlS1JTRW1haWwpKSB7XG4gICAgICBpZiAoIV8uaXNCb29sZWFuKHBhcmFtcy5kaXNhYmxlS1JTRW1haWwpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBkaXNhYmxlS1JTRW1haWwgYXJndW1lbnQsIGV4cGVjdGluZyBib29sZWFuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5yZXFJZCkge1xuICAgICAgdGhpcy5iaXRnby5zZXRSZXF1ZXN0VHJhY2VyKHBhcmFtcy5yZXFJZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYml0Z29cbiAgICAgIC5wb3N0KHRoaXMuYmFzZUNvaW4udXJsKCcva2V5JykpXG4gICAgICAuc2VuZCh7XG4gICAgICAgIHB1YjogcGFyYW1zLnB1YixcbiAgICAgICAgY29tbW9uUHViOiBwYXJhbXMuY29tbW9uUHViLFxuICAgICAgICBjb21tb25LZXljaGFpbjogcGFyYW1zLmNvbW1vbktleWNoYWluLFxuICAgICAgICBlbmNyeXB0ZWRQcnY6IHBhcmFtcy5lbmNyeXB0ZWRQcnYsXG4gICAgICAgIHR5cGU6IHBhcmFtcy50eXBlLFxuICAgICAgICBrZXlUeXBlOiBwYXJhbXMua2V5VHlwZSxcbiAgICAgICAgc291cmNlOiBwYXJhbXMuc291cmNlLFxuICAgICAgICBwcm92aWRlcjogcGFyYW1zLnByb3ZpZGVyLFxuICAgICAgICBvcmlnaW5hbFBhc3Njb2RlRW5jcnlwdGlvbkNvZGU6IHBhcmFtcy5vcmlnaW5hbFBhc3Njb2RlRW5jcnlwdGlvbkNvZGUsXG4gICAgICAgIGVudGVycHJpc2U6IHBhcmFtcy5lbnRlcnByaXNlLFxuICAgICAgICBkZXJpdmVkRnJvbVBhcmVudFdpdGhTZWVkOiBwYXJhbXMuZGVyaXZlZEZyb21QYXJlbnRXaXRoU2VlZCxcbiAgICAgICAgZGlzYWJsZUtSU0VtYWlsOiBwYXJhbXMuZGlzYWJsZUtSU0VtYWlsLFxuICAgICAgICBrcnNTcGVjaWZpYzogcGFyYW1zLmtyc1NwZWNpZmljLFxuICAgICAgICBrZXlTaGFyZXM6IHBhcmFtcy5rZXlTaGFyZXMsXG4gICAgICAgIHVzZXJHUEdQdWJsaWNLZXk6IHBhcmFtcy51c2VyR1BHUHVibGljS2V5LFxuICAgICAgICBiYWNrdXBHUEdQdWJsaWNLZXk6IHBhcmFtcy5iYWNrdXBHUEdQdWJsaWNLZXksXG4gICAgICAgIGFsZ29Vc2VkOiBwYXJhbXMuYWxnb1VzZWQsXG4gICAgICAgIGlzRGlzdHJpYnV0ZWRDdXN0b2R5OiBwYXJhbXMuaXNEaXN0cmlidXRlZEN1c3RvZHksXG4gICAgICB9KVxuICAgICAgLnJlc3VsdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIEJpdEdvIGtleVxuICAgKiBAcGFyYW0gcGFyYW1zIChlbXB0eSlcbiAgICovXG4gIGFzeW5jIGNyZWF0ZUJpdEdvKHBhcmFtczogQ3JlYXRlQml0R29PcHRpb25zID0ge30pOiBQcm9taXNlPEtleWNoYWluPiB7XG4gICAgcGFyYW1zLnNvdXJjZSA9ICdiaXRnbyc7XG5cbiAgICB0aGlzLmJhc2VDb2luLnByZUNyZWF0ZUJpdEdvKHBhcmFtcyBhcyBhbnkpO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmFkZChwYXJhbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGJhY2t1cCBrZXlcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcGFyYW0gcGFyYW1zLnByb3ZpZGVyIChvcHRpb25hbClcbiAgICovXG4gIGFzeW5jIGNyZWF0ZUJhY2t1cChwYXJhbXM6IENyZWF0ZUJhY2t1cE9wdGlvbnMgPSB7fSk6IFByb21pc2U8S2V5Y2hhaW4+IHtcbiAgICBwYXJhbXMuc291cmNlID0gJ2JhY2t1cCc7XG5cbiAgICBjb25zdCBpc1Rzc0JhY2t1cEtleSA9IHBhcmFtcy5wcnYgJiYgKHBhcmFtcy5jb21tb25LZXljaGFpbiB8fCBwYXJhbXMuY29tbW9uUHViKTtcblxuICAgIGlmIChfLmlzVW5kZWZpbmVkKHBhcmFtcy5wcm92aWRlcikgJiYgIWlzVHNzQmFja3VwS2V5KSB7XG4gICAgICAvLyBpZiB0aGUgcHJvdmlkZXIgaXMgdW5kZWZpbmVkLCB3ZSBnZW5lcmF0ZSBhIGxvY2FsIGtleSBhbmQgYWRkIHRoZSBzb3VyY2UgZGV0YWlsc1xuICAgICAgY29uc3Qga2V5ID0gdGhpcy5jcmVhdGUoKTtcbiAgICAgIF8uZXh0ZW5kKHBhcmFtcywga2V5KTtcbiAgICB9XG5cbiAgICBjb25zdCBzZXJ2ZXJSZXNwb25zZSA9IGF3YWl0IHRoaXMuYWRkKHBhcmFtcyk7XG4gICAgcmV0dXJuIF8uZXh0ZW5kKHt9LCBzZXJ2ZXJSZXNwb25zZSwgXy5waWNrKHBhcmFtcywgWydwcnYnLCAnZW5jcnlwdGVkUHJ2JywgJ3Byb3ZpZGVyJywgJ3NvdXJjZSddKSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBrZXlzIGZvciBzaWduaW5nIGZyb20gYSB3YWxsZXRcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxLZXljaGFpbltdPn1cbiAgICovXG4gIGFzeW5jIGdldEtleXNGb3JTaWduaW5nKHBhcmFtczogR2V0S2V5c0ZvclNpZ25pbmdPcHRpb25zID0ge30pOiBQcm9taXNlPEtleWNoYWluW10+IHtcbiAgICBpZiAoIV8uaXNPYmplY3QocGFyYW1zLndhbGxldCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyByZXF1aXJlZCBwYXJhbSB3YWxsZXQnKTtcbiAgICB9XG4gICAgY29uc3Qgd2FsbGV0ID0gcGFyYW1zLndhbGxldDtcbiAgICBjb25zdCByZXFJZCA9IHBhcmFtcy5yZXFJZCB8fCBuZXcgUmVxdWVzdFRyYWNlcigpO1xuICAgIGNvbnN0IGlkcyA9IHdhbGxldC5iYXNlQ29pbi5rZXlJZHNGb3JTaWduaW5nKCk7XG4gICAgY29uc3Qga2V5Y2hhaW5RdWVyaWVzQmx1ZWJpcmRzID0gaWRzLm1hcCgoaWQpID0+IHRoaXMuZ2V0KHsgaWQ6IHdhbGxldC5rZXlJZHMoKVtpZF0sIHJlcUlkIH0pKTtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoa2V5Y2hhaW5RdWVyaWVzQmx1ZWJpcmRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZW5pZW5jZSBmdW5jdGlvbiB0byBjcmVhdGUgYW5kIHN0b3JlIE1QQyBrZXljaGFpbnMgd2l0aCBCaXRHby5cbiAgICogQHBhcmFtIHBhcmFtcyBwYXNzcGhyYXNlIHVzZWQgdG8gZW5jcnlwdCBzZWNyZXQgbWF0ZXJpYWxzXG4gICAqIEByZXR1cm4ge1Byb21pc2U8S2V5Y2hhaW5zVHJpcGxldD59IG5ld2x5IGNyZWF0ZWQgVXNlciwgQmFja3VwLCBhbmQgQml0R28ga2V5c1xuICAgKi9cbiAgYXN5bmMgY3JlYXRlTXBjKHBhcmFtczogQ3JlYXRlTXBjT3B0aW9ucyk6IFByb21pc2U8S2V5Y2hhaW5zVHJpcGxldD4ge1xuICAgIGxldCBNcGNVdGlscztcbiAgICBzd2l0Y2ggKHBhcmFtcy5tdWx0aXNpZ1R5cGUpIHtcbiAgICAgIGNhc2UgJ3Rzcyc6XG4gICAgICAgIE1wY1V0aWxzID0gdGhpcy5iYXNlQ29pbi5nZXRNUENBbGdvcml0aG0oKSA9PT0gJ2VjZHNhJyA/IEVDRFNBVXRpbHMuRWNkc2FVdGlscyA6IEVERFNBVXRpbHMuZGVmYXVsdDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdibHNka2cnOlxuICAgICAgICBpZiAoXy5pc1VuZGVmaW5lZChwYXJhbXMucGFzc3BocmFzZSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgcGFyYW0gcGFzc3BocmFzZScpO1xuICAgICAgICB9XG4gICAgICAgIE1wY1V0aWxzID0gQmxzVXRpbHM7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBtdWx0aS1zaWcgdHlwZScpO1xuICAgIH1cbiAgICBjb25zdCBtcGNVdGlscyA9IG5ldyBNcGNVdGlscyh0aGlzLmJpdGdvLCB0aGlzLmJhc2VDb2luKTtcbiAgICByZXR1cm4gYXdhaXQgbXBjVXRpbHMuY3JlYXRlS2V5Y2hhaW5zKHtcbiAgICAgIHBhc3NwaHJhc2U6IHBhcmFtcy5wYXNzcGhyYXNlLFxuICAgICAgZW50ZXJwcmlzZTogcGFyYW1zLmVudGVycHJpc2UsXG4gICAgICBvcmlnaW5hbFBhc3Njb2RlRW5jcnlwdGlvbkNvZGU6IHBhcmFtcy5vcmlnaW5hbFBhc3Njb2RlRW5jcnlwdGlvbkNvZGUsXG4gICAgICBiYWNrdXBQcm92aWRlcjogcGFyYW1zLmJhY2t1cFByb3ZpZGVyLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEl0IHBhcnNlcyB0aGUgSlNPTiBkb3dubG9hZGVkIGZyb20gdGhlIE9WQyBmb3IgcGxhdGZvcm0gKEJpdEdvKSxcbiAgICogYW5kIGNyZWF0ZXMgYSBjb3JyZXNwb25kaW5nIFRTUyBCaXRHbyBrZXkuIEl0IGFsc28gcmV0dXJucyB0aGUgSlNPTiB0aGF0IG5lZWRzXG4gICAqIHRvIGJlIHVwbG9hZGVkIGJhY2sgdG8gdGhlIE9WQ3MgY29udGFpbmluZyB0aGUgQml0R28gLT4gT1ZDIHNoYXJlcy5cbiAgICogQHBhcmFtIG92Y091dHB1dEpzb24gSlNPTiBmb3JtYXQgb2YgdGhlIGZpbGUgZG93bmxvYWRlZCBmcm9tIHRoZSBPVkMgZm9yIHBsYXRmb3JtXG4gICAqIEByZXR1cm5zIHtCaXRHb0tleUZyb21PdmNTaGFyZXN9XG4gICAqL1xuICBhc3luYyBjcmVhdGVUc3NCaXRHb0tleUZyb21PdmNTaGFyZXMob3ZjT3V0cHV0SnNvbjogdW5rbm93bik6IFByb21pc2U8Qml0R29LZXlGcm9tT3ZjU2hhcmVzPiB7XG4gICAgY29uc3QgZGVjb2RlZE92Y091dHB1dCA9IGRlY29kZU9yRWxzZShPdmNUb0JpdEdvSlNPTi5uYW1lLCBPdmNUb0JpdEdvSlNPTiwgb3ZjT3V0cHV0SnNvbiwgKGVycm9ycykgPT4ge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvcihzKSBwYXJzaW5nIE9WQyBKU09OOiAke2Vycm9yc31gKTtcbiAgICB9KTtcblxuICAgIGlmIChkZWNvZGVkT3ZjT3V0cHV0LnN0YXRlICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N0YXRlIGV4cGVjdGVkIHRvIGJlIFwiMVwiLiBQbGVhc2UgY29tcGxldGUgdGhlIGZpcnN0IHR3byBPVkMgb3BlcmF0aW9ucycpO1xuICAgIH1cblxuICAgIC8vIE9WQy0xIGlzIHJlc3BvbnNpYmxlIGZvciB0aGUgVXNlciBrZXlcbiAgICBjb25zdCBvdmMxID0gZGVjb2RlZE92Y091dHB1dC5vdmNbMV07XG4gICAgLy8gT1ZDLTIgaXMgcmVzcG9uc2libGUgZm9yIHRoZSBCYWNrdXAga2V5XG4gICAgY29uc3Qgb3ZjMiA9IGRlY29kZWRPdmNPdXRwdXQub3ZjWzJdO1xuXG4gICAgY29uc3Qga2V5U2hhcmVzOiBBcGlLZXlTaGFyZVtdID0gW1xuICAgICAge1xuICAgICAgICBmcm9tOiAndXNlcicsXG4gICAgICAgIHRvOiAnYml0Z28nLFxuICAgICAgICBwdWJsaWNTaGFyZTogb3ZjMS5vdmNUb0JpdGdvU2hhcmUucHVibGljU2hhcmUsXG4gICAgICAgIHByaXZhdGVTaGFyZTogb3ZjMS5vdmNUb0JpdGdvU2hhcmUucHJpdmF0ZVNoYXJlLFxuICAgICAgICBwcml2YXRlU2hhcmVQcm9vZjogb3ZjMS5vdmNUb0JpdGdvU2hhcmUudVNpZy50b1N0cmluZygpID8/ICcnLFxuICAgICAgICB2c3NQcm9vZjogb3ZjMS5vdmNUb0JpdGdvU2hhcmUudnNzUHJvb2YgPz8gJycsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBmcm9tOiAnYmFja3VwJyxcbiAgICAgICAgdG86ICdiaXRnbycsXG4gICAgICAgIHB1YmxpY1NoYXJlOiBvdmMyLm92Y1RvQml0Z29TaGFyZS5wdWJsaWNTaGFyZSxcbiAgICAgICAgcHJpdmF0ZVNoYXJlOiBvdmMyLm92Y1RvQml0Z29TaGFyZS5wcml2YXRlU2hhcmUsXG4gICAgICAgIHByaXZhdGVTaGFyZVByb29mOiBvdmMyLm92Y1RvQml0Z29TaGFyZS51U2lnLnRvU3RyaW5nKCkgPz8gJycsXG4gICAgICAgIHZzc1Byb29mOiBvdmMyLm92Y1RvQml0Z29TaGFyZS52c3NQcm9vZiA/PyAnJyxcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIGNvbnN0IGtleSA9IGF3YWl0IHRoaXMuYmFzZUNvaW4ua2V5Y2hhaW5zKCkuYWRkKHtcbiAgICAgIHNvdXJjZTogJ2JpdGdvJyxcbiAgICAgIGtleVNoYXJlcyxcbiAgICAgIGtleVR5cGU6ICd0c3MnLFxuICAgICAgdXNlckdQR1B1YmxpY0tleTogb3ZjMS5ncGdQdWJLZXksXG4gICAgICBiYWNrdXBHUEdQdWJsaWNLZXk6IG92YzIuZ3BnUHViS2V5LFxuICAgIH0pO1xuICAgIGFzc2VydChrZXkua2V5U2hhcmVzKTtcbiAgICBhc3NlcnQoa2V5LmNvbW1vbktleWNoYWluKTtcbiAgICBhc3NlcnQoa2V5LndhbGxldEhTTUdQR1B1YmxpY0tleVNpZ3MpO1xuXG4gICAgY29uc3QgYml0Z29Ub1VzZXJTaGFyZSA9IGtleS5rZXlTaGFyZXMuZmluZChcbiAgICAgICh2YWx1ZTogeyBmcm9tOiBzdHJpbmc7IHRvOiBzdHJpbmcgfSkgPT4gdmFsdWUuZnJvbSA9PT0gJ2JpdGdvJyAmJiB2YWx1ZS50byA9PT0gJ3VzZXInXG4gICAgKTtcbiAgICBhc3NlcnQoYml0Z29Ub1VzZXJTaGFyZSk7XG4gICAgYXNzZXJ0KGJpdGdvVG9Vc2VyU2hhcmUudnNzUHJvb2YpO1xuICAgIGFzc2VydChiaXRnb1RvVXNlclNoYXJlLnBhaWxsaWVyUHVibGljS2V5KTtcbiAgICBjb25zdCBiaXRnb1RvQmFja3VwU2hhcmUgPSBrZXkua2V5U2hhcmVzLmZpbmQoXG4gICAgICAodmFsdWU6IHsgZnJvbTogc3RyaW5nOyB0bzogc3RyaW5nIH0pID0+IHZhbHVlLmZyb20gPT09ICdiaXRnbycgJiYgdmFsdWUudG8gPT09ICdiYWNrdXAnXG4gICAgKTtcbiAgICBhc3NlcnQoYml0Z29Ub0JhY2t1cFNoYXJlKTtcbiAgICBhc3NlcnQoYml0Z29Ub0JhY2t1cFNoYXJlLnZzc1Byb29mKTtcbiAgICBhc3NlcnQoYml0Z29Ub0JhY2t1cFNoYXJlLnBhaWxsaWVyUHVibGljS2V5KTtcblxuICAgIC8vIENyZWF0ZSBKU09OIGRhdGEgd2l0aCBwbGF0Zm9ybSBzaGFyZXMgZm9yIE9WQy0xIGFuZCBPVkMtMlxuICAgIGNvbnN0IGJpdGdvVG9PdmNPdXRwdXQ6IEJpdEdvVG9PdmNKU09OID0ge1xuICAgICAgd2FsbGV0OiB7XG4gICAgICAgIC4uLmRlY29kZWRPdmNPdXRwdXQsXG4gICAgICAgIHBsYXRmb3JtOiB7XG4gICAgICAgICAgY29tbW9uS2V5Y2hhaW46IGtleS5jb21tb25LZXljaGFpbixcbiAgICAgICAgICB3YWxsZXRHcGdQdWJLZXlTaWdzOiBrZXkud2FsbGV0SFNNR1BHUHVibGljS2V5U2lncyxcbiAgICAgICAgICBvdmM6IHtcbiAgICAgICAgICAgIC8vIEJpdEdvIHRvIFVzZXIgKE9WQy0xKVxuICAgICAgICAgICAgMToge1xuICAgICAgICAgICAgICBiaXRnb1RvT3ZjU2hhcmU6IHtcbiAgICAgICAgICAgICAgICBpOiAxLFxuICAgICAgICAgICAgICAgIGo6IDMsXG4gICAgICAgICAgICAgICAgcHVibGljU2hhcmU6IGJpdGdvVG9Vc2VyU2hhcmUucHVibGljU2hhcmUsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZVNoYXJlOiBiaXRnb1RvVXNlclNoYXJlLnByaXZhdGVTaGFyZSxcbiAgICAgICAgICAgICAgICBwYWlsbGllclB1YmxpY0tleTogYml0Z29Ub1VzZXJTaGFyZS5wYWlsbGllclB1YmxpY0tleSxcbiAgICAgICAgICAgICAgICB2c3NQcm9vZjogYml0Z29Ub1VzZXJTaGFyZS52c3NQcm9vZixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyBCaXRHbyB0byBCYWNrdXAgKE9WQy0yKVxuICAgICAgICAgICAgMjoge1xuICAgICAgICAgICAgICBiaXRnb1RvT3ZjU2hhcmU6IHtcbiAgICAgICAgICAgICAgICBpOiAyLFxuICAgICAgICAgICAgICAgIGo6IDMsXG4gICAgICAgICAgICAgICAgcHVibGljU2hhcmU6IGJpdGdvVG9CYWNrdXBTaGFyZS5wdWJsaWNTaGFyZSxcbiAgICAgICAgICAgICAgICBwcml2YXRlU2hhcmU6IGJpdGdvVG9CYWNrdXBTaGFyZS5wcml2YXRlU2hhcmUsXG4gICAgICAgICAgICAgICAgcGFpbGxpZXJQdWJsaWNLZXk6IGJpdGdvVG9CYWNrdXBTaGFyZS5wYWlsbGllclB1YmxpY0tleSxcbiAgICAgICAgICAgICAgICB2c3NQcm9vZjogYml0Z29Ub0JhY2t1cFNoYXJlLnZzc1Byb29mLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgLy8gTWFyayBpdCByZWFkeSBmb3IgbmV4dCBvcGVyYXRpb24sIHNob3VsZCBiZSAyXG4gICAgYml0Z29Ub092Y091dHB1dC53YWxsZXQuc3RhdGUgKz0gMTtcblxuICAgIGNvbnN0IG91dHB1dDogQml0R29LZXlGcm9tT3ZjU2hhcmVzID0ge1xuICAgICAgYml0R29LZXlJZDoga2V5LmlkLFxuICAgICAgYml0R29PdXRwdXRKc29uRm9yT3ZjOiBiaXRnb1RvT3ZjT3V0cHV0LFxuICAgIH07XG5cbiAgICByZXR1cm4gZGVjb2RlT3JFbHNlKEJpdEdvS2V5RnJvbU92Y1NoYXJlcy5uYW1lLCBCaXRHb0tleUZyb21PdmNTaGFyZXMsIG91dHB1dCwgKGVycm9ycykgPT4ge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBwcm9kdWNpbmcgdGhlIG91dHB1dDogJHtlcnJvcnN9YCk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
621
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Y2hhaW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2JpdGdvL2tleWNoYWluL2tleWNoYWlucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSxvREFBNEI7QUFDNUIsMENBQTRCO0FBQzVCLHFEQUF1QztBQUd2QyxzQ0FBNEQ7QUFDNUQscUVBSXFDO0FBQ3JDLG9DQUF1RztBQW1CdkcsaURBQXVGO0FBR3ZGLE1BQWEsU0FBUztJQUlwQixZQUFZLEtBQWdCLEVBQUUsUUFBbUI7UUFDL0MsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDM0IsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQTBCO1FBQ2xDLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBRTFELElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUM3QixNQUFNLElBQUksS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDeEMsQ0FBQztRQUVELE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDckIsSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUMsQ0FBQztRQUNELE9BQU8sTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEdBQUcsa0JBQWtCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxD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O1FBRUQsT0FBTyxJQUFJLENBQUMsS0FBSzthQUNkLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2FBQzNDLElBQUksQ0FBQztZQUNKLFlBQVk7WUFDWixHQUFHO1lBQ0gsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO1NBQ3BCLENBQUM7YUFDRCxNQUFNLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsY0FBYyxDQUFDLFFBQWtCO1FBQ3RDLE9BQU8sQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3JGLENBQUM7Q0FDRjtBQXBvQkQsOEJBb29CQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRzc1NldHRpbmdzIH0gZnJvbSAnQGJpdGdvL3B1YmxpYy10eXBlcyc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgKiBhcyBjb21tb24gZnJvbSAnLi4vLi4vY29tbW9uJztcbmltcG9ydCB7IElCYXNlQ29pbiwgS2V5Y2hhaW5zVHJpcGxldCwgS2V5UGFpciB9IGZyb20gJy4uL2Jhc2VDb2luJztcbmltcG9ydCB7IEJpdEdvQmFzZSB9IGZyb20gJy4uL2JpdGdvQmFzZSc7XG5pbXBvcnQgeyBTYWZlTXBjQ2VyZW1vbnlVbnN1cHBvcnRlZEVycm9yIH0gZnJvbSAnLi4vZXJyb3JzJztcbmltcG9ydCB7XG4gIGVuY29kZURlcml2YWJsZUVkMjU1MTlQdWIsXG4gIGdlbmVyYXRlRWQyNTUxOUNoYWluQ29kZUJhc2UzMixcbiAgaXNWYWxpZEVkMjU1MTlTdHJLZXlQdWJsaWNLZXksXG59IGZyb20gJy4uL3NhZmUvZGVyaXZhYmxlRWQyNTUxOVB1Yic7XG5pbXBvcnQgeyBkZWNvZGVPckVsc2UsIEVDRFNBVXRpbHMsIEVERFNBVXRpbHMsIGdlbmVyYXRlUmFuZG9tUGFzc3dvcmQsIFJlcXVlc3RUcmFjZXIgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQge1xuICBBZGRLZXljaGFpbk9wdGlvbnMsXG4gIEFwaUtleVNoYXJlLFxuICBDaGFuZ2VkS2V5Y2hhaW5zLFxuICBDcmVhdGVCYWNrdXBPcHRpb25zLFxuICBDcmVhdGVCaXRHb09wdGlvbnMsXG4gIENyZWF0ZU1wY09wdGlvbnMsXG4gIEdldEtleWNoYWluT3B0aW9ucyxcbiAgR2V0S2V5c0ZvclNpZ25pbmdPcHRpb25zLFxuICBJS2V5Y2hhaW5zLFxuICBLZXljaGFpbixcbiAgTGlzdEtleWNoYWluT3B0aW9ucyxcbiAgTGlzdEtleWNoYWluc1Jlc3VsdCxcbiAgUmVjcmVhdGVNcGNPcHRpb25zLFxuICBSb3RhdGVLZXljaGFpbk9wdGlvbnMsXG4gIFVwZGF0ZVBhc3N3b3JkT3B0aW9ucyxcbiAgVXBkYXRlU2luZ2xlS2V5Y2hhaW5QYXNzd29yZE9wdGlvbnMsXG59IGZyb20gJy4vaUtleWNoYWlucyc7XG5pbXBvcnQgeyBCaXRHb0tleUZyb21PdmNTaGFyZXMsIEJpdEdvVG9PdmNKU09OLCBPdmNUb0JpdEdvSlNPTiB9IGZyb20gJy4vb3ZjSnNvbkNvZGVjJztcbmltcG9ydCB7IEVuY3J5cHRpb25WZXJzaW9uLCBJRW5jcnlwdGlvblNlc3Npb24gfSBmcm9tICcuLi8uLi9hcGknO1xuXG5leHBvcnQgY2xhc3MgS2V5Y2hhaW5zIGltcGxlbWVudHMgSUtleWNoYWlucyB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYml0Z286IEJpdEdvQmFzZTtcbiAgcHJpdmF0ZSByZWFkb25seSBiYXNlQ29pbjogSUJhc2VDb2luO1xuXG4gIGNvbnN0cnVjdG9yKGJpdGdvOiBCaXRHb0Jhc2UsIGJhc2VDb2luOiBJQmFzZUNvaW4pIHtcbiAgICB0aGlzLmJpdGdvID0gYml0Z287XG4gICAgdGhpcy5iYXNlQ29pbiA9IGJhc2VDb2luO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhIGtleWNoYWluIGJ5IElEXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHBhcmFtIHBhcmFtcy5pZFxuICAgKiBAcGFyYW0gcGFyYW1zLnhwdWIgKG9wdGlvbmFsKVxuICAgKiBAcGFyYW0gcGFyYW1zLmV0aEFkZHJlc3MgKG9wdGlvbmFsKVxuICAgKiBAcGFyYW0gcGFyYW1zLnJlcUlkIChvcHRpb25hbClcbiAgICovXG4gIGFzeW5jIGdldChwYXJhbXM6IEdldEtleWNoYWluT3B0aW9ucyk6IFByb21pc2U8S2V5Y2hhaW4+IHtcbiAgICBjb21tb24udmFsaWRhdGVQYXJhbXMocGFyYW1zLCBbXSwgWyd4cHViJywgJ2V0aEFkZHJlc3MnXSk7XG5cbiAgICBpZiAoXy5pc1VuZGVmaW5lZChwYXJhbXMuaWQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2lkIG11c3QgYmUgZGVmaW5lZCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGlkID0gcGFyYW1zLmlkO1xuICAgIGlmIChwYXJhbXMucmVxSWQpIHtcbiAgICAgIHRoaXMuYml0Z28uc2V0UmVxdWVzdFRyYWNlcihwYXJhbXMucmVxSWQpO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5iaXRnby5nZXQodGhpcy5iYXNlQ29pbi51cmwoJy9rZXkvJyArIGVuY29kZVVSSUNvbXBvbmVudChpZCkpKS5yZXN1bHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBsaXN0IHRoZSB1c2VycyBrZXljaGFpbnNcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcGFyYW0gcGFyYW1zLmxpbWl0IC0gTWF4IG51bWJlciBvZiByZXN1bHRzIGluIGEgc2luZ2xlIGNhbGwuXG4gICAqIEBwYXJhbSBwYXJhbXMucHJldklkIC0gQ29udGludWUgaXRlcmF0aW5nIChwcm92aWRlZCBieSBuZXh0QmF0Y2hQcmV2SWQgaW4gdGhlIHByZXZpb3VzIGxpc3QpXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgYXN5bmMgbGlzdChwYXJhbXM6IExpc3RLZXljaGFpbk9wdGlvbnMgPSB7fSk6IFByb21pc2U8TGlzdEtleWNoYWluc1Jlc3VsdD4ge1xuICAgIGNvbnN0IHF1ZXJ5T2JqZWN0OiBhbnkgPSB7fTtcblxuICAgIGlmICghXy5pc1VuZGVmaW5lZChwYXJhbXMubGltaXQpKSB7XG4gICAgICBpZiAoIV8uaXNOdW1iZXIocGFyYW1zLmxpbWl0KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgbGltaXQgYXJndW1lbnQsIGV4cGVjdGluZyBudW1iZXInKTtcbiAgICAgIH1cbiAgICAgIHF1ZXJ5T2JqZWN0LmxpbWl0ID0gcGFyYW1zLmxpbWl0O1xuICAgIH1cbiAgICBpZiAoIV8uaXNVbmRlZmluZWQocGFyYW1zLnByZXZJZCkpIHtcbiAgICAgIGlmICghXy5pc1N0cmluZyhwYXJhbXMucHJldklkKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcHJldklkIGFyZ3VtZW50LCBleHBlY3Rpbmcgc3RyaW5nJyk7XG4gICAgICB9XG4gICAgICBxdWVyeU9iamVjdC5wcmV2SWQgPSBwYXJhbXMucHJldklkO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmJpdGdvLmdldCh0aGlzLmJhc2VDb2luLnVybCgnL2tleScpKS5xdWVyeShxdWVyeU9iamVjdCkucmVzdWx0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hhbmdlIHRoZSBkZWNyeXB0aW9uIHBhc3N3b3JkIGZvciBhbGwgcG9zc2libGUga2V5Y2hhaW5zIGFzc29jaWF0ZWQgd2l0aCBhIHVzZXIuXG4gICAqXG4gICAqIFRoaXMgZnVuY3Rpb24gaXRlcmF0ZXMgdGhyb3VnaCBhbGwga2V5cyBhc3NvY2lhdGVkIHdpdGggdGhlIHVzZXIsIGRlY3J5cHRzXG4gICAqIHRoZW0gd2l0aCB0aGUgb2xkIHBhc3N3b3JkIGFuZCByZS1lbmNyeXB0cyB0aGVtIHdpdGggdGhlIG5ldyBwYXNzd29yZC5cbiAgICpcbiAgICogVGhpcyBzaG91bGQgYmUgY2FsbGVkIHdoZW4gYSB1c2VyIGNoYW5nZXMgdGhlaXIgbG9naW4gcGFzc3dvcmQsIGFuZCBhcmUgZXhwZWN0aW5nXG4gICAqIHRoYXQgdGhlaXIgd2FsbGV0IHBhc3N3b3JkcyBhcmUgY2hhbmdlZCB0byBtYXRjaCB0aGUgbmV3IGxvZ2luIHBhc3N3b3JkLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEBwYXJhbSBwYXJhbXMub2xkUGFzc3dvcmQgLSBUaGUgb2xkIHBhc3N3b3JkIHVzZWQgZm9yIGVuY3J5cHRpbmcgdGhlIGtleVxuICAgKiBAcGFyYW0gcGFyYW1zLm5ld1Bhc3N3b3JkIC0gVGhlIG5ldyBwYXNzd29yZCB0byBiZSB1c2VkIGZvciBlbmNyeXB0aW5nIHRoZSBrZXlcbiAgICogQHJldHVybnMgY2hhbmdlZEtleXMgT2JqZWN0IC0gZS5nLjpcbiAgICogIHtcbiAgICogICAgeHB1YjE6IGVuY3J5cHRlZFBydixcbiAgICogICAgLi4uXG4gICAqICB9XG4gICAqL1xuICBhc3luYyB1cGRhdGVQYXNzd29yZChwYXJhbXM6IFVwZGF0ZVBhc3N3b3JkT3B0aW9ucyk6IFByb21pc2U8Q2hhbmdlZEtleWNoYWlucz4ge1xuICAgIGNvbW1vbi52YWxpZGF0ZVBhcmFtcyhwYXJhbXMsIFsnb2xkUGFzc3dvcmQnLCAnbmV3UGFzc3dvcmQnXSwgW10pO1xuICAgIGNvbnN0IGNoYW5nZWRLZXlzOiBDaGFuZ2VkS2V5Y2hhaW5zID0ge307XG4gICAgbGV0IHByZXZJZDtcbiAgICBsZXQga2V5c0xlZnQgPSB0cnVlO1xuICAgIHdoaWxlIChrZXlzTGVmdCkge1xuICAgICAgY29uc3QgcmVzdWx0OiBMaXN0S2V5Y2hhaW5zUmVzdWx0ID0gYXdhaXQgdGhpcy5saXN0KHsgbGltaXQ6IDUwMCwgcHJldklkIH0pO1xuICAgICAgZm9yIChjb25zdCBrZXkgb2YgcmVzdWx0LmtleXMpIHtcbiAgICAgICAgY29uc3Qgb2xkRW5jcnlwdGVkUHJ2ID0ga2V5LmVuY3J5cHRlZFBydjtcbiAgICAgICAgaWYgKF8uaXNVbmRlZmluZWQob2xkRW5jcnlwdGVkUHJ2KSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgdXBkYXRlZEtleWNoYWluID0gYXdhaXQgdGhpcy51cGRhdGVTaW5nbGVLZXljaGFpblBhc3N3b3JkKHtcbiAgICAgICAgICAgIGtleWNoYWluOiBrZXksXG4gICAgICAgICAgICBvbGRQYXNzd29yZDogcGFyYW1zLm9sZFBhc3N3b3JkLFxuICAgICAgICAgICAgbmV3UGFzc3dvcmQ6IHBhcmFtcy5uZXdQYXNzd29yZCxcbiAgICAgICAgICAgIGVuY3J5cHRpb25WZXJzaW9uOiBwYXJhbXMuZW5jcnlwdGlvblZlcnNpb24sXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKHVwZGF0ZWRLZXljaGFpbi5lbmNyeXB0ZWRQcnYpIHtcbiAgICAgICAgICAgIC8vIEJvdGggVFNTIGFuZCBtdWx0aS11c2VyLW9mYyBrZXlzIGhhdmUgbXVsdGlwbGUgcHVibGljIGtleXMgaW4gdGhlaXIga2V5IGRvY3VtZW50IGFuZCB0aHVzIG5lZWQgdG8gdXNlIG9iamVjdElEXG4gICAgICAgICAgICBjb25zdCBjaGFuZ2VkS2V5SWRlbnRpZmllciA9XG4gICAgICAgICAgICAgIHVwZGF0ZWRLZXljaGFpbi50eXBlID09PSAndHNzJyB8fCBLZXljaGFpbnMuaXNNdWx0aVVzZXJLZXkodXBkYXRlZEtleWNoYWluKVxuICAgICAgICAgICAgICAgID8gdXBkYXRlZEtleWNoYWluLmlkXG4gICAgICAgICAgICAgICAgOiB1cGRhdGVkS2V5Y2hhaW4ucHViO1xuICAgICAgICAgICAgaWYgKGNoYW5nZWRLZXlJZGVudGlmaWVyKSB7XG4gICAgICAgICAgICAgIGNoYW5nZWRLZXlzW2NoYW5nZWRLZXlJZGVudGlmaWVyXSA9IHVwZGF0ZWRLZXljaGFpbi5lbmNyeXB0ZWRQcnY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgLy8gaWYgdGhlIHBhc3N3b3JkIHdhcyBpbmNvcnJlY3QsIHNpbGVuY2UgdGhlIGVycm9yLCB0aHJvdyBvdGhlcndpc2UuXG4gICAgICAgICAgLy8gdXBkYXRlU2luZ2xlS2V5Y2hhaW5QYXNzd29yZCB3cmFwcyBhIHdyb25nLXBhc3N3b3JkIChvciBjb3JydXB0IGlucHV0KSBmYWlsdXJlIGFzXG4gICAgICAgICAgLy8gJ2ZhaWxlZCB0byB1cGRhdGUga2V5Y2hhaW4gcGFzc3dvcmQ6IC4uLicsIHNvIHRyZWF0IHRoYXQgYXMgYSBza2lwLWFibGUgZXJyb3IuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIWUubWVzc2FnZS5pbmNsdWRlcygncHJpdmF0ZSBrZXkgaXMgaW5jb3JyZWN0JykgJiZcbiAgICAgICAgICAgICFlLm1lc3NhZ2UuaW5jbHVkZXMoJ2ZhaWxlZCB0byB1cGRhdGUga2V5Y2hhaW4gcGFzc3dvcmQnKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChyZXN1bHQubmV4dEJhdGNoUHJldklkKSB7XG4gICAgICAgIHByZXZJZCA9IHJlc3VsdC5uZXh0QmF0Y2hQcmV2SWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBrZXlzTGVmdCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY2hhbmdlZEtleXM7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIHRoZSBlbmNyeXB0aW9uIHZlcnNpb24gb2YgYSBjaXBoZXJ0ZXh0IGJ5IGluc3BlY3RpbmcgaXRzIFwidlwiIGZpZWxkLlxuICAgKiAgIC0gdjEgKFNKQ0wgLyBQQktERjItU0hBMjU2ICsgQUVTLTI1Ni1DQ00pOiBcInZcIiBhYnNlbnQgb3IgZXhwbGljaXRseSAxXG4gICAqICAgLSB2MiAoQXJnb24yaWQgKyBBRVMtMjU2LUdDTSk6IFwidlwiID09PSAyXG4gICAqIFRocm93cyBvbiB1bnJlY29nbml6ZWQgdmFsdWVzIHNvIGNhbGxlcnMgY2Fubm90IHNpbGVudGx5IG1pcy1oYW5kbGUgdW5rbm93biBlbnZlbG9wZXMuXG4gICAqL1xuICBnZXRFbmNyeXB0aW9uVmVyc2lvbihjaXBoZXJ0ZXh0OiBzdHJpbmcpOiBFbmNyeXB0aW9uVmVyc2lvbiB7XG4gICAgbGV0IGVudmVsb3BlOiB7IHY/OiB1bmtub3duIH07XG4gICAgdHJ5IHtcbiAgICAgIGVudmVsb3BlID0gSlNPTi5wYXJzZShjaXBoZXJ0ZXh0KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBwYXJzZSBjaXBoZXJ0ZXh0IGVudmVsb3BlOiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuICAgIH1cbiAgICBpZiAoZW52ZWxvcGUudiA9PT0gMikge1xuICAgICAgcmV0dXJuIDI7XG4gICAgfVxuICAgIGlmIChlbnZlbG9wZS52ID09PSB1bmRlZmluZWQgfHwgZW52ZWxvcGUudiA9PT0gMSkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgVW5yZWNvZ25pemVkIGVuY3J5cHRpb24gdmVyc2lvbjogJHtTdHJpbmcoZW52ZWxvcGUudil9YCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSBwYXNzd29yZCB1c2VkIHRvIGRlY3J5cHQgYSBzaW5nbGUga2V5Y2hhaW4uIERlZmF1bHRzIHRvIHByZXNlcnZpbmcgdGhlXG4gICAqIHNvdXJjZSBlbnZlbG9wZSB2ZXJzaW9uICh2MSBzdGF5cyB2MSwgdjIgc3RheXMgdjIpLCBzbyB0aGlzIGlzIGEgbm8tb3Agd2l0aCByZXNwZWN0IHRvXG4gICAqIGVuY3J5cHRpb24gdmVyc2lvbiB1bmxlc3MgdGhlIGNhbGxlciBvcHRzIGluLiBQYXNzIGBlbmNyeXB0aW9uVmVyc2lvbjogMmAgdG8gZXhwbGljaXRseVxuICAgKiB1cGdyYWRlIGEgdjEgKFNKQ0wpIGtleWNoYWluIHRvIHYyIChBcmdvbjJpZCArIEFFUy0yNTYtR0NNKSBhcyBwYXJ0IG9mIHRoZSBwYXNzd29yZCBjaGFuZ2VcbiAgICogKGUuZy4gb25jZSBhIGNhbGxlciBpcyByZWFkeSwgYWZ0ZXIgdGhlIFNlcHQgMTUgYnJlYWtpbmctY2hhbmdlIHdpbmRvdyBjbG9zZXMpLlxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEBwYXJhbSBwYXJhbXMua2V5Y2hhaW4gLSBUaGUga2V5Y2hhaW4gd2hvc2UgcGFzc3dvcmQgc2hvdWxkIGJlIHVwZGF0ZWRcbiAgICogQHBhcmFtIHBhcmFtcy5vbGRQYXNzd29yZCAtIFRoZSBvbGQgcGFzc3dvcmQgdXNlZCBmb3IgZW5jcnlwdGluZyB0aGUga2V5XG4gICAqIEBwYXJhbSBwYXJhbXMubmV3UGFzc3dvcmQgLSBUaGUgbmV3IHBhc3N3b3JkIHRvIGJlIHVzZWQgZm9yIGVuY3J5cHRpbmcgdGhlIGtleVxuICAgKiBAcGFyYW0gcGFyYW1zLmVuY3J5cHRpb25WZXJzaW9uIC0gT3B0aW9uYWwgZW52ZWxvcGUgdmVyc2lvbiB0byBlbWl0OyBkZWZhdWx0cyB0byB0aGUgc291cmNlIGVudmVsb3BlJ3MgdmVyc2lvblxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxLZXljaGFpbj59XG4gICAqL1xuICBhc3luYyB1cGRhdGVTaW5nbGVLZXljaGFpblBhc3N3b3JkKHBhcmFtczogVXBkYXRlU2luZ2xlS2V5Y2hhaW5QYXNzd29yZE9wdGlvbnMgPSB7fSk6IFByb21pc2U8S2V5Y2hhaW4+IHtcbiAgICBpZiAoIV8uaXNTdHJpbmcocGFyYW1zLm9sZFBhc3N3b3JkKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdleHBlY3RlZCBvbGQgcGFzc3dvcmQgdG8gYmUgYSBzdHJpbmcnKTtcbiAgICB9XG5cbiAgICBpZiAoIV8uaXNTdHJpbmcocGFyYW1zLm5ld1Bhc3N3b3JkKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdleHBlY3RlZCBuZXcgcGFzc3dvcmQgdG8gYmUgYSBzdHJpbmcnKTtcbiAgICB9XG5cbiAgICBpZiAoIV8uaXNPYmplY3QocGFyYW1zLmtleWNoYWluKSB8fCAhXy5pc1N0cmluZyhwYXJhbXMua2V5Y2hhaW4uZW5jcnlwdGVkUHJ2KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdleHBlY3RlZCBrZXljaGFpbiB0byBiZSBhbiBvYmplY3Qgd2l0aCBhbiBlbmNyeXB0ZWRQcnYgcHJvcGVydHknKTtcbiAgICB9XG5cbiAgICBjb25zdCBvbGRFbmNyeXB0ZWRQcnYgPSBwYXJhbXMua2V5Y2hhaW4uZW5jcnlwdGVkUHJ2O1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkZWNyeXB0ZWRQcnYgPSBhd2FpdCB0aGlzLmJpdGdvLmRlY3J5cHQoeyBpbnB1dDogb2xkRW5jcnlwdGVkUHJ2LCBwYXNzd29yZDogcGFyYW1zLm9sZFBhc3N3b3JkIH0pO1xuICAgICAgY29uc3QgbmV3RW5jcnlwdGVkUHJ2ID0gYXdhaXQgdGhpcy5iaXRnby5lbmNyeXB0KHtcbiAgICAgICAgaW5wdXQ6IGRlY3J5cHRlZFBydixcbiAgICAgICAgcGFzc3dvcmQ6IHBhcmFtcy5uZXdQYXNzd29yZCxcbiAgICAgICAgZW5jcnlwdGlvblZlcnNpb246IHBhcmFtcy5lbmNyeXB0aW9uVmVyc2lvbiA/PyB0aGlzLmdldEVuY3J5cHRpb25WZXJzaW9uKG9sZEVuY3J5cHRlZFBydiksXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBfLmFzc2lnbih7fSwgcGFyYW1zLmtleWNoYWluLCB7IGVuY3J5cHRlZFBydjogbmV3RW5jcnlwdGVkUHJ2IH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGNhdGNoaW5nIGFuIGVycm9yIGhlcmUgbWVhbnMgdGhhdCB0aGUgcGFzc3dvcmQgd2FzIGluY29ycmVjdCBvciwgbGVzcyBsaWtlbHksIHRoZSBpbnB1dCB0byBkZWNyeXB0IGlzIGNvcnJ1cHRlZFxuICAgICAgY29uc3QgZXJyb3JEZXRhaWwgPSBlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGZhaWxlZCB0byB1cGRhdGUga2V5Y2hhaW4gcGFzc3dvcmQ6ICR7ZXJyb3JEZXRhaWx9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERlY3J5cHQgYW4gZW5jcnlwdGVkIHByaXZhdGUga2V5IHdpdGggYHBhc3NwaHJhc2VgIGFuZCByZS1lbmNyeXB0IGl0IGFzIGEgdjJcbiAgICogKEFyZ29uMmlkICsgQUVTLTI1Ni1HQ00pIGVudmVsb3BlIHdpdGggdGhlIHNhbWUgcGFzc3BocmFzZS5cbiAgICpcbiAgICogVXNlZCB0byB1cGdyYWRlIGxlZ2FjeSB2MSAoU0pDTCkgZW52ZWxvcGVzIHRvIHYyIHdpdGhvdXQgY2hhbmdpbmcgdGhlIHBhc3NwaHJhc2UuXG4gICAqIENhbGxlcnMgdGhhdCBuZWVkIHRvIHRyeSBhIGZhbGxiYWNrIHBhc3NwaHJhc2UgKGUuZy4gYW4gb3JpZ2luYWwgcGFzc3BocmFzZSBmcm9tXG4gICAqIGJlZm9yZSBhIHBhc3N3b3JkIHJvdGF0aW9uKSBzaG91bGQgaGFuZGxlIHRoYXQgdGhlbXNlbHZlcyDigJQgdGhpcyBwcmltaXRpdmUgZG9lcyBvbmVcbiAgICogdGhpbmcgYW5kIGxldHMgZGVjcnlwdGlvbiBlcnJvcnMgc3VyZmFjZSBkaXJlY3RseS5cbiAgICovXG4gIGFzeW5jIHJlZW5jcnlwdEFzVjIoZW5jcnlwdGVkUHJ2OiBzdHJpbmcsIHBhc3NwaHJhc2U6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgcHJ2ID0gYXdhaXQgdGhpcy5iaXRnby5kZWNyeXB0KHsgaW5wdXQ6IGVuY3J5cHRlZFBydiwgcGFzc3dvcmQ6IHBhc3NwaHJhc2UgfSk7XG4gICAgcmV0dXJuIHRoaXMuYml0Z28uZW5jcnlwdCh7IGlucHV0OiBwcnYsIHBhc3N3b3JkOiBwYXNzcGhyYXNlLCBlbmNyeXB0aW9uVmVyc2lvbjogMiB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBwdWJsaWMvcHJpdmF0ZSBrZXkgcGFpclxuICAgKiBAcGFyYW0gcGFyYW1zIC0gb3B0aW9uYWwgcGFyYW1zXG4gICAqIEBwYXJhbSBwYXJhbXMuc2VlZCBvcHRpb25hbCAtIHNlZWQgdG8gdXNlIGZvciBrZXlwYWlyIGdlbmVyYXRpb25cbiAgICogQHBhcmFtIHBhcmFtcy5pc1Jvb3RLZXkgb3B0aW9uYWwgLSB3aGV0aGVyIHRoZSByZXN1bHRpbmcga2V5cGFpciBzaG91bGQgYmUgYSByb290IGtleVxuICAgKiBAcmV0dXJucyB7S2V5UGFpcn0gLSB0aGUgZ2VuZXJhdGVkIGtleXBhaXJcbiAgICovXG4gIGNyZWF0ZShwYXJhbXM6IHsgc2VlZD86IEJ1ZmZlcjsgaXNSb290S2V5PzogYm9vbGVhbiB9ID0ge30pOiBLZXlQYWlyIHtcbiAgICBpZiAocGFyYW1zPy5pc1Jvb3RLZXkpIHtcbiAgICAgIHJldHVybiB0aGlzLmJhc2VDb2luLmdlbmVyYXRlUm9vdEtleVBhaXIocGFyYW1zLnNlZWQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5iYXNlQ29pbi5nZW5lcmF0ZUtleVBhaXIocGFyYW1zLnNlZWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIGtleWNoYWluIHRvIEJpdEdvJ3MgcmVjb3Jkc1xuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqL1xuICBhc3luYyBhZGQocGFyYW1zOiBBZGRLZXljaGFpbk9wdGlvbnMgPSB7fSk6IFByb21pc2U8S2V5Y2hhaW4+IHtcbiAgICBwYXJhbXMgPSBwYXJhbXMgfHwge307XG4gICAgY29tbW9uLnZhbGlkYXRlUGFyYW1zKFxuICAgICAgcGFyYW1zLFxuICAgICAgW10sXG4gICAgICBbXG4gICAgICAgICdwdWInLFxuICAgICAgICAnZW5jcnlwdGVkUHJ2JyxcbiAgICAgICAgJ2tleVR5cGUnLFxuICAgICAgICAndHlwZScsXG4gICAgICAgICdzb3VyY2UnLFxuICAgICAgICAnb3JpZ2luYWxQYXNzY29kZUVuY3J5cHRpb25Db2RlJyxcbiAgICAgICAgJ2VudGVycHJpc2UnLFxuICAgICAgICAnZGVyaXZlZEZyb21QYXJlbnRXaXRoU2VlZCcsXG4gICAgICAgICdkZXJpdmVkRnJvbVBhcmVudFdpdGhIYXJkZW5lZFBhdGgnLFxuICAgICAgICAncGFyZW50JyxcbiAgICAgICAgJ3NhZmVJZCcsXG4gICAgICBdXG4gICAgKTtcblxuICAgIGlmICghXy5pc1VuZGVmaW5lZChwYXJhbXMuZGlzYWJsZUtSU0VtYWlsKSkge1xuICAgICAgaWYgKCFfLmlzQm9vbGVhbihwYXJhbXMuZGlzYWJsZUtSU0VtYWlsKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgZGlzYWJsZUtSU0VtYWlsIGFyZ3VtZW50LCBleHBlY3RpbmcgYm9vbGVhbicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwYXJhbXMucmVxSWQpIHtcbiAgICAgIHRoaXMuYml0Z28uc2V0UmVxdWVzdFRyYWNlcihwYXJhbXMucmVxSWQpO1xuICAgIH1cblxuICAgIHJldHVybiBhd2FpdCB0aGlzLmJpdGdvXG4gICAgICAucG9zdCh0aGlzLmJhc2VDb2luLnVybCgnL2tleScpKVxuICAgICAgLnNlbmQoe1xuICAgICAgICBwdWI6IHBhcmFtcy5wdWIsXG4gICAgICAgIGNvbW1vblB1YjogcGFyYW1zLmNvbW1vblB1YixcbiAgICAgICAgY29tbW9uS2V5Y2hhaW46IHBhcmFtcy5jb21tb25LZXljaGFpbixcbiAgICAgICAgZW5jcnlwdGVkUHJ2OiBwYXJhbXMuZW5jcnlwdGVkUHJ2LFxuICAgICAgICB0eXBlOiBwYXJhbXMudHlwZSxcbiAgICAgICAga2V5VHlwZTogcGFyYW1zLmtleVR5cGUsXG4gICAgICAgIHNvdXJjZTogcGFyYW1zLnNvdXJjZSxcbiAgICAgICAgcHJvdmlkZXI6IHBhcmFtcy5wcm92aWRlcixcbiAgICAgICAgb3JpZ2luYWxQYXNzY29kZUVuY3J5cHRpb25Db2RlOiBwYXJhbXMub3JpZ2luYWxQYXNzY29kZUVuY3J5cHRpb25Db2RlLFxuICAgICAgICBlbnRlcnByaXNlOiBwYXJhbXMuZW50ZXJwcmlzZSxcbiAgICAgICAgZGVyaXZlZEZyb21QYXJlbnRXaXRoU2VlZDogcGFyYW1zLmRlcml2ZWRGcm9tUGFyZW50V2l0aFNlZWQsXG4gICAgICAgIGRlcml2ZWRGcm9tUGFyZW50V2l0aEhhcmRlbmVkUGF0aDogcGFyYW1zLmRlcml2ZWRGcm9tUGFyZW50V2l0aEhhcmRlbmVkUGF0aCxcbiAgICAgICAgcGFyZW50OiBwYXJhbXMucGFyZW50LFxuICAgICAgICBkaXNhYmxlS1JTRW1haWw6IHBhcmFtcy5kaXNhYmxlS1JTRW1haWwsXG4gICAgICAgIGtyc1NwZWNpZmljOiBwYXJhbXMua3JzU3BlY2lmaWMsXG4gICAgICAgIGtleVNoYXJlczogcGFyYW1zLmtleVNoYXJlcyxcbiAgICAgICAgdXNlckdQR1B1YmxpY0tleTogcGFyYW1zLnVzZXJHUEdQdWJsaWNLZXksXG4gICAgICAgIGJhY2t1cEdQR1B1YmxpY0tleTogcGFyYW1zLmJhY2t1cEdQR1B1YmxpY0tleSxcbiAgICAgICAgYWxnb1VzZWQ6IHBhcmFtcy5hbGdvVXNlZCxcbiAgICAgICAgaXNEaXN0cmlidXRlZEN1c3RvZHk6IHBhcmFtcy5pc0Rpc3RyaWJ1dGVkQ3VzdG9keSxcbiAgICAgICAgaXNNUEN2MjogcGFyYW1zLmlzTVBDdjIsXG4gICAgICAgIGNvaW5TcGVjaWZpYzogcGFyYW1zLmNvaW5TcGVjaWZpYyxcbiAgICAgICAgd2ViYXV0aG5EZXZpY2VzOiBwYXJhbXMud2ViYXV0aG5EZXZpY2VzLFxuICAgICAgICB3ZWJhdXRobkluZm86IHBhcmFtcy53ZWJhdXRobkluZm8sXG4gICAgICAgIHNhZmVJZDogcGFyYW1zLnNhZmVJZCxcbiAgICAgIH0pXG4gICAgICAucmVzdWx0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgQml0R28ga2V5XG4gICAqIEBwYXJhbSBwYXJhbXMgKGVtcHR5KVxuICAgKi9cbiAgYXN5bmMgY3JlYXRlQml0R28ocGFyYW1zOiBDcmVhdGVCaXRHb09wdGlvbnMgPSB7fSk6IFByb21pc2U8S2V5Y2hhaW4+IHtcbiAgICBwYXJhbXMuc291cmNlID0gJ2JpdGdvJztcblxuICAgIHRoaXMuYmFzZUNvaW4ucHJlQ3JlYXRlQml0R28ocGFyYW1zIGFzIGFueSk7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYWRkKHBhcmFtcyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgYmFja3VwIGtleVxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEBwYXJhbSBwYXJhbXMucHJvdmlkZXIgKG9wdGlvbmFsKVxuICAgKi9cbiAgYXN5bmMgY3JlYXRlQmFja3VwKHBhcmFtczogQ3JlYXRlQmFja3VwT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxLZXljaGFpbj4ge1xuICAgIHBhcmFtcy5zb3VyY2UgPSAnYmFja3VwJztcblxuICAgIGNvbnN0IGlzVHNzQmFja3VwS2V5ID0gcGFyYW1zLnBydiAmJiAocGFyYW1zLmNvbW1vbktleWNoYWluIHx8IHBhcmFtcy5jb21tb25QdWIpO1xuXG4gICAgaWYgKF8uaXNVbmRlZmluZWQocGFyYW1zLnByb3ZpZGVyKSAmJiAhaXNUc3NCYWNrdXBLZXkpIHtcbiAgICAgIC8vIGlmIHRoZSBwcm92aWRlciBpcyB1bmRlZmluZWQsIHdlIGdlbmVyYXRlIGEgbG9jYWwga2V5IGFuZCBhZGQgdGhlIHNvdXJjZSBkZXRhaWxzXG4gICAgICBjb25zdCBrZXkgPSB0aGlzLmNyZWF0ZSgpO1xuICAgICAgXy5leHRlbmQocGFyYW1zLCBrZXkpO1xuICAgICAgaWYgKHBhcmFtcy5wYXNzcGhyYXNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgXy5leHRlbmQocGFyYW1zLCB7XG4gICAgICAgICAgZW5jcnlwdGVkUHJ2OiBhd2FpdCB0aGlzLmJpdGdvLmVuY3J5cHQoe1xuICAgICAgICAgICAgaW5wdXQ6IGtleS5wcnYsXG4gICAgICAgICAgICBwYXNzd29yZDogcGFyYW1zLnBhc3NwaHJhc2UsXG4gICAgICAgICAgICBlbmNyeXB0aW9uVmVyc2lvbjogcGFyYW1zLmVuY3J5cHRpb25WZXJzaW9uLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBXYWxsZXQgU2FmZXMgdjEgc2xvdCDikaMgKGBlZDI1NTE5TXVsdGlzaWdgKTogbWFrZSB0aGUgYmFja3VwIHJvb3Qgc29mdC1kZXJpdmFibGUgYnkgZm9sZGluZyBhXG4gICAgLy8gZnJlc2ggY2hhaW4gY29kZSBpbnRvIGBwdWJgLiBOb3RoaW5nIGVsc2Ugb24gdGhlIHdpcmUgY2hhbmdlcyDigJQgdGhlIGNoYWluIGNvZGUgaGFzIG5vIGZpZWxkIG9mXG4gICAgLy8gaXRzIG93biwgYW5kIGNhbGxlcnMgcmVjb3ZlciBpdCB3aXRoIGBkZWNvZGVEZXJpdmFibGVFZDI1NTE5UHViYCBvbiB0aGUgcmV0dXJuZWQgcHViLlxuICAgIC8vXG4gICAgLy8gVGhlIHNsb3QgaXMgaWRlbnRpZmllZCBmcm9tIHRoZSBnZW5lcmF0ZWQgcHViIGl0c2VsZjogYHNhZmVJZGAgbWFya3MgaXQgYXMgYSBzYWZlIHJvb3QsIGFuZCBhXG4gICAgLy8gU3RyS2V5IGVkMjU1MTkgcHViIG5hcnJvd3MgaXQgdG8gc2xvdCDikaMuIFRoYXQgaXMgZXhhY3Qg4oCUIHNsb3Qg4pGgIHJvb3RzIGFyZSBzZWNwMjU2azEgKGFuIHhwdWIsXG4gICAgLy8gd2hpY2ggYWxyZWFkeSBjYXJyaWVzIGl0cyBvd24gY2hhaW4gY29kZSkgYW5kIHNsb3RzIOKRoeKRoiBhcmUgTVBDLCB3aGljaCBydW4gdGhyb3VnaCBgY3JlYXRlTXBjYFxuICAgIC8vIGFuZCBuZXZlciByZWFjaCBoZXJlLlxuICAgIGNvbnN0IHdpdGhLZXkgPSBwYXJhbXMgYXMgQ3JlYXRlQmFja3VwT3B0aW9ucyAmIHsgcHViPzogc3RyaW5nIH07XG4gICAgaWYgKHBhcmFtcy5zYWZlSWQgIT09IHVuZGVmaW5lZCAmJiB3aXRoS2V5LnB1YiAhPT0gdW5kZWZpbmVkICYmIGlzVmFsaWRFZDI1NTE5U3RyS2V5UHVibGljS2V5KHdpdGhLZXkucHViKSkge1xuICAgICAgd2l0aEtleS5wdWIgPSBlbmNvZGVEZXJpdmFibGVFZDI1NTE5UHViKHdpdGhLZXkucHViLCBnZW5lcmF0ZUVkMjU1MTlDaGFpbkNvZGVCYXNlMzIoKSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2VydmVyUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmFkZChwYXJhbXMpO1xuICAgIHJldHVybiBfLmV4dGVuZCh7fSwgc2VydmVyUmVzcG9uc2UsIF8ucGljayhwYXJhbXMsIFsncHJ2JywgJ2VuY3J5cHRlZFBydicsICdwcm92aWRlcicsICdzb3VyY2UnXSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMga2V5cyBmb3Igc2lnbmluZyBmcm9tIGEgd2FsbGV0XG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHJldHVybnMge1Byb21pc2U8S2V5Y2hhaW5bXT59XG4gICAqL1xuICBhc3luYyBnZXRLZXlzRm9yU2lnbmluZyhwYXJhbXM6IEdldEtleXNGb3JTaWduaW5nT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxLZXljaGFpbltdPiB7XG4gICAgaWYgKCFfLmlzT2JqZWN0KHBhcmFtcy53YWxsZXQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgcGFyYW0gd2FsbGV0Jyk7XG4gICAgfVxuICAgIGNvbnN0IHdhbGxldCA9IHBhcmFtcy53YWxsZXQ7XG4gICAgY29uc3QgcmVxSWQgPSBwYXJhbXMucmVxSWQgfHwgbmV3IFJlcXVlc3RUcmFjZXIoKTtcbiAgICBjb25zdCBpZHMgPSB3YWxsZXQuYmFzZUNvaW4ua2V5SWRzRm9yU2lnbmluZygpO1xuICAgIGNvbnN0IGtleWNoYWluUXVlcmllc0JsdWViaXJkcyA9IGlkcy5tYXAoKGlkKSA9PiB0aGlzLmdldCh7IGlkOiB3YWxsZXQua2V5SWRzKClbaWRdLCByZXFJZCB9KSk7XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKGtleWNoYWluUXVlcmllc0JsdWViaXJkcyk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVuaWVuY2UgZnVuY3Rpb24gdG8gY3JlYXRlIGFuZCBzdG9yZSBNUEMga2V5Y2hhaW5zIHdpdGggQml0R28uXG4gICAqIEBwYXJhbSBwYXJhbXMgcGFzc3BocmFzZSB1c2VkIHRvIGVuY3J5cHQgc2VjcmV0IG1hdGVyaWFsc1xuICAgKiBAcmV0dXJuIHtQcm9taXNlPEtleWNoYWluc1RyaXBsZXQ+fSBuZXdseSBjcmVhdGVkIFVzZXIsIEJhY2t1cCwgYW5kIEJpdEdvIGtleXNcbiAgICovXG4gIGFzeW5jIGNyZWF0ZU1wYyhwYXJhbXM6IENyZWF0ZU1wY09wdGlvbnMpOiBQcm9taXNlPEtleWNoYWluc1RyaXBsZXQ+IHtcbiAgICBpZiAocGFyYW1zLm11bHRpc2lnVHlwZSAhPT0gJ3RzcycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgbXVsdGktc2lnIHR5cGUnKTtcbiAgICB9XG5cbiAgICBjb25zdCB0c3NTZXR0aW5nczogVHNzU2V0dGluZ3MgPSBhd2FpdCB0aGlzLmJpdGdvXG4gICAgICAuZ2V0KHRoaXMuYml0Z28ubWljcm9zZXJ2aWNlc1VybCgnL2FwaS92Mi90c3Mvc2V0dGluZ3MnKSlcbiAgICAgIC5xdWVyeSh7IGVudGVycHJpc2U6IHBhcmFtcy5lbnRlcnByaXNlIH0pXG4gICAgICAucmVzdWx0KCk7XG4gICAgY29uc3QgbXVsdGlzaWdUeXBlVmVyc2lvbiA9XG4gICAgICB0c3NTZXR0aW5ncy5jb2luU2V0dGluZ3NbdGhpcy5iYXNlQ29pbi5nZXRGYW1pbHkoKV0/LndhbGxldENyZWF0aW9uU2V0dGluZ3M/Lm11bHRpU2lnVHlwZVZlcnNpb247XG5cbiAgICBjb25zdCBpc01QQ3YyID0gbXVsdGlzaWdUeXBlVmVyc2lvbiA9PT0gJ01QQ3YyJztcbiAgICBpZiAocGFyYW1zLnNhZmVJZCAmJiAhaXNNUEN2Mikge1xuICAgICAgLy8gVGhlIGxlZ2FjeSBNUEN2MSBjZXJlbW9uaWVzIGFjY2VwdCBhIHNhZmVJZCBmb3Igc2lnbmF0dXJlIGNvbXBhdGliaWxpdHkgYnV0IHNpbGVudGx5XG4gICAgICAvLyBpZ25vcmUgaXQgKHNlZSBFRERTQVV0aWxzLmRlZmF1bHQuY3JlYXRlS2V5Y2hhaW5zIC8gRUNEU0FVdGlscy5FY2RzYVV0aWxzLmNyZWF0ZUtleWNoYWlucyksXG4gICAgICAvLyBzbyB0aGUgcmVzdWx0aW5nIGtleXMgbmV2ZXIgZ2V0IHRhZ2dlZCB3aXRoIHRoZSBzYWZlIGFuZCBXUCdzIGZpbmFsaXplIHN0ZXAgcmVqZWN0cyB0aGVtXG4gICAgICAvLyB3aXRoIGEgZ2VuZXJpYyA0MDAuIEZhaWwgZmFzdCBoZXJlIGluc3RlYWQgb2YgbGV0dGluZyB0aGF0IGNvbmZ1c2luZyBlcnJvciBzdXJmYWNlIGxhdGVyLlxuICAgICAgdGhyb3cgbmV3IFNhZmVNcGNDZXJlbW9ueVVuc3VwcG9ydGVkRXJyb3IodGhpcy5iYXNlQ29pbi5nZXRGYW1pbHkoKSk7XG4gICAgfVxuXG4gICAgbGV0IE1wY1V0aWxzO1xuICAgIGlmICh0aGlzLmJhc2VDb2luLmdldE1QQ0FsZ29yaXRobSgpID09PSAnZWRkc2EnKSB7XG4gICAgICBNcGNVdGlscyA9IGlzTVBDdjIgPyBFRERTQVV0aWxzLkVkZHNhTVBDdjJVdGlscyA6IEVERFNBVXRpbHMuZGVmYXVsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgTXBjVXRpbHMgPSBpc01QQ3YyID8gRUNEU0FVdGlscy5FY2RzYU1QQ3YyVXRpbHMgOiBFQ0RTQVV0aWxzLkVjZHNhVXRpbHM7XG4gICAgfVxuXG4gICAgY29uc3QgbXBjVXRpbHMgPSBuZXcgTXBjVXRpbHModGhpcy5iaXRnbywgdGhpcy5iYXNlQ29pbik7XG4gICAgcmV0dXJuIGF3YWl0IG1wY1V0aWxzLmNyZWF0ZUtleWNoYWlucyh7XG4gICAgICBwYXNzcGhyYXNlOiBwYXJhbXMucGFzc3BocmFzZSxcbiAgICAgIGVudGVycHJpc2U6IHBhcmFtcy5lbnRlcnByaXNlLFxuICAgICAgb3JpZ2luYWxQYXNzY29kZUVuY3J5cHRpb25Db2RlOiBwYXJhbXMub3JpZ2luYWxQYXNzY29kZUVuY3J5cHRpb25Db2RlLFxuICAgICAgcmV0cm9maXQ6IHBhcmFtcy5yZXRyb2ZpdCxcbiAgICAgIHdlYmF1dGhuSW5mbzogcGFyYW1zLndlYmF1dGhuSW5mbyxcbiAgICAgIGVuY3J5cHRpb25WZXJzaW9uOiBwYXJhbXMuZW5jcnlwdGlvblZlcnNpb24sXG4gICAgICBzYWZlSWQ6IHBhcmFtcy5zYWZlSWQsXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyByZWNyZWF0ZU1wYyhwYXJhbXM6IFJlY3JlYXRlTXBjT3B0aW9ucyk6IFByb21pc2U8S2V5Y2hhaW5zVHJpcGxldD4ge1xuICAgIGFzc2VydChwYXJhbXMuY29pbiwgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIHBhcmFtIGNvaW4nKSk7XG4gICAgYXNzZXJ0KHBhcmFtcy53YWxsZXRJZCwgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIHBhcmFtIHdhbGxldElkJykpO1xuICAgIGFzc2VydChwYXJhbXMub3RwLCBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgcGFyYW0gb3RwJykpO1xuICAgIGFzc2VydChwYXJhbXMucGFzc3BocmFzZSwgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIHBhcmFtIHBhc3NwaHJhc2UnKSk7XG5cbiAgICBhc3NlcnQoXG4gICAgICBwYXJhbXMuZW5jcnlwdGVkTWF0ZXJpYWwuZW5jcnlwdGVkV2FsbGV0UGFzc3BocmFzZSxcbiAgICAgIG5ldyBFcnJvcignbWlzc2luZyByZXF1aXJlZCBwYXJhbSBlbmNyeXB0ZWRXYWxsZXRQYXNzcGhyYXNlJylcbiAgICApO1xuICAgIGFzc2VydChwYXJhbXMuZW5jcnlwdGVkTWF0ZXJpYWwuZW5jcnlwdGVkVXNlcktleSwgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIHBhcmFtIGVuY3J5cHRlZFVzZXJLZXknKSk7XG4gICAgYXNzZXJ0KHBhcmFtcy5lbmNyeXB0ZWRNYXRlcmlhbC5lbmNyeXB0ZWRCYWNrdXBLZXksIG5ldyBFcnJvcignbWlzc2luZyByZXF1aXJlZCBwYXJhbSBlbmNyeXB0ZWRCYWNrdXBLZXknKSk7XG5cbiAgICBhd2FpdCB0aGlzLmJpdGdvLnBvc3QodGhpcy5iaXRnby5taWNyb3NlcnZpY2VzVXJsKCcvYXBpL3YxL3VzZXIvdW5sb2NrJykpLnNlbmQoeyBvdHA6IHBhcmFtcy5vdHAgfSkucmVzdWx0KCk7XG4gICAgY29uc3QgeyByZWNvdmVyeUluZm8gfSA9IGF3YWl0IHRoaXMuYml0Z29cbiAgICAgIC5wb3N0KHRoaXMuYml0Z28ubWljcm9zZXJ2aWNlc1VybChgL2FwaS92Mi8ke3BhcmFtcy5jb2lufS93YWxsZXQvJHtwYXJhbXMud2FsbGV0SWR9L3Bhc3Njb2RlcmVjb3ZlcnlgKSlcbiAgICAgIC5yZXN1bHQoKTtcblxuICAgIGlmICghcmVjb3ZlcnlJbmZvIHx8ICEoJ3Bhc3Njb2RlRW5jcnlwdGlvbkNvZGUnIGluIHJlY292ZXJ5SW5mbykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZmFpbGVkIHRvIGdldCByZWNvdmVyeSBpbmZvJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZGVjcnlwdGVkV2FsbGV0UGFzc3BocmFzZSA9IGF3YWl0IHRoaXMuYml0Z28uZGVjcnlwdCh7XG4gICAgICBpbnB1dDogcGFyYW1zLmVuY3J5cHRlZE1hdGVyaWFsLmVuY3J5cHRlZFdhbGxldFBhc3NwaHJhc2UsXG4gICAgICBwYXNzd29yZDogcmVjb3ZlcnlJbmZvLnBhc3Njb2RlRW5jcnlwdGlvbkNvZGUsXG4gICAgfSk7XG5cbiAgICBjb25zdCBkZWNyeXB0ZWRVc2VyS2V5ID0gYXdhaXQgdGhpcy5iaXRnby5kZWNyeXB0KHtcbiAgICAgIGlucHV0OiBwYXJhbXMuZW5jcnlwdGVkTWF0ZXJpYWwuZW5jcnlwdGVkVXNlcktleSxcbiAgICAgIHBhc3N3b3JkOiBkZWNyeXB0ZWRXYWxsZXRQYXNzcGhyYXNlLFxuICAgIH0pO1xuXG4gICAgY29uc3QgZGVjcnlwdGVkQmFja3VwS2V5ID0gYXdhaXQgdGhpcy5iaXRnby5kZWNyeXB0KHtcbiAgICAgIGlucHV0OiBwYXJhbXMuZW5jcnlwdGVkTWF0ZXJpYWwuZW5jcnlwdGVkQmFja3VwS2V5LFxuICAgICAgcGFzc3dvcmQ6IGRlY3J5cHRlZFdhbGxldFBhc3NwaHJhc2UsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5jcmVhdGVNcGMoe1xuICAgICAgLi4ucGFyYW1zLFxuICAgICAgbXVsdGlzaWdUeXBlOiAndHNzJyxcbiAgICAgIHJldHJvZml0OiB7XG4gICAgICAgIGRlY3J5cHRlZFVzZXJLZXksXG4gICAgICAgIGRlY3J5cHRlZEJhY2t1cEtleSxcbiAgICAgICAgd2FsbGV0SWQ6IHBhcmFtcy53YWxsZXRJZCxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSXQgcGFyc2VzIHRoZSBKU09OIGRvd25sb2FkZWQgZnJvbSB0aGUgT1ZDIGZvciBwbGF0Zm9ybSAoQml0R28pLFxuICAgKiBhbmQgY3JlYXRlcyBhIGNvcnJlc3BvbmRpbmcgVFNTIEJpdEdvIGtleS4gSXQgYWxzbyByZXR1cm5zIHRoZSBKU09OIHRoYXQgbmVlZHNcbiAgICogdG8gYmUgdXBsb2FkZWQgYmFjayB0byB0aGUgT1ZDcyBjb250YWluaW5nIHRoZSBCaXRHbyAtPiBPVkMgc2hhcmVzLlxuICAgKiBAcGFyYW0gb3ZjT3V0cHV0SnNvbiBKU09OIGZvcm1hdCBvZiB0aGUgZmlsZSBkb3dubG9hZGVkIGZyb20gdGhlIE9WQyBmb3IgcGxhdGZvcm1cbiAgICogQHBhcmFtIGVudGVycHJpc2UgT3B0aW9uYWwgZW50ZXJwcmlzZSBJRCBhc3NvY2lhdGVkIHdpdGggdGhlIGtleVxuICAgKiBAcmV0dXJucyB7Qml0R29LZXlGcm9tT3ZjU2hhcmVzfVxuICAgKi9cbiAgYXN5bmMgY3JlYXRlVHNzQml0R29LZXlGcm9tT3ZjU2hhcmVzKG92Y091dHB1dEpzb246IHVua25vd24sIGVudGVycHJpc2U/OiBzdHJpbmcpOiBQcm9taXNlPEJpdEdvS2V5RnJvbU92Y1NoYXJlcz4ge1xuICAgIGNvbnN0IGRlY29kZWRPdmNPdXRwdXQgPSBkZWNvZGVPckVsc2UoT3ZjVG9CaXRHb0pTT04ubmFtZSwgT3ZjVG9CaXRHb0pTT04sIG92Y091dHB1dEpzb24sIChlcnJvcnMpID0+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3IocykgcGFyc2luZyBPVkMgSlNPTjogJHtlcnJvcnN9YCk7XG4gICAgfSk7XG5cbiAgICBpZiAoZGVjb2RlZE92Y091dHB1dC5zdGF0ZSAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdGF0ZSBleHBlY3RlZCB0byBiZSBcIjFcIi4gUGxlYXNlIGNvbXBsZXRlIHRoZSBmaXJzdCB0d28gT1ZDIG9wZXJhdGlvbnMnKTtcbiAgICB9XG5cbiAgICAvLyBPVkMtMSBpcyByZXNwb25zaWJsZSBmb3IgdGhlIFVzZXIga2V5XG4gICAgY29uc3Qgb3ZjMSA9IGRlY29kZWRPdmNPdXRwdXQub3ZjWzFdO1xuICAgIC8vIE9WQy0yIGlzIHJlc3BvbnNpYmxlIGZvciB0aGUgQmFja3VwIGtleVxuICAgIGNvbnN0IG92YzIgPSBkZWNvZGVkT3ZjT3V0cHV0Lm92Y1syXTtcblxuICAgIGNvbnN0IGtleVNoYXJlczogQXBpS2V5U2hhcmVbXSA9IFtcbiAgICAgIHtcbiAgICAgICAgZnJvbTogJ3VzZXInLFxuICAgICAgICB0bzogJ2JpdGdvJyxcbiAgICAgICAgcHVibGljU2hhcmU6IG92YzEub3ZjVG9CaXRnb1NoYXJlLnB1YmxpY1NoYXJlLFxuICAgICAgICBwcml2YXRlU2hhcmU6IG92YzEub3ZjVG9CaXRnb1NoYXJlLnByaXZhdGVTaGFyZSxcbiAgICAgICAgcHJpdmF0ZVNoYXJlUHJvb2Y6IG92YzEub3ZjVG9CaXRnb1NoYXJlLnVTaWcudG9TdHJpbmcoKSA/PyAnJyxcbiAgICAgICAgdnNzUHJvb2Y6IG92YzEub3ZjVG9CaXRnb1NoYXJlLnZzc1Byb29mID8/ICcnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZnJvbTogJ2JhY2t1cCcsXG4gICAgICAgIHRvOiAnYml0Z28nLFxuICAgICAgICBwdWJsaWNTaGFyZTogb3ZjMi5vdmNUb0JpdGdvU2hhcmUucHVibGljU2hhcmUsXG4gICAgICAgIHByaXZhdGVTaGFyZTogb3ZjMi5vdmNUb0JpdGdvU2hhcmUucHJpdmF0ZVNoYXJlLFxuICAgICAgICBwcml2YXRlU2hhcmVQcm9vZjogb3ZjMi5vdmNUb0JpdGdvU2hhcmUudVNpZy50b1N0cmluZygpID8/ICcnLFxuICAgICAgICB2c3NQcm9vZjogb3ZjMi5vdmNUb0JpdGdvU2hhcmUudnNzUHJvb2YgPz8gJycsXG4gICAgICB9LFxuICAgIF07XG5cbiAgICBjb25zdCBrZXkgPSBhd2FpdCB0aGlzLmJhc2VDb2luLmtleWNoYWlucygpLmFkZCh7XG4gICAgICBzb3VyY2U6ICdiaXRnbycsXG4gICAgICBrZXlTaGFyZXMsXG4gICAgICBrZXlUeXBlOiAndHNzJyxcbiAgICAgIHVzZXJHUEdQdWJsaWNLZXk6IG92YzEuZ3BnUHViS2V5LFxuICAgICAgYmFja3VwR1BHUHVibGljS2V5OiBvdmMyLmdwZ1B1YktleSxcbiAgICAgIGVudGVycHJpc2UsXG4gICAgfSk7XG4gICAgYXNzZXJ0KGtleS5rZXlTaGFyZXMpO1xuICAgIGFzc2VydChrZXkuY29tbW9uS2V5Y2hhaW4pO1xuICAgIGFzc2VydChrZXkud2FsbGV0SFNNR1BHUHVibGljS2V5U2lncyk7XG5cbiAgICBjb25zdCBiaXRnb1RvVXNlclNoYXJlID0ga2V5LmtleVNoYXJlcy5maW5kKFxuICAgICAgKHZhbHVlOiB7IGZyb206IHN0cmluZzsgdG86IHN0cmluZyB9KSA9PiB2YWx1ZS5mcm9tID09PSAnYml0Z28nICYmIHZhbHVlLnRvID09PSAndXNlcidcbiAgICApO1xuICAgIGFzc2VydChiaXRnb1RvVXNlclNoYXJlKTtcbiAgICBhc3NlcnQoYml0Z29Ub1VzZXJTaGFyZS52c3NQcm9vZik7XG4gICAgYXNzZXJ0KGJpdGdvVG9Vc2VyU2hhcmUucGFpbGxpZXJQdWJsaWNLZXkpO1xuICAgIGNvbnN0IGJpdGdvVG9CYWNrdXBTaGFyZSA9IGtleS5rZXlTaGFyZXMuZmluZChcbiAgICAgICh2YWx1ZTogeyBmcm9tOiBzdHJpbmc7IHRvOiBzdHJpbmcgfSkgPT4gdmFsdWUuZnJvbSA9PT0gJ2JpdGdvJyAmJiB2YWx1ZS50byA9PT0gJ2JhY2t1cCdcbiAgICApO1xuICAgIGFzc2VydChiaXRnb1RvQmFja3VwU2hhcmUpO1xuICAgIGFzc2VydChiaXRnb1RvQmFja3VwU2hhcmUudnNzUHJvb2YpO1xuICAgIGFzc2VydChiaXRnb1RvQmFja3VwU2hhcmUucGFpbGxpZXJQdWJsaWNLZXkpO1xuXG4gICAgLy8gQ3JlYXRlIEpTT04gZGF0YSB3aXRoIHBsYXRmb3JtIHNoYXJlcyBmb3IgT1ZDLTEgYW5kIE9WQy0yXG4gICAgY29uc3QgYml0Z29Ub092Y091dHB1dDogQml0R29Ub092Y0pTT04gPSB7XG4gICAgICB3YWxsZXQ6IHtcbiAgICAgICAgLi4uZGVjb2RlZE92Y091dHB1dCxcbiAgICAgICAgcGxhdGZvcm06IHtcbiAgICAgICAgICBjb21tb25LZXljaGFpbjoga2V5LmNvbW1vbktleWNoYWluLFxuICAgICAgICAgIHdhbGxldEdwZ1B1YktleVNpZ3M6IGtleS53YWxsZXRIU01HUEdQdWJsaWNLZXlTaWdzLFxuICAgICAgICAgIG92Yzoge1xuICAgICAgICAgICAgLy8gQml0R28gdG8gVXNlciAoT1ZDLTEpXG4gICAgICAgICAgICAxOiB7XG4gICAgICAgICAgICAgIGJpdGdvVG9PdmNTaGFyZToge1xuICAgICAgICAgICAgICAgIGk6IDEsXG4gICAgICAgICAgICAgICAgajogMyxcbiAgICAgICAgICAgICAgICBwdWJsaWNTaGFyZTogYml0Z29Ub1VzZXJTaGFyZS5wdWJsaWNTaGFyZSxcbiAgICAgICAgICAgICAgICBwcml2YXRlU2hhcmU6IGJpdGdvVG9Vc2VyU2hhcmUucHJpdmF0ZVNoYXJlLFxuICAgICAgICAgICAgICAgIHBhaWxsaWVyUHVibGljS2V5OiBiaXRnb1RvVXNlclNoYXJlLnBhaWxsaWVyUHVibGljS2V5LFxuICAgICAgICAgICAgICAgIHZzc1Byb29mOiBiaXRnb1RvVXNlclNoYXJlLnZzc1Byb29mLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIEJpdEdvIHRvIEJhY2t1cCAoT1ZDLTIpXG4gICAgICAgICAgICAyOiB7XG4gICAgICAgICAgICAgIGJpdGdvVG9PdmNTaGFyZToge1xuICAgICAgICAgICAgICAgIGk6IDIsXG4gICAgICAgICAgICAgICAgajogMyxcbiAgICAgICAgICAgICAgICBwdWJsaWNTaGFyZTogYml0Z29Ub0JhY2t1cFNoYXJlLnB1YmxpY1NoYXJlLFxuICAgICAgICAgICAgICAgIHByaXZhdGVTaGFyZTogYml0Z29Ub0JhY2t1cFNoYXJlLnByaXZhdGVTaGFyZSxcbiAgICAgICAgICAgICAgICBwYWlsbGllclB1YmxpY0tleTogYml0Z29Ub0JhY2t1cFNoYXJlLnBhaWxsaWVyUHVibGljS2V5LFxuICAgICAgICAgICAgICAgIHZzc1Byb29mOiBiaXRnb1RvQmFja3VwU2hhcmUudnNzUHJvb2YsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG5cbiAgICAvLyBNYXJrIGl0IHJlYWR5IGZvciBuZXh0IG9wZXJhdGlvbiwgc2hvdWxkIGJlIDJcbiAgICBiaXRnb1RvT3ZjT3V0cHV0LndhbGxldC5zdGF0ZSArPSAxO1xuXG4gICAgY29uc3Qgb3V0cHV0OiBCaXRHb0tleUZyb21PdmNTaGFyZXMgPSB7XG4gICAgICBiaXRHb0tleUlkOiBrZXkuaWQsXG4gICAgICBiaXRHb091dHB1dEpzb25Gb3JPdmM6IGJpdGdvVG9PdmNPdXRwdXQsXG4gICAgfTtcblxuICAgIHJldHVybiBkZWNvZGVPckVsc2UoQml0R29LZXlGcm9tT3ZjU2hhcmVzLm5hbWUsIEJpdEdvS2V5RnJvbU92Y1NoYXJlcywgb3V0cHV0LCAoZXJyb3JzKSA9PiB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIHByb2R1Y2luZyB0aGUgb3V0cHV0OiAke2Vycm9yc31gKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgdXNlciBrZXljaGFpbiwgZW5jcnlwdCB0aGUgcHJpdmF0ZSBrZXkgd2l0aCB0aGUgd2FsbGV0IHBhc3NwaHJhc2UgYW5kIHN0b3JlIGl0IGluIEJpdEdvLlxuICAgKiBAcGFyYW0gd2FsbGV0UGFzc3BocmFzZVxuICAgKiBAcmV0dXJucyBLZXljaGFpbiBpbmNsdWRpbmcgdGhlIGRlY3J5cHRlZCBwcml2YXRlIGtleVxuICAgKi9cbiAgYXN5bmMgY3JlYXRlVXNlcktleWNoYWluKFxuICAgIHdhbGxldFBhc3NwaHJhc2U6IHN0cmluZyxcbiAgICBlbmNyeXB0aW9uVmVyc2lvbj86IEVuY3J5cHRpb25WZXJzaW9uLFxuICAgIHNlc3Npb24/OiBJRW5jcnlwdGlvblNlc3Npb25cbiAgKTogUHJvbWlzZTxLZXljaGFpbj4ge1xuICAgIGNvbnN0IGtleWNoYWlucyA9IHRoaXMuYmFzZUNvaW4ua2V5Y2hhaW5zKCk7XG4gICAgY29uc3QgbmV3S2V5Y2hhaW4gPSBrZXljaGFpbnMuY3JlYXRlKCk7XG4gICAgY29uc3Qgb3JpZ2luYWxQYXNzY29kZUVuY3J5cHRpb25Db2RlID0gZ2VuZXJhdGVSYW5kb21QYXNzd29yZCg1KTtcblxuICAgIC8vIFdoZW4gYSBzZXNzaW9uIGlzIHRocmVhZGVkIGluICh0eXBpY2FsbHkgZnJvbSBhIGJ1bGsgb3BlcmF0aW9uIHRoYXQgYWxyZWFkeSByYW4gdGhlIEtERlxuICAgIC8vIG9uY2UpLCByZXVzZSBpdCBzbyB0aGlzIGVudmVsb3BlJ3MgQUVTIGtleSBkZXJpdmVzIHZpYSBIS0RGIGluc3RlYWQgb2YgYW5vdGhlciBBcmdvbjIuXG4gICAgY29uc3QgZW5jcnlwdGVkUHJ2ID0gc2Vzc2lvblxuICAgICAgPyBhd2FpdCBzZXNzaW9uLmVuY3J5cHQobmV3S2V5Y2hhaW4ucHJ2KVxuICAgICAgOiBhd2FpdCB0aGlzLmJpdGdvLmVuY3J5cHQoe1xuICAgICAgICAgIHBhc3N3b3JkOiB3YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgICAgIGlucHV0OiBuZXdLZXljaGFpbi5wcnYsXG4gICAgICAgICAgZW5jcnlwdGlvblZlcnNpb24sXG4gICAgICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLihhd2FpdCBrZXljaGFpbnMuYWRkKHtcbiAgICAgICAgZW5jcnlwdGVkUHJ2LFxuICAgICAgICBvcmlnaW5hbFBhc3Njb2RlRW5jcnlwdGlvbkNvZGUsXG4gICAgICAgIHB1YjogbmV3S2V5Y2hhaW4ucHViLFxuICAgICAgICBzb3VyY2U6ICd1c2VyJyxcbiAgICAgIH0pKSxcbiAgICAgIHBydjogbmV3S2V5Y2hhaW4ucHJ2LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUm90YXRlIGFuIG9mYyBtdWx0aS11c2VyLWtleWNoYWluIGJ5IHJlY3JlYXRpbmcgYSBuZXcga2V5cGFpciwgZW5jcnlwdCBpdCB1c2luZyB0aGUgdXNlciBwYXNzd29yZCBhbmQgc2VudCBpdCB0byBXUFxuICAgKiBUaGlzIGlzIG9ubHkgbWVhbnQgdG8gYmUgY2FsbGVkIGJ5IG9mYyBtdWx0aS11c2VyLXdhbGxldCdzIGtleSwgYW5kIHdpbGwgdGhyb3cgaWYgb3RoZXJ3aXNlLlxuICAgKlxuICAgKiBSZXF1aXJlcyAyZmEgYXV0aCBiZWZvcmUgY2FsbGluZy4gQ2FsbCB0aGUgYml0Z28udW5sb2NrKCkgU0RLIG1ldGhvZCB0byB1bmxvY2sgdGhlIHNlc3Npb24gZmlyc3QuXG4gICAqIEBwYXJhbSBwYXJhbXMgcGFyYW1ldGVycyBmb3IgdGhlIHJvdGF0ZSBrZXljaGFpbiBtZXRob2RcbiAgICogQHJldHVybiByb3RhdGVkS2V5Y2hhaW5cbiAgICovXG4gIGFzeW5jIHJvdGF0ZUtleWNoYWluKHBhcmFtczogUm90YXRlS2V5Y2hhaW5PcHRpb25zKTogUHJvbWlzZTxLZXljaGFpbj4ge1xuICAgIGNvbnN0IGtleUNoYWluID0gYXdhaXQgdGhpcy5nZXQoeyBpZDogcGFyYW1zLmlkIH0pO1xuICAgIGlmICghS2V5Y2hhaW5zLmlzTXVsdGlVc2VyS2V5KGtleUNoYWluKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGByb3RhdGVLZXljaGFpbiBpcyBvbmx5IHBlcm1pdHRlZCBmb3Igb2ZjIG11bHRpLXVzZXIta2V5IHdhbGxldGApO1xuICAgIH1cblxuICAgIGxldCBwdWI6IHN0cmluZywgZW5jcnlwdGVkUHJ2OiBzdHJpbmc7XG4gICAgaWYgKCdlbmNyeXB0ZWRQcnYnIGluIHBhcmFtcykge1xuICAgICAgLy8gY2xpZW50IHBhc3NlZCBpbiBwdWIgYW5kIGVuY3J5cHRlZFBydiBkaXJlY3RseVxuICAgICAgcHViID0gcGFyYW1zLnB1YjtcbiAgICAgIGVuY3J5cHRlZFBydiA9IHBhcmFtcy5lbmNyeXB0ZWRQcnY7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGJpdGdvIGdlbmVyYXRlIHB1YiBhbmQgcHJ2IGFuZCBlbmNyeXB0IGl0XG4gICAgICBjb25zdCB7IHB1Yjoga2V5UHViLCBwcnY6IGtleVBydiB9ID0gdGhpcy5jcmVhdGUoKTtcbiAgICAgIGlmICgha2V5UHViKSB7XG4gICAgICAgIHRocm93IEVycm9yKCdFeHBlY3RlZCBhIHB1YmxpYyBrZXkgdG8gYmUgZ2VuZXJhdGVkJyk7XG4gICAgICB9XG4gICAgICBwdWIgPSBrZXlQdWI7XG4gICAgICBlbmNyeXB0ZWRQcnYgPSBhd2FpdCB0aGlzLmJpdGdvLmVuY3J5cHQoe1xuICAgICAgICBpbnB1dDoga2V5UHJ2LFxuICAgICAgICBwYXNzd29yZDogcGFyYW1zLnBhc3N3b3JkLFxuICAgICAgICBlbmNyeXB0aW9uVmVyc2lvbjogcGFyYW1zLmVuY3J5cHRpb25WZXJzaW9uLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYml0Z29cbiAgICAgIC5wdXQodGhpcy5iYXNlQ29pbi51cmwoYC9rZXkvJHtwYXJhbXMuaWR9YCkpXG4gICAgICAuc2VuZCh7XG4gICAgICAgIGVuY3J5cHRlZFBydixcbiAgICAgICAgcHViLFxuICAgICAgICByZXFJZDogcGFyYW1zLnJlcUlkLFxuICAgICAgfSlcbiAgICAgIC5yZXN1bHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGF0aWMgaGVscGVyIG1ldGhvZCB0byBkZXRlcm1pbmUgaWYgYSBrZXljaGFpbiBpcyBhIG9mYyBtdWx0aS11c2VyLWtleVxuICAgKiBAcGFyYW0ga2V5Y2hhaW5cbiAgICovXG4gIHN0YXRpYyBpc011bHRpVXNlcktleShrZXljaGFpbjogS2V5Y2hhaW4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gKGtleWNoYWluLmNvaW5TcGVjaWZpYz8ub2ZjPy5bJ2ZlYXR1cmVzJ10gPz8gW10pLmluY2x1ZGVzKCdtdWx0aS11c2VyLWtleScpO1xuICB9XG59XG4iXX0=
|