@bitgo/sdk-core 2.0.0-rc.0 → 2.0.0-rc.11

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 (112) hide show
  1. package/CHANGELOG.md +157 -0
  2. package/dist/src/account-lib/baseCoin/blsKeyPair.d.ts +2 -0
  3. package/dist/src/account-lib/baseCoin/blsKeyPair.d.ts.map +1 -1
  4. package/dist/src/account-lib/baseCoin/blsKeyPair.js +49 -19
  5. package/dist/src/account-lib/baseCoin/errors.d.ts +3 -0
  6. package/dist/src/account-lib/baseCoin/errors.d.ts.map +1 -1
  7. package/dist/src/account-lib/baseCoin/errors.js +8 -2
  8. package/dist/src/account-lib/baseCoin/iface.d.ts +2 -0
  9. package/dist/src/account-lib/baseCoin/iface.d.ts.map +1 -1
  10. package/dist/src/account-lib/baseCoin/iface.js +1 -1
  11. package/dist/src/account-lib/baseCoin/secp256k1ExtendedKeyPair.d.ts +5 -5
  12. package/dist/src/account-lib/baseCoin/secp256k1ExtendedKeyPair.d.ts.map +1 -1
  13. package/dist/src/account-lib/baseCoin/secp256k1ExtendedKeyPair.js +9 -10
  14. package/dist/src/account-lib/mpc/index.d.ts +2 -1
  15. package/dist/src/account-lib/mpc/index.d.ts.map +1 -1
  16. package/dist/src/account-lib/mpc/index.js +7 -2
  17. package/dist/src/account-lib/mpc/shamir.d.ts +3 -2
  18. package/dist/src/account-lib/mpc/shamir.d.ts.map +1 -1
  19. package/dist/src/account-lib/mpc/shamir.js +41 -27
  20. package/dist/src/account-lib/mpc/tss/ecdsa/ecdsa.d.ts +5 -2
  21. package/dist/src/account-lib/mpc/tss/ecdsa/ecdsa.d.ts.map +1 -1
  22. package/dist/src/account-lib/mpc/tss/ecdsa/ecdsa.js +7 -5
  23. package/dist/src/account-lib/mpc/tss/eddsa/eddsa.d.ts.map +1 -1
  24. package/dist/src/account-lib/mpc/tss/eddsa/eddsa.js +4 -3
  25. package/dist/src/account-lib/util/crypto.d.ts +1 -1
  26. package/dist/src/account-lib/util/crypto.d.ts.map +1 -1
  27. package/dist/src/account-lib/util/crypto.js +17 -14
  28. package/dist/src/bitgo/baseCoin/baseCoin.d.ts +10 -1
  29. package/dist/src/bitgo/baseCoin/baseCoin.d.ts.map +1 -1
  30. package/dist/src/bitgo/baseCoin/baseCoin.js +17 -4
  31. package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts +8 -2
  32. package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts.map +1 -1
  33. package/dist/src/bitgo/baseCoin/iBaseCoin.js +1 -1
  34. package/dist/src/bitgo/bip32util.d.ts +3 -3
  35. package/dist/src/bitgo/bip32util.d.ts.map +1 -1
  36. package/dist/src/bitgo/bip32util.js +1 -1
  37. package/dist/src/bitgo/bitcoin.d.ts +4 -3
  38. package/dist/src/bitgo/bitcoin.d.ts.map +1 -1
  39. package/dist/src/bitgo/bitcoin.js +1 -1
  40. package/dist/src/bitgo/config.d.ts +12 -0
  41. package/dist/src/bitgo/config.d.ts.map +1 -1
  42. package/dist/src/bitgo/ecdh.d.ts +3 -3
  43. package/dist/src/bitgo/ecdh.d.ts.map +1 -1
  44. package/dist/src/bitgo/ecdh.js +1 -1
  45. package/dist/src/bitgo/environments.d.ts +1 -0
  46. package/dist/src/bitgo/environments.d.ts.map +1 -1
  47. package/dist/src/bitgo/environments.js +3 -1
  48. package/dist/src/bitgo/index.d.ts +2 -0
  49. package/dist/src/bitgo/index.d.ts.map +1 -1
  50. package/dist/src/bitgo/index.js +4 -2
  51. package/dist/src/bitgo/keychain/keychains.d.ts.map +1 -1
  52. package/dist/src/bitgo/keychain/keychains.js +2 -2
  53. package/dist/src/bitgo/legacyBitcoin.d.ts +38 -0
  54. package/dist/src/bitgo/legacyBitcoin.d.ts.map +1 -0
  55. package/dist/src/bitgo/legacyBitcoin.js +97 -0
  56. package/dist/src/bitgo/lightning/iLightning.d.ts +180 -0
  57. package/dist/src/bitgo/lightning/iLightning.d.ts.map +1 -0
  58. package/dist/src/bitgo/lightning/iLightning.js +92 -0
  59. package/dist/src/bitgo/lightning/index.d.ts +5 -0
  60. package/dist/src/bitgo/lightning/index.d.ts.map +1 -0
  61. package/dist/src/bitgo/lightning/index.js +17 -0
  62. package/dist/src/bitgo/lightning/lightning.d.ts +19 -0
  63. package/dist/src/bitgo/lightning/lightning.d.ts.map +1 -0
  64. package/dist/src/bitgo/lightning/lightning.js +92 -0
  65. package/dist/src/bitgo/lightning/lightningUtils.d.ts +26 -0
  66. package/dist/src/bitgo/lightning/lightningUtils.d.ts.map +1 -0
  67. package/dist/src/bitgo/lightning/lightningUtils.js +123 -0
  68. package/dist/src/bitgo/lightning/lnurlCodec.d.ts +3 -0
  69. package/dist/src/bitgo/lightning/lnurlCodec.d.ts.map +1 -0
  70. package/dist/src/bitgo/lightning/lnurlCodec.js +28 -0
  71. package/dist/src/bitgo/pendingApproval/pendingApproval.d.ts.map +1 -1
  72. package/dist/src/bitgo/pendingApproval/pendingApproval.js +3 -2
  73. package/dist/src/bitgo/recovery/initiate.d.ts +3 -3
  74. package/dist/src/bitgo/recovery/initiate.d.ts.map +1 -1
  75. package/dist/src/bitgo/recovery/initiate.js +5 -24
  76. package/dist/src/bitgo/staking/iStakingWallet.d.ts +32 -0
  77. package/dist/src/bitgo/staking/iStakingWallet.d.ts.map +1 -1
  78. package/dist/src/bitgo/staking/iStakingWallet.js +10 -1
  79. package/dist/src/bitgo/staking/stakingWallet.d.ts +9 -1
  80. package/dist/src/bitgo/staking/stakingWallet.d.ts.map +1 -1
  81. package/dist/src/bitgo/staking/stakingWallet.js +19 -4
  82. package/dist/src/bitgo/tss/ecdsa/ecdsa.d.ts +10 -1
  83. package/dist/src/bitgo/tss/ecdsa/ecdsa.d.ts.map +1 -1
  84. package/dist/src/bitgo/tss/ecdsa/ecdsa.js +44 -12
  85. package/dist/src/bitgo/tss/ecdsa/types.d.ts +5 -0
  86. package/dist/src/bitgo/tss/ecdsa/types.d.ts.map +1 -1
  87. package/dist/src/bitgo/tss/ecdsa/types.js +8 -2
  88. package/dist/src/bitgo/utils/blsUtils.d.ts.map +1 -1
  89. package/dist/src/bitgo/utils/blsUtils.js +93 -32
  90. package/dist/src/bitgo/utils/decode.d.ts +15 -0
  91. package/dist/src/bitgo/utils/decode.d.ts.map +1 -0
  92. package/dist/src/bitgo/utils/decode.js +56 -0
  93. package/dist/src/bitgo/utils/opengpgUtils.d.ts +33 -0
  94. package/dist/src/bitgo/utils/opengpgUtils.d.ts.map +1 -1
  95. package/dist/src/bitgo/utils/opengpgUtils.js +106 -2
  96. package/dist/src/bitgo/utils/tss/index.d.ts +1 -1
  97. package/dist/src/bitgo/utils/tss/index.js +2 -2
  98. package/dist/src/bitgo/utils/util.js +4 -4
  99. package/dist/src/bitgo/wallet/iWallet.d.ts +3 -0
  100. package/dist/src/bitgo/wallet/iWallet.d.ts.map +1 -1
  101. package/dist/src/bitgo/wallet/iWallet.js +1 -1
  102. package/dist/src/bitgo/wallet/iWallets.d.ts +1 -0
  103. package/dist/src/bitgo/wallet/iWallets.d.ts.map +1 -1
  104. package/dist/src/bitgo/wallet/iWallets.js +1 -1
  105. package/dist/src/bitgo/wallet/wallet.d.ts +11 -0
  106. package/dist/src/bitgo/wallet/wallet.d.ts.map +1 -1
  107. package/dist/src/bitgo/wallet/wallet.js +78 -11
  108. package/dist/src/bitgo/wallet/wallets.d.ts.map +1 -1
  109. package/dist/src/bitgo/wallet/wallets.js +5 -3
  110. package/dist/src/coins/ofc.js +4 -23
  111. package/dist/tsconfig.tsbuildinfo +1847 -807
  112. package/package.json +10 -7
