@bitgo-beta/sdk-core 8.2.1-beta.198 → 8.2.1-beta.1981

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