@bitgo-beta/sdk-lib-mpc 8.2.1-alpha.8 → 8.2.1-alpha.80

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 (98) hide show
  1. package/CHANGELOG.md +466 -0
  2. package/dist/src/curves/constant.d.ts +2 -0
  3. package/dist/src/curves/constant.d.ts.map +1 -0
  4. package/dist/src/curves/constant.js +6 -0
  5. package/dist/src/curves/{baseCurve.d.ts → ed25519.d.ts} +9 -7
  6. package/dist/src/curves/ed25519.d.ts.map +1 -0
  7. package/dist/src/curves/ed25519.js +72 -0
  8. package/dist/src/curves/ed25519Bip32HdTree.d.ts +10 -0
  9. package/dist/src/curves/ed25519Bip32HdTree.d.ts.map +1 -0
  10. package/dist/src/curves/ed25519Bip32HdTree.js +85 -0
  11. package/dist/src/curves/index.d.ts +6 -1
  12. package/dist/src/curves/index.d.ts.map +1 -1
  13. package/dist/src/curves/index.js +12 -3
  14. package/dist/src/curves/secp256k1.d.ts +3 -1
  15. package/dist/src/curves/secp256k1.d.ts.map +1 -1
  16. package/dist/src/curves/secp256k1.js +25 -14
  17. package/dist/src/curves/secp256k1Bip32HdTree.d.ts +8 -0
  18. package/dist/src/curves/secp256k1Bip32HdTree.d.ts.map +1 -0
  19. package/dist/src/curves/secp256k1Bip32HdTree.js +54 -0
  20. package/dist/src/curves/types.d.ts +36 -0
  21. package/dist/src/curves/types.d.ts.map +1 -0
  22. package/dist/src/curves/types.js +3 -0
  23. package/dist/src/curves/util.d.ts +2 -0
  24. package/dist/src/curves/util.d.ts.map +1 -0
  25. package/dist/src/curves/util.js +11 -0
  26. package/dist/src/hashCommitment.d.ts +17 -0
  27. package/dist/src/hashCommitment.d.ts.map +1 -0
  28. package/dist/src/hashCommitment.js +45 -0
  29. package/dist/src/index.d.ts +6 -2
  30. package/dist/src/index.d.ts.map +1 -1
  31. package/dist/src/index.js +25 -4
  32. package/dist/src/safePrime.d.ts +3 -0
  33. package/dist/src/safePrime.d.ts.map +1 -0
  34. package/dist/src/safePrime.js +23 -0
  35. package/dist/src/schnorrProof.d.ts +22 -0
  36. package/dist/src/schnorrProof.d.ts.map +1 -0
  37. package/dist/src/schnorrProof.js +62 -0
  38. package/dist/src/shamir/index.d.ts +3 -0
  39. package/dist/src/shamir/index.d.ts.map +1 -0
  40. package/dist/src/{openssl → shamir}/index.js +8 -3
  41. package/dist/src/shamir/shamir.d.ts +38 -0
  42. package/dist/src/shamir/shamir.d.ts.map +1 -0
  43. package/dist/src/shamir/shamir.js +136 -0
  44. package/dist/src/shamir/types.d.ts +5 -0
  45. package/dist/src/shamir/types.d.ts.map +1 -0
  46. package/dist/src/shamir/types.js +3 -0
  47. package/dist/src/tss/ecdsa/index.d.ts +1 -0
  48. package/dist/src/tss/ecdsa/index.d.ts.map +1 -1
  49. package/dist/src/tss/ecdsa/index.js +8 -3
  50. package/dist/src/tss/ecdsa/paillierproof.js +6 -6
  51. package/dist/src/tss/ecdsa/rangeproof.d.ts +0 -1
  52. package/dist/src/tss/ecdsa/rangeproof.d.ts.map +1 -1
  53. package/dist/src/tss/ecdsa/rangeproof.js +102 -108
  54. package/dist/src/tss/ecdsa/types.d.ts +5 -0
  55. package/dist/src/tss/ecdsa/types.d.ts.map +1 -1
  56. package/dist/src/tss/ecdsa/types.js +19 -19
  57. package/dist/src/tss/ecdsa/zkVProof.d.ts +25 -0
  58. package/dist/src/tss/ecdsa/zkVProof.d.ts.map +1 -0
  59. package/dist/src/tss/ecdsa/zkVProof.js +71 -0
  60. package/dist/src/tss/ecdsa-dkls/commsLayer.d.ts +43 -0
  61. package/dist/src/tss/ecdsa-dkls/commsLayer.d.ts.map +1 -0
  62. package/dist/src/tss/ecdsa-dkls/commsLayer.js +216 -0
  63. package/dist/src/tss/ecdsa-dkls/dkg.d.ts +20 -0
  64. package/dist/src/tss/ecdsa-dkls/dkg.d.ts.map +1 -0
  65. package/dist/src/tss/ecdsa-dkls/dkg.js +153 -0
  66. package/dist/src/tss/ecdsa-dkls/dsg.d.ts +30 -0
  67. package/dist/src/tss/ecdsa-dkls/dsg.d.ts.map +1 -0
  68. package/dist/src/tss/ecdsa-dkls/dsg.js +170 -0
  69. package/dist/src/tss/ecdsa-dkls/index.d.ts +6 -0
  70. package/dist/src/tss/ecdsa-dkls/index.d.ts.map +1 -0
  71. package/dist/src/tss/ecdsa-dkls/index.js +32 -0
  72. package/dist/src/tss/ecdsa-dkls/types.d.ts +104 -0
  73. package/dist/src/tss/ecdsa-dkls/types.d.ts.map +1 -0
  74. package/dist/src/tss/ecdsa-dkls/types.js +115 -0
  75. package/dist/src/tss/ecdsa-dkls/util.d.ts +22 -0
  76. package/dist/src/tss/ecdsa-dkls/util.d.ts.map +1 -0
  77. package/dist/src/tss/ecdsa-dkls/util.js +85 -0
  78. package/dist/src/tss/index.d.ts +1 -0
  79. package/dist/src/tss/index.d.ts.map +1 -1
  80. package/dist/src/tss/index.js +7 -2
  81. package/dist/src/types.d.ts +14 -0
  82. package/dist/src/types.d.ts.map +1 -0
  83. package/dist/src/types.js +3 -0
  84. package/dist/src/util.d.ts +8 -2
  85. package/dist/src/util.d.ts.map +1 -1
  86. package/dist/src/util.js +35 -13
  87. package/dist/tsconfig.tsbuildinfo +1 -3645
  88. package/package.json +13 -7
  89. package/dist/src/curves/baseCurve.d.ts.map +0 -1
  90. package/dist/src/curves/baseCurve.js +0 -6
  91. package/dist/src/openssl/index.d.ts +0 -2
  92. package/dist/src/openssl/index.d.ts.map +0 -1
  93. package/dist/src/openssl/openssl.d.ts +0 -9
  94. package/dist/src/openssl/openssl.d.ts.map +0 -1
  95. package/dist/src/openssl/openssl.js +0 -45
  96. package/dist/src/openssl/opensslbytes.d.ts +0 -4
  97. package/dist/src/openssl/opensslbytes.d.ts.map +0 -1
  98. package/dist/src/openssl/opensslbytes.js +0 -20
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getCommonKeychain = exports.serializeBroadcastMessage = exports.serializeP2PMessage = exports.deserializeBroadcastMessage = exports.deserializeP2PMessage = exports.deserializeMessages = exports.serializeMessages = exports.DsgState = exports.DkgState = void 0;
7
+ const assert_1 = __importDefault(require("assert"));
8
+ const cbor_1 = require("cbor");
9
+ var DkgState;
10
+ (function (DkgState) {
11
+ DkgState[DkgState["Uninitialized"] = 0] = "Uninitialized";
12
+ DkgState[DkgState["Round1"] = 1] = "Round1";
13
+ DkgState[DkgState["Round2"] = 2] = "Round2";
14
+ DkgState[DkgState["Round3"] = 3] = "Round3";
15
+ DkgState[DkgState["Round4"] = 4] = "Round4";
16
+ DkgState[DkgState["Complete"] = 5] = "Complete";
17
+ DkgState[DkgState["InvalidState"] = 6] = "InvalidState";
18
+ })(DkgState = exports.DkgState || (exports.DkgState = {}));
19
+ var DsgState;
20
+ (function (DsgState) {
21
+ DsgState[DsgState["Uninitialized"] = 0] = "Uninitialized";
22
+ DsgState[DsgState["Round1"] = 1] = "Round1";
23
+ DsgState[DsgState["Round2"] = 2] = "Round2";
24
+ DsgState[DsgState["Round3"] = 3] = "Round3";
25
+ DsgState[DsgState["Round4"] = 4] = "Round4";
26
+ DsgState[DsgState["Complete"] = 5] = "Complete";
27
+ DsgState[DsgState["InvalidState"] = 6] = "InvalidState";
28
+ })(DsgState = exports.DsgState || (exports.DsgState = {}));
29
+ /**
30
+ * Serializes messages payloads to base64 strings.
31
+ * @param messages
32
+ */
33
+ function serializeMessages(messages) {
34
+ return {
35
+ p2pMessages: messages.p2pMessages.map(serializeP2PMessage),
36
+ broadcastMessages: messages.broadcastMessages.map(serializeBroadcastMessage),
37
+ };
38
+ }
39
+ exports.serializeMessages = serializeMessages;
40
+ /**
41
+ * Deserialize messages payloads to Uint8Array.
42
+ * @param messages
43
+ */
44
+ function deserializeMessages(messages) {
45
+ return {
46
+ p2pMessages: messages.p2pMessages.map(deserializeP2PMessage),
47
+ broadcastMessages: messages.broadcastMessages.map(deserializeBroadcastMessage),
48
+ };
49
+ }
50
+ exports.deserializeMessages = deserializeMessages;
51
+ /**
52
+ * Deserializes a P2P message.
53
+ * @param message
54
+ */
55
+ function deserializeP2PMessage(message) {
56
+ return {
57
+ to: message.to,
58
+ from: message.from,
59
+ payload: new Uint8Array(Buffer.from(message.payload, 'base64')),
60
+ commitment: message.commitment ? new Uint8Array(Buffer.from(message.commitment, 'base64')) : undefined,
61
+ };
62
+ }
63
+ exports.deserializeP2PMessage = deserializeP2PMessage;
64
+ /**
65
+ * Deserializes a Broadcast message.
66
+ * @param message
67
+ */
68
+ function deserializeBroadcastMessage(message) {
69
+ return {
70
+ from: message.from,
71
+ payload: new Uint8Array(Buffer.from(message.payload, 'base64')),
72
+ signatureR: message.signatureR ? new Uint8Array(Buffer.from(message.signatureR, 'base64')) : undefined,
73
+ };
74
+ }
75
+ exports.deserializeBroadcastMessage = deserializeBroadcastMessage;
76
+ /**
77
+ * Serializes a P2P message.
78
+ * @param message
79
+ */
80
+ function serializeP2PMessage(message) {
81
+ return {
82
+ to: message.to,
83
+ from: message.from,
84
+ payload: Buffer.from(message.payload).toString('base64'),
85
+ commitment: message.commitment ? Buffer.from(message.commitment).toString('base64') : undefined,
86
+ };
87
+ }
88
+ exports.serializeP2PMessage = serializeP2PMessage;
89
+ /**
90
+ * Serializes a Broadcast message.
91
+ * @param message
92
+ */
93
+ function serializeBroadcastMessage(message) {
94
+ return {
95
+ from: message.from,
96
+ payload: Buffer.from(message.payload).toString('base64'),
97
+ signatureR: message.signatureR ? Buffer.from(message.signatureR).toString('base64') : undefined,
98
+ };
99
+ }
100
+ exports.serializeBroadcastMessage = serializeBroadcastMessage;
101
+ /**
102
+ * Gets commonkeyChain from DKLS keyShare
103
+ * @param {Buffer} keyShare - DKLS keyShare
104
+ * @returns {string} commonKeychain
105
+ */
106
+ function getCommonKeychain(keyShare) {
107
+ const parsedKeyShare = (0, cbor_1.decode)(keyShare);
108
+ (0, assert_1.default)(parsedKeyShare.public_key, 'public_key not found in keyShare');
109
+ (0, assert_1.default)(parsedKeyShare.root_chain_code, 'root_chain_code not found in public_key');
110
+ const publicKey = Buffer.from(parsedKeyShare.public_key).toString('hex');
111
+ const rootChainCode = Buffer.from(parsedKeyShare.root_chain_code).toString('hex');
112
+ return publicKey + rootChainCode;
113
+ }
114
+ exports.getCommonKeychain = getCommonKeychain;
115
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdHNzL2VjZHNhLWRrbHMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLCtCQUE4QjtBQWlCOUIsSUFBWSxRQVFYO0FBUkQsV0FBWSxRQUFRO0lBQ2xCLHlEQUFpQixDQUFBO0lBQ2pCLDJDQUFNLENBQUE7SUFDTiwyQ0FBTSxDQUFBO0lBQ04sMkNBQU0sQ0FBQTtJQUNOLDJDQUFNLENBQUE7SUFDTiwrQ0FBUSxDQUFBO0lBQ1IsdURBQVksQ0FBQTtBQUNkLENBQUMsRUFSVyxRQUFRLEdBQVIsZ0JBQVEsS0FBUixnQkFBUSxRQVFuQjtBQUVELElBQVksUUFRWDtBQVJELFdBQVksUUFBUTtJQUNsQix5REFBaUIsQ0FBQTtJQUNqQiwyQ0FBTSxDQUFBO0lBQ04sMkNBQU0sQ0FBQTtJQUNOLDJDQUFNLENBQUE7SUFDTiwyQ0FBTSxDQUFBO0lBQ04sK0NBQVEsQ0FBQTtJQUNSLHVEQUFZLENBQUE7QUFDZCxDQUFDLEVBUlcsUUFBUSxHQUFSLGdCQUFRLEtBQVIsZ0JBQVEsUUFRbkI7QUF1Q0Q7OztHQUdHO0FBQ0gsU0FBZ0IsaUJBQWlCLENBQUMsUUFBOEI7SUFDOUQsT0FBTztRQUNMLFdBQVcsRUFBRSxRQUFRLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQztRQUMxRCxpQkFBaUIsRUFBRSxRQUFRLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLHlCQUF5QixDQUFDO0tBQzdFLENBQUM7QUFDSixDQUFDO0FBTEQsOENBS0M7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQixtQkFBbUIsQ0FBQyxRQUE0QjtJQUM5RCxPQUFPO1FBQ0wsV0FBVyxFQUFFLFFBQVEsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDO1FBQzVELGlCQUFpQixFQUFFLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFH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QyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEYsT0FBTyxTQUFTLEdBQUcsYUFBYSxDQUFDO0FBQ25DLENBQUM7QUFQRCw4Q0FPQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7IGRlY29kZSB9IGZyb20gJ2Nib3InO1xuXG4vLyBCcm9hZGNhc3QgbWVzc2FnZSBtZWFudCB0byBiZSBzZW50IHRvIG11bHRpcGxlIHBhcnRpZXNcbmludGVyZmFjZSBCcm9hZGNhc3RNZXNzYWdlPFQ+IHtcbiAgcGF5bG9hZDogVDtcbiAgZnJvbTogbnVtYmVyO1xuICBzaWduYXR1cmVSPzogVDtcbn1cblxuLy8gUDJQIG1lc3NhZ2UgbWVhbnQgdG8gYmUgc2VudCB0byBhIHNwZWNpZmljIHBhcnR5XG5pbnRlcmZhY2UgUDJQTWVzc2FnZTxULCBHPiB7XG4gIHBheWxvYWQ6IFQ7XG4gIGZyb206IG51bWJlcjtcbiAgY29tbWl0bWVudD86IEc7XG4gIHRvOiBudW1iZXI7XG59XG5cbmV4cG9ydCBlbnVtIERrZ1N0YXRlIHtcbiAgVW5pbml0aWFsaXplZCA9IDAsXG4gIFJvdW5kMSxcbiAgUm91bmQyLFxuICBSb3VuZDMsXG4gIFJvdW5kNCxcbiAgQ29tcGxldGUsXG4gIEludmFsaWRTdGF0ZSxcbn1cblxuZXhwb3J0IGVudW0gRHNnU3RhdGUge1xuICBVbmluaXRpYWxpemVkID0gMCxcbiAgUm91bmQxLFxuICBSb3VuZDIsXG4gIFJvdW5kMyxcbiAgUm91bmQ0LFxuICBDb21wbGV0ZSxcbiAgSW52YWxpZFN0YXRlLFxufVxuXG5leHBvcnQgdHlwZSBBdXRoRW5jTWVzc2FnZSA9IHtcbiAgZW5jcnlwdGVkTWVzc2FnZTogc3RyaW5nO1xuICBzaWduYXR1cmU6IHN0cmluZztcbn07XG5leHBvcnQgdHlwZSBBdXRoTWVzc2FnZSA9IHtcbiAgbWVzc2FnZTogc3RyaW5nO1xuICBzaWduYXR1cmU6IHN0cmluZztcbn07XG5leHBvcnQgdHlwZSBQYXJ0eUdwZ0tleSA9IHtcbiAgcGFydHlJZDogbnVtYmVyO1xuICBncGdLZXk6IHN0cmluZztcbn07XG5leHBvcnQgdHlwZSBEa2xzU2lnbmF0dXJlPFQ+ID0ge1xuICBSOiBUO1xuICBTOiBUO1xufTtcbmV4cG9ydCB0eXBlIFNlcmlhbGl6ZWRCcm9hZGNhc3RNZXNzYWdlID0gQnJvYWRjYXN0TWVzc2FnZTxzdHJpbmc+O1xuZXhwb3J0IHR5cGUgRGVzZXJpYWxpemVkQnJvYWRjYXN0TWVzc2FnZSA9IEJyb2FkY2FzdE1lc3NhZ2U8VWludDhBcnJheT47XG5leHBvcnQgdHlwZSBTZXJpYWxpemVkUDJQTWVzc2FnZSA9IFAyUE1lc3NhZ2U8c3RyaW5nLCBzdHJpbmc+O1xuZXhwb3J0IHR5cGUgRGVzZXJpYWxpemVkUDJQTWVzc2FnZSA9IFAyUE1lc3NhZ2U8VWludDhBcnJheSwgVWludDhBcnJheT47XG5leHBvcnQgdHlwZSBTZXJpYWxpemVkRGtsc1NpZ25hdHVyZSA9IERrbHNTaWduYXR1cmU8c3RyaW5nPjtcbmV4cG9ydCB0eXBlIERlc2VyaWFsaXplZERrbHNTaWduYXR1cmUgPSBEa2xzU2lnbmF0dXJlPFVpbnQ4QXJyYXk+O1xuZXhwb3J0IHR5cGUgQXV0aEVuY1AyUE1lc3NhZ2UgPSBQMlBNZXNzYWdlPEF1dGhFbmNNZXNzYWdlLCBzdHJpbmc+O1xuZXhwb3J0IHR5cGUgQXV0aEJyb2FkY2FzdE1lc3NhZ2UgPSBCcm9hZGNhc3RNZXNzYWdlPEF1dGhNZXNzYWdlPjtcbmV4cG9ydCB0eXBlIFNlcmlhbGl6ZWRNZXNzYWdlcyA9IHtcbiAgcDJwTWVzc2FnZXM6IFNlcmlhbGl6ZWRQMlBNZXNzYWdlW107XG4gIGJyb2FkY2FzdE1lc3NhZ2VzOiBTZXJpYWxpemVkQnJvYWRjYXN0TWVzc2FnZVtdO1xufTtcbmV4cG9ydCB0eXBlIEF1dGhFbmNNZXNzYWdlcyA9IHtcbiAgcDJwTWVzc2FnZXM6IEF1dGhFbmNQMlBNZXNzYWdlW107XG4gIGJyb2FkY2FzdE1lc3NhZ2VzOiBBdXRoQnJvYWRjYXN0TWVzc2FnZVtdO1xufTtcbmV4cG9ydCB0eXBlIERlc2VyaWFsaXplZE1lc3NhZ2VzID0ge1xuICBwMnBNZXNzYWdlczogRGVzZXJpYWxpemVkUDJQTWVzc2FnZVtdO1xuICBicm9hZGNhc3RNZXNzYWdlczogRGVzZXJpYWxpemVkQnJvYWRjYXN0TWVzc2FnZVtdO1xufTtcblxuLyoqXG4gKiBTZXJpYWxpemVzIG1lc3NhZ2VzIHBheWxvYWRzIHRvIGJhc2U2NCBzdHJpbmdzLlxuICogQHBhcmFtIG1lc3NhZ2VzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVNZXNzYWdlcyhtZXNzYWdlczogRGVzZXJpYWxpemVkTWVzc2FnZXMpOiBTZXJpYWxpemVkTWVzc2FnZXMge1xuICByZXR1cm4ge1xuICAgIHAycE1lc3NhZ2VzOiBtZXNzYWdlcy5wMnBNZXNzYWdlcy5tYXAoc2VyaWFsaXplUDJQTWVzc2FnZSksXG4gICAgYnJvYWRjYXN0TWVzc2FnZXM6IG1lc3NhZ2VzLmJyb2FkY2FzdE1lc3NhZ2VzLm1hcChzZXJpYWxpemVCcm9hZGNhc3RNZXNzYWdlKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZSBtZXNzYWdlcyBwYXlsb2FkcyB0byBVaW50OEFycmF5LlxuICogQHBhcmFtIG1lc3NhZ2VzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXNlcmlhbGl6ZU1lc3NhZ2VzKG1lc3NhZ2VzOiBTZXJpYWxpemVkTWVzc2FnZXMpOiBEZXNlcmlhbGl6ZWRNZXNzYWdlcyB7XG4gIHJldHVybiB7XG4gICAgcDJwTWVzc2FnZXM6IG1lc3NhZ2VzLnAycE1lc3NhZ2VzLm1hcChkZXNlcmlhbGl6ZVAyUE1lc3NhZ2UpLFxuICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiBtZXNzYWdlcy5icm9hZGNhc3RNZXNzYWdlcy5tYXAoZGVzZXJpYWxpemVCcm9hZGNhc3RNZXNzYWdlKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYSBQMlAgbWVzc2FnZS5cbiAqIEBwYXJhbSBtZXNzYWdlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXNlcmlhbGl6ZVAyUE1lc3NhZ2UobWVzc2FnZTogU2VyaWFsaXplZFAyUE1lc3NhZ2UpOiBEZXNlcmlhbGl6ZWRQMlBNZXNzYWdlIHtcbiAgcmV0dXJuIHtcbiAgICB0bzogbWVzc2FnZS50byxcbiAgICBmcm9tOiBtZXNzYWdlLmZyb20sXG4gICAgcGF5bG9hZDogbmV3IFVpbnQ4QXJyYXkoQnVmZmVyLmZyb20obWVzc2FnZS5wYXlsb2FkLCAnYmFzZTY0JykpLFxuICAgIGNvbW1pdG1lbnQ6IG1lc3NhZ2UuY29tbWl0bWVudCA/IG5ldyBVaW50OEFycmF5KEJ1ZmZlci5mcm9tKG1lc3NhZ2UuY29tbWl0bWVudCwgJ2Jhc2U2NCcpKSA6IHVuZGVmaW5lZCxcbiAgfTtcbn1cblxuLyoqXG4gKiBEZXNlcmlhbGl6ZXMgYSBCcm9hZGNhc3QgbWVzc2FnZS5cbiAqIEBwYXJhbSBtZXNzYWdlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXNlcmlhbGl6ZUJyb2FkY2FzdE1lc3NhZ2UobWVzc2FnZTogU2VyaWFsaXplZEJyb2FkY2FzdE1lc3NhZ2UpOiBEZXNlcmlhbGl6ZWRCcm9hZGNhc3RNZXNzYWdlIHtcbiAgcmV0dXJuIHtcbiAgICBmcm9tOiBtZXNzYWdlLmZyb20sXG4gICAgcGF5bG9hZDogbmV3IFVpbnQ4QXJyYXkoQnVmZmVyLmZyb20obWVzc2FnZS5wYXlsb2FkLCAnYmFzZTY0JykpLFxuICAgIHNpZ25hdHVyZVI6IG1lc3NhZ2Uuc2lnbmF0dXJlUiA/IG5ldyBVaW50OEFycmF5KEJ1ZmZlci5mcm9tKG1lc3NhZ2Uuc2lnbmF0dXJlUiwgJ2Jhc2U2NCcpKSA6IHVuZGVmaW5lZCxcbiAgfTtcbn1cblxuLyoqXG4gKiBTZXJpYWxpemVzIGEgUDJQIG1lc3NhZ2UuXG4gKiBAcGFyYW0gbWVzc2FnZVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplUDJQTWVzc2FnZShtZXNzYWdlOiBEZXNlcmlhbGl6ZWRQMlBNZXNzYWdlKTogU2VyaWFsaXplZFAyUE1lc3NhZ2Uge1xuICByZXR1cm4ge1xuICAgIHRvOiBtZXNzYWdlLnRvLFxuICAgIGZyb206IG1lc3NhZ2UuZnJvbSxcbiAgICBwYXlsb2FkOiBCdWZmZXIuZnJvbShtZXNzYWdlLnBheWxvYWQpLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICBjb21taXRtZW50OiBtZXNzYWdlLmNvbW1pdG1lbnQgPyBCdWZmZXIuZnJvbShtZXNzYWdlLmNvbW1pdG1lbnQpLnRvU3RyaW5nKCdiYXNlNjQnKSA6IHVuZGVmaW5lZCxcbiAgfTtcbn1cblxuLyoqXG4gKiBTZXJpYWxpemVzIGEgQnJvYWRjYXN0IG1lc3NhZ2UuXG4gKiBAcGFyYW0gbWVzc2FnZVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplQnJvYWRjYXN0TWVzc2FnZShtZXNzYWdlOiBEZXNlcmlhbGl6ZWRCcm9hZGNhc3RNZXNzYWdlKTogU2VyaWFsaXplZEJyb2FkY2FzdE1lc3NhZ2Uge1xuICByZXR1cm4ge1xuICAgIGZyb206IG1lc3NhZ2UuZnJvbSxcbiAgICBwYXlsb2FkOiBCdWZmZXIuZnJvbShtZXNzYWdlLnBheWxvYWQpLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICBzaWduYXR1cmVSOiBtZXNzYWdlLnNpZ25hdHVyZVIgPyBCdWZmZXIuZnJvbShtZXNzYWdlLnNpZ25hdHVyZVIpLnRvU3RyaW5nKCdiYXNlNjQnKSA6IHVuZGVmaW5lZCxcbiAgfTtcbn1cblxuLyoqXG4gKiBHZXRzIGNvbW1vbmtleUNoYWluIGZyb20gREtMUyBrZXlTaGFyZVxuICogQHBhcmFtIHtCdWZmZXJ9IGtleVNoYXJlIC0gREtMUyBrZXlTaGFyZVxuICogQHJldHVybnMge3N0cmluZ30gY29tbW9uS2V5Y2hhaW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvbW1vbktleWNoYWluKGtleVNoYXJlOiBCdWZmZXIpOiBzdHJpbmcge1xuICBjb25zdCBwYXJzZWRLZXlTaGFyZSA9IGRlY29kZShrZXlTaGFyZSk7XG4gIGFzc2VydChwYXJzZWRLZXlTaGFyZS5wdWJsaWNfa2V5LCAncHVibGljX2tleSBub3QgZm91bmQgaW4ga2V5U2hhcmUnKTtcbiAgYXNzZXJ0KHBhcnNlZEtleVNoYXJlLnJvb3RfY2hhaW5fY29kZSwgJ3Jvb3RfY2hhaW5fY29kZSBub3QgZm91bmQgaW4gcHVibGljX2tleScpO1xuICBjb25zdCBwdWJsaWNLZXkgPSBCdWZmZXIuZnJvbShwYXJzZWRLZXlTaGFyZS5wdWJsaWNfa2V5KS50b1N0cmluZygnaGV4Jyk7XG4gIGNvbnN0IHJvb3RDaGFpbkNvZGUgPSBCdWZmZXIuZnJvbShwYXJzZWRLZXlTaGFyZS5yb290X2NoYWluX2NvZGUpLnRvU3RyaW5nKCdoZXgnKTtcbiAgcmV0dXJuIHB1YmxpY0tleSArIHJvb3RDaGFpbkNvZGU7XG59XG4iXX0=
@@ -0,0 +1,22 @@
1
+ /// <reference types="node" />
2
+ /// <reference types="node" />
3
+ import { DeserializedDklsSignature } from './types';
4
+ import { Hash } from 'crypto';
5
+ /**
6
+ * Combines partial signatures from parties participating in DSG.
7
+ * @param round4MessagePayloads - round 4 message payloads from participating parties
8
+ * @param rHex - hex representation of the r value in the signature
9
+ * @returns {DeserializedMessages} - messages to send to other parties for the next round
10
+ */
11
+ export declare function combinePartialSignatures(round4MessagePayloads: Uint8Array[], rHex: string): DeserializedDklsSignature;
12
+ /**
13
+ * Verify a DKLs Signature and serialize it to recid:r:s:publickey format.
14
+ * @param message - message that was signed.
15
+ * @param dklsSignature - R and S values of the ECDSA signature.
16
+ * @param commonKeychain - public key appended to chaincode in hex.
17
+ * @param hash - optional hash function to apply on message before verifying. Default is sha256.
18
+ * @param shouldHash - flag to determine whether message should be hashed before verifying.
19
+ * @returns {string} - serialized signature in `recid:r:s:publickey` format
20
+ */
21
+ export declare function verifyAndConvertDklsSignature(message: Buffer, dklsSignature: DeserializedDklsSignature, commonKeychain: string, hash?: Hash, shouldHash?: boolean): string;
22
+ //# sourceMappingURL=util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../../src/tss/ecdsa-dkls/util.ts"],"names":[],"mappings":";;AAGA,OAAO,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAC;AAGpD,OAAO,EAAE,IAAI,EAAc,MAAM,QAAQ,CAAC;AAI1C;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,qBAAqB,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,yBAAyB,CAgBrH;AAED;;;;;;;;GAQG;AACH,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,yBAAyB,EACxC,cAAc,EAAE,MAAM,EACtB,IAAI,CAAC,EAAE,IAAI,EACX,UAAU,UAAO,GAChB,MAAM,CAgBR"}
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.verifyAndConvertDklsSignature = exports.combinePartialSignatures = void 0;
27
+ const secp256k1_1 = require("@noble/secp256k1");
28
+ const curves_1 = require("../../curves");
29
+ const util_1 = require("../../util");
30
+ const cbor_1 = require("cbor");
31
+ const secp256k1 = __importStar(require("secp256k1"));
32
+ const crypto_1 = require("crypto");
33
+ const delimeter = ':';
34
+ /**
35
+ * Combines partial signatures from parties participating in DSG.
36
+ * @param round4MessagePayloads - round 4 message payloads from participating parties
37
+ * @param rHex - hex representation of the r value in the signature
38
+ * @returns {DeserializedMessages} - messages to send to other parties for the next round
39
+ */
40
+ function combinePartialSignatures(round4MessagePayloads, rHex) {
41
+ const r = (0, util_1.bigIntFromBufferBE)(Buffer.from(rHex, 'hex').subarray(1));
42
+ const s0Arr = round4MessagePayloads.map((p) => (0, cbor_1.decode)(p).s_0);
43
+ const s1Arr = round4MessagePayloads.map((p) => (0, cbor_1.decode)(p).s_1);
44
+ const s0BigInts = s0Arr.map((s0) => (0, util_1.bigIntFromBufferBE)(Buffer.from(s0)));
45
+ const s1BigInts = s1Arr.map((s1) => (0, util_1.bigIntFromBufferBE)(Buffer.from(s1)));
46
+ const secp256k1Curve = new curves_1.Secp256k1Curve();
47
+ const s0Sum = s0BigInts.slice(1).reduce((sumSoFar, s0) => secp256k1Curve.scalarAdd(sumSoFar, s0), s0BigInts[0]);
48
+ const s1Sum = s1BigInts.slice(1).reduce((sumSoFar, s1) => secp256k1Curve.scalarAdd(sumSoFar, s1), s1BigInts[0]);
49
+ const s = secp256k1Curve.scalarMult(s0Sum, secp256k1Curve.scalarInvert(s1Sum));
50
+ const sig = new secp256k1_1.Signature(r, s);
51
+ const normalizedSig = sig.normalizeS();
52
+ return {
53
+ R: new Uint8Array((0, util_1.bigIntToBufferBE)(normalizedSig.r)),
54
+ S: new Uint8Array((0, util_1.bigIntToBufferBE)(normalizedSig.s)),
55
+ };
56
+ }
57
+ exports.combinePartialSignatures = combinePartialSignatures;
58
+ /**
59
+ * Verify a DKLs Signature and serialize it to recid:r:s:publickey format.
60
+ * @param message - message that was signed.
61
+ * @param dklsSignature - R and S values of the ECDSA signature.
62
+ * @param commonKeychain - public key appended to chaincode in hex.
63
+ * @param hash - optional hash function to apply on message before verifying. Default is sha256.
64
+ * @param shouldHash - flag to determine whether message should be hashed before verifying.
65
+ * @returns {string} - serialized signature in `recid:r:s:publickey` format
66
+ */
67
+ function verifyAndConvertDklsSignature(message, dklsSignature, commonKeychain, hash, shouldHash = true) {
68
+ const messageToVerify = shouldHash ? (hash || (0, crypto_1.createHash)('sha256')).update(message).digest() : message;
69
+ const pub0 = secp256k1.ecdsaRecover(Buffer.concat([dklsSignature.R, dklsSignature.S]), 0, messageToVerify, true);
70
+ const pub1 = secp256k1.ecdsaRecover(Buffer.concat([dklsSignature.R, dklsSignature.S]), 1, messageToVerify, true);
71
+ const truePub = commonKeychain.slice(0, 66);
72
+ let recId;
73
+ if (truePub === Buffer.from(pub0).toString('hex')) {
74
+ recId = 0;
75
+ }
76
+ else if (truePub === Buffer.from(pub1).toString('hex')) {
77
+ recId = 1;
78
+ }
79
+ else {
80
+ throw Error('Invalid Signature');
81
+ }
82
+ return `${recId}${delimeter}${Buffer.from(dklsSignature.R).toString('hex')}${delimeter}${Buffer.from(dklsSignature.S).toString('hex')}${delimeter}${truePub}`;
83
+ }
84
+ exports.verifyAndConvertDklsSignature = verifyAndConvertDklsSignature;
85
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90c3MvZWNkc2EtZGtscy91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsZ0RBQTZDO0FBQzdDLHlDQUE4QztBQUM5QyxxQ0FBa0U7QUFFbEUsK0JBQThCO0FBQzlCLHFEQUF1QztBQUN2QyxtQ0FBMEM7QUFFMUMsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBRXRCOzs7OztHQUtHO0FBQ0gsU0FBZ0Isd0JBQXdCLENBQUMscUJBQW1DLEVBQUUsSUFBWTtJQUN4RixNQUFNLENBQUMsR0FBRyxJQUFBLHlCQUFrQixFQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25FLE1BQU0sS0FBSyxHQUFHLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBQSxhQUFNLEVBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDOUQsTUFBTSxLQUFLLEdBQUcscUJBQXFCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFBLGFBQU0sRUFBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM5RCxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFBLHlCQUFrQixFQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUEseUJBQWtCLEVBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFD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LEdBQUcsU0FBUyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQ2xHLGFBQWEsQ0FBQyxDQUFDLENBQ2hCLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLFNBQVMsR0FBRyxPQUFPLEVBQUUsQ0FBQztBQUM1QyxDQUFDO0FBdEJELHNFQXNCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNpZ25hdHVyZSB9IGZyb20gJ0Bub2JsZS9zZWNwMjU2azEnO1xuaW1wb3J0IHsgU2VjcDI1NmsxQ3VydmUgfSBmcm9tICcuLi8uLi9jdXJ2ZXMnO1xuaW1wb3J0IHsgYmlnSW50RnJvbUJ1ZmZlckJFLCBiaWdJbnRUb0J1ZmZlckJFIH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5pbXBvcnQgeyBEZXNlcmlhbGl6ZWREa2xzU2lnbmF0dXJlIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBkZWNvZGUgfSBmcm9tICdjYm9yJztcbmltcG9ydCAqIGFzIHNlY3AyNTZrMSBmcm9tICdzZWNwMjU2azEnO1xuaW1wb3J0IHsgSGFzaCwgY3JlYXRlSGFzaCB9IGZyb20gJ2NyeXB0byc7XG5cbmNvbnN0IGRlbGltZXRlciA9ICc6JztcblxuLyoqXG4gKiBDb21iaW5lcyBwYXJ0aWFsIHNpZ25hdHVyZXMgZnJvbSBwYXJ0aWVzIHBhcnRpY2lwYXRpbmcgaW4gRFNHLlxuICogQHBhcmFtIHJvdW5kNE1lc3NhZ2VQYXlsb2FkcyAtIHJvdW5kIDQgbWVzc2FnZSBwYXlsb2FkcyBmcm9tIHBhcnRpY2lwYXRpbmcgcGFydGllc1xuICogQHBhcmFtIHJIZXggLSBoZXggcmVwcmVzZW50YXRpb24gb2YgdGhlIHIgdmFsdWUgaW4gdGhlIHNpZ25hdHVyZVxuICogQHJldHVybnMge0Rlc2VyaWFsaXplZE1lc3NhZ2VzfSAtIG1lc3NhZ2VzIHRvIHNlbmQgdG8gb3RoZXIgcGFydGllcyBmb3IgdGhlIG5leHQgcm91bmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmVQYXJ0aWFsU2lnbmF0dXJlcyhyb3VuZDRNZXNzYWdlUGF5bG9hZHM6IFVpbnQ4QXJyYXlbXSwgckhleDogc3RyaW5nKTogRGVzZXJpYWxpemVkRGtsc1NpZ25hdHVyZSB7XG4gIGNvbnN0IHIgPSBiaWdJbnRGcm9tQnVmZmVyQkUoQnVmZmVyLmZyb20ockhleCwgJ2hleCcpLnN1YmFycmF5KDEpKTtcbiAgY29uc3QgczBBcnIgPSByb3VuZDRNZXNzYWdlUGF5bG9hZHMubWFwKChwKSA9PiBkZWNvZGUocCkuc18wKTtcbiAgY29uc3QgczFBcnIgPSByb3VuZDRNZXNzYWdlUGF5bG9hZHMubWFwKChwKSA9PiBkZWNvZGUocCkuc18xKTtcbiAgY29uc3QgczBCaWdJbnRzID0gczBBcnIubWFwKChzMCkgPT4gYmlnSW50RnJvbUJ1ZmZlckJFKEJ1ZmZlci5mcm9tKHMwKSkpO1xuICBjb25zdCBzMUJpZ0ludHMgPSBzMUFyci5tYXAoKHMxKSA9PiBiaWdJbnRGcm9tQnVmZmVyQkUoQnVmZmVyLmZyb20oczEpKSk7XG4gIGNvbnN0IHNlY3AyNTZrMUN1cnZlID0gbmV3IFNlY3AyNTZrMUN1cnZlKCk7XG4gIGNvbnN0IHMwU3VtID0gczBCaWdJbnRzLnNsaWNlKDEpLnJlZHVjZSgoc3VtU29GYXIsIHMwKSA9PiBzZWNwMjU2azFDdXJ2ZS5zY2FsYXJBZGQoc3VtU29GYXIsIHMwKSwgczBCaWdJbnRzWzBdKTtcbiAgY29uc3QgczFTdW0gPSBzMUJpZ0ludHMuc2xpY2UoMSkucmVkdWNlKChzdW1Tb0ZhciwgczEpID0+IHNlY3AyNTZrMUN1cnZlLnNjYWxhckFkZChzdW1Tb0ZhciwgczEpLCBzMUJpZ0ludHNbMF0pO1xuICBjb25zdCBzID0gc2VjcDI1NmsxQ3VydmUuc2NhbGFyTXVsdChzMFN1bSwgc2VjcDI1NmsxQ3VydmUuc2NhbGFySW52ZXJ0KHMxU3VtKSk7XG4gIGNvbnN0IHNpZyA9IG5ldyBTaWduYXR1cmUociwgcyk7XG4gIGNvbnN0IG5vcm1hbGl6ZWRTaWcgPSBzaWcubm9ybWFsaXplUygpO1xuICByZXR1cm4ge1xuICAgIFI6IG5ldyBVaW50OEFycmF5KGJpZ0ludFRvQnVmZmVyQkUobm9ybWFsaXplZFNpZy5yKSksXG4gICAgUzogbmV3IFVpbnQ4QXJyYXkoYmlnSW50VG9CdWZmZXJCRShub3JtYWxpemVkU2lnLnMpKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBWZXJpZnkgYSBES0xzIFNpZ25hdHVyZSBhbmQgc2VyaWFsaXplIGl0IHRvIHJlY2lkOnI6czpwdWJsaWNrZXkgZm9ybWF0LlxuICogQHBhcmFtIG1lc3NhZ2UgLSBtZXNzYWdlIHRoYXQgd2FzIHNpZ25lZC5cbiAqIEBwYXJhbSBka2xzU2lnbmF0dXJlIC0gUiBhbmQgUyB2YWx1ZXMgb2YgdGhlIEVDRFNBIHNpZ25hdHVyZS5cbiAqIEBwYXJhbSBjb21tb25LZXljaGFpbiAtIHB1YmxpYyBrZXkgYXBwZW5kZWQgdG8gY2hhaW5jb2RlIGluIGhleC5cbiAqIEBwYXJhbSBoYXNoIC0gb3B0aW9uYWwgaGFzaCBmdW5jdGlvbiB0byBhcHBseSBvbiBtZXNzYWdlIGJlZm9yZSB2ZXJpZnlpbmcuIERlZmF1bHQgaXMgc2hhMjU2LlxuICogQHBhcmFtIHNob3VsZEhhc2ggLSBmbGFnIHRvIGRldGVybWluZSB3aGV0aGVyIG1lc3NhZ2Ugc2hvdWxkIGJlIGhhc2hlZCBiZWZvcmUgdmVyaWZ5aW5nLlxuICogQHJldHVybnMge3N0cmluZ30gLSBzZXJpYWxpemVkIHNpZ25hdHVyZSBpbiBgcmVjaWQ6cjpzOnB1YmxpY2tleWAgZm9ybWF0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2ZXJpZnlBbmRDb252ZXJ0RGtsc1NpZ25hdHVyZShcbiAgbWVzc2FnZTogQnVmZmVyLFxuICBka2xzU2lnbmF0dXJlOiBEZXNlcmlhbGl6ZWREa2xzU2lnbmF0dXJlLFxuICBjb21tb25LZXljaGFpbjogc3RyaW5nLFxuICBoYXNoPzogSGFzaCxcbiAgc2hvdWxkSGFzaCA9IHRydWVcbik6IHN0cmluZyB7XG4gIGNvbnN0IG1lc3NhZ2VUb1ZlcmlmeSA9IHNob3VsZEhhc2ggPyAoaGFzaCB8fCBjcmVhdGVIYXNoKCdzaGEyNTYnKSkudXBkYXRlKG1lc3NhZ2UpLmRpZ2VzdCgpIDogbWVzc2FnZTtcbiAgY29uc3QgcHViMCA9IHNlY3AyNTZrMS5lY2RzYVJlY292ZXIoQnVmZmVyLmNvbmNhdChbZGtsc1NpZ25hdHVyZS5SLCBka2xzU2lnbmF0dXJlLlNdKSwgMCwgbWVzc2FnZVRvVmVyaWZ5LCB0cnVlKTtcbiAgY29uc3QgcHViMSA9IHNlY3AyNTZrMS5lY2RzYVJlY292ZXIoQnVmZmVyLmNvbmNhdChbZGtsc1NpZ25hdHVyZS5SLCBka2xzU2lnbmF0dXJlLlNdKSwgMSwgbWVzc2FnZVRvVmVyaWZ5LCB0cnVlKTtcbiAgY29uc3QgdHJ1ZVB1YiA9IGNvbW1vbktleWNoYWluLnNsaWNlKDAsIDY2KTtcbiAgbGV0IHJlY0lkOiBudW1iZXI7XG4gIGlmICh0cnVlUHViID09PSBCdWZmZXIuZnJvbShwdWIwKS50b1N0cmluZygnaGV4JykpIHtcbiAgICByZWNJZCA9IDA7XG4gIH0gZWxzZSBpZiAodHJ1ZVB1YiA9PT0gQnVmZmVyLmZyb20ocHViMSkudG9TdHJpbmcoJ2hleCcpKSB7XG4gICAgcmVjSWQgPSAxO1xuICB9IGVsc2Uge1xuICAgIHRocm93IEVycm9yKCdJbnZhbGlkIFNpZ25hdHVyZScpO1xuICB9XG4gIHJldHVybiBgJHtyZWNJZH0ke2RlbGltZXRlcn0ke0J1ZmZlci5mcm9tKGRrbHNTaWduYXR1cmUuUikudG9TdHJpbmcoJ2hleCcpfSR7ZGVsaW1ldGVyfSR7QnVmZmVyLmZyb20oXG4gICAgZGtsc1NpZ25hdHVyZS5TXG4gICkudG9TdHJpbmcoJ2hleCcpfSR7ZGVsaW1ldGVyfSR7dHJ1ZVB1Yn1gO1xufVxuIl19
@@ -1,2 +1,3 @@
1
1
  export * from './ecdsa';
