@ledgerhq/hw-app-btc 10.9.4-nightly.0 → 10.10.0-nightly.1

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,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-nightly.1",
4
4
  "description": "Ledger Hardware Wallet Bitcoin Application API",
5
5
  "keywords": [
6
6
  "Ledger",
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
+ }