@sidhujag/sysweb3-keyring 1.0.491

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 (104) hide show
  1. package/README.md +201 -0
  2. package/cjs/errorUtils.js +75 -0
  3. package/cjs/errorUtils.js.map +1 -0
  4. package/cjs/hardware-wallet-manager.js +462 -0
  5. package/cjs/hardware-wallet-manager.js.map +1 -0
  6. package/cjs/index.js +31 -0
  7. package/cjs/index.js.map +1 -0
  8. package/cjs/initial-state.js +105 -0
  9. package/cjs/initial-state.js.map +1 -0
  10. package/cjs/keyring-manager.js +1687 -0
  11. package/cjs/keyring-manager.js.map +1 -0
  12. package/cjs/ledger/bitcoin_client/index.js +47 -0
  13. package/cjs/ledger/bitcoin_client/index.js.map +1 -0
  14. package/cjs/ledger/bitcoin_client/lib/appClient.js +408 -0
  15. package/cjs/ledger/bitcoin_client/lib/appClient.js.map +1 -0
  16. package/cjs/ledger/bitcoin_client/lib/bip32.js +61 -0
  17. package/cjs/ledger/bitcoin_client/lib/bip32.js.map +1 -0
  18. package/cjs/ledger/bitcoin_client/lib/buffertools.js +126 -0
  19. package/cjs/ledger/bitcoin_client/lib/buffertools.js.map +1 -0
  20. package/cjs/ledger/bitcoin_client/lib/clientCommands.js +270 -0
  21. package/cjs/ledger/bitcoin_client/lib/clientCommands.js.map +1 -0
  22. package/cjs/ledger/bitcoin_client/lib/constants.js +16 -0
  23. package/cjs/ledger/bitcoin_client/lib/constants.js.map +1 -0
  24. package/cjs/ledger/bitcoin_client/lib/merkelizedPsbt.js +54 -0
  25. package/cjs/ledger/bitcoin_client/lib/merkelizedPsbt.js.map +1 -0
  26. package/cjs/ledger/bitcoin_client/lib/merkle.js +109 -0
  27. package/cjs/ledger/bitcoin_client/lib/merkle.js.map +1 -0
  28. package/cjs/ledger/bitcoin_client/lib/merkleMap.js +46 -0
  29. package/cjs/ledger/bitcoin_client/lib/merkleMap.js.map +1 -0
  30. package/cjs/ledger/bitcoin_client/lib/policy.js +66 -0
  31. package/cjs/ledger/bitcoin_client/lib/policy.js.map +1 -0
  32. package/cjs/ledger/bitcoin_client/lib/psbtv2.js +640 -0
  33. package/cjs/ledger/bitcoin_client/lib/psbtv2.js.map +1 -0
  34. package/cjs/ledger/bitcoin_client/lib/varint.js +113 -0
  35. package/cjs/ledger/bitcoin_client/lib/varint.js.map +1 -0
  36. package/cjs/ledger/consts.js +7 -0
  37. package/cjs/ledger/consts.js.map +1 -0
  38. package/cjs/ledger/index.js +319 -0
  39. package/cjs/ledger/index.js.map +1 -0
  40. package/cjs/ledger/types.js +3 -0
  41. package/cjs/ledger/types.js.map +1 -0
  42. package/cjs/network-utils.js +76 -0
  43. package/cjs/network-utils.js.map +1 -0
  44. package/cjs/providers.js +270 -0
  45. package/cjs/providers.js.map +1 -0
  46. package/cjs/signers.js +64 -0
  47. package/cjs/signers.js.map +1 -0
  48. package/cjs/storage.js +30 -0
  49. package/cjs/storage.js.map +1 -0
  50. package/cjs/transactions/__tests__/integration.test.js +237 -0
  51. package/cjs/transactions/__tests__/integration.test.js.map +1 -0
  52. package/cjs/transactions/__tests__/syscoin.test.js +361 -0
  53. package/cjs/transactions/__tests__/syscoin.test.js.map +1 -0
  54. package/cjs/transactions/ethereum.js +1577 -0
  55. package/cjs/transactions/ethereum.js.map +1 -0
  56. package/cjs/transactions/index.js +19 -0
  57. package/cjs/transactions/index.js.map +1 -0
  58. package/cjs/transactions/syscoin.js +328 -0
  59. package/cjs/transactions/syscoin.js.map +1 -0
  60. package/cjs/trezor/index.js +718 -0
  61. package/cjs/trezor/index.js.map +1 -0
  62. package/cjs/types.js +12 -0
  63. package/cjs/types.js.map +1 -0
  64. package/cjs/utils/derivation-paths.js +99 -0
  65. package/cjs/utils/derivation-paths.js.map +1 -0
  66. package/cjs/utils/psbt.js +60 -0
  67. package/cjs/utils/psbt.js.map +1 -0
  68. package/cjs/utils.js +130 -0
  69. package/cjs/utils.js.map +1 -0
  70. package/package.json +46 -0
  71. package/types/errorUtils.d.ts +1 -0
  72. package/types/hardware-wallet-manager.d.ts +110 -0
  73. package/types/index.d.ts +12 -0
  74. package/types/initial-state.d.ts +79 -0
  75. package/types/keyring-manager.d.ts +184 -0
  76. package/types/ledger/bitcoin_client/index.d.ts +5 -0
  77. package/types/ledger/bitcoin_client/lib/appClient.d.ts +106 -0
  78. package/types/ledger/bitcoin_client/lib/bip32.d.ts +11 -0
  79. package/types/ledger/bitcoin_client/lib/buffertools.d.ts +28 -0
  80. package/types/ledger/bitcoin_client/lib/clientCommands.d.ts +77 -0
  81. package/types/ledger/bitcoin_client/lib/constants.d.ts +12 -0
  82. package/types/ledger/bitcoin_client/lib/merkelizedPsbt.d.ts +24 -0
  83. package/types/ledger/bitcoin_client/lib/merkle.d.ts +32 -0
  84. package/types/ledger/bitcoin_client/lib/merkleMap.d.ts +23 -0
  85. package/types/ledger/bitcoin_client/lib/policy.d.ts +36 -0
  86. package/types/ledger/bitcoin_client/lib/psbtv2.d.ts +167 -0
  87. package/types/ledger/bitcoin_client/lib/varint.d.ts +23 -0
  88. package/types/ledger/consts.d.ts +3 -0
  89. package/types/ledger/index.d.ts +51 -0
  90. package/types/ledger/types.d.ts +48 -0
  91. package/types/network-utils.d.ts +14 -0
  92. package/types/providers.d.ts +47 -0
  93. package/types/signers.d.ts +95 -0
  94. package/types/storage.d.ts +2 -0
  95. package/types/transactions/__tests__/integration.test.d.ts +1 -0
  96. package/types/transactions/__tests__/syscoin.test.d.ts +1 -0
  97. package/types/transactions/ethereum.d.ts +80 -0
  98. package/types/transactions/index.d.ts +2 -0
  99. package/types/transactions/syscoin.d.ts +61 -0
  100. package/types/trezor/index.d.ts +170 -0
  101. package/types/types.d.ts +294 -0
  102. package/types/utils/derivation-paths.d.ts +35 -0
  103. package/types/utils/psbt.d.ts +17 -0
  104. package/types/utils.d.ts +4 -0
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Merkle = void 0;
4
+ exports.hashLeaf = hashLeaf;
5
+ const bitcoinjs_lib_1 = require("bitcoinjs-lib");
6
+ /**
7
+ * This class implements the merkle tree used by Ledger Bitcoin app v2+,
8
+ * which is documented at
9
+ * https://github.com/LedgerHQ/app-bitcoin-new/blob/master/doc/merkle.md
10
+ */
11
+ class Merkle {
12
+ constructor(leaves, hasher = bitcoinjs_lib_1.crypto.sha256) {
13
+ this.leaves = leaves;
14
+ this.h = hasher;
15
+ const nodes = this.calculateRoot(leaves);
16
+ this.rootNode = nodes.root;
17
+ this.leafNodes = nodes.leaves;
18
+ }
19
+ getRoot() {
20
+ return this.rootNode.hash;
21
+ }
22
+ size() {
23
+ return this.leaves.length;
24
+ }
25
+ getLeaves() {
26
+ return this.leaves;
27
+ }
28
+ getLeafHash(index) {
29
+ return this.leafNodes[index].hash;
30
+ }
31
+ getProof(index) {
32
+ if (index >= this.leaves.length)
33
+ throw Error('Index out of bounds');
34
+ return proveNode(this.leafNodes[index]);
35
+ }
36
+ calculateRoot(leaves) {
37
+ const n = leaves.length;
38
+ if (n == 0) {
39
+ return {
40
+ root: new Node(undefined, undefined, Buffer.alloc(32, 0)),
41
+ leaves: [],
42
+ };
43
+ }
44
+ if (n == 1) {
45
+ const newNode = new Node(undefined, undefined, leaves[0]);
46
+ return { root: newNode, leaves: [newNode] };
47
+ }
48
+ const leftCount = highestPowerOf2LessThan(n);
49
+ const leftBranch = this.calculateRoot(leaves.slice(0, leftCount));
50
+ const rightBranch = this.calculateRoot(leaves.slice(leftCount));
51
+ const leftChild = leftBranch.root;
52
+ const rightChild = rightBranch.root;
53
+ const hash = this.hashNode(leftChild.hash, rightChild.hash);
54
+ const node = new Node(leftChild, rightChild, hash);
55
+ leftChild.parent = node;
56
+ rightChild.parent = node;
57
+ return { root: node, leaves: leftBranch.leaves.concat(rightBranch.leaves) };
58
+ }
59
+ hashNode(left, right) {
60
+ return this.h(Buffer.concat([Buffer.from([1]), left, right]));
61
+ }
62
+ }
63
+ exports.Merkle = Merkle;
64
+ function hashLeaf(buf, hashFunction = bitcoinjs_lib_1.crypto.sha256) {
65
+ return hashConcat(Buffer.from([0]), buf, hashFunction);
66
+ }
67
+ function hashConcat(bufA, bufB, hashFunction) {
68
+ return hashFunction(Buffer.concat([bufA, bufB]));
69
+ }
70
+ class Node {
71
+ constructor(left, right, hash) {
72
+ this.leftChild = left;
73
+ this.rightChild = right;
74
+ this.hash = hash;
75
+ }
76
+ isLeaf() {
77
+ return this.leftChild == undefined;
78
+ }
79
+ }
80
+ function proveNode(node) {
81
+ if (!node.parent) {
82
+ return [];
83
+ }
84
+ if (node.parent.leftChild == node) {
85
+ if (!node.parent.rightChild) {
86
+ throw new Error('Expected right child to exist');
87
+ }
88
+ return [node.parent.rightChild.hash, ...proveNode(node.parent)];
89
+ }
90
+ else {
91
+ if (!node.parent.leftChild) {
92
+ throw new Error('Expected left child to exist');
93
+ }
94
+ return [node.parent.leftChild.hash, ...proveNode(node.parent)];
95
+ }
96
+ }
97
+ function highestPowerOf2LessThan(n) {
98
+ if (n < 2) {
99
+ throw Error('Expected n >= 2');
100
+ }
101
+ if (isPowerOf2(n)) {
102
+ return n / 2;
103
+ }
104
+ return 1 << Math.floor(Math.log2(n));
105
+ }
106
+ function isPowerOf2(n) {
107
+ return (n & (n - 1)) == 0;
108
+ }
109
+ //# sourceMappingURL=merkle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merkle.js","sourceRoot":"","sources":["../../../../../src/ledger/bitcoin_client/lib/merkle.ts"],"names":[],"mappings":";;;AAuEA,4BAKC;AA5ED,iDAAuC;AAEvC;;;;GAIG;AACH,MAAa,MAAM;IAKjB,YACE,MAAgB,EAChB,SAAkC,sBAAM,CAAC,MAAM;QAE/C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC;QAChB,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC;QAC3B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC;IAChC,CAAC;IACD,OAAO;QACL,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC5B,CAAC;IACD,IAAI;QACF,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IAC5B,CAAC;IACD,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IACD,WAAW,CAAC,KAAa;QACvB,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;IACpC,CAAC;IACD,QAAQ,CAAC,KAAa;QACpB,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM;YAAE,MAAM,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACpE,OAAO,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED,aAAa,CAAC,MAAgB;QAI5B,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACX,OAAO;gBACL,IAAI,EAAE,IAAI,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;gBACzD,MAAM,EAAE,EAAE;aACX,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACX,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1D,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9C,CAAC;QACD,MAAM,SAAS,GAAG,uBAAuB,CAAC,CAAC,CAAC,CAAC;QAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;QAClE,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;QAChE,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC;QAClC,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC;QACpC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;QAC5D,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;QACnD,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC;QACxB,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC;QACzB,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;IAC9E,CAAC;IAED,QAAQ,CAAC,IAAY,EAAE,KAAa;QAClC,OAAO,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IAChE,CAAC;CACF;AA9DD,wBA8DC;AAED,SAAgB,QAAQ,CACtB,GAAW,EACX,eAAwC,sBAAM,CAAC,MAAM;IAErD,OAAO,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,UAAU,CACjB,IAAY,EACZ,IAAY,EACZ,YAAqC;IAErC,OAAO,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,IAAI;IAKR,YAAY,IAAsB,EAAE,KAAuB,EAAE,IAAY;QACvE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IACD,MAAM;QACJ,OAAO,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC;IACrC,CAAC;CACF;AAED,SAAS,SAAS,CAAC,IAAU;IAC3B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACjB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,IAAI,EAAE,CAAC;QAClC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACnD,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAClE,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAClD,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IACjE,CAAC;AACH,CAAC;AAED,SAAS,uBAAuB,CAAC,CAAS;IACxC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACV,MAAM,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACjC,CAAC;IACD,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,CAAC;IACf,CAAC;IACD,OAAO,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACvC,CAAC;AAED,SAAS,UAAU,CAAC,CAAS;IAC3B,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MerkleMap = void 0;
4
+ const merkle_1 = require("./merkle");
5
+ const varint_1 = require("./varint");
6
+ /**
7
+ * This implements "Merkelized Maps", documented at
8
+ * https://github.com/LedgerHQ/app-bitcoin-new/blob/master/doc/merkle.md#merkleized-maps
9
+ *
10
+ * A merkelized map consist of two merkle trees, one for the keys of
11
+ * a map and one for the values of the same map, thus the two merkle
12
+ * trees have the same shape. The commitment is the number elements
13
+ * in the map followed by the keys' merkle root followed by the
14
+ * values' merkle root.
15
+ */
16
+ class MerkleMap {
17
+ /**
18
+ * @param keys Sorted list of (unhashed) keys
19
+ * @param values values, in corresponding order as the keys, and of equal length
20
+ */
21
+ constructor(keys, values) {
22
+ if (keys.length != values.length) {
23
+ throw new Error('keys and values should have the same length');
24
+ }
25
+ // Sanity check: verify that keys are actually sorted and with no duplicates
26
+ for (let i = 0; i < keys.length - 1; i++) {
27
+ if (keys[i].toString('hex') >= keys[i + 1].toString('hex')) {
28
+ throw new Error('keys must be in strictly increasing order');
29
+ }
30
+ }
31
+ this.keys = keys;
32
+ this.keysTree = new merkle_1.Merkle(keys.map((k) => (0, merkle_1.hashLeaf)(k)));
33
+ this.values = values;
34
+ this.valuesTree = new merkle_1.Merkle(values.map((v) => (0, merkle_1.hashLeaf)(v)));
35
+ }
36
+ commitment() {
37
+ // returns a buffer between 65 and 73 (included) bytes long
38
+ return Buffer.concat([
39
+ (0, varint_1.createVarint)(this.keys.length),
40
+ this.keysTree.getRoot(),
41
+ this.valuesTree.getRoot(),
42
+ ]);
43
+ }
44
+ }
45
+ exports.MerkleMap = MerkleMap;
46
+ //# sourceMappingURL=merkleMap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merkleMap.js","sourceRoot":"","sources":["../../../../../src/ledger/bitcoin_client/lib/merkleMap.ts"],"names":[],"mappings":";;;AAAA,qCAA4C;AAC5C,qCAAwC;AAExC;;;;;;;;;GASG;AACH,MAAa,SAAS;IAKpB;;;OAGG;IACH,YAAY,IAAuB,EAAE,MAAyB;QAC5D,IAAI,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QACjE,CAAC;QAED,4EAA4E;QAC5E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC3D,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;YAC/D,CAAC;QACH,CAAC;QAED,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,IAAI,eAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,iBAAQ,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,IAAI,eAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,iBAAQ,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,UAAU;QACR,2DAA2D;QAC3D,OAAO,MAAM,CAAC,MAAM,CAAC;YACnB,IAAA,qBAAY,EAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;YAC9B,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;YACvB,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;SAC1B,CAAC,CAAC;IACL,CAAC;CACF;AAnCD,8BAmCC"}
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DefaultWalletPolicy = exports.WalletPolicy = void 0;
4
+ const bitcoinjs_lib_1 = require("bitcoinjs-lib");
5
+ const buffertools_1 = require("./buffertools");
6
+ const merkle_1 = require("./merkle");
7
+ const WALLET_POLICY_V2 = 2;
8
+ /**
9
+ * The Bitcon hardware app uses a descriptors-like thing to describe
10
+ * how to construct output scripts from keys. A "Wallet Policy" consists
11
+ * of a "Descriptor Template" and a list of "keys". A key is basically
12
+ * a serialized BIP32 extended public key with some added derivation path
13
+ * information. This is documented at
14
+ * https://github.com/LedgerHQ/app-bitcoin-new/blob/master/doc/wallet.md
15
+ */
16
+ class WalletPolicy {
17
+ /**
18
+ * Creates and instance of a wallet policy.
19
+ * @param name an ascii string, up to 16 bytes long; it must be an empty string for default wallet policies
20
+ * @param descriptorTemplate the wallet policy template
21
+ * @param keys and array of the keys, with the key derivation information
22
+ */
23
+ constructor(name, descriptorTemplate, keys) {
24
+ this.name = name;
25
+ this.descriptorTemplate = descriptorTemplate;
26
+ this.keys = keys;
27
+ }
28
+ /**
29
+ * Returns the unique 32-bytes id of this wallet policy.
30
+ */
31
+ getId() {
32
+ return bitcoinjs_lib_1.crypto.sha256(this.serialize());
33
+ }
34
+ /**
35
+ * Serializes the wallet policy for transmission via the hardware wallet protocol.
36
+ * @returns the serialized wallet policy
37
+ */
38
+ serialize() {
39
+ const keyBuffers = this.keys.map((k) => Buffer.from(k, 'ascii'));
40
+ const m = new merkle_1.Merkle(keyBuffers.map((k) => (0, merkle_1.hashLeaf)(k)));
41
+ const buf = new buffertools_1.BufferWriter();
42
+ buf.writeUInt8(WALLET_POLICY_V2); // wallet version
43
+ // length of wallet name, and wallet name
44
+ buf.writeVarSlice(Buffer.from(this.name, 'ascii'));
45
+ // length of descriptor template
46
+ buf.writeVarInt(this.descriptorTemplate.length);
47
+ // sha256 hash of descriptor template
48
+ buf.writeSlice(bitcoinjs_lib_1.crypto.sha256(Buffer.from(this.descriptorTemplate)));
49
+ // number of keys
50
+ buf.writeVarInt(this.keys.length);
51
+ // root of Merkle tree of keys
52
+ buf.writeSlice(m.getRoot());
53
+ return buf.buffer();
54
+ }
55
+ }
56
+ exports.WalletPolicy = WalletPolicy;
57
+ /**
58
+ * Simplified class to handle default wallet policies that can be used without policy registration.
59
+ */
60
+ class DefaultWalletPolicy extends WalletPolicy {
61
+ constructor(descriptorTemplate, key) {
62
+ super('', descriptorTemplate, [key]);
63
+ }
64
+ }
65
+ exports.DefaultWalletPolicy = DefaultWalletPolicy;
66
+ //# sourceMappingURL=policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.js","sourceRoot":"","sources":["../../../../../src/ledger/bitcoin_client/lib/policy.ts"],"names":[],"mappings":";;;AAAA,iDAAuC;AAEvC,+CAA6C;AAC7C,qCAA4C;AAE5C,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAE3B;;;;;;;GAOG;AACH,MAAa,YAAY;IAIvB;;;;;OAKG;IACH,YACE,IAAY,EACZ,kBAA0B,EAC1B,IAAuB;QAEvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;QAC7C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,KAAK;QACH,OAAO,sBAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;IACzC,CAAC;IAED;;;OAGG;IACH,SAAS;QACP,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;QACjE,MAAM,CAAC,GAAG,IAAI,eAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,iBAAQ,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEzD,MAAM,GAAG,GAAG,IAAI,0BAAY,EAAE,CAAC;QAC/B,GAAG,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC,iBAAiB;QAEnD,yCAAyC;QACzC,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;QAEnD,gCAAgC;QAChC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAChD,qCAAqC;QACrC,GAAG,CAAC,UAAU,CAAC,sBAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;QAEpE,iBAAiB;QACjB,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAClC,8BAA8B;QAC9B,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAC5B,OAAO,GAAG,CAAC,MAAM,EAAE,CAAC;IACtB,CAAC;CACF;AApDD,oCAoDC;AAQD;;GAEG;AACH,MAAa,mBAAoB,SAAQ,YAAY;IACnD,YAAY,kBAA6C,EAAE,GAAW;QACpE,KAAK,CAAC,EAAE,EAAE,kBAAkB,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvC,CAAC;CACF;AAJD,kDAIC"}