2
+ export * from './ecdsa-dkls';
2
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tss/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tss/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC"}
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -11,4 +15,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
11
15
  };
12
16
  Object.defineProperty(exports, "__esModule", { value: true });
13
17
  __exportStar(require("./ecdsa"), exports);
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdHNzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLDBDQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZWNkc2EnO1xuIl19
18
+ __exportStar(require("./ecdsa-dkls"), exports);
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdHNzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwwQ0FBd0I7QUFDeEIsK0NBQTZCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9lY2RzYSc7XG5leHBvcnQgKiBmcm9tICcuL2VjZHNhLWRrbHMnO1xuIl19
@@ -0,0 +1,14 @@
1
+ /// <reference types="node" />
2
+ export interface HashCommitDecommit {
3
+ commitment: Buffer;
4
+ decommitment: HashDecommitment;
5
+ }
6
+ export interface HashDecommitment {
7
+ secret: Buffer;
8
+ blindingFactor: Buffer;
9
+ }
10
+ export interface SchnorrProof {
11
+ vPoint: bigint;
12
+ r: bigint;
13
+ }
14
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";AAAA,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,gBAAgB,CAAC;CAChC;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,CAAC,EAAE,MAAM,CAAC;CACX"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgSGFzaENvbW1pdERlY29tbWl0IHtcbiAgY29tbWl0bWVudDogQnVmZmVyO1xuICBkZWNvbW1pdG1lbnQ6IEhhc2hEZWNvbW1pdG1lbnQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGFzaERlY29tbWl0bWVudCB7XG4gIHNlY3JldDogQnVmZmVyO1xuICBibGluZGluZ0ZhY3RvcjogQnVmZmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNjaG5vcnJQcm9vZiB7XG4gIHZQb2ludDogYmlnaW50O1xuICByOiBiaWdpbnQ7XG59XG4iXX0=
@@ -20,9 +20,9 @@ export declare function hexToBigInt(hex: string): bigint;
20
20
  * @returns {string} - the hex value