@@ -1 +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"}
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;IAiEpB;;;;;;;;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;IAoEpB;;;;;;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;IA4CpB;;;;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"}
@@ -39,26 +39,46 @@ class BlsUtils extends mpcUtils_1.MpcUtils {
39
39
  if (!backupKeyShare.secretShares || !backupKeyShare.pub) {
40
40
  throw new Error('Invalid backup key shares');
41
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,
42
+ const bitGoToUserPublicShare = bitGoToUserShare.publicShare.slice(0, 96);
43
+ const bitGoToUserChaincode = bitGoToUserShare.publicShare.slice(96);
44
+ const commonPub = baseCoin_1.BlsKeyPair.aggregatePubkeys([userKeyShare.pub, backupKeyShare.pub, bitGoToUserPublicShare]);
45
+ const commonChaincode = baseCoin_1.BlsKeyPair.aggregateChaincodes([
46
+ userKeyShare.chaincode,
47
+ backupKeyShare.chaincode,
48
+ bitGoToUserChaincode,
47
49
  ]);
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.');
50
+ const commonKeychain = commonPub + commonChaincode;
51
+ if (commonKeychain !== bitgoKeychain.commonKeychain) {
52
+ throw new Error('Failed to create user keychain - commonKeychains do not match.');
53
+ }
54
+ const bitGoToUserPrivateShare = await this.decryptPrivateShare(bitGoToUserShare.privateShare, userGpgKey);
55
+ if (bitGoToUserPrivateShare.slice(64) !== bitGoToUserChaincode) {
56
+ throw new Error('Failed to create user keychain - bitgo to user chaincode do not match.');
55
57
  }
58
+ const userSigningMaterial = {
59
+ userShare: {
60
+ pub: userKeyShare.pub,
61
+ priv: userKeyShare.secretShares[0],
62
+ seed: userKeyShare.seed,
63
+ chaincode: userKeyShare.chaincode,
64
+ },
65
+ backupShare: {
66
+ pub: backupKeyShare.pub,
67
+ priv: backupKeyShare.secretShares[0],
68
+ chaincode: backupKeyShare.chaincode,
69
+ },
70
+ bitgoShare: {
71
+ pub: bitGoToUserPublicShare,
72
+ priv: bitGoToUserPrivateShare.slice(0, 64),
73
+ chaincode: bitGoToUserChaincode,
74
+ },
75
+ };
56
76
  const userKeychainParams = {
57
77
  source: 'user',
58
78
  keyType: 'blsdkg',
59
- commonPub: commonPub,
60
- encryptedPrv: this.bitgo.encrypt({ input: userPrivateKey, password: passphrase }),
61
- originalPasscodeEncryptionCode: originalPasscodeEncryptionCode,
79
+ commonKeychain: commonKeychain,
80
+ encryptedPrv: this.bitgo.encrypt({ input: JSON.stringify(userSigningMaterial), password: passphrase }),
81
+ originalPasscodeEncryptionCode,
62
82
  };
63
83
  return await this.baseCoin.keychains().add(userKeychainParams);
64
84
  }
@@ -86,26 +106,51 @@ class BlsUtils extends mpcUtils_1.MpcUtils {
86
106
  if (!backupKeyShare.secretShares || !backupKeyShare.pub) {
87
107
  throw new Error('Invalid backup key shares');
88
108
  }
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
- ]);
109
+ const bitGoToBackupPublicShare = bitGoToBackupShare.publicShare.slice(0, 96);
110
+ const bitGoToBackupChaincode = bitGoToBackupShare.publicShare.slice(96);
95
111
  const commonPub = baseCoin_1.BlsKeyPair.aggregatePubkeys([
96
112
  userKeyShare.pub,
97
113
  backupKeyShare.pub,
98
- bitGoToBackupShare.publicShare,
114
+ bitGoToBackupPublicShare,
115
+ ]);
116
+ const commonChaincode = baseCoin_1.BlsKeyPair.aggregateChaincodes([
117
+ userKeyShare.chaincode,
118
+ backupKeyShare.chaincode,
119
+ bitGoToBackupChaincode,
99
120
  ]);
100
- if (commonPub !== bitgoKeychain.commonPub) {
101
- throw new Error('Failed to create backup keychain - commonPubs do not match.');
121
+ const commonKeychain = commonPub + commonChaincode;
122
+ if (commonKeychain !== bitgoKeychain.commonKeychain) {
123
+ throw new Error('Failed to create backup keychain - commonKeychains do not match.');
102
124
  }
125
+ const bitGoToBackupPrivateShare = await this.decryptPrivateShare(bitGoToBackupShare.privateShare, userGpgKey);
126
+ if (bitGoToBackupPrivateShare.slice(64) !== bitGoToBackupChaincode) {
127
+ throw new Error('Failed to create user keychain - bitgo to user chaincode do not match.');
128
+ }
129
+ const backupSigningMaterial = {
130
+ userShare: {
131
+ pub: userKeyShare.pub,
132
+ priv: userKeyShare.secretShares[1],
133
+ chaincode: userKeyShare.chaincode,
134
+ },
135
+ backupShare: {
136
+ pub: backupKeyShare.pub,
137
+ priv: backupKeyShare.secretShares[1],
138
+ chaincode: backupKeyShare.chaincode,
139
+ seed: backupKeyShare.seed,
140
+ },
141
+ bitgoShare: {
142
+ pub: bitGoToBackupPublicShare,
143
+ priv: bitGoToBackupPrivateShare.slice(0, 64),
144
+ chaincode: bitGoToBackupChaincode,
145
+ },
146
+ };
147
+ const prv = JSON.stringify(backupSigningMaterial);
103
148
  return await this.baseCoin.keychains().createBackup({
104
149
  source: 'backup',
105
150
  keyType: 'blsdkg',
106
- commonPub: commonPub,
107
- prv: backupPrivateKey,
108
- encryptedPrv: this.bitgo.encrypt({ input: backupPrivateKey, password: passphrase }),
151
+ commonKeychain: commonKeychain,
152
+ prv,
153
+ encryptedPrv: this.bitgo.encrypt({ input: prv, password: passphrase }),
109
154
  });
110
155
  }
