@bitgo/sdk-core 1.1.0-rc.1 → 1.1.0-rc.4

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 (283) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/dist/src/account-lib/baseCoin/errors.d.ts +0 -6
  3. package/dist/src/account-lib/baseCoin/errors.d.ts.map +1 -1
  4. package/dist/src/account-lib/baseCoin/errors.js +2 -11
  5. package/dist/src/account-lib/baseCoin/iface.d.ts +2 -9
  6. package/dist/src/account-lib/baseCoin/iface.d.ts.map +1 -1
  7. package/dist/src/account-lib/baseCoin/iface.js +1 -1
  8. package/dist/src/account-lib/index.d.ts +1 -0
  9. package/dist/src/account-lib/index.d.ts.map +1 -1
  10. package/dist/src/account-lib/index.js +2 -1
  11. package/dist/src/account-lib/mpc/curves/baseCurve.d.ts +19 -0
  12. package/dist/src/account-lib/mpc/curves/baseCurve.d.ts.map +1 -0
  13. package/dist/src/account-lib/mpc/curves/baseCurve.js +6 -0
  14. package/dist/src/account-lib/mpc/curves/ed25519.d.ts +17 -0
  15. package/dist/src/account-lib/mpc/curves/ed25519.d.ts.map +1 -0
  16. package/dist/src/account-lib/mpc/curves/ed25519.js +57 -0
  17. package/dist/src/account-lib/mpc/curves/index.d.ts +6 -0
  18. package/dist/src/account-lib/mpc/curves/index.d.ts.map +1 -0
  19. package/dist/src/account-lib/mpc/curves/index.js +8 -0
  20. package/dist/src/account-lib/mpc/curves/secp256k1.d.ts +16 -0
  21. package/dist/src/account-lib/mpc/curves/secp256k1.d.ts.map +1 -0
  22. package/dist/src/account-lib/mpc/curves/secp256k1.js +66 -0
  23. package/dist/src/account-lib/mpc/hdTree.d.ts +24 -0
  24. package/dist/src/account-lib/mpc/hdTree.d.ts.map +1 -0
  25. package/dist/src/account-lib/mpc/hdTree.js +94 -0
  26. package/dist/src/account-lib/mpc/index.d.ts +7 -0
  27. package/dist/src/account-lib/mpc/index.d.ts.map +1 -0
  28. package/dist/src/account-lib/mpc/index.js +23 -0
  29. package/dist/src/account-lib/mpc/shamir.d.ts +26 -0
  30. package/dist/src/account-lib/mpc/shamir.d.ts.map +1 -0
  31. package/dist/src/account-lib/mpc/shamir.js +86 -0
  32. package/dist/src/account-lib/mpc/tss/eddsa/eddsa.d.ts +29 -0
  33. package/dist/src/account-lib/mpc/tss/eddsa/eddsa.d.ts.map +1 -0
  34. package/dist/src/account-lib/mpc/tss/eddsa/eddsa.js +273 -0
  35. package/dist/src/account-lib/mpc/tss/eddsa/index.d.ts +4 -0
  36. package/dist/src/account-lib/mpc/tss/eddsa/index.d.ts.map +1 -0
  37. package/dist/src/account-lib/mpc/tss/eddsa/index.js +30 -0
  38. package/dist/src/account-lib/mpc/tss/eddsa/types.d.ts +70 -0
  39. package/dist/src/account-lib/mpc/tss/eddsa/types.d.ts.map +1 -0
  40. package/dist/src/account-lib/mpc/tss/eddsa/types.js +3 -0
  41. package/dist/src/account-lib/mpc/tss/index.d.ts +5 -0
  42. package/dist/src/account-lib/mpc/tss/index.d.ts.map +1 -0
  43. package/dist/src/account-lib/mpc/tss/index.js +32 -0
  44. package/dist/src/account-lib/mpc/util.d.ts +8 -0
  45. package/dist/src/account-lib/mpc/util.d.ts.map +1 -0
  46. package/dist/src/account-lib/mpc/util.js +42 -0
  47. package/dist/src/api/bip32path.d.ts +24 -0
  48. package/dist/src/api/bip32path.d.ts.map +1 -0
  49. package/dist/src/api/bip32path.js +45 -0
  50. package/dist/src/api/index.d.ts +3 -0
  51. package/dist/src/api/index.d.ts.map +1 -0
  52. package/dist/src/{v2 → api}/index.js +2 -2
  53. package/dist/src/api/types.d.ts +20 -0
  54. package/dist/src/api/types.d.ts.map +1 -0
  55. package/dist/src/api/types.js +3 -0
  56. package/dist/src/bitgo/baseCoin/baseCoin.d.ts +230 -0
  57. package/dist/src/bitgo/baseCoin/baseCoin.d.ts.map +1 -0
  58. package/dist/src/bitgo/baseCoin/baseCoin.js +292 -0
  59. package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts +257 -0
  60. package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts.map +1 -0
  61. package/dist/src/bitgo/baseCoin/iBaseCoin.js +3 -0
  62. package/dist/src/bitgo/baseCoin/index.d.ts +3 -0
  63. package/dist/src/bitgo/baseCoin/index.d.ts.map +1 -0
  64. package/dist/src/bitgo/baseCoin/index.js +15 -0
  65. package/dist/src/bitgo/bip32util.d.ts +17 -0
  66. package/dist/src/bitgo/bip32util.d.ts.map +1 -0
  67. package/dist/src/bitgo/bip32util.js +59 -0
  68. package/dist/src/bitgo/bitcoin.d.ts +16 -0
  69. package/dist/src/bitgo/bitcoin.d.ts.map +1 -0
  70. package/dist/src/bitgo/bitcoin.js +52 -0
  71. package/dist/src/bitgo/bitgoBase.d.ts +22 -0
  72. package/dist/src/bitgo/bitgoBase.d.ts.map +1 -0
  73. package/dist/src/bitgo/bitgoBase.js +3 -0
  74. package/dist/src/bitgo/config.d.ts +8 -0
  75. package/dist/src/bitgo/config.d.ts.map +1 -0
  76. package/dist/src/bitgo/config.js +25 -0
  77. package/dist/src/bitgo/ecdh.d.ts +24 -0
  78. package/dist/src/bitgo/ecdh.d.ts.map +1 -0
  79. package/dist/src/bitgo/ecdh.js +80 -0
  80. package/dist/src/bitgo/enterprise/enterprise.d.ts +64 -0
  81. package/dist/src/bitgo/enterprise/enterprise.d.ts.map +1 -0
  82. package/dist/src/bitgo/enterprise/enterprise.js +120 -0
  83. package/dist/src/bitgo/enterprise/enterprises.d.ts +25 -0
  84. package/dist/src/bitgo/enterprise/enterprises.d.ts.map +1 -0
  85. package/dist/src/bitgo/enterprise/enterprises.js +70 -0
  86. package/dist/src/bitgo/enterprise/iEnterprise.d.ts +15 -0
  87. package/dist/src/bitgo/enterprise/iEnterprise.d.ts.map +1 -0
  88. package/dist/src/bitgo/enterprise/iEnterprise.js +3 -0
  89. package/dist/src/bitgo/enterprise/iEnterprises.d.ts +10 -0
  90. package/dist/src/bitgo/enterprise/iEnterprises.d.ts.map +1 -0
  91. package/dist/src/bitgo/enterprise/iEnterprises.js +3 -0
  92. package/dist/src/bitgo/enterprise/index.d.ts +5 -0
  93. package/dist/src/bitgo/enterprise/index.d.ts.map +1 -0
  94. package/dist/src/bitgo/enterprise/index.js +17 -0
  95. package/dist/src/{v2 → bitgo}/environments.d.ts +0 -0
  96. package/dist/src/bitgo/environments.d.ts.map +1 -0
  97. package/dist/src/bitgo/environments.js +142 -0
  98. package/dist/src/bitgo/errors.d.ts +83 -0
  99. package/dist/src/bitgo/errors.d.ts.map +1 -0
  100. package/dist/src/bitgo/errors.js +163 -0
  101. package/dist/src/bitgo/index.d.ts +25 -0
  102. package/dist/src/bitgo/index.d.ts.map +1 -0
  103. package/dist/src/bitgo/index.js +50 -0
  104. package/dist/src/bitgo/internal/index.d.ts +3 -0
  105. package/dist/src/bitgo/internal/index.d.ts.map +1 -0
  106. package/dist/src/bitgo/internal/index.js +15 -0
  107. package/dist/src/bitgo/internal/internal.d.ts +19 -0
  108. package/dist/src/bitgo/internal/internal.d.ts.map +1 -0
  109. package/dist/src/bitgo/internal/internal.js +33 -0
  110. package/dist/src/bitgo/internal/keycard.d.ts +33 -0
  111. package/dist/src/bitgo/internal/keycard.d.ts.map +1 -0
  112. package/dist/src/bitgo/internal/keycard.js +304 -0
  113. package/dist/src/bitgo/keychain/iKeychains.d.ts +118 -0
  114. package/dist/src/bitgo/keychain/iKeychains.d.ts.map +1 -0
  115. package/dist/src/bitgo/keychain/iKeychains.js +10 -0
  116. package/dist/src/bitgo/keychain/index.d.ts +3 -0
  117. package/dist/src/bitgo/keychain/index.d.ts.map +1 -0
  118. package/dist/src/bitgo/keychain/index.js +15 -0
  119. package/dist/src/bitgo/keychain/keychains.d.ts +90 -0
  120. package/dist/src/bitgo/keychain/keychains.d.ts.map +1 -0
  121. package/dist/src/bitgo/keychain/keychains.js +280 -0
  122. package/dist/src/bitgo/market/iMarkets.d.ts +12 -0
  123. package/dist/src/bitgo/market/iMarkets.d.ts.map +1 -0
  124. package/dist/src/bitgo/market/iMarkets.js +3 -0
  125. package/dist/src/bitgo/market/index.d.ts +3 -0
  126. package/dist/src/bitgo/market/index.d.ts.map +1 -0
  127. package/dist/src/bitgo/market/index.js +15 -0
  128. package/dist/src/bitgo/market/markets.d.ts +29 -0
  129. package/dist/src/bitgo/market/markets.d.ts.map +1 -0
  130. package/dist/src/bitgo/market/markets.js +70 -0
  131. package/dist/src/bitgo/pendingApproval/iPendingApproval.d.ts +73 -0
  132. package/dist/src/bitgo/pendingApproval/iPendingApproval.d.ts.map +1 -0
  133. package/dist/src/bitgo/pendingApproval/iPendingApproval.js +28 -0
  134. package/dist/src/bitgo/pendingApproval/iPendingApprovals.d.ts +16 -0
  135. package/dist/src/bitgo/pendingApproval/iPendingApprovals.d.ts.map +1 -0
  136. package/dist/src/bitgo/pendingApproval/iPendingApprovals.js +3 -0
  137. package/dist/src/bitgo/pendingApproval/index.d.ts +5 -0
  138. package/dist/src/bitgo/pendingApproval/index.d.ts.map +1 -0
  139. package/dist/src/bitgo/pendingApproval/index.js +17 -0
  140. package/dist/src/bitgo/pendingApproval/pendingApproval.d.ts +99 -0
  141. package/dist/src/bitgo/pendingApproval/pendingApproval.d.ts.map +1 -0
  142. package/dist/src/bitgo/pendingApproval/pendingApproval.js +319 -0
  143. package/dist/src/bitgo/pendingApproval/pendingApprovals.d.ts +19 -0
  144. package/dist/src/bitgo/pendingApproval/pendingApprovals.d.ts.map +1 -0
  145. package/dist/src/bitgo/pendingApproval/pendingApprovals.js +76 -0
  146. package/dist/src/bitgo/recovery/index.d.ts +2 -0
  147. package/dist/src/bitgo/recovery/index.d.ts.map +1 -0
  148. package/dist/src/bitgo/recovery/index.js +14 -0
  149. package/dist/src/bitgo/recovery/initiate.d.ts +49 -0
  150. package/dist/src/bitgo/recovery/initiate.d.ts.map +1 -0
  151. package/dist/src/bitgo/recovery/initiate.js +119 -0
  152. package/dist/src/bitgo/trading/affirmation.d.ts +35 -0
  153. package/dist/src/bitgo/trading/affirmation.d.ts.map +1 -0
  154. package/dist/src/bitgo/trading/affirmation.js +53 -0
  155. package/dist/src/bitgo/trading/affirmations.d.ts +23 -0
  156. package/dist/src/bitgo/trading/affirmations.d.ts.map +1 -0
  157. package/dist/src/bitgo/trading/affirmations.js +45 -0
  158. package/dist/src/bitgo/trading/iAffirmation.d.ts +15 -0
  159. package/dist/src/bitgo/trading/iAffirmation.d.ts.map +1 -0
  160. package/dist/src/bitgo/trading/iAffirmation.js +13 -0
  161. package/dist/src/bitgo/trading/iAffirmations.d.ts +10 -0
  162. package/dist/src/bitgo/trading/iAffirmations.d.ts.map +1 -0
  163. package/dist/src/bitgo/trading/iAffirmations.js +3 -0
  164. package/dist/src/bitgo/trading/iSettlement.d.ts +25 -0
  165. package/dist/src/bitgo/trading/iSettlement.d.ts.map +1 -0
  166. package/dist/src/bitgo/trading/iSettlement.js +17 -0
  167. package/dist/src/bitgo/trading/iSettlements.d.ts +19 -0
  168. package/dist/src/bitgo/trading/iSettlements.d.ts.map +1 -0
  169. package/dist/src/bitgo/trading/iSettlements.js +3 -0
  170. package/dist/src/bitgo/trading/iTradingAccount.d.ts +41 -0
  171. package/dist/src/bitgo/trading/iTradingAccount.d.ts.map +1 -0
  172. package/dist/src/bitgo/trading/iTradingAccount.js +3 -0
  173. package/dist/src/bitgo/trading/iTradingPartner.d.ts +14 -0
  174. package/dist/src/bitgo/trading/iTradingPartner.d.ts.map +1 -0
  175. package/dist/src/bitgo/trading/iTradingPartner.js +17 -0
  176. package/dist/src/bitgo/trading/iTradingPartners.d.ts +15 -0
  177. package/dist/src/bitgo/trading/iTradingPartners.d.ts.map +1 -0
  178. package/dist/src/bitgo/trading/iTradingPartners.js +9 -0
  179. package/dist/src/bitgo/trading/index.d.ts +18 -0
  180. package/dist/src/bitgo/trading/index.d.ts.map +1 -0
  181. package/dist/src/bitgo/trading/index.js +30 -0
  182. package/dist/src/bitgo/trading/lock.d.ts +16 -0
  183. package/dist/src/bitgo/trading/lock.d.ts.map +1 -0
  184. package/dist/src/bitgo/trading/lock.js +12 -0
  185. package/dist/src/bitgo/trading/payload.d.ts +22 -0
  186. package/dist/src/bitgo/trading/payload.d.ts.map +1 -0
  187. package/dist/src/bitgo/trading/payload.js +3 -0
  188. package/dist/src/bitgo/trading/settlement.d.ts +16 -0
  189. package/dist/src/bitgo/trading/settlement.d.ts.map +1 -0
  190. package/dist/src/bitgo/trading/settlement.js +21 -0
  191. package/dist/src/bitgo/trading/settlements.d.ts +32 -0
  192. package/dist/src/bitgo/trading/settlements.d.ts.map +1 -0
  193. package/dist/src/bitgo/trading/settlements.js +61 -0
  194. package/dist/src/bitgo/trading/trade.d.ts +29 -0
  195. package/dist/src/bitgo/trading/trade.d.ts.map +1 -0
  196. package/dist/src/bitgo/trading/trade.js +11 -0
  197. package/dist/src/bitgo/trading/tradingAccount.d.ts +53 -0
  198. package/dist/src/bitgo/trading/tradingAccount.d.ts.map +1 -0
  199. package/dist/src/bitgo/trading/tradingAccount.js +127 -0
  200. package/dist/src/bitgo/trading/tradingPartner.d.ts +26 -0
  201. package/dist/src/bitgo/trading/tradingPartner.d.ts.map +1 -0
  202. package/dist/src/bitgo/trading/tradingPartner.js +31 -0
  203. package/dist/src/bitgo/trading/tradingPartners.d.ts +24 -0
  204. package/dist/src/bitgo/trading/tradingPartners.d.ts.map +1 -0
  205. package/dist/src/bitgo/trading/tradingPartners.js +32 -0
  206. package/dist/src/bitgo/tss.d.ts +127 -0
  207. package/dist/src/bitgo/tss.d.ts.map +1 -0
  208. package/dist/src/bitgo/tss.js +261 -0
  209. package/dist/src/bitgo/types.d.ts +4 -0
  210. package/dist/src/bitgo/types.d.ts.map +1 -0
  211. package/dist/src/bitgo/types.js +3 -0
  212. package/dist/src/bitgo/utils/abstractUtxoCoinUtil.d.ts +6 -0
  213. package/dist/src/bitgo/utils/abstractUtxoCoinUtil.d.ts.map +1 -0
  214. package/dist/src/bitgo/utils/abstractUtxoCoinUtil.js +30 -0
  215. package/dist/src/bitgo/utils/blsUtils.d.ts +51 -0
  216. package/dist/src/bitgo/utils/blsUtils.d.ts.map +1 -0
  217. package/dist/src/bitgo/utils/blsUtils.js +166 -0
  218. package/dist/src/bitgo/utils/iBlsUtils.d.ts +14 -0
  219. package/dist/src/bitgo/utils/iBlsUtils.d.ts.map +1 -0
  220. package/dist/src/bitgo/utils/iBlsUtils.js +3 -0
  221. package/dist/src/bitgo/utils/iTssUtils.d.ts +64 -0
  222. package/dist/src/bitgo/utils/iTssUtils.d.ts.map +1 -0
  223. package/dist/src/bitgo/utils/iTssUtils.js +10 -0
  224. package/dist/src/bitgo/utils/index.d.ts +12 -0
  225. package/dist/src/bitgo/utils/index.d.ts.map +1 -0
  226. package/dist/src/bitgo/utils/index.js +37 -0
  227. package/dist/src/bitgo/utils/mpcUtils.d.ts +31 -0
  228. package/dist/src/bitgo/utils/mpcUtils.d.ts.map +1 -0
  229. package/dist/src/bitgo/utils/mpcUtils.js +55 -0
  230. package/dist/src/bitgo/utils/opengpgUtils.d.ts +51 -0
  231. package/dist/src/bitgo/utils/opengpgUtils.d.ts.map +1 -0
  232. package/dist/src/bitgo/utils/opengpgUtils.js +136 -0
  233. package/dist/src/bitgo/utils/promise-utils.d.ts +5 -0
  234. package/dist/src/bitgo/utils/promise-utils.d.ts.map +1 -0
  235. package/dist/src/bitgo/utils/promise-utils.js +12 -0
  236. package/dist/src/bitgo/utils/tssUtils.d.ts +117 -0
  237. package/dist/src/bitgo/utils/tssUtils.d.ts.map +1 -0
  238. package/dist/src/bitgo/utils/tssUtils.js +348 -0
  239. package/dist/src/bitgo/utils/util.d.ts +77 -0
  240. package/dist/src/bitgo/utils/util.d.ts.map +1 -0
  241. package/dist/src/bitgo/utils/util.js +198 -0
  242. package/dist/src/bitgo/wallet/iWallet.d.ts +510 -0
  243. package/dist/src/bitgo/wallet/iWallet.d.ts.map +1 -0
  244. package/dist/src/bitgo/wallet/iWallet.js +3 -0
  245. package/dist/src/bitgo/wallet/iWallets.d.ts +105 -0
  246. package/dist/src/bitgo/wallet/iWallets.d.ts.map +1 -0
  247. package/dist/src/bitgo/wallet/iWallets.js +3 -0
  248. package/dist/src/bitgo/wallet/index.d.ts +5 -0
  249. package/dist/src/bitgo/wallet/index.d.ts.map +1 -0
  250. package/dist/src/bitgo/wallet/index.js +17 -0
  251. package/dist/src/bitgo/wallet/wallet.d.ts +650 -0
  252. package/dist/src/bitgo/wallet/wallet.d.ts.map +1 -0
  253. package/dist/src/bitgo/wallet/wallet.js +2024 -0
  254. package/dist/src/bitgo/wallet/wallets.d.ts +134 -0
  255. package/dist/src/bitgo/wallet/wallets.d.ts.map +1 -0
  256. package/dist/src/bitgo/wallet/wallets.js +605 -0
  257. package/dist/src/bitgo/webhook/iWebhooks.d.ts +26 -0
  258. package/dist/src/bitgo/webhook/iWebhooks.d.ts.map +1 -0
  259. package/dist/src/bitgo/webhook/iWebhooks.js +3 -0
  260. package/dist/src/bitgo/webhook/index.d.ts +3 -0
  261. package/dist/src/bitgo/webhook/index.d.ts.map +1 -0
  262. package/dist/src/bitgo/webhook/index.js +15 -0
  263. package/dist/src/bitgo/webhook/webhooks.d.ts +43 -0
  264. package/dist/src/bitgo/webhook/webhooks.d.ts.map +1 -0
  265. package/dist/src/bitgo/webhook/webhooks.js +102 -0
  266. package/dist/src/bitgojsError.d.ts +4 -0
  267. package/dist/src/bitgojsError.d.ts.map +1 -0
  268. package/dist/src/bitgojsError.js +11 -0
  269. package/dist/src/common.d.ts +1 -1
  270. package/dist/src/common.d.ts.map +1 -1
  271. package/dist/src/common.js +3 -3
  272. package/dist/src/index.d.ts +3 -2
  273. package/dist/src/index.d.ts.map +1 -1
  274. package/dist/src/index.js +5 -5
  275. package/dist/tsconfig.tsbuildinfo +2343 -217
  276. package/package.json +10 -4
  277. package/dist/src/v2/environments.d.ts.map +0 -1
  278. package/dist/src/v2/environments.js +0 -142
  279. package/dist/src/v2/index.d.ts +0 -3
  280. package/dist/src/v2/index.d.ts.map +0 -1
  281. package/dist/src/v2/types.d.ts +0 -2
  282. package/dist/src/v2/types.d.ts.map +0 -1
  283. package/dist/src/v2/types.js +0 -3