21
21
  */
22
22
  export declare function bigIntToHex(bigint: bigint, hexLength?: number): string;
23
- export declare function bigIntToBufferLE(n: bigint, bytes?: number): Buffer;
23
+ export declare function bigIntToBufferLE(n: bigint, minBytes?: number): Buffer;
24
24
  export declare function bigIntFromBufferLE(buf: Buffer): bigint;
25
- export declare function bigIntToBufferBE(n: bigint, bytes?: number): Buffer;
25
+ export declare function bigIntToBufferBE(n: bigint, minBytes?: number): Buffer;
26
26
  export declare function bigIntFromBufferBE(buf: Buffer): bigint;
27
27
  export declare function bigIntFromU8ABE(buf: Uint8Array): bigint;
28
28
  export declare function clamp(u: bigint): bigint;
@@ -50,4 +50,10 @@ export declare function randomPositiveCoPrimeLessThan(x: bigint): Promise<bigint
50
50
  * @returns {Promise<bigint>}
51
51
  */
52
52
  export declare function randomBigInt(bitlength: number): Promise<bigint>;
53
+ /**
54
+ * @param seed - used to construct derivation path deterministically
55
+ * @param isMaster - if set, path starts with prefix `m/`
56
+ * @return path `(m/)/999999/a/b` where `a` and `b` are 7-byte pseudorandom numbers based on seed
57
+ */
58
+ export declare function getDerivationPath(seed: string, isMaster?: boolean): string;
53
59
  //# sourceMappingURL=util.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAI5C;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAInE;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAIvF;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAU/C;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAOtE;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAQlE;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAQlE;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,CAEvD;AAED,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAIvC;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,CAEzD;AAED;;;;GAIG;AACH,wBAAsB,uBAAuB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAOxE;AAED;;;;GAIG;AACH,wBAAsB,6BAA6B,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAU9E;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAErE"}
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAK5C;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAInE;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAIvF;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAU/C;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAOtE;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAQrE;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAQrE;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,CAEvD;AAED,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAIvC;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,CAEzD;AAED;;;;GAIG;AACH,wBAAsB,uBAAuB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAOxE;AAED;;;;GAIG;AACH,wBAAsB,6BAA6B,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAU9E;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAErE;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,UAAO,GAAG,MAAM,CAQvE"}
package/dist/src/util.js CHANGED
@@ -1,9 +1,13 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.randomBigInt = exports.randomPositiveCoPrimeLessThan = exports.randomPositiveCoPrimeTo = exports.getPaillierPublicKey = exports.clamp = exports.bigIntFromU8ABE = exports.bigIntFromBufferBE = exports.bigIntToBufferBE = exports.bigIntFromBufferLE = exports.bigIntToBufferLE = exports.bigIntToHex = exports.hexToBigInt = exports.convertBigIntArrToHexArr = exports.convertHexArrToBigIntArr = void 0;
6
+ exports.getDerivationPath = exports.randomBigInt = exports.randomPositiveCoPrimeLessThan = exports.randomPositiveCoPrimeTo = exports.getPaillierPublicKey = exports.clamp = exports.bigIntFromU8ABE = exports.bigIntFromBufferBE = exports.bigIntToBufferBE = exports.bigIntFromBufferLE = exports.bigIntToBufferLE = exports.bigIntToHex = exports.hexToBigInt = exports.convertBigIntArrToHexArr = exports.convertHexArrToBigIntArr = void 0;
4
7
  const paillier_bigint_1 = require("paillier-bigint");
