@bitgo/sdk-core 1.1.0-rc.2 → 1.1.0-rc.3

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 (269) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/src/account-lib/baseCoin/iface.d.ts +2 -9
  3. package/dist/src/account-lib/baseCoin/iface.d.ts.map +1 -1
  4. package/dist/src/account-lib/baseCoin/iface.js +1 -1
  5. package/dist/src/account-lib/index.d.ts +1 -0
  6. package/dist/src/account-lib/index.d.ts.map +1 -1
  7. package/dist/src/account-lib/index.js +2 -1
  8. package/dist/src/account-lib/mpc/curves/baseCurve.d.ts +19 -0
  9. package/dist/src/account-lib/mpc/curves/baseCurve.d.ts.map +1 -0
  10. package/dist/src/account-lib/mpc/curves/baseCurve.js +6 -0
  11. package/dist/src/account-lib/mpc/curves/ed25519.d.ts +17 -0
  12. package/dist/src/account-lib/mpc/curves/ed25519.d.ts.map +1 -0
  13. package/dist/src/account-lib/mpc/curves/ed25519.js +57 -0
  14. package/dist/src/account-lib/mpc/curves/index.d.ts +6 -0
  15. package/dist/src/account-lib/mpc/curves/index.d.ts.map +1 -0
  16. package/dist/src/account-lib/mpc/curves/index.js +8 -0
  17. package/dist/src/account-lib/mpc/curves/secp256k1.d.ts +16 -0
  18. package/dist/src/account-lib/mpc/curves/secp256k1.d.ts.map +1 -0
  19. package/dist/src/account-lib/mpc/curves/secp256k1.js +66 -0
  20. package/dist/src/account-lib/mpc/hdTree.d.ts +24 -0
  21. package/dist/src/account-lib/mpc/hdTree.d.ts.map +1 -0
  22. package/dist/src/account-lib/mpc/hdTree.js +94 -0
  23. package/dist/src/account-lib/mpc/index.d.ts +7 -0
  24. package/dist/src/account-lib/mpc/index.d.ts.map +1 -0
  25. package/dist/src/account-lib/mpc/index.js +23 -0
  26. package/dist/src/account-lib/mpc/shamir.d.ts +26 -0
  27. package/dist/src/account-lib/mpc/shamir.d.ts.map +1 -0
  28. package/dist/src/account-lib/mpc/shamir.js +86 -0
  29. package/dist/src/account-lib/mpc/tss/eddsa/eddsa.d.ts +29 -0
  30. package/dist/src/account-lib/mpc/tss/eddsa/eddsa.d.ts.map +1 -0
  31. package/dist/src/account-lib/mpc/tss/eddsa/eddsa.js +273 -0
  32. package/dist/src/account-lib/mpc/tss/eddsa/index.d.ts +4 -0
  33. package/dist/src/account-lib/mpc/tss/eddsa/index.d.ts.map +1 -0
  34. package/dist/src/account-lib/mpc/tss/eddsa/index.js +30 -0
  35. package/dist/src/account-lib/mpc/tss/eddsa/types.d.ts +70 -0
  36. package/dist/src/account-lib/mpc/tss/eddsa/types.d.ts.map +1 -0
  37. package/dist/src/account-lib/mpc/tss/eddsa/types.js +3 -0
  38. package/dist/src/account-lib/mpc/tss/index.d.ts +5 -0
  39. package/dist/src/account-lib/mpc/tss/index.d.ts.map +1 -0
  40. package/dist/src/account-lib/mpc/tss/index.js +32 -0
  41. package/dist/src/account-lib/mpc/util.d.ts +8 -0
  42. package/dist/src/account-lib/mpc/util.d.ts.map +1 -0
  43. package/dist/src/account-lib/mpc/util.js +42 -0
  44. package/dist/src/api/bip32path.d.ts +24 -0
  45. package/dist/src/api/bip32path.d.ts.map +1 -0
  46. package/dist/src/api/bip32path.js +45 -0
  47. package/dist/src/api/index.d.ts +3 -0
  48. package/dist/src/api/index.d.ts.map +1 -0
  49. package/dist/src/{v2 → api}/index.js +2 -2
  50. package/dist/src/api/types.d.ts +20 -0
  51. package/dist/src/api/types.d.ts.map +1 -0
  52. package/dist/src/api/types.js +3 -0
  53. package/dist/src/bitgo/baseCoin/baseCoin.d.ts +230 -0
  54. package/dist/src/bitgo/baseCoin/baseCoin.d.ts.map +1 -0
  55. package/dist/src/bitgo/baseCoin/baseCoin.js +292 -0
  56. package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts +257 -0
  57. package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts.map +1 -0
  58. package/dist/src/bitgo/baseCoin/iBaseCoin.js +3 -0
  59. package/dist/src/bitgo/baseCoin/index.d.ts +3 -0
  60. package/dist/src/bitgo/baseCoin/index.d.ts.map +1 -0
  61. package/dist/src/bitgo/baseCoin/index.js +15 -0
  62. package/dist/src/bitgo/bip32util.d.ts +17 -0
  63. package/dist/src/bitgo/bip32util.d.ts.map +1 -0
  64. package/dist/src/bitgo/bip32util.js +59 -0
  65. package/dist/src/bitgo/bitcoin.d.ts +16 -0
  66. package/dist/src/bitgo/bitcoin.d.ts.map +1 -0
  67. package/dist/src/bitgo/bitcoin.js +52 -0
  68. package/dist/src/bitgo/bitgoBase.d.ts +23 -0
  69. package/dist/src/bitgo/bitgoBase.d.ts.map +1 -0
  70. package/dist/src/bitgo/bitgoBase.js +3 -0
  71. package/dist/src/bitgo/ecdh.d.ts +24 -0
  72. package/dist/src/bitgo/ecdh.d.ts.map +1 -0
  73. package/dist/src/bitgo/ecdh.js +80 -0
  74. package/dist/src/bitgo/enterprise/enterprise.d.ts +64 -0
  75. package/dist/src/bitgo/enterprise/enterprise.d.ts.map +1 -0
  76. package/dist/src/bitgo/enterprise/enterprise.js +120 -0
  77. package/dist/src/bitgo/enterprise/enterprises.d.ts +25 -0
  78. package/dist/src/bitgo/enterprise/enterprises.d.ts.map +1 -0
  79. package/dist/src/bitgo/enterprise/enterprises.js +70 -0
  80. package/dist/src/bitgo/enterprise/iEnterprise.d.ts +15 -0
  81. package/dist/src/bitgo/enterprise/iEnterprise.d.ts.map +1 -0
  82. package/dist/src/bitgo/enterprise/iEnterprise.js +3 -0
  83. package/dist/src/bitgo/enterprise/iEnterprises.d.ts +10 -0
  84. package/dist/src/bitgo/enterprise/iEnterprises.d.ts.map +1 -0
  85. package/dist/src/bitgo/enterprise/iEnterprises.js +3 -0
  86. package/dist/src/bitgo/enterprise/index.d.ts +5 -0
  87. package/dist/src/bitgo/enterprise/index.d.ts.map +1 -0
  88. package/dist/src/bitgo/enterprise/index.js +17 -0
  89. package/dist/src/{v2 → bitgo}/environments.d.ts +0 -0
  90. package/dist/src/bitgo/environments.d.ts.map +1 -0
  91. package/dist/src/bitgo/environments.js +142 -0
  92. package/dist/src/bitgo/errors.d.ts +11 -0
  93. package/dist/src/bitgo/errors.d.ts.map +1 -0
  94. package/dist/src/bitgo/errors.js +23 -0
  95. package/dist/src/bitgo/index.d.ts +24 -0
  96. package/dist/src/bitgo/index.d.ts.map +1 -0
  97. package/dist/src/bitgo/index.js +49 -0
  98. package/dist/src/bitgo/internal/index.d.ts +3 -0
  99. package/dist/src/bitgo/internal/index.d.ts.map +1 -0
  100. package/dist/src/bitgo/internal/index.js +15 -0
  101. package/dist/src/bitgo/internal/internal.d.ts +19 -0
  102. package/dist/src/bitgo/internal/internal.d.ts.map +1 -0
  103. package/dist/src/bitgo/internal/internal.js +33 -0
  104. package/dist/src/bitgo/internal/keycard.d.ts +33 -0
  105. package/dist/src/bitgo/internal/keycard.d.ts.map +1 -0
  106. package/dist/src/bitgo/internal/keycard.js +304 -0
  107. package/dist/src/bitgo/keychain/iKeychains.d.ts +118 -0
  108. package/dist/src/bitgo/keychain/iKeychains.d.ts.map +1 -0
  109. package/dist/src/bitgo/keychain/iKeychains.js +10 -0
  110. package/dist/src/bitgo/keychain/index.d.ts +3 -0
  111. package/dist/src/bitgo/keychain/index.d.ts.map +1 -0
  112. package/dist/src/bitgo/keychain/index.js +15 -0
  113. package/dist/src/bitgo/keychain/keychains.d.ts +90 -0
  114. package/dist/src/bitgo/keychain/keychains.d.ts.map +1 -0
  115. package/dist/src/bitgo/keychain/keychains.js +280 -0
  116. package/dist/src/bitgo/market/iMarkets.d.ts +12 -0
  117. package/dist/src/bitgo/market/iMarkets.d.ts.map +1 -0
  118. package/dist/src/bitgo/market/iMarkets.js +3 -0
  119. package/dist/src/bitgo/market/index.d.ts +3 -0
  120. package/dist/src/bitgo/market/index.d.ts.map +1 -0
  121. package/dist/src/bitgo/market/index.js +15 -0
  122. package/dist/src/bitgo/market/markets.d.ts +29 -0
  123. package/dist/src/bitgo/market/markets.d.ts.map +1 -0
  124. package/dist/src/bitgo/market/markets.js +70 -0
  125. package/dist/src/bitgo/pendingApproval/iPendingApproval.d.ts +73 -0
  126. package/dist/src/bitgo/pendingApproval/iPendingApproval.d.ts.map +1 -0
  127. package/dist/src/bitgo/pendingApproval/iPendingApproval.js +28 -0
  128. package/dist/src/bitgo/pendingApproval/iPendingApprovals.d.ts +16 -0
  129. package/dist/src/bitgo/pendingApproval/iPendingApprovals.d.ts.map +1 -0
  130. package/dist/src/bitgo/pendingApproval/iPendingApprovals.js +3 -0
  131. package/dist/src/bitgo/pendingApproval/index.d.ts +5 -0
  132. package/dist/src/bitgo/pendingApproval/index.d.ts.map +1 -0
  133. package/dist/src/bitgo/pendingApproval/index.js +17 -0
  134. package/dist/src/bitgo/pendingApproval/pendingApproval.d.ts +99 -0
  135. package/dist/src/bitgo/pendingApproval/pendingApproval.d.ts.map +1 -0
  136. package/dist/src/bitgo/pendingApproval/pendingApproval.js +319 -0
  137. package/dist/src/bitgo/pendingApproval/pendingApprovals.d.ts +19 -0
  138. package/dist/src/bitgo/pendingApproval/pendingApprovals.d.ts.map +1 -0
  139. package/dist/src/bitgo/pendingApproval/pendingApprovals.js +76 -0
  140. package/dist/src/bitgo/recovery/index.d.ts +8 -0
  141. package/dist/src/bitgo/recovery/index.d.ts.map +1 -0
  142. package/dist/src/bitgo/recovery/index.js +3 -0
  143. package/dist/src/bitgo/trading/affirmation.d.ts +35 -0
  144. package/dist/src/bitgo/trading/affirmation.d.ts.map +1 -0
  145. package/dist/src/bitgo/trading/affirmation.js +53 -0
  146. package/dist/src/bitgo/trading/affirmations.d.ts +23 -0
  147. package/dist/src/bitgo/trading/affirmations.d.ts.map +1 -0
  148. package/dist/src/bitgo/trading/affirmations.js +45 -0
  149. package/dist/src/bitgo/trading/iAffirmation.d.ts +15 -0
  150. package/dist/src/bitgo/trading/iAffirmation.d.ts.map +1 -0
  151. package/dist/src/bitgo/trading/iAffirmation.js +13 -0
  152. package/dist/src/bitgo/trading/iAffirmations.d.ts +10 -0
  153. package/dist/src/bitgo/trading/iAffirmations.d.ts.map +1 -0
  154. package/dist/src/bitgo/trading/iAffirmations.js +3 -0
  155. package/dist/src/bitgo/trading/iSettlement.d.ts +25 -0
  156. package/dist/src/bitgo/trading/iSettlement.d.ts.map +1 -0
  157. package/dist/src/bitgo/trading/iSettlement.js +17 -0
  158. package/dist/src/bitgo/trading/iSettlements.d.ts +19 -0
  159. package/dist/src/bitgo/trading/iSettlements.d.ts.map +1 -0
  160. package/dist/src/bitgo/trading/iSettlements.js +3 -0
  161. package/dist/src/bitgo/trading/iTradingAccount.d.ts +41 -0
  162. package/dist/src/bitgo/trading/iTradingAccount.d.ts.map +1 -0
  163. package/dist/src/bitgo/trading/iTradingAccount.js +3 -0
  164. package/dist/src/bitgo/trading/iTradingPartner.d.ts +14 -0
  165. package/dist/src/bitgo/trading/iTradingPartner.d.ts.map +1 -0
  166. package/dist/src/bitgo/trading/iTradingPartner.js +17 -0
  167. package/dist/src/bitgo/trading/iTradingPartners.d.ts +15 -0
  168. package/dist/src/bitgo/trading/iTradingPartners.d.ts.map +1 -0
  169. package/dist/src/bitgo/trading/iTradingPartners.js +9 -0
  170. package/dist/src/bitgo/trading/index.d.ts +18 -0
  171. package/dist/src/bitgo/trading/index.d.ts.map +1 -0
  172. package/dist/src/bitgo/trading/index.js +30 -0
  173. package/dist/src/bitgo/trading/lock.d.ts +16 -0
  174. package/dist/src/bitgo/trading/lock.d.ts.map +1 -0
  175. package/dist/src/bitgo/trading/lock.js +12 -0
  176. package/dist/src/bitgo/trading/payload.d.ts +22 -0
  177. package/dist/src/bitgo/trading/payload.d.ts.map +1 -0
  178. package/dist/src/bitgo/trading/payload.js +3 -0
  179. package/dist/src/bitgo/trading/settlement.d.ts +16 -0
  180. package/dist/src/bitgo/trading/settlement.d.ts.map +1 -0
  181. package/dist/src/bitgo/trading/settlement.js +21 -0
  182. package/dist/src/bitgo/trading/settlements.d.ts +32 -0
  183. package/dist/src/bitgo/trading/settlements.d.ts.map +1 -0
  184. package/dist/src/bitgo/trading/settlements.js +61 -0
  185. package/dist/src/bitgo/trading/trade.d.ts +29 -0
  186. package/dist/src/bitgo/trading/trade.d.ts.map +1 -0
  187. package/dist/src/bitgo/trading/trade.js +11 -0
  188. package/dist/src/bitgo/trading/tradingAccount.d.ts +53 -0
  189. package/dist/src/bitgo/trading/tradingAccount.d.ts.map +1 -0
  190. package/dist/src/bitgo/trading/tradingAccount.js +127 -0
  191. package/dist/src/bitgo/trading/tradingPartner.d.ts +26 -0
  192. package/dist/src/bitgo/trading/tradingPartner.d.ts.map +1 -0
  193. package/dist/src/bitgo/trading/tradingPartner.js +31 -0
  194. package/dist/src/bitgo/trading/tradingPartners.d.ts +24 -0
  195. package/dist/src/bitgo/trading/tradingPartners.d.ts.map +1 -0
  196. package/dist/src/bitgo/trading/tradingPartners.js +32 -0
  197. package/dist/src/bitgo/tss.d.ts +127 -0
  198. package/dist/src/bitgo/tss.d.ts.map +1 -0
  199. package/dist/src/bitgo/tss.js +261 -0
  200. package/dist/src/{v2 → bitgo}/types.d.ts +0 -0
  201. package/dist/src/bitgo/types.d.ts.map +1 -0
  202. package/dist/src/{v2 → bitgo}/types.js +1 -1
  203. package/dist/src/bitgo/utils/abstractUtxoCoinUtil.d.ts +6 -0
  204. package/dist/src/bitgo/utils/abstractUtxoCoinUtil.d.ts.map +1 -0
  205. package/dist/src/bitgo/utils/abstractUtxoCoinUtil.js +30 -0
  206. package/dist/src/bitgo/utils/blsUtils.d.ts +51 -0
  207. package/dist/src/bitgo/utils/blsUtils.d.ts.map +1 -0
  208. package/dist/src/bitgo/utils/blsUtils.js +166 -0
  209. package/dist/src/bitgo/utils/iBlsUtils.d.ts +14 -0
  210. package/dist/src/bitgo/utils/iBlsUtils.d.ts.map +1 -0
  211. package/dist/src/bitgo/utils/iBlsUtils.js +3 -0
  212. package/dist/src/bitgo/utils/iTssUtils.d.ts +64 -0
  213. package/dist/src/bitgo/utils/iTssUtils.d.ts.map +1 -0
  214. package/dist/src/bitgo/utils/iTssUtils.js +10 -0
  215. package/dist/src/bitgo/utils/index.d.ts +12 -0
  216. package/dist/src/bitgo/utils/index.d.ts.map +1 -0
  217. package/dist/src/bitgo/utils/index.js +37 -0
  218. package/dist/src/bitgo/utils/mpcUtils.d.ts +31 -0
  219. package/dist/src/bitgo/utils/mpcUtils.d.ts.map +1 -0
  220. package/dist/src/bitgo/utils/mpcUtils.js +55 -0
  221. package/dist/src/bitgo/utils/opengpgUtils.d.ts +51 -0
  222. package/dist/src/bitgo/utils/opengpgUtils.d.ts.map +1 -0
  223. package/dist/src/bitgo/utils/opengpgUtils.js +136 -0
  224. package/dist/src/bitgo/utils/promise-utils.d.ts +5 -0
  225. package/dist/src/bitgo/utils/promise-utils.d.ts.map +1 -0
  226. package/dist/src/bitgo/utils/promise-utils.js +12 -0
  227. package/dist/src/bitgo/utils/tssUtils.d.ts +117 -0
  228. package/dist/src/bitgo/utils/tssUtils.d.ts.map +1 -0
  229. package/dist/src/bitgo/utils/tssUtils.js +348 -0
  230. package/dist/src/bitgo/utils/util.d.ts +77 -0
  231. package/dist/src/bitgo/utils/util.d.ts.map +1 -0
  232. package/dist/src/bitgo/utils/util.js +198 -0
  233. package/dist/src/bitgo/wallet/iWallet.d.ts +510 -0
  234. package/dist/src/bitgo/wallet/iWallet.d.ts.map +1 -0
  235. package/dist/src/bitgo/wallet/iWallet.js +3 -0
  236. package/dist/src/bitgo/wallet/iWallets.d.ts +105 -0
  237. package/dist/src/bitgo/wallet/iWallets.d.ts.map +1 -0
  238. package/dist/src/bitgo/wallet/iWallets.js +3 -0
  239. package/dist/src/bitgo/wallet/index.d.ts +5 -0
  240. package/dist/src/bitgo/wallet/index.d.ts.map +1 -0
  241. package/dist/src/bitgo/wallet/index.js +17 -0
  242. package/dist/src/bitgo/wallet/wallet.d.ts +650 -0
  243. package/dist/src/bitgo/wallet/wallet.d.ts.map +1 -0
  244. package/dist/src/bitgo/wallet/wallet.js +2024 -0
  245. package/dist/src/bitgo/wallet/wallets.d.ts +134 -0
  246. package/dist/src/bitgo/wallet/wallets.d.ts.map +1 -0
  247. package/dist/src/bitgo/wallet/wallets.js +605 -0
  248. package/dist/src/bitgo/webhook/iWebhooks.d.ts +26 -0
  249. package/dist/src/bitgo/webhook/iWebhooks.d.ts.map +1 -0
  250. package/dist/src/bitgo/webhook/iWebhooks.js +3 -0
  251. package/dist/src/bitgo/webhook/index.d.ts +3 -0
  252. package/dist/src/bitgo/webhook/index.d.ts.map +1 -0
  253. package/dist/src/bitgo/webhook/index.js +15 -0
  254. package/dist/src/bitgo/webhook/webhooks.d.ts +43 -0
  255. package/dist/src/bitgo/webhook/webhooks.d.ts.map +1 -0
  256. package/dist/src/bitgo/webhook/webhooks.js +102 -0
  257. package/dist/src/common.d.ts +1 -1
  258. package/dist/src/common.d.ts.map +1 -1
  259. package/dist/src/common.js +3 -3
  260. package/dist/src/index.d.ts +2 -1
  261. package/dist/src/index.d.ts.map +1 -1
  262. package/dist/src/index.js +3 -2
  263. package/dist/tsconfig.tsbuildinfo +2307 -213
  264. package/package.json +10 -4
  265. package/dist/src/v2/environments.d.ts.map +0 -1
  266. package/dist/src/v2/environments.js +0 -142
  267. package/dist/src/v2/index.d.ts +0 -3
  268. package/dist/src/v2/index.d.ts.map +0 -1
  269. package/dist/src/v2/types.d.ts.map +0 -1