@@ -0,0 +1,261 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.sendSignatureShare = exports.getTxRequest = exports.sendUserToBitgoGShare = exports.getBitgoToUserRShare = exports.offerUserToBitgoRShare = exports.createUserToBitGoGShare = exports.createUserSignShare = exports.createCombinedKey = exports.encryptYShare = exports.ShareKeyPosition = void 0;
7
+ const tss_1 = __importDefault(require("../account-lib/mpc/tss"));
8
+ const utils_1 = require("./utils");
9
+ const _ = require("lodash");
10
+ var ShareKeyPosition;
11
+ (function (ShareKeyPosition) {
12
+ ShareKeyPosition[ShareKeyPosition["USER"] = 1] = "USER";
13
+ ShareKeyPosition[ShareKeyPosition["BACKUP"] = 2] = "BACKUP";
14
+ ShareKeyPosition[ShareKeyPosition["BITGO"] = 3] = "BITGO";
15
+ })(ShareKeyPosition = exports.ShareKeyPosition || (exports.ShareKeyPosition = {}));
16
+ /**
17
+ * Prepares a YShare to be exchanged with other key holders.
18
+ * Output is in a format that is usable within BitGo's ecosystem.
19
+ *
20
+ * @param params.keyShare - TSS key share of the party preparing exchange materials
21
+ * @param params.recipientIndex - index of the recipient (1, 2, or 3)
22
+ * @param params.recipientGpgPublicArmor - recipient's public gpg key in armor format
23
+ * @param params.senderGpgPrivateArmor - sender's private gpg key in armor format
24
+ * @returns { EncryptedYShare } encrypted Y Share
25
+ */
26
+ async function encryptYShare(params) {
27
+ const { keyShare, recipientIndex, recipientGpgPublicArmor, senderGpgPrivateArmor } = params;
28
+ const yShare = keyShare.yShares[recipientIndex];
29
+ if (!yShare) {
30
+ throw new Error('Invalid recipient');
31
+ }
32
+ const publicShare = Buffer.concat([
33
+ Buffer.from(keyShare.uShare.y, 'hex'),
34
+ Buffer.from(keyShare.uShare.chaincode, 'hex'),
35
+ ]).toString('hex');
36
+ const privateShare = Buffer.concat([Buffer.from(yShare.u, 'hex'), Buffer.from(yShare.chaincode, 'hex')]).toString('hex');
37
+ const encryptedPrivateShare = await utils_1.encryptAndSignText(privateShare, recipientGpgPublicArmor, senderGpgPrivateArmor);
38
+ return {
39
+ i: yShare.i,
40
+ j: yShare.j,
41
+ publicShare,
42
+ encryptedPrivateShare,
43
+ };
44
+ }
45
+ exports.encryptYShare = encryptYShare;
46
+ /**
47
+ * Combines YShares to combine the final TSS key
48
+ * This can only be used to create the User or Backup key since it requires the common keychain from BitGo first
49
+ *
50
+ * @param params.keyShare - TSS key share
51
+ * @param params.encryptedYShares - encrypted YShares with information on how to decrypt
52
+ * @param params.commonKeychain - expected common keychain of the combined key
53
+ * @returns {CombinedKey} combined TSS key
54
+ */
55
+ async function createCombinedKey(params) {
56
+ await tss_1.default.initialize();
57
+ const MPC = new tss_1.default();
58
+ const { keyShare, encryptedYShares, commonKeychain } = params;
59
+ const yShares = [];
60
+ let bitgoYShare;
61
+ let userYShare;
62
+ let backupYShare;
63
+ for (const encryptedYShare of encryptedYShares) {
64
+ const privateShare = await utils_1.readSignedMessage(encryptedYShare.yShare.encryptedPrivateShare, encryptedYShare.senderPublicArmor, encryptedYShare.recipientPrivateArmor);
65
+ const yShare = {
66
+ i: encryptedYShare.yShare.i,
67
+ j: encryptedYShare.yShare.j,
68
+ y: encryptedYShare.yShare.publicShare.slice(0, 64),
69
+ u: privateShare.slice(0, 64),
70
+ chaincode: privateShare.slice(64),
71
+ };
72
+ switch (encryptedYShare.yShare.j) {
73
+ case 1:
74
+ userYShare = yShare;
75
+ break;
76
+ case 2:
77
+ backupYShare = yShare;
78
+ break;
79
+ case 3:
80
+ bitgoYShare = yShare;
81
+ break;
82
+ default:
83
+ throw new Error('Invalid YShare index');
84
+ }
85
+ yShares.push(yShare);
86
+ }
87
+ const combinedKey = MPC.keyCombine(keyShare.uShare, yShares);
88
+ if (combinedKey.pShare.y + combinedKey.pShare.chaincode !== commonKeychain) {
89
+ throw new Error('Common keychains do not match');
90
+ }
91
+ if (!bitgoYShare) {
92
+ throw new Error('Missing BitGo Y Share');
93
+ }
94
+ const signingMaterial = {
95
+ uShare: keyShare.uShare,
96
+ bitgoYShare,
97
+ backupYShare,
98
+ userYShare,
99
+ };
100
+ return {
101
+ signingMaterial,
102
+ commonKeychain,
103
+ };
104
+ }
105
+ exports.createCombinedKey = createCombinedKey;
106
+ /**
107
+ * Creates the User Sign Share containing the User XShare and the User to Bitgo RShare
108
+ *
109
+ * @param {Buffer} signablePayload - the signablePayload as a buffer
110
+ * @param {PShare} pShare - User's signing material
111
+ * @returns {Promise<SignShare>} - User Sign Share
112
+ */
113
+ async function createUserSignShare(signablePayload, pShare) {
114
+ const MPC = await tss_1.default.initialize();
115
+ if (pShare.i !== ShareKeyPosition.USER) {
116
+ throw new Error('Invalid PShare, PShare doesnt belong to the User');
117
+ }
118
+ const jShare = { i: ShareKeyPosition.BITGO, j: ShareKeyPosition.USER };
119
+ return MPC.signShare(signablePayload, pShare, [jShare]);
120
+ }
121
+ exports.createUserSignShare = createUserSignShare;
122
+ /**
123
+ * Creates the User to Bitgo GShare
124
+ *
125
+ * @param {SignShare} userSignShare - the User Sign Share
126
+ * @param {SignatureShareRecord} bitgoToUserRShare - the Bitgo to User RShare
127
+ * @param {YShare} backupToUserYShare - the backup key Y share received during wallet creation
128
+ * @param {Buffer} signablePayload - the signable payload from a tx
129
+ * @returns {Promise<GShare>} - the User to Bitgo GShare
130
+ */
131
+ async function createUserToBitGoGShare(userSignShare, bitgoToUserRShare, backupToUserYShare, bitgoToUserYShare, signablePayload) {
132
+ if (userSignShare.xShare.i !== ShareKeyPosition.USER) {
133
+ throw new Error('Invalid XShare, doesnt belong to the User');
134
+ }
135
+ if (bitgoToUserRShare.from !== utils_1.SignatureShareType.BITGO || bitgoToUserRShare.to !== utils_1.SignatureShareType.USER) {
136
+ throw new Error('Invalid RShare, is not from Bitgo to User');
137
+ }
138
+ if (backupToUserYShare.i !== ShareKeyPosition.USER) {
139
+ throw new Error('Invalid YShare, doesnt belong to the User');
140
+ }
141
+ if (backupToUserYShare.j !== ShareKeyPosition.BACKUP) {
142
+ throw new Error('Invalid YShare, is not backup key');
143
+ }
144
+ const RShare = {
145
+ i: ShareKeyPosition.USER,
146
+ j: ShareKeyPosition.BITGO,
147
+ u: bitgoToUserYShare.u,
148
+ r: bitgoToUserRShare.share.substring(0, 64),
149
+ R: bitgoToUserRShare.share.substring(64, 128),
150
+ };
151
+ const MPC = await tss_1.default.initialize();
152
+ return MPC.sign(signablePayload, userSignShare.xShare, [RShare], [backupToUserYShare]);
153
+ }
154
+ exports.createUserToBitGoGShare = createUserToBitGoGShare;
155
+ /**
156
+ * Sends the User to Bitgo RShare to Bitgo
157
+ * @param {BitGoBase} bitgo - the bitgo instance
158
+ * @param {String} walletId - the wallet id
159
+ * @param {String} txRequestId - the txRequest Id
160
+ * @param {SignShare} userSignShare - the user Sign Share
161
+ * @param {String} encryptedSignerShare - signer share encrypted to bitgo key
162
+ * @returns {Promise<void>}
163
+ */
164
+ async function offerUserToBitgoRShare(bitgo, walletId, txRequestId, userSignShare, encryptedSignerShare) {
165
+ const rShare = userSignShare.rShares[ShareKeyPosition.BITGO];
166
+ if (_.isNil(rShare)) {
167
+ throw new Error('userToBitgo RShare not found');
168
+ }
169
+ if (rShare.i !== ShareKeyPosition.BITGO || rShare.j !== ShareKeyPosition.USER) {
170
+ throw new Error('Invalid RShare, is not from User to Bitgo');
171
+ }
172
+ const signatureShare = {
173
+ from: utils_1.SignatureShareType.USER,
174
+ to: utils_1.SignatureShareType.BITGO,
175
+ share: rShare.r + rShare.R,
176
+ };
177
+ await sendSignatureShare(bitgo, walletId, txRequestId, signatureShare, encryptedSignerShare);
178
+ }
179
+ exports.offerUserToBitgoRShare = offerUserToBitgoRShare;
180
+ /**
181
+ * Gets the Bitgo to User RShare from Bitgo
182
+ *
183
+ * @param {BitGoBase} bitgo - the bitgo instance
184
+ * @param {String} walletId - the wallet id
185
+ * @param {String} txRequestId - the txRequest Id
186
+ * @returns {Promise<SignatureShareRecord>} - a Signature Share
187
+ */
188
+ async function getBitgoToUserRShare(bitgo, walletId, txRequestId) {
189
+ const txRequest = await getTxRequest(bitgo, walletId, txRequestId);
190
+ const signatureShares = txRequest.signatureShares;
191
+ if (_.isNil(signatureShares) || _.isEmpty(signatureShares)) {
192
+ throw new Error(`No signatures shares found for id: ${txRequestId}`);
193
+ }
194
+ // at this point we expect the only share to be the RShare
195
+ const bitgoToUserRShare = signatureShares.find((sigShare) => sigShare.from === utils_1.SignatureShareType.BITGO && sigShare.to === utils_1.SignatureShareType.USER);
196
+ if (_.isNil(bitgoToUserRShare)) {
197
+ throw new Error(`Bitgo to User RShare not found for id: ${txRequestId}`);
198
+ }
199
+ return bitgoToUserRShare;
200
+ }
201
+ exports.getBitgoToUserRShare = getBitgoToUserRShare;
202
+ /**
203
+ * Sends the User to Bitgo GShare to Bitgo
204
+ *
205
+ * @param {BitGoBase} bitgo - the bitgo instance
206
+ * @param {String} walletId - the wallet id
207
+ * @param {String} txRequestId - the txRequest Id
208
+ * @param {GShare} userToBitgoGShare - the User to Bitgo GShare
209
+ * @returns {Promise<void>}
210
+ */
211
+ async function sendUserToBitgoGShare(bitgo, walletId, txRequestId, userToBitgoGShare) {
212
+ if (userToBitgoGShare.i !== ShareKeyPosition.USER) {
213
+ throw new Error('Invalid GShare, doesnt belong to the User');
214
+ }
215
+ const signatureShare = {
216
+ from: utils_1.SignatureShareType.USER,
217
+ to: utils_1.SignatureShareType.BITGO,
218
+ share: userToBitgoGShare.R + userToBitgoGShare.gamma,
219
+ };
220
+ await sendSignatureShare(bitgo, walletId, txRequestId, signatureShare);
221
+ }
222
+ exports.sendUserToBitgoGShare = sendUserToBitgoGShare;
223
+ /**
224
+ * Gets the latest Tx Request by id
225
+ *
226
+ * @param {BitGoBase} bitgo - the bitgo instance
227
+ * @param {String} walletId - the wallet id
228
+ * @param {String} txRequestId - the txRequest Id
229
+ * @returns {Promise<TxRequest>}
230
+ */
231
+ async function getTxRequest(bitgo, walletId, txRequestId) {
232
+ const txRequestRes = await bitgo
233
+ .get(bitgo.url('/wallet/' + walletId + '/txrequests', 2))
234
+ .query({ txRequestIds: txRequestId, latest: 'true' })
235
+ .result();
236
+ if (txRequestRes.txRequests.length <= 0) {
237
+ throw new Error(`Unable to find TxRequest with id ${txRequestId}`);
238
+ }
239
+ return txRequestRes.txRequests[0];
240
+ }
241
+ exports.getTxRequest = getTxRequest;
242
+ /**
243
+ * Sends a Signature Share
244
+ *
245
+ * @param {BitGoBase} bitgo - the bitgo instance
246
+ * @param {String} walletId - the wallet id *
247
+ * @param {String} txRequestId - the txRequest Id
248
+ * @param {SignatureShareRecord} signatureShare - a Signature Share
249
+ * @returns {Promise<SignatureShareRecord>} - a Signature Share
250
+ */
251
+ async function sendSignatureShare(bitgo, walletId, txRequestId, signatureShare, signerShare) {
252
+ return bitgo
253
+ .post(bitgo.url('/wallet/' + walletId + '/txrequests/' + txRequestId + '/signatureshares', 2))
254
+ .send({
255
+ signatureShare,
256
+ signerShare,
257
+ })
258
+ .result();
259
+ }
260
+ exports.sendSignatureShare = sendSignatureShare;
261
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JpdGdvL3Rzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxpRUFBb0g7QUFFcEgsbUNBQXFIO0FBQ3JILDRCQUE2QjtBQWdDN0IsSUFBWSxnQkFJWDtBQUpELFdBQVksZ0JBQWdCO0lBQzFCLHVEQUFRLENBQUE7SUFDUiwyREFBVSxDQUFBO0lBQ1YseURBQVMsQ0FBQTtBQUNYLENBQUMsRUFKVyxnQkFBZ0IsR0FBaEIsd0JBQWdCLEtBQWhCLHdCQUFnQixRQUkzQjtBQUVEOzs7Ozs7Ozs7R0FTRztBQUNJLEtBQUssVUFBVSxhQUFhLENBQUMsTUFLbkM7SUFDQyxNQUFNLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSx1QkFBdUIsRUFBRSxxQkFBcUIsRUFBRSxHQUFHLE1BQU0sQ0FBQztJQUU1RixNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2hELElBQUksQ0FBQyxNQUFNLEVBQUU7UUFDWCxNQUFNLElBQUksS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7S0FDdEM7SUFFRCxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ2hDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDO1FBQ3JDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDO0tBQzlDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFbkIsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsS0FB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V0FBbUIsRUFDbkIsY0FBb0MsRUFDcEMsV0FBb0I7SUFFcEIsT0FBTyxLQUFLO1NBQ1QsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsVUFBVSxHQUFHLFFBQVEsR0FBRyxjQUFjLEdBQUcsV0FBVyxHQUFHLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQzdGLElBQUksQ0FBQztRQUNKLGNBQWM7UUFDZCxXQUFXO0tBQ1osQ0FBQztTQUNELE1BQU0sRUFBRSxDQUFDO0FBQ2QsQ0FBQztBQWRELGdEQWNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEVkZHNhLCB7IEdTaGFyZSwgSlNoYXJlLCBLZXlTaGFyZSwgUFNoYXJlLCBSU2hhcmUsIFNpZ25TaGFyZSwgVVNoYXJlLCBZU2hhcmUgfSBmcm9tICcuLi9hY2NvdW50LWxpYi9tcGMvdHNzJztcbmltcG9ydCB7IEJpdEdvQmFzZSB9IGZyb20gJy4vYml0Z29CYXNlJztcbmltcG9ydCB7IGVuY3J5cHRBbmRTaWduVGV4dCwgcmVhZFNpZ25lZE1lc3NhZ2UsIFNpZ25hdHVyZVNoYXJlUmVjb3JkLCBTaWduYXR1cmVTaGFyZVR5cGUsIFR4UmVxdWVzdCB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IF8gPSByZXF1aXJlKCdsb2Rhc2gnKTtcblxuLy8gWVNoYXJlIHRoYXQgaGFzIGJlZW4gZW5jcnlwdGVkIGFuZCBzaWduZWQgdmlhIEdQR1xuZXhwb3J0IHR5cGUgRW5jcnlwdGVkWVNoYXJlID0ge1xuICBpOiBudW1iZXI7XG4gIGo6IG51bWJlcjtcbiAgcHVibGljU2hhcmU6IHN0cmluZztcbiAgLy8gc2lnbmVkIGFuZCBlbmNyeXB0ZWQgZ3BnIGFybW9yXG4gIGVuY3J5cHRlZFByaXZhdGVTaGFyZTogc3RyaW5nO1xufTtcblxuLy8gWVNoYXJlIHdpdGggaW5mb3JtYXRpb24gbmVlZGVkIHRvIGRlY3J5cHQgYW5kIHZlcmlmeSBhIEdQRyBtZXNhc2dlXG5leHBvcnQgdHlwZSBEZWNyeXB0YWJsZVlTaGFyZSA9IHtcbiAgeVNoYXJlOiBFbmNyeXB0ZWRZU2hhcmU7XG4gIHJlY2lwaWVudFByaXZhdGVBcm1vcjogc3RyaW5nO1xuICBzZW5kZXJQdWJsaWNBcm1vcjogc3RyaW5nO1xufTtcblxuLy8gRmluYWwgVFNTIFwiS2V5cGFpclwiXG5leHBvcnQgdHlwZSBDb21iaW5lZEtleSA9IHtcbiAgY29tbW9uS2V5Y2hhaW46IHN0cmluZztcbiAgc2lnbmluZ01hdGVyaWFsOiBTaWduaW5nTWF0ZXJpYWw7XG59O1xuXG4vLyBQcml2YXRlIHBvcnRpb24gb2YgYSBUU1Mga2V5LCB0aGlzIG11c3QgYmUgaGFuZGxlZCBsaWtlIGFueSBvdGhlciBwcml2YXRlIGtleVxuZXhwb3J0IHR5cGUgU2lnbmluZ01hdGVyaWFsID0ge1xuICB1U2hhcmU6IFVTaGFyZTtcbiAgYml0Z29ZU2hhcmU6IFlTaGFyZTtcbiAgYmFja3VwWVNoYXJlPzogWVNoYXJlO1xuICB1c2VyWVNoYXJlPzogWVNoYXJlO1xufTtcblxuZXhwb3J0IGVudW0gU2hhcmVLZXlQb3NpdGlvbiB7XG4gIFVTRVIgPSAxLFxuICBCQUNLVVAgPSAyLFxuICBCSVRHTyA9IDMsXG59XG5cbi8qKlxuICogUHJlcGFyZXMgYSBZU2hhcmUgdG8gYmUgZXhjaGFuZ2VkIHdpdGggb3RoZXIga2V5IGhvbGRlcnMuXG4gKiBPdXRwdXQgaXMgaW4gYSBmb3JtYXQgdGhhdCBpcyB1c2FibGUgd2l0aGluIEJpdEdvJ3MgZWNvc3lzdGVtLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMua2V5U2hhcmUgLSBUU1Mga2V5IHNoYXJlIG9mIHRoZSBwYXJ0eSBwcmVwYXJpbmcgZXhjaGFuZ2UgbWF0ZXJpYWxzXG4gKiBAcGFyYW0gcGFyYW1zLnJlY2lwaWVudEluZGV4IC0gaW5kZXggb2YgdGhlIHJlY2lwaWVudCAoMSwgMiwgb3IgMylcbiAqIEBwYXJhbSBwYXJhbXMucmVjaXBpZW50R3BnUHVibGljQXJtb3IgLSByZWNpcGllbnQncyBwdWJsaWMgZ3BnIGtleSBpbiBhcm1vciBmb3JtYXRcbiAqIEBwYXJhbSBwYXJhbXMuc2VuZGVyR3BnUHJpdmF0ZUFybW9yIC0gc2VuZGVyJ3MgcHJpdmF0ZSBncGcga2V5IGluIGFybW9yIGZvcm1hdFxuICogQHJldHVybnMgeyBFbmNyeXB0ZWRZU2hhcmUgfSBlbmNyeXB0ZWQgWSBTaGFyZVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5jcnlwdFlTaGFyZShwYXJhbXM6IHtcbiAga2V5U2hhcmU6IEtleVNoYXJlO1xuICByZWNpcGllbnRJbmRleDogbnVtYmVyO1xuICByZWNpcGllbnRHcGdQdWJsaWNBcm1vcjogc3RyaW5nO1xuICBzZW5kZXJHcGdQcml2YXRlQXJtb3I6IHN0cmluZztcbn0pOiBQcm9taXNlPEVuY3J5cHRlZFlTaGFyZT4ge1xuICBjb25zdCB7IGtleVNoYXJlLCByZWNpcGllbnRJbmRleCwgcmVjaXBpZW50R3BnUHVibGljQXJtb3IsIHNlbmRlckdwZ1ByaXZhdGVBcm1vciB9ID0gcGFyYW1zO1xuXG4gIGNvbnN0IHlTaGFyZSA9IGtleVNoYXJlLnlTaGFyZXNbcmVjaXBpZW50SW5kZXhdO1xuICBpZiAoIXlTaGFyZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCByZWNpcGllbnQnKTtcbiAgfVxuXG4gIGNvbnN0IHB1YmxpY1NoYXJlID0gQnVmZmVyLmNvbmNhdChbXG4gICAgQnVmZmVyLmZyb20oa2V5U2hhcmUudVNoYXJlLnksICdoZXgnKSxcbiAgICBCdWZmZXIuZnJvbShrZXlTaGFyZS51U2hhcmUuY2hhaW5jb2RlLCAnaGV4JyksXG4gIF0pLnRvU3RyaW5nKCdoZXgnKTtcblxuICBjb25zdCBwcml2YXRlU2hhcmUgPSBCdWZmZXIuY29uY2F0KFtCdWZmZXIuZnJvbSh5U2hhcmUudSwgJ2hleCcpLCBCdWZmZXIuZnJvbSh5U2hhcmUuY2hhaW5jb2RlLCAnaGV4JyldKS50b1N0cmluZyhcbiAgICAnaGV4J1xuICApO1xuXG4gIGNvbnN0IGVuY3J5cHRlZFByaXZhdGVTaGFyZSA9IGF3YWl0IGVuY3J5cHRBbmRTaWduVGV4dChwcml2YXRlU2hhcmUsIHJlY2lwaWVudEdwZ1B1YmxpY0FybW9yLCBzZW5kZXJHcGdQcml2YXRlQXJtb3IpO1xuXG4gIHJldHVybiB7XG4gICAgaTogeVNoYXJlLmksXG4gICAgajogeVNoYXJlLmosXG4gICAgcHVibGljU2hhcmUsXG4gICAgZW5jcnlwdGVkUHJpdmF0ZVNoYXJlLFxuICB9O1xufVxuXG4vKipcbiAqIENvbWJpbmVzIFlTaGFyZXMgdG8gY29tYmluZSB0aGUgZmluYWwgVFNTIGtleVxuICogVGhpcyBjYW4gb25seSBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgVXNlciBvciBCYWNrdXAga2V5IHNpbmNlIGl0IHJlcXVpcmVzIHRoZSBjb21tb24ga2V5Y2hhaW4gZnJvbSBCaXRHbyBmaXJzdFxuICpcbiAqIEBwYXJhbSBwYXJhbXMua2V5U2hhcmUgLSBUU1Mga2V5IHNoYXJlXG4gKiBAcGFyYW0gcGFyYW1zLmVuY3J5cHRlZFlTaGFyZXMgLSBlbmNyeXB0ZWQgWVNoYXJlcyB3aXRoIGluZm9ybWF0aW9uIG9uIGhvdyB0byBkZWNyeXB0XG4gKiBAcGFyYW0gcGFyYW1zLmNvbW1vbktleWNoYWluIC0gZXhwZWN0ZWQgY29tbW9uIGtleWNoYWluIG9mIHRoZSBjb21iaW5lZCBrZXlcbiAqIEByZXR1cm5zIHtDb21iaW5lZEtleX0gY29tYmluZWQgVFNTIGtleVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlQ29tYmluZWRLZXkocGFyYW1zOiB7XG4gIGtleVNoYXJlOiBLZXlTaGFyZTtcbiAgZW5jcnlwdGVkWVNoYXJlczogRGVjcnlwdGFibGVZU2hhcmVbXTtcbiAgY29tbW9uS2V5Y2hhaW46IHN0cmluZztcbn0pOiBQcm9taXNlPENvbWJpbmVkS2V5PiB7XG4gIGF3YWl0IEVkZHNhLmluaXRpYWxpemUoKTtcbiAgY29uc3QgTVBDID0gbmV3IEVkZHNhKCk7XG5cbiAgY29uc3QgeyBrZXlTaGFyZSwgZW5jcnlwdGVkWVNoYXJlcywgY29tbW9uS2V5Y2hhaW4gfSA9IHBhcmFtcztcbiAgY29uc3QgeVNoYXJlczogWVNoYXJlW10gPSBbXTtcblxuICBsZXQgYml0Z29ZU2hhcmU6IFlTaGFyZSB8IHVuZGVmaW5lZDtcbiAgbGV0IHVzZXJZU2hhcmU6IFlTaGFyZSB8IHVuZGVmaW5lZDtcbiAgbGV0IGJhY2t1cFlTaGFyZTogWVNoYXJlIHwgdW5kZWZpbmVkO1xuXG4gIGZvciAoY29uc3QgZW5jcnlwdGVkWVNoYXJlIG9mIGVuY3J5cHRlZFlTaGFyZXMpIHtcbiAgICBjb25zdCBwcml2YXRlU2hhcmUgPSBhd2FpdCByZWFkU2lnbmVkTWVzc2FnZShcbiAgICAgIGVuY3J5cHRlZFlTaGFyZS55U2hhcmUuZW5jcnlwdGVkUHJpdmF0ZVNoYXJlLFxuICAgICAgZW5jcnlwdGVkWVNoYXJlLnNlbmRlclB1YmxpY0FybW9yLFxuICAgICAgZW5jcnlwdGVkWVNoYXJlLnJlY2lwaWVudFByaXZhdGVBcm1vclxuICAgICk7XG5cbiAgICBjb25zdCB5U2hhcmU6IFlTaGFyZSA9IHtcbiAgICAgIGk6IGVuY3J5cHRlZFlTaGFyZS55U2hhcmUuaSxcbiAgICAgIGo6IGVuY3J5cHRlZFlTaGFyZS55U2hhcmUuaixcbiAgICAgIHk6IGVuY3J5cHRlZFlTaGFyZS55U2hhcmUucHVibGljU2hhcmUuc2xpY2UoMCwgNjQpLFxuICAgICAgdTogcHJpdmF0ZVNoYXJlLnNsaWNlKDAsIDY0KSxcbiAgICAgIGNoYWluY29kZTogcHJpdmF0ZVNoYXJlLnNsaWNlKDY0KSxcbiAgICB9O1xuXG4gICAgc3dpdGNoIChlbmNyeXB0ZWRZU2hhcmUueVNoYXJlLmopIHtcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgdXNlcllTaGFyZSA9IHlTaGFyZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI6XG4gICAgICAgIGJhY2t1cFlTaGFyZSA9IHlTaGFyZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDM6XG4gICAgICAgIGJpdGdvWVNoYXJlID0geVNoYXJlO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBZU2hhcmUgaW5kZXgnKTtcbiAgICB9XG5cbiAgICB5U2hhcmVzLnB1c2goeVNoYXJlKTtcbiAgfVxuXG4gIGNvbnN0IGNvbWJpbmVkS2V5ID0gTVBDLmtleUNvbWJpbmUoa2V5U2hhcmUudVNoYXJlLCB5U2hhcmVzKTtcbiAgaWYgKGNvbWJpbmVkS2V5LnBTaGFyZS55ICsgY29tYmluZWRLZXkucFNoYXJlLmNoYWluY29kZSAhPT0gY29tbW9uS2V5Y2hhaW4pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbW1vbiBrZXljaGFpbnMgZG8gbm90IG1hdGNoJyk7XG4gIH1cbiAgaWYgKCFiaXRnb1lTaGFyZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBCaXRHbyBZIFNoYXJlJyk7XG4gIH1cblxuICBjb25zdCBzaWduaW5nTWF0ZXJpYWw6IFNpZ25pbmdNYXRlcmlhbCA9IHtcbiAgICB1U2hhcmU6IGtleVNoYXJlLnVTaGFyZSxcbiAgICBiaXRnb1lTaGFyZSxcbiAgICBiYWNrdXBZU2hhcmUsXG4gICAgdXNlcllTaGFyZSxcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIHNpZ25pbmdNYXRlcmlhbCxcbiAgICBjb21tb25LZXljaGFpbixcbiAgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBVc2VyIFNpZ24gU2hhcmUgY29udGFpbmluZyB0aGUgVXNlciBYU2hhcmUgYW5kIHRoZSBVc2VyIHRvIEJpdGdvIFJTaGFyZVxuICpcbiAqIEBwYXJhbSB7QnVmZmVyfSBzaWduYWJsZVBheWxvYWQgLSB0aGUgc2lnbmFibGVQYXlsb2FkIGFzIGEgYnVmZmVyXG4gKiBAcGFyYW0ge1BTaGFyZX0gcFNoYXJlIC0gVXNlcidzIHNpZ25pbmcgbWF0ZXJpYWxcbiAqIEByZXR1cm5zIHtQcm9taXNlPFNpZ25TaGFyZT59IC0gVXNlciBTaWduIFNoYXJlXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVVc2VyU2lnblNoYXJlKHNpZ25hYmxlUGF5bG9hZDogQnVmZmVyLCBwU2hhcmU6IFBTaGFyZSk6IFByb21pc2U8U2lnblNoYXJlPiB7XG4gIGNvbnN0IE1QQyA9IGF3YWl0IEVkZHNhLmluaXRpYWxpemUoKTtcblxuICBpZiAocFNoYXJlLmkgIT09IFNoYXJlS2V5UG9zaXRpb24uVVNFUikge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBQU2hhcmUsIFBTaGFyZSBkb2VzbnQgYmVsb25nIHRvIHRoZSBVc2VyJyk7XG4gIH1cbiAgY29uc3QgalNoYXJlOiBKU2hhcmUgPSB7IGk6IFNoYXJlS2V5UG9zaXRpb24uQklUR08sIGo6IFNoYXJlS2V5UG9zaXRpb24uVVNFUiB9O1xuICByZXR1cm4gTVBDLnNpZ25TaGFyZShzaWduYWJsZVBheWxvYWQsIHBTaGFyZSwgW2pTaGFyZV0pO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgdGhlIFVzZXIgdG8gQml0Z28gR1NoYXJlXG4gKlxuICogQHBhcmFtIHtTaWduU2hhcmV9IHVzZXJTaWduU2hhcmUgLSB0aGUgVXNlciBTaWduIFNoYXJlXG4gKiBAcGFyYW0ge1NpZ25hdHVyZVNoYXJlUmVjb3JkfSBiaXRnb1RvVXNlclJTaGFyZSAtIHRoZSBCaXRnbyB0byBVc2VyIFJTaGFyZVxuICogQHBhcmFtIHtZU2hhcmV9IGJhY2t1cFRvVXNlcllTaGFyZSAtIHRoZSBiYWNrdXAga2V5IFkgc2hhcmUgcmVjZWl2ZWQgZHVyaW5nIHdhbGxldCBjcmVhdGlvblxuICogQHBhcmFtIHtCdWZmZXJ9IHNpZ25hYmxlUGF5bG9hZCAtIHRoZSBzaWduYWJsZSBwYXlsb2FkIGZyb20gYSB0eFxuICogQHJldHVybnMge1Byb21pc2U8R1NoYXJlPn0gLSB0aGUgVXNlciB0byBCaXRnbyBHU2hhcmVcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVVzZXJUb0JpdEdvR1NoYXJlKFxuICB1c2VyU2lnblNoYXJlOiBTaWduU2hhcmUsXG4gIGJpdGdvVG9Vc2VyUlNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZCxcbiAgYmFja3VwVG9Vc2VyWVNoYXJlOiBZU2hhcmUsXG4gIGJpdGdvVG9Vc2VyWVNoYXJlOiBZU2hhcmUsXG4gIHNpZ25hYmxlUGF5bG9hZDogQnVmZmVyXG4pOiBQcm9taXNlPEdTaGFyZT4ge1xuICBpZiAodXNlclNpZ25TaGFyZS54U2hhcmUuaSAhPT0gU2hhcmVLZXlQb3NpdGlvbi5VU0VSKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIFhTaGFyZSwgZG9lc250IGJlbG9uZyB0byB0aGUgVXNlcicpO1xuICB9XG4gIGlmIChiaXRnb1RvVXNlclJTaGFyZS5mcm9tICE9PSBTaWduYXR1cmVTaGFyZVR5cGUuQklUR08gfHwgYml0Z29Ub1VzZXJSU2hhcmUudG8gIT09IFNpZ25hdHVyZVNoYXJlVHlwZS5VU0VSKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIFJTaGFyZSwgaXMgbm90IGZyb20gQml0Z28gdG8gVXNlcicpO1xuICB9XG4gIGlmIChiYWNrdXBUb1VzZXJZU2hhcmUuaSAhPT0gU2hhcmVLZXlQb3NpdGlvbi5VU0VSKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIFlTaGFyZSwgZG9lc250IGJlbG9uZyB0byB0aGUgVXNlcicpO1xuICB9XG4gIGlmIChiYWNrdXBUb1VzZXJZU2hhcmUuaiAhPT0gU2hhcmVLZXlQb3NpdGlvbi5CQUNLVVApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgWVNoYXJlLCBpcyBub3QgYmFja3VwIGtleScpO1xuICB9XG5cbiAgY29uc3QgUlNoYXJlOiBSU2hhcmUgPSB7XG4gICAgaTogU2hhcmVLZXlQb3NpdGlvbi5VU0VSLFxuICAgIGo6IFNoYXJlS2V5UG9zaXRpb24uQklUR08sXG4gICAgdTogYml0Z29Ub1VzZXJZU2hhcmUudSxcbiAgICByOiBiaXRnb1RvVXNlclJTaGFyZS5zaGFyZS5zdWJzdHJpbmcoMCwgNjQpLFxuICAgIFI6IGJpdGdvVG9Vc2VyUlNoYXJlLnNoYXJlLnN1YnN0cmluZyg2NCwgMTI4KSxcbiAgfTtcblxuICBjb25zdCBNUEMgPSBhd2FpdCBFZGRzYS5pbml0aWFsaXplKCk7XG4gIHJldHVybiBNUEMuc2lnbihzaWduYWJsZVBheWxvYWQsIHVzZXJTaWduU2hhcmUueFNoYXJlLCBbUlNoYXJlXSwgW2JhY2t1cFRvVXNlcllTaGFyZV0pO1xufVxuXG4vKipcbiAqIFNlbmRzIHRoZSBVc2VyIHRvIEJpdGdvIFJTaGFyZSB0byBCaXRnb1xuICogQHBhcmFtIHtCaXRHb0Jhc2V9IGJpdGdvIC0gdGhlIGJpdGdvIGluc3RhbmNlXG4gKiBAcGFyYW0ge1N0cmluZ30gd2FsbGV0SWQgLSB0aGUgd2FsbGV0IGlkXG4gKiBAcGFyYW0ge1N0cmluZ30gdHhSZXF1ZXN0SWQgLSB0aGUgdHhSZXF1ZXN0IElkXG4gKiBAcGFyYW0ge1NpZ25TaGFyZX0gdXNlclNpZ25TaGFyZSAtIHRoZSB1c2VyIFNpZ24gU2hhcmVcbiAqIEBwYXJhbSB7U3RyaW5nfSBlbmNyeXB0ZWRTaWduZXJTaGFyZSAtIHNpZ25lciBzaGFyZSBlbmNyeXB0ZWQgdG8gYml0Z28ga2V5XG4gKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9mZmVyVXNlclRvQml0Z29SU2hhcmUoXG4gIGJpdGdvOiBCaXRHb0Jhc2UsXG4gIHdhbGxldElkOiBzdHJpbmcsXG4gIHR4UmVxdWVzdElkOiBzdHJpbmcsXG4gIHVzZXJTaWduU2hhcmU6IFNpZ25TaGFyZSxcbiAgZW5jcnlwdGVkU2lnbmVyU2hhcmU6IHN0cmluZ1xuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHJTaGFyZTogUlNoYXJlID0gdXNlclNpZ25TaGFyZS5yU2hhcmVzW1NoYXJlS2V5UG9zaXRpb24uQklUR09dO1xuICBpZiAoXy5pc05pbChyU2hhcmUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1c2VyVG9CaXRnbyBSU2hhcmUgbm90IGZvdW5kJyk7XG4gIH1cbiAgaWYgKHJTaGFyZS5pICE9PSBTaGFyZUtleVBvc2l0aW9uLkJJVEdPIHx8IHJTaGFyZS5qICE9PSBTaGFyZUtleVBvc2l0aW9uLlVTRVIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgUlNoYXJlLCBpcyBub3QgZnJvbSBVc2VyIHRvIEJpdGdvJyk7XG4gIH1cbiAgY29uc3Qgc2lnbmF0dXJlU2hhcmU6IFNpZ25hdHVyZVNoYXJlUmVjb3JkID0ge1xuICAgIGZyb206IFNpZ25hdHVyZVNoYXJlVHlwZS5VU0VSLFxuICAgIHRvOiBTaWduYXR1cmVTaGFyZVR5cGUuQklUR08sXG4gICAgc2hhcmU6IHJTaGFyZS5yICsgclNoYXJlLlIsXG4gIH07XG5cbiAgYXdhaXQgc2VuZFNpZ25hdHVyZVNoYXJlKGJpdGdvLCB3YWxsZXRJZCwgdHhSZXF1ZXN0SWQsIHNpZ25hdHVyZVNoYXJlLCBlbmNyeXB0ZWRTaWduZXJTaGFyZSk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgQml0Z28gdG8gVXNlciBSU2hhcmUgZnJvbSBCaXRnb1xuICpcbiAqIEBwYXJhbSB7Qml0R29CYXNlfSBiaXRnbyAtIHRoZSBiaXRnbyBpbnN0YW5jZVxuICogQHBhcmFtIHtTdHJpbmd9IHdhbGxldElkIC0gdGhlIHdhbGxldCBpZFxuICogQHBhcmFtIHtTdHJpbmd9IHR4UmVxdWVzdElkIC0gdGhlIHR4UmVxdWVzdCBJZFxuICogQHJldHVybnMge1Byb21pc2U8U2lnbmF0dXJlU2hhcmVSZWNvcmQ+fSAtIGEgU2lnbmF0dXJlIFNoYXJlXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRCaXRnb1RvVXNlclJTaGFyZShcbiAgYml0Z286IEJpdEdvQmFzZSxcbiAgd2FsbGV0SWQ6IHN0cmluZyxcbiAgdHhSZXF1ZXN0SWQ6IHN0cmluZ1xuKTogUHJvbWlzZTxTaWduYXR1cmVTaGFyZVJlY29yZD4ge1xuICBjb25zdCB0eFJlcXVlc3QgPSBhd2FpdCBnZXRUeFJlcXVlc3QoYml0Z28sIHdhbGxldElkLCB0eFJlcXVlc3RJZCk7XG4gIGNvbnN0IHNpZ25hdHVyZVNoYXJlcyA9IHR4UmVxdWVzdC5zaWduYXR1cmVTaGFyZXM7XG4gIGlmIChfLmlzTmlsKHNpZ25hdHVyZVNoYXJlcykgfHwgXy5pc0VtcHR5KHNpZ25hdHVyZVNoYXJlcykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHNpZ25hdHVyZXMgc2hhcmVzIGZvdW5kIGZvciBpZDogJHt0eFJlcXVlc3RJZH1gKTtcbiAgfVxuXG4gIC8vIGF0IHRoaXMgcG9pbnQgd2UgZXhwZWN0IHRoZSBvbmx5IHNoYXJlIHRvIGJlIHRoZSBSU2hhcmVcbiAgY29uc3QgYml0Z29Ub1VzZXJSU2hhcmUgPSBzaWduYXR1cmVTaGFyZXMuZmluZChcbiAgICAoc2lnU2hhcmUpID0+IHNpZ1NoYXJlLmZyb20gPT09IFNpZ25hdHVyZVNoYXJlVHlwZS5CSVRHTyAmJiBzaWdTaGFyZS50byA9PT0gU2lnbmF0dXJlU2hhcmVUeXBlLlVTRVJcbiAgKTtcbiAgaWYgKF8uaXNOaWwoYml0Z29Ub1VzZXJSU2hhcmUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBCaXRnbyB0byBVc2VyIFJTaGFyZSBub3QgZm91bmQgZm9yIGlkOiAke3R4UmVxdWVzdElkfWApO1xuICB9XG4gIHJldHVybiBiaXRnb1RvVXNlclJTaGFyZTtcbn1cblxuLyoqXG4gKiBTZW5kcyB0aGUgVXNlciB0byBCaXRnbyBHU2hhcmUgdG8gQml0Z29cbiAqXG4gKiBAcGFyYW0ge0JpdEdvQmFzZX0gYml0Z28gLSB0aGUgYml0Z28gaW5zdGFuY2VcbiAqIEBwYXJhbSB7U3RyaW5nfSB3YWxsZXRJZCAtIHRoZSB3YWxsZXQgaWRcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eFJlcXVlc3RJZCAtIHRoZSB0eFJlcXVlc3QgSWRcbiAqIEBwYXJhbSB7R1NoYXJlfSB1c2VyVG9CaXRnb0dTaGFyZSAtIHRoZSBVc2VyIHRvIEJpdGdvIEdTaGFyZVxuICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZW5kVXNlclRvQml0Z29HU2hhcmUoXG4gIGJpdGdvOiBCaXRHb0Jhc2UsXG4gIHdhbGxldElkOiBzdHJpbmcsXG4gIHR4UmVxdWVzdElkOiBzdHJpbmcsXG4gIHVzZXJUb0JpdGdvR1NoYXJlOiBHU2hhcmVcbik6IFByb21pc2U8dm9pZD4ge1xuICBpZiAodXNlclRvQml0Z29HU2hhcmUuaSAhPT0gU2hhcmVLZXlQb3NpdGlvbi5VU0VSKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIEdTaGFyZSwgZG9lc250IGJlbG9uZyB0byB0aGUgVXNlcicpO1xuICB9XG4gIGNvbnN0IHNpZ25hdHVyZVNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZCA9IHtcbiAgICBmcm9tOiBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUixcbiAgICB0bzogU2lnbmF0dXJlU2hhcmVUeXBlLkJJVEdPLFxuICAgIHNoYXJlOiB1c2VyVG9CaXRnb0dTaGFyZS5SICsgdXNlclRvQml0Z29HU2hhcmUuZ2FtbWEsXG4gIH07XG5cbiAgYXdhaXQgc2VuZFNpZ25hdHVyZVNoYXJlKGJpdGdvLCB3YWxsZXRJZCwgdHhSZXF1ZXN0SWQsIHNpZ25hdHVyZVNoYXJlKTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBsYXRlc3QgVHggUmVxdWVzdCBieSBpZFxuICpcbiAqIEBwYXJhbSB7Qml0R29CYXNlfSBiaXRnbyAtIHRoZSBiaXRnbyBpbnN0YW5jZVxuICogQHBhcmFtIHtTdHJpbmd9IHdhbGxldElkIC0gdGhlIHdhbGxldCBpZFxuICogQHBhcmFtIHtTdHJpbmd9IHR4UmVxdWVzdElkIC0gdGhlIHR4UmVxdWVzdCBJZFxuICogQHJldHVybnMge1Byb21pc2U8VHhSZXF1ZXN0Pn1cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFR4UmVxdWVzdChiaXRnbzogQml0R29CYXNlLCB3YWxsZXRJZDogc3RyaW5nLCB0eFJlcXVlc3RJZDogc3RyaW5nKTogUHJvbWlzZTxUeFJlcXVlc3Q+IHtcbiAgY29uc3QgdHhSZXF1ZXN0UmVzID0gYXdhaXQgYml0Z29cbiAgICAuZ2V0KGJpdGdvLnVybCgnL3dhbGxldC8nICsgd2FsbGV0SWQgKyAnL3R4cmVxdWVzdHMnLCAyKSlcbiAgICAucXVlcnkoeyB0eFJlcXVlc3RJZHM6IHR4UmVxdWVzdElkLCBsYXRlc3Q6ICd0cnVlJyB9KVxuICAgIC5yZXN1bHQoKTtcblxuICBpZiAodHhSZXF1ZXN0UmVzLnR4UmVxdWVzdHMubGVuZ3RoIDw9IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBmaW5kIFR4UmVxdWVzdCB3aXRoIGlkICR7dHhSZXF1ZXN0SWR9YCk7XG4gIH1cblxuICByZXR1cm4gdHhSZXF1ZXN0UmVzLnR4UmVxdWVzdHNbMF07XG59XG5cbi8qKlxuICogU2VuZHMgYSBTaWduYXR1cmUgU2hhcmVcbiAqXG4gKiBAcGFyYW0ge0JpdEdvQmFzZX0gYml0Z28gLSB0aGUgYml0Z28gaW5zdGFuY2VcbiAqIEBwYXJhbSB7U3RyaW5nfSB3YWxsZXRJZCAtIHRoZSB3YWxsZXQgaWQgICpcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eFJlcXVlc3RJZCAtIHRoZSB0eFJlcXVlc3QgSWRcbiAqIEBwYXJhbSB7U2lnbmF0dXJlU2hhcmVSZWNvcmR9IHNpZ25hdHVyZVNoYXJlIC0gYSBTaWduYXR1cmUgU2hhcmVcbiAqIEByZXR1cm5zIHtQcm9taXNlPFNpZ25hdHVyZVNoYXJlUmVjb3JkPn0gLSBhIFNpZ25hdHVyZSBTaGFyZVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2VuZFNpZ25hdHVyZVNoYXJlKFxuICBiaXRnbzogQml0R29CYXNlLFxuICB3YWxsZXRJZDogc3RyaW5nLFxuICB0eFJlcXVlc3RJZDogc3RyaW5nLFxuICBzaWduYXR1cmVTaGFyZTogU2lnbmF0dXJlU2hhcmVSZWNvcmQsXG4gIHNpZ25lclNoYXJlPzogc3RyaW5nXG4pOiBQcm9taXNlPFNpZ25hdHVyZVNoYXJlUmVjb3JkPiB7XG4gIHJldHVybiBiaXRnb1xuICAgIC5wb3N0KGJpdGdvLnVybCgnL3dhbGxldC8nICsgd2FsbGV0SWQgKyAnL3R4cmVxdWVzdHMvJyArIHR4UmVxdWVzdElkICsgJy9zaWduYXR1cmVzaGFyZXMnLCAyKSlcbiAgICAuc2VuZCh7XG4gICAgICBzaWduYXR1cmVTaGFyZSxcbiAgICAgIHNpZ25lclNoYXJlLFxuICAgIH0pXG4gICAgLnJlc3VsdCgpO1xufVxuIl19
@@ -0,0 +1,4 @@
1
+ export declare type V1Network = 'bitcoin' | 'testnet';
2
+ export declare type TokenManagementType = 'enabletoken' | 'disabletoken';
3
+ export declare type ExplainTokenTxType = 'enableToken' | 'disableToken' | 'transferToken';
4
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/bitgo/types.ts"],"names":[],"mappings":"AAAA,oBAAY,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;AAE9C,oBAAY,mBAAmB,GAAG,aAAa,GAAG,cAAc,CAAC;AAEjE,oBAAY,kBAAkB,GAAG,aAAa,GAAG,cAAc,GAAG,eAAe,CAAC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYml0Z28vdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIFYxTmV0d29yayA9ICdiaXRjb2luJyB8ICd0ZXN0bmV0JztcblxuZXhwb3J0IHR5cGUgVG9rZW5NYW5hZ2VtZW50VHlwZSA9ICdlbmFibGV0b2tlbicgfCAnZGlzYWJsZXRva2VuJztcblxuZXhwb3J0IHR5cGUgRXhwbGFpblRva2VuVHhUeXBlID0gJ2VuYWJsZVRva2VuJyB8ICdkaXNhYmxlVG9rZW4nIHwgJ3RyYW5zZmVyVG9rZW4nO1xuIl19
@@ -0,0 +1,6 @@
1
+ import * as utxolib from '@bitgo/utxo-lib';
2
+ import ScriptType2Of3 = utxolib.bitgo.outputScripts.ScriptType2Of3;
3
+ export declare function inferAddressType(addressDetails: {
4
+ chain: number;
5
+ }): ScriptType2Of3 | null;
6
+ //# sourceMappingURL=abstractUtxoCoinUtil.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abstractUtxoCoinUtil.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/utils/abstractUtxoCoinUtil.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAC3C,OAAO,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,cAAc,CAAC;AAEnE,wBAAgB,gBAAgB,CAAC,cAAc,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,cAAc,GAAG,IAAI,CAIzF"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ exports.inferAddressType = void 0;
23
+ const utxolib = __importStar(require("@bitgo/utxo-lib"));
24
+ function inferAddressType(addressDetails) {
25
+ return utxolib.bitgo.isChainCode(addressDetails.chain)
26
+ ? utxolib.bitgo.scriptTypeForChain(addressDetails.chain)
27
+ : null;
28
+ }
29
+ exports.inferAddressType = inferAddressType;
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3RVdHhvQ29pblV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYml0Z28vdXRpbHMvYWJzdHJhY3RVdHhvQ29pblV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHlEQUEyQztBQUczQyxTQUFnQixnQkFBZ0IsQ0FBQyxjQUFpQztJQUNoRSxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUM7UUFDcEQsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQztRQUN4RCxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ1gsQ0FBQztBQUpELDRDQUlDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28vdXR4by1saWInO1xuaW1wb3J0IFNjcmlwdFR5cGUyT2YzID0gdXR4b2xpYi5iaXRnby5vdXRwdXRTY3JpcHRzLlNjcmlwdFR5cGUyT2YzO1xuXG5leHBvcnQgZnVuY3Rpb24gaW5mZXJBZGRyZXNzVHlwZShhZGRyZXNzRGV0YWlsczogeyBjaGFpbjogbnVtYmVyIH0pOiBTY3JpcHRUeXBlMk9mMyB8IG51bGwge1xuICByZXR1cm4gdXR4b2xpYi5iaXRnby5pc0NoYWluQ29kZShhZGRyZXNzRGV0YWlscy5jaGFpbilcbiAgICA/IHV0eG9saWIuYml0Z28uc2NyaXB0VHlwZUZvckNoYWluKGFkZHJlc3NEZXRhaWxzLmNoYWluKVxuICAgIDogbnVsbDtcbn1cbiJdfQ==
@@ -0,0 +1,51 @@
1
+ import { SerializedKeyPair } from 'openpgp';
2
+ import { IBaseCoin, IBlsKeyPair, KeychainsTriplet } from '../baseCoin';
3
+ import { BitGoBase } from '../bitgoBase';
4
+ import { Keychain } from '../keychain';
5
+ import { IBlsUtils } from './iBlsUtils';
6
+ import { MpcUtils } from './mpcUtils';
7
+ /**
8
+ * Utility functions for BLS-DKG work flows.
9
+ */
10
+ export declare class BlsUtils extends MpcUtils implements IBlsUtils {
11
+ constructor(bitgo: BitGoBase, baseCoin: IBaseCoin);
12
+ /**
13
+ * Creates a Keychain containing the User's BLS-DKG signing materials.
14
+ *
15
+ * @param userGpgKey - ephemeral GPG key to encrypt / decrypt sensitve data exchanged between user and server
16
+ * @param userKeyShare - user's BLS-DKG key share
17
+ * @param backupKeyShare - backup's BLS-DKG key share
18
+ * @param bitgoKeychain - previously created BitGo keychain; must be compatible with user and backup key shares
19
+ * @param passphrase - wallet passphrase used to encrypt user's signing materials
20
+ */
21
+ createUserKeychain(userGpgKey: SerializedKeyPair<string>, userKeyShare: IBlsKeyPair, backupKeyShare: IBlsKeyPair, bitgoKeychain: Keychain, passphrase: string, originalPasscodeEncryptionCode?: string): Promise<Keychain>;
22
+ /**
23
+ * Creates a Keychain containing the Backup party's BLS-DKG signing materials.
24
+ *
25
+ * @param userGpgKey - ephemeral GPG key to encrypt / decrypt sensitve data exchanged between user and server
26
+ * @param userKeyShare - User's BLS-DKG Keyshare
27
+ * @param backupKeyShare - Backup's BLS-DKG Keyshare
28
+ * @param bitgoKeychain - previously created BitGo keychain; must be compatible with user and backup key shares
29
+ * @param passphrase - wallet passphrase used to encrypt user's signing materials
30
+ */
31
+ createBackupKeychain(userGpgKey: SerializedKeyPair<string>, userKeyShare: IBlsKeyPair, backupKeyShare: IBlsKeyPair, bitgoKeychain: Keychain, passphrase: string): Promise<Keychain>;
32
+ /**
33
+ * Creates a Keychain containing BitGo's BLS-DKG signing materials.
34
+ *
35
+ * @param userGpgKey - ephemeral GPG key to encrypt / decrypt sensitve data exchanged between user and server
36
+ * @param userKeyShare - user's BLS-DKG key share
37
+ * @param backupKeyShare - backup's BLS-DKG key share
38
+ */
39
+ createBitgoKeychain(userGpgKey: SerializedKeyPair<string>, userKeyShare: IBlsKeyPair, backupKeyShare: IBlsKeyPair, enterprise?: string): Promise<Keychain>;
40
+ /**
41
+ * Creates User, Backup, and BitGo BLS-DKG Keychains.
42
+ *
43
+ * @param params.passphrase - passphrase used to encrypt signing materials created for User and Backup
44
+ */
45
+ createKeychains(params: {
46
+ passphrase: string;
47
+ enterprise?: string;
48
+ originalPasscodeEncryptionCode?: string;
49
+ }): Promise<KeychainsTriplet>;
50
+ }
51
+ //# sourceMappingURL=blsUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blsUtils.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/utils/blsUtils.ts"],"names":[],"mappings":"AAIA,OAAO,EAAe,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEzD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC;;GAEG;AACH,qBAAa,QAAS,SAAQ,QAAS,YAAW,SAAS;gBAC7C,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS;IAIjD;;;;;;;;OAQG;IACG,kBAAkB,CACtB,UAAU,EAAE,iBAAiB,CAAC,MAAM,CAAC,EACrC,YAAY,EAAE,WAAW,EACzB,cAAc,EAAE,WAAW,EAC3B,aAAa,EAAE,QAAQ,EACvB,UAAU,EAAE,MAAM,EAClB,8BAA8B,CAAC,EAAE,MAAM,GACtC,OAAO,CAAC,QAAQ,CAAC;IA6CpB;;;;;;;;OAQG;IACG,oBAAoB,CACxB,UAAU,EAAE,iBAAiB,CAAC,MAAM,CAAC,EACrC,YAAY,EAAE,WAAW,EACzB,cAAc,EAAE,WAAW,EAC3B,aAAa,EAAE,QAAQ,EACvB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,QAAQ,CAAC;IA2CpB;;;;;;OAMG;IACG,mBAAmB,CACvB,UAAU,EAAE,iBAAiB,CAAC,MAAM,CAAC,EACrC,YAAY,EAAE,WAAW,EACzB,cAAc,EAAE,WAAW,EAC3B,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,QAAQ,CAAC;IA2BpB;;;;OAIG;IACG,eAAe,CAAC,MAAM,EAAE;QAC5B,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,8BAA8B,CAAC,EAAE,MAAM,CAAC;KACzC,GAAG,OAAO,CAAC,gBAAgB,CAAC;CA0C9B"}
@@ -0,0 +1,166 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BlsUtils = void 0;
4
+ /**
5
+ * @prettier
6
+ */
7
+ const crypto_1 = require("crypto");
8
+ const openpgp_1 = require("openpgp");
9
+ const baseCoin_1 = require("../../account-lib/baseCoin");
10
+ const mpcUtils_1 = require("./mpcUtils");
11
+ /**
12
+ * Utility functions for BLS-DKG work flows.
13
+ */
14
+ class BlsUtils extends mpcUtils_1.MpcUtils {
15
+ constructor(bitgo, baseCoin) {
16
+ super(bitgo, baseCoin);
17
+ }
18
+ /**
19
+ * Creates a Keychain containing the User's BLS-DKG signing materials.
20
+ *
21
+ * @param userGpgKey - ephemeral GPG key to encrypt / decrypt sensitve data exchanged between user and server
22
+ * @param userKeyShare - user's BLS-DKG key share
23
+ * @param backupKeyShare - backup's BLS-DKG key share
24
+ * @param bitgoKeychain - previously created BitGo keychain; must be compatible with user and backup key shares
25
+ * @param passphrase - wallet passphrase used to encrypt user's signing materials
26
+ */
27
+ async createUserKeychain(userGpgKey, userKeyShare, backupKeyShare, bitgoKeychain, passphrase, originalPasscodeEncryptionCode) {
28
+ const bitgoKeyShares = bitgoKeychain.keyShares;
29
+ if (!bitgoKeyShares) {
30
+ throw new Error('Missing BitGo key shares');
31
+ }
32
+ const bitGoToUserShare = bitgoKeyShares.find((keyShare) => keyShare.from === 'bitgo' && keyShare.to === 'user');
33
+ if (!bitGoToUserShare) {
34
+ throw new Error('Missing BitGo to User key share');
35
+ }
36
+ if (!userKeyShare.secretShares || !userKeyShare.pub) {
37
+ throw new Error('Invalid user key shares');
38
+ }
39
+ if (!backupKeyShare.secretShares || !backupKeyShare.pub) {
40
+ throw new Error('Invalid backup key shares');
41
+ }
42
+ const bitGoToUserPrivateShare = await this.decryptPrivateShare(bitGoToUserShare.privateShare, userGpgKey);
43
+ const userPrivateKey = baseCoin_1.BlsKeyPair.aggregatePrvkeys([
44
+ userKeyShare.secretShares[0],
45
+ backupKeyShare.secretShares[0],
46
+ bitGoToUserPrivateShare,
47
+ ]);
48
+ const commonPub = baseCoin_1.BlsKeyPair.aggregatePubkeys([
49
+ userKeyShare.pub,
50
+ backupKeyShare.pub,
51
+ bitGoToUserShare.publicShare,
52
+ ]);
53
+ if (commonPub !== bitgoKeychain.commonPub) {
54
+ throw new Error('Failed to create user keychain - commonPubs do not match.');
55
+ }
56
+ const userKeychainParams = {
57
+ source: 'user',
58
+ keyType: 'blsdkg',
59
+ commonPub: commonPub,
60
+ encryptedPrv: this.bitgo.encrypt({ input: userPrivateKey, password: passphrase }),
61
+ originalPasscodeEncryptionCode: originalPasscodeEncryptionCode,
62
+ };
63
+ return await this.baseCoin.keychains().add(userKeychainParams);
64
+ }
65
+ /**
66
+ * Creates a Keychain containing the Backup party's BLS-DKG signing materials.
67
+ *
68
+ * @param userGpgKey - ephemeral GPG key to encrypt / decrypt sensitve data exchanged between user and server
69
+ * @param userKeyShare - User's BLS-DKG Keyshare
70
+ * @param backupKeyShare - Backup's BLS-DKG Keyshare
71
+ * @param bitgoKeychain - previously created BitGo keychain; must be compatible with user and backup key shares
72
+ * @param passphrase - wallet passphrase used to encrypt user's signing materials
73
+ */
74
+ async createBackupKeychain(userGpgKey, userKeyShare, backupKeyShare, bitgoKeychain, passphrase) {
75
+ const bitgoKeyShares = bitgoKeychain.keyShares;
76
+ if (!bitgoKeyShares) {
77
+ throw new Error('Invalid bitgo keyshares');
78
+ }
79
+ const bitGoToBackupShare = bitgoKeyShares.find((keyShare) => keyShare.from === 'bitgo' && keyShare.to === 'backup');
80
+ if (!bitGoToBackupShare) {
81
+ throw new Error('Missing BitGo to User key share');
82
+ }
83
+ if (!userKeyShare.secretShares || !userKeyShare.pub) {
84
+ throw new Error('Invalid user key shares');
85
+ }
86
+ if (!backupKeyShare.secretShares || !backupKeyShare.pub) {
87
+ throw new Error('Invalid backup key shares');
88
+ }
89
+ const bitGoToBackupPrivateShare = await this.decryptPrivateShare(bitGoToBackupShare.privateShare, userGpgKey);
90
+ const backupPrivateKey = baseCoin_1.BlsKeyPair.aggregatePrvkeys([
91
+ userKeyShare.secretShares[1],
92
+ backupKeyShare.secretShares[1],
93
+ bitGoToBackupPrivateShare,
94
+ ]);
95
+ const commonPub = baseCoin_1.BlsKeyPair.aggregatePubkeys([
96
+ userKeyShare.pub,
97
+ backupKeyShare.pub,
98
+ bitGoToBackupShare.publicShare,
99
+ ]);
100
+ if (commonPub !== bitgoKeychain.commonPub) {
101
+ throw new Error('Failed to create backup keychain - commonPubs do not match.');
102
+ }
103
+ return await this.baseCoin.keychains().createBackup({
104
+ source: 'backup',
105
+ keyType: 'blsdkg',
106
+ commonPub: commonPub,
107
+ prv: backupPrivateKey,
108
+ encryptedPrv: this.bitgo.encrypt({ input: backupPrivateKey, password: passphrase }),
109
+ });
110
+ }
111
+ /**
112
+ * Creates a Keychain containing BitGo's BLS-DKG signing materials.
113
+ *
114
+ * @param userGpgKey - ephemeral GPG key to encrypt / decrypt sensitve data exchanged between user and server
115
+ * @param userKeyShare - user's BLS-DKG key share
116
+ * @param backupKeyShare - backup's BLS-DKG key share
117
+ */
118
+ async createBitgoKeychain(userGpgKey, userKeyShare, backupKeyShare, enterprise) {
119
+ if (!userKeyShare.secretShares || !userKeyShare.pub) {
120
+ throw new Error('Invalid user key shares');
121
+ }
122
+ if (!backupKeyShare.secretShares || !backupKeyShare.pub) {
123
+ throw new Error('Invalid backup key shares');
124
+ }
125
+ const userToBitgoKeyShare = {
126
+ publicShare: userKeyShare.pub,
127
+ privateShare: userKeyShare.secretShares[2],
128
+ };
129
+ const backupToBitgoKeyShare = {
130
+ publicShare: backupKeyShare.pub,
131
+ privateShare: backupKeyShare.secretShares[2],
132
+ };
133
+ return await this.createBitgoKeychainInWP(userGpgKey, userToBitgoKeyShare, backupToBitgoKeyShare, 'blsdkg', enterprise);
134
+ }
135
+ /**
136
+ * Creates User, Backup, and BitGo BLS-DKG Keychains.
137
+ *
138
+ * @param params.passphrase - passphrase used to encrypt signing materials created for User and Backup
139
+ */
140
+ async createKeychains(params) {
141
+ const userKeyShare = this.baseCoin.generateKeyPair();
142
+ const backupKeyShare = this.baseCoin.generateKeyPair();
143
+ const randomHexString = crypto_1.randomBytes(12).toString('hex');
144
+ const userGpgKey = await openpgp_1.generateKey({
145
+ userIDs: [
146
+ {
147
+ name: randomHexString,
148
+ email: `${randomHexString}@${randomHexString}.com`,
149
+ },
150
+ ],
151
+ });
152
+ const bitgoKeychain = await this.createBitgoKeychain(userGpgKey, userKeyShare, backupKeyShare, params.enterprise);
153
+ const userKeychainPromise = this.createUserKeychain(userGpgKey, userKeyShare, backupKeyShare, bitgoKeychain, params.passphrase, params.originalPasscodeEncryptionCode);
154
+ const backupKeychainPromise = this.createBackupKeychain(userGpgKey, userKeyShare, backupKeyShare, bitgoKeychain, params.passphrase);
155
+ const [userKeychain, backupKeychain] = await Promise.all([userKeychainPromise, backupKeychainPromise]);
156
+ // create wallet
157
+ const keychains = {
158
+ userKeychain,
159
+ backupKeychain,
160
+ bitgoKeychain,
161
+ };
162
+ return keychains;
163
+ }
164
+ }
165
+ exports.BlsUtils = BlsUtils;
166
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxzVXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYml0Z28vdXRpbHMvYmxzVXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7O0dBRUc7QUFDSCxtQ0FBcUM7QUFDckMscUNBQXlEO0FBQ3pELHlEQUEyRTtBQUszRSx5Q0FBc0M7QUFFdEM7O0dBRUc7QUFDSCxNQUFhLFFBQVMsU0FBUSxtQkFBUTtJQUNwQyxZQUFZLEtBQWdCLEVBQUUsUUFBbUI7UUFDL0MsS0FBSyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxLQUFLLENBQUMsa0JBQWtCLENBQ3RCLFVBQXFDLEVBQ3JDLFlBQXlCLEVBQ3pCLGNBQTJCLEVBQzNCLGFBQXVCLEVBQ3ZCLFVBQWtCLEVBQ2xCLDhCQUF1QztRQUV2QyxNQUFNLGNBQWMsR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDO1FBQy9DLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDbkIsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1NBQzdDO1FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLE9BQU8sSUFBSSxRQUFRLENBQUMsRUFBRSxLQUFLLE1BQU0sQ0FBQyxDQUFDO1FBQ2hILElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUNyQixNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxDQUFDLENBQUM7U0FDcEQ7UUFFRCxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUU7WUFDbkQsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1NBQzVDO1FBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLElBQUksQ0FBQyxjQUFj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QUFtQixFQUFFLHFCQUFxQixDQUFDLENBQUMsQ0FBQztRQUV2RyxnQkFBZ0I7UUFDaEIsTUFBTSxTQUFTLEdBQUc7WUFDaEIsWUFBWTtZQUNaLGNBQWM7WUFDZCxhQUFhO1NBQ2QsQ0FBQztRQUVGLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7Q0FDRjtBQXRORCw0QkFzTkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBwcmV0dGllclxuICovXG5pbXBvcnQgeyByYW5kb21CeXRlcyB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgeyBnZW5lcmF0ZUtleSwgU2VyaWFsaXplZEtleVBhaXIgfSBmcm9tICdvcGVucGdwJztcbmltcG9ydCB7IEJsc0tleVBhaXIgYXMgQmxzS2V5UGFpckNsYXNzIH0gZnJvbSAnLi4vLi4vYWNjb3VudC1saWIvYmFzZUNvaW4nO1xuaW1wb3J0IHsgSUJhc2VDb2luLCBJQmxzS2V5UGFpciwgS2V5Y2hhaW5zVHJpcGxldCB9IGZyb20gJy4uL2Jhc2VDb2luJztcbmltcG9ydCB7IEJpdEdvQmFzZSB9IGZyb20gJy4uL2JpdGdvQmFzZSc7XG5pbXBvcnQgeyBLZXljaGFpbiB9IGZyb20gJy4uL2tleWNoYWluJztcbmltcG9ydCB7IElCbHNVdGlscyB9IGZyb20gJy4vaUJsc1V0aWxzJztcbmltcG9ydCB7IE1wY1V0aWxzIH0gZnJvbSAnLi9tcGNVdGlscyc7XG5cbi8qKlxuICogVXRpbGl0eSBmdW5jdGlvbnMgZm9yIEJMUy1ES0cgd29yayBmbG93cy5cbiAqL1xuZXhwb3J0IGNsYXNzIEJsc1V0aWxzIGV4dGVuZHMgTXBjVXRpbHMgaW1wbGVtZW50cyBJQmxzVXRpbHMge1xuICBjb25zdHJ1Y3RvcihiaXRnbzogQml0R29CYXNlLCBiYXNlQ29pbjogSUJhc2VDb2luKSB7XG4gICAgc3VwZXIoYml0Z28sIGJhc2VDb2luKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgS2V5Y2hhaW4gY29udGFpbmluZyB0aGUgVXNlcidzIEJMUy1ES0cgc2lnbmluZyBtYXRlcmlhbHMuXG4gICAqXG4gICAqIEBwYXJhbSB1c2VyR3BnS2V5IC0gZXBoZW1lcmFsIEdQRyBrZXkgdG8gZW5jcnlwdCAvIGRlY3J5cHQgc2Vuc2l0dmUgZGF0YSBleGNoYW5nZWQgYmV0d2VlbiB1c2VyIGFuZCBzZXJ2ZXJcbiAgICogQHBhcmFtIHVzZXJLZXlTaGFyZSAtIHVzZXIncyBCTFMtREtHIGtleSBzaGFyZVxuICAgKiBAcGFyYW0gYmFja3VwS2V5U2hhcmUgLSBiYWNrdXAncyBCTFMtREtHIGtleSBzaGFyZVxuICAgKiBAcGFyYW0gYml0Z29LZXljaGFpbiAtIHByZXZpb3VzbHkgY3JlYXRlZCBCaXRHbyBrZXljaGFpbjsgbXVzdCBiZSBjb21wYXRpYmxlIHdpdGggdXNlciBhbmQgYmFja3VwIGtleSBzaGFyZXNcbiAgICogQHBhcmFtIHBhc3NwaHJhc2UgLSB3YWxsZXQgcGFzc3BocmFzZSB1c2VkIHRvIGVuY3J5cHQgdXNlcidzIHNpZ25pbmcgbWF0ZXJpYWxzXG4gICAqL1xuICBhc3luYyBjcmVhdGVVc2VyS2V5Y2hhaW4oXG4gICAgdXNlckdwZ0tleTogU2VyaWFsaXplZEtleVBhaXI8c3RyaW5nPixcbiAgICB1c2VyS2V5U2hhcmU6IElCbHNLZXlQYWlyLFxuICAgIGJhY2t1cEtleVNoYXJlOiBJQmxzS2V5UGFpcixcbiAgICBiaXRnb0tleWNoYWluOiBLZXljaGFpbixcbiAgICBwYXNzcGhyYXNlOiBzdHJpbmcsXG4gICAgb3JpZ2luYWxQYXNzY29kZUVuY3J5cHRpb25Db2RlPzogc3RyaW5nXG4gICk6IFByb21pc2U8S2V5Y2hhaW4+IHtcbiAgICBjb25zdCBiaXRnb0tleVNoYXJlcyA9IGJpdGdvS2V5Y2hhaW4ua2V5U2hhcmVzO1xuICAgIGlmICghYml0Z29LZXlTaGFyZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBCaXRHbyBrZXkgc2hhcmVzJyk7XG4gICAgfVxuXG4gICAgY29uc3QgYml0R29Ub1VzZXJTaGFyZSA9IGJpdGdvS2V5U2hhcmVzLmZpbmQoKGtleVNoYXJlKSA9PiBrZXlTaGFyZS5mcm9tID09PSAnYml0Z28nICYmIGtleVNoYXJlLnRvID09PSAndXNlcicpO1xuICAgIGlmICghYml0R29Ub1VzZXJTaGFyZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIEJpdEdvIHRvIFVzZXIga2V5IHNoYXJlJyk7XG4gICAgfVxuXG4gICAgaWYgKCF1c2VyS2V5U2hhcmUuc2VjcmV0U2hhcmVzIHx8ICF1c2VyS2V5U2hhcmUucHViKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdXNlciBrZXkgc2hhcmVzJyk7XG4gICAgfVxuICAgIGlmICghYmFja3VwS2V5U2hhcmUuc2VjcmV0U2hhcmVzIHx8ICFiYWNrdXBLZXlTaGFyZS5wdWIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBiYWNrdXAga2V5IHNoYXJlcycpO1xuICAgIH1cblxuICAgIGNvbnN0IGJpdEdvVG9Vc2VyUHJpdmF0ZVNoYXJlID0gYXdhaXQgdGhpcy5kZWNyeXB0UHJpdmF0ZVNoYXJlKGJpdEdvVG9Vc2VyU2hhcmUucHJpdmF0ZVNoYXJlLCB1c2VyR3BnS2V5KTtcblxuICAgIGNvbnN0IHVzZXJQcml2YXRlS2V5ID0gQmxzS2V5UGFpckNsYXNzLmFnZ3JlZ2F0ZVBydmtleXMoW1xuICAgICAgdXNlcktleVNoYXJlLnNlY3JldFNoYXJlc1swXSxcbiAgICAgIGJhY2t1cEtleVNoYXJlLnNlY3JldFNoYXJlc1swXSxcbiAgICAgIGJpdEdvVG9Vc2VyUHJpdmF0ZVNoYXJlLFxuICAgIF0pO1xuICAgIGNvbnN0IGNvbW1vblB1YiA9IEJsc0tleVBhaXJDbGFzcy5hZ2dyZWdhdGVQdWJrZXlzKFtcbiAgICAgIHVzZXJLZXlTaGFyZS5wdWIsXG4gICAgICBiYWNrdXBLZXlTaGFyZS5wdWIsXG4gICAgICBiaXRHb1RvVXNlclNoYXJlLnB1YmxpY1NoYXJlLFxuICAgIF0pO1xuICAgIGlmIChjb21tb25QdWIgIT09IGJpdGdvS2V5Y2hhaW4uY29tbW9uUHViKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBjcmVhdGUgdXNlciBrZXljaGFpbiAtIGNvbW1vblB1YnMgZG8gbm90IG1hdGNoLicpO1xuICAgIH1cblxuICAgIGNvbnN0IHVzZXJLZXljaGFpblBhcmFtczogYW55ID0ge1xuICAgICAgc291cmNlOiAndXNlcicsXG4gICAgICBrZXlUeXBlOiAnYmxzZGtnJyxcbiAgICAgIGNvbW1vblB1YjogY29tbW9uUHViLFxuICAgICAgZW5jcnlwdGVkUHJ2OiB0aGlzLmJpdGdvLmVuY3J5cHQoeyBpbnB1dDogdXNlclByaXZhdGVLZXksIHBhc3N3b3JkOiBwYXNzcGhyYXNlIH0pLFxuICAgICAgb3JpZ2luYWxQYXNzY29kZUVuY3J5cHRpb25Db2RlOiBvcmlnaW5hbFBhc3Njb2RlRW5jcnlwdGlvbkNvZGUsXG4gICAgfTtcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLmJhc2VDb2luLmtleWNoYWlucygpLmFkZCh1c2VyS2V5Y2hhaW5QYXJhbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBLZXljaGFpbiBjb250YWluaW5nIHRoZSBCYWNrdXAgcGFydHkncyBCTFMtREtHIHNpZ25pbmcgbWF0ZXJpYWxzLlxuICAgKlxuICAgKiBAcGFyYW0gdXNlckdwZ0tleSAtIGVwaGVtZXJhbCBHUEcga2V5IHRvIGVuY3J5cHQgLyBkZWNyeXB0IHNlbnNpdHZlIGRhdGEgZXhjaGFuZ2VkIGJldHdlZW4gdXNlciBhbmQgc2VydmVyXG4gICAqIEBwYXJhbSB1c2VyS2V5U2hhcmUgLSBVc2VyJ3MgQkxTLURLRyBLZXlzaGFyZVxuICAgKiBAcGFyYW0gYmFja3VwS2V5U2hhcmUgLSBCYWNrdXAncyBCTFMtREtHIEtleXNoYXJlXG4gICAqIEBwYXJhbSBiaXRnb0tleWNoYWluIC0gcHJldmlvdXNseSBjcmVhdGVkIEJpdEdvIGtleWNoYWluOyBtdXN0IGJlIGNvbXBhdGlibGUgd2l0aCB1c2VyIGFuZCBiYWNrdXAga2V5IHNoYXJlc1xuICAgKiBAcGFyYW0gcGFzc3BocmFzZSAtIHdhbGxldCBwYXNzcGhyYXNlIHVzZWQgdG8gZW5jcnlwdCB1c2VyJ3Mgc2lnbmluZyBtYXRlcmlhbHNcbiAgICovXG4gIGFzeW5jIGNyZWF0ZUJhY2t1cEtleWNoYWluKFxuICAgIHVzZXJHcGdLZXk6IFNlcmlhbGl6ZWRLZXlQYWlyPHN0cmluZz4sXG4gICAgdXNlcktleVNoYXJlOiBJQmxzS2V5UGFpcixcbiAgICBiYWNrdXBLZXlTaGFyZTogSUJsc0tleVBhaXIsXG4gICAgYml0Z29LZXljaGFpbjogS2V5Y2hhaW4sXG4gICAgcGFzc3BocmFzZTogc3RyaW5nXG4gICk6IFByb21pc2U8S2V5Y2hhaW4+IHtcbiAgICBjb25zdCBiaXRnb0tleVNoYXJlcyA9IGJpdGdvS2V5Y2hhaW4ua2V5U2hhcmVzO1xuICAgIGlmICghYml0Z29LZXlTaGFyZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBiaXRnbyBrZXlzaGFyZXMnKTtcbiAgICB9XG5cbiAgICBjb25zdCBiaXRHb1RvQmFja3VwU2hhcmUgPSBiaXRnb0tleVNoYXJlcy5maW5kKChrZXlTaGFyZSkgPT4ga2V5U2hhcmUuZnJvbSA9PT0gJ2JpdGdvJyAmJiBrZXlTaGFyZS50byA9PT0gJ2JhY2t1cCcpO1xuICAgIGlmICghYml0R29Ub0JhY2t1cFNoYXJlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgQml0R28gdG8gVXNlciBrZXkgc2hhcmUnKTtcbiAgICB9XG5cbiAgICBpZiAoIXVzZXJLZXlTaGFyZS5zZWNyZXRTaGFyZXMgfHwgIXVzZXJLZXlTaGFyZS5wdWIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB1c2VyIGtleSBzaGFyZXMnKTtcbiAgICB9XG4gICAgaWYgKCFiYWNrdXBLZXlTaGFyZS5zZWNyZXRTaGFyZXMgfHwgIWJhY2t1cEtleVNoYXJlLnB1Yikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGJhY2t1cCBrZXkgc2hhcmVzJyk7XG4gICAgfVxuXG4gICAgY29uc3QgYml0R29Ub0JhY2t1cFByaXZhdGVTaGFyZSA9IGF3YWl0IHRoaXMuZGVjcnlwdFByaXZhdGVTaGFyZShiaXRHb1RvQmFja3VwU2hhcmUucHJpdmF0ZVNoYXJlLCB1c2VyR3BnS2V5KTtcblxuICAgIGNvbnN0IGJhY2t1cFByaXZhdGVLZXkgPSBCbHNLZXlQYWlyQ2xhc3MuYWdncmVnYXRlUHJ2a2V5cyhbXG4gICAgICB1c2VyS2V5U2hhcmUuc2VjcmV0U2hhcmVzWzFdLFxuICAgICAgYmFja3VwS2V5U2hhcmUuc2VjcmV0U2hhcmVzWzFdLFxuICAgICAgYml0R29Ub0JhY2t1cFByaXZhdGVTaGFyZSxcbiAgICBdKTtcbiAgICBjb25zdCBjb21tb25QdWIgPSBCbHNLZXlQYWlyQ2xhc3MuYWdncmVnYXRlUHVia2V5cyhbXG4gICAgICB1c2VyS2V5U2hhcmUucHViLFxuICAgICAgYmFja3VwS2V5U2hhcmUucHViLFxuICAgICAgYml0R29Ub0JhY2t1cFNoYXJlLnB1YmxpY1NoYXJlLFxuICAgIF0pO1xuICAgIGlmIChjb21tb25QdWIgIT09IGJpdGdvS2V5Y2hhaW4uY29tbW9uUHViKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBjcmVhdGUgYmFja3VwIGtleWNoYWluIC0gY29tbW9uUHVicyBkbyBub3QgbWF0Y2guJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYmFzZUNvaW4ua2V5Y2hhaW5zKCkuY3JlYXRlQmFja3VwKHtcbiAgICAgIHNvdXJjZTogJ2JhY2t1cCcsXG4gICAgICBrZXlUeXBlOiAnYmxzZGtnJyxcbiAgICAgIGNvbW1vblB1YjogY29tbW9uUHViLFxuICAgICAgcHJ2OiBiYWNrdXBQcml2YXRlS2V5LFxuICAgICAgZW5jcnlwdGVkUHJ2OiB0aGlzLmJpdGdvLmVuY3J5cHQoeyBpbnB1dDogYmFja3VwUHJpdmF0ZUtleSwgcGFzc3dvcmQ6IHBhc3NwaHJhc2UgfSksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIEtleWNoYWluIGNvbnRhaW5pbmcgQml0R28ncyBCTFMtREtHIHNpZ25pbmcgbWF0ZXJpYWxzLlxuICAgKlxuICAgKiBAcGFyYW0gdXNlckdwZ0tleSAtIGVwaGVtZXJhbCBHUEcga2V5IHRvIGVuY3J5cHQgLyBkZWNyeXB0IHNlbnNpdHZlIGRhdGEgZXhjaGFuZ2VkIGJldHdlZW4gdXNlciBhbmQgc2VydmVyXG4gICAqIEBwYXJhbSB1c2VyS2V5U2hhcmUgLSB1c2VyJ3MgQkxTLURLRyBrZXkgc2hhcmVcbiAgICogQHBhcmFtIGJhY2t1cEtleVNoYXJlIC0gYmFja3VwJ3MgQkxTLURLRyBrZXkgc2hhcmVcbiAgICovXG4gIGFzeW5jIGNyZWF0ZUJpdGdvS2V5Y2hhaW4oXG4gICAgdXNlckdwZ0tleTogU2VyaWFsaXplZEtleVBhaXI8c3RyaW5nPixcbiAgICB1c2VyS2V5U2hhcmU6IElCbHNLZXlQYWlyLFxuICAgIGJhY2t1cEtleVNoYXJlOiBJQmxzS2V5UGFpcixcbiAgICBlbnRlcnByaXNlPzogc3RyaW5nXG4gICk6IFByb21pc2U8S2V5Y2hhaW4+IHtcbiAgICBpZiAoIXVzZXJLZXlTaGFyZS5zZWNyZXRTaGFyZXMgfHwgIXVzZXJLZXlTaGFyZS5wdWIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB1c2VyIGtleSBzaGFyZXMnKTtcbiAgICB9XG4gICAgaWYgKCFiYWNrdXBLZXlTaGFyZS5zZWNyZXRTaGFyZXMgfHwgIWJhY2t1cEtleVNoYXJlLnB1Yikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGJhY2t1cCBrZXkgc2hhcmVzJyk7XG4gICAgfVxuXG4gICAgY29uc3QgdXNlclRvQml0Z29LZXlTaGFyZSA9IHtcbiAgICAgIHB1YmxpY1NoYXJlOiB1c2VyS2V5U2hhcmUucHViLFxuICAgICAgcHJpdmF0ZVNoYXJlOiB1c2VyS2V5U2hhcmUuc2VjcmV0U2hhcmVzWzJdLFxuICAgIH07XG5cbiAgICBjb25zdCBiYWNrdXBUb0JpdGdvS2V5U2hhcmUgPSB7XG4gICAgICBwdWJsaWNTaGFyZTogYmFja3VwS2V5U2hhcmUucHViLFxuICAgICAgcHJpdmF0ZVNoYXJlOiBiYWNrdXBLZXlTaGFyZS5zZWNyZXRTaGFyZXNbMl0sXG4gICAgfTtcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLmNyZWF0ZUJpdGdvS2V5Y2hhaW5JbldQKFxuICAgICAgdXNlckdwZ0tleSxcbiAgICAgIHVzZXJUb0JpdGdvS2V5U2hhcmUsXG4gICAgICBiYWNrdXBUb0JpdGdvS2V5U2hhcmUsXG4gICAgICAnYmxzZGtnJyxcbiAgICAgIGVudGVycHJpc2VcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgVXNlciwgQmFja3VwLCBhbmQgQml0R28gQkxTLURLRyBLZXljaGFpbnMuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMucGFzc3BocmFzZSAtIHBhc3NwaHJhc2UgdXNlZCB0byBlbmNyeXB0IHNpZ25pbmcgbWF0ZXJpYWxzIGNyZWF0ZWQgZm9yIFVzZXIgYW5kIEJhY2t1cFxuICAgKi9cbiAgYXN5bmMgY3JlYXRlS2V5Y2hhaW5zKHBhcmFtczoge1xuICAgIHBhc3NwaHJhc2U6IHN0cmluZztcbiAgICBlbnRlcnByaXNlPzogc3RyaW5nO1xuICAgIG9yaWdpbmFsUGFzc2NvZGVFbmNyeXB0aW9uQ29kZT86IHN0cmluZztcbiAgfSk6IFByb21pc2U8S2V5Y2hhaW5zVHJpcGxldD4ge1xuICAgIGNvbnN0IHVzZXJLZXlTaGFyZSA9IHRoaXMuYmFzZUNvaW4uZ2VuZXJhdGVLZXlQYWlyKCk7XG4gICAgY29uc3QgYmFja3VwS2V5U2hhcmUgPSB0aGlzLmJhc2VDb2luLmdlbmVyYXRlS2V5UGFpcigpO1xuXG4gICAgY29uc3QgcmFuZG9tSGV4U3RyaW5nID0gcmFuZG9tQnl0ZXMoMTIpLnRvU3RyaW5nKCdoZXgnKTtcblxuICAgIGNvbnN0IHVzZXJHcGdLZXkgPSBhd2FpdCBnZW5lcmF0ZUtleSh7XG4gICAgICB1c2VySURzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiByYW5kb21IZXhTdHJpbmcsXG4gICAgICAgICAgZW1haWw6IGAke3JhbmRvbUhleFN0cmluZ31AJHtyYW5kb21IZXhTdHJpbmd9LmNvbWAsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgY29uc3QgYml0Z29LZXljaGFpbiA9IGF3YWl0IHRoaXMuY3JlYXRlQml0Z29LZXljaGFpbih1c2VyR3BnS2V5LCB1c2VyS2V5U2hhcmUsIGJhY2t1cEtleVNoYXJlLCBwYXJhbXMuZW50ZXJwcmlzZSk7XG4gICAgY29uc3QgdXNlcktleWNoYWluUHJvbWlzZSA9IHRoaXMuY3JlYXRlVXNlcktleWNoYWluKFxuICAgICAgdXNlckdwZ0tleSxcbiAgICAgIHVzZXJLZXlTaGFyZSxcbiAgICAgIGJhY2t1cEtleVNoYXJlLFxuICAgICAgYml0Z29LZXljaGFpbixcbiAgICAgIHBhcmFtcy5wYXNzcGhyYXNlLFxuICAgICAgcGFyYW1zLm9yaWdpbmFsUGFzc2NvZGVFbmNyeXB0aW9uQ29kZVxuICAgICk7XG4gICAgY29uc3QgYmFja3VwS2V5Y2hhaW5Qcm9taXNlID0gdGhpcy5jcmVhdGVCYWNrdXBLZXljaGFpbihcbiAgICAgIHVzZXJHcGdLZXksXG4gICAgICB1c2VyS2V5U2hhcmUsXG4gICAgICBiYWNrdXBLZXlTaGFyZSxcbiAgICAgIGJpdGdvS2V5Y2hhaW4sXG4gICAgICBwYXJhbXMucGFzc3BocmFzZVxuICAgICk7XG4gICAgY29uc3QgW3VzZXJLZXljaGFpbiwgYmFja3VwS2V5Y2hhaW5dID0gYXdhaXQgUHJvbWlzZS5hbGwoW3VzZXJLZXljaGFpblByb21pc2UsIGJhY2t1cEtleWNoYWluUHJvbWlzZV0pO1xuXG4gICAgLy8gY3JlYXRlIHdhbGxldFxuICAgIGNvbnN0IGtleWNoYWlucyA9IHtcbiAgICAgIHVzZXJLZXljaGFpbixcbiAgICAgIGJhY2t1cEtleWNoYWluLFxuICAgICAgYml0Z29LZXljaGFpbixcbiAgICB9O1xuXG4gICAgcmV0dXJuIGtleWNoYWlucztcbiAgfVxufVxuIl19
@@ -0,0 +1,14 @@
1
+ import { SerializedKeyPair } from 'openpgp';
2
+ import { IBlsKeyPair, KeychainsTriplet } from '../baseCoin';
3
+ import { Keychain } from '../keychain';
4
+ export interface IBlsUtils {
5
+ createUserKeychain(userGpgKey: SerializedKeyPair<string>, userKeyShare: IBlsKeyPair, backupKeyShare: IBlsKeyPair, bitgoKeychain: Keychain, passphrase: string, originalPasscodeEncryptionCode: string): Promise<Keychain>;
6
+ createBackupKeychain(userGpgKey: SerializedKeyPair<string>, userKeyShare: IBlsKeyPair, backupKeyShare: IBlsKeyPair, bitgoKeychain: Keychain, passphrase: string): Promise<Keychain>;
7
+ createBitgoKeychain(userGpgKey: SerializedKeyPair<string>, userKeyShare: IBlsKeyPair, backupKeyShare: IBlsKeyPair, enterprise: string): Promise<Keychain>;
8
+ createKeychains(params: {
9
+ passphrase: string;
10
+ enterprise?: string;
11
+ originalPasscodeEncryptionCode?: string;
12
+ }): Promise<KeychainsTriplet>;
13
+ }
14
+ //# sourceMappingURL=iBlsUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iBlsUtils.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/utils/iBlsUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,MAAM,WAAW,SAAS;IACxB,kBAAkB,CAChB,UAAU,EAAE,iBAAiB,CAAC,MAAM,CAAC,EACrC,YAAY,EAAE,WAAW,EACzB,cAAc,EAAE,WAAW,EAC3B,aAAa,EAAE,QAAQ,EACvB,UAAU,EAAE,MAAM,EAClB,8BAA8B,EAAE,MAAM,GACrC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACrB,oBAAoB,CAClB,UAAU,EAAE,iBAAiB,CAAC,MAAM,CAAC,EACrC,YAAY,EAAE,WAAW,EACzB,cAAc,EAAE,WAAW,EAC3B,aAAa,EAAE,QAAQ,EACvB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,QAAQ,CAAC,CAAC;IACrB,mBAAmB,CACjB,UAAU,EAAE,iBAAiB,CAAC,MAAM,CAAC,EACrC,YAAY,EAAE,WAAW,EACzB,cAAc,EAAE,WAAW,EAC3B,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,QAAQ,CAAC,CAAC;IACrB,eAAe,CAAC,MAAM,EAAE;QACtB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,8BAA8B,CAAC,EAAE,MAAM,CAAC;KACzC,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;CAC/B"}