5
8
  const bigint_crypto_utils_1 = require("bigint-crypto-utils");
6
9
  const bigint_mod_arith_1 = require("bigint-mod-arith");
10
+ const crypto_1 = __importDefault(require("crypto"));
7
11
  /**
8
12
  * Returns a bigint array from a hex string array
9
13
  * @param values
@@ -53,12 +57,12 @@ function bigIntToHex(bigint, hexLength) {
53
57
  return hex;
54
58
  }
55
59
  exports.bigIntToHex = bigIntToHex;
56
- function bigIntToBufferLE(n, bytes) {
60
+ function bigIntToBufferLE(n, minBytes) {
57
61
  let v = n.toString(16);
58
62
  v = '0'.slice(0, v.length % 2) + v;
59
63
  const buf = Buffer.from(v, 'hex').reverse();
60
- if (bytes && buf.length < bytes) {
61
- return Buffer.concat([buf, Buffer.alloc(bytes - buf.length)]);
64
+ if (minBytes && buf.length < minBytes) {
65
+ return Buffer.concat([buf, Buffer.alloc(minBytes - buf.length)]);
62
66
  }
63
67
  return buf;
64
68
  }
@@ -67,12 +71,12 @@ function bigIntFromBufferLE(buf) {
67
71
  return BigInt('0x' + Buffer.from(buf).reverse().toString('hex'));
68
72
  }
69
73
  exports.bigIntFromBufferLE = bigIntFromBufferLE;
70
- function bigIntToBufferBE(n, bytes) {
74
+ function bigIntToBufferBE(n, minBytes) {
71
75
  let v = n.toString(16);
72
76
  v = '0'.slice(0, v.length % 2) + v;
73
77
  const buf = Buffer.from(v, 'hex');
74
- if (bytes && buf.length < bytes) {
75
- return Buffer.concat([Buffer.alloc(bytes - buf.length), buf]);
78
+ if (minBytes && buf.length < minBytes) {
79
+ return Buffer.concat([Buffer.alloc(minBytes - buf.length), buf]);
76
80
  }
77
81
  return buf;
78
82
  }
@@ -107,8 +111,8 @@ exports.getPaillierPublicKey = getPaillierPublicKey;
107
111
  */
