utxo-lib 1.1.1 → 1.1.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. package/README.md +16 -19
  2. package/dist/src/bitgo/PsbtUtil.d.ts +0 -5
  3. package/dist/src/bitgo/PsbtUtil.d.ts.map +1 -1
  4. package/dist/src/bitgo/PsbtUtil.js +2 -15
  5. package/dist/src/bitgo/UtxoPsbt.d.ts +0 -9
  6. package/dist/src/bitgo/UtxoPsbt.d.ts.map +1 -1
  7. package/dist/src/bitgo/UtxoPsbt.js +12 -42
  8. package/dist/src/bitgo/index.d.ts +0 -1
  9. package/dist/src/bitgo/index.d.ts.map +1 -1
  10. package/dist/src/bitgo/index.js +2 -3
  11. package/dist/src/bitgo/parseInput.js +2 -2
  12. package/dist/src/bitgo/wallet/Psbt.d.ts +0 -14
  13. package/dist/src/bitgo/wallet/Psbt.d.ts.map +1 -1
  14. package/dist/src/bitgo/wallet/Psbt.js +3 -71
  15. package/dist/src/bitgo/wallet/WalletOutput.d.ts +1 -17
  16. package/dist/src/bitgo/wallet/WalletOutput.d.ts.map +1 -1
  17. package/dist/src/bitgo/wallet/WalletOutput.js +23 -64
  18. package/dist/src/bitgo/wallet/chains.d.ts +1 -1
  19. package/dist/src/bitgo/zcash/ZcashPsbt.d.ts +1 -0
  20. package/dist/src/bitgo/zcash/ZcashPsbt.d.ts.map +1 -1
  21. package/dist/src/bitgo/zcash/ZcashPsbt.js +12 -3
  22. package/dist/src/testutil/keys.d.ts +0 -3
  23. package/dist/src/testutil/keys.d.ts.map +1 -1
  24. package/dist/src/testutil/keys.js +2 -17
  25. package/dist/src/testutil/psbt.d.ts +5 -23
  26. package/dist/src/testutil/psbt.d.ts.map +1 -1
  27. package/dist/src/testutil/psbt.js +13 -16
  28. package/dist/src/testutil/transaction.d.ts +5 -14
  29. package/dist/src/testutil/transaction.d.ts.map +1 -1
  30. package/dist/src/testutil/transaction.js +9 -9
  31. package/package.json +5 -5
  32. package/dist/src/base_crypto.d.ts +0 -14
  33. package/dist/src/base_crypto.d.ts.map +0 -1
  34. package/dist/src/base_crypto.js +0 -215
  35. package/dist/src/bitgo/legacysafe/index.d.ts +0 -15
  36. package/dist/src/bitgo/legacysafe/index.d.ts.map +0 -1
  37. package/dist/src/bitgo/legacysafe/index.js +0 -61
  38. package/dist/src/musig.d.ts +0 -390
  39. package/dist/src/musig.d.ts.map +0 -1
  40. package/dist/src/musig.js +0 -447
