@ledgerhq/hw-app-btc 10.0.1 → 10.0.2-next.0
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 +7 -0
- package/lib/Btc.d.ts.map +1 -1
- package/lib/Btc.js +72 -97
- package/lib/Btc.js.map +1 -1
- package/lib/BtcNew.js +217 -313
- package/lib/BtcNew.js.map +1 -1
- package/lib/BtcOld.js +46 -106
- package/lib/BtcOld.js.map +1 -1
- package/lib/bip32.js +12 -12
- package/lib/bip32.js.map +1 -1
- package/lib/buffertools.js +66 -69
- package/lib/buffertools.js.map +1 -1
- package/lib/compressPublicKey.js +3 -3
- package/lib/compressPublicKey.js.map +1 -1
- package/lib/constants.js +1 -1
- package/lib/createTransaction.d.ts +1 -1
- package/lib/createTransaction.d.ts.map +1 -1
- package/lib/createTransaction.js +285 -398
- package/lib/createTransaction.js.map +1 -1
- package/lib/debug.js +11 -13
- package/lib/debug.js.map +1 -1
- package/lib/finalizeInput.js +23 -62
- package/lib/finalizeInput.js.map +1 -1
- package/lib/getAppAndVersion.d.ts +1 -1
- package/lib/getAppAndVersion.d.ts.map +1 -1
- package/lib/getAppAndVersion.js +29 -72
- package/lib/getAppAndVersion.js.map +1 -1
- package/lib/getTrustedInput.js +108 -251
- package/lib/getTrustedInput.js.map +1 -1
- package/lib/getTrustedInputBIP143.js +9 -10
- package/lib/getTrustedInputBIP143.js.map +1 -1
- package/lib/getWalletPublicKey.d.ts +1 -1
- package/lib/getWalletPublicKey.d.ts.map +1 -1
- package/lib/getWalletPublicKey.js +27 -73
- package/lib/getWalletPublicKey.js.map +1 -1
- package/lib/hashPublicKey.js +4 -4
- package/lib/hashPublicKey.js.map +1 -1
- package/lib/index.js +3 -3
- package/lib/index.js.map +1 -1
- package/lib/newops/accounttype.d.ts +2 -2
- package/lib/newops/accounttype.d.ts.map +1 -1
- package/lib/newops/accounttype.js +85 -125
- package/lib/newops/accounttype.js.map +1 -1
- package/lib/newops/appClient.js +98 -205
- package/lib/newops/appClient.js.map +1 -1
- package/lib/newops/clientCommands.js +122 -213
- package/lib/newops/clientCommands.js.map +1 -1
- package/lib/newops/merkelizedPsbt.js +28 -75
- package/lib/newops/merkelizedPsbt.js.map +1 -1
- package/lib/newops/merkle.js +38 -67
- package/lib/newops/merkle.js.map +1 -1
- package/lib/newops/merkleMap.js +11 -12
- package/lib/newops/merkleMap.js.map +1 -1
- package/lib/newops/policy.d.ts +1 -1
- package/lib/newops/policy.d.ts.map +1 -1
- package/lib/newops/policy.js +17 -18
- package/lib/newops/policy.js.map +1 -1
- package/lib/newops/psbtExtractor.js +9 -9
- package/lib/newops/psbtExtractor.js.map +1 -1
- package/lib/newops/psbtFinalizer.js +22 -22
- package/lib/newops/psbtFinalizer.js.map +1 -1
- package/lib/newops/psbtv2.d.ts +1 -1
- package/lib/newops/psbtv2.d.ts.map +1 -1
- package/lib/newops/psbtv2.js +227 -286
- package/lib/newops/psbtv2.js.map +1 -1
- package/lib/serializeTransaction.js +13 -15
- package/lib/serializeTransaction.js.map +1 -1
- package/lib/shouldUseTrustedInputForSegwit.js +4 -5
- package/lib/shouldUseTrustedInputForSegwit.js.map +1 -1
- package/lib/signMessage.js +47 -99
- package/lib/signMessage.js.map +1 -1
- package/lib/signP2SHTransaction.d.ts +1 -1
- package/lib/signP2SHTransaction.d.ts.map +1 -1
- package/lib/signP2SHTransaction.js +91 -187
- package/lib/signP2SHTransaction.js.map +1 -1
- package/lib/signTransaction.js +8 -9
- package/lib/signTransaction.js.map +1 -1
- package/lib/splitTransaction.js +50 -54
- package/lib/splitTransaction.js.map +1 -1
- package/lib/startUntrustedHashTransactionInput.js +65 -167
- package/lib/startUntrustedHashTransactionInput.js.map +1 -1
- package/lib/types.js +1 -1
- package/lib/varint.js +10 -10
- package/lib/varint.js.map +1 -1
- package/lib-es/Btc.d.ts.map +1 -1
- package/lib-es/Btc.js +58 -84
- package/lib-es/Btc.js.map +1 -1
- package/lib-es/BtcNew.js +205 -302
- package/lib-es/BtcNew.js.map +1 -1
- package/lib-es/BtcOld.js +35 -96
- package/lib-es/BtcOld.js.map +1 -1
- package/lib-es/bip32.js +7 -7
- package/lib-es/bip32.js.map +1 -1
- package/lib-es/buffertools.js +62 -67
- package/lib-es/buffertools.js.map +1 -1
- package/lib-es/compressPublicKey.js +2 -2
- package/lib-es/compressPublicKey.js.map +1 -1
- package/lib-es/constants.js +12 -12
- package/lib-es/constants.js.map +1 -1
- package/lib-es/createTransaction.d.ts +1 -1
- package/lib-es/createTransaction.d.ts.map +1 -1
- package/lib-es/createTransaction.js +271 -384
- package/lib-es/createTransaction.js.map +1 -1
- package/lib-es/debug.js +10 -12
- package/lib-es/debug.js.map +1 -1
- package/lib-es/finalizeInput.js +20 -59
- package/lib-es/finalizeInput.js.map +1 -1
- package/lib-es/getAppAndVersion.d.ts +1 -1
- package/lib-es/getAppAndVersion.d.ts.map +1 -1
- package/lib-es/getAppAndVersion.js +27 -70
- package/lib-es/getAppAndVersion.js.map +1 -1
- package/lib-es/getTrustedInput.js +104 -247
- package/lib-es/getTrustedInput.js.map +1 -1
- package/lib-es/getTrustedInputBIP143.js +5 -6
- package/lib-es/getTrustedInputBIP143.js.map +1 -1
- package/lib-es/getWalletPublicKey.d.ts +1 -1
- package/lib-es/getWalletPublicKey.d.ts.map +1 -1
- package/lib-es/getWalletPublicKey.js +25 -71
- package/lib-es/getWalletPublicKey.js.map +1 -1
- package/lib-es/newops/accounttype.d.ts +2 -2
- package/lib-es/newops/accounttype.d.ts.map +1 -1
- package/lib-es/newops/accounttype.js +79 -123
- package/lib-es/newops/accounttype.js.map +1 -1
- package/lib-es/newops/appClient.js +92 -200
- package/lib-es/newops/appClient.js.map +1 -1
- package/lib-es/newops/clientCommands.js +117 -214
- package/lib-es/newops/clientCommands.js.map +1 -1
- package/lib-es/newops/merkelizedPsbt.js +25 -73
- package/lib-es/newops/merkelizedPsbt.js.map +1 -1
- package/lib-es/newops/merkle.js +36 -66
- package/lib-es/newops/merkle.js.map +1 -1
- package/lib-es/newops/merkleMap.js +8 -10
- package/lib-es/newops/merkleMap.js.map +1 -1
- package/lib-es/newops/policy.d.ts +1 -1
- package/lib-es/newops/policy.d.ts.map +1 -1
- package/lib-es/newops/policy.js +12 -14
- package/lib-es/newops/policy.js.map +1 -1
- package/lib-es/newops/psbtExtractor.js +7 -7
- package/lib-es/newops/psbtExtractor.js.map +1 -1
- package/lib-es/newops/psbtFinalizer.js +19 -19
- package/lib-es/newops/psbtFinalizer.js.map +1 -1
- package/lib-es/newops/psbtv2.d.ts +1 -1
- package/lib-es/newops/psbtv2.d.ts.map +1 -1
- package/lib-es/newops/psbtv2.js +225 -286
- package/lib-es/newops/psbtv2.js.map +1 -1
- package/lib-es/serializeTransaction.js +11 -13
- package/lib-es/serializeTransaction.js.map +1 -1
- package/lib-es/shouldUseTrustedInputForSegwit.js +1 -2
- package/lib-es/shouldUseTrustedInputForSegwit.js.map +1 -1
- package/lib-es/signMessage.js +44 -96
- package/lib-es/signMessage.js.map +1 -1
- package/lib-es/signP2SHTransaction.d.ts +1 -1
- package/lib-es/signP2SHTransaction.d.ts.map +1 -1
- package/lib-es/signP2SHTransaction.js +84 -180
- package/lib-es/signP2SHTransaction.js.map +1 -1
- package/lib-es/signTransaction.js +6 -7
- package/lib-es/signTransaction.js.map +1 -1
- package/lib-es/splitTransaction.js +46 -50
- package/lib-es/splitTransaction.js.map +1 -1
- package/lib-es/startUntrustedHashTransactionInput.js +62 -164
- package/lib-es/startUntrustedHashTransactionInput.js.map +1 -1
- package/lib-es/varint.js +9 -9
- package/lib-es/varint.js.map +1 -1
- package/package.json +5 -6
- package/src/Btc.ts +28 -5
|
@@ -1,54 +1,3 @@
|
|
|
1
|
-
var __extends = (this && this.__extends) || (function () {
|
|
2
|
-
var extendStatics = function (d, b) {
|
|
3
|
-
extendStatics = Object.setPrototypeOf ||
|
|
4
|
-
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
5
|
-
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
6
|
-
return extendStatics(d, b);
|
|
7
|
-
};
|
|
8
|
-
return function (d, b) {
|
|
9
|
-
if (typeof b !== "function" && b !== null)
|
|
10
|
-
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
11
|
-
extendStatics(d, b);
|
|
12
|
-
function __() { this.constructor = d; }
|
|
13
|
-
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
14
|
-
};
|
|
15
|
-
})();
|
|
16
|
-
var __read = (this && this.__read) || function (o, n) {
|
|
17
|
-
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
18
|
-
if (!m) return o;
|
|
19
|
-
var i = m.call(o), r, ar = [], e;
|
|
20
|
-
try {
|
|
21
|
-
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
22
|
-
}
|
|
23
|
-
catch (error) { e = { error: error }; }
|
|
24
|
-
finally {
|
|
25
|
-
try {
|
|
26
|
-
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
27
|
-
}
|
|
28
|
-
finally { if (e) throw e.error; }
|
|
29
|
-
}
|
|
30
|
-
return ar;
|
|
31
|
-
};
|
|
32
|
-
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
33
|
-
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
34
|
-
if (ar || !(i in from)) {
|
|
35
|
-
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
36
|
-
ar[i] = from[i];
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
return to.concat(ar || Array.prototype.slice.call(from));
|
|
40
|
-
};
|
|
41
|
-
var __values = (this && this.__values) || function(o) {
|
|
42
|
-
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
43
|
-
if (m) return m.call(o);
|
|
44
|
-
if (o && typeof o.length === "number") return {
|
|
45
|
-
next: function () {
|
|
46
|
-
if (o && i >= o.length) o = void 0;
|
|
47
|
-
return { value: o && o[i++], done: !o };
|
|
48
|
-
}
|
|
49
|
-
};
|
|
50
|
-
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
51
|
-
};
|
|
52
1
|
import { crypto } from "bitcoinjs-lib";
|
|
53
2
|
import { BufferReader } from "../buffertools";
|
|
54
3
|
import { createVarint } from "../varint";
|
|
@@ -61,39 +10,30 @@ var ClientCommandCode;
|
|
|
61
10
|
ClientCommandCode[ClientCommandCode["GET_MERKLE_LEAF_INDEX"] = 66] = "GET_MERKLE_LEAF_INDEX";
|
|
62
11
|
ClientCommandCode[ClientCommandCode["GET_MORE_ELEMENTS"] = 160] = "GET_MORE_ELEMENTS";
|
|
63
12
|
})(ClientCommandCode || (ClientCommandCode = {}));
|
|
64
|
-
|
|
65
|
-
|
|
13
|
+
class ClientCommand {
|
|
14
|
+
}
|
|
15
|
+
export class YieldCommand extends ClientCommand {
|
|
16
|
+
constructor(results, progressCallback) {
|
|
17
|
+
super();
|
|
18
|
+
this.progressCallback = progressCallback;
|
|
19
|
+
this.code = ClientCommandCode.YIELD;
|
|
20
|
+
this.results = results;
|
|
66
21
|
}
|
|
67
|
-
|
|
68
|
-
}());
|
|
69
|
-
var YieldCommand = /** @class */ (function (_super) {
|
|
70
|
-
__extends(YieldCommand, _super);
|
|
71
|
-
function YieldCommand(results, progressCallback) {
|
|
72
|
-
var _this = _super.call(this) || this;
|
|
73
|
-
_this.progressCallback = progressCallback;
|
|
74
|
-
_this.code = ClientCommandCode.YIELD;
|
|
75
|
-
_this.results = results;
|
|
76
|
-
return _this;
|
|
77
|
-
}
|
|
78
|
-
YieldCommand.prototype.execute = function (request) {
|
|
22
|
+
execute(request) {
|
|
79
23
|
this.results.push(Buffer.from(request.subarray(1)));
|
|
80
24
|
this.progressCallback();
|
|
81
25
|
return Buffer.from("");
|
|
82
|
-
};
|
|
83
|
-
return YieldCommand;
|
|
84
|
-
}(ClientCommand));
|
|
85
|
-
export { YieldCommand };
|
|
86
|
-
var GetPreimageCommand = /** @class */ (function (_super) {
|
|
87
|
-
__extends(GetPreimageCommand, _super);
|
|
88
|
-
function GetPreimageCommand(known_preimages, queue) {
|
|
89
|
-
var _this = _super.call(this) || this;
|
|
90
|
-
_this.code = ClientCommandCode.GET_PREIMAGE;
|
|
91
|
-
_this.known_preimages = known_preimages;
|
|
92
|
-
_this.queue = queue;
|
|
93
|
-
return _this;
|
|
94
26
|
}
|
|
95
|
-
|
|
96
|
-
|
|
27
|
+
}
|
|
28
|
+
export class GetPreimageCommand extends ClientCommand {
|
|
29
|
+
constructor(known_preimages, queue) {
|
|
30
|
+
super();
|
|
31
|
+
this.code = ClientCommandCode.GET_PREIMAGE;
|
|
32
|
+
this.known_preimages = known_preimages;
|
|
33
|
+
this.queue = queue;
|
|
34
|
+
}
|
|
35
|
+
execute(request) {
|
|
36
|
+
const req = Buffer.from(request.subarray(1));
|
|
97
37
|
// we expect no more data to read
|
|
98
38
|
if (req.length != 1 + 32) {
|
|
99
39
|
throw new Error("Invalid request, unexpected trailing data");
|
|
@@ -102,20 +42,20 @@ var GetPreimageCommand = /** @class */ (function (_super) {
|
|
|
102
42
|
throw new Error("Unsupported request, the first byte should be 0");
|
|
103
43
|
}
|
|
104
44
|
// read the hash
|
|
105
|
-
|
|
106
|
-
for (
|
|
45
|
+
const hash = Buffer.alloc(32);
|
|
46
|
+
for (let i = 0; i < 32; i++) {
|
|
107
47
|
hash[i] = req[1 + i];
|
|
108
48
|
}
|
|
109
|
-
|
|
110
|
-
|
|
49
|
+
const req_hash_hex = hash.toString("hex");
|
|
50
|
+
const known_preimage = this.known_preimages.get(req_hash_hex);
|
|
111
51
|
if (known_preimage != undefined) {
|
|
112
|
-
|
|
52
|
+
const preimage_len_varint = createVarint(known_preimage.length);
|
|
113
53
|
// We can send at most 255 - len(preimage_len_out) - 1 bytes in a single message;
|
|
114
54
|
// the rest will be stored in the queue for GET_MORE_ELEMENTS
|
|
115
|
-
|
|
116
|
-
|
|
55
|
+
const max_payload_size = 255 - preimage_len_varint.length - 1;
|
|
56
|
+
const payload_size = Math.min(max_payload_size, known_preimage.length);
|
|
117
57
|
if (payload_size < known_preimage.length) {
|
|
118
|
-
for (
|
|
58
|
+
for (let i = payload_size; i < known_preimage.length; i++) {
|
|
119
59
|
this.queue.push(Buffer.from([known_preimage[i]]));
|
|
120
60
|
}
|
|
121
61
|
}
|
|
@@ -125,31 +65,26 @@ var GetPreimageCommand = /** @class */ (function (_super) {
|
|
|
125
65
|
Buffer.from(known_preimage.subarray(0, payload_size)),
|
|
126
66
|
]);
|
|
127
67
|
}
|
|
128
|
-
throw Error(
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
_this.code = ClientCommandCode.GET_MERKLE_LEAF_PROOF;
|
|
138
|
-
_this.known_trees = known_trees;
|
|
139
|
-
_this.queue = queue;
|
|
140
|
-
return _this;
|
|
68
|
+
throw Error(`Requested unknown preimage for: ${req_hash_hex}`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
export class GetMerkleLeafProofCommand extends ClientCommand {
|
|
72
|
+
constructor(known_trees, queue) {
|
|
73
|
+
super();
|
|
74
|
+
this.code = ClientCommandCode.GET_MERKLE_LEAF_PROOF;
|
|
75
|
+
this.known_trees = known_trees;
|
|
76
|
+
this.queue = queue;
|
|
141
77
|
}
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
var req = Buffer.from(request.subarray(1));
|
|
78
|
+
execute(request) {
|
|
79
|
+
const req = Buffer.from(request.subarray(1));
|
|
145
80
|
if (req.length < 32 + 1 + 1) {
|
|
146
81
|
throw new Error("Invalid request, expected at least 34 bytes");
|
|
147
82
|
}
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
83
|
+
const reqBuf = new BufferReader(req);
|
|
84
|
+
const hash = reqBuf.readSlice(32);
|
|
85
|
+
const hash_hex = hash.toString("hex");
|
|
86
|
+
let tree_size;
|
|
87
|
+
let leaf_index;
|
|
153
88
|
try {
|
|
154
89
|
tree_size = reqBuf.readVarInt();
|
|
155
90
|
leaf_index = reqBuf.readVarInt();
|
|
@@ -157,9 +92,9 @@ var GetMerkleLeafProofCommand = /** @class */ (function (_super) {
|
|
|
157
92
|
catch (e) {
|
|
158
93
|
throw new Error("Invalid request, couldn't parse tree_size or leaf_index");
|
|
159
94
|
}
|
|
160
|
-
|
|
95
|
+
const mt = this.known_trees.get(hash_hex);
|
|
161
96
|
if (!mt) {
|
|
162
|
-
throw Error(
|
|
97
|
+
throw Error(`Requested Merkle leaf proof for unknown tree: ${hash_hex}`);
|
|
163
98
|
}
|
|
164
99
|
if (leaf_index >= tree_size || mt.size() != tree_size) {
|
|
165
100
|
throw Error("Invalid index or tree size.");
|
|
@@ -167,54 +102,51 @@ var GetMerkleLeafProofCommand = /** @class */ (function (_super) {
|
|
|
167
102
|
if (this.queue.length != 0) {
|
|
168
103
|
throw Error("This command should not execute when the queue is not empty.");
|
|
169
104
|
}
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
105
|
+
const proof = mt.getProof(leaf_index);
|
|
106
|
+
const n_response_elements = Math.min(Math.floor((255 - 32 - 1 - 1) / 32), proof.length);
|
|
107
|
+
const n_leftover_elements = proof.length - n_response_elements;
|
|
173
108
|
// Add to the queue any proof elements that do not fit the response
|
|
174
109
|
if (n_leftover_elements > 0) {
|
|
175
|
-
|
|
110
|
+
this.queue.push(...proof.slice(-n_leftover_elements));
|
|
176
111
|
}
|
|
177
|
-
return Buffer.concat(
|
|
112
|
+
return Buffer.concat([
|
|
178
113
|
mt.getLeafHash(leaf_index),
|
|
179
114
|
Buffer.from([proof.length]),
|
|
180
|
-
Buffer.from([n_response_elements])
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
return GetMerkleLeafProofCommand;
|
|
184
|
-
}(ClientCommand));
|
|
185
|
-
export { GetMerkleLeafProofCommand };
|
|
186
|
-
var GetMerkleLeafIndexCommand = /** @class */ (function (_super) {
|
|
187
|
-
__extends(GetMerkleLeafIndexCommand, _super);
|
|
188
|
-
function GetMerkleLeafIndexCommand(known_trees) {
|
|
189
|
-
var _this = _super.call(this) || this;
|
|
190
|
-
_this.code = ClientCommandCode.GET_MERKLE_LEAF_INDEX;
|
|
191
|
-
_this.known_trees = known_trees;
|
|
192
|
-
return _this;
|
|
115
|
+
Buffer.from([n_response_elements]),
|
|
116
|
+
...proof.slice(0, n_response_elements),
|
|
117
|
+
]);
|
|
193
118
|
}
|
|
194
|
-
|
|
195
|
-
|
|
119
|
+
}
|
|
120
|
+
export class GetMerkleLeafIndexCommand extends ClientCommand {
|
|
121
|
+
constructor(known_trees) {
|
|
122
|
+
super();
|
|
123
|
+
this.code = ClientCommandCode.GET_MERKLE_LEAF_INDEX;
|
|
124
|
+
this.known_trees = known_trees;
|
|
125
|
+
}
|
|
126
|
+
execute(request) {
|
|
127
|
+
const req = Buffer.from(request.subarray(1));
|
|
196
128
|
if (req.length != 32 + 32) {
|
|
197
129
|
throw new Error("Invalid request, unexpected trailing data");
|
|
198
130
|
}
|
|
199
131
|
// read the root hash
|
|
200
|
-
|
|
201
|
-
for (
|
|
132
|
+
const root_hash = Buffer.alloc(32);
|
|
133
|
+
for (let i = 0; i < 32; i++) {
|
|
202
134
|
root_hash[i] = req.readUInt8(i);
|
|
203
135
|
}
|
|
204
|
-
|
|
136
|
+
const root_hash_hex = root_hash.toString("hex");
|
|
205
137
|
// read the leaf hash
|
|
206
|
-
|
|
207
|
-
for (
|
|
138
|
+
const leef_hash = Buffer.alloc(32);
|
|
139
|
+
for (let i = 0; i < 32; i++) {
|
|
208
140
|
leef_hash[i] = req.readUInt8(32 + i);
|
|
209
141
|
}
|
|
210
|
-
|
|
211
|
-
|
|
142
|
+
const leef_hash_hex = leef_hash.toString("hex");
|
|
143
|
+
const mt = this.known_trees.get(root_hash_hex);
|
|
212
144
|
if (!mt) {
|
|
213
|
-
throw Error(
|
|
145
|
+
throw Error(`Requested Merkle leaf index for unknown root: ${root_hash_hex}`);
|
|
214
146
|
}
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
for (
|
|
147
|
+
let leaf_index = 0;
|
|
148
|
+
let found = 0;
|
|
149
|
+
for (let i = 0; i < mt.size(); i++) {
|
|
218
150
|
if (mt.getLeafHash(i).toString("hex") == leef_hash_hex) {
|
|
219
151
|
found = 1;
|
|
220
152
|
leaf_index = i;
|
|
@@ -222,19 +154,15 @@ var GetMerkleLeafIndexCommand = /** @class */ (function (_super) {
|
|
|
222
154
|
}
|
|
223
155
|
}
|
|
224
156
|
return Buffer.concat([Buffer.from([found]), createVarint(leaf_index)]);
|
|
225
|
-
};
|
|
226
|
-
return GetMerkleLeafIndexCommand;
|
|
227
|
-
}(ClientCommand));
|
|
228
|
-
export { GetMerkleLeafIndexCommand };
|
|
229
|
-
var GetMoreElementsCommand = /** @class */ (function (_super) {
|
|
230
|
-
__extends(GetMoreElementsCommand, _super);
|
|
231
|
-
function GetMoreElementsCommand(queue) {
|
|
232
|
-
var _this = _super.call(this) || this;
|
|
233
|
-
_this.code = ClientCommandCode.GET_MORE_ELEMENTS;
|
|
234
|
-
_this.queue = queue;
|
|
235
|
-
return _this;
|
|
236
157
|
}
|
|
237
|
-
|
|
158
|
+
}
|
|
159
|
+
export class GetMoreElementsCommand extends ClientCommand {
|
|
160
|
+
constructor(queue) {
|
|
161
|
+
super();
|
|
162
|
+
this.code = ClientCommandCode.GET_MORE_ELEMENTS;
|
|
163
|
+
this.queue = queue;
|
|
164
|
+
}
|
|
165
|
+
execute(request) {
|
|
238
166
|
if (request.length != 1) {
|
|
239
167
|
throw new Error("Invalid request, unexpected trailing data");
|
|
240
168
|
}
|
|
@@ -242,21 +170,20 @@ var GetMoreElementsCommand = /** @class */ (function (_super) {
|
|
|
242
170
|
throw new Error("No elements to get");
|
|
243
171
|
}
|
|
244
172
|
// all elements should have the same length
|
|
245
|
-
|
|
246
|
-
if (this.queue.some(
|
|
173
|
+
const element_len = this.queue[0].length;
|
|
174
|
+
if (this.queue.some((el) => el.length != element_len)) {
|
|
247
175
|
throw new Error("The queue contains elements with different byte length, which is not expected");
|
|
248
176
|
}
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
return Buffer.concat(
|
|
177
|
+
const max_elements = Math.floor(253 / element_len);
|
|
178
|
+
const n_returned_elements = Math.min(max_elements, this.queue.length);
|
|
179
|
+
const returned_elements = this.queue.splice(0, n_returned_elements);
|
|
180
|
+
return Buffer.concat([
|
|
253
181
|
Buffer.from([n_returned_elements]),
|
|
254
|
-
Buffer.from([element_len])
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
}
|
|
259
|
-
export { GetMoreElementsCommand };
|
|
182
|
+
Buffer.from([element_len]),
|
|
183
|
+
...returned_elements,
|
|
184
|
+
]);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
260
187
|
/**
|
|
261
188
|
* This class will dispatch a client command coming from the hardware device to
|
|
262
189
|
* the appropriate client command implementation. Those client commands
|
|
@@ -272,79 +199,55 @@ export { GetMoreElementsCommand };
|
|
|
272
199
|
* data will be accessible after the command completed by calling getYielded(),
|
|
273
200
|
* which will return the yields in the same order as they came in.
|
|
274
201
|
*/
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
var e_1, _a;
|
|
202
|
+
export class ClientCommandInterpreter {
|
|
203
|
+
constructor(progressCallback) {
|
|
278
204
|
this.roots = new Map();
|
|
279
205
|
this.preimages = new Map();
|
|
280
206
|
this.yielded = [];
|
|
281
207
|
this.queue = [];
|
|
282
208
|
this.commands = new Map();
|
|
283
|
-
|
|
209
|
+
const commands = [
|
|
284
210
|
new YieldCommand(this.yielded, progressCallback),
|
|
285
211
|
new GetPreimageCommand(this.preimages, this.queue),
|
|
286
212
|
new GetMerkleLeafIndexCommand(this.roots),
|
|
287
213
|
new GetMerkleLeafProofCommand(this.roots, this.queue),
|
|
288
214
|
new GetMoreElementsCommand(this.queue),
|
|
289
215
|
];
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
if (this.commands.has(cmd.code)) {
|
|
294
|
-
throw new Error("Multiple commands with code ".concat(cmd.code));
|
|
295
|
-
}
|
|
296
|
-
this.commands.set(cmd.code, cmd);
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
300
|
-
finally {
|
|
301
|
-
try {
|
|
302
|
-
if (commands_1_1 && !commands_1_1.done && (_a = commands_1["return"])) _a.call(commands_1);
|
|
216
|
+
for (const cmd of commands) {
|
|
217
|
+
if (this.commands.has(cmd.code)) {
|
|
218
|
+
throw new Error(`Multiple commands with code ${cmd.code}`);
|
|
303
219
|
}
|
|
304
|
-
|
|
220
|
+
this.commands.set(cmd.code, cmd);
|
|
305
221
|
}
|
|
306
222
|
}
|
|
307
|
-
|
|
223
|
+
getYielded() {
|
|
308
224
|
return this.yielded;
|
|
309
|
-
}
|
|
310
|
-
|
|
225
|
+
}
|
|
226
|
+
addKnownPreimage(preimage) {
|
|
311
227
|
this.preimages.set(crypto.sha256(preimage).toString("hex"), preimage);
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
var el = elements_1_1.value;
|
|
318
|
-
var preimage = Buffer.concat([Buffer.from([0]), el]);
|
|
319
|
-
this.addKnownPreimage(preimage);
|
|
320
|
-
}
|
|
321
|
-
}
|
|
322
|
-
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
323
|
-
finally {
|
|
324
|
-
try {
|
|
325
|
-
if (elements_1_1 && !elements_1_1.done && (_a = elements_1["return"])) _a.call(elements_1);
|
|
326
|
-
}
|
|
327
|
-
finally { if (e_2) throw e_2.error; }
|
|
228
|
+
}
|
|
229
|
+
addKnownList(elements) {
|
|
230
|
+
for (const el of elements) {
|
|
231
|
+
const preimage = Buffer.concat([Buffer.from([0]), el]);
|
|
232
|
+
this.addKnownPreimage(preimage);
|
|
328
233
|
}
|
|
329
|
-
|
|
234
|
+
const mt = new Merkle(elements.map((el) => hashLeaf(el)));
|
|
330
235
|
this.roots.set(mt.getRoot().toString("hex"), mt);
|
|
331
|
-
}
|
|
332
|
-
|
|
236
|
+
}
|
|
237
|
+
addKnownMapping(mm) {
|
|
333
238
|
this.addKnownList(mm.keys);
|
|
334
239
|
this.addKnownList(mm.values);
|
|
335
|
-
}
|
|
336
|
-
|
|
240
|
+
}
|
|
241
|
+
execute(request) {
|
|
337
242
|
if (request.length == 0) {
|
|
338
243
|
throw new Error("Unexpected empty command");
|
|
339
244
|
}
|
|
340
|
-
|
|
341
|
-
|
|
245
|
+
const cmdCode = request[0];
|
|
246
|
+
const cmd = this.commands.get(cmdCode);
|
|
342
247
|
if (!cmd) {
|
|
343
|
-
throw new Error(
|
|
248
|
+
throw new Error(`Unexpected command code ${cmdCode}`);
|
|
344
249
|
}
|
|
345
250
|
return cmd.execute(request);
|
|
346
|
-
}
|
|
347
|
-
|
|
348
|
-
}());
|
|
349
|
-
export { ClientCommandInterpreter };
|
|
251
|
+
}
|
|
252
|
+
}
|
|
350
253
|
//# sourceMappingURL=clientCommands.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clientCommands.js","sourceRoot":"","sources":["../../src/newops/clientCommands.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"clientCommands.js","sourceRoot":"","sources":["../../src/newops/clientCommands.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,43 +1,3 @@
|
|
|
1
|
-
var __extends = (this && this.__extends) || (function () {
|
|
2
|
-
var extendStatics = function (d, b) {
|
|
3
|
-
extendStatics = Object.setPrototypeOf ||
|
|
4
|
-
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
5
|
-
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
6
|
-
return extendStatics(d, b);
|
|
7
|
-
};
|
|
8
|
-
return function (d, b) {
|
|
9
|
-
if (typeof b !== "function" && b !== null)
|
|
10
|
-
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
11
|
-
extendStatics(d, b);
|
|
12
|
-
function __() { this.constructor = d; }
|
|
13
|
-
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
14
|
-
};
|
|
15
|
-
})();
|
|
16
|
-
var __read = (this && this.__read) || function (o, n) {
|
|
17
|
-
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
18
|
-
if (!m) return o;
|
|
19
|
-
var i = m.call(o), r, ar = [], e;
|
|
20
|
-
try {
|
|
21
|
-
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
22
|
-
}
|
|
23
|
-
catch (error) { e = { error: error }; }
|
|
24
|
-
finally {
|
|
25
|
-
try {
|
|
26
|
-
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
27
|
-
}
|
|
28
|
-
finally { if (e) throw e.error; }
|
|
29
|
-
}
|
|
30
|
-
return ar;
|
|
31
|
-
};
|
|
32
|
-
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
33
|
-
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
34
|
-
if (ar || !(i in from)) {
|
|
35
|
-
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
36
|
-
ar[i] = from[i];
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
return to.concat(ar || Array.prototype.slice.call(from));
|
|
40
|
-
};
|
|
41
1
|
import { MerkleMap } from "./merkleMap";
|
|
42
2
|
import { PsbtV2 } from "./psbtv2";
|
|
43
3
|
/**
|
|
@@ -51,49 +11,41 @@ import { PsbtV2 } from "./psbtv2";
|
|
|
51
11
|
* The signing process is documented at
|
|
52
12
|
* https://github.com/LedgerHQ/app-bitcoin-new/blob/master/doc/bitcoin.md#sign_psbt
|
|
53
13
|
*/
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
_this.inputMerkleMaps.push(MerkelizedPsbt.createMerkleMap(_this.inputMaps[i]));
|
|
14
|
+
export class MerkelizedPsbt extends PsbtV2 {
|
|
15
|
+
constructor(psbt) {
|
|
16
|
+
super();
|
|
17
|
+
this.inputMerkleMaps = [];
|
|
18
|
+
this.outputMerkleMaps = [];
|
|
19
|
+
psbt.copy(this);
|
|
20
|
+
this.globalMerkleMap = MerkelizedPsbt.createMerkleMap(this.globalMap);
|
|
21
|
+
for (let i = 0; i < this.getGlobalInputCount(); i++) {
|
|
22
|
+
this.inputMerkleMaps.push(MerkelizedPsbt.createMerkleMap(this.inputMaps[i]));
|
|
64
23
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
for (var i = 0; i < _this.getGlobalOutputCount(); i++) {
|
|
69
|
-
_this.outputMerkleMaps.push(MerkelizedPsbt.createMerkleMap(_this.outputMaps[i]));
|
|
24
|
+
this.inputMapCommitments = [...this.inputMerkleMaps.values()].map((v) => v.commitment());
|
|
25
|
+
for (let i = 0; i < this.getGlobalOutputCount(); i++) {
|
|
26
|
+
this.outputMerkleMaps.push(MerkelizedPsbt.createMerkleMap(this.outputMaps[i]));
|
|
70
27
|
}
|
|
71
|
-
|
|
72
|
-
return v.commitment();
|
|
73
|
-
});
|
|
74
|
-
return _this;
|
|
28
|
+
this.outputMapCommitments = [...this.outputMerkleMaps.values()].map((v) => v.commitment());
|
|
75
29
|
}
|
|
76
30
|
// These public functions are for MerkelizedPsbt.
|
|
77
|
-
|
|
31
|
+
getGlobalSize() {
|
|
78
32
|
return this.globalMap.size;
|
|
79
|
-
}
|
|
80
|
-
|
|
33
|
+
}
|
|
34
|
+
getGlobalKeysValuesRoot() {
|
|
81
35
|
return this.globalMerkleMap.commitment();
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
36
|
+
}
|
|
37
|
+
static createMerkleMap(map) {
|
|
38
|
+
const sortedKeysStrings = [...map.keys()].sort();
|
|
39
|
+
const values = sortedKeysStrings.map((k) => {
|
|
40
|
+
const v = map.get(k);
|
|
87
41
|
if (!v) {
|
|
88
42
|
throw new Error("No value for key " + k);
|
|
89
43
|
}
|
|
90
44
|
return v;
|
|
91
45
|
});
|
|
92
|
-
|
|
93
|
-
|
|
46
|
+
const sortedKeys = sortedKeysStrings.map((k) => Buffer.from(k, "hex"));
|
|
47
|
+
const merkleMap = new MerkleMap(sortedKeys, values);
|
|
94
48
|
return merkleMap;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
}(PsbtV2));
|
|
98
|
-
export { MerkelizedPsbt };
|
|
49
|
+
}
|
|
50
|
+
}
|
|
99
51
|
//# sourceMappingURL=merkelizedPsbt.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merkelizedPsbt.js","sourceRoot":"","sources":["../../src/newops/merkelizedPsbt.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"merkelizedPsbt.js","sourceRoot":"","sources":["../../src/newops/merkelizedPsbt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC;;;;;;;;;;GAUG;AACH,MAAM,OAAO,cAAe,SAAQ,MAAM;IAMxC,YAAY,IAAY;QACtB,KAAK,EAAE,CAAC;QALH,oBAAe,GAAgB,EAAE,CAAC;QAClC,qBAAgB,GAAgB,EAAE,CAAC;QAKxC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChB,IAAI,CAAC,eAAe,GAAG,cAAc,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAEtE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,mBAAmB,EAAE,EAAE,CAAC,EAAE,EAAE;YACnD,IAAI,CAAC,eAAe,CAAC,IAAI,CACvB,cAAc,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAClD,CAAC;SACH;QACD,IAAI,CAAC,mBAAmB,GAAG,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACtE,CAAC,CAAC,UAAU,EAAE,CACf,CAAC;QAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,oBAAoB,EAAE,EAAE,CAAC,EAAE,EAAE;YACpD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CACxB,cAAc,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CACnD,CAAC;SACH;QACD,IAAI,CAAC,oBAAoB,GAAG,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACxE,CAAC,CAAC,UAAU,EAAE,CACf,CAAC;IACJ,CAAC;IACD,iDAAiD;IACjD,aAAa;QACX,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;IAC7B,CAAC;IACD,uBAAuB;QACrB,OAAO,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC;IAC3C,CAAC;IAEO,MAAM,CAAC,eAAe,CAAC,GAAwB;QACrD,MAAM,iBAAiB,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACjD,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACzC,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACrB,IAAI,CAAC,CAAC,EAAE;gBACN,MAAM,IAAI,KAAK,CAAC,mBAAmB,GAAG,CAAC,CAAC,CAAC;aAC1C;YACD,OAAO,CAAC,CAAC;QACX,CAAC,CAAC,CAAC;QACH,MAAM,UAAU,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;QAEvE,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACpD,OAAO,SAAS,CAAC;IACnB,CAAC;CACF"}
|