108
112
  async function randomPositiveCoPrimeTo(x) {
109
113
  while (true) {
110
- const y = await randomBigInt(bigint_crypto_utils_1.bitLength(x));
111
- if (y > BigInt(0) && bigint_mod_arith_1.gcd(x, y) === BigInt(1)) {
114
+ const y = await randomBigInt((0, bigint_crypto_utils_1.bitLength)(x));
115
+ if (y > BigInt(0) && (0, bigint_mod_arith_1.gcd)(x, y) === BigInt(1)) {
112
116
  return y;
113
117
  }
114
118
  }
@@ -124,8 +128,8 @@ async function randomPositiveCoPrimeLessThan(x) {
124
128
  throw new Error('x must be larger than 2');
125
129
  }
126
130
  while (true) {
127
- const y = await randomBigInt(bigint_crypto_utils_1.bitLength(x));
128
- if (y > BigInt(0) && y < x && bigint_mod_arith_1.gcd(x, y) === BigInt(1)) {
131
+ const y = await randomBigInt((0, bigint_crypto_utils_1.bitLength)(x));
132
+ if (y > BigInt(0) && y < x && (0, bigint_mod_arith_1.gcd)(x, y) === BigInt(1)) {
129
133
  return y;
130
134
  }
131
135
  }
@@ -137,7 +141,25 @@ exports.randomPositiveCoPrimeLessThan = randomPositiveCoPrimeLessThan;
137
141
  * @returns {Promise<bigint>}
138
142
  */
139
143
  async function randomBigInt(bitlength) {
140
- return bigIntFromBufferBE(Buffer.from(await bigint_crypto_utils_1.randBits(bitlength, true)));
144
+ return bigIntFromBufferBE(Buffer.from(await (0, bigint_crypto_utils_1.randBits)(bitlength, true)));
141
145
  }
142
146
  exports.randomBigInt = randomBigInt;
143
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFEQUE0QztBQUM1Qyw2REFBMEQ7QUFDMUQsdURBQXVDO0FBRXZDOzs7R0FHRztBQUNILFNBQWdCLHdCQUF3QixDQUFDLE1BQWdCO0lBQ3ZELE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQzFCLE9BQU8sV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVCLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUpELDREQUlDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLHdCQUF3QixDQUFDLE1BQWdCLEVBQUUsU0FBa0I7SUFDM0UsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDMUIsT0FBTyxXQUFXLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3ZDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUpELDREQUlDO0FBRUQsU0FBZ0IsV0FBVyxDQUFDLEdBQVc7SUFDckMsK0RBQStEO0lBQy9ELDREQUE0RDtJQUM1RCw4REFBOEQ7SUFDOUQsbURBQW1EO0lBQ25ELG1CQUFtQjtJQUNuQixJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRTtRQUM1QixPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNwQjtJQUNELE9BQU8sTUFBTSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztBQUM1QixDQUFDO0FBVkQsa0NBVUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFnQixXQUFXLENBQUMsTUFBYyxFQUFFLFNBQWtCO0lBQzVELElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDOUIsR0FBRyxHQUFHLEdBQUcs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cnQgeyBQdWJsaWNLZXkgfSBmcm9tICdwYWlsbGllci1iaWdpbnQnO1xuaW1wb3J0IHsgYml0TGVuZ3RoLCByYW5kQml0cyB9IGZyb20gJ2JpZ2ludC1jcnlwdG8tdXRpbHMnO1xuaW1wb3J0IHsgZ2NkIH0gZnJvbSAnYmlnaW50LW1vZC1hcml0aCc7XG5cbi8qKlxuICogUmV0dXJucyBhIGJpZ2ludCBhcnJheSBmcm9tIGEgaGV4IHN0cmluZyBhcnJheVxuICogQHBhcmFtIHZhbHVlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydEhleEFyclRvQmlnSW50QXJyKHZhbHVlczogc3RyaW5nW10pOiBiaWdpbnRbXSB7XG4gIHJldHVybiB2YWx1ZXMubWFwKCh2YWx1ZSkgPT4ge1xuICAgIHJldHVybiBoZXhUb0JpZ0ludCh2YWx1ZSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBoZXggc3RyaW5nIGFycmF5IGZyb20gYSBiaWdpbnQgYXJyYXlcbiAqIEBwYXJhbSB2YWx1ZXNcbiAqIEBwYXJhbSBoZXhMZW5ndGggLSBsZW5ndGggdG8gcGFkIGVhY2ggYmlnIGludCBudW1iZXIgdG9vXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0QmlnSW50QXJyVG9IZXhBcnIodmFsdWVzOiBiaWdpbnRbXSwgaGV4TGVuZ3RoPzogbnVtYmVyKTogc3RyaW5nW10ge1xuICByZXR1cm4gdmFsdWVzLm1hcCgodmFsdWUpID0+IHtcbiAgICByZXR1cm4gYmlnSW50VG9IZXgodmFsdWUsIGhleExlbmd0aCk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGV4VG9CaWdJbnQoaGV4OiBzdHJpbmcpOiBiaWdpbnQge1xuICAvLyBTdHJhbmdlbHkgYmlnaW50LnRvU3RyaW5nKDE2KSBnaXZlcyBhIGhleCBzdHJpbmcgd2l0aG91dCAweCxcbiAgLy8gYnV0IGl0IHdvbid0IGFjY2VwdCB0aGUgc2FtZSBzdHJpbmcgd2l0aG91dCAweCB0byBjb252ZXJ0XG4gIC8vIHRvIGEgYmlnaW50IChCaWdJbnQoaGV4IHN0cmluZykpLiBTbyBoYXZlIHRvIGludHJvZHVjZSB0aGlzXG4gIC8vIGNoZWNrIHRvIGNvbnZlcnQgdG8gYWRkIDB4IGluIGNhc2UgaWYgaGV4IHN0cmluZ1xuICAvLyBkb2Vzbid0IGhhdmUgaXQuXG4gIGlmIChoZXguc2xpY2UoMCwgMikgPT09ICcweCcpIHtcbiAgICByZXR1cm4gQmlnSW50KGhleCk7XG4gIH1cbiAgcmV0dXJuIEJpZ0ludCgnMHgnICsgaGV4KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFuIGhleCBzdHJpbmcgb2YgdGhlIGdpdmVuIGJpZ2ludFxuICpcbiAqIEBwYXJhbSB7YmlnaW50fSBiaWdpbnQgLSB0aGUgYmlnaW50IHRvIGJlIGNvbnZlcnRlZCB0byBoZXhcbiAqIEBwYXJhbSBoZXhMZW5ndGhcbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gdGhlIGhleCB2YWx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYmlnSW50VG9IZXgoYmlnaW50OiBiaWdpbnQsIGhleExlbmd0aD86IG51bWJlcik6IHN0cmluZyB7XG4gIGxldCBoZXggPSBiaWdpbnQudG9TdHJpbmcoMTYpO1xuICBoZXggPSAnMCcuc2xpY2UoMCwgaGV4Lmxlbmd0aCAlIDIpICsgaGV4O1xuICBpZiAoaGV4TGVuZ3RoKSB7XG4gICAgaGV4ID0gaGV4LnBhZFN0YXJ0KGhleExlbmd0aCwgJzAnKTtcbiAgfVxuICByZXR1cm4gaGV4O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmlnSW50VG9CdWZmZXJMRShuOiBiaWdpbnQsIGJ5dGVzPzogbnVtYmVyKTogQnVmZmVyIHtcbiAgbGV0IHYgPSBuLnRvU3RyaW5nKDE2KTtcbiAgdiA9ICcwJy5zbGljZSgwLCB2Lmxlbmd0aCAlIDIpICsgdjtcbiAgY29uc3QgYnVmID0gQnVmZmVyLmZyb20odiwgJ2hleCcpLnJldmVyc2UoKTtcbiAgaWYgKGJ5dGVzICYmIGJ1Zi5sZW5ndGggPCBieXRlcykge1xuICAgIHJldHVybiBCdWZmZXIuY29uY2F0KFtidWYsIEJ1ZmZlci5hbGxvYyhieXRlcyAtIGJ1Zi5sZW5ndGgpXSk7XG4gIH1cbiAgcmV0dXJuIGJ1Zjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJpZ0ludEZyb21CdWZmZXJMRShidWY6IEJ1ZmZlcik6IGJpZ2ludCB7XG4gIHJldHVybiBCaWdJbnQoJzB4JyArIEJ1ZmZlci5mcm9tKGJ1ZikucmV2ZXJzZSgpLnRvU3RyaW5nKCdoZXgnKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiaWdJbnRUb0J1ZmZlckJFKG46IGJpZ2ludCwgYnl0ZXM/OiBudW1iZXIpOiBCdWZmZXIge1xuICBsZXQgdiA9IG4udG9TdHJpbmcoMTYpO1xuICB2ID0gJzAnLnNsaWNlKDAsIHYubGVuZ3RoICUgMikgKyB2O1xuICBjb25zdCBidWYgPSBCdWZmZXIuZnJvbSh2LCAnaGV4Jyk7XG4gIGlmIChieXRlcyAmJiBidWYubGVuZ3RoIDwgYnl0ZXMpIHtcbiAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChbQnVmZmVyLmFsbG9jKGJ5dGVzIC0gYnVmLmxlbmd0aCksIGJ1Zl0pO1xuICB9XG4gIHJldHVybiBidWY7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiaWdJbnRGcm9tQnVmZmVyQkUoYnVmOiBCdWZmZXIpOiBiaWdpbnQge1xuICByZXR1cm4gQmlnSW50KCcweCcgKyBidWYudG9TdHJpbmcoJ2hleCcpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJpZ0ludEZyb21VOEFCRShidWY6IFVpbnQ4QXJyYXkpOiBiaWdpbnQge1xuICByZXR1cm4gYmlnSW50RnJvbUJ1ZmZlckJFKEJ1ZmZlci5mcm9tKGJ1ZikpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xhbXAodTogYmlnaW50KTogYmlnaW50IHtcbiAgdSAmPSBCaWdJbnQoJzB4N2ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmOCcpO1xuICB1IHw9IEJpZ0ludCgnMHg0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyk7XG4gIHJldHVybiB1O1xufVxuXG4vKipcbiAqIEZ1bmN0aW9uIGdldCBwYWlsbGllciBwdWJsaWMga2V5IHNpbXBsZSB2YXJpZW50XG4gKiBAcGFyYW0ge2JpZ2ludH0gblxuICogQHJldHVybnMge2JpZ2ludH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBhaWxsaWVyUHVibGljS2V5KG46IGJpZ2ludCk6IFB1YmxpY0tleSB7XG4gIHJldHVybiBuZXcgUHVibGljS2V5KG4sIG4gKyBCaWdJbnQoMSkpO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlIGEgcmFuZG9tIHBvc2l0aXZlIGludGVnZXIgY28tcHJpbWUgdG8geFxuICogQHBhcmFtIHhcbiAqIEByZXR1cm5zIHtQcm9taXNlPGJpZ2ludD59XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByYW5kb21Qb3NpdGl2ZUNvUHJpbWVUbyh4OiBiaWdpbnQpOiBQcm9taXNlPGJpZ2ludD4ge1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbnN0IHkgPSBhd2FpdCByYW5kb21CaWdJbnQoYml0TGVuZ3RoKHgpKTtcbiAgICBpZiAoeSA+IEJpZ0ludCgwKSAmJiBnY2QoeCwgeSkgPT09IEJpZ0ludCgxKSkge1xuICAgICAgcmV0dXJuIHk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogR2VuZXJhdGUgYSByYW5kb20gcG9zaXRpdmUgaW50ZWdlciBjb3ByaW1lIGxlc3MgdGhhbiB4IHdpdGggdGhlIHNhbWUgYml0IGRlcHRoLlxuICogQHBhcmFtIHhcbiAqIEByZXR1cm5zIHtQcm9taXNlPGJpZ2ludD59XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByYW5kb21Qb3NpdGl2ZUNvUHJpbWVMZXNzVGhhbih4OiBiaWdpbnQpOiBQcm9taXNlPGJpZ2ludD4ge1xuICBpZiAoeCA8PSBCaWdJbnQoMikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3ggbXVzdCBiZSBsYXJnZXIgdGhhbiAyJyk7XG4gIH1cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBjb25zdCB5ID0gYXdhaXQgcmFuZG9tQmlnSW50KGJpdExlbmd0aCh4KSk7XG4gICAgaWYgKHkgPiBCaWdJbnQoMCkgJiYgeSA8IHggJiYgZ2NkKHgsIHkpID09PSBCaWdJbnQoMSkpIHtcbiAgICAgIHJldHVybiB5O1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEdlbmVyYXRlIGEgcmFuZG9tIG51bWJlciBvZiBhIGdpdmVuIGJpdGxlbmd0aFxuICogQHBhcmFtIGJpdGxlbmd0aFxuICogQHJldHVybnMge1Byb21pc2U8YmlnaW50Pn1cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJhbmRvbUJpZ0ludChiaXRsZW5ndGg6IG51bWJlcik6IFByb21pc2U8YmlnaW50PiB7XG4gIHJldHVybiBiaWdJbnRGcm9tQnVmZmVyQkUoQnVmZmVyLmZyb20oYXdhaXQgcmFuZEJpdHMoYml0bGVuZ3RoLCB0cnVlKSkpO1xufVxuIl19
147
+ /**
148
+ * @param seed - used to construct derivation path deterministically
149
+ * @param isMaster - if set, path starts with prefix `m/`
150
+ * @return path `(m/)/999999/a/b` where `a` and `b` are 7-byte pseudorandom numbers based on seed
151
+ */
152
+ function getDerivationPath(seed, isMaster = true) {
153
+ const derivationPathInput = sha256(sha256(`${seed}`)).toString('hex');
154
+ const derivationPathParts = [
155
+ parseInt(derivationPathInput.slice(0, 7), 16),
156
+ parseInt(derivationPathInput.slice(7, 14), 16),
157
+ ];
158
+ const prefix = isMaster ? 'm/' : '';
159
+ return prefix + '999999/' + derivationPathParts.join('/');
160
+ }
161
+ exports.getDerivationPath = getDerivationPath;
162
+ function sha256(input) {
163
+ return crypto_1.default.createHash('sha256').update(input).digest();
164
+ }
165
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLHFEQUE0QztBQUM1Qyw2REFBMEQ7QUFDMUQsdURBQXVDO0FBQ3ZDLG9EQUE0QjtBQUU1Qjs7O0dBR0c7QUFDSCxTQUFnQix3QkFBd0IsQ0FBQyxNQUFnQjtJQUN2RCxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUMxQixPQUFPLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFKRCw0REFJQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQix3QkFBd0IsQ0FBQyxNQUFnQixFQUFFLFNBQWtCO0lBQzNFLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQzFCLE9BQU8sV0FBVyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN2QyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFKRCw0REFJQztBQUVELFNBQWdCLFdBQVcsQ0FBQyxHQUFXO0lBQ3JDLCtEQUErRDtJQUMvRCw0REFBNEQ7SUFDNUQsOERBQThEO0lBQzlELG1EQUFtRDtJQUNuRCxtQkFBbUI7SUFDbkIsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUU7UUFDNUIsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDcEI7SUFDRCxPQUFPLE1BQU0sQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDNUIsQ0FBQztBQVZELGtDQVVDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBZ0IsV0FBVyxDQUFDLE1BQWMsRUFBRSxTQUFrQjtJQUM1RCxJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzlC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MUUsQ0FBQztBQUZELG9DQUVDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLGlCQUFpQixDQUFDLElBQVksRUFBRSxRQUFRLEdBQUcsSUFBSTtJQUM3RCxNQUFNLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RFLE1BQU0sbUJBQW1CLEdBQUc7UUFDMUIsUUFBUSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQzdDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztLQUMvQyxDQUFDO0lBQ0YsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNwQyxPQUFPLE1BQU0sR0FBRyxTQUFTLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzVELENBQUM7QUFSRCw4Q0FRQztBQUVELFNBQVMsTUFBTSxDQUFDLEtBQXdCO0lBQ3RDLE9BQU8sZ0JBQU0sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQzVELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQdWJsaWNLZXkgfSBmcm9tICdwYWlsbGllci1iaWdpbnQnO1xuaW1wb3J0IHsgYml0TGVuZ3RoLCByYW5kQml0cyB9IGZyb20gJ2JpZ2ludC1jcnlwdG8tdXRpbHMnO1xuaW1wb3J0IHsgZ2NkIH0gZnJvbSAnYmlnaW50LW1vZC1hcml0aCc7XG5pbXBvcnQgY3J5cHRvIGZyb20gJ2NyeXB0byc7XG5cbi8qKlxuICogUmV0dXJucyBhIGJpZ2ludCBhcnJheSBmcm9tIGEgaGV4IHN0cmluZyBhcnJheVxuICogQHBhcmFtIHZhbHVlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydEhleEFyclRvQmlnSW50QXJyKHZhbHVlczogc3RyaW5nW10pOiBiaWdpbnRbXSB7XG4gIHJldHVybiB2YWx1ZXMubWFwKCh2YWx1ZSkgPT4ge1xuICAgIHJldHVybiBoZXhUb0JpZ0ludCh2YWx1ZSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBoZXggc3RyaW5nIGFycmF5IGZyb20gYSBiaWdpbnQgYXJyYXlcbiAqIEBwYXJhbSB2YWx1ZXNcbiAqIEBwYXJhbSBoZXhMZW5ndGggLSBsZW5ndGggdG8gcGFkIGVhY2ggYmlnIGludCBudW1iZXIgdG9vXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0QmlnSW50QXJyVG9IZXhBcnIodmFsdWVzOiBiaWdpbnRbXSwgaGV4TGVuZ3RoPzogbnVtYmVyKTogc3RyaW5nW10ge1xuICByZXR1cm4gdmFsdWVzLm1hcCgodmFsdWUpID0+IHtcbiAgICByZXR1cm4gYmlnSW50VG9IZXgodmFsdWUsIGhleExlbmd0aCk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGV4VG9CaWdJbnQoaGV4OiBzdHJpbmcpOiBiaWdpbnQge1xuICAvLyBTdHJhbmdlbHkgYmlnaW50LnRvU3RyaW5nKDE2KSBnaXZlcyBhIGhleCBzdHJpbmcgd2l0aG91dCAweCxcbiAgLy8gYnV0IGl0IHdvbid0IGFjY2VwdCB0aGUgc2FtZSBzdHJpbmcgd2l0aG91dCAweCB0byBjb252ZXJ0XG4gIC8vIHRvIGEgYmlnaW50IChCaWdJbnQoaGV4IHN0cmluZykpLiBTbyBoYXZlIHRvIGludHJvZHVjZSB0aGlzXG4gIC8vIGNoZWNrIHRvIGNvbnZlcnQgdG8gYWRkIDB4IGluIGNhc2UgaWYgaGV4IHN0cmluZ1xuICAvLyBkb2Vzbid0IGhhdmUgaXQuXG4gIGlmIChoZXguc2xpY2UoMCwgMikgPT09ICcweCcpIHtcbiAgICByZXR1cm4gQmlnSW50KGhleCk7XG4gIH1cbiAgcmV0dXJuIEJpZ0ludCgnMHgnICsgaGV4KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFuIGhleCBzdHJpbmcgb2YgdGhlIGdpdmVuIGJpZ2ludFxuICpcbiAqIEBwYXJhbSB7YmlnaW50fSBiaWdpbnQgLSB0aGUgYmlnaW50IHRvIGJlIGNvbnZlcnRlZCB0byBoZXhcbiAqIEBwYXJhbSBoZXhMZW5ndGhcbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gdGhlIGhleCB2YWx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYmlnSW50VG9IZXgoYmlnaW50OiBiaWdpbnQsIGhleExlbmd0aD86IG51bWJlcik6IHN0cmluZyB7XG4gIGxldCBoZXggPSBiaWdpbnQudG9TdHJpbmcoMTYpO1xuICBoZXggPSAnMCcuc2xpY2UoMCwgaGV4Lmxlbmd0aCAlIDIpICsgaGV4O1xuICBpZiAoaGV4TGVuZ3RoKSB7XG4gICAgaGV4ID0gaGV4LnBhZFN0YXJ0KGhleExlbmd0aCwgJzAnKTtcbiAgfVxuICByZXR1cm4gaGV4O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmlnSW50VG9CdWZmZXJMRShuOiBiaWdpbnQsIG1pbkJ5dGVzPzogbnVtYmVyKTogQnVmZmVyIHtcbiAgbGV0IHYgPSBuLnRvU3RyaW5nKDE2KTtcbiAgdiA9ICcwJy5zbGljZSgwLCB2Lmxlbmd0aCAlIDIpICsgdjtcbiAgY29uc3QgYnVmID0gQnVmZmVyLmZyb20odiwgJ2hleCcpLnJldmVyc2UoKTtcbiAgaWYgKG1pbkJ5dGVzICYmIGJ1Zi5sZW5ndGggPCBtaW5CeXRlcykge1xuICAgIHJldHVybiBCdWZmZXIuY29uY2F0KFtidWYsIEJ1ZmZlci5hbGxvYyhtaW5CeXRlcyAtIGJ1Zi5sZW5ndGgpXSk7XG4gIH1cbiAgcmV0dXJuIGJ1Zjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJpZ0ludEZyb21CdWZmZXJMRShidWY6IEJ1ZmZlcik6IGJpZ2ludCB7XG4gIHJldHVybiBCaWdJbnQoJzB4JyArIEJ1ZmZlci5mcm9tKGJ1ZikucmV2ZXJzZSgpLnRvU3RyaW5nKCdoZXgnKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiaWdJbnRUb0J1ZmZlckJFKG46IGJpZ2ludCwgbWluQnl0ZXM/OiBudW1iZXIpOiBCdWZmZXIge1xuICBsZXQgdiA9IG4udG9TdHJpbmcoMTYpO1xuICB2ID0gJzAnLnNsaWNlKDAsIHYubGVuZ3RoICUgMikgKyB2O1xuICBjb25zdCBidWYgPSBCdWZmZXIuZnJvbSh2LCAnaGV4Jyk7XG4gIGlmIChtaW5CeXRlcyAmJiBidWYubGVuZ3RoIDwgbWluQnl0ZXMpIHtcbiAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChbQnVmZmVyLmFsbG9jKG1pbkJ5dGVzIC0gYnVmLmxlbmd0aCksIGJ1Zl0pO1xuICB9XG4gIHJldHVybiBidWY7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiaWdJbnRGcm9tQnVmZmVyQkUoYnVmOiBCdWZmZXIpOiBiaWdpbnQge1xuICByZXR1cm4gQmlnSW50KCcweCcgKyBidWYudG9TdHJpbmcoJ2hleCcpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJpZ0ludEZyb21VOEFCRShidWY6IFVpbnQ4QXJyYXkpOiBiaWdpbnQge1xuICByZXR1cm4gYmlnSW50RnJvbUJ1ZmZlckJFKEJ1ZmZlci5mcm9tKGJ1ZikpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xhbXAodTogYmlnaW50KTogYmlnaW50IHtcbiAgdSAmPSBCaWdJbnQoJzB4N2ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmOCcpO1xuICB1IHw9IEJpZ0ludCgnMHg0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyk7XG4gIHJldHVybiB1O1xufVxuXG4vKipcbiAqIEZ1bmN0aW9uIGdldCBwYWlsbGllciBwdWJsaWMga2V5IHNpbXBsZSB2YXJpZW50XG4gKiBAcGFyYW0ge2JpZ2ludH0gblxuICogQHJldHVybnMge2JpZ2ludH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBhaWxsaWVyUHVibGljS2V5KG46IGJpZ2ludCk6IFB1YmxpY0tleSB7XG4gIHJldHVybiBuZXcgUHVibGljS2V5KG4sIG4gKyBCaWdJbnQoMSkpO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlIGEgcmFuZG9tIHBvc2l0aXZlIGludGVnZXIgY28tcHJpbWUgdG8geFxuICogQHBhcmFtIHhcbiAqIEByZXR1cm5zIHtQcm9taXNlPGJpZ2ludD59XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByYW5kb21Qb3NpdGl2ZUNvUHJpbWVUbyh4OiBiaWdpbnQpOiBQcm9taXNlPGJpZ2ludD4ge1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbnN0IHkgPSBhd2FpdCByYW5kb21CaWdJbnQoYml0TGVuZ3RoKHgpKTtcbiAgICBpZiAoeSA+IEJpZ0ludCgwKSAmJiBnY2QoeCwgeSkgPT09IEJpZ0ludCgxKSkge1xuICAgICAgcmV0dXJuIHk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogR2VuZXJhdGUgYSByYW5kb20gcG9zaXRpdmUgaW50ZWdlciBjb3ByaW1lIGxlc3MgdGhhbiB4IHdpdGggdGhlIHNhbWUgYml0IGRlcHRoLlxuICogQHBhcmFtIHhcbiAqIEByZXR1cm5zIHtQcm9taXNlPGJpZ2ludD59XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByYW5kb21Qb3NpdGl2ZUNvUHJpbWVMZXNzVGhhbih4OiBiaWdpbnQpOiBQcm9taXNlPGJpZ2ludD4ge1xuICBpZiAoeCA8PSBCaWdJbnQoMikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3ggbXVzdCBiZSBsYXJnZXIgdGhhbiAyJyk7XG4gIH1cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBjb25zdCB5ID0gYXdhaXQgcmFuZG9tQmlnSW50KGJpdExlbmd0aCh4KSk7XG4gICAgaWYgKHkgPiBCaWdJbnQoMCkgJiYgeSA8IHggJiYgZ2NkKHgsIHkpID09PSBCaWdJbnQoMSkpIHtcbiAgICAgIHJldHVybiB5O1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEdlbmVyYXRlIGEgcmFuZG9tIG51bWJlciBvZiBhIGdpdmVuIGJpdGxlbmd0aFxuICogQHBhcmFtIGJpdGxlbmd0aFxuICogQHJldHVybnMge1Byb21pc2U8YmlnaW50Pn1cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJhbmRvbUJpZ0ludChiaXRsZW5ndGg6IG51bWJlcik6IFByb21pc2U8YmlnaW50PiB7XG4gIHJldHVybiBiaWdJbnRGcm9tQnVmZmVyQkUoQnVmZmVyLmZyb20oYXdhaXQgcmFuZEJpdHMoYml0bGVuZ3RoLCB0cnVlKSkpO1xufVxuXG4vKipcbiAqIEBwYXJhbSBzZWVkIC0gdXNlZCB0byBjb25zdHJ1Y3QgZGVyaXZhdGlvbiBwYXRoIGRldGVybWluaXN0aWNhbGx5XG4gKiBAcGFyYW0gaXNNYXN0ZXIgLSBpZiBzZXQsIHBhdGggc3RhcnRzIHdpdGggcHJlZml4IGBtL2BcbiAqIEByZXR1cm4gcGF0aCBgKG0vKS85OTk5OTkvYS9iYCB3aGVyZSBgYWAgYW5kIGBiYCBhcmUgNy1ieXRlIHBzZXVkb3JhbmRvbSBudW1iZXJzIGJhc2VkIG9uIHNlZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlcml2YXRpb25QYXRoKHNlZWQ6IHN0cmluZywgaXNNYXN0ZXIgPSB0cnVlKTogc3RyaW5nIHtcbiAgY29uc3QgZGVyaXZhdGlvblBhdGhJbnB1dCA9IHNoYTI1NihzaGEyNTYoYCR7c2VlZH1gKSkudG9TdHJpbmcoJ2hleCcpO1xuICBjb25zdCBkZXJpdmF0aW9uUGF0aFBhcnRzID0gW1xuICAgIHBhcnNlSW50KGRlcml2YXRpb25QYXRoSW5wdXQuc2xpY2UoMCwgNyksIDE2KSxcbiAgICBwYXJzZUludChkZXJpdmF0aW9uUGF0aElucHV0LnNsaWNlKDcsIDE0KSwgMTYpLFxuICBdO1xuICBjb25zdCBwcmVmaXggPSBpc01hc3RlciA/ICdtLycgOiAnJztcbiAgcmV0dXJuIHByZWZpeCArICc5OTk5OTkvJyArIGRlcml2YXRpb25QYXRoUGFydHMuam9pbignLycpO1xufVxuXG5mdW5jdGlvbiBzaGEyNTYoaW5wdXQ6IGNyeXB0by5CaW5hcnlMaWtlKTogQnVmZmVyIHtcbiAgcmV0dXJuIGNyeXB0by5jcmVhdGVIYXNoKCdzaGEyNTYnKS51cGRhdGUoaW5wdXQpLmRpZ2VzdCgpO1xufVxuIl19