@@ -1,390 +0,0 @@
1
- export interface MuSig {
2
- /**
3
- * Gets the X-only public key associated with this context.
4
- *
5
- * @param ctx the key gen context or a signing session key
6
- * @returns the X-only public key associated with this context
7
- */
8
- getXOnlyPubkey(ctx: KeyGenContext | SessionKey): Uint8Array;
9
- /**
10
- * Gets the plain public key associated with this context.
11
- *
12
- * @param ctx the key gen context or a signing session key
13
- * @returns plain public key associated with this context in compressed DER format
14
- */
15
- getPlainPubkey(ctx: KeyGenContext | SessionKey): Uint8Array;
16
- /**
17
- * Sorts compressed DER format public keys lexicographically.
18
- *
19
- * @param publicKeys array of compressed DER encoded public keys to aggregate
20
- * @returns sorted public keys (in a new array)
21
- */
22
- keySort(publicKeys: Uint8Array[]): Uint8Array[];
23
- /**
24
- * Performs MuSig key aggregation on 1+ x-only public keys.
25
- *
26
- * @param publicKeys array of compressed DER encoded public keys to aggregate
27
- * @param tweaks tweaks (0 < tweak < n) to apply to the aggregate key,
28
- * and optionally booleans to indicate x-only tweaking
29
- * @returns an opaque key gen context for use with other MuSig operations
30
- */
31
- keyAgg(publicKeys: Uint8Array[], ...tweaks: Tweak[]): KeyGenContext;
32
- /**
33
- * Apply one or more x-only or ordinary tweaks to an aggregate public key.
34
- *
35
- * @param ctx the key generation context, as returned from `keyAgg`.
36
- * @param tweaks tweaks (0 < tweak < n) to apply to the aggregate key,
37
- * and optionally booleans to indicate x-only tweaking
38
- * @returns an opaque key gen context for use with other MuSig operations
39
- */
40
- addTweaks(ctx: KeyGenContext, ...tweaks: Tweak[]): KeyGenContext;
41
- /**
42
- * Generate a MuSig nonce pair based on the provided values.
43
- *
44
- * The caller must not use the same sessionId for multiple calls to nonceGen
45
- * with other parameters held constant.
46
- *
47
- * The secret nonce (97 bytes) is cached internally, and will be deleted
48
- * from the cache prior to use in a signature. The secret nonce will also be
49
- * deleted if the returned public nonce is deleted.
50
- *
51
- * @param sessionId if no secret key is provided, uniformly 32-bytes of
52
- * random data, otherwise a value guaranteed not to repeat for the secret
53
- * key. If no sessionId is provided a reasonably high quality random one will
54
- * be generated.
55
- * @param secretKey the secret key which will eventually sign with this nonce
56
- * @param publicKey the public key for which this nonce will be signed (required)
57
- * @param xOnlyPublicKey the x-coordinate of the aggregate public key that this
58
- * nonce will be signing a part of
59
- * @param msg the message which will eventually be signed with this nonce
60
- * (any possible Uint8Array length)
61
- * @param extraInput additional input which will contribute to the generated
62
- * nonce (0 <= extraInput.length <= 2^32-1)
63
- * @return the generated public nonce (66 bytes)
64
- */
65
- nonceGen(args: {
66
- sessionId?: Uint8Array;
67
- secretKey?: Uint8Array;
68
- publicKey: Uint8Array;
69
- xOnlyPublicKey?: Uint8Array;
70
- msg?: Uint8Array;
71
- extraInput?: Uint8Array;
72
- }): Uint8Array;
73
- /**
74
- * Add an externally generated nonce to the cache.
75
- *
76
- * NOT RECOMMENDED, but useful in testing at least.
77
- * @param publicNonce 66-byte public nonce (2 points in compressed DER)
78
- * @param secretNonce 97-byte secret nonce (2 32-byte scalars, and the public
79
- * key which will sign for this nonce in compressed DER)
80
- */
81
- addExternalNonce(publicNonce: Uint8Array, secretNonce: Uint8Array): void;
82
- /**
83
- * Combine public nonces from all signers into a single aggregate public nonce.
84
- *
85
- * Per the spec, this function prefers to succeed with an invalid nonce at
86
- * infinity than to fail, to enable a dishonest signer to be detected later.
87
- *
88
- * This can be run by an untrusted node without breaking the security of the
89
- * protocol. An untrusted aggregator can cause the protocol to fail, but not
90
- * forge a signature.
91
- *
92
- * @param nonces n-signers public nonces (66-bytes each)
93
- * @return the aggregate public nonce (66-bytes)
94
- */
95
- nonceAgg(nonces: Uint8Array[]): Uint8Array;
96
- /**
97
- * Creates an opaque signing session for used in partial signing, partial
98
- * verification, or signature aggregation. This may be saved by a
99
- * participant, but may not be provided by an untrusted party.
100
- *
101
- * @param aggNonce this signing session's aggregate nonce
102
- * @param msg the 32-byte message to sign for, most commonly a transaction hash.
103
- * @param publicKeys array of compressed DER encoded public keys to aggregate
104
- * @param tweaks tweaks (0 < tweak < n) to apply to the aggregate key,
105
- * and optionally booleans to indicate x-only tweaking
106
- * @return session key for `partialSign`, `partialVerify` and `signAgg`
107
- */
108
- startSigningSession(aggNonce: Uint8Array, msg: Uint8Array, publicKeys: Uint8Array[], ...tweaks: Tweak[]): SessionKey;
109
- /**
110
- * Creates a MuSig partial signature for the given values.
111
- *
112
- * Verifies the resulting partial signature by default, as recommended in the
113
- * specification.
114
- *
115
- * Note: Calling `partialSign` with the same `publicNonce` more than once
116
- * will not work, as the corresponding secret nonce is deleted. Generate a
117
- * new public nonce and try again.
118
- *
119
- * @param secretKey signer's secret key
120
- * @param publicNonce signer's public nonce
121
- * @param sessionKey signing session key (from startSigningSession)
122
- * @param verify if false, don't verify partial signature
123
- * @return resulting signature
124
- */
125
- partialSign(args: {
126
- secretKey: Uint8Array;
127
- publicNonce: Uint8Array;
128
- sessionKey: SessionKey;
129
- verify?: boolean;
130
- }): Uint8Array;
131
- /**
132
- * Verifies a MuSig partial signature for the given values.
133
- *
134
- * @param sig the 32-byte MuSig partial signature to verify
135
- * @param msg the 32-byte message to sign for, most commonly a transaction hash
136
- * @param publicKey signer's public key
137
- * @param publicNonce signer's public nonce
138
- * @param aggNonce this signing session's aggregate nonce
139
- * @param sessionKey signing session key (from startSigningSession)
140
- * @return true if the partial signature is valid, otherwise false
141
- */
142
- partialVerify(args: {
143
- sig: Uint8Array;
144
- publicKey: Uint8Array;
145
- publicNonce: Uint8Array;
146
- sessionKey: SessionKey;
147
- }): boolean;
148
- /**
149
- * Aggregates MuSig partial signatures. May be run by an untrusted party.
150
- *
151
- * @param sigs array of 32-bytes MuSig partial signatures.
152
- * @param sessionKey signing session key (from startSigningSession)
153
- * @return the resulting aggregate signature.
154
- */
155
- signAgg(sigs: Uint8Array[], sessionKey: SessionKey): Uint8Array;
156
- /**
157
- * Deterministically generate nonces and partially sign for a MuSig key.
158
- * The security of this method depends on its being run after all other
159
- * parties have provided their nonces.
160
- *
161
- * @param secretKey signer's secret key
162
- * @param aggOtherNonce the result of calling `nonceAgg` on all other signing
163
- * parties' nonces
164
- * @param publicKeys array of compressed DER encoded public keys to aggregate
165
- * @param tweaks tweaks (0 < tweak < n) to apply to the aggregate key,
166
- * and optionally booleans to indicate x-only tweaking
167
- * @param msg the 32-byte message to sign for, most commonly a transaction hash.
168
- * @param rand optional additional randomness for nonce generation
169
- * @param verify if false, don't verify partial signature
170
- * @return resulting signature, session key (for signature aggregation), and
171
- * public nonce (for partial verification)
172
- */
173
- deterministicSign(args: {
174
- secretKey: Uint8Array;
175
- aggOtherNonce: Uint8Array;
176
- publicKeys: Uint8Array[];
177
- tweaks?: Tweak[];
178
- msg: Uint8Array;
179
- rand?: Uint8Array;
180
- verify?: boolean;
181
- }): {
182
- sig: Uint8Array;
183
- sessionKey: SessionKey;
184
- publicNonce: Uint8Array;
185
- };
186
- /**
187
- * Deterministically generate nonces. This is identical to deterministicSign,
188
- * except that it aborts after nonce generation and before signing, and
189
- * returns only the public nonce. This security of this method of nonce
190
- * generation depends on its being run after all other parties have provided
191
- * their nonces.
192
- *
193
- * A public nonce generated in this way cannot be directly used for signing
194
- * (no secret nonce is saved), but a matching partial signature can be
195
- * generated by subsequently calling deterministicSign with the same
196
- * arguments as the call to deterministicNonceGen.
197
- *
198
- * This can be useful in a case where a stateless signer only wants to
199
- * provide its partial signature after seeing valid partial signatures from
200
- * other parties.
201
- *
202
- * @param secretKey signer's secret key
203
- * @param aggOtherNonce the result of calling `nonceAgg` on all other signing
204
- * parties' nonces
205
- * @param publicKeys array of compressed DER encoded public keys to aggregate
206
- * @param tweaks tweaks (0 < tweak < n) to apply to the aggregate key,
207
- * and optionally booleans to indicate x-only tweaking
208
- * @param msg the 32-byte message to sign for, most commonly a transaction hash.
209
- * @param rand optional additional randomness for nonce generation
210
- * @param verify if false, don't verify partial signature
211
- * @return public nonce
212
- */
213
- deterministicNonceGen(args: {
214
- secretKey: Uint8Array;
215
- aggOtherNonce: Uint8Array;
216
- publicKeys: Uint8Array[];
217
- tweaks?: Tweak[];
218
- msg: Uint8Array;
219
- rand?: Uint8Array;
220
- }): {
221
- publicNonce: Uint8Array;
222
- };
223
- }
224
- export interface Crypto {
225
- /**
226
- * Adds a tweak to a point.
227
- *
228
- * @param p A point, compressed or uncompressed
229
- * @param t A tweak, 0 < t < n
230
- * @param compressed Whether the resulting point should be compressed.
231
- * @returns The tweaked point, compressed or uncompressed, null if the result
232
- * is the point at infinity.
233
- */
234
- pointAddTweak(p: Uint8Array, t: Uint8Array, compressed: boolean): Uint8Array | null;
235
- /**
236
- * Adds two points.
237
- *
238
- * @param a An addend point, compressed or uncompressed
239
- * @param b An addend point, compressed or uncompressed
240
- * @param compressed Whether the resulting point should be compressed.
241
- * @returns The sum point, compressed or uncompressed, null if the result is
242
- * the point at infinity.
243
- */
244
- pointAdd(a: Uint8Array, b: Uint8Array, compressed: boolean): Uint8Array | null;
245
- /**
246
- * Multiplies a point by a scalar.
247
- * This function may use non-constant time operations, as no secret
248
- * information is processed.
249
- *
250
- * @param p A point multiplicand, compressed or uncompressed
251
- * @param a The multiplier, 0 < a < n
252
- * @param compressed Whether the resulting point should be compressed.
253
- * @returns The product point, compressed or uncompressed, null if the result
254
- * is the point at infinity.
255
- */
256
- pointMultiplyUnsafe(p: Uint8Array, a: Uint8Array, compressed: boolean): Uint8Array | null;
257
- /**
258
- * Multiplies point 1 by a scalar and adds it to point 2.
259
- * This function may use non-constant time operations, as no secret
260
- * information is processed.
261
- *
262
- * @param p1 point multiplicand, compressed or uncompressed
263
- * @param a The multiplier, 0 < a < n
264
- * @param p2 point addend, compressed or uncompressed
265
- * @param compressed Whether the resulting point should be compressed.
266
- * @returns The product/sum point, compressed or uncompressed, null if the
267
- * result is the point at infinity.
268
- */
269
- pointMultiplyAndAddUnsafe(p1: Uint8Array, a: Uint8Array, p2: Uint8Array, compressed: boolean): Uint8Array | null;
270
- /**
271
- * Negates a point, ie. returns the point with the opposite parity.
272
- *
273
- * @param p A point to negate, compressed or uncompressed
274
- * @returns The negated point, with same compression as input.
275
- */
276
- pointNegate(p: Uint8Array): Uint8Array;
277
- /**
278
- * Compresses a point.
279
- *
280
- * @param p A point, compressed or uncompressed
281
- * @param compress [default=true] if false, uncompress the point
282
- * @returns The point, compressed if compress is true, or uncompressed if false.
283
- */
284
- pointCompress(p: Uint8Array, compress?: boolean): Uint8Array;
285
- /**
286
- * Adds one value to another, mod n.
287
- *
288
- * @param a An addend, 0 <= a < n
289
- * @param b An addend, 0 <= b < n
290
- * @returns The sum, 0 <= sum < n
291
- */
292
- scalarAdd(a: Uint8Array, b: Uint8Array): Uint8Array;
293
- /**
294
- * Multiply one value by another, mod n.
295
- *
296
- * @param a The multiplicand, 0 <= a < n
297
- * @param b The multiplier, 0 <= b < n
298
- * @returns The product, 0 <= product < n
299
- */
300
- scalarMultiply(a: Uint8Array, b: Uint8Array): Uint8Array;
301
- /**
302
- * Negates a value, mod n.
303
- *
304
- * @param a The value to negate, 0 <= a < n
305
- * @returns The negated value, 0 <= negated < n
306
- */
307
- scalarNegate(a: Uint8Array): Uint8Array;
308
- /**
309
- * @param a The value to reduce
310
- * @returns a mod n
311
- */
312
- scalarMod(a: Uint8Array): Uint8Array;
313
- /**
314
- * @param s A buffer to check against the curve order
315
- * @returns true if s is a 32-byte array 0 <= s < n
316
- */
317
- isScalar(s: Uint8Array): boolean;
318
- /**
319
- * @param s A buffer to check against the curve order
320
- * @returns true if s is a 32-byte array 0 < s < n
321
- */
322
- isSecret(s: Uint8Array): boolean;
323
- /**
324
- * @param p A buffer to check against the curve equation, compressed or
325
- * uncompressed.
326
- * @returns true if p is a valid point on secp256k1, false otherwise
327
- */
328
- isPoint(p: Uint8Array): boolean;
329
- /**
330
- * @param p A buffer to check against the curve equation.
331
- * @returns true if p is the x coordinate of a valid point on secp256k1,
332
- * false otherwise
333
- */
334
- isXOnlyPoint(p: Uint8Array): boolean;
335
- /**
336
- * @param p an x coordinate
337
- * @returns the xy, uncompressed point if p is on the curve, otherwise null.
338
- */
339
- liftX(p: Uint8Array): Uint8Array | null;
340
- /**
341
- * @param p x-only, compressed or uncompressed
342
- * @returns the x coordinate of p
343
- */
344
- pointX(p: Uint8Array): Uint8Array;
345
- /**
346
- * @param p a point, compressed or uncompressed
347
- * @returns true if p has an even y coordinate, false otherwise
348
- */
349
- hasEvenY(p: Uint8Array): boolean;
350
- /**
351
- * Gets a public key for secret key.
352
- *
353
- * @param s Secret key
354
- * @param compressed Whether the resulting point should be compressed.
355
- * @returns The public key, compressed or uncompressed
356
- */
357
- getPublicKey(s: Uint8Array, compressed: boolean): Uint8Array | null;
358
- /**
359
- * Performs a BIP340-style tagged hash.
360
- *
361
- * @param tag
362
- * @param messages Array of data to hash.
363
- * @return The 32-byte BIP340-style tagged hash.
364
- */
365
- taggedHash(tag: string, ...messages: Uint8Array[]): Uint8Array;
366
- /**
367
- * SHA256 hash.
368
- *
369
- * @param messages Array of data to hash.
370
- * @return The 32-byte SHA256 digest.
371
- */
372
- sha256(...messages: Uint8Array[]): Uint8Array;
373
- }
374
- export declare type Tweak = TypedTweak | Uint8Array;
375
- export interface TypedTweak {
376
- tweak: Uint8Array;
377
- xOnly?: boolean;
378
- }
379
- export interface KeyGenContext {
380
- aggPublicKey: Uint8Array;
381
- gacc: Uint8Array;
382
- tacc: Uint8Array;
383
- }
384
- export interface SessionKey {
385
- publicKey: Uint8Array;
386
- aggNonce: Uint8Array;
387
- msg: Uint8Array;
388
- }
389
- export declare function MuSigFactory(ecc: Crypto): MuSig;
390
- //# sourceMappingURL=musig.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"musig.d.ts","sourceRoot":"","sources":["../../src/musig.ts"],"names":[],"mappings":"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"}