@bitgo/sdk-coin-xrp 3.9.9 → 3.9.10

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.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,12 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [3.9.10](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-xrp@3.9.9...@bitgo/sdk-coin-xrp@3.9.10) (2025-07-30)
7
+
8
+ ### Bug Fixes
9
+
10
+ - **sdk-coin-xrp:** update XRP signers sorting to use numeric comparison ([eef8b0d](https://github.com/BitGo/BitGoJS/commit/eef8b0d1ae911d83327c798b0778a3cebecc69e2))
11
+
6
12
  ## [3.9.9](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-xrp@3.9.7...@bitgo/sdk-coin-xrp@3.9.9) (2025-07-25)
7
13
 
8
14
  **Note:** Version bump only for package @bitgo/sdk-coin-xrp
@@ -1 +1 @@
1
- {"version":3,"file":"ripple.d.ts","sourceRoot":"","sources":["../../src/ripple.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;GACG;AACH,OAAO,KAAK,cAAc,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiE7B,kBAAyC"}
1
+ {"version":3,"file":"ripple.d.ts","sourceRoot":"","sources":["../../src/ripple.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;GACG;AACH,OAAO,KAAK,cAAc,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsF7B,kBAAyC"}
@@ -35,12 +35,27 @@ var __importStar = (this && this.__importStar) || (function () {
35
35
  return result;
36
36
  };
37
37
  })();
38
+ var __importDefault = (this && this.__importDefault) || function (mod) {
39
+ return (mod && mod.__esModule) ? mod : { "default": mod };
40
+ };
38
41
  /**
39
42
  */
40
43
  const rippleKeypairs = __importStar(require("ripple-keypairs"));
41
44
  const xrpl = __importStar(require("xrpl"));
42
45
  const secp256k1_1 = require("@bitgo/secp256k1");
46
+ const bignumber_js_1 = __importDefault(require("bignumber.js"));
43
47
  const binary = __importStar(require("ripple-binary-codec"));
48
+ /**
49
+ * Convert an XRP address to a BigNumber for numeric comparison.
50
+ * This is needed for proper sorting of signers as required by the XRP protocol.
51
+ *
52
+ * @param address - The XRP address to convert
53
+ * @returns BigNumber representation of the address
54
+ */
55
+ function addressToBigNumber(address) {
56
+ const hex = Buffer.from(xrpl.decodeAccountID(address)).toString('hex');
57
+ return new bignumber_js_1.default(hex, 16);
58
+ }
44
59
  function computeSignature(tx, privateKey, signAs) {
45
60
  const signingData = signAs ? binary.encodeForMultisigning(tx, signAs) : binary.encodeForSigning(tx);
46
61
  return rippleKeypairs.sign(signingData, privateKey);
@@ -82,9 +97,16 @@ const signWithPrivateKey = function (txHex, privateKey, options) {
82
97
  TxnSignature: computeSignature(tx, privateKey, options.signAs),
83
98
  };
84
99
  // Ordering of private key signing matters, or the Ripple fullnode will throw an 'Unsorted Signers array' error.
85
- // Additional signers must be added to the front of the signers array list.
86
- if (tx.TxnSignature || tx.Signers) {
87
- tx.Signers.unshift({ Signer: signer });
100
+ // XRP requires Signers array to be sorted based on numeric value of signer addresses (lowest first)
101
+ if (tx.Signers) {
102
+ // Add the current signer
103
+ tx.Signers.push({ Signer: signer });
104
+ // Sort the Signers array by numeric value of Account (address) to ensure proper ordering
105
+ tx.Signers.sort((a, b) => {
106
+ const addressBN1 = addressToBigNumber(a.Signer.Account);
107
+ const addressBN2 = addressToBigNumber(b.Signer.Account);
108
+ return addressBN1.comparedTo(addressBN2);
109
+ });
88
110
  }
89
111
  else {
90
112
  tx.Signers = [{ Signer: signer }];
@@ -100,4 +122,4 @@ const signWithPrivateKey = function (txHex, privateKey, options) {
100
122
  };
101
123
  };
102
124
  module.exports = { ...xrpl, signWithPrivateKey };
103
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmlwcGxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JpcHBsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7O0dBRUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFSDtHQUNHO0FBQ0gsZ0VBQWtEO0FBQ2xELDJDQUE2QjtBQUM3QixnREFBMEM7QUFFMUMsNERBQThDO0FBRTlDLFNBQVMsZ0JBQWdCLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNO0lBQzlDLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3BHLE9BQU8sY0FBYyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDdEQsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sa0JBQWtCLEdBQUcsVUFBVSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU87SUFDN0QsSUFBSSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN0RCxJQUFJLGdCQUFnQixDQUFDLE1BQU0sS0FBSyxFQUFFLElBQUksZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDaEUsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBQ0QsTUFBTSxTQUFTLEdBQUcsa0JBQU0sQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBRWxHLElBQUksRUFBRSxDQUFDO0lBQ1AsSUFBSSxDQUFDO1FBQ0gsRUFBRSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDWCxJQUFJLENBQUM7WUFDSCxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QixDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLE1BQU0sSUFBSSxLQUFLLENBQUMscURBQXFELENBQUMsQ0FBQztRQUN6RSxDQUFDO0lBQ0gsQ0FBQztJQUVELEVBQUUsQ0FBQyxhQUFhLEdBQUcsT0FBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBRTlELElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUM5QixNQUFNLGNBQWMsR0FBRyxjQUFjLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQy9ELElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxjQUFjLEVBQUUsQ0FBQztZQUN0QyxNQUFNLElBQUksS0FBSyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7UUFDdkQsQ0FBQztRQUNELE1BQU0sTUFBTSxHQUFHO1lBQ2IsT0FBTyxFQUFFLE9BQU8sQ0FBQyxNQUFNO1lBQ3ZCLGFBQWEsRUFBRSxTQUFTO1lBQ3hCLFlBQVksRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUM7U0FDL0QsQ0FBQztRQUNGLGdIQUFnSDtRQUNoSCwyRUFBMkU7UUFDM0UsSUFBSSxFQUFFLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsQyxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3pDLENBQUM7YUFBTSxDQUFDO1lBQ04sRUFBRSxDQUFDLE9BQU8sR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDcEMsQ0FBQztJQUNILENBQUM7U0FBTSxDQUFDO1FBQ04sRUFBRSxDQUFDLFlBQVksR0FBRyxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3JDLE9BQU87UUFDTCxpQkFBaUIsRUFBRSxVQUFVO1FBQzdCLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUM7S0FDekMsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLGlCQUFTLEVBQUUsR0FBRyxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGhpZGRlblxuICovXG5cbi8qKlxuICovXG5pbXBvcnQgKiBhcyByaXBwbGVLZXlwYWlycyBmcm9tICdyaXBwbGUta2V5cGFpcnMnO1xuaW1wb3J0ICogYXMgeHJwbCBmcm9tICd4cnBsJztcbmltcG9ydCB7IEVDUGFpciB9IGZyb20gJ0BiaXRnby9zZWNwMjU2azEnO1xuXG5pbXBvcnQgKiBhcyBiaW5hcnkgZnJvbSAncmlwcGxlLWJpbmFyeS1jb2RlYyc7XG5cbmZ1bmN0aW9uIGNvbXB1dGVTaWduYXR1cmUodHgsIHByaXZhdGVLZXksIHNpZ25Bcykge1xuICBjb25zdCBzaWduaW5nRGF0YSA9IHNpZ25BcyA/IGJpbmFyeS5lbmNvZGVGb3JNdWx0aXNpZ25pbmcodHgsIHNpZ25BcykgOiBiaW5hcnkuZW5jb2RlRm9yU2lnbmluZyh0eCk7XG4gIHJldHVybiByaXBwbGVLZXlwYWlycy5zaWduKHNpZ25pbmdEYXRhLCBwcml2YXRlS2V5KTtcbn1cblxuLyoqXG4gKiBTaWduIFJpcHBsZSB0cmFuc2FjdGlvbiB3aXRoIGEgc2VjcDI1NmsxIHByaXZhdGUga2V5XG4gKiBAcGFyYW0gdHhIZXhcbiAqIEBwYXJhbSBwcml2YXRlS2V5XG4gKiBAcGFyYW0gb3B0aW9uc1xuICogQHJldHVybnMge3tzaWduZWRUcmFuc2FjdGlvbjogKiwgaWR9fVxuICovXG5jb25zdCBzaWduV2l0aFByaXZhdGVLZXkgPSBmdW5jdGlvbiAodHhIZXgsIHByaXZhdGVLZXksIG9wdGlvbnMpIHtcbiAgbGV0IHByaXZhdGVLZXlCdWZmZXIgPSBCdWZmZXIuZnJvbShwcml2YXRlS2V5LCAnaGV4Jyk7XG4gIGlmIChwcml2YXRlS2V5QnVmZmVyLmxlbmd0aCA9PT0gMzMgJiYgcHJpdmF0ZUtleUJ1ZmZlclswXSA9PT0gMCkge1xuICAgIHByaXZhdGVLZXlCdWZmZXIgPSBwcml2YXRlS2V5QnVmZmVyLnNsaWNlKDEsIDMzKTtcbiAgfVxuICBjb25zdCBwdWJsaWNLZXkgPSBFQ1BhaXIuZnJvbVByaXZhdGVLZXkocHJpdmF0ZUtleUJ1ZmZlcikucHVibGljS2V5LnRvU3RyaW5nKCdoZXgnKS50b1VwcGVyQ2FzZSgpO1xuXG4gIGxldCB0eDtcbiAgdHJ5IHtcbiAgICB0eCA9IGJpbmFyeS5kZWNvZGUodHhIZXgpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdHJ5IHtcbiAgICAgIHR4ID0gSlNPTi5wYXJzZSh0eEhleCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd0eEhleCBuZWVkcyB0byBiZSBlaXRoZXIgaGV4IG9yIEpTT04gc3RyaW5nIGZvciBYUlAnKTtcbiAgICB9XG4gIH1cblxuICB0eC5TaWduaW5nUHViS2V5ID0gb3B0aW9ucyAmJiBvcHRpb25zLnNpZ25BcyA/ICcnIDogcHVibGljS2V5O1xuXG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuc2lnbkFzKSB7XG4gICAgY29uc3QgZXhwZWN0ZWRTaWduZXIgPSByaXBwbGVLZXlwYWlycy5kZXJpdmVBZGRyZXNzKHB1YmxpY0tleSk7XG4gICAgaWYgKG9wdGlvbnMuc2lnbkFzICE9PSBleHBlY3RlZFNpZ25lcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdzaWduQXMgZG9lcyBub3QgbWF0Y2ggcHJpdmF0ZSBrZXknKTtcbiAgICB9XG4gICAgY29uc3Qgc2lnbmVyID0ge1xuICAgICAgQWNjb3VudDogb3B0aW9ucy5zaWduQXMsXG4gICAgICBTaWduaW5nUHViS2V5OiBwdWJsaWNLZXksXG4gICAgICBUeG5TaWduYXR1cmU6IGNvbXB1dGVTaWduYXR1cmUodHgsIHByaXZhdGVLZXksIG9wdGlvbnMuc2lnbkFzKSxcbiAgICB9O1xuICAgIC8vIE9yZGVyaW5nIG9mIHByaXZhdGUga2V5IHNpZ25pbmcgbWF0dGVycywgb3IgdGhlIFJpcHBsZSBmdWxsbm9kZSB3aWxsIHRocm93IGFuICdVbnNvcnRlZCBTaWduZXJzIGFycmF5JyBlcnJvci5cbiAgICAvLyBBZGRpdGlvbmFsIHNpZ25lcnMgbXVzdCBiZSBhZGRlZCB0byB0aGUgZnJvbnQgb2YgdGhlIHNpZ25lcnMgYXJyYXkgbGlzdC5cbiAgICBpZiAodHguVHhuU2lnbmF0dXJlIHx8IHR4LlNpZ25lcnMpIHtcbiAgICAgIHR4LlNpZ25lcnMudW5zaGlmdCh7IFNpZ25lcjogc2lnbmVyIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0eC5TaWduZXJzID0gW3sgU2lnbmVyOiBzaWduZXIgfV07XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHR4LlR4blNpZ25hdHVyZSA9IGNvbXB1dGVTaWduYXR1cmUodHgsIHByaXZhdGVLZXksIHVuZGVmaW5lZCk7XG4gIH1cblxuICBjb25zdCBzZXJpYWxpemVkID0gYmluYXJ5LmVuY29kZSh0eCk7XG4gIHJldHVybiB7XG4gICAgc2lnbmVkVHJhbnNhY3Rpb246IHNlcmlhbGl6ZWQsXG4gICAgaWQ6IHhycGwuaGFzaGVzLmhhc2hTaWduZWRUeChzZXJpYWxpemVkKSxcbiAgfTtcbn07XG5cbmV4cG9ydCA9IHsgLi4ueHJwbCwgc2lnbldpdGhQcml2YXRlS2V5IH07XG4iXX0=
125
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmlwcGxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JpcHBsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7O0dBRUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFSDtHQUNHO0FBQ0gsZ0VBQWtEO0FBQ2xELDJDQUE2QjtBQUM3QixnREFBMEM7QUFDMUMsZ0VBQXFDO0FBRXJDLDREQUE4QztBQUU5Qzs7Ozs7O0dBTUc7QUFDSCxTQUFTLGtCQUFrQixDQUFDLE9BQWU7SUFDekMsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZFLE9BQU8sSUFBSSxzQkFBUyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNoQyxDQUFDO0FBRUQsU0FBUyxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU07SUFDOUMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDcEcsT0FBTyxjQUFjLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUN0RCxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxrQkFBa0IsR0FBRyxVQUFVLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTztJQUM3RCxJQUFJLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3RELElBQUksZ0JBQWdCLENBQUMsTUFBTSxLQUFLLEVBQUUsSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVB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aGlkZGVuXG4gKi9cblxuLyoqXG4gKi9cbmltcG9ydCAqIGFzIHJpcHBsZUtleXBhaXJzIGZyb20gJ3JpcHBsZS1rZXlwYWlycyc7XG5pbXBvcnQgKiBhcyB4cnBsIGZyb20gJ3hycGwnO1xuaW1wb3J0IHsgRUNQYWlyIH0gZnJvbSAnQGJpdGdvL3NlY3AyNTZrMSc7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5cbmltcG9ydCAqIGFzIGJpbmFyeSBmcm9tICdyaXBwbGUtYmluYXJ5LWNvZGVjJztcblxuLyoqXG4gKiBDb252ZXJ0IGFuIFhSUCBhZGRyZXNzIHRvIGEgQmlnTnVtYmVyIGZvciBudW1lcmljIGNvbXBhcmlzb24uXG4gKiBUaGlzIGlzIG5lZWRlZCBmb3IgcHJvcGVyIHNvcnRpbmcgb2Ygc2lnbmVycyBhcyByZXF1aXJlZCBieSB0aGUgWFJQIHByb3RvY29sLlxuICpcbiAqIEBwYXJhbSBhZGRyZXNzIC0gVGhlIFhSUCBhZGRyZXNzIHRvIGNvbnZlcnRcbiAqIEByZXR1cm5zIEJpZ051bWJlciByZXByZXNlbnRhdGlvbiBvZiB0aGUgYWRkcmVzc1xuICovXG5mdW5jdGlvbiBhZGRyZXNzVG9CaWdOdW1iZXIoYWRkcmVzczogc3RyaW5nKTogQmlnTnVtYmVyIHtcbiAgY29uc3QgaGV4ID0gQnVmZmVyLmZyb20oeHJwbC5kZWNvZGVBY2NvdW50SUQoYWRkcmVzcykpLnRvU3RyaW5nKCdoZXgnKTtcbiAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoaGV4LCAxNik7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVTaWduYXR1cmUodHgsIHByaXZhdGVLZXksIHNpZ25Bcykge1xuICBjb25zdCBzaWduaW5nRGF0YSA9IHNpZ25BcyA/IGJpbmFyeS5lbmNvZGVGb3JNdWx0aXNpZ25pbmcodHgsIHNpZ25BcykgOiBiaW5hcnkuZW5jb2RlRm9yU2lnbmluZyh0eCk7XG4gIHJldHVybiByaXBwbGVLZXlwYWlycy5zaWduKHNpZ25pbmdEYXRhLCBwcml2YXRlS2V5KTtcbn1cblxuLyoqXG4gKiBTaWduIFJpcHBsZSB0cmFuc2FjdGlvbiB3aXRoIGEgc2VjcDI1NmsxIHByaXZhdGUga2V5XG4gKiBAcGFyYW0gdHhIZXhcbiAqIEBwYXJhbSBwcml2YXRlS2V5XG4gKiBAcGFyYW0gb3B0aW9uc1xuICogQHJldHVybnMge3tzaWduZWRUcmFuc2FjdGlvbjogKiwgaWR9fVxuICovXG5jb25zdCBzaWduV2l0aFByaXZhdGVLZXkgPSBmdW5jdGlvbiAodHhIZXgsIHByaXZhdGVLZXksIG9wdGlvbnMpIHtcbiAgbGV0IHByaXZhdGVLZXlCdWZmZXIgPSBCdWZmZXIuZnJvbShwcml2YXRlS2V5LCAnaGV4Jyk7XG4gIGlmIChwcml2YXRlS2V5QnVmZmVyLmxlbmd0aCA9PT0gMzMgJiYgcHJpdmF0ZUtleUJ1ZmZlclswXSA9PT0gMCkge1xuICAgIHByaXZhdGVLZXlCdWZmZXIgPSBwcml2YXRlS2V5QnVmZmVyLnNsaWNlKDEsIDMzKTtcbiAgfVxuICBjb25zdCBwdWJsaWNLZXkgPSBFQ1BhaXIuZnJvbVByaXZhdGVLZXkocHJpdmF0ZUtleUJ1ZmZlcikucHVibGljS2V5LnRvU3RyaW5nKCdoZXgnKS50b1VwcGVyQ2FzZSgpO1xuXG4gIGxldCB0eDtcbiAgdHJ5IHtcbiAgICB0eCA9IGJpbmFyeS5kZWNvZGUodHhIZXgpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdHJ5IHtcbiAgICAgIHR4ID0gSlNPTi5wYXJzZSh0eEhleCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd0eEhleCBuZWVkcyB0byBiZSBlaXRoZXIgaGV4IG9yIEpTT04gc3RyaW5nIGZvciBYUlAnKTtcbiAgICB9XG4gIH1cblxuICB0eC5TaWduaW5nUHViS2V5ID0gb3B0aW9ucyAmJiBvcHRpb25zLnNpZ25BcyA/ICcnIDogcHVibGljS2V5O1xuXG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuc2lnbkFzKSB7XG4gICAgY29uc3QgZXhwZWN0ZWRTaWduZXIgPSByaXBwbGVLZXlwYWlycy5kZXJpdmVBZGRyZXNzKHB1YmxpY0tleSk7XG4gICAgaWYgKG9wdGlvbnMuc2lnbkFzICE9PSBleHBlY3RlZFNpZ25lcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdzaWduQXMgZG9lcyBub3QgbWF0Y2ggcHJpdmF0ZSBrZXknKTtcbiAgICB9XG4gICAgY29uc3Qgc2lnbmVyID0ge1xuICAgICAgQWNjb3VudDogb3B0aW9ucy5zaWduQXMsXG4gICAgICBTaWduaW5nUHViS2V5OiBwdWJsaWNLZXksXG4gICAgICBUeG5TaWduYXR1cmU6IGNvbXB1dGVTaWduYXR1cmUodHgsIHByaXZhdGVLZXksIG9wdGlvbnMuc2lnbkFzKSxcbiAgICB9O1xuICAgIC8vIE9yZGVyaW5nIG9mIHByaXZhdGUga2V5IHNpZ25pbmcgbWF0dGVycywgb3IgdGhlIFJpcHBsZSBmdWxsbm9kZSB3aWxsIHRocm93IGFuICdVbnNvcnRlZCBTaWduZXJzIGFycmF5JyBlcnJvci5cbiAgICAvLyBYUlAgcmVxdWlyZXMgU2lnbmVycyBhcnJheSB0byBiZSBzb3J0ZWQgYmFzZWQgb24gbnVtZXJpYyB2YWx1ZSBvZiBzaWduZXIgYWRkcmVzc2VzIChsb3dlc3QgZmlyc3QpXG4gICAgaWYgKHR4LlNpZ25lcnMpIHtcbiAgICAgIC8vIEFkZCB0aGUgY3VycmVudCBzaWduZXJcbiAgICAgIHR4LlNpZ25lcnMucHVzaCh7IFNpZ25lcjogc2lnbmVyIH0pO1xuXG4gICAgICAvLyBTb3J0IHRoZSBTaWduZXJzIGFycmF5IGJ5IG51bWVyaWMgdmFsdWUgb2YgQWNjb3VudCAoYWRkcmVzcykgdG8gZW5zdXJlIHByb3BlciBvcmRlcmluZ1xuICAgICAgdHguU2lnbmVycy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgIGNvbnN0IGFkZHJlc3NCTjEgPSBhZGRyZXNzVG9CaWdOdW1iZXIoYS5TaWduZXIuQWNjb3VudCk7XG4gICAgICAgIGNvbnN0IGFkZHJlc3NCTjIgPSBhZGRyZXNzVG9CaWdOdW1iZXIoYi5TaWduZXIuQWNjb3VudCk7XG4gICAgICAgIHJldHVybiBhZGRyZXNzQk4xLmNvbXBhcmVkVG8oYWRkcmVzc0JOMik7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdHguU2lnbmVycyA9IFt7IFNpZ25lcjogc2lnbmVyIH1dO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0eC5UeG5TaWduYXR1cmUgPSBjb21wdXRlU2lnbmF0dXJlKHR4LCBwcml2YXRlS2V5LCB1bmRlZmluZWQpO1xuICB9XG5cbiAgY29uc3Qgc2VyaWFsaXplZCA9IGJpbmFyeS5lbmNvZGUodHgpO1xuICByZXR1cm4ge1xuICAgIHNpZ25lZFRyYW5zYWN0aW9uOiBzZXJpYWxpemVkLFxuICAgIGlkOiB4cnBsLmhhc2hlcy5oYXNoU2lnbmVkVHgoc2VyaWFsaXplZCksXG4gIH07XG59O1xuXG5leHBvcnQgPSB7IC4uLnhycGwsIHNpZ25XaXRoUHJpdmF0ZUtleSB9O1xuIl19