@ledgerhq/hw-app-btc 10.9.4-nightly.0 → 10.10.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.
@@ -1 +1 @@
1
- {"version":3,"file":"getTrustedInput.d.ts","sourceRoot":"","sources":["../src/getTrustedInput.ts"],"names":[],"mappings":";;AACA,OAAO,KAAK,SAAS,MAAM,wBAAwB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAG3C,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,SAAS,EACpB,eAAe,EAAE,MAAM,EACvB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACtC,OAAO,CAAC,MAAM,CAAC,CAgBjB;AACD,wBAAsB,eAAe,CACnC,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,WAAW,EACxB,WAAW,GAAE,KAAK,CAAC,MAAM,CAAM,GAC9B,OAAO,CAAC,MAAM,CAAC,CAwGjB"}
1
+ {"version":3,"file":"getTrustedInput.d.ts","sourceRoot":"","sources":["../src/getTrustedInput.ts"],"names":[],"mappings":";;AACA,OAAO,KAAK,SAAS,MAAM,wBAAwB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAGrE,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,SAAS,EACpB,eAAe,EAAE,MAAM,EACvB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACtC,OAAO,CAAC,MAAM,CAAC,CAgBjB;AACD,wBAAsB,eAAe,CACnC,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,WAAW,EACxB,WAAW,GAAE,KAAK,CAAC,MAAM,CAAM,GAC9B,OAAO,CAAC,MAAM,CAAC,CAyHjB;AAED,wBAAsB,WAAW,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAuC3F;AAED,wBAAsB,WAAW,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAuC3F"}
@@ -1,5 +1,5 @@
1
1
  import invariant from "invariant";
2
- import { MAX_SCRIPT_BLOCK } from "./constants";
2
+ import { MAX_SCRIPT_BLOCK, zCashEncCiphertextSize } from "./constants";
3
3
  import { createVarint } from "./varint";
4
4
  export async function getTrustedInputRaw(transport, transactionData, indexLookup) {
5
5
  let data;
@@ -81,6 +81,20 @@ export async function getTrustedInput(transport, indexLookup, transaction, addit
81
81
  ]);
82
82
  await getTrustedInputRaw(transport, data);
83
83
  }
84
+ if (isZcash) {
85
+ const data = Buffer.concat([
86
+ createVarint(transaction.sapling?.vSpendsSapling.length || 0),
87
+ createVarint(transaction.sapling?.vOutputSapling.length || 0),
88
+ createVarint(transaction.orchard?.vActions.length || 0),
89
+ ]);
90
+ await getTrustedInputRaw(transport, data);
91
+ if (transaction.sapling) {
92
+ await sendSapling(transport, transaction.sapling);
93
+ }
94
+ if (transaction.orchard) {
95
+ await sendOrchard(transport, transaction.orchard);
96
+ }
97
+ }
84
98
  const endData = [];
