@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,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"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaUJsc1V0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3V0aWxzL2lCbHNVdGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2VyaWFsaXplZEtleVBhaXIgfSBmcm9tICdvcGVucGdwJztcbmltcG9ydCB7IElCbHNLZXlQYWlyLCBLZXljaGFpbnNUcmlwbGV0IH0gZnJvbSAnLi4vYmFzZUNvaW4nO1xuaW1wb3J0IHsgS2V5Y2hhaW4gfSBmcm9tICcuLi9rZXljaGFpbic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUJsc1V0aWxzIHtcbiAgY3JlYXRlVXNlcktleWNoYWluKFxuICAgIHVzZXJHcGdLZXk6IFNlcmlhbGl6ZWRLZXlQYWlyPHN0cmluZz4sXG4gICAgdXNlcktleVNoYXJlOiBJQmxzS2V5UGFpcixcbiAgICBiYWNrdXBLZXlTaGFyZTogSUJsc0tleVBhaXIsXG4gICAgYml0Z29LZXljaGFpbjogS2V5Y2hhaW4sXG4gICAgcGFzc3BocmFzZTogc3RyaW5nLFxuICAgIG9yaWdpbmFsUGFzc2NvZGVFbmNyeXB0aW9uQ29kZTogc3RyaW5nXG4gICk6IFByb21pc2U8S2V5Y2hhaW4+O1xuICBjcmVhdGVCYWNrdXBLZXljaGFpbihcbiAgICB1c2VyR3BnS2V5OiBTZXJpYWxpemVkS2V5UGFpcjxzdHJpbmc+LFxuICAgIHVzZXJLZXlTaGFyZTogSUJsc0tleVBhaXIsXG4gICAgYmFja3VwS2V5U2hhcmU6IElCbHNLZXlQYWlyLFxuICAgIGJpdGdvS2V5Y2hhaW46IEtleWNoYWluLFxuICAgIHBhc3NwaHJhc2U6IHN0cmluZ1xuICApOiBQcm9taXNlPEtleWNoYWluPjtcbiAgY3JlYXRlQml0Z29LZXljaGFpbihcbiAgICB1c2VyR3BnS2V5OiBTZXJpYWxpemVkS2V5UGFpcjxzdHJpbmc+LFxuICAgIHVzZXJLZXlTaGFyZTogSUJsc0tleVBhaXIsXG4gICAgYmFja3VwS2V5U2hhcmU6IElCbHNLZXlQYWlyLFxuICAgIGVudGVycHJpc2U6IHN0cmluZ1xuICApOiBQcm9taXNlPEtleWNoYWluPjtcbiAgY3JlYXRlS2V5Y2hhaW5zKHBhcmFtczoge1xuICAgIHBhc3NwaHJhc2U6IHN0cmluZztcbiAgICBlbnRlcnByaXNlPzogc3RyaW5nO1xuICAgIG9yaWdpbmFsUGFzc2NvZGVFbmNyeXB0aW9uQ29kZT86IHN0cmluZztcbiAgfSk6IFByb21pc2U8S2V5Y2hhaW5zVHJpcGxldD47XG59XG4iXX0=
@@ -0,0 +1,64 @@
1
+ import type { SerializedKeyPair } from 'openpgp';
2
+ import { KeyShare } from '../../account-lib/mpc/tss';
3
+ import { IRequestTracer } from '../../api';
4
+ import { KeychainsTriplet } from '../baseCoin';
5
+ import { Keychain } from '../keychain';
6
+ import { Memo } from '../wallet';
7
+ export interface PrebuildTransactionWithIntentOptions {
8
+ reqId: IRequestTracer;
9
+ intentType: string;
10
+ sequenceId?: string;
11
+ recipients: {
12
+ address: string;
13
+ amount: string | number;
14
+ }[];
15
+ comment?: string;
16
+ memo?: Memo;
17
+ tokenName?: string;
18
+ nonce?: string;
19
+ }
20
+ export interface TxRequest {
21
+ txRequestId: string;
22
+ unsignedTxs: {
23
+ serializedTxHex: string;
24
+ signableHex: string;
25
+ feeInfo?: {
26
+ fee: number;
27
+ feeString: string;
28
+ };
29
+ derivationPath: string;
30
+ }[];
31
+ signatureShares?: SignatureShareRecord[];
32
+ apiVersion?: string;
33
+ }
34
+ export declare enum SignatureShareType {
35
+ USER = "user",
36
+ BACKUP = "backup",
37
+ BITGO = "bitgo"
38
+ }
39
+ export interface SignatureShareRecord {
40
+ from: SignatureShareType;
41
+ to: SignatureShareType;
42
+ share: string;
43
+ }
44
+ export interface ITssUtils {
45
+ createUserKeychain(userGpgKey: SerializedKeyPair<string>, userKeyShare: KeyShare, backupKeyShare: KeyShare, bitgoKeychain: Keychain, passphrase: string, originalPasscodeEncryptionCode: string): Promise<Keychain>;
46
+ createBackupKeychain(userGpgKey: SerializedKeyPair<string>, userKeyShare: KeyShare, backupKeyShare: KeyShare, bitgoKeychain: Keychain, passphrase: string): Promise<Keychain>;
47
+ createBitgoKeychain(userGpgKey: SerializedKeyPair<string>, userKeyShare: KeyShare, backupKeyShare: KeyShare, enterprise: string): Promise<Keychain>;
48
+ createKeychains(params: {
49
+ passphrase: string;
50
+ enterprise?: string;
51
+ originalPasscodeEncryptionCode?: string;
52
+ }): Promise<KeychainsTriplet>;
53
+ signTxRequest(params: {
54
+ txRequest: string | TxRequest;
55
+ prv: string;
56
+ reqId: IRequestTracer;
57
+ }): Promise<TxRequest>;
58
+ prebuildTxWithIntent(params: PrebuildTransactionWithIntentOptions, apiVersion?: string): Promise<TxRequest>;
59
+ deleteSignatureShares(txRequestId: string): Promise<SignatureShareRecord[]>;
60
+ sendTxRequest(txRequestId: string): Promise<any>;
61
+ recreateTxRequest(txRequestId: string, decryptedPrv: string, reqId: IRequestTracer): Promise<TxRequest>;
62
+ getTxRequest(txRequestId: string): Promise<TxRequest>;
63
+ }
64
+ //# sourceMappingURL=iTssUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iTssUtils.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/utils/iTssUtils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SignatureShareType = void 0;
4
+ var SignatureShareType;
5
+ (function (SignatureShareType) {
6
+ SignatureShareType["USER"] = "user";
7
+ SignatureShareType["BACKUP"] = "backup";
8
+ SignatureShareType["BITGO"] = "bitgo";
9
+ })(SignatureShareType = exports.SignatureShareType || (exports.SignatureShareType = {}));
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaVRzc1V0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3V0aWxzL2lUc3NVdGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFxQ0EsSUFBWSxrQkFJWDtBQUpELFdBQVksa0JBQWtCO0lBQzVCLG1DQUFhLENBQUE7SUFDYix1Q0FBaUIsQ0FBQTtJQUNqQixxQ0FBZSxDQUFBO0FBQ2pCLENBQUMsRUFKVyxrQkFBa0IsR0FBbEIsMEJBQWtCLEtBQWxCLDBCQUFrQixRQUk3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgU2VyaWFsaXplZEtleVBhaXIgfSBmcm9tICdvcGVucGdwJztcbmltcG9ydCB7IEtleVNoYXJlIH0gZnJvbSAnLi4vLi4vYWNjb3VudC1saWIvbXBjL3Rzcyc7XG5pbXBvcnQgeyBJUmVxdWVzdFRyYWNlciB9IGZyb20gJy4uLy4uL2FwaSc7XG5pbXBvcnQgeyBLZXljaGFpbnNUcmlwbGV0IH0gZnJvbSAnLi4vYmFzZUNvaW4nO1xuaW1wb3J0IHsgS2V5Y2hhaW4gfSBmcm9tICcuLi9rZXljaGFpbic7XG5pbXBvcnQgeyBNZW1vIH0gZnJvbSAnLi4vd2FsbGV0JztcblxuZXhwb3J0IGludGVyZmFjZSBQcmVidWlsZFRyYW5zYWN0aW9uV2l0aEludGVudE9wdGlvbnMge1xuICByZXFJZDogSVJlcXVlc3RUcmFjZXI7XG4gIGludGVudFR5cGU6IHN0cmluZztcbiAgc2VxdWVuY2VJZD86IHN0cmluZztcbiAgcmVjaXBpZW50czoge1xuICAgIGFkZHJlc3M6IHN0cmluZztcbiAgICBhbW91bnQ6IHN0cmluZyB8IG51bWJlcjtcbiAgfVtdO1xuICBjb21tZW50Pzogc3RyaW5nO1xuICBtZW1vPzogTWVtbztcbiAgdG9rZW5OYW1lPzogc3RyaW5nO1xuICBub25jZT86IHN0cmluZztcbn1cblxuLy8gY29tcGxldGUgd2l0aCBtb3JlIHByb3BzIGlmIG5lY2Nlc2FyeVxuZXhwb3J0IGludGVyZmFjZSBUeFJlcXVlc3Qge1xuICB0eFJlcXVlc3RJZDogc3RyaW5nO1xuICB1bnNpZ25lZFR4czoge1xuICAgIHNlcmlhbGl6ZWRUeEhleDogc3RyaW5nO1xuICAgIHNpZ25hYmxlSGV4OiBzdHJpbmc7XG4gICAgZmVlSW5mbz86IHtcbiAgICAgIGZlZTogbnVtYmVyO1xuICAgICAgZmVlU3RyaW5nOiBzdHJpbmc7XG4gICAgfTtcbiAgICBkZXJpdmF0aW9uUGF0aDogc3RyaW5nO1xuICB9W107XG4gIHNpZ25hdHVyZVNoYXJlcz86IFNpZ25hdHVyZVNoYXJlUmVjb3JkW107XG4gIGFwaVZlcnNpb24/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBlbnVtIFNpZ25hdHVyZVNoYXJlVHlwZSB7XG4gIFVTRVIgPSAndXNlcicsXG4gIEJBQ0tVUCA9ICdiYWNrdXAnLFxuICBCSVRHTyA9ICdiaXRnbycsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2lnbmF0dXJlU2hhcmVSZWNvcmQge1xuICBmcm9tOiBTaWduYXR1cmVTaGFyZVR5cGU7XG4gIHRvOiBTaWduYXR1cmVTaGFyZVR5cGU7XG4gIHNoYXJlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRzc1V0aWxzIHtcbiAgY3JlYXRlVXNlcktleWNoYWluKFxuICAgIHVzZXJHcGdLZXk6IFNlcmlhbGl6ZWRLZXlQYWlyPHN0cmluZz4sXG4gICAgdXNlcktleVNoYXJlOiBLZXlTaGFyZSxcbiAgICBiYWNrdXBLZXlTaGFyZTogS2V5U2hhcmUsXG4gICAgYml0Z29LZXljaGFpbjogS2V5Y2hhaW4sXG4gICAgcGFzc3BocmFzZTogc3RyaW5nLFxuICAgIG9yaWdpbmFsUGFzc2NvZGVFbmNyeXB0aW9uQ29kZTogc3RyaW5nXG4gICk6IFByb21pc2U8S2V5Y2hhaW4+O1xuICBjcmVhdGVCYWNrdXBLZXljaGFpbihcbiAgICB1c2VyR3BnS2V5OiBTZXJpYWxpemVkS2V5UGFpcjxzdHJpbmc+LFxuICAgIHVzZXJLZXlTaGFyZTogS2V5U2hhcmUsXG4gICAgYmFja3VwS2V5U2hhcmU6IEtleVNoYXJlLFxuICAgIGJpdGdvS2V5Y2hhaW46IEtleWNoYWluLFxuICAgIHBhc3NwaHJhc2U6IHN0cmluZ1xuICApOiBQcm9taXNlPEtleWNoYWluPjtcbiAgY3JlYXRlQml0Z29LZXljaGFpbihcbiAgICB1c2VyR3BnS2V5OiBTZXJpYWxpemVkS2V5UGFpcjxzdHJpbmc+LFxuICAgIHVzZXJLZXlTaGFyZTogS2V5U2hhcmUsXG4gICAgYmFja3VwS2V5U2hhcmU6IEtleVNoYXJlLFxuICAgIGVudGVycHJpc2U6IHN0cmluZ1xuICApOiBQcm9taXNlPEtleWNoYWluPjtcbiAgY3JlYXRlS2V5Y2hhaW5zKHBhcmFtczoge1xuICAgIHBhc3NwaHJhc2U6IHN0cmluZztcbiAgICBlbnRlcnByaXNlPzogc3RyaW5nO1xuICAgIG9yaWdpbmFsUGFzc2NvZGVFbmNyeXB0aW9uQ29kZT86IHN0cmluZztcbiAgfSk6IFByb21pc2U8S2V5Y2hhaW5zVHJpcGxldD47XG4gIHNpZ25UeFJlcXVlc3QocGFyYW1zOiB7IHR4UmVxdWVzdDogc3RyaW5nIHwgVHhSZXF1ZXN0OyBwcnY6IHN0cmluZzsgcmVxSWQ6IElSZXF1ZXN0VHJhY2VyIH0pOiBQcm9taXNlPFR4UmVxdWVzdD47XG4gIHByZWJ1aWxkVHhXaXRoSW50ZW50KHBhcmFtczogUHJlYnVpbGRUcmFuc2FjdGlvbldpdGhJbnRlbnRPcHRpb25zLCBhcGlWZXJzaW9uPzogc3RyaW5nKTogUHJvbWlzZTxUeFJlcXVlc3Q+O1xuICBkZWxldGVTaWduYXR1cmVTaGFyZXModHhSZXF1ZXN0SWQ6IHN0cmluZyk6IFByb21pc2U8U2lnbmF0dXJlU2hhcmVSZWNvcmRbXT47XG4gIHNlbmRUeFJlcXVlc3QodHhSZXF1ZXN0SWQ6IHN0cmluZyk6IFByb21pc2U8YW55PjtcbiAgcmVjcmVhdGVUeFJlcXVlc3QodHhSZXF1ZXN0SWQ6IHN0cmluZywgZGVjcnlwdGVkUHJ2OiBzdHJpbmcsIHJlcUlkOiBJUmVxdWVzdFRyYWNlcik6IFByb21pc2U8VHhSZXF1ZXN0PjtcbiAgZ2V0VHhSZXF1ZXN0KHR4UmVxdWVzdElkOiBzdHJpbmcpOiBQcm9taXNlPFR4UmVxdWVzdD47XG59XG4iXX0=
@@ -0,0 +1,12 @@
1
+ import * as openpgpUtils from './opengpgUtils';
2
+ export * from './abstractUtxoCoinUtil';
3
+ export * from './blsUtils';
4
+ export * from './iBlsUtils';
5
+ export * from './iTssUtils';
6
+ export * from './mpcUtils';
7
+ export * from './opengpgUtils';
8
+ export * from './promise-utils';
9
+ export * from './tssUtils';
10
+ export * from './util';
11
+ export { openpgpUtils };
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,YAAY,MAAM,gBAAgB,CAAC;AAE/C,cAAc,wBAAwB,CAAC;AACvC,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,QAAQ,CAAC;AAEvB,OAAO,EAAE,YAAY,EAAE,CAAC"}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
21
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
22
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
23
+ };
24
+ Object.defineProperty(exports, "__esModule", { value: true });
25
+ exports.openpgpUtils = void 0;
26
+ const openpgpUtils = __importStar(require("./opengpgUtils"));
27
+ exports.openpgpUtils = openpgpUtils;
28
+ __exportStar(require("./abstractUtxoCoinUtil"), exports);
29
+ __exportStar(require("./blsUtils"), exports);
30
+ __exportStar(require("./iBlsUtils"), exports);
31
+ __exportStar(require("./iTssUtils"), exports);
32
+ __exportStar(require("./mpcUtils"), exports);
33
+ __exportStar(require("./opengpgUtils"), exports);
34
+ __exportStar(require("./promise-utils"), exports);
35
+ __exportStar(require("./tssUtils"), exports);
36
+ __exportStar(require("./util"), exports);
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYml0Z28vdXRpbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDZEQUErQztBQVl0QyxvQ0FBWTtBQVZyQix5REFBdUM7QUFDdkMsNkNBQTJCO0FBQzNCLDhDQUE0QjtBQUM1Qiw4Q0FBNEI7QUFDNUIsNkNBQTJCO0FBQzNCLGlEQUErQjtBQUMvQixrREFBZ0M7QUFDaEMsNkNBQTJCO0FBQzNCLHlDQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIG9wZW5wZ3BVdGlscyBmcm9tICcuL29wZW5ncGdVdGlscyc7XG5cbmV4cG9ydCAqIGZyb20gJy4vYWJzdHJhY3RVdHhvQ29pblV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9ibHNVdGlscyc7XG5leHBvcnQgKiBmcm9tICcuL2lCbHNVdGlscyc7XG5leHBvcnQgKiBmcm9tICcuL2lUc3NVdGlscyc7XG5leHBvcnQgKiBmcm9tICcuL21wY1V0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vb3BlbmdwZ1V0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vcHJvbWlzZS11dGlscyc7XG5leHBvcnQgKiBmcm9tICcuL3Rzc1V0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vdXRpbCc7XG5cbmV4cG9ydCB7IG9wZW5wZ3BVdGlscyB9O1xuIl19
@@ -0,0 +1,31 @@
1
+ /**
2
+ * @prettier
3
+ */
4
+ import { SerializedKeyPair } from 'openpgp';
5
+ import { IBaseCoin, KeychainsTriplet } from '../baseCoin';
6
+ import { BitGoBase } from '../bitgoBase';
7
+ import { Keychain, KeyType } from '../keychain';
8
+ export interface MpcKeyShare {
9
+ publicShare: string;
10
+ privateShare: string;
11
+ }
12
+ export declare abstract class MpcUtils {
13
+ protected bitgo: BitGoBase;
14
+ protected baseCoin: IBaseCoin;
15
+ constructor(bitgo: BitGoBase, baseCoin: IBaseCoin);
16
+ protected decryptPrivateShare(privateShare: string, userGpgKey: SerializedKeyPair<string>): Promise<string>;
17
+ protected createBitgoKeychainInWP(userGpgKey: SerializedKeyPair<string>, userKeyShare: MpcKeyShare, backupKeyShare: MpcKeyShare, keyType: KeyType, enterprise?: string): Promise<Keychain>;
18
+ /**
19
+ * Creates User, Backup, and BitGo MPC Keychains.
20
+ *
21
+ * @param params.passphrase - passphrase used to encrypt signing materials created for User and Backup
22
+ * @param params.enterprise - optional enterprise id that will be attached to the BitGo Keychain
23
+ * @param params.originalPasscodeEncryptionCode - optional encryption code used to reset the user's password, if absent, password recovery will not work
24
+ */
25
+ abstract createKeychains(params: {
26
+ passphrase: string;
27
+ enterprise?: string;
28
+ originalPasscodeEncryptionCode?: string;
29
+ }): Promise<KeychainsTriplet>;
30
+ }
31
+ //# sourceMappingURL=mpcUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mpcUtils.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/utils/mpcUtils.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAwC,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAClF,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGhD,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,8BAAsB,QAAQ;IAC5B,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC;IAC3B,SAAS,CAAC,QAAQ,EAAE,SAAS,CAAC;gBAElB,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS;cAKjC,mBAAmB,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,iBAAiB,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;cAiBjG,uBAAuB,CACrC,UAAU,EAAE,iBAAiB,CAAC,MAAM,CAAC,EACrC,YAAY,EAAE,WAAW,EACzB,cAAc,EAAE,WAAW,EAC3B,OAAO,EAAE,OAAO,EAChB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,QAAQ,CAAC;IA8BpB;;;;;;OAMG;IACH,QAAQ,CAAC,eAAe,CAAC,MAAM,EAAE;QAC/B,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,8BAA8B,CAAC,EAAE,MAAM,CAAC;KACzC,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAC9B"}
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MpcUtils = void 0;
4
+ /**
5
+ * @prettier
6
+ */
7
+ const openpgp_1 = require("openpgp");
8
+ const opengpgUtils_1 = require("./opengpgUtils");
9
+ class MpcUtils {
10
+ constructor(bitgo, baseCoin) {
11
+ this.bitgo = bitgo;
12
+ this.baseCoin = baseCoin;
13
+ }
14
+ async decryptPrivateShare(privateShare, userGpgKey) {
15
+ const privateShareMessage = await openpgp_1.readMessage({
16
+ armoredMessage: privateShare,
17
+ });
18
+ const userGpgPrivateKey = await openpgp_1.readPrivateKey({ armoredKey: userGpgKey.privateKey });
19
+ const decryptedPrivateShare = (await openpgp_1.decrypt({
20
+ message: privateShareMessage,
21
+ decryptionKeys: [userGpgPrivateKey],
22
+ format: 'utf8',
23
+ })).data;
24
+ return decryptedPrivateShare;
25
+ }
26
+ async createBitgoKeychainInWP(userGpgKey, userKeyShare, backupKeyShare, keyType, enterprise) {
27
+ const bitgoKey = await opengpgUtils_1.getBitgoGpgPubKey(this.bitgo);
28
+ const encUserToBitGoMessage = await opengpgUtils_1.encryptText(userKeyShare.privateShare, bitgoKey);
29
+ const encBackupToBitGoMessage = await opengpgUtils_1.encryptText(backupKeyShare.privateShare, bitgoKey);
30
+ const createBitGoMPCParams = {
31
+ keyType,
32
+ source: 'bitgo',
33
+ keyShares: [
34
+ {
35
+ from: 'user',
36
+ to: 'bitgo',
37
+ publicShare: userKeyShare.publicShare,
38
+ privateShare: encUserToBitGoMessage,
39
+ },
40
+ {
41
+ from: 'backup',
42
+ to: 'bitgo',
43
+ publicShare: backupKeyShare.publicShare,
44
+ privateShare: encBackupToBitGoMessage,
45
+ },
46
+ ],
47
+ userGPGPublicKey: userGpgKey.publicKey,
48
+ backupGPGPublicKey: userGpgKey.publicKey,
49
+ enterprise: enterprise,
50
+ };
51
+ return await this.baseCoin.keychains().add(createBitGoMPCParams);
52
+ }
53
+ }
54
+ exports.MpcUtils = MpcUtils;
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXBjVXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYml0Z28vdXRpbHMvbXBjVXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7O0dBRUc7QUFDSCxxQ0FBa0Y7QUFJbEYsaURBQWdFO0FBT2hFLE1BQXNCLFFBQVE7SUFJNUIsWUFBWSxLQUFnQixFQUFFLFFBQW1CO1FBQy9DLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0lBQzNCLENBQUM7SUFFUyxLQUFLLENBQUMsbUJBQW1CLENBQUMsWUFBb0IsRUFBRSxVQUFxQztRQUM3RixNQUFNLG1CQUFtQixHQUFHLE1BQU0scUJBQVcsQ0FBQztZQUM1QyxjQUFjLEVBQUUsWUFBWTtTQUM3QixDQUFDLENBQUM7UUFDSCxNQUFNLGlCQUFpQixHQUFHLE1BQU0sd0JBQWMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUV0RixNQUFNLHFCQUFxQixHQUFHLENBQzVCLE1BQU0saUJBQU8sQ0FBQztZQUNaLE9BQU8sRUFBRSxtQkFBbUI7WUFDNUIsY0FBYyxFQUFFLENBQUMsaUJBQWlCLENBQUM7WUFDbkMsTUFBTSxFQUFFLE1BQU07U0FDZixDQUFDLENBQ0gsQ0FBQyxJQUFJLENBQUM7UUFFUCxPQUFPLHFCQUFxQixDQUFDO0lBQy9CLENBQUM7SUFFUyxLQUFLLENBQUMsdUJBQXVCLENBQ3JDLFVBQXFDLEVBQ3JDLFlBQXlCLEVBQ3pCLGNBQTJCLEVBQzNCLE9BQWdCLEVBQ2hCLFVBQW1CO1FBRW5CLE1BQU0sUUFBUSxHQUFHLE1BQU0sZ0NBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JELE1BQU0scUJBQXFCLEdBQUcsTUFBTSwwQkFBVyxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDckYsTUFBTSx1QkFBdUIsR0FBRyxNQUFNLDBCQUFXLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUV6RixNQUFNLG9CQUFvQixHQUFHO1lBQzNCLE9BQU87WUFDUCxNQUFNLEVBQUUsT0FBTztZQUNmLFNBQVMsRUFBRTtnQkFDVDtvQkFDRSxJQUFJLEVBQUUsTUFBTTtvQkFDWixFQUFFLEVBQUUsT0FBTztvQkFDWCxXQUFXLEVBQUUsWUFBWSxDQUFDLFdBQVc7b0JBQ3JDLFlBQVksRUFBRSxxQkFBcUI7aUJBQ3BDO2dCQUNEO29CQUNFLElBQUksRUFBRSxRQUFRO29CQUNkLEVBQUUsRUFBRSxPQUFPO29CQUNYLFdBQVcsRUFBRSxjQUFjLENBQUMsV0FBVztvQkFDdkMsWUFBWSxFQUFFLHVCQUF1QjtpQkFDdEM7YUFDRjtZQUNELGdCQUFnQixFQUFFLFVBQVUsQ0FBQyxTQUFTO1lBQ3RDLGtCQUFrQixFQUFFLFVBQVUsQ0FBQyxTQUFTO1lBQ3hDLFVBQVUsRUFBRSxVQUFVO1NBQ3ZCLENBQUM7UUFFRixPQUFPLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUNuRSxDQUFDO0NBY0Y7QUExRUQsNEJBMEVDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcHJldHRpZXJcbiAqL1xuaW1wb3J0IHsgZGVjcnlwdCwgcmVhZE1lc3NhZ2UsIHJlYWRQcml2YXRlS2V5LCBTZXJpYWxpemVkS2V5UGFpciB9IGZyb20gJ29wZW5wZ3AnO1xuaW1wb3J0IHsgSUJhc2VDb2luLCBLZXljaGFpbnNUcmlwbGV0IH0gZnJvbSAnLi4vYmFzZUNvaW4nO1xuaW1wb3J0IHsgQml0R29CYXNlIH0gZnJvbSAnLi4vYml0Z29CYXNlJztcbmltcG9ydCB7IEtleWNoYWluLCBLZXlUeXBlIH0gZnJvbSAnLi4va2V5Y2hhaW4nO1xuaW1wb3J0IHsgZW5jcnlwdFRleHQsIGdldEJpdGdvR3BnUHViS2V5IH0gZnJvbSAnLi9vcGVuZ3BnVXRpbHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1wY0tleVNoYXJlIHtcbiAgcHVibGljU2hhcmU6IHN0cmluZztcbiAgcHJpdmF0ZVNoYXJlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBNcGNVdGlscyB7XG4gIHByb3RlY3RlZCBiaXRnbzogQml0R29CYXNlO1xuICBwcm90ZWN0ZWQgYmFzZUNvaW46IElCYXNlQ29pbjtcblxuICBjb25zdHJ1Y3RvcihiaXRnbzogQml0R29CYXNlLCBiYXNlQ29pbjogSUJhc2VDb2luKSB7XG4gICAgdGhpcy5iaXRnbyA9IGJpdGdvO1xuICAgIHRoaXMuYmFzZUNvaW4gPSBiYXNlQ29pbjtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBkZWNyeXB0UHJpdmF0ZVNoYXJlKHByaXZhdGVTaGFyZTogc3RyaW5nLCB1c2VyR3BnS2V5OiBTZXJpYWxpemVkS2V5UGFpcjxzdHJpbmc+KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBwcml2YXRlU2hhcmVNZXNzYWdlID0gYXdhaXQgcmVhZE1lc3NhZ2Uoe1xuICAgICAgYXJtb3JlZE1lc3NhZ2U6IHByaXZhdGVTaGFyZSxcbiAgICB9KTtcbiAgICBjb25zdCB1c2VyR3BnUHJpdmF0ZUtleSA9IGF3YWl0IHJlYWRQcml2YXRlS2V5KHsgYXJtb3JlZEtleTogdXNlckdwZ0tleS5wcml2YXRlS2V5IH0pO1xuXG4gICAgY29uc3QgZGVjcnlwdGVkUHJpdmF0ZVNoYXJlID0gKFxuICAgICAgYXdhaXQgZGVjcnlwdCh7XG4gICAgICAgIG1lc3NhZ2U6IHByaXZhdGVTaGFyZU1lc3NhZ2UsXG4gICAgICAgIGRlY3J5cHRpb25LZXlzOiBbdXNlckdwZ1ByaXZhdGVLZXldLFxuICAgICAgICBmb3JtYXQ6ICd1dGY4JyxcbiAgICAgIH0pXG4gICAgKS5kYXRhO1xuXG4gICAgcmV0dXJuIGRlY3J5cHRlZFByaXZhdGVTaGFyZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBjcmVhdGVCaXRnb0tleWNoYWluSW5XUChcbiAgICB1c2VyR3BnS2V5OiBTZXJpYWxpemVkS2V5UGFpcjxzdHJpbmc+LFxuICAgIHVzZXJLZXlTaGFyZTogTXBjS2V5U2hhcmUsXG4gICAgYmFja3VwS2V5U2hhcmU6IE1wY0tleVNoYXJlLFxuICAgIGtleVR5cGU6IEtleVR5cGUsXG4gICAgZW50ZXJwcmlzZT86IHN0cmluZ1xuICApOiBQcm9taXNlPEtleWNoYWluPiB7XG4gICAgY29uc3QgYml0Z29LZXkgPSBhd2FpdCBnZXRCaXRnb0dwZ1B1YktleSh0aGlzLmJpdGdvKTtcbiAgICBjb25zdCBlbmNVc2VyVG9CaXRHb01lc3NhZ2UgPSBhd2FpdCBlbmNyeXB0VGV4dCh1c2VyS2V5U2hhcmUucHJpdmF0ZVNoYXJlLCBiaXRnb0tleSk7XG4gICAgY29uc3QgZW5jQmFja3VwVG9CaXRHb01lc3NhZ2UgPSBhd2FpdCBlbmNyeXB0VGV4dChiYWNrdXBLZXlTaGFyZS5wcml2YXRlU2hhcmUsIGJpdGdvS2V5KTtcblxuICAgIGNvbnN0IGNyZWF0ZUJpdEdvTVBDUGFyYW1zID0ge1xuICAgICAga2V5VHlwZSxcbiAgICAgIHNvdXJjZTogJ2JpdGdvJyxcbiAgICAgIGtleVNoYXJlczogW1xuICAgICAgICB7XG4gICAgICAgICAgZnJvbTogJ3VzZXInLFxuICAgICAgICAgIHRvOiAnYml0Z28nLFxuICAgICAgICAgIHB1YmxpY1NoYXJlOiB1c2VyS2V5U2hhcmUucHVibGljU2hhcmUsXG4gICAgICAgICAgcHJpdmF0ZVNoYXJlOiBlbmNVc2VyVG9CaXRHb01lc3NhZ2UsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBmcm9tOiAnYmFja3VwJyxcbiAgICAgICAgICB0bzogJ2JpdGdvJyxcbiAgICAgICAgICBwdWJsaWNTaGFyZTogYmFja3VwS2V5U2hhcmUucHVibGljU2hhcmUsXG4gICAgICAgICAgcHJpdmF0ZVNoYXJlOiBlbmNCYWNrdXBUb0JpdEdvTWVzc2FnZSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICB1c2VyR1BHUHVibGljS2V5OiB1c2VyR3BnS2V5LnB1YmxpY0tleSxcbiAgICAgIGJhY2t1cEdQR1B1YmxpY0tleTogdXNlckdwZ0tleS5wdWJsaWNLZXksXG4gICAgICBlbnRlcnByaXNlOiBlbnRlcnByaXNlLFxuICAgIH07XG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5iYXNlQ29pbi5rZXljaGFpbnMoKS5hZGQoY3JlYXRlQml0R29NUENQYXJhbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgVXNlciwgQmFja3VwLCBhbmQgQml0R28gTVBDIEtleWNoYWlucy5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcy5wYXNzcGhyYXNlIC0gcGFzc3BocmFzZSB1c2VkIHRvIGVuY3J5cHQgc2lnbmluZyBtYXRlcmlhbHMgY3JlYXRlZCBmb3IgVXNlciBhbmQgQmFja3VwXG4gICAqIEBwYXJhbSBwYXJhbXMuZW50ZXJwcmlzZSAtIG9wdGlvbmFsIGVudGVycHJpc2UgaWQgdGhhdCB3aWxsIGJlIGF0dGFjaGVkIHRvIHRoZSBCaXRHbyBLZXljaGFpblxuICAgKiBAcGFyYW0gcGFyYW1zLm9yaWdpbmFsUGFzc2NvZGVFbmNyeXB0aW9uQ29kZSAtIG9wdGlvbmFsIGVuY3J5cHRpb24gY29kZSB1c2VkIHRvIHJlc2V0IHRoZSB1c2VyJ3MgcGFzc3dvcmQsIGlmIGFic2VudCwgcGFzc3dvcmQgcmVjb3Zlcnkgd2lsbCBub3Qgd29ya1xuICAgKi9cbiAgYWJzdHJhY3QgY3JlYXRlS2V5Y2hhaW5zKHBhcmFtczoge1xuICAgIHBhc3NwaHJhc2U6IHN0cmluZztcbiAgICBlbnRlcnByaXNlPzogc3RyaW5nO1xuICAgIG9yaWdpbmFsUGFzc2NvZGVFbmNyeXB0aW9uQ29kZT86IHN0cmluZztcbiAgfSk6IFByb21pc2U8S2V5Y2hhaW5zVHJpcGxldD47XG59XG4iXX0=
@@ -0,0 +1,51 @@
1
+ import { Key } from 'openpgp';
2
+ import { BitGoBase } from '../bitgoBase';
3
+ /**
4
+ * Fetches BitGo's pubic gpg key used in MPC flows
5
+ * @param {BitGo} bitgo BitGo object
6
+ * @return {Key} public gpg key
7
+ */
8
+ export declare function getBitgoGpgPubKey(bitgo: BitGoBase): Promise<Key>;
9
+ /**
10
+ * Encrypts string using gpg key
11
+ * @DEPRECATED - should use encryptAndSignText instead for added security
12
+ *
13
+ * @param text string to encrypt
14
+ * @param key encryption key
15
+ * @return {string} encrypted string
16
+ *
17
+ * TODO(BG-47170): Delete once gpg signatures are fully supported
18
+ */
19
+ export declare function encryptText(text: string, key: Key): Promise<string>;
20
+ /**
21
+ * Encrypts and signs a string
22
+ * @param text string to encrypt and sign
23
+ * @param publicArmor public key to encrypt with
24
+ * @param privateArmor private key to sign with
25
+ */
26
+ export declare function encryptAndSignText(text: string, publicArmor: string, privateArmor: string): Promise<string>;
27
+ /**
28
+ * Reads a signed and encrypted message
29
+ *
30
+ * @param signed signed and encrypted message
31
+ * @param publicArmor public key to verify signature
32
+ * @param privateArmor private key to decrypt message
33
+ */
34
+ export declare function readSignedMessage(signed: string, publicArmor: string, privateArmor: string): Promise<string>;
35
+ /**
36
+ * Generates a signature
37
+ *
38
+ * @param text string to generate a signature for
39
+ * @param privateArmor private key as armored string
40
+ * @return {string} armored signature string
41
+ */
42
+ export declare function signText(text: string, privateArmor: string): Promise<string>;
43
+ /**
44
+ * Verifies signature was generated by the public key and matches the expected text
45
+ *
46
+ * @param text text that the signature was for
47
+ * @param armoredSignature signed message as an armored string
48
+ * @param publicArmor public key that generated the signature
49
+ */
50
+ export declare function verifySignature(text: string, armoredSignature: string, publicArmor: string): Promise<boolean>;
51
+ //# sourceMappingURL=opengpgUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opengpgUtils.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/utils/opengpgUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,GAAG,EAOJ,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAQtE;AAED;;;;;;;;;GASG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAczE;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAmBjH;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAalH;AAED;;;;;;GAMG;AACH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAWlF;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAoBnH"}