111
156
  /**
@@ -122,13 +167,29 @@ class BlsUtils extends mpcUtils_1.MpcUtils {
122
167
  if (!backupKeyShare.secretShares || !backupKeyShare.pub) {
123
168
  throw new Error('Invalid backup key shares');
124
169
  }
170
+ const userToBitgoPublicShare = Buffer.concat([
171
+ Buffer.from(userKeyShare.pub, 'hex'),
172
+ Buffer.from(userKeyShare.chaincode, 'hex'),
173
+ ]).toString('hex');
174
+ const userToBitgoPrivateShare = Buffer.concat([
175
+ Buffer.from(userKeyShare.secretShares[2], 'hex'),
176
+ Buffer.from(userKeyShare.chaincode, 'hex'),
177
+ ]).toString('hex');
125
178
  const userToBitgoKeyShare = {
126
- publicShare: userKeyShare.pub,
127
- privateShare: userKeyShare.secretShares[2],
179
+ publicShare: userToBitgoPublicShare,
180
+ privateShare: userToBitgoPrivateShare,
128
181
  };
182
+ const backupToBitgoPublicShare = Buffer.concat([
183
+ Buffer.from(backupKeyShare.pub, 'hex'),
184
+ Buffer.from(backupKeyShare.chaincode, 'hex'),
185
+ ]).toString('hex');
186
+ const backupToBitgoPrivateShare = Buffer.concat([
187
+ Buffer.from(backupKeyShare.secretShares[2], 'hex'),
188
+ Buffer.from(backupKeyShare.chaincode, 'hex'),
189
+ ]).toString('hex');
129
190
  const backupToBitgoKeyShare = {
130
- publicShare: backupKeyShare.pub,
131
- privateShare: backupKeyShare.secretShares[2],
191
+ publicShare: backupToBitgoPublicShare,
192
+ privateShare: backupToBitgoPrivateShare,
132
193
  };
133
194
  return await this.createBitgoKeychainInWP(userGpgKey, userToBitgoKeyShare, backupToBitgoKeyShare, 'blsdkg', enterprise);
134
195
  }
@@ -163,4 +224,4 @@ class BlsUtils extends mpcUtils_1.MpcUtils {
163
224
  }
164
225
  }
165
226
  exports.BlsUtils = BlsUtils;
166
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxzVXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYml0Z28vdXRpbHMvYmxzVXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7O0dBRUc7QUFDSCxtQ0FBcUM7QUFDckMscUNBQXlEO0FBQ3pELHlEQUEyRTtBQUszRSx5Q0FBc0M7QUFFdEM7O0dBRUc7QUFDSCxNQUFhLFFBQVMsU0FBUSxtQkFBUTtJQUNwQyxZQUFZLEtBQWdCLEVBQUUsUUFBbUI7UUFDL0MsS0FBSyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxLQUFLLENBQUMsa0JBQWtCLENBQ3RCLFVBQXFDLEVBQ3JDLFlBQXlCLEVBQ3pCLGNBQTJCLEVBQzNCLGFBQXVCLEVBQ3ZCLFVBQWtCLEVBQ2xCLDhCQUF1QztRQUV2QyxNQUFNLGNBQWMsR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDO1FBQy9DLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDbkIsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1NBQzdDO1FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLE9BQU8sSUFBSSxRQUFRLENBQUMsRUFBRSxLQUFLLE1BQU0sQ0FBQyxDQUFDO1FBQ2hILElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUNyQixNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxDQUFDLENBQUM7U0FDcEQ7UUFFRCxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUU7WUFDbkQsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1NBQzVDO1FBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLElBQUksQ0FBQyxjQUFj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QUFtQixFQUFFLHFCQUFxQixDQUFDLENBQUMsQ0FBQztRQUV2RyxnQkFBZ0I7UUFDaEIsTUFBTSxTQUFTLEdBQUc7WUFDaEIsWUFBWTtZQUNaLGNBQWM7WUFDZCxhQUFhO1NBQ2QsQ0FBQztRQUVGLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7Q0FDRjtBQXRORCw0QkFzTkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBwcmV0dGllclxuICovXG5pbXBvcnQgeyByYW5kb21CeXRlcyB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgeyBnZW5lcmF0ZUtleSwgU2VyaWFsaXplZEtleVBhaXIgfSBmcm9tICdvcGVucGdwJztcbmltcG9ydCB7IEJsc0tleVBhaXIgYXMgQmxzS2V5UGFpckNsYXNzIH0gZnJvbSAnLi4vLi4vYWNjb3VudC1saWIvYmFzZUNvaW4nO1xuaW1wb3J0IHsgSUJhc2VDb2luLCBJQmxzS2V5UGFpciwgS2V5Y2hhaW5zVHJpcGxldCB9IGZyb20gJy4uL2Jhc2VDb2luJztcbmltcG9ydCB7IEJpdEdvQmFzZSB9IGZyb20gJy4uL2JpdGdvQmFzZSc7XG5pbXBvcnQgeyBLZXljaGFpbiB9IGZyb20gJy4uL2tleWNoYWluJztcbmltcG9ydCB7IElCbHNVdGlscyB9IGZyb20gJy4vaUJsc1V0aWxzJztcbmltcG9ydCB7IE1wY1V0aWxzIH0gZnJvbSAnLi9tcGNVdGlscyc7XG5cbi8qKlxuICogVXRpbGl0eSBmdW5jdGlvbnMgZm9yIEJMUy1ES0cgd29yayBmbG93cy5cbiAqL1xuZXhwb3J0IGNsYXNzIEJsc1V0aWxzIGV4dGVuZHMgTXBjVXRpbHMgaW1wbGVtZW50cyBJQmxzVXRpbHMge1xuICBjb25zdHJ1Y3RvcihiaXRnbzogQml0R29CYXNlLCBiYXNlQ29pbjogSUJhc2VDb2luKSB7XG4gICAgc3VwZXIoYml0Z28sIGJhc2VDb2luKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgS2V5Y2hhaW4gY29udGFpbmluZyB0aGUgVXNlcidzIEJMUy1ES0cgc2lnbmluZyBtYXRlcmlhbHMuXG4gICAqXG4gICAqIEBwYXJhbSB1c2VyR3BnS2V5IC0gZXBoZW1lcmFsIEdQRyBrZXkgdG8gZW5jcnlwdCAvIGRlY3J5cHQgc2Vuc2l0dmUgZGF0YSBleGNoYW5nZWQgYmV0d2VlbiB1c2VyIGFuZCBzZXJ2ZXJcbiAgICogQHBhcmFtIHVzZXJLZXlTaGFyZSAtIHVzZXIncyBCTFMtREtHIGtleSBzaGFyZVxuICAgKiBAcGFyYW0gYmFja3VwS2V5U2hhcmUgLSBiYWNrdXAncyBCTFMtREtHIGtleSBzaGFyZVxuICAgKiBAcGFyYW0gYml0Z29LZXljaGFpbiAtIHByZXZpb3VzbHkgY3JlYXRlZCBCaXRHbyBrZXljaGFpbjsgbXVzdCBiZSBjb21wYXRpYmxlIHdpdGggdXNlciBhbmQgYmFja3VwIGtleSBzaGFyZXNcbiAgICogQHBhcmFtIHBhc3NwaHJhc2UgLSB3YWxsZXQgcGFzc3BocmFzZSB1c2VkIHRvIGVuY3J5cHQgdXNlcidzIHNpZ25pbmcgbWF0ZXJpYWxzXG4gICAqL1xuICBhc3luYyBjcmVhdGVVc2VyS2V5Y2hhaW4oXG4gICAgdXNlckdwZ0tleTogU2VyaWFsaXplZEtleVBhaXI8c3RyaW5nPixcbiAgICB1c2VyS2V5U2hhcmU6IElCbHNLZXlQYWlyLFxuICAgIGJhY2t1cEtleVNoYXJlOiBJQmxzS2V5UGFpcixcbiAgICBiaXRnb0tleWNoYWluOiBLZXljaGFpbixcbiAgICBwYXNzcGhyYXNlOiBzdHJpbmcsXG4gICAgb3JpZ2luYWxQYXNzY29kZUVuY3J5cHRpb25Db2RlPzogc3RyaW5nXG4gICk6IFByb21pc2U8S2V5Y2hhaW4+IHtcbiAgICBjb25zdCBiaXRnb0tleVNoYXJlcyA9IGJpdGdvS2V5Y2hhaW4ua2V5U2hhcmVzO1xuICAgIGlmICghYml0Z29LZXlTaGFyZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBCaXRHbyBrZXkgc2hhcmVzJyk7XG4gICAgfVxuXG4gICAgY29uc3QgYml0R29Ub1VzZXJTaGFyZSA9IGJpdGdvS2V5U2hhcmVzLmZpbmQoKGtleVNoYXJlKSA9PiBrZXlTaGFyZS5mcm9tID09PSAnYml0Z28nICYmIGtleVNoYXJlLnRvID09PSAndXNlcicpO1xuICAgIGlmICghYml0R29Ub1VzZXJTaGFyZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIEJpdEdvIHRvIFVzZXIga2V5IHNoYXJlJyk7XG4gICAgfVxuXG4gICAgaWYgKCF1c2VyS2V5U2hhcmUuc2VjcmV0U2hhcmVzIHx8ICF1c2VyS2V5U2hhcmUucHViKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdXNlciBrZXkgc2hhcmVzJyk7XG4gICAgfVxuICAgIGlmICghYmFja3VwS2V5U2hhcmUuc2VjcmV0U2hhcmVzIHx8ICFiYWNrdXBLZXlTaGFyZS5wdWIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBiYWNrdXAga2V5IHNoYXJlcycpO1xuICAgIH1cblxuICAgIGNvbnN0IGJpdEdvVG9Vc2VyUHJpdmF0ZVNoYXJlID0gYXdhaXQgdGhpcy5kZWNyeXB0UHJpdmF0ZVNoYXJlKGJpdEdvVG9Vc2VyU2hhcmUucHJpdmF0ZVNoYXJlLCB1c2VyR3BnS2V5KTtcblxuICAgIGNvbnN0IHVzZXJQcml2YXRlS2V5ID0gQmxzS2V5UGFpckNsYXNzLmFnZ3JlZ2F0ZVBydmtleXMoW1xuICAgICAgdXNlcktleVNoYXJlLnNlY3JldFNoYXJlc1swXSxcbiAgICAgIGJhY2t1cEtleVNoYXJlLnNlY3JldFNoYXJlc1swXSxcbiAgICAgIGJpdEdvVG9Vc2VyUHJpdmF0ZVNoYXJlLFxuICAgIF0pO1xuICAgIGNvbnN0IGNvbW1vblB1YiA9IEJsc0tleVBhaXJDbGFzcy5hZ2dyZWdhdGVQdWJrZXlzKFtcbiAgICAgIHVzZXJLZXlTaGFyZS5wdWIsXG4gICAgICBiYWNrdXBLZXlTaGFyZS5wdWIsXG4gICAgICBiaXRHb1RvVXNlclNoYXJlLnB1YmxpY1NoYXJlLFxuICAgIF0pO1xuICAgIGlmIChjb21tb25QdWIgIT09IGJpdGdvS2V5Y2hhaW4uY29tbW9uUHViKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBjcmVhdGUgdXNlciBrZXljaGFpbiAtIGNvbW1vblB1YnMgZG8gbm90IG1hdGNoLicpO1xuICAgIH1cblxuICAgIGNvbnN0IHVzZXJLZXljaGFpblBhcmFtczogYW55ID0ge1xuICAgICAgc291cmNlOiAndXNlcicsXG4gICAgICBrZXlUeXBlOiAnYmxzZGtnJyxcbiAgICAgIGNvbW1vblB1YjogY29tbW9uUHViLFxuICAgICAgZW5jcnlwdGVkUHJ2OiB0aGlzLmJpdGdvLmVuY3J5cHQoeyBpbnB1dDogdXNlclByaXZhdGVLZXksIHBhc3N3b3JkOiBwYXNzcGhyYXNlIH0pLFxuICAgICAgb3JpZ2luYWxQYXNzY29kZUVuY3J5cHRpb25Db2RlOiBvcmlnaW5hbFBhc3Njb2RlRW5jcnlwdGlvbkNvZGUsXG4gICAgfTtcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLmJhc2VDb2luLmtleWNoYWlucygpLmFkZCh1c2VyS2V5Y2hhaW5QYXJhbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBLZXljaGFpbiBjb250YWluaW5nIHRoZSBCYWNrdXAgcGFydHkncyBCTFMtREtHIHNpZ25pbmcgbWF0ZXJpYWxzLlxuICAgKlxuICAgKiBAcGFyYW0gdXNlckdwZ0tleSAtIGVwaGVtZXJhbCBHUEcga2V5IHRvIGVuY3J5cHQgLyBkZWNyeXB0IHNlbnNpdHZlIGRhdGEgZXhjaGFuZ2VkIGJldHdlZW4gdXNlciBhbmQgc2VydmVyXG4gICAqIEBwYXJhbSB1c2VyS2V5U2hhcmUgLSBVc2VyJ3MgQkxTLURLRyBLZXlzaGFyZVxuICAgKiBAcGFyYW0gYmFja3VwS2V5U2hhcmUgLSBCYWNrdXAncyBCTFMtREtHIEtleXNoYXJlXG4gICAqIEBwYXJhbSBiaXRnb0tleWNoYWluIC0gcHJldmlvdXNseSBjcmVhdGVkIEJpdEdvIGtleWNoYWluOyBtdXN0IGJlIGNvbXBhdGlibGUgd2l0aCB1c2VyIGFuZCBiYWNrdXAga2V5IHNoYXJlc1xuICAgKiBAcGFyYW0gcGFzc3BocmFzZSAtIHdhbGxldCBwYXNzcGhyYXNlIHVzZWQgdG8gZW5jcnlwdCB1c2VyJ3Mgc2lnbmluZyBtYXRlcmlhbHNcbiAgICovXG4gIGFzeW5jIGNyZWF0ZUJhY2t1cEtleWNoYWluKFxuICAgIHVzZXJHcGdLZXk6IFNlcmlhbGl6ZWRLZXlQYWlyPHN0cmluZz4sXG4gICAgdXNlcktleVNoYXJlOiBJQmxzS2V5UGFpcixcbiAgICBiYWNrdXBLZXlTaGFyZTogSUJsc0tleVBhaXIsXG4gICAgYml0Z29LZXljaGFpbjogS2V5Y2hhaW4sXG4gICAgcGFzc3BocmFzZTogc3RyaW5nXG4gICk6IFByb21pc2U8S2V5Y2hhaW4+IHtcbiAgICBjb25zdCBiaXRnb0tleVNoYXJlcyA9IGJpdGdvS2V5Y2hhaW4ua2V5U2hhcmVzO1xuICAgIGlmICghYml0Z29LZXlTaGFyZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBiaXRnbyBrZXlzaGFyZXMnKTtcbiAgICB9XG5cbiAgICBjb25zdCBiaXRHb1RvQmFja3VwU2hhcmUgPSBiaXRnb0tleVNoYXJlcy5maW5kKChrZXlTaGFyZSkgPT4ga2V5U2hhcmUuZnJvbSA9PT0gJ2JpdGdvJyAmJiBrZXlTaGFyZS50byA9PT0gJ2JhY2t1cCcpO1xuICAgIGlmICghYml0R29Ub0JhY2t1cFNoYXJlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgQml0R28gdG8gVXNlciBrZXkgc2hhcmUnKTtcbiAgICB9XG5cbiAgICBpZiAoIXVzZXJLZXlTaGFyZS5zZWNyZXRTaGFyZXMgfHwgIXVzZXJLZXlTaGFyZS5wdWIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB1c2VyIGtleSBzaGFyZXMnKTtcbiAgICB9XG4gICAgaWYgKCFiYWNrdXBLZXlTaGFyZS5zZWNyZXRTaGFyZXMgfHwgIWJhY2t1cEtleVNoYXJlLnB1Yikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGJhY2t1cCBrZXkgc2hhcmVzJyk7XG4gICAgfVxuXG4gICAgY29uc3QgYml0R29Ub0JhY2t1cFByaXZhdGVTaGFyZSA9IGF3YWl0IHRoaXMuZGVjcnlwdFByaXZhdGVTaGFyZShiaXRHb1RvQmFja3VwU2hhcmUucHJpdmF0ZVNoYXJlLCB1c2VyR3BnS2V5KTtcblxuICAgIGNvbnN0IGJhY2t1cFByaXZhdGVLZXkgPSBCbHNLZXlQYWlyQ2xhc3MuYWdncmVnYXRlUHJ2a2V5cyhbXG4gICAgICB1c2VyS2V5U2hhcmUuc2VjcmV0U2hhcmVzWzFdLFxuICAgICAgYmFja3VwS2V5U2hhcmUuc2VjcmV0U2hhcmVzWzFdLFxuICAgICAgYml0R29Ub0JhY2t1cFByaXZhdGVTaGFyZSxcbiAgICBdKTtcbiAgICBjb25zdCBjb21tb25QdWIgPSBCbHNLZXlQYWlyQ2xhc3MuYWdncmVnYXRlUHVia2V5cyhbXG4gICAgICB1c2VyS2V5U2hhcmUucHViLFxuICAgICAgYmFja3VwS2V5U2hhcmUucHViLFxuICAgICAgYml0R29Ub0JhY2t1cFNoYXJlLnB1YmxpY1NoYXJlLFxuICAgIF0pO1xuICAgIGlmIChjb21tb25QdWIgIT09IGJpdGdvS2V5Y2hhaW4uY29tbW9uUHViKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBjcmVhdGUgYmFja3VwIGtleWNoYWluIC0gY29tbW9uUHVicyBkbyBub3QgbWF0Y2guJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYmFzZUNvaW4ua2V5Y2hhaW5zKCkuY3JlYXRlQmFja3VwKHtcbiAgICAgIHNvdXJjZTogJ2JhY2t1cCcsXG4gICAgICBrZXlUeXBlOiAnYmxzZGtnJyxcbiAgICAgIGNvbW1vblB1YjogY29tbW9uUHViLFxuICAgICAgcHJ2OiBiYWNrdXBQcml2YXRlS2V5LFxuICAgICAgZW5jcnlwdGVkUHJ2OiB0aGlzLmJpdGdvLmVuY3J5cHQoeyBpbnB1dDogYmFja3VwUHJpdmF0ZUtleSwgcGFzc3dvcmQ6IHBhc3NwaHJhc2UgfSksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIEtleWNoYWluIGNvbnRhaW5pbmcgQml0R28ncyBCTFMtREtHIHNpZ25pbmcgbWF0ZXJpYWxzLlxuICAgKlxuICAgKiBAcGFyYW0gdXNlckdwZ0tleSAtIGVwaGVtZXJhbCBHUEcga2V5IHRvIGVuY3J5cHQgLyBkZWNyeXB0IHNlbnNpdHZlIGRhdGEgZXhjaGFuZ2VkIGJldHdlZW4gdXNlciBhbmQgc2VydmVyXG4gICAqIEBwYXJhbSB1c2VyS2V5U2hhcmUgLSB1c2VyJ3MgQkxTLURLRyBrZXkgc2hhcmVcbiAgICogQHBhcmFtIGJhY2t1cEtleVNoYXJlIC0gYmFja3VwJ3MgQkxTLURLRyBrZXkgc2hhcmVcbiAgICovXG4gIGFzeW5jIGNyZWF0ZUJpdGdvS2V5Y2hhaW4oXG4gICAgdXNlckdwZ0tleTogU2VyaWFsaXplZEtleVBhaXI8c3RyaW5nPixcbiAgICB1c2VyS2V5U2hhcmU6IElCbHNLZXlQYWlyLFxuICAgIGJhY2t1cEtleVNoYXJlOiBJQmxzS2V5UGFpcixcbiAgICBlbnRlcnByaXNlPzogc3RyaW5nXG4gICk6IFByb21pc2U8S2V5Y2hhaW4+IHtcbiAgICBpZiAoIXVzZXJLZXlTaGFyZS5zZWNyZXRTaGFyZXMgfHwgIXVzZXJLZXlTaGFyZS5wdWIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB1c2VyIGtleSBzaGFyZXMnKTtcbiAgICB9XG4gICAgaWYgKCFiYWNrdXBLZXlTaGFyZS5zZWNyZXRTaGFyZXMgfHwgIWJhY2t1cEtleVNoYXJlLnB1Yikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGJhY2t1cCBrZXkgc2hhcmVzJyk7XG4gICAgfVxuXG4gICAgY29uc3QgdXNlclRvQml0Z29LZXlTaGFyZSA9IHtcbiAgICAgIHB1YmxpY1NoYXJlOiB1c2VyS2V5U2hhcmUucHViLFxuICAgICAgcHJpdmF0ZVNoYXJlOiB1c2VyS2V5U2hhcmUuc2VjcmV0U2hhcmVzWzJdLFxuICAgIH07XG5cbiAgICBjb25zdCBiYWNrdXBUb0JpdGdvS2V5U2hhcmUgPSB7XG4gICAgICBwdWJsaWNTaGFyZTogYmFja3VwS2V5U2hhcmUucHViLFxuICAgICAgcHJpdmF0ZVNoYXJlOiBiYWNrdXBLZXlTaGFyZS5zZWNyZXRTaGFyZXNbMl0sXG4gICAgfTtcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLmNyZWF0ZUJpdGdvS2V5Y2hhaW5JbldQKFxuICAgICAgdXNlckdwZ0tleSxcbiAgICAgIHVzZXJUb0JpdGdvS2V5U2hhcmUsXG4gICAgICBiYWNrdXBUb0JpdGdvS2V5U2hhcmUsXG4gICAgICAnYmxzZGtnJyxcbiAgICAgIGVudGVycHJpc2VcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgVXNlciwgQmFja3VwLCBhbmQgQml0R28gQkxTLURLRyBLZXljaGFpbnMuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMucGFzc3BocmFzZSAtIHBhc3NwaHJhc2UgdXNlZCB0byBlbmNyeXB0IHNpZ25pbmcgbWF0ZXJpYWxzIGNyZWF0ZWQgZm9yIFVzZXIgYW5kIEJhY2t1cFxuICAgKi9cbiAgYXN5bmMgY3JlYXRlS2V5Y2hhaW5zKHBhcmFtczoge1xuICAgIHBhc3NwaHJhc2U6IHN0cmluZztcbiAgICBlbnRlcnByaXNlPzogc3RyaW5nO1xuICAgIG9yaWdpbmFsUGFzc2NvZGVFbmNyeXB0aW9uQ29kZT86IHN0cmluZztcbiAgfSk6IFByb21pc2U8S2V5Y2hhaW5zVHJpcGxldD4ge1xuICAgIGNvbnN0IHVzZXJLZXlTaGFyZSA9IHRoaXMuYmFzZUNvaW4uZ2VuZXJhdGVLZXlQYWlyKCk7XG4gICAgY29uc3QgYmFja3VwS2V5U2hhcmUgPSB0aGlzLmJhc2VDb2luLmdlbmVyYXRlS2V5UGFpcigpO1xuXG4gICAgY29uc3QgcmFuZG9tSGV4U3RyaW5nID0gcmFuZG9tQnl0ZXMoMTIpLnRvU3RyaW5nKCdoZXgnKTtcblxuICAgIGNvbnN0IHVzZXJHcGdLZXkgPSBhd2FpdCBnZW5lcmF0ZUtleSh7XG4gICAgICB1c2VySURzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiByYW5kb21IZXhTdHJpbmcsXG4gICAgICAgICAgZW1haWw6IGAke3JhbmRvbUhleFN0cmluZ31AJHtyYW5kb21IZXhTdHJpbmd9LmNvbWAsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgY29uc3QgYml0Z29LZXljaGFpbiA9IGF3YWl0IHRoaXMuY3JlYXRlQml0Z29LZXljaGFpbih1c2VyR3BnS2V5LCB1c2VyS2V5U2hhcmUsIGJhY2t1cEtleVNoYXJlLCBwYXJhbXMuZW50ZXJwcmlzZSk7XG4gICAgY29uc3QgdXNlcktleWNoYWluUHJvbWlzZSA9IHRoaXMuY3JlYXRlVXNlcktleWNoYWluKFxuICAgICAgdXNlckdwZ0tleSxcbiAgICAgIHVzZXJLZXlTaGFyZSxcbiAgICAgIGJhY2t1cEtleVNoYXJlLFxuICAgICAgYml0Z29LZXljaGFpbixcbiAgICAgIHBhcmFtcy5wYXNzcGhyYXNlLFxuICAgICAgcGFyYW1zLm9yaWdpbmFsUGFzc2NvZGVFbmNyeXB0aW9uQ29kZVxuICAgICk7XG4gICAgY29uc3QgYmFja3VwS2V5Y2hhaW5Qcm9taXNlID0gdGhpcy5jcmVhdGVCYWNrdXBLZXljaGFpbihcbiAgICAgIHVzZXJHcGdLZXksXG4gICAgICB1c2VyS2V5U2hhcmUsXG4gICAgICBiYWNrdXBLZXlTaGFyZSxcbiAgICAgIGJpdGdvS2V5Y2hhaW4sXG4gICAgICBwYXJhbXMucGFzc3BocmFzZVxuICAgICk7XG4gICAgY29uc3QgW3VzZXJLZXljaGFpbiwgYmFja3VwS2V5Y2hhaW5dID0gYXdhaXQgUHJvbWlzZS5hbGwoW3VzZXJLZXljaGFpblByb21pc2UsIGJhY2t1cEtleWNoYWluUHJvbWlzZV0pO1xuXG4gICAgLy8gY3JlYXRlIHdhbGxldFxuICAgIGNvbnN0IGtleWNoYWlucyA9IHtcbiAgICAgIHVzZXJLZXljaGFpbixcbiAgICAgIGJhY2t1cEtleWNoYWluLFxuICAgICAgYml0Z29LZXljaGFpbixcbiAgICB9O1xuXG4gICAgcmV0dXJuIGtleWNoYWlucztcbiAgfVxufVxuIl19
227
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxzVXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYml0Z28vdXRpbHMvYmxzVXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7O0dBRUc7QUFDSCxtQ0FBcUM7QUFDckMscUNBQXlEO0FBQ3pELHlEQUEyRTtBQUszRSx5Q0FBc0M7QUFldEM7O0dBRUc7QUFDSCxNQUFhLFFBQVMsU0FBUSxtQkFBUTtJQUNwQyxZQUFZLEtBQWdCLEVBQUUsUUFBbUI7UUFDL0MsS0FBSyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxLQUFLLENBQUMsa0JBQWtCLENBQ3RCLFVBQXFDLEVBQ3JDLFlBQXlCLEVBQ3pCLGNBQTJCLEVBQzNCLGFBQXVCLEVBQ3ZCLFVBQWtCLEVBQ2xCLDhCQUF1QztRQUV2QyxNQUFNLGNBQWMsR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDO1FBQy9DLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDbkIsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1NBQzdDO1FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLE9BQU8sSUFBSSxRQUFRLENBQUMsRUFBRSxLQUFLLE1BQU0sQ0FBQyxDQUFDO1FBQ2hILElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUNyQixNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxDQUFDLENBQUM7U0FDcEQ7UUFFRCxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUU7WUFDbkQsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1NBQzVDO1FBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLElBQUksQ0FBQyxjQUFj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U0FDRixDQUFDLENBQUM7UUFFSCxNQUFNLGFBQWEsR0FBRyxNQUFNLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbEgsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQ2pELFVBQVUsRUFDVixZQUFZLEVBQ1osY0FBYyxFQUNkLGFBQWEsRUFDYixNQUFNLENBQUMsVUFBVSxFQUNqQixNQUFNLENBQUMsOEJBQThCLENBQ3RDLENBQUM7UUFDRixNQUFNLHFCQUFxQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FDckQsVUFBVSxFQUNWLFlBQVksRUFDWixjQUFjLEVBQ2QsYUFBYSxFQUNiLE1BQU0sQ0FBQyxVQUFVLENBQ2xCLENBQUM7UUFDRixNQUFNLENBQUMsWUFBWSxFQUFFLGNBQWMsQ0FBQyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLG1CQUFtQixFQUFFLHFCQUFxQixDQUFDLENBQUMsQ0FBQztRQUV2RyxnQkFBZ0I7UUFDaEIsTUFBTSxTQUFTLEdBQUc7WUFDaEIsWUFBWTtZQUNaLGNBQWM7WUFDZCxhQUFhO1NBQ2QsQ0FBQztRQUVGLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7Q0FDRjtBQXBSRCw0QkFvUkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBwcmV0dGllclxuICovXG5pbXBvcnQgeyByYW5kb21CeXRlcyB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgeyBnZW5lcmF0ZUtleSwgU2VyaWFsaXplZEtleVBhaXIgfSBmcm9tICdvcGVucGdwJztcbmltcG9ydCB7IEJsc0tleVBhaXIgYXMgQmxzS2V5UGFpckNsYXNzIH0gZnJvbSAnLi4vLi4vYWNjb3VudC1saWIvYmFzZUNvaW4nO1xuaW1wb3J0IHsgSUJhc2VDb2luLCBJQmxzS2V5UGFpciwgS2V5Y2hhaW5zVHJpcGxldCB9IGZyb20gJy4uL2Jhc2VDb2luJztcbmltcG9ydCB7IEJpdEdvQmFzZSB9IGZyb20gJy4uL2JpdGdvQmFzZSc7XG5pbXBvcnQgeyBLZXljaGFpbiB9IGZyb20gJy4uL2tleWNoYWluJztcbmltcG9ydCB7IElCbHNVdGlscyB9IGZyb20gJy4vaUJsc1V0aWxzJztcbmltcG9ydCB7IE1wY1V0aWxzIH0gZnJvbSAnLi9tcGNVdGlscyc7XG5cbnR5cGUgU2lnbmluZ1NoYXJlID0ge1xuICBzZWVkPzogc3RyaW5nO1xuICBwdWI6IHN0cmluZztcbiAgcHJpdjogc3RyaW5nO1xuICBjaGFpbmNvZGU6IHN0cmluZztcbn07XG5cbnR5cGUgU2lnbmluZ01hdGVyaWFsID0ge1xuICB1c2VyU2hhcmU6IFNpZ25pbmdTaGFyZTtcbiAgYmFja3VwU2hhcmU6IFNpZ25pbmdTaGFyZTtcbiAgYml0Z29TaGFyZTogU2lnbmluZ1NoYXJlO1xufTtcblxuLyoqXG4gKiBVdGlsaXR5IGZ1bmN0aW9ucyBmb3IgQkxTLURLRyB3b3JrIGZsb3dzLlxuICovXG5leHBvcnQgY2xhc3MgQmxzVXRpbHMgZXh0ZW5kcyBNcGNVdGlscyBpbXBsZW1lbnRzIElCbHNVdGlscyB7XG4gIGNvbnN0cnVjdG9yKGJpdGdvOiBCaXRHb0Jhc2UsIGJhc2VDb2luOiBJQmFzZUNvaW4pIHtcbiAgICBzdXBlcihiaXRnbywgYmFzZUNvaW4pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBLZXljaGFpbiBjb250YWluaW5nIHRoZSBVc2VyJ3MgQkxTLURLRyBzaWduaW5nIG1hdGVyaWFscy5cbiAgICpcbiAgICogQHBhcmFtIHVzZXJHcGdLZXkgLSBlcGhlbWVyYWwgR1BHIGtleSB0byBlbmNyeXB0IC8gZGVjcnlwdCBzZW5zaXR2ZSBkYXRhIGV4Y2hhbmdlZCBiZXR3ZWVuIHVzZXIgYW5kIHNlcnZlclxuICAgKiBAcGFyYW0gdXNlcktleVNoYXJlIC0gdXNlcidzIEJMUy1ES0cga2V5IHNoYXJlXG4gICAqIEBwYXJhbSBiYWNrdXBLZXlTaGFyZSAtIGJhY2t1cCdzIEJMUy1ES0cga2V5IHNoYXJlXG4gICAqIEBwYXJhbSBiaXRnb0tleWNoYWluIC0gcHJldmlvdXNseSBjcmVhdGVkIEJpdEdvIGtleWNoYWluOyBtdXN0IGJlIGNvbXBhdGlibGUgd2l0aCB1c2VyIGFuZCBiYWNrdXAga2V5IHNoYXJlc1xuICAgKiBAcGFyYW0gcGFzc3BocmFzZSAtIHdhbGxldCBwYXNzcGhyYXNlIHVzZWQgdG8gZW5jcnlwdCB1c2VyJ3Mgc2lnbmluZyBtYXRlcmlhbHNcbiAgICovXG4gIGFzeW5jIGNyZWF0ZVVzZXJLZXljaGFpbihcbiAgICB1c2VyR3BnS2V5OiBTZXJpYWxpemVkS2V5UGFpcjxzdHJpbmc+LFxuICAgIHVzZXJLZXlTaGFyZTogSUJsc0tleVBhaXIsXG4gICAgYmFja3VwS2V5U2hhcmU6IElCbHNLZXlQYWlyLFxuICAgIGJpdGdvS2V5Y2hhaW46IEtleWNoYWluLFxuICAgIHBhc3NwaHJhc2U6IHN0cmluZyxcbiAgICBvcmlnaW5hbFBhc3Njb2RlRW5jcnlwdGlvbkNvZGU/OiBzdHJpbmdcbiAgKTogUHJvbWlzZTxLZXljaGFpbj4ge1xuICAgIGNvbnN0IGJpdGdvS2V5U2hhcmVzID0gYml0Z29LZXljaGFpbi5rZXlTaGFyZXM7XG4gICAgaWYgKCFiaXRnb0tleVNoYXJlcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIEJpdEdvIGtleSBzaGFyZXMnKTtcbiAgICB9XG5cbiAgICBjb25zdCBiaXRHb1RvVXNlclNoYXJlID0gYml0Z29LZXlTaGFyZXMuZmluZCgoa2V5U2hhcmUpID0+IGtleVNoYXJlLmZyb20gPT09ICdiaXRnbycgJiYga2V5U2hhcmUudG8gPT09ICd1c2VyJyk7XG4gICAgaWYgKCFiaXRHb1RvVXNlclNoYXJlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgQml0R28gdG8gVXNlciBrZXkgc2hhcmUnKTtcbiAgICB9XG5cbiAgICBpZiAoIXVzZXJLZXlTaGFyZS5zZWNyZXRTaGFyZXMgfHwgIXVzZXJLZXlTaGFyZS5wdWIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB1c2VyIGtleSBzaGFyZXMnKTtcbiAgICB9XG4gICAgaWYgKCFiYWNrdXBLZXlTaGFyZS5zZWNyZXRTaGFyZXMgfHwgIWJhY2t1cEtleVNoYXJlLnB1Yikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGJhY2t1cCBrZXkgc2hhcmVzJyk7XG4gICAgfVxuXG4gICAgY29uc3QgYml0R29Ub1VzZXJQdWJsaWNTaGFyZSA9IGJpdEdvVG9Vc2VyU2hhcmUucHVibGljU2hhcmUuc2xpY2UoMCwgOTYpO1xuICAgIGNvbnN0IGJpdEdvVG9Vc2VyQ2hhaW5jb2RlID0gYml0R29Ub1VzZXJTaGFyZS5wdWJsaWNTaGFyZS5zbGljZSg5Nik7XG4gICAgY29uc3QgY29tbW9uUHViID0gQmxzS2V5UGFpckNsYXNzLmFnZ3JlZ2F0ZVB1YmtleXMoW3VzZXJLZXlTaGFyZS5wdWIsIGJhY2t1cEtleVNoYXJlLnB1YiwgYml0R29Ub1VzZXJQdWJsaWNTaGFyZV0pO1xuICAgIGNvbnN0IGNvbW1vbkNoYWluY29kZSA9IEJsc0tleVBhaXJDbGFzcy5hZ2dyZWdhdGVDaGFpbmNvZGVzKFtcbiAgICAgIHVzZXJLZXlTaGFyZS5jaGFpbmNvZGUsXG4gICAgICBiYWNrdXBLZXlTaGFyZS5jaGFpbmNvZGUsXG4gICAgICBiaXRHb1RvVXNlckNoYWluY29kZSxcbiAgICBdKTtcbiAgICBjb25zdCBjb21tb25LZXljaGFpbiA9IGNvbW1vblB1YiArIGNvbW1vbkNoYWluY29kZTtcbiAgICBpZiAoY29tbW9uS2V5Y2hhaW4gIT09IGJpdGdvS2V5Y2hhaW4uY29tbW9uS2V5Y2hhaW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGNyZWF0ZSB1c2VyIGtleWNoYWluIC0gY29tbW9uS2V5Y2hhaW5zIGRvIG5vdCBtYXRjaC4nKTtcbiAgICB9XG5cbiAgICBjb25zdCBiaXRHb1RvVXNlclByaXZhdGVTaGFyZSA9IGF3YWl0IHRoaXMuZGVjcnlwdFByaXZhdGVTaGFyZShiaXRHb1RvVXNlclNoYXJlLnByaXZhdGVTaGFyZSwgdXNlckdwZ0tleSk7XG4gICAgaWYgKGJpdEdvVG9Vc2VyUHJpdmF0ZVNoYXJlLnNsaWNlKDY0KSAhPT0gYml0R29Ub1VzZXJDaGFpbmNvZGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGNyZWF0ZSB1c2VyIGtleWNoYWluIC0gYml0Z28gdG8gdXNlciBjaGFpbmNvZGUgZG8gbm90IG1hdGNoLicpO1xuICAgIH1cbiAgICBjb25zdCB1c2VyU2lnbmluZ01hdGVyaWFsOiBTaWduaW5nTWF0ZXJpYWwgPSB7XG4gICAgICB1c2VyU2hhcmU6IHtcbiAgICAgICAgcHViOiB1c2VyS2V5U2hhcmUucHViLFxuICAgICAgICBwcml2OiB1c2VyS2V5U2hhcmUuc2VjcmV0U2hhcmVzWzBdLFxuICAgICAgICBzZWVkOiB1c2VyS2V5U2hhcmUuc2VlZCxcbiAgICAgICAgY2hhaW5jb2RlOiB1c2VyS2V5U2hhcmUuY2hhaW5jb2RlLFxuICAgICAgfSxcbiAgICAgIGJhY2t1cFNoYXJlOiB7XG4gICAgICAgIHB1YjogYmFja3VwS2V5U2hhcmUucHViLFxuICAgICAgICBwcml2OiBiYWNrdXBLZXlTaGFyZS5zZWNyZXRTaGFyZXNbMF0sXG4gICAgICAgIGNoYWluY29kZTogYmFja3VwS2V5U2hhcmUuY2hhaW5jb2RlLFxuICAgICAgfSxcbiAgICAgIGJpdGdvU2hhcmU6IHtcbiAgICAgICAgcHViOiBiaXRHb1RvVXNlclB1YmxpY1NoYXJlLFxuICAgICAgICBwcml2OiBiaXRHb1RvVXNlclByaXZhdGVTaGFyZS5zbGljZSgwLCA2NCksXG4gICAgICAgIGNoYWluY29kZTogYml0R29Ub1VzZXJDaGFpbmNvZGUsXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCB1c2VyS2V5Y2hhaW5QYXJhbXM6IGFueSA9IHtcbiAgICAgIHNvdXJjZTogJ3VzZXInLFxuICAgICAga2V5VHlwZTogJ2Jsc2RrZycsXG4gICAgICBjb21tb25LZXljaGFpbjogY29tbW9uS2V5Y2hhaW4sXG4gICAgICBlbmNyeXB0ZWRQcnY6IHRoaXMuYml0Z28uZW5jcnlwdCh7IGlucHV0OiBKU09OLnN0cmluZ2lmeSh1c2VyU2lnbmluZ01hdGVyaWFsKSwgcGFzc3dvcmQ6IHBhc3NwaHJhc2UgfSksXG4gICAgICBvcmlnaW5hbFBhc3Njb2RlRW5jcnlwdGlvbkNvZGUsXG4gICAgfTtcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLmJhc2VDb2luLmtleWNoYWlucygpLmFkZCh1c2VyS2V5Y2hhaW5QYXJhbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBLZXljaGFpbiBjb250YWluaW5nIHRoZSBCYWNrdXAgcGFydHkncyBCTFMtREtHIHNpZ25pbmcgbWF0ZXJpYWxzLlxuICAgKlxuICAgKiBAcGFyYW0gdXNlckdwZ0tleSAtIGVwaGVtZXJhbCBHUEcga2V5IHRvIGVuY3J5cHQgLyBkZWNyeXB0IHNlbnNpdHZlIGRhdGEgZXhjaGFuZ2VkIGJldHdlZW4gdXNlciBhbmQgc2VydmVyXG4gICAqIEBwYXJhbSB1c2VyS2V5U2hhcmUgLSBVc2VyJ3MgQkxTLURLRyBLZXlzaGFyZVxuICAgKiBAcGFyYW0gYmFja3VwS2V5U2hhcmUgLSBCYWNrdXAncyBCTFMtREtHIEtleXNoYXJlXG4gICAqIEBwYXJhbSBiaXRnb0tleWNoYWluIC0gcHJldmlvdXNseSBjcmVhdGVkIEJpdEdvIGtleWNoYWluOyBtdXN0IGJlIGNvbXBhdGlibGUgd2l0aCB1c2VyIGFuZCBiYWNrdXAga2V5IHNoYXJlc1xuICAgKiBAcGFyYW0gcGFzc3BocmFzZSAtIHdhbGxldCBwYXNzcGhyYXNlIHVzZWQgdG8gZW5jcnlwdCB1c2VyJ3Mgc2lnbmluZyBtYXRlcmlhbHNcbiAgICovXG4gIGFzeW5jIGNyZWF0ZUJhY2t1cEtleWNoYWluKFxuICAgIHVzZXJHcGdLZXk6IFNlcmlhbGl6ZWRLZXlQYWlyPHN0cmluZz4sXG4gICAgdXNlcktleVNoYXJlOiBJQmxzS2V5UGFpcixcbiAgICBiYWNrdXBLZXlTaGFyZTogSUJsc0tleVBhaXIsXG4gICAgYml0Z29LZXljaGFpbjogS2V5Y2hhaW4sXG4gICAgcGFzc3BocmFzZTogc3RyaW5nXG4gICk6IFByb21pc2U8S2V5Y2hhaW4+IHtcbiAgICBjb25zdCBiaXRnb0tleVNoYXJlcyA9IGJpdGdvS2V5Y2hhaW4ua2V5U2hhcmVzO1xuICAgIGlmICghYml0Z29LZXlTaGFyZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBiaXRnbyBrZXlzaGFyZXMnKTtcbiAgICB9XG5cbiAgICBjb25zdCBiaXRHb1RvQmFja3VwU2hhcmUgPSBiaXRnb0tleVNoYXJlcy5maW5kKChrZXlTaGFyZSkgPT4ga2V5U2hhcmUuZnJvbSA9PT0gJ2JpdGdvJyAmJiBrZXlTaGFyZS50byA9PT0gJ2JhY2t1cCcpO1xuICAgIGlmICghYml0R29Ub0JhY2t1cFNoYXJlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgQml0R28gdG8gVXNlciBrZXkgc2hhcmUnKTtcbiAgICB9XG5cbiAgICBpZiAoIXVzZXJLZXlTaGFyZS5zZWNyZXRTaGFyZXMgfHwgIXVzZXJLZXlTaGFyZS5wdWIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB1c2VyIGtleSBzaGFyZXMnKTtcbiAgICB9XG4gICAgaWYgKCFiYWNrdXBLZXlTaGFyZS5zZWNyZXRTaGFyZXMgfHwgIWJhY2t1cEtleVNoYXJlLnB1Yikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGJhY2t1cCBrZXkgc2hhcmVzJyk7XG4gICAgfVxuXG4gICAgY29uc3QgYml0R29Ub0JhY2t1cFB1YmxpY1NoYXJlID0gYml0R29Ub0JhY2t1cFNoYXJlLnB1YmxpY1NoYXJlLnNsaWNlKDAsIDk2KTtcbiAgICBjb25zdCBiaXRHb1RvQmFja3VwQ2hhaW5jb2RlID0gYml0R29Ub0JhY2t1cFNoYXJlLnB1YmxpY1NoYXJlLnNsaWNlKDk2KTtcbiAgICBjb25zdCBjb21tb25QdWIgPSBCbHNLZXlQYWlyQ2xhc3MuYWdncmVnYXRlUHVia2V5cyhbXG4gICAgICB1c2VyS2V5U2hhcmUucHViLFxuICAgICAgYmFja3VwS2V5U2hhcmUucHViLFxuICAgICAgYml0R29Ub0JhY2t1cFB1YmxpY1NoYXJlLFxuICAgIF0pO1xuICAgIGNvbnN0IGNvbW1vbkNoYWluY29kZSA9IEJsc0tleVBhaXJDbGFzcy5hZ2dyZWdhdGVDaGFpbmNvZGVzKFtcbiAgICAgIHVzZXJLZXlTaGFyZS5jaGFpbmNvZGUsXG4gICAgICBiYWNrdXBLZXlTaGFyZS5jaGFpbmNvZGUsXG4gICAgICBiaXRHb1RvQmFja3VwQ2hhaW5jb2RlLFxuICAgIF0pO1xuICAgIGNvbnN0IGNvbW1vbktleWNoYWluID0gY29tbW9uUHViICsgY29tbW9uQ2hhaW5jb2RlO1xuICAgIGlmIChjb21tb25LZXljaGFpbiAhPT0gYml0Z29LZXljaGFpbi5jb21tb25LZXljaGFpbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gY3JlYXRlIGJhY2t1cCBrZXljaGFpbiAtIGNvbW1vbktleWNoYWlucyBkbyBub3QgbWF0Y2guJyk7XG4gICAgfVxuXG4gICAgY29uc3QgYml0R29Ub0JhY2t1cFByaXZhdGVTaGFyZSA9IGF3YWl0IHRoaXMuZGVjcnlwdFByaXZhdGVTaGFyZShiaXRHb1RvQmFja3VwU2hhcmUucHJpdmF0ZVNoYXJlLCB1c2VyR3BnS2V5KTtcbiAgICBpZiAoYml0R29Ub0JhY2t1cFByaXZhdGVTaGFyZS5zbGljZSg2NCkgIT09IGJpdEdvVG9CYWNrdXBDaGFpbmNvZGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGNyZWF0ZSB1c2VyIGtleWNoYWluIC0gYml0Z28gdG8gdXNlciBjaGFpbmNvZGUgZG8gbm90IG1hdGNoLicpO1xuICAgIH1cbiAgICBjb25zdCBiYWNrdXBTaWduaW5nTWF0ZXJpYWw6IFNpZ25pbmdNYXRlcmlhbCA9IHtcbiAgICAgIHVzZXJTaGFyZToge1xuICAgICAgICBwdWI6IHVzZXJLZXlTaGFyZS5wdWIsXG4gICAgICAgIHByaXY6IHVzZXJLZXlTaGFyZS5zZWNyZXRTaGFyZXNbMV0sXG4gICAgICAgIGNoYWluY29kZTogdXNlcktleVNoYXJlLmNoYWluY29kZSxcbiAgICAgIH0sXG4gICAgICBiYWNrdXBTaGFyZToge1xuICAgICAgICBwdWI6IGJhY2t1cEtleVNoYXJlLnB1YixcbiAgICAgICAgcHJpdjogYmFja3VwS2V5U2hhcmUuc2VjcmV0U2hhcmVzWzFdLFxuICAgICAgICBjaGFpbmNvZGU6IGJhY2t1cEtleVNoYXJlLmNoYWluY29kZSxcbiAgICAgICAgc2VlZDogYmFja3VwS2V5U2hhcmUuc2VlZCxcbiAgICAgIH0sXG4gICAgICBiaXRnb1NoYXJlOiB7XG4gICAgICAgIHB1YjogYml0R29Ub0JhY2t1cFB1YmxpY1NoYXJlLFxuICAgICAgICBwcml2OiBiaXRHb1RvQmFja3VwUHJpdmF0ZVNoYXJlLnNsaWNlKDAsIDY0KSxcbiAgICAgICAgY2hhaW5jb2RlOiBiaXRHb1RvQmFja3VwQ2hhaW5jb2RlLFxuICAgICAgfSxcbiAgICB9O1xuICAgIGNvbnN0IHBydiA9IEpTT04uc3RyaW5naWZ5KGJhY2t1cFNpZ25pbmdNYXRlcmlhbCk7XG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5iYXNlQ29pbi5rZXljaGFpbnMoKS5jcmVhdGVCYWNrdXAoe1xuICAgICAgc291cmNlOiAnYmFja3VwJyxcbiAgICAgIGtleVR5cGU6ICdibHNka2cnLFxuICAgICAgY29tbW9uS2V5Y2hhaW46IGNvbW1vbktleWNoYWluLFxuICAgICAgcHJ2LFxuICAgICAgZW5jcnlwdGVkUHJ2OiB0aGlzLmJpdGdvLmVuY3J5cHQoeyBpbnB1dDogcHJ2LCBwYXNzd29yZDogcGFzc3BocmFzZSB9KSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgS2V5Y2hhaW4gY29udGFpbmluZyBCaXRHbydzIEJMUy1ES0cgc2lnbmluZyBtYXRlcmlhbHMuXG4gICAqXG4gICAqIEBwYXJhbSB1c2VyR3BnS2V5IC0gZXBoZW1lcmFsIEdQRyBrZXkgdG8gZW5jcnlwdCAvIGRlY3J5cHQgc2Vuc2l0dmUgZGF0YSBleGNoYW5nZWQgYmV0d2VlbiB1c2VyIGFuZCBzZXJ2ZXJcbiAgICogQHBhcmFtIHVzZXJLZXlTaGFyZSAtIHVzZXIncyBCTFMtREtHIGtleSBzaGFyZVxuICAgKiBAcGFyYW0gYmFja3VwS2V5U2hhcmUgLSBiYWNrdXAncyBCTFMtREtHIGtleSBzaGFyZVxuICAgKi9cbiAgYXN5bmMgY3JlYXRlQml0Z29LZXljaGFpbihcbiAgICB1c2VyR3BnS2V5OiBTZXJpYWxpemVkS2V5UGFpcjxzdHJpbmc+LFxuICAgIHVzZXJLZXlTaGFyZTogSUJsc0tleVBhaXIsXG4gICAgYmFja3VwS2V5U2hhcmU6IElCbHNLZXlQYWlyLFxuICAgIGVudGVycHJpc2U/OiBzdHJpbmdcbiAgKTogUHJvbWlzZTxLZXljaGFpbj4ge1xuICAgIGlmICghdXNlcktleVNoYXJlLnNlY3JldFNoYXJlcyB8fCAhdXNlcktleVNoYXJlLnB1Yikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHVzZXIga2V5IHNoYXJlcycpO1xuICAgIH1cbiAgICBpZiAoIWJhY2t1cEtleVNoYXJlLnNlY3JldFNoYXJlcyB8fCAhYmFja3VwS2V5U2hhcmUucHViKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYmFja3VwIGtleSBzaGFyZXMnKTtcbiAgICB9XG5cbiAgICBjb25zdCB1c2VyVG9CaXRnb1B1YmxpY1NoYXJlID0gQnVmZmVyLmNvbmNhdChbXG4gICAgICBCdWZmZXIuZnJvbSh1c2VyS2V5U2hhcmUucHViLCAnaGV4JyksXG4gICAgICBCdWZmZXIuZnJvbSh1c2VyS2V5U2hhcmUuY2hhaW5jb2RlLCAnaGV4JyksXG4gICAgXSkudG9TdHJpbmcoJ2hleCcpO1xuICAgIGNvbnN0IHVzZXJUb0JpdGdvUHJpdmF0ZVNoYXJlID0gQnVmZmVyLmNvbmNhdChbXG4gICAgICBCdWZmZXIuZnJvbSh1c2VyS2V5U2hhcmUuc2VjcmV0U2hhcmVzWzJdLCAnaGV4JyksXG4gICAgICBCdWZmZXIuZnJvbSh1c2VyS2V5U2hhcmUuY2hhaW5jb2RlLCAnaGV4JyksXG4gICAgXSkudG9TdHJpbmcoJ2hleCcpO1xuXG4gICAgY29uc3QgdXNlclRvQml0Z29LZXlTaGFyZSA9IHtcbiAgICAgIHB1YmxpY1NoYXJlOiB1c2VyVG9CaXRnb1B1YmxpY1NoYXJlLFxuICAgICAgcHJpdmF0ZVNoYXJlOiB1c2VyVG9CaXRnb1ByaXZhdGVTaGFyZSxcbiAgICB9O1xuXG4gICAgY29uc3QgYmFja3VwVG9CaXRnb1B1YmxpY1NoYXJlID0gQnVmZmVyLmNvbmNhdChbXG4gICAgICBCdWZmZXIuZnJvbShiYWNrdXBLZXlTaGFyZS5wdWIsICdoZXgnKSxcbiAgICAgIEJ1ZmZlci5mcm9tKGJhY2t1cEtleVNoYXJlLmNoYWluY29kZSwgJ2hleCcpLFxuICAgIF0pLnRvU3RyaW5nKCdoZXgnKTtcbiAgICBjb25zdCBiYWNrdXBUb0JpdGdvUHJpdmF0ZVNoYXJlID0gQnVmZmVyLmNvbmNhdChbXG4gICAgICBCdWZmZXIuZnJvbShiYWNrdXBLZXlTaGFyZS5zZWNyZXRTaGFyZXNbMl0sICdoZXgnKSxcbiAgICAgIEJ1ZmZlci5mcm9tKGJhY2t1cEtleVNoYXJlLmNoYWluY29kZSwgJ2hleCcpLFxuICAgIF0pLnRvU3RyaW5nKCdoZXgnKTtcbiAgICBjb25zdCBiYWNrdXBUb0JpdGdvS2V5U2hhcmUgPSB7XG4gICAgICBwdWJsaWNTaGFyZTogYmFja3VwVG9CaXRnb1B1YmxpY1NoYXJlLFxuICAgICAgcHJpdmF0ZVNoYXJlOiBiYWNrdXBUb0JpdGdvUHJpdmF0ZVNoYXJlLFxuICAgIH07XG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jcmVhdGVCaXRnb0tleWNoYWluSW5XUChcbiAgICAgIHVzZXJHcGdLZXksXG4gICAgICB1c2VyVG9CaXRnb0tleVNoYXJlLFxuICAgICAgYmFja3VwVG9CaXRnb0tleVNoYXJlLFxuICAgICAgJ2Jsc2RrZycsXG4gICAgICBlbnRlcnByaXNlXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIFVzZXIsIEJhY2t1cCwgYW5kIEJpdEdvIEJMUy1ES0cgS2V5Y2hhaW5zLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zLnBhc3NwaHJhc2UgLSBwYXNzcGhyYXNlIHVzZWQgdG8gZW5jcnlwdCBzaWduaW5nIG1hdGVyaWFscyBjcmVhdGVkIGZvciBVc2VyIGFuZCBCYWNrdXBcbiAgICovXG4gIGFzeW5jIGNyZWF0ZUtleWNoYWlucyhwYXJhbXM6IHtcbiAgICBwYXNzcGhyYXNlOiBzdHJpbmc7XG4gICAgZW50ZXJwcmlzZT86IHN0cmluZztcbiAgICBvcmlnaW5hbFBhc3Njb2RlRW5jcnlwdGlvbkNvZGU/OiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPEtleWNoYWluc1RyaXBsZXQ+IHtcbiAgICBjb25zdCB1c2VyS2V5U2hhcmUgPSB0aGlzLmJhc2VDb2luLmdlbmVyYXRlS2V5UGFpcigpIGFzIElCbHNLZXlQYWlyO1xuICAgIGNvbnN0IGJhY2t1cEtleVNoYXJlID0gdGhpcy5iYXNlQ29pbi5nZW5lcmF0ZUtleVBhaXIoKSBhcyBJQmxzS2V5UGFpcjtcblxuICAgIGNvbnN0IHJhbmRvbUhleFN0cmluZyA9IHJhbmRvbUJ5dGVzKDEyKS50b1N0cmluZygnaGV4Jyk7XG5cbiAgICBjb25zdCB1c2VyR3BnS2V5ID0gYXdhaXQgZ2VuZXJhdGVLZXkoe1xuICAgICAgdXNlcklEczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogcmFuZG9tSGV4U3RyaW5nLFxuICAgICAgICAgIGVtYWlsOiBgJHtyYW5kb21IZXhTdHJpbmd9QCR7cmFuZG9tSGV4U3RyaW5nfS5jb21gLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGJpdGdvS2V5Y2hhaW4gPSBhd2FpdCB0aGlzLmNyZWF0ZUJpdGdvS2V5Y2hhaW4odXNlckdwZ0tleSwgdXNlcktleVNoYXJlLCBiYWNrdXBLZXlTaGFyZSwgcGFyYW1zLmVudGVycHJpc2UpO1xuICAgIGNvbnN0IHVzZXJLZXljaGFpblByb21pc2UgPSB0aGlzLmNyZWF0ZVVzZXJLZXljaGFpbihcbiAgICAgIHVzZXJHcGdLZXksXG4gICAgICB1c2VyS2V5U2hhcmUsXG4gICAgICBiYWNrdXBLZXlTaGFyZSxcbiAgICAgIGJpdGdvS2V5Y2hhaW4sXG4gICAgICBwYXJhbXMucGFzc3BocmFzZSxcbiAgICAgIHBhcmFtcy5vcmlnaW5hbFBhc3Njb2RlRW5jcnlwdGlvbkNvZGVcbiAgICApO1xuICAgIGNvbnN0IGJhY2t1cEtleWNoYWluUHJvbWlzZSA9IHRoaXMuY3JlYXRlQmFja3VwS2V5Y2hhaW4oXG4gICAgICB1c2VyR3BnS2V5LFxuICAgICAgdXNlcktleVNoYXJlLFxuICAgICAgYmFja3VwS2V5U2hhcmUsXG4gICAgICBiaXRnb0tleWNoYWluLFxuICAgICAgcGFyYW1zLnBhc3NwaHJhc2VcbiAgICApO1xuICAgIGNvbnN0IFt1c2VyS2V5Y2hhaW4sIGJhY2t1cEtleWNoYWluXSA9IGF3YWl0IFByb21pc2UuYWxsKFt1c2VyS2V5Y2hhaW5Qcm9taXNlLCBiYWNrdXBLZXljaGFpblByb21pc2VdKTtcblxuICAgIC8vIGNyZWF0ZSB3YWxsZXRcbiAgICBjb25zdCBrZXljaGFpbnMgPSB7XG4gICAgICB1c2VyS2V5Y2hhaW4sXG4gICAgICBiYWNrdXBLZXljaGFpbixcbiAgICAgIGJpdGdvS2V5Y2hhaW4sXG4gICAgfTtcblxuICAgIHJldHVybiBrZXljaGFpbnM7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,15 @@
1
+ import * as E from 'fp-ts/Either';
2
+ import * as t from 'io-ts';
3
+ /**
4
+ * Format an `Errors` object as a human-readable `string`. See `decode` in `decode.ts` for an example.
5
+ * Inspired by
6
+ * https://github.com/mmkal/ts/blob/94a9ba8f2931c9c91122d00b0bf1bd21b2be05cd/packages/io-ts-extra/src/reporters.ts#L11.
7
+ */
8
+ export declare const validationErrors: (typeAlias: string) => (errors: t.Errors) => string;
9
+ export declare function decode<A, O, I>(codecName: string, codec: t.Type<A, O, I>, u: I): E.Either<string, A>;
10
+ /**
11
+ * Decodes input `value` with `codec`. When decoding fails, calls the `orElse` function with the error message from
12
+ * `validationErrors`.
13
+ */
14
+ export declare function decodeOrElse<A, O, I, E>(codecName: string, codec: t.Type<A, O, I>, value: I, orElse: (errors: string) => E): E | A;
15
+ //# sourceMappingURL=decode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decode.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/utils/decode.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,cAAc,CAAC;AAIlC,OAAO,KAAK,CAAC,MAAM,OAAO,CAAC;AAE3B;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,cACf,MAAM,cACT,EAAE,MAAM,KAAG,MAmBnB,CAAC;AAEJ,wBAAgB,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAKpG;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EACrC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACtB,KAAK,EAAE,CAAC,EACR,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,CAAC,GAC5B,CAAC,GAAG,CAAC,CAEP"}
@@ -0,0 +1,56 @@
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.decodeOrElse = exports.decode = exports.validationErrors = void 0;
23
+ const function_1 = require("fp-ts/function");
24
+ const E = __importStar(require("fp-ts/Either"));
25
+ const Json = __importStar(require("fp-ts/Json"));
26
+ const O = __importStar(require("fp-ts/Option"));
27
+ const NEA = __importStar(require("fp-ts/ReadonlyNonEmptyArray"));
28
+ /**
29
+ * Format an `Errors` object as a human-readable `string`. See `decode` in `decode.ts` for an example.
30
+ * Inspired by
31
+ * https://github.com/mmkal/ts/blob/94a9ba8f2931c9c91122d00b0bf1bd21b2be05cd/packages/io-ts-extra/src/reporters.ts#L11.
32
+ */
33
+ const validationErrors = (typeAlias) => (errors) => {
34
+ return errors
35
+ .map((error) => function_1.pipe(NEA.fromReadonlyArray(error.context), O.map((context) => {
36
+ const name = typeAlias || NEA.head(context).type.name;
37
+ const lastType = NEA.last(context).type.name;
38
+ const path = name + error.context.map((c) => c.key).join('.');
39
+ return function_1.pipe(Json.stringify(error.value), E.getOrElse(() => error.value), (value) => `Invalid value '${value}' supplied to ${path}, expected ${lastType}.`);
40
+ }), O.getOrElse(() => `Unable to decode ${typeAlias}, but no error reported`)))
41
+ .join('\n');
42
+ };
43
+ exports.validationErrors = validationErrors;
44
+ function decode(codecName, codec, u) {
45
+ return function_1.pipe(codec.decode(u), E.mapLeft((errors) => exports.validationErrors(codecName)(errors)));
46
+ }
47
+ exports.decode = decode;
48
+ /**
49
+ * Decodes input `value` with `codec`. When decoding fails, calls the `orElse` function with the error message from
50
+ * `validationErrors`.
51
+ */
52
+ function decodeOrElse(codecName, codec, value, orElse) {
53
+ return function_1.pipe(decode(codecName, codec, value), E.getOrElseW(orElse));
54
+ }
55
+ exports.decodeOrElse = decodeOrElse;
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb2RlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3V0aWxzL2RlY29kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNkNBQXNDO0FBQ3RDLGdEQUFrQztBQUNsQyxpREFBbUM7QUFDbkMsZ0RBQWtDO0FBQ2xDLGlFQUFtRDtBQUduRDs7OztHQUlHO0FBQ0ksTUFBTSxnQkFBZ0IsR0FDM0IsQ0FBQyxTQUFpQixFQUFFLEVBQUUsQ0FDdEIsQ0FBQyxNQUFnQixFQUFVLEVBQUU7SUFDM0IsT0FBTyxNQUFNO1NBQ1YsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDYixlQUFJLENBQ0YsR0FBRyxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFDcEMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1FBQ2hCLE1BQU0sSUFBSSxHQUFHLFNBQVMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDdEQsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQzdDLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5RCxPQUFPLGVBQUksQ0FDVCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFDM0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQzlCLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxrQkFBa0IsS0FBSyxpQkFBaUIsSUFBSSxjQUFjLFFBQVEsR0FBRyxDQUNqRixDQUFDO0lBQ0osQ0FBQyxDQUFDLEVBQ0YsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxvQkFBb0IsU0FBUyx5QkFBeUIsQ0FBQyxDQUMxRSxDQUNGO1NBQ0EsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2hCLENBQUMsQ0FBQztBQXJCUyxRQUFBLGdCQUFnQixvQkFxQnpCO0FBRUosU0FBZ0IsTUFBTSxDQUFVLFNBQWlCLEVBQUUsS0FBc0IsRUFBRSxDQUFJO0lBQzdFLE9BQU8sZUFBSSxDQUNULEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQ2YsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsd0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FDM0QsQ0FBQztBQUNKLENBQUM7QUFMRCx3QkFLQztBQUVEOzs7R0FHRztBQUNILFNBQWdCLFlBQVksQ0FDMUIsU0FBaUIsRUFDakIsS0FBc0IsRUFDdEIsS0FBUSxFQUNSLE1BQTZCO0lBRTdCLE9BQU8sZUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNyRSxDQUFDO0FBUEQsb0NBT0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwaXBlIH0gZnJvbSAnZnAtdHMvZnVuY3Rpb24nO1xuaW1wb3J0ICogYXMgRSBmcm9tICdmcC10cy9FaXRoZXInO1xuaW1wb3J0ICogYXMgSnNvbiBmcm9tICdmcC10cy9Kc29uJztcbmltcG9ydCAqIGFzIE8gZnJvbSAnZnAtdHMvT3B0aW9uJztcbmltcG9ydCAqIGFzIE5FQSBmcm9tICdmcC10cy9SZWFkb25seU5vbkVtcHR5QXJyYXknO1xuaW1wb3J0ICogYXMgdCBmcm9tICdpby10cyc7XG5cbi8qKlxuICogRm9ybWF0IGFuIGBFcnJvcnNgIG9iamVjdCBhcyBhIGh1bWFuLXJlYWRhYmxlIGBzdHJpbmdgLiBTZWUgYGRlY29kZWAgaW4gYGRlY29kZS50c2AgZm9yIGFuIGV4YW1wbGUuXG4gKiBJbnNwaXJlZCBieVxuICogaHR0cHM6Ly9naXRodWIuY29tL21ta2FsL3RzL2Jsb2IvOTRhOWJhOGYyOTMxYzljOTExMjJkMDBiMGJmMWJkMjFiMmJlMDVjZC9wYWNrYWdlcy9pby10cy1leHRyYS9zcmMvcmVwb3J0ZXJzLnRzI0wxMS5cbiAqL1xuZXhwb3J0IGNvbnN0IHZhbGlkYXRpb25FcnJvcnMgPVxuICAodHlwZUFsaWFzOiBzdHJpbmcpID0+XG4gIChlcnJvcnM6IHQuRXJyb3JzKTogc3RyaW5nID0+IHtcbiAgICByZXR1cm4gZXJyb3JzXG4gICAgICAubWFwKChlcnJvcikgPT5cbiAgICAgICAgcGlwZShcbiAgICAgICAgICBORUEuZnJvbVJlYWRvbmx5QXJyYXkoZXJyb3IuY29udGV4dCksXG4gICAgICAgICAgTy5tYXAoKGNvbnRleHQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5hbWUgPSB0eXBlQWxpYXMgfHwgTkVBLmhlYWQoY29udGV4dCkudHlwZS5uYW1lO1xuICAgICAgICAgICAgY29uc3QgbGFzdFR5cGUgPSBORUEubGFzdChjb250ZXh0KS50eXBlLm5hbWU7XG4gICAgICAgICAgICBjb25zdCBwYXRoID0gbmFtZSArIGVycm9yLmNvbnRleHQubWFwKChjKSA9PiBjLmtleSkuam9pbignLicpO1xuICAgICAgICAgICAgcmV0dXJuIHBpcGUoXG4gICAgICAgICAgICAgIEpzb24uc3RyaW5naWZ5KGVycm9yLnZhbHVlKSxcbiAgICAgICAgICAgICAgRS5nZXRPckVsc2UoKCkgPT4gZXJyb3IudmFsdWUpLFxuICAgICAgICAgICAgICAodmFsdWUpID0+IGBJbnZhbGlkIHZhbHVlICcke3ZhbHVlfScgc3VwcGxpZWQgdG8gJHtwYXRofSwgZXhwZWN0ZWQgJHtsYXN0VHlwZX0uYFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBPLmdldE9yRWxzZSgoKSA9PiBgVW5hYmxlIHRvIGRlY29kZSAke3R5cGVBbGlhc30sIGJ1dCBubyBlcnJvciByZXBvcnRlZGApXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIC5qb2luKCdcXG4nKTtcbiAgfTtcblxuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZTxBLCBPLCBJPihjb2RlY05hbWU6IHN0cmluZywgY29kZWM6IHQuVHlwZTxBLCBPLCBJPiwgdTogSSk6IEUuRWl0aGVyPHN0cmluZywgQT4ge1xuICByZXR1cm4gcGlwZShcbiAgICBjb2RlYy5kZWNvZGUodSksXG4gICAgRS5tYXBMZWZ0KChlcnJvcnMpID0+IHZhbGlkYXRpb25FcnJvcnMoY29kZWNOYW1lKShlcnJvcnMpKVxuICApO1xufVxuXG4vKipcbiAqIERlY29kZXMgaW5wdXQgYHZhbHVlYCB3aXRoIGBjb2RlY2AuIFdoZW4gZGVjb2RpbmcgZmFpbHMsIGNhbGxzIHRoZSBgb3JFbHNlYCBmdW5jdGlvbiB3aXRoIHRoZSBlcnJvciBtZXNzYWdlIGZyb21cbiAqIGB2YWxpZGF0aW9uRXJyb3JzYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZU9yRWxzZTxBLCBPLCBJLCBFPihcbiAgY29kZWNOYW1lOiBzdHJpbmcsXG4gIGNvZGVjOiB0LlR5cGU8QSwgTywgST4sXG4gIHZhbHVlOiBJLFxuICBvckVsc2U6IChlcnJvcnM6IHN0cmluZykgPT4gRVxuKTogRSB8IEEge1xuICByZXR1cm4gcGlwZShkZWNvZGUoY29kZWNOYW1lLCBjb2RlYywgdmFsdWUpLCBFLmdldE9yRWxzZVcob3JFbHNlKSk7XG59XG4iXX0=
@@ -6,6 +6,39 @@ import { BitGoBase } from '../bitgoBase';
6
6
  * @return {Key} public gpg key