85
99
  if (nExpiryHeight && nExpiryHeight.length > 0) {
86
100
  endData.push(nExpiryHeight);
@@ -97,4 +111,76 @@ export async function getTrustedInput(transport, indexLookup, transaction, addit
97
111
  invariant(res, "missing result in processScriptBlocks");
98
112
  return res;
99
113
  }
114
+ export async function sendSapling(transport, sapling) {
115
+ const saplingData = Buffer.concat([sapling.valueBalanceSapling, sapling.anchorSapling]);
116
+ await getTrustedInputRaw(transport, saplingData);
117
+ // send spends
118
+ for (const spend of sapling.vSpendsSapling) {
119
+ const spendData = Buffer.concat([spend.cv, spend.nullifier, spend.rk]);
120
+ await getTrustedInputRaw(transport, spendData);
121
+ }
122
+ for (const output of sapling.vOutputSapling) {
123
+ const outputData = Buffer.concat([
124
+ output.cmu,
125
+ output.ephemeralKey,
126
+ output.encCiphertext.slice(0, 52), // https://zips.z.cash/zip-0244
127
+ ]);
128
+ await getTrustedInputRaw(transport, outputData);
129
+ }
130
+ // send outputs memo
131
+ for (const output of sapling.vOutputSapling) {
132
+ // Send memo and noncompact ciphertext in 128-byte blocks
133
+ // https://zips.z.cash/zip-0244
134
+ for (let i = 0; i < 4; i++) {
135
+ const start = 52 + i * 128;
136
+ const end = start + 128;
137
+ const outputData = Buffer.concat([output.encCiphertext.slice(start, end)]);
138
+ await getTrustedInputRaw(transport, outputData);
139
+ }
140
+ }
141
+ // send outputs noncompact
142
+ for (const output of sapling.vOutputSapling) {
143
+ const outputData = Buffer.concat([
144
+ output.cv,
145
+ output.encCiphertext.slice(564, zCashEncCiphertextSize), // https://zips.z.cash/zip-0244
146
+ output.outCiphertext,
147
+ ]);
148
+ await getTrustedInputRaw(transport, outputData);
149
+ }
150
+ }
151
+ export async function sendOrchard(transport, orchard) {
152
+ // compact digest data
153
+ for (const action of orchard.vActions) {
154
+ const actionData = Buffer.concat([
155
+ action.nullifier,
156
+ action.cmx,
157
+ action.ephemeralKey,
158
+ action.encCiphertext.slice(0, 52), // https://zips.z.cash/zip-0244
159
+ ]);
160
+ await getTrustedInputRaw(transport, actionData);
161
+ }
162
+ // memo digest data
163
+ for (const action of orchard.vActions) {
164
+ // Send memo and noncompact ciphertext in 128-byte blocks
165
+ // https://zips.z.cash/zip-0244
166
+ for (let i = 0; i < 4; i++) {
167
+ const start = 52 + i * 128;
168
+ const end = start + 128;
169
+ const outputData = Buffer.concat([action.encCiphertext.slice(start, end)]);
170
+ await getTrustedInputRaw(transport, outputData);
171
+ }
172
+ }
173
+ // noncompact
174
+ for (const action of orchard.vActions) {
175
+ const actionData = Buffer.concat([
176
+ action.cv,
177
+ action.rk,
178
+ action.encCiphertext.slice(564, zCashEncCiphertextSize), // https://zips.z.cash/zip-0244
179
+ action.outCiphertext,
180
+ ]);
181
+ await getTrustedInputRaw(transport, actionData);
182
+ }
183
+ const orchardData = Buffer.concat([orchard.flags, orchard.valueBalance, orchard.anchor]);
184
+ await getTrustedInputRaw(transport, orchardData);
185
+ }
100
186
  //# sourceMappingURL=getTrustedInput.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getTrustedInput.js","sourceRoot":"","sources":["../src/getTrustedInput.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"getTrustedInput.js","sourceRoot":"","sources":["../src/getTrustedInput.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"splitTransaction.d.ts","sourceRoot":"","sources":["../src/splitTransaction.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAuC,MAAM,SAAS,CAAC;AAIhF,wBAAgB,gBAAgB,CAC9B,cAAc,EAAE,MAAM,EACtB,iBAAiB,GAAE,OAAO,GAAG,IAAI,GAAG,SAAiB,EACrD,YAAY,UAAQ,EACpB,WAAW,GAAE,KAAK,CAAC,MAAM,CAAM,GAC9B,WAAW,CAqJb"}
1
+ {"version":3,"file":"splitTransaction.d.ts","sourceRoot":"","sources":["../src/splitTransaction.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,WAAW,EAQZ,MAAM,SAAS,CAAC;AASjB,wBAAgB,gBAAgB,CAC9B,cAAc,EAAE,MAAM,EACtB,iBAAiB,GAAE,OAAO,GAAG,IAAI,GAAG,SAAiB,EACrD,YAAY,UAAQ,EACpB,WAAW,GAAE,KAAK,CAAC,MAAM,CAAM,GAC9B,WAAW,CAqKb"}
@@ -1,6 +1,7 @@
1
1
  import { log } from "@ledgerhq/logs";
2
2
  import { getVarint } from "./varint";
3
3
  import { formatTransactionDebug } from "./debug";
4
+ import { zCashOutCiphertextSize, zCashEncCiphertextSize, zCashProofsSaplingSize, } from "./constants";
4
5
  export function splitTransaction(transactionHex, isSegwitSupported = false, hasExtraData = false, additionals = []) {
5
6
  const inputs = [];
6
7
  const outputs = [];
@@ -85,6 +86,15 @@ export function splitTransaction(transactionHex, isSegwitSupported = false, hasE
85
86
  script,
86
87
  });
87
88
  }
89
+ let sapling;
90
+ let orchard;
91
+ if (hasExtraData) {
92
+ if (isZcashv5) {
93
+ ({ sapling, offset } = splitSaplingPart(transaction, offset));
94
+ ({ orchard, offset } = splitOrchardPart(transaction, offset));
95
+ extraData = transaction.subarray(offset);
96
+ }
97
+ }
88
98
  if (witness) {
89
99
  witnessScript = transaction.slice(offset, -4);
90
100
  locktime = transaction.slice(transaction.length - 4);
@@ -98,7 +108,9 @@ export function splitTransaction(transactionHex, isSegwitSupported = false, hasE
98
108
  offset += 4;
99
109
  }
100
110
  if (hasExtraData) {
101
- extraData = transaction.slice(offset);
111
+ if (!isZcashv5) {
112
+ extraData = transaction.slice(offset);
113
+ }
102
114
  }
103
115
  //Get witnesses for Decred
104
116
  if (isDecred) {
@@ -132,8 +144,170 @@ export function splitTransaction(transactionHex, isSegwitSupported = false, hasE
132
144
  nVersionGroupId,
133
145
  nExpiryHeight,
134
146
  extraData,
147
+ sapling,
148
+ orchard,
135
149
  };
136
150
  log("btc", `splitTransaction ${transactionHex}:\n${formatTransactionDebug(t)}`);
137
151
  return t;
138
152
  }
153
+ /**
154
+ * Splits the Sapling part of a Zcash v5 transaction buffer according to https://zips.z.cash/zip-0225
155
+ */
156
+ function splitSaplingPart(transaction, offset) {
157
+ let varint = getVarint(transaction, offset);
158
+ const nSpendsSapling = varint[0];
159
+ offset += varint[1];
160
+ const vSpendsSapling = [];
161
+ for (let i = 0; i < nSpendsSapling; i++) {
162
+ const cv = transaction.slice(offset, offset + 32);
163
+ offset += 32;
164
+ const nullifier = transaction.slice(offset, offset + 32);
165
+ offset += 32;
166
+ const rk = transaction.slice(offset, offset + 32);
167
+ offset += 32;
168
+ vSpendsSapling.push({
169
+ cv,
170
+ nullifier,
171
+ rk,
172
+ });
173
+ }
174
+ varint = getVarint(transaction, offset);
175
+ const nOutputsSapling = varint[0];
176
+ offset += varint[1];
177
+ const vOutputSapling = [];
178
+ for (let i = 0; i < nOutputsSapling; i++) {
179
+ const cv = transaction.slice(offset, offset + 32);
180
+ offset += 32;
181
+ const cmu = transaction.slice(offset, offset + 32);
182
+ offset += 32;
183
+ const ephemeralKey = transaction.slice(offset, offset + 32);
184
+ offset += 32;
185
+ const encCiphertext = transaction.slice(offset, offset + zCashEncCiphertextSize);
186
+ offset += zCashEncCiphertextSize;
187
+ const outCiphertext = transaction.slice(offset, offset + zCashOutCiphertextSize);
188
+ offset += zCashOutCiphertextSize;
189
+ vOutputSapling.push({
190
+ cv,
191
+ cmu,
192
+ ephemeralKey,
193
+ encCiphertext,
194
+ outCiphertext,
195
+ });
196
+ }
197
+ let valueBalanceSapling = Buffer.alloc(0);
198
+ if (nSpendsSapling + nOutputsSapling > 0) {
199
+ valueBalanceSapling = transaction.slice(offset, offset + 8);
200
+ offset += 8;
201
+ }
202
+ let anchorSapling = Buffer.alloc(0);
203
+ if (nSpendsSapling > 0) {
204
+ anchorSapling = transaction.slice(offset, offset + 32);
205
+ offset += 32;
206
+ }
207
+ let vSpendProofsSapling = Buffer.alloc(0);
208
+ let vSpendAuthSigsSapling = Buffer.alloc(0);
209
+ if (nSpendsSapling > 0) {
210
+ vSpendProofsSapling = transaction.slice(offset, offset + zCashProofsSaplingSize * nSpendsSapling);
211
+ offset += zCashProofsSaplingSize * nSpendsSapling;
212
+ vSpendAuthSigsSapling = transaction.slice(offset, offset + 64 * nSpendsSapling);
213
+ offset += 64 * nSpendsSapling;
214
+ }
215
+ let vOutputProofsSapling = Buffer.alloc(0);
216
+ if (nOutputsSapling > 0) {
217
+ vOutputProofsSapling = transaction.slice(offset, offset + zCashProofsSaplingSize * nOutputsSapling);
218
+ offset += zCashProofsSaplingSize * nOutputsSapling;
219
+ }
220
+ let bindingSigSapling = Buffer.alloc(0);
221
+ if (nSpendsSapling + nOutputsSapling > 0) {
222
+ bindingSigSapling = transaction.slice(offset, offset + 64);
223
+ offset += 64;
224
+ }
225
+ let sapling;
226
+ if (nSpendsSapling + nOutputsSapling > 0) {
227
+ sapling = {
228
+ nSpendsSapling,
229
+ vSpendsSapling,
230
+ nOutputsSapling,
231
+ vOutputSapling,
232
+ valueBalanceSapling,
233
+ anchorSapling,
234
+ vSpendProofsSapling,
235
+ vSpendAuthSigsSapling,
236
+ vOutputProofsSapling,
237
+ bindingSigSapling,
238
+ };
239
+ }
240
+ return { sapling, offset };
241
+ }
242
+ /**
243
+ * Splits the Orchard part of a Zcash v5 transaction buffer according to https://zips.z.cash/zip-0225
244
+ */
245
+ function splitOrchardPart(transaction, offset) {
246
+ // orchard
247
+ let varint = getVarint(transaction, offset);
248
+ const nActionsOrchard = varint[0];
249
+ offset += varint[1];
250
+ let orchard;
251
+ if (nActionsOrchard > 0) {
252
+ const actionsOrchard = [];
253
+ for (let i = 0; i < nActionsOrchard; i++) {
254
+ const cv = transaction.subarray(offset, offset + 32);
255
+ offset += 32;
256
+ const nullifier = transaction.subarray(offset, offset + 32);
257
+ offset += 32;
258
+ const rk = transaction.subarray(offset, offset + 32);
259
+ offset += 32;
260
+ const cmx = transaction.subarray(offset, offset + 32);
261
+ offset += 32;
262
+ const ephemeralKey = transaction.subarray(offset, offset + 32);
263
+ offset += 32;
264
+ const encCiphertext = transaction.subarray(offset, offset + zCashEncCiphertextSize);
265
+ offset += zCashEncCiphertextSize;
266
+ const outCiphertext = transaction.subarray(offset, offset + zCashOutCiphertextSize);
267
+ offset += zCashOutCiphertextSize;
268
+ const action = {
269
+ cv,
270
+ nullifier,
271
+ rk,
272
+ cmx,
273
+ ephemeralKey,
274
+ encCiphertext,
275
+ outCiphertext,
276
+ };
277
+ actionsOrchard.push(action);
278
+ }
279
+ // flag field
280
+ const flagsOrchard = transaction.subarray(offset, offset + 1);
281
+ offset += 1;
282
+ // value balance orchard
283
+ const valueBalanceOrchard = transaction.subarray(offset, offset + 8);
284
+ offset += 8;
285
+ const anchorOrchard = transaction.subarray(offset, offset + 32);
286
+ offset += 32;
287
+ // read the size of proof
288
+ varint = getVarint(transaction, offset);
289
+ const sizeProofsOrchard = transaction.subarray(offset, offset + varint[1]);
290
+ offset += varint[1];
291
+ // proof field
292
+ const proofsOrchard = transaction.subarray(offset, offset + varint[0]);
293
+ offset += varint[0];
294
+ // vSpendAuthSigsOrchard field
295
+ const vSpendAuthSigsOrchard = transaction.subarray(offset, offset + nActionsOrchard * 64);
296
+ offset += nActionsOrchard * 64;
297
+ // bindingSigOrchard
298
+ const bindingSigOrchard = transaction.subarray(offset, offset + 64);
299
+ offset += 64;
300
+ orchard = {
301
+ vActions: actionsOrchard,
302
+ flags: flagsOrchard,
303
+ valueBalance: valueBalanceOrchard,
304
+ anchor: anchorOrchard,
305
+ sizeProofs: sizeProofsOrchard,
306
+ proofs: proofsOrchard,
307
+ vSpendsAuthSigs: vSpendAuthSigsOrchard,
308
+ bindingSig: bindingSigOrchard,
309
+ };
310
+ }
311
+ return { orchard, offset };
312
+ }
139
313
  //# sourceMappingURL=splitTransaction.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"splitTransaction.js","sourceRoot":"","sources":["../src/splitTransaction.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"splitTransaction.js","sourceRoot":"","sources":["../src/splitTransaction.ts"],"names":[],"mappings":"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"}
package/lib-es/types.d.ts CHANGED
@@ -27,10 +27,55 @@ export interface Transaction {
27
27
  nExpiryHeight?: Buffer;
28
28
  extraData?: Buffer;
29
29
  consensusBranchId?: Buffer;
30
+ sapling?: SaplingData;
31
+ orchard?: OrchardData;
30
32
  }
31
33
  export interface TrustedInput {
32
34
  trustedInput: boolean;
33
35
  value: Buffer;
34
36
  sequence: Buffer;
35
37
  }
38
+ /**
39
+ */
40
+ export interface SaplingData {
41
+ vSpendsSapling: SaplingSpendDescriptionV5[];
42
+ vOutputSapling: SaplingOutputDescriptionV5[];
43
+ valueBalanceSapling: Buffer;
44
+ anchorSapling: Buffer;
45
+ vSpendProofsSapling: Buffer;
46
+ vSpendAuthSigsSapling: Buffer;
47
+ vOutputProofsSapling: Buffer;
48
+ bindingSigSapling: Buffer;
49
+ }
50
+ export interface SaplingSpendDescriptionV5 {
51
+ cv: Buffer;
52
+ nullifier: Buffer;
53
+ rk: Buffer;
54
+ }
55
+ export interface SaplingOutputDescriptionV5 {
56
+ cv: Buffer;
57
+ cmu: Buffer;
58
+ ephemeralKey: Buffer;
59
+ encCiphertext: Buffer;
60
+ outCiphertext: Buffer;
61
+ }
62
+ export interface OrchardAction {
63
+ cv: Buffer;
64
+ nullifier: Buffer;
65
+ rk: Buffer;
66
+ cmx: Buffer;
67
+ ephemeralKey: Buffer;
68
+ encCiphertext: Buffer;
69
+ outCiphertext: Buffer;
70
+ }
71
+ export interface OrchardData {
72
+ vActions: OrchardAction[];
73
+ flags: Buffer;
74
+ valueBalance: Buffer;
75
+ anchor: Buffer;
76
+ sizeProofs: Buffer;
77
+ proofs: Buffer;
78
+ vSpendsAuthSigs: Buffer;
79
+ bindingSig: Buffer;
80
+ }
36
81
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;AAAA;GACG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;GACG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;GACG;AACH,MAAM,WAAW,WAAW;IAG1B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,OAAO,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAG9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,eAAe,CAAC,EAAE,MAAM,CAAC;IAKzB,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,OAAO,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;AAAA;GACG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;GACG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;GACG;AACH,MAAM,WAAW,WAAW;IAG1B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,OAAO,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAG9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,eAAe,CAAC,EAAE,MAAM,CAAC;IAKzB,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,OAAO,CAAC,EAAE,WAAW,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,OAAO,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAGD;GACG;AACH,MAAM,WAAW,WAAW;IAC1B,cAAc,EAAE,yBAAyB,EAAE,CAAC;IAC5C,cAAc,EAAE,0BAA0B,EAAE,CAAC;IAC7C,mBAAmB,EAAE,MAAM,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,yBAAyB;IACxC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,0BAA0B;IACzC,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;CACpB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ledgerhq/hw-app-btc",
3
- "version": "10.9.4-nightly.0",
3
+ "version": "10.10.0",
4
4
  "description": "Ledger Hardware Wallet Bitcoin Application API",
5
5
  "keywords": [
6
6
  "Ledger",
@@ -70,7 +70,7 @@
70
70
  "sha.js": "2",
71
71
  "tiny-secp256k1": "1.1.6",
72
72
  "varuint-bitcoin": "1.1.2",
73
- "@ledgerhq/hw-transport": "^6.31.8-nightly.0",
73
+ "@ledgerhq/hw-transport": "^6.31.8",
74
74
  "@ledgerhq/logs": "^6.13.0"
75
75
  },
76
76
  "devDependencies": {
@@ -83,8 +83,8 @@
83
83
  "source-map-support": "^0.5.21",
84
84
  "ts-jest": "^29.1.1",
85
85
  "ts-node": "^10.4.0",
86
- "@ledgerhq/hw-transport-mocker": "^6.29.8-nightly.0",
87
- "@ledgerhq/hw-transport-node-speculos": "^6.29.8-nightly.0"
86
+ "@ledgerhq/hw-transport-mocker": "^6.29.8",
87
+ "@ledgerhq/hw-transport-node-speculos": "^6.29.8"
88
88
  },
89
89
  "gitHead": "dd0dea64b58e5a9125c8a422dcffd29e5ef6abec",
90
90
  "scripts": {
package/src/constants.ts CHANGED
@@ -33,3 +33,7 @@ export const ZCASH_ACTIVATION_HEIGHTS = {
33
33
  // https://zips.z.cash/zip-0205
34
34
  SAPLING: 419200,
35
35
  };
36
+
37
+ export const zCashEncCiphertextSize = 580; //https://zips.z.cash/zip-0225
38
+ export const zCashOutCiphertextSize = 80; //https://zips.z.cash/zip-0225
39
+ export const zCashProofsSaplingSize = 192; //https://zips.z.cash/zip-0225
@@ -1,7 +1,7 @@
1
1
  import invariant from "invariant";
2
2
  import type Transport from "@ledgerhq/hw-transport";
3
- import type { Transaction } from "./types";
4
- import { MAX_SCRIPT_BLOCK } from "./constants";
3
+ import type { OrchardData, SaplingData, Transaction } from "./types";
4
+ import { MAX_SCRIPT_BLOCK, zCashEncCiphertextSize } from "./constants";
5
5
  import { createVarint } from "./varint";
6
6
  export async function getTrustedInputRaw(
7
7
  transport: Transport,
@@ -100,7 +100,6 @@ export async function getTrustedInput(
100
100
  ? processWholeScriptBlock(Buffer.concat([input.script, input.sequence]))
101
101
  : processScriptBlocks(input.script, input.sequence));
102
102
  }
103
-
104
103
  await getTrustedInputRaw(transport, createVarint(outputs.length));
105
104
 
106
105
  for (const output of outputs) {
@@ -113,6 +112,24 @@ export async function getTrustedInput(
113
112
  await getTrustedInputRaw(transport, data);
114
113
  }
115
114
 
115
+ if (isZcash) {
116
+ const data = Buffer.concat([
117
+ createVarint(transaction.sapling?.vSpendsSapling.length || 0),
118
+ createVarint(transaction.sapling?.vOutputSapling.length || 0),
119
+ createVarint(transaction.orchard?.vActions.length || 0),
120
+ ]);
121
+
122
+ await getTrustedInputRaw(transport, data);
123
+
124
+ if (transaction.sapling) {
125
+ await sendSapling(transport, transaction.sapling);
126
+ }
127
+
128
+ if (transaction.orchard) {
129
+ await sendOrchard(transport, transaction.orchard);
130
+ }
131
+ }
132
+
116
133
  const endData: Buffer[] = [];
117
134
 
118
135
  if (nExpiryHeight && nExpiryHeight.length > 0) {
@@ -134,3 +151,85 @@ export async function getTrustedInput(
134
151
  invariant(res, "missing result in processScriptBlocks");
135
152
  return res;
136
153
  }
154
+
155
+ export async function sendSapling(transport: Transport, sapling: SaplingData): Promise<void> {
156
+ const saplingData = Buffer.concat([sapling.valueBalanceSapling, sapling.anchorSapling]);
157
+ await getTrustedInputRaw(transport, saplingData);
158
+ // send spends
159
+ for (const spend of sapling.vSpendsSapling) {
160
+ const spendData = Buffer.concat([spend.cv, spend.nullifier, spend.rk]);
161
+
162
+ await getTrustedInputRaw(transport, spendData);
163
+ }
164
+ for (const output of sapling.vOutputSapling) {
165
+ const outputData = Buffer.concat([
166
+ output.cmu,
167
+ output.ephemeralKey,
168
+ output.encCiphertext.slice(0, 52), // https://zips.z.cash/zip-0244
169
+ ]);
170
+
171
+ await getTrustedInputRaw(transport, outputData);
172
+ }
173
+ // send outputs memo
174
+ for (const output of sapling.vOutputSapling) {
175
+ // Send memo and noncompact ciphertext in 128-byte blocks
176
+ // https://zips.z.cash/zip-0244
177
+ for (let i = 0; i < 4; i++) {
178
+ const start = 52 + i * 128;
179
+ const end = start + 128;
180
+ const outputData = Buffer.concat([output.encCiphertext.slice(start, end)]);
181
+
182
+ await getTrustedInputRaw(transport, outputData);
183
+ }
184
+ }
185
+ // send outputs noncompact
186
+ for (const output of sapling.vOutputSapling) {
187
+ const outputData = Buffer.concat([
188
+ output.cv,
189
+ output.encCiphertext.slice(564, zCashEncCiphertextSize), // https://zips.z.cash/zip-0244
190
+ output.outCiphertext,
191
+ ]);
192
+ await getTrustedInputRaw(transport, outputData);
193
+ }
194
+ }
195
+
196
+ export async function sendOrchard(transport: Transport, orchard: OrchardData): Promise<void> {
197
+ // compact digest data
198
+ for (const action of orchard.vActions) {
199
+ const actionData = Buffer.concat([
200
+ action.nullifier,
201
+ action.cmx,
202
+ action.ephemeralKey,
203
+ action.encCiphertext.slice(0, 52), // https://zips.z.cash/zip-0244
204
+ ]);
205
+
206
+ await getTrustedInputRaw(transport, actionData);
207
+ }
208
+ // memo digest data
209
+ for (const action of orchard.vActions) {
210
+ // Send memo and noncompact ciphertext in 128-byte blocks
211
+ // https://zips.z.cash/zip-0244
212
+ for (let i = 0; i < 4; i++) {
213
+ const start = 52 + i * 128;
214
+ const end = start + 128;
215
+ const outputData = Buffer.concat([action.encCiphertext.slice(start, end)]);
216
+
217
+ await getTrustedInputRaw(transport, outputData);
218
+ }
219
+ }
220
+ // noncompact
221
+ for (const action of orchard.vActions) {
222
+ const actionData = Buffer.concat([
223
+ action.cv,
224
+ action.rk,
225
+ action.encCiphertext.slice(564, zCashEncCiphertextSize), // https://zips.z.cash/zip-0244
226
+ action.outCiphertext,
227
+ ]);
228
+
229
+ await getTrustedInputRaw(transport, actionData);
230
+ }
231
+
232
+ const orchardData = Buffer.concat([orchard.flags, orchard.valueBalance, orchard.anchor]);
233
+
234
+ await getTrustedInputRaw(transport, orchardData);
235
+ }