@@ -0,0 +1,127 @@
1
+ /// <reference types="node" />
2
+ import { GShare, KeyShare, PShare, SignShare, UShare, YShare } from '../account-lib/mpc/tss';
3
+ import { BitGoBase } from './bitgoBase';
4
+ import { SignatureShareRecord, TxRequest } from './utils';
5
+ export declare type EncryptedYShare = {
6
+ i: number;
7
+ j: number;
8
+ publicShare: string;
9
+ encryptedPrivateShare: string;
10
+ };
11
+ export declare type DecryptableYShare = {
12
+ yShare: EncryptedYShare;
13
+ recipientPrivateArmor: string;
14
+ senderPublicArmor: string;
15
+ };
16
+ export declare type CombinedKey = {
17
+ commonKeychain: string;
18
+ signingMaterial: SigningMaterial;
19
+ };
20
+ export declare type SigningMaterial = {
21
+ uShare: UShare;
22
+ bitgoYShare: YShare;
23
+ backupYShare?: YShare;
24
+ userYShare?: YShare;
25
+ };
26
+ export declare enum ShareKeyPosition {
27
+ USER = 1,
28
+ BACKUP = 2,
29
+ BITGO = 3
30
+ }
31
+ /**
32
+ * Prepares a YShare to be exchanged with other key holders.
33
+ * Output is in a format that is usable within BitGo's ecosystem.
34
+ *
35
+ * @param params.keyShare - TSS key share of the party preparing exchange materials
36
+ * @param params.recipientIndex - index of the recipient (1, 2, or 3)
37
+ * @param params.recipientGpgPublicArmor - recipient's public gpg key in armor format
38
+ * @param params.senderGpgPrivateArmor - sender's private gpg key in armor format
39
+ * @returns { EncryptedYShare } encrypted Y Share
40
+ */
41
+ export declare function encryptYShare(params: {
42
+ keyShare: KeyShare;
43
+ recipientIndex: number;
44
+ recipientGpgPublicArmor: string;
45
+ senderGpgPrivateArmor: string;
46
+ }): Promise<EncryptedYShare>;
47
+ /**
48
+ * Combines YShares to combine the final TSS key
49
+ * This can only be used to create the User or Backup key since it requires the common keychain from BitGo first
50
+ *
51
+ * @param params.keyShare - TSS key share
52
+ * @param params.encryptedYShares - encrypted YShares with information on how to decrypt
53
+ * @param params.commonKeychain - expected common keychain of the combined key
54
+ * @returns {CombinedKey} combined TSS key
55
+ */
56
+ export declare function createCombinedKey(params: {
57
+ keyShare: KeyShare;
58
+ encryptedYShares: DecryptableYShare[];
59
+ commonKeychain: string;
60
+ }): Promise<CombinedKey>;
61
+ /**
62
+ * Creates the User Sign Share containing the User XShare and the User to Bitgo RShare
63
+ *
64
+ * @param {Buffer} signablePayload - the signablePayload as a buffer
65
+ * @param {PShare} pShare - User's signing material
66
+ * @returns {Promise<SignShare>} - User Sign Share
67
+ */
68
+ export declare function createUserSignShare(signablePayload: Buffer, pShare: PShare): Promise<SignShare>;
69
+ /**
70
+ * Creates the User to Bitgo GShare
71
+ *
72
+ * @param {SignShare} userSignShare - the User Sign Share
73
+ * @param {SignatureShareRecord} bitgoToUserRShare - the Bitgo to User RShare
74
+ * @param {YShare} backupToUserYShare - the backup key Y share received during wallet creation
75
+ * @param {Buffer} signablePayload - the signable payload from a tx
76
+ * @returns {Promise<GShare>} - the User to Bitgo GShare
77
+ */
78
+ export declare function createUserToBitGoGShare(userSignShare: SignShare, bitgoToUserRShare: SignatureShareRecord, backupToUserYShare: YShare, bitgoToUserYShare: YShare, signablePayload: Buffer): Promise<GShare>;
79
+ /**
80
+ * Sends the User to Bitgo RShare to Bitgo
81
+ * @param {BitGoBase} bitgo - the bitgo instance
82
+ * @param {String} walletId - the wallet id
83
+ * @param {String} txRequestId - the txRequest Id
84
+ * @param {SignShare} userSignShare - the user Sign Share
85
+ * @param {String} encryptedSignerShare - signer share encrypted to bitgo key
86
+ * @returns {Promise<void>}
87
+ */
88
+ export declare function offerUserToBitgoRShare(bitgo: BitGoBase, walletId: string, txRequestId: string, userSignShare: SignShare, encryptedSignerShare: string): Promise<void>;
89
+ /**
90
+ * Gets the Bitgo to User RShare from Bitgo
91
+ *
92
+ * @param {BitGoBase} bitgo - the bitgo instance
93
+ * @param {String} walletId - the wallet id
94
+ * @param {String} txRequestId - the txRequest Id
95
+ * @returns {Promise<SignatureShareRecord>} - a Signature Share
96
+ */
97
+ export declare function getBitgoToUserRShare(bitgo: BitGoBase, walletId: string, txRequestId: string): Promise<SignatureShareRecord>;
98
+ /**
99
+ * Sends the User to Bitgo GShare to Bitgo
100
+ *
101
+ * @param {BitGoBase} bitgo - the bitgo instance
102
+ * @param {String} walletId - the wallet id
103
+ * @param {String} txRequestId - the txRequest Id
104
+ * @param {GShare} userToBitgoGShare - the User to Bitgo GShare
105
+ * @returns {Promise<void>}
106
+ */
107
+ export declare function sendUserToBitgoGShare(bitgo: BitGoBase, walletId: string, txRequestId: string, userToBitgoGShare: GShare): Promise<void>;
108
+ /**
109
+ * Gets the latest Tx Request by id
110
+ *
111
+ * @param {BitGoBase} bitgo - the bitgo instance
112
+ * @param {String} walletId - the wallet id
113
+ * @param {String} txRequestId - the txRequest Id
114
+ * @returns {Promise<TxRequest>}
115
+ */
116
+ export declare function getTxRequest(bitgo: BitGoBase, walletId: string, txRequestId: string): Promise<TxRequest>;
117
+ /**
118
+ * Sends a Signature Share
119
+ *
120
+ * @param {BitGoBase} bitgo - the bitgo instance
121
+ * @param {String} walletId - the wallet id *
122
+ * @param {String} txRequestId - the txRequest Id
123
+ * @param {SignatureShareRecord} signatureShare - a Signature Share
124
+ * @returns {Promise<SignatureShareRecord>} - a Signature Share
125
+ */
126
+ export declare function sendSignatureShare(bitgo: BitGoBase, walletId: string, txRequestId: string, signatureShare: SignatureShareRecord, signerShare?: string): Promise<SignatureShareRecord>;
127
+ //# sourceMappingURL=tss.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tss.d.ts","sourceRoot":"","sources":["../../../src/bitgo/tss.ts"],"names":[],"mappings":"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"}
@@ -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
File without changes
@@ -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"}
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdjIvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIFYxTmV0d29yayA9ICdiaXRjb2luJyB8ICd0ZXN0bmV0JztcbiJdfQ==
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYml0Z28vdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIFYxTmV0d29yayA9ICdiaXRjb2luJyB8ICd0ZXN0bmV0JztcbiJdfQ==
@@ -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"}