7
7
  */
8
8
  export declare function getBitgoGpgPubKey(bitgo: BitGoBase): Promise<Key>;
9
+ /**
10
+ * Verify an Eddsa KeyShare Proof.
11
+ *
12
+ * @param senderPubKey public key of the sender of the privateShareProof
13
+ * @param privateShareProof u value proof
14
+ * @param uValue u value from an Eddsa keyshare
15
+ * @return {boolean} whether uValue proof actually was signed by sender as part of their subkeys
16
+ */
17
+ export declare function verifyEdShareProof(senderPubKey: string, privateShareProof: string, uValue: string): Promise<boolean>;
18
+ /**
19
+ * Verify a shared data proof.
20
+ *
21
+ * @param senderPubKeyArm public key of the signer of the key with proof data
22
+ * @param keyWithNotation signed reciever key with notation data
23
+ * @param dataToVerify data to be checked against notation data in the signed key
24
+ * @return {boolean} whether proof is valid
25
+ */
26
+ export declare function verifySharedDataProof(senderPubKeyArm: string, keyWithNotation: string, dataToVerify: {
27
+ name: string;
28
+ value: string;
29
+ }[]): Promise<boolean>;
30
+ /**
31
+ * Creates a proof through adding notation data to a GPG ceritifying signature.
32
+ *
33
+ * @param privateKeyArmored gpg private key in armor format of the sender
34
+ * @param publicKeyToCertArmored gpg public key in armor fomrat of the reciever
35
+ * @param notations data to be proofed
36
+ * @return {string} keyshare proof
37
+ */
38
+ export declare function createSharedDataProof(privateKeyArmored: string, publicKeyToCertArmored: string, notations: {
39
+ name: string;
40
+ value: string;
41
+ }[]): Promise<string>;
9
42
  /**
10
43
  * Creates an Eddsa KeyShare Proof by appending an ed25519 subkey to an armored gpg private key.
11
44
  *
@@ -1 +1 @@
1
- {"version":3,"file":"opengpgUtils.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/utils/opengpgUtils.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,GAAG,EAOJ,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAIzC;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAQtE;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAsD5F;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"}
1
+ {"version":3,"file":"opengpgUtils.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/utils/opengpgUtils.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,GAAG,EAOJ,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAIzC;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAQtE;AAED;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CACtC,YAAY,EAAE,MAAM,EACpB,iBAAiB,EAAE,MAAM,EACzB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,OAAO,CAAC,CAYlB;AAED;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CACzC,eAAe,EAAE,MAAM,EACvB,eAAe,EAAE,MAAM,EACvB,YAAY,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,GAC9C,OAAO,CAAC,OAAO,CAAC,CAalB;AAED;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CACzC,iBAAiB,EAAE,MAAM,EACzB,sBAAsB,EAAE,MAAM,EAC9B,SAAS,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,GAC3C,OAAO,CAAC,MAAM,CAAC,CAsDjB;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAsD5F;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,CAclH;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"}