@bitgo-beta/utxo-core 1.8.1-beta.21 → 1.8.1-beta.210

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/dist/src/bip322/index.d.ts +4 -0
  2. package/dist/src/bip322/index.d.ts.map +1 -0
  3. package/dist/src/bip322/index.js +20 -0
  4. package/dist/src/bip322/toSign.d.ts +19 -0
  5. package/dist/src/bip322/toSign.d.ts.map +1 -0
  6. package/dist/src/bip322/toSign.js +61 -0
  7. package/dist/src/bip322/toSpend.d.ts +22 -0
  8. package/dist/src/bip322/toSpend.d.ts.map +1 -0
  9. package/dist/src/bip322/toSpend.js +76 -0
  10. package/dist/src/bip322/utils.d.ts +6 -0
  11. package/dist/src/bip322/utils.d.ts.map +1 -0
  12. package/dist/src/bip322/utils.js +71 -0
  13. package/dist/src/bip32utils.d.ts +16 -0
  14. package/dist/src/bip32utils.d.ts.map +1 -0
  15. package/dist/src/bip32utils.js +71 -0
  16. package/dist/src/descriptor/fromFixedScriptWallet.d.ts +16 -0
  17. package/dist/src/descriptor/fromFixedScriptWallet.d.ts.map +1 -0
  18. package/dist/src/descriptor/fromFixedScriptWallet.js +88 -0
  19. package/dist/src/descriptor/index.d.ts +2 -0
  20. package/dist/src/descriptor/index.d.ts.map +1 -1
  21. package/dist/src/descriptor/index.js +3 -1
  22. package/dist/src/descriptor/parse/PatternMatcher.d.ts +14 -0
  23. package/dist/src/descriptor/parse/PatternMatcher.d.ts.map +1 -0
  24. package/dist/src/descriptor/parse/PatternMatcher.js +60 -0
  25. package/dist/src/descriptor/psbt/createPsbt.d.ts +4 -0
  26. package/dist/src/descriptor/psbt/createPsbt.d.ts.map +1 -1
  27. package/dist/src/descriptor/psbt/createPsbt.js +34 -9
  28. package/dist/src/index.d.ts +3 -0
  29. package/dist/src/index.d.ts.map +1 -1
  30. package/dist/src/index.js +5 -2
  31. package/dist/src/paygo/attestation.d.ts +11 -0
  32. package/dist/src/paygo/attestation.d.ts.map +1 -0
  33. package/dist/src/paygo/attestation.js +58 -0
  34. package/dist/src/paygo/index.d.ts +3 -0
  35. package/dist/src/paygo/index.d.ts.map +1 -0
  36. package/dist/src/paygo/index.js +19 -0
  37. package/dist/src/paygo/parsePayGoAttestation.d.ts +16 -0
  38. package/dist/src/paygo/parsePayGoAttestation.d.ts.map +1 -0
  39. package/dist/src/paygo/parsePayGoAttestation.js +50 -0
  40. package/dist/src/paygo/psbt/Errors.d.ts +22 -0
  41. package/dist/src/paygo/psbt/Errors.d.ts.map +1 -0
  42. package/dist/src/paygo/psbt/Errors.js +44 -0
  43. package/dist/src/paygo/psbt/index.d.ts +2 -0
  44. package/dist/src/paygo/psbt/index.d.ts.map +1 -0
  45. package/dist/src/paygo/psbt/index.js +18 -0
  46. package/dist/src/paygo/psbt/payGoAddressProof.d.ts +29 -0
  47. package/dist/src/paygo/psbt/payGoAddressProof.d.ts.map +1 -0
  48. package/dist/src/paygo/psbt/payGoAddressProof.js +124 -0
  49. package/dist/src/testutil/descriptor/descriptors.d.ts +4 -1
  50. package/dist/src/testutil/descriptor/descriptors.d.ts.map +1 -1
  51. package/dist/src/testutil/descriptor/descriptors.js +38 -1
  52. package/dist/src/testutil/descriptor/mock.utils.d.ts +3 -1
  53. package/dist/src/testutil/descriptor/mock.utils.d.ts.map +1 -1
  54. package/dist/src/testutil/descriptor/mock.utils.js +2 -1
  55. package/dist/src/testutil/descriptor/psbt.utils.d.ts.map +1 -1
  56. package/dist/src/testutil/descriptor/psbt.utils.js +2 -1
  57. package/dist/src/testutil/generatePayGoAttestationProof.utils.d.ts +12 -0
  58. package/dist/src/testutil/generatePayGoAttestationProof.utils.d.ts.map +1 -0
  59. package/dist/src/testutil/generatePayGoAttestationProof.utils.js +38 -0
  60. package/dist/src/testutil/index.d.ts +2 -0
  61. package/dist/src/testutil/index.d.ts.map +1 -1
  62. package/dist/src/testutil/index.js +3 -1
  63. package/dist/src/testutil/toPlainObject.utils.d.ts.map +1 -1
  64. package/dist/src/testutil/toPlainObject.utils.js +16 -2
  65. package/dist/src/testutil/trimMessagePrefix.d.ts +11 -0
  66. package/dist/src/testutil/trimMessagePrefix.d.ts.map +1 -0
  67. package/dist/src/testutil/trimMessagePrefix.js +60 -0
  68. package/package.json +9 -6
@@ -0,0 +1,4 @@
1
+ export * from './toSpend';
2
+ export * from './toSign';
3
+ export * from './utils';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/bip322/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./toSpend"), exports);
18
+ __exportStar(require("./toSign"), exports);
19
+ __exportStar(require("./utils"), exports);
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmlwMzIyL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw0Q0FBMEI7QUFDMUIsMkNBQXlCO0FBQ3pCLDBDQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vdG9TcGVuZCc7XG5leHBvcnQgKiBmcm9tICcuL3RvU2lnbic7XG5leHBvcnQgKiBmcm9tICcuL3V0aWxzJztcbiJdfQ==
@@ -0,0 +1,19 @@
1
+ import { Psbt, bitgo } from '@bitgo-beta/utxo-lib';
2
+ export type AddressDetails = {
3
+ redeemScript?: Buffer;
4
+ witnessScript?: Buffer;
5
+ scriptPubKey: Buffer;
6
+ };
7
+ /**
8
+ * Construct the toSign PSBT for a BIP322 verification.
9
+ * Source implementation:
10
+ * https://github.com/bitcoin/bips/blob/master/bip-0322.mediawiki#full
11
+ *
12
+ * @param {string} message - The message that is hashed into the `to_spend` transaction.
13
+ * @param {AddressDetails} addressDetails - The details of the address, including redeemScript and/or witnessScript.
14
+ * @param {string} [tag=BIP322_TAG] - The tag to use for hashing, defaults to BIP322_TAG.
15
+ * @returns {Psbt} - The hex representation of the constructed PSBT.
16
+ */
17
+ export declare function buildToSignPsbt(message: string, addressDetails: AddressDetails, tag?: string): Psbt;
18
+ export declare function buildToSignPsbtForChainAndIndex(message: string, rootWalletKeys: bitgo.RootWalletKeys, chain: bitgo.ChainCode, index: number): Psbt;
19
+ //# sourceMappingURL=toSign.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toSign.d.ts","sourceRoot":"","sources":["../../../src/bip322/toSign.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAKnD,MAAM,MAAM,cAAc,GAAG;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,cAAc,EAAE,GAAG,SAAa,GAAG,IAAI,CAmCvG;AAED,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,KAAK,CAAC,cAAc,EACpC,KAAK,EAAE,KAAK,CAAC,SAAS,EACtB,KAAK,EAAE,MAAM,GACZ,IAAI,CAcN"}
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildToSignPsbt = buildToSignPsbt;
4
+ exports.buildToSignPsbtForChainAndIndex = buildToSignPsbtForChainAndIndex;
5
+ const utxo_lib_1 = require("@bitgo-beta/utxo-lib");
6
+ const utils_1 = require("./utils");
7
+ const toSpend_1 = require("./toSpend");
8
+ /**
9
+ * Construct the toSign PSBT for a BIP322 verification.
10
+ * Source implementation:
11
+ * https://github.com/bitcoin/bips/blob/master/bip-0322.mediawiki#full
12
+ *
13
+ * @param {string} message - The message that is hashed into the `to_spend` transaction.
14
+ * @param {AddressDetails} addressDetails - The details of the address, including redeemScript and/or witnessScript.
15
+ * @param {string} [tag=BIP322_TAG] - The tag to use for hashing, defaults to BIP322_TAG.
16
+ * @returns {Psbt} - The hex representation of the constructed PSBT.
17
+ */
18
+ function buildToSignPsbt(message, addressDetails, tag = toSpend_1.BIP322_TAG) {
19
+ const toSpendTx = (0, toSpend_1.buildToSpendTransaction)(addressDetails.scriptPubKey, message, tag);
20
+ // Create PSBT object for constructing the transaction
21
+ const psbt = new utxo_lib_1.Psbt();
22
+ // Set default value for nVersion and nLockTime
23
+ psbt.setVersion(0); // nVersion = 0
24
+ psbt.setLocktime(0); // nLockTime = 0
25
+ // Set the input
26
+ psbt.addInput({
27
+ hash: toSpendTx.getId(), // vin[0].prevout.hash = to_spend.txid
28
+ index: 0, // vin[0].prevout.n = 0
29
+ sequence: 0, // vin[0].nSequence = 0
30
+ nonWitnessUtxo: toSpendTx.toBuffer(), // previous transaction for us to rebuild later to verify
31
+ });
32
+ psbt.updateInput(0, {
33
+ witnessUtxo: { value: BigInt(0), script: addressDetails.scriptPubKey },
34
+ });
35
+ if (addressDetails.redeemScript) {
36
+ psbt.updateInput(0, { redeemScript: addressDetails.redeemScript });
37
+ }
38
+ if (addressDetails.witnessScript) {
39
+ psbt.updateInput(0, { witnessScript: addressDetails.witnessScript });
40
+ }
41
+ // Add the message as a proprietary key value to the PSBT so we can verify it later
42
+ (0, utils_1.addBip322ProofMessage)(psbt, 0, Buffer.from(message));
43
+ // Set the output
44
+ psbt.addOutput({
45
+ value: BigInt(0), // vout[0].nValue = 0
46
+ script: Buffer.from([0x6a]), // vout[0].scriptPubKey = OP_RETURN
47
+ });
48
+ return psbt;
49
+ }
50
+ function buildToSignPsbtForChainAndIndex(message, rootWalletKeys, chain, index) {
51
+ if ((0, utils_1.isTaprootChain)(chain)) {
52
+ throw new Error('BIP322 is not supported for Taproot script types.');
53
+ }
54
+ const output = utxo_lib_1.bitgo.outputScripts.createOutputScript2of3(rootWalletKeys.deriveForChainAndIndex(chain, index).publicKeys, utxo_lib_1.bitgo.scriptTypeForChain(chain));
55
+ return buildToSignPsbt(message, {
56
+ scriptPubKey: output.scriptPubKey,
57
+ redeemScript: output.redeemScript,
58
+ witnessScript: output.witnessScript,
59
+ });
60
+ }
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9TaWduLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JpcDMyMi90b1NpZ24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFxQkEsMENBbUNDO0FBRUQsMEVBbUJDO0FBN0VELG1EQUFtRDtBQUVuRCxtQ0FBZ0U7QUFDaEUsdUNBQWdFO0FBUWhFOzs7Ozs7Ozs7R0FTRztBQUNILFNBQWdCLGVBQWUsQ0FBQyxPQUFlLEVBQUUsY0FBOEIsRUFBRSxHQUFHLEdBQUcsb0JBQVU7SUFDL0YsTUFBTSxTQUFTLEdBQUcsSUFBQSxpQ0FBdUIsRUFBQyxjQUFjLENBQUMsWUFBWSxFQUFFLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztJQUVyRixzREFBc0Q7SUFDdEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxlQUFJLEVBQUUsQ0FBQztJQUN4QiwrQ0FBK0M7SUFDL0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWU7SUFDbkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQjtJQUNyQyxnQkFBZ0I7SUFDaEIsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUNaLElBQUksRUFBRSxTQUFTLENBQUMsS0FBSyxFQUFFLEVBQUUsc0NBQXNDO1FBQy9ELEtBQUssRUFBRSxDQUFDLEVBQUUsdUJBQXVCO1FBQ2pDLFFBQVEsRUFBRSxDQUFDLEVBQUUsdUJBQXVCO1FBQ3BDLGNBQWMsRUFBRSxTQUFTLENBQUMsUUFBUSxFQUFFLEVBQUUseURBQXlEO0tBQ2hHLENBQUMsQ0FBQztJQUNILElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFO1FBQ2xCLFdBQVcsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLGNBQWMsQ0FBQyxZQUFZLEVBQUU7S0FDdkUsQ0FBQyxDQUFDO0lBRUgsSUFBSSxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxZQUFZLEVBQUUsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUNELElBQUksY0FBYyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLEVBQUUsYUFBYSxFQUFFLGNBQWMsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRCxtRkFBbUY7SUFDbkYsSUFBQSw2QkFBcUIsRUFBQyxJQUFzQixFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFFdkUsaUJBQWlCO0lBQ2pCLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDYixLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLHFCQUFxQjtRQUN2QyxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsbUNBQW1DO0tBQ2pFLENBQUMsQ0FBQztJQUNILE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVELFNBQWdCLCtCQUErQixDQUM3QyxPQUFlLEVBQ2YsY0FBb0MsRUFDcEMsS0FBc0IsRUFDdEIsS0FBYTtJQUViLElBQUksSUFBQSxzQkFBYyxFQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxtREFBbUQsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFDRCxNQUFNLE1BQU0sR0FBRyxnQkFBSyxDQUFDLGFBQWEsQ0FBQyxzQkFBc0IsQ0FDdkQsY0FBYyxDQUFDLHNCQUFzQixDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxVQUFVLEVBQzlELGdCQUFLLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQ2hDLENBQUM7SUFFRixPQUFPLGVBQWUsQ0FBQyxPQUFPLEVBQUU7UUFDOUIsWUFBWSxFQUFFLE1BQU0sQ0FBQyxZQUFZO1FBQ2pDLFlBQVksRUFBRSxNQUFNLENBQUMsWUFBWTtRQUNqQyxhQUFhLEVBQUUsTUFBTSxDQUFDLGFBQWE7S0FDcEMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBzYnQsIGJpdGdvIH0gZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuXG5pbXBvcnQgeyBhZGRCaXAzMjJQcm9vZk1lc3NhZ2UsIGlzVGFwcm9vdENoYWluIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBCSVAzMjJfVEFHLCBidWlsZFRvU3BlbmRUcmFuc2FjdGlvbiB9IGZyb20gJy4vdG9TcGVuZCc7XG5cbmV4cG9ydCB0eXBlIEFkZHJlc3NEZXRhaWxzID0ge1xuICByZWRlZW1TY3JpcHQ/OiBCdWZmZXI7XG4gIHdpdG5lc3NTY3JpcHQ/OiBCdWZmZXI7XG4gIHNjcmlwdFB1YktleTogQnVmZmVyO1xufTtcblxuLyoqXG4gKiBDb25zdHJ1Y3QgdGhlIHRvU2lnbiBQU0JUIGZvciBhIEJJUDMyMiB2ZXJpZmljYXRpb24uXG4gKiBTb3VyY2UgaW1wbGVtZW50YXRpb246XG4gKiBodHRwczovL2dpdGh1Yi5jb20vYml0Y29pbi9iaXBzL2Jsb2IvbWFzdGVyL2JpcC0wMzIyLm1lZGlhd2lraSNmdWxsXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgLSBUaGUgbWVzc2FnZSB0aGF0IGlzIGhhc2hlZCBpbnRvIHRoZSBgdG9fc3BlbmRgIHRyYW5zYWN0aW9uLlxuICogQHBhcmFtIHtBZGRyZXNzRGV0YWlsc30gYWRkcmVzc0RldGFpbHMgLSBUaGUgZGV0YWlscyBvZiB0aGUgYWRkcmVzcywgaW5jbHVkaW5nIHJlZGVlbVNjcmlwdCBhbmQvb3Igd2l0bmVzc1NjcmlwdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbdGFnPUJJUDMyMl9UQUddIC0gVGhlIHRhZyB0byB1c2UgZm9yIGhhc2hpbmcsIGRlZmF1bHRzIHRvIEJJUDMyMl9UQUcuXG4gKiBAcmV0dXJucyB7UHNidH0gLSBUaGUgaGV4IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb25zdHJ1Y3RlZCBQU0JULlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRUb1NpZ25Qc2J0KG1lc3NhZ2U6IHN0cmluZywgYWRkcmVzc0RldGFpbHM6IEFkZHJlc3NEZXRhaWxzLCB0YWcgPSBCSVAzMjJfVEFHKTogUHNidCB7XG4gIGNvbnN0IHRvU3BlbmRUeCA9IGJ1aWxkVG9TcGVuZFRyYW5zYWN0aW9uKGFkZHJlc3NEZXRhaWxzLnNjcmlwdFB1YktleSwgbWVzc2FnZSwgdGFnKTtcblxuICAvLyBDcmVhdGUgUFNCVCBvYmplY3QgZm9yIGNvbnN0cnVjdGluZyB0aGUgdHJhbnNhY3Rpb25cbiAgY29uc3QgcHNidCA9IG5ldyBQc2J0KCk7XG4gIC8vIFNldCBkZWZhdWx0IHZhbHVlIGZvciBuVmVyc2lvbiBhbmQgbkxvY2tUaW1lXG4gIHBzYnQuc2V0VmVyc2lvbigwKTsgLy8gblZlcnNpb24gPSAwXG4gIHBzYnQuc2V0TG9ja3RpbWUoMCk7IC8vIG5Mb2NrVGltZSA9IDBcbiAgLy8gU2V0IHRoZSBpbnB1dFxuICBwc2J0LmFkZElucHV0KHtcbiAgICBoYXNoOiB0b1NwZW5kVHguZ2V0SWQoKSwgLy8gdmluWzBdLnByZXZvdXQuaGFzaCA9IHRvX3NwZW5kLnR4aWRcbiAgICBpbmRleDogMCwgLy8gdmluWzBdLnByZXZvdXQubiA9IDBcbiAgICBzZXF1ZW5jZTogMCwgLy8gdmluWzBdLm5TZXF1ZW5jZSA9IDBcbiAgICBub25XaXRuZXNzVXR4bzogdG9TcGVuZFR4LnRvQnVmZmVyKCksIC8vIHByZXZpb3VzIHRyYW5zYWN0aW9uIGZvciB1cyB0byByZWJ1aWxkIGxhdGVyIHRvIHZlcmlmeVxuICB9KTtcbiAgcHNidC51cGRhdGVJbnB1dCgwLCB7XG4gICAgd2l0bmVzc1V0eG86IHsgdmFsdWU6IEJpZ0ludCgwKSwgc2NyaXB0OiBhZGRyZXNzRGV0YWlscy5zY3JpcHRQdWJLZXkgfSxcbiAgfSk7XG5cbiAgaWYgKGFkZHJlc3NEZXRhaWxzLnJlZGVlbVNjcmlwdCkge1xuICAgIHBzYnQudXBkYXRlSW5wdXQoMCwgeyByZWRlZW1TY3JpcHQ6IGFkZHJlc3NEZXRhaWxzLnJlZGVlbVNjcmlwdCB9KTtcbiAgfVxuICBpZiAoYWRkcmVzc0RldGFpbHMud2l0bmVzc1NjcmlwdCkge1xuICAgIHBzYnQudXBkYXRlSW5wdXQoMCwgeyB3aXRuZXNzU2NyaXB0OiBhZGRyZXNzRGV0YWlscy53aXRuZXNzU2NyaXB0IH0pO1xuICB9XG5cbiAgLy8gQWRkIHRoZSBtZXNzYWdlIGFzIGEgcHJvcHJpZXRhcnkga2V5IHZhbHVlIHRvIHRoZSBQU0JUIHNvIHdlIGNhbiB2ZXJpZnkgaXQgbGF0ZXJcbiAgYWRkQmlwMzIyUHJvb2ZNZXNzYWdlKHBzYnQgYXMgYml0Z28uVXR4b1BzYnQsIDAsIEJ1ZmZlci5mcm9tKG1lc3NhZ2UpKTtcblxuICAvLyBTZXQgdGhlIG91dHB1dFxuICBwc2J0LmFkZE91dHB1dCh7XG4gICAgdmFsdWU6IEJpZ0ludCgwKSwgLy8gdm91dFswXS5uVmFsdWUgPSAwXG4gICAgc2NyaXB0OiBCdWZmZXIuZnJvbShbMHg2YV0pLCAvLyB2b3V0WzBdLnNjcmlwdFB1YktleSA9IE9QX1JFVFVSTlxuICB9KTtcbiAgcmV0dXJuIHBzYnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFRvU2lnblBzYnRGb3JDaGFpbkFuZEluZGV4KFxuICBtZXNzYWdlOiBzdHJpbmcsXG4gIHJvb3RXYWxsZXRLZXlzOiBiaXRnby5Sb290V2FsbGV0S2V5cyxcbiAgY2hhaW46IGJpdGdvLkNoYWluQ29kZSxcbiAgaW5kZXg6IG51bWJlclxuKTogUHNidCB7XG4gIGlmIChpc1RhcHJvb3RDaGFpbihjaGFpbikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0JJUDMyMiBpcyBub3Qgc3VwcG9ydGVkIGZvciBUYXByb290IHNjcmlwdCB0eXBlcy4nKTtcbiAgfVxuICBjb25zdCBvdXRwdXQgPSBiaXRnby5vdXRwdXRTY3JpcHRzLmNyZWF0ZU91dHB1dFNjcmlwdDJvZjMoXG4gICAgcm9vdFdhbGxldEtleXMuZGVyaXZlRm9yQ2hhaW5BbmRJbmRleChjaGFpbiwgaW5kZXgpLnB1YmxpY0tleXMsXG4gICAgYml0Z28uc2NyaXB0VHlwZUZvckNoYWluKGNoYWluKVxuICApO1xuXG4gIHJldHVybiBidWlsZFRvU2lnblBzYnQobWVzc2FnZSwge1xuICAgIHNjcmlwdFB1YktleTogb3V0cHV0LnNjcmlwdFB1YktleSxcbiAgICByZWRlZW1TY3JpcHQ6IG91dHB1dC5yZWRlZW1TY3JpcHQsXG4gICAgd2l0bmVzc1NjcmlwdDogb3V0cHV0LndpdG5lc3NTY3JpcHQsXG4gIH0pO1xufVxuIl19
@@ -0,0 +1,22 @@
1
+ import { Transaction, bitgo } from '@bitgo-beta/utxo-lib';
2
+ export declare const BIP322_TAG = "BIP0322-signed-message";
3
+ /**
4
+ * Perform a tagged hash
5
+ *
6
+ * @param {string | Buffer} message - The message to hash as a Buffer or utf-8 string
7
+ * @param {Buffer} [tag=BIP322_TAG] - The tag to use for hashing, defaults to BIP322_TAG.
8
+ * @returns {Buffer} - The resulting hash of the message with the tag.
9
+ */
10
+ export declare function hashMessageWithTag(message: string | Buffer, tag?: string): Buffer;
11
+ /**
12
+ * Build a BIP322 "to spend" transaction
13
+ * Source: https://github.com/bitcoin/bips/blob/master/bip-0322.mediawiki#full
14
+ *
15
+ * @param {Buffer} scriptPubKey - The scriptPubKey to use for the output
16
+ * @param {string | Buffer} message - The message to include in the transaction
17
+ * @param {Buffer} [tag=BIP322_TAG] - The tag to use for hashing, defaults to BIP322_TAG.
18
+ * @returns {Transaction} - The constructed transaction
19
+ */
20
+ export declare function buildToSpendTransaction(scriptPubKey: Buffer, message: string | Buffer, tag?: string): Transaction<bigint>;
21
+ export declare function buildToSpendTransactionFromChainAndIndex(rootWalletKeys: bitgo.RootWalletKeys, chain: bitgo.ChainCode, index: number, message: string | Buffer, tag?: string): Transaction<bigint>;
22
+ //# sourceMappingURL=toSpend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toSpend.d.ts","sourceRoot":"","sources":["../../../src/bip322/toSpend.ts"],"names":[],"mappings":"AACA,OAAO,EAAQ,WAAW,EAAE,KAAK,EAAY,MAAM,sBAAsB,CAAC;AAI1E,eAAO,MAAM,UAAU,2BAA2B,CAAC;AAEnD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAa,GAAG,MAAM,CAYrF;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,GAAG,SAAa,GACf,WAAW,CAAC,MAAM,CAAC,CA4BrB;AAED,wBAAgB,wCAAwC,CACtD,cAAc,EAAE,KAAK,CAAC,cAAc,EACpC,KAAK,EAAE,KAAK,CAAC,SAAS,EACtB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,GAAG,SAAa,GACf,WAAW,CAAC,MAAM,CAAC,CAWrB"}
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BIP322_TAG = void 0;
4
+ exports.hashMessageWithTag = hashMessageWithTag;
5
+ exports.buildToSpendTransaction = buildToSpendTransaction;
6
+ exports.buildToSpendTransactionFromChainAndIndex = buildToSpendTransactionFromChainAndIndex;
7
+ const fast_sha256_1 = require("fast-sha256");
8
+ const utxo_lib_1 = require("@bitgo-beta/utxo-lib");
9
+ const utils_1 = require("./utils");
10
+ exports.BIP322_TAG = 'BIP0322-signed-message';
11
+ /**
12
+ * Perform a tagged hash
13
+ *
14
+ * @param {string | Buffer} message - The message to hash as a Buffer or utf-8 string
15
+ * @param {Buffer} [tag=BIP322_TAG] - The tag to use for hashing, defaults to BIP322_TAG.
16
+ * @returns {Buffer} - The resulting hash of the message with the tag.
17
+ */
18
+ function hashMessageWithTag(message, tag = exports.BIP322_TAG) {
19
+ // Compute the message hash - SHA256(SHA256(tag) || SHA256(tag) || message)
20
+ // Reference: https://github.com/bitcoin/bips/blob/master/bip-0322.mediawiki#full
21
+ const tagHasher = new fast_sha256_1.Hash();
22
+ tagHasher.update(Buffer.from(exports.BIP322_TAG));
23
+ const tagHash = tagHasher.digest();
24
+ const messageHasher = new fast_sha256_1.Hash();
25
+ messageHasher.update(tagHash);
26
+ messageHasher.update(tagHash);
27
+ messageHasher.update(Buffer.from(message));
28
+ const messageHash = messageHasher.digest();
29
+ return Buffer.from(messageHash);
30
+ }
31
+ /**
32
+ * Build a BIP322 "to spend" transaction
33
+ * Source: https://github.com/bitcoin/bips/blob/master/bip-0322.mediawiki#full
34
+ *
35
+ * @param {Buffer} scriptPubKey - The scriptPubKey to use for the output
36
+ * @param {string | Buffer} message - The message to include in the transaction
37
+ * @param {Buffer} [tag=BIP322_TAG] - The tag to use for hashing, defaults to BIP322_TAG.
38
+ * @returns {Transaction} - The constructed transaction
39
+ */
40
+ function buildToSpendTransaction(scriptPubKey, message, tag = exports.BIP322_TAG) {
41
+ // Create PSBT object for constructing the transaction
42
+ const psbt = new utxo_lib_1.Psbt();
43
+ // Set default value for nVersion and nLockTime
44
+ psbt.setVersion(0); // nVersion = 0
45
+ psbt.setLocktime(0); // nLockTime = 0
46
+ // Compute the message hash - SHA256(SHA256(tag) || SHA256(tag) || message)
47
+ const messageHash = hashMessageWithTag(message, tag);
48
+ // Construct the scriptSig - OP_0 PUSH32[ message_hash ]
49
+ const scriptSigPartOne = new Uint8Array([0x00, 0x20]); // OP_0 PUSH32
50
+ const scriptSig = new Uint8Array(scriptSigPartOne.length + messageHash.length);
51
+ scriptSig.set(scriptSigPartOne);
52
+ scriptSig.set(messageHash, scriptSigPartOne.length);
53
+ // Set the input
54
+ psbt.addInput({
55
+ hash: '0'.repeat(64), // vin[0].prevout.hash = 0000...000
56
+ index: 0xffffffff, // vin[0].prevout.n = 0xFFFFFFFF
57
+ sequence: 0, // vin[0].nSequence = 0
58
+ finalScriptSig: Buffer.from(scriptSig), // vin[0].scriptSig = OP_0 PUSH32[ message_hash ]
59
+ witnessScript: Buffer.from([]), // vin[0].scriptWitness = []
60
+ });
61
+ // Set the output
62
+ psbt.addOutput({
63
+ value: BigInt(0), // vout[0].nValue = 0
64
+ script: scriptPubKey, // vout[0].scriptPubKey = message_challenge
65
+ });
66
+ // Return transaction
67
+ return psbt.extractTransaction();
68
+ }
69
+ function buildToSpendTransactionFromChainAndIndex(rootWalletKeys, chain, index, message, tag = exports.BIP322_TAG) {
70
+ if ((0, utils_1.isTaprootChain)(chain)) {
71
+ throw new Error('BIP322 is not supported for Taproot script types.');
72
+ }
73
+ const outputScript = utxo_lib_1.bitgo.outputScripts.createOutputScript2of3(rootWalletKeys.deriveForChainAndIndex(chain, index).publicKeys, utxo_lib_1.bitgo.scriptTypeForChain(chain), utxo_lib_1.networks.bitcoin);
74
+ return buildToSpendTransaction(outputScript.scriptPubKey, message, tag);
75
+ }
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9TcGVuZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iaXAzMjIvdG9TcGVuZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFjQSxnREFZQztBQVdELDBEQWdDQztBQUVELDRGQWlCQztBQXhGRCw2Q0FBbUM7QUFDbkMsbURBQTBFO0FBRTFFLG1DQUF5QztBQUU1QixRQUFBLFVBQVUsR0FBRyx3QkFBd0IsQ0FBQztBQUVuRDs7Ozs7O0dBTUc7QUFDSCxTQUFnQixrQkFBa0IsQ0FBQyxPQUF3QixFQUFFLEdBQUcsR0FBRyxrQkFBVTtJQUMzRSwyRUFBMkU7SUFDM0UsaUZBQWlGO0lBQ2pGLE1BQU0sU0FBUyxHQUFHLElBQUksa0JBQUksRUFBRSxDQUFDO0lBQzdCLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxrQkFBVSxDQUFDLENBQUMsQ0FBQztJQUMxQyxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDbkMsTUFBTSxhQUFhLEdBQUcsSUFBSSxrQkFBSSxFQUFFLENBQUM7SUFDakMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM5QixhQUFhLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzlCLGFBQWEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQzNDLE1BQU0sV0FBVyxHQUFHLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUMzQyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDbEMsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBZ0IsdUJBQXVCLENBQ3JDLFlBQW9CLEVBQ3BCLE9BQXdCLEVBQ3hCLEdBQUcsR0FBRyxrQkFBVTtJQUVoQixzREFBc0Q7SUFDdEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxlQUFJLEVBQUUsQ0FBQztJQUN4QiwrQ0FBK0M7SUFDL0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWU7SUFDbkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQjtJQUNyQywyRUFBMkU7SUFDM0UsTUFBTSxXQUFXLEdBQUcsa0JBQWtCLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3JELHdEQUF3RDtJQUN4RCxNQUFNLGdCQUFnQixHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjO0lBQ3JFLE1BQU0sU0FBUyxHQUFHLElBQUksVUFBVSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDL0UsU0FBUyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ2hDLFNBQVMsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3BELGdCQUFnQjtJQUNoQixJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ1osSUFBSSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsbUNBQW1DO1FBQ3pELEtBQUssRUFBRSxVQUFVLEVBQUUsZ0NBQWdDO1FBQ25ELFFBQVEsRUFBRSxDQUFDLEVBQUUsdUJBQXVCO1FBQ3BDLGNBQWMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLGlEQUFpRDtRQUN6RixhQUFhLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSw0QkFBNEI7S0FDN0QsQ0FBQyxDQUFDO0lBQ0gsaUJBQWlCO0lBQ2pCLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDYixLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLHFCQUFxQjtRQUN2QyxNQUFNLEVBQUUsWUFBWSxFQUFFLDJDQUEyQztLQUNsRSxDQUFDLENBQUM7SUFDSCxxQkFBcUI7SUFDckIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztBQUNuQyxDQUFDO0FBRUQsU0FBZ0Isd0NBQXdDLENBQ3RELGNBQW9DLEVBQ3BDLEtBQXNCLEVBQ3RCLEtBQWEsRUFDYixPQUF3QixFQUN4QixHQUFHLEdBQUcsa0JBQVU7SUFFaEIsSUFBSSxJQUFBLHNCQUFjLEVBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLG1EQUFtRCxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVELE1BQU0sWUFBWSxHQUFHLGdCQUFLLENBQUMsYUFBYSxDQUFDLHNCQUFzQixDQUM3RCxjQUFjLENBQUMsc0JBQXNCLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLFVBQVUsRUFDOUQsZ0JBQUssQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsRUFDL0IsbUJBQVEsQ0FBQyxPQUFPLENBQ2pCLENBQUM7SUFDRixPQUFPLHVCQUF1QixDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIYXNoIH0gZnJvbSAnZmFzdC1zaGEyNTYnO1xuaW1wb3J0IHsgUHNidCwgVHJhbnNhY3Rpb24sIGJpdGdvLCBuZXR3b3JrcyB9IGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcblxuaW1wb3J0IHsgaXNUYXByb290Q2hhaW4gfSBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IEJJUDMyMl9UQUcgPSAnQklQMDMyMi1zaWduZWQtbWVzc2FnZSc7XG5cbi8qKlxuICogUGVyZm9ybSBhIHRhZ2dlZCBoYXNoXG4gKlxuICogQHBhcmFtIHtzdHJpbmcgfCBCdWZmZXJ9IG1lc3NhZ2UgLSBUaGUgbWVzc2FnZSB0byBoYXNoIGFzIGEgQnVmZmVyIG9yIHV0Zi04IHN0cmluZ1xuICogQHBhcmFtIHtCdWZmZXJ9IFt0YWc9QklQMzIyX1RBR10gLSBUaGUgdGFnIHRvIHVzZSBmb3IgaGFzaGluZywgZGVmYXVsdHMgdG8gQklQMzIyX1RBRy5cbiAqIEByZXR1cm5zIHtCdWZmZXJ9IC0gVGhlIHJlc3VsdGluZyBoYXNoIG9mIHRoZSBtZXNzYWdlIHdpdGggdGhlIHRhZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc2hNZXNzYWdlV2l0aFRhZyhtZXNzYWdlOiBzdHJpbmcgfCBCdWZmZXIsIHRhZyA9IEJJUDMyMl9UQUcpOiBCdWZmZXIge1xuICAvLyBDb21wdXRlIHRoZSBtZXNzYWdlIGhhc2ggLSBTSEEyNTYoU0hBMjU2KHRhZykgfHwgU0hBMjU2KHRhZykgfHwgbWVzc2FnZSlcbiAgLy8gUmVmZXJlbmNlOiBodHRwczovL2dpdGh1Yi5jb20vYml0Y29pbi9iaXBzL2Jsb2IvbWFzdGVyL2JpcC0wMzIyLm1lZGlhd2lraSNmdWxsXG4gIGNvbnN0IHRhZ0hhc2hlciA9IG5ldyBIYXNoKCk7XG4gIHRhZ0hhc2hlci51cGRhdGUoQnVmZmVyLmZyb20oQklQMzIyX1RBRykpO1xuICBjb25zdCB0YWdIYXNoID0gdGFnSGFzaGVyLmRpZ2VzdCgpO1xuICBjb25zdCBtZXNzYWdlSGFzaGVyID0gbmV3IEhhc2goKTtcbiAgbWVzc2FnZUhhc2hlci51cGRhdGUodGFnSGFzaCk7XG4gIG1lc3NhZ2VIYXNoZXIudXBkYXRlKHRhZ0hhc2gpO1xuICBtZXNzYWdlSGFzaGVyLnVwZGF0ZShCdWZmZXIuZnJvbShtZXNzYWdlKSk7XG4gIGNvbnN0IG1lc3NhZ2VIYXNoID0gbWVzc2FnZUhhc2hlci5kaWdlc3QoKTtcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKG1lc3NhZ2VIYXNoKTtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIEJJUDMyMiBcInRvIHNwZW5kXCIgdHJhbnNhY3Rpb25cbiAqIFNvdXJjZTogaHR0cHM6Ly9naXRodWIuY29tL2JpdGNvaW4vYmlwcy9ibG9iL21hc3Rlci9iaXAtMDMyMi5tZWRpYXdpa2kjZnVsbFxuICpcbiAqIEBwYXJhbSB7QnVmZmVyfSBzY3JpcHRQdWJLZXkgLSBUaGUgc2NyaXB0UHViS2V5IHRvIHVzZSBmb3IgdGhlIG91dHB1dFxuICogQHBhcmFtIHtzdHJpbmcgfCBCdWZmZXJ9IG1lc3NhZ2UgLSBUaGUgbWVzc2FnZSB0byBpbmNsdWRlIGluIHRoZSB0cmFuc2FjdGlvblxuICogQHBhcmFtIHtCdWZmZXJ9IFt0YWc9QklQMzIyX1RBR10gLSBUaGUgdGFnIHRvIHVzZSBmb3IgaGFzaGluZywgZGVmYXVsdHMgdG8gQklQMzIyX1RBRy5cbiAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbn0gLSBUaGUgY29uc3RydWN0ZWQgdHJhbnNhY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkVG9TcGVuZFRyYW5zYWN0aW9uKFxuICBzY3JpcHRQdWJLZXk6IEJ1ZmZlcixcbiAgbWVzc2FnZTogc3RyaW5nIHwgQnVmZmVyLFxuICB0YWcgPSBCSVAzMjJfVEFHXG4pOiBUcmFuc2FjdGlvbjxiaWdpbnQ+IHtcbiAgLy8gQ3JlYXRlIFBTQlQgb2JqZWN0IGZvciBjb25zdHJ1Y3RpbmcgdGhlIHRyYW5zYWN0aW9uXG4gIGNvbnN0IHBzYnQgPSBuZXcgUHNidCgpO1xuICAvLyBTZXQgZGVmYXVsdCB2YWx1ZSBmb3IgblZlcnNpb24gYW5kIG5Mb2NrVGltZVxuICBwc2J0LnNldFZlcnNpb24oMCk7IC8vIG5WZXJzaW9uID0gMFxuICBwc2J0LnNldExvY2t0aW1lKDApOyAvLyBuTG9ja1RpbWUgPSAwXG4gIC8vIENvbXB1dGUgdGhlIG1lc3NhZ2UgaGFzaCAtIFNIQTI1NihTSEEyNTYodGFnKSB8fCBTSEEyNTYodGFnKSB8fCBtZXNzYWdlKVxuICBjb25zdCBtZXNzYWdlSGFzaCA9IGhhc2hNZXNzYWdlV2l0aFRhZyhtZXNzYWdlLCB0YWcpO1xuICAvLyBDb25zdHJ1Y3QgdGhlIHNjcmlwdFNpZyAtIE9QXzAgUFVTSDMyWyBtZXNzYWdlX2hhc2ggXVxuICBjb25zdCBzY3JpcHRTaWdQYXJ0T25lID0gbmV3IFVpbnQ4QXJyYXkoWzB4MDAsIDB4MjBdKTsgLy8gT1BfMCBQVVNIMzJcbiAgY29uc3Qgc2NyaXB0U2lnID0gbmV3IFVpbnQ4QXJyYXkoc2NyaXB0U2lnUGFydE9uZS5sZW5ndGggKyBtZXNzYWdlSGFzaC5sZW5ndGgpO1xuICBzY3JpcHRTaWcuc2V0KHNjcmlwdFNpZ1BhcnRPbmUpO1xuICBzY3JpcHRTaWcuc2V0KG1lc3NhZ2VIYXNoLCBzY3JpcHRTaWdQYXJ0T25lLmxlbmd0aCk7XG4gIC8vIFNldCB0aGUgaW5wdXRcbiAgcHNidC5hZGRJbnB1dCh7XG4gICAgaGFzaDogJzAnLnJlcGVhdCg2NCksIC8vIHZpblswXS5wcmV2b3V0Lmhhc2ggPSAwMDAwLi4uMDAwXG4gICAgaW5kZXg6IDB4ZmZmZmZmZmYsIC8vIHZpblswXS5wcmV2b3V0Lm4gPSAweEZGRkZGRkZGXG4gICAgc2VxdWVuY2U6IDAsIC8vIHZpblswXS5uU2VxdWVuY2UgPSAwXG4gICAgZmluYWxTY3JpcHRTaWc6IEJ1ZmZlci5mcm9tKHNjcmlwdFNpZyksIC8vIHZpblswXS5zY3JpcHRTaWcgPSBPUF8wIFBVU0gzMlsgbWVzc2FnZV9oYXNoIF1cbiAgICB3aXRuZXNzU2NyaXB0OiBCdWZmZXIuZnJvbShbXSksIC8vIHZpblswXS5zY3JpcHRXaXRuZXNzID0gW11cbiAgfSk7XG4gIC8vIFNldCB0aGUgb3V0cHV0XG4gIHBzYnQuYWRkT3V0cHV0KHtcbiAgICB2YWx1ZTogQmlnSW50KDApLCAvLyB2b3V0WzBdLm5WYWx1ZSA9IDBcbiAgICBzY3JpcHQ6IHNjcmlwdFB1YktleSwgLy8gdm91dFswXS5zY3JpcHRQdWJLZXkgPSBtZXNzYWdlX2NoYWxsZW5nZVxuICB9KTtcbiAgLy8gUmV0dXJuIHRyYW5zYWN0aW9uXG4gIHJldHVybiBwc2J0LmV4dHJhY3RUcmFuc2FjdGlvbigpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRUb1NwZW5kVHJhbnNhY3Rpb25Gcm9tQ2hhaW5BbmRJbmRleChcbiAgcm9vdFdhbGxldEtleXM6IGJpdGdvLlJvb3RXYWxsZXRLZXlzLFxuICBjaGFpbjogYml0Z28uQ2hhaW5Db2RlLFxuICBpbmRleDogbnVtYmVyLFxuICBtZXNzYWdlOiBzdHJpbmcgfCBCdWZmZXIsXG4gIHRhZyA9IEJJUDMyMl9UQUdcbik6IFRyYW5zYWN0aW9uPGJpZ2ludD4ge1xuICBpZiAoaXNUYXByb290Q2hhaW4oY2hhaW4pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdCSVAzMjIgaXMgbm90IHN1cHBvcnRlZCBmb3IgVGFwcm9vdCBzY3JpcHQgdHlwZXMuJyk7XG4gIH1cblxuICBjb25zdCBvdXRwdXRTY3JpcHQgPSBiaXRnby5vdXRwdXRTY3JpcHRzLmNyZWF0ZU91dHB1dFNjcmlwdDJvZjMoXG4gICAgcm9vdFdhbGxldEtleXMuZGVyaXZlRm9yQ2hhaW5BbmRJbmRleChjaGFpbiwgaW5kZXgpLnB1YmxpY0tleXMsXG4gICAgYml0Z28uc2NyaXB0VHlwZUZvckNoYWluKGNoYWluKSxcbiAgICBuZXR3b3Jrcy5iaXRjb2luXG4gICk7XG4gIHJldHVybiBidWlsZFRvU3BlbmRUcmFuc2FjdGlvbihvdXRwdXRTY3JpcHQuc2NyaXB0UHViS2V5LCBtZXNzYWdlLCB0YWcpO1xufVxuIl19
@@ -0,0 +1,6 @@
1
+ import * as utxolib from '@bitgo-beta/utxo-lib';
2
+ export declare function addBip322ProofMessage(psbt: utxolib.bitgo.UtxoPsbt, inputIndex: number, message: Buffer): void;
3
+ export declare function getBip322ProofInputIndex(psbt: utxolib.Psbt): number | undefined;
4
+ export declare function psbtIsBip322Proof(psbt: utxolib.Psbt): boolean;
5
+ export declare function isTaprootChain(chain: utxolib.bitgo.ChainCode): boolean;
6
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/bip322/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAEhD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAS7G;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,GAAG,MAAM,GAAG,SAAS,CAY/E;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,GAAG,OAAO,CAE7D;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,OAAO,CAGtE"}
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.addBip322ProofMessage = addBip322ProofMessage;
37
+ exports.getBip322ProofInputIndex = getBip322ProofInputIndex;
38
+ exports.psbtIsBip322Proof = psbtIsBip322Proof;
39
+ exports.isTaprootChain = isTaprootChain;
40
+ const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
41
+ function addBip322ProofMessage(psbt, inputIndex, message) {
42
+ utxolib.bitgo.addProprietaryKeyValuesFromUnknownKeyValues(psbt, 'input', inputIndex, {
43
+ key: {
44
+ identifier: utxolib.bitgo.PSBT_PROPRIETARY_IDENTIFIER,
45
+ subtype: utxolib.bitgo.ProprietaryKeySubtype.BIP322_MESSAGE,
46
+ keydata: Buffer.alloc(0),
47
+ },
48
+ value: message,
49
+ });
50
+ }
51
+ function getBip322ProofInputIndex(psbt) {
52
+ const res = psbt.data.inputs.flatMap((input, inputIndex) => {
53
+ const proprietaryKeyVals = utxolib.bitgo.getPsbtInputProprietaryKeyVals(input, {
54
+ identifier: utxolib.bitgo.PSBT_PROPRIETARY_IDENTIFIER,
55
+ subtype: utxolib.bitgo.ProprietaryKeySubtype.BIP322_MESSAGE,
56
+ });
57
+ if (proprietaryKeyVals.length > 1) {
58
+ throw new Error(`Multiple BIP322 messages found at input index ${inputIndex}`);
59
+ }
60
+ return proprietaryKeyVals.length === 0 ? [] : [inputIndex];
61
+ });
62
+ return res.length === 0 ? undefined : res[0];
63
+ }
64
+ function psbtIsBip322Proof(psbt) {
65
+ return getBip322ProofInputIndex(psbt) !== undefined;
66
+ }
67
+ function isTaprootChain(chain) {
68
+ const taprootChains = [...utxolib.bitgo.chainCodesP2tr, ...utxolib.bitgo.chainCodesP2trMusig2];
69
+ return taprootChains.some((tc) => tc === chain);
70
+ }
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmlwMzIyL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsc0RBU0M7QUFFRCw0REFZQztBQUVELDhDQUVDO0FBRUQsd0NBR0M7QUFsQ0QsOERBQWdEO0FBRWhELFNBQWdCLHFCQUFxQixDQUFDLElBQTRCLEVBQUUsVUFBa0IsRUFBRSxPQUFlO0lBQ3JHLE9BQU8sQ0FBQyxLQUFLLENBQUMsMkNBQTJDLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUU7UUFDbkYsR0FBRyxFQUFFO1lBQ0gsVUFBVSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsMkJBQTJCO1lBQ3JELE9BQU8sRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLGNBQWM7WUFDM0QsT0FBTyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1NBQ3pCO1FBQ0QsS0FBSyxFQUFFLE9BQU87S0FDZixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBZ0Isd0JBQXdCLENBQUMsSUFBa0I7SUFDekQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxFQUFFO1FBQ3pELE1BQU0sa0JBQWtCLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxLQUFLLEVBQUU7WUFDN0UsVUFBVSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsMkJBQTJCO1lBQ3JELE9BQU8sRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLGNBQWM7U0FDNUQsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDbEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxpREFBaUQsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUNqRixDQUFDO1FBQ0QsT0FBTyxrQkFBa0IsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDN0QsQ0FBQyxDQUFDLENBQUM7SUFDSCxPQUFPLEdBQUcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQyxDQUFDO0FBRUQsU0FBZ0IsaUJBQWlCLENBQUMsSUFBa0I7SUFDbEQsT0FBTyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxTQUFTLENBQUM7QUFDdEQsQ0FBQztBQUVELFNBQWdCLGNBQWMsQ0FBQyxLQUE4QjtJQUMzRCxNQUFNLGFBQWEsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDL0YsT0FBTyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssS0FBSyxDQUFDLENBQUM7QUFDbEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuXG5leHBvcnQgZnVuY3Rpb24gYWRkQmlwMzIyUHJvb2ZNZXNzYWdlKHBzYnQ6IHV0eG9saWIuYml0Z28uVXR4b1BzYnQsIGlucHV0SW5kZXg6IG51bWJlciwgbWVzc2FnZTogQnVmZmVyKTogdm9pZCB7XG4gIHV0eG9saWIuYml0Z28uYWRkUHJvcHJpZXRhcnlLZXlWYWx1ZXNGcm9tVW5rbm93bktleVZhbHVlcyhwc2J0LCAnaW5wdXQnLCBpbnB1dEluZGV4LCB7XG4gICAga2V5OiB7XG4gICAgICBpZGVudGlmaWVyOiB1dHhvbGliLmJpdGdvLlBTQlRfUFJPUFJJRVRBUllfSURFTlRJRklFUixcbiAgICAgIHN1YnR5cGU6IHV0eG9saWIuYml0Z28uUHJvcHJpZXRhcnlLZXlTdWJ0eXBlLkJJUDMyMl9NRVNTQUdFLFxuICAgICAga2V5ZGF0YTogQnVmZmVyLmFsbG9jKDApLFxuICAgIH0sXG4gICAgdmFsdWU6IG1lc3NhZ2UsXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QmlwMzIyUHJvb2ZJbnB1dEluZGV4KHBzYnQ6IHV0eG9saWIuUHNidCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHJlcyA9IHBzYnQuZGF0YS5pbnB1dHMuZmxhdE1hcCgoaW5wdXQsIGlucHV0SW5kZXgpID0+IHtcbiAgICBjb25zdCBwcm9wcmlldGFyeUtleVZhbHMgPSB1dHhvbGliLmJpdGdvLmdldFBzYnRJbnB1dFByb3ByaWV0YXJ5S2V5VmFscyhpbnB1dCwge1xuICAgICAgaWRlbnRpZmllcjogdXR4b2xpYi5iaXRnby5QU0JUX1BST1BSSUVUQVJZX0lERU5USUZJRVIsXG4gICAgICBzdWJ0eXBlOiB1dHhvbGliLmJpdGdvLlByb3ByaWV0YXJ5S2V5U3VidHlwZS5CSVAzMjJfTUVTU0FHRSxcbiAgICB9KTtcbiAgICBpZiAocHJvcHJpZXRhcnlLZXlWYWxzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTXVsdGlwbGUgQklQMzIyIG1lc3NhZ2VzIGZvdW5kIGF0IGlucHV0IGluZGV4ICR7aW5wdXRJbmRleH1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHByb3ByaWV0YXJ5S2V5VmFscy5sZW5ndGggPT09IDAgPyBbXSA6IFtpbnB1dEluZGV4XTtcbiAgfSk7XG4gIHJldHVybiByZXMubGVuZ3RoID09PSAwID8gdW5kZWZpbmVkIDogcmVzWzBdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHNidElzQmlwMzIyUHJvb2YocHNidDogdXR4b2xpYi5Qc2J0KTogYm9vbGVhbiB7XG4gIHJldHVybiBnZXRCaXAzMjJQcm9vZklucHV0SW5kZXgocHNidCkgIT09IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVGFwcm9vdENoYWluKGNoYWluOiB1dHhvbGliLmJpdGdvLkNoYWluQ29kZSk6IGJvb2xlYW4ge1xuICBjb25zdCB0YXByb290Q2hhaW5zID0gWy4uLnV0eG9saWIuYml0Z28uY2hhaW5Db2Rlc1AydHIsIC4uLnV0eG9saWIuYml0Z28uY2hhaW5Db2Rlc1AydHJNdXNpZzJdO1xuICByZXR1cm4gdGFwcm9vdENoYWlucy5zb21lKCh0YykgPT4gdGMgPT09IGNoYWluKTtcbn1cbiJdfQ==
@@ -0,0 +1,16 @@
1
+ import { BIP32Interface } from '@bitgo-beta/utxo-lib';
2
+ /**
3
+ * bip32-aware wrapper around bitcoin-message package
4
+ * @see {bitcoinMessage.sign}
5
+ */
6
+ export declare function signMessage(message: string | Buffer, privateKey: BIP32Interface | Buffer, network: {
7
+ messagePrefix: string;
8
+ }): Buffer;
9
+ /**
10
+ * bip32-aware wrapper around bitcoin-message package
11
+ * @see {bitcoinMessage.verify}
12
+ */
13
+ export declare function verifyMessage(message: string | Buffer, publicKey: BIP32Interface | Buffer, signature: Buffer, network: {
14
+ messagePrefix: string;
15
+ }): boolean;
16
+ //# sourceMappingURL=bip32utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bip32utils.d.ts","sourceRoot":"","sources":["../../src/bip32utils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD;;;GAGG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,UAAU,EAAE,cAAc,GAAG,MAAM,EACnC,OAAO,EAAE;IAAE,aAAa,EAAE,MAAM,CAAA;CAAE,GACjC,MAAM,CAYR;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,SAAS,EAAE,cAAc,GAAG,MAAM,EAClC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE;IAAE,aAAa,EAAE,MAAM,CAAA;CAAE,GACjC,OAAO,CAcT"}
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.signMessage = signMessage;
37
+ exports.verifyMessage = verifyMessage;
38
+ const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
39
+ const bitcoinMessage = __importStar(require("bitcoinjs-message"));
40
+ /**
41
+ * bip32-aware wrapper around bitcoin-message package
42
+ * @see {bitcoinMessage.sign}
43
+ */
44
+ function signMessage(message, privateKey, network) {
45
+ if (!Buffer.isBuffer(privateKey)) {
46
+ privateKey = privateKey.privateKey;
47
+ if (!privateKey) {
48
+ throw new Error(`must provide privateKey`);
49
+ }
50
+ }
51
+ if (network === null || typeof network !== 'object' || typeof network.messagePrefix !== 'string') {
52
+ throw new Error(`invalid argument 'network'`);
53
+ }
54
+ const compressed = true;
55
+ return bitcoinMessage.sign(message, privateKey, compressed, network.messagePrefix);
56
+ }
57
+ /**
58
+ * bip32-aware wrapper around bitcoin-message package
59
+ * @see {bitcoinMessage.verify}
60
+ */
61
+ function verifyMessage(message, publicKey, signature, network) {
62
+ if (!Buffer.isBuffer(publicKey)) {
63
+ publicKey = publicKey.publicKey;
64
+ }
65
+ if (network === null || typeof network !== 'object' || typeof network.messagePrefix !== 'string') {
66
+ throw new Error(`invalid argument 'network'`);
67
+ }
68
+ const address = utxolib.address.toBase58Check(utxolib.crypto.hash160(publicKey), utxolib.networks.bitcoin.pubKeyHash, utxolib.networks.bitcoin);
69
+ return bitcoinMessage.verify(message, address, signature, network.messagePrefix);
70
+ }
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlwMzJ1dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iaXAzMnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBT0Esa0NBZ0JDO0FBTUQsc0NBbUJDO0FBaERELDhEQUFnRDtBQUNoRCxrRUFBb0Q7QUFFcEQ7OztHQUdHO0FBQ0gsU0FBZ0IsV0FBVyxDQUN6QixPQUF3QixFQUN4QixVQUFtQyxFQUNuQyxPQUFrQztJQUVsQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1FBQ2pDLFVBQVUsR0FBRyxVQUFVLENBQUMsVUFBb0IsQ0FBQztRQUM3QyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQzdDLENBQUM7SUFDSCxDQUFDO0lBQ0QsSUFBSSxPQUFPLEtBQUssSUFBSSxJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVEsSUFBSSxPQUFPLE9BQU8sQ0FBQyxhQUFhLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDakcsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFDRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUM7SUFDeEIsT0FBTyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUNyRixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBZ0IsYUFBYSxDQUMzQixPQUF3QixFQUN4QixTQUFrQyxFQUNsQyxTQUFpQixFQUNqQixPQUFrQztJQUVsQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1FBQ2hDLFNBQVMsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDO0lBQ2xDLENBQUM7SUFDRCxJQUFJLE9BQU8sS0FBSyxJQUFJLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxJQUFJLE9BQU8sT0FBTyxDQUFDLGFBQWEsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUNqRyxNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUMzQyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFDakMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUNuQyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FDekIsQ0FBQztJQUNGLE9BQU8sY0FBYyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDbkYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuaW1wb3J0ICogYXMgYml0Y29pbk1lc3NhZ2UgZnJvbSAnYml0Y29pbmpzLW1lc3NhZ2UnO1xuaW1wb3J0IHsgQklQMzJJbnRlcmZhY2UgfSBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG4vKipcbiAqIGJpcDMyLWF3YXJlIHdyYXBwZXIgYXJvdW5kIGJpdGNvaW4tbWVzc2FnZSBwYWNrYWdlXG4gKiBAc2VlIHtiaXRjb2luTWVzc2FnZS5zaWdufVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2lnbk1lc3NhZ2UoXG4gIG1lc3NhZ2U6IHN0cmluZyB8IEJ1ZmZlcixcbiAgcHJpdmF0ZUtleTogQklQMzJJbnRlcmZhY2UgfCBCdWZmZXIsXG4gIG5ldHdvcms6IHsgbWVzc2FnZVByZWZpeDogc3RyaW5nIH1cbik6IEJ1ZmZlciB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKHByaXZhdGVLZXkpKSB7XG4gICAgcHJpdmF0ZUtleSA9IHByaXZhdGVLZXkucHJpdmF0ZUtleSBhcyBCdWZmZXI7XG4gICAgaWYgKCFwcml2YXRlS2V5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYG11c3QgcHJvdmlkZSBwcml2YXRlS2V5YCk7XG4gICAgfVxuICB9XG4gIGlmIChuZXR3b3JrID09PSBudWxsIHx8IHR5cGVvZiBuZXR3b3JrICE9PSAnb2JqZWN0JyB8fCB0eXBlb2YgbmV0d29yay5tZXNzYWdlUHJlZml4ICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBhcmd1bWVudCAnbmV0d29yaydgKTtcbiAgfVxuICBjb25zdCBjb21wcmVzc2VkID0gdHJ1ZTtcbiAgcmV0dXJuIGJpdGNvaW5NZXNzYWdlLnNpZ24obWVzc2FnZSwgcHJpdmF0ZUtleSwgY29tcHJlc3NlZCwgbmV0d29yay5tZXNzYWdlUHJlZml4KTtcbn1cblxuLyoqXG4gKiBiaXAzMi1hd2FyZSB3cmFwcGVyIGFyb3VuZCBiaXRjb2luLW1lc3NhZ2UgcGFja2FnZVxuICogQHNlZSB7Yml0Y29pbk1lc3NhZ2UudmVyaWZ5fVxuICovXG5leHBvcnQgZnVuY3Rpb24gdmVyaWZ5TWVzc2FnZShcbiAgbWVzc2FnZTogc3RyaW5nIHwgQnVmZmVyLFxuICBwdWJsaWNLZXk6IEJJUDMySW50ZXJmYWNlIHwgQnVmZmVyLFxuICBzaWduYXR1cmU6IEJ1ZmZlcixcbiAgbmV0d29yazogeyBtZXNzYWdlUHJlZml4OiBzdHJpbmcgfVxuKTogYm9vbGVhbiB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKHB1YmxpY0tleSkpIHtcbiAgICBwdWJsaWNLZXkgPSBwdWJsaWNLZXkucHVibGljS2V5O1xuICB9XG4gIGlmIChuZXR3b3JrID09PSBudWxsIHx8IHR5cGVvZiBuZXR3b3JrICE9PSAnb2JqZWN0JyB8fCB0eXBlb2YgbmV0d29yay5tZXNzYWdlUHJlZml4ICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBhcmd1bWVudCAnbmV0d29yaydgKTtcbiAgfVxuXG4gIGNvbnN0IGFkZHJlc3MgPSB1dHhvbGliLmFkZHJlc3MudG9CYXNlNThDaGVjayhcbiAgICB1dHhvbGliLmNyeXB0by5oYXNoMTYwKHB1YmxpY0tleSksXG4gICAgdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luLnB1YktleUhhc2gsXG4gICAgdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luXG4gICk7XG4gIHJldHVybiBiaXRjb2luTWVzc2FnZS52ZXJpZnkobWVzc2FnZSwgYWRkcmVzcywgc2lnbmF0dXJlLCBuZXR3b3JrLm1lc3NhZ2VQcmVmaXgpO1xufVxuIl19
@@ -0,0 +1,16 @@
1
+ import * as utxolib from '@bitgo-beta/utxo-lib';
2
+ import { Descriptor } from '@bitgo/wasm-miniscript';
3
+ /**
4
+ * Get a standard output descriptor that corresponds to the proprietary HD wallet setup
5
+ * used in BitGo wallets.
6
+ * Only supports a subset of script types.
7
+ */
8
+ export declare function getDescriptorForScriptType(rootWalletKeys: utxolib.bitgo.RootWalletKeys, scriptType: 'p2sh' | 'p2shP2wsh' | 'p2wsh', scope: 'internal' | 'external'): Descriptor;
9
+ /**
10
+ * Get a map of named descriptors for the given root wallet keys.
11
+ * Unsupported script types will have a value of null.
12
+ * Currently supports p2sh, p2shP2wsh, and p2wsh script types.
13
+ * @param rootWalletKeys
14
+ */
15
+ export declare function getNamedDescriptorsForRootWalletKeys(rootWalletKeys: utxolib.bitgo.RootWalletKeys): Map<string, Descriptor | null>;
16
+ //# sourceMappingURL=fromFixedScriptWallet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fromFixedScriptWallet.d.ts","sourceRoot":"","sources":["../../../src/descriptor/fromFixedScriptWallet.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAO,MAAM,wBAAwB,CAAC;AAYzD;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,cAAc,EAAE,OAAO,CAAC,KAAK,CAAC,cAAc,EAC5C,UAAU,EAAE,MAAM,GAAG,WAAW,GAAG,OAAO,EAC1C,KAAK,EAAE,UAAU,GAAG,UAAU,GAC7B,UAAU,CAkBZ;AAQD;;;;;GAKG;AACH,wBAAgB,oCAAoC,CAClD,cAAc,EAAE,OAAO,CAAC,KAAK,CAAC,cAAc,GAC3C,GAAG,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC,CAUhC"}
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.getDescriptorForScriptType = getDescriptorForScriptType;
37
+ exports.getNamedDescriptorsForRootWalletKeys = getNamedDescriptorsForRootWalletKeys;
38
+ const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
39
+ const wasm_miniscript_1 = require("@bitgo/wasm-miniscript");
40
+ /** Expand a template with the given root wallet keys and chain code */
41
+ function expand(rootWalletKeys, keyIndex, chainCode) {
42
+ if (keyIndex !== 0 && keyIndex !== 1 && keyIndex !== 2) {
43
+ throw new Error('Invalid key index');
44
+ }
45
+ const xpub = rootWalletKeys.triple[keyIndex].neutered().toBase58();
46
+ const prefix = rootWalletKeys.derivationPrefixes[keyIndex];
47
+ return xpub + '/' + prefix + '/' + chainCode + '/*';
48
+ }
49
+ /**
50
+ * Get a standard output descriptor that corresponds to the proprietary HD wallet setup
51
+ * used in BitGo wallets.
52
+ * Only supports a subset of script types.
53
+ */
54
+ function getDescriptorForScriptType(rootWalletKeys, scriptType, scope) {
55
+ const chain = scope === 'external'
56
+ ? utxolib.bitgo.getExternalChainCode(scriptType)
57
+ : utxolib.bitgo.getInternalChainCode(scriptType);
58
+ const multi = {
59
+ multi: [2, ...rootWalletKeys.triple.map((_, i) => expand(rootWalletKeys, i, chain))],
60
+ };
61
+ switch (scriptType) {
62
+ case 'p2sh':
63
+ return wasm_miniscript_1.Descriptor.fromString(wasm_miniscript_1.ast.formatNode({ sh: multi }), 'derivable');
64
+ case 'p2shP2wsh':
65
+ return wasm_miniscript_1.Descriptor.fromString(wasm_miniscript_1.ast.formatNode({ sh: { wsh: multi } }), 'derivable');
66
+ case 'p2wsh':
67
+ return wasm_miniscript_1.Descriptor.fromString(wasm_miniscript_1.ast.formatNode({ wsh: multi }), 'derivable');
68
+ default:
69
+ throw new Error(`Unsupported script type ${scriptType}`);
70
+ }
71
+ }
72
+ function isSupportedScriptType(scriptType) {
73
+ return ['p2sh', 'p2shP2wsh', 'p2wsh'].includes(scriptType);
74
+ }
75
+ /**
76
+ * Get a map of named descriptors for the given root wallet keys.
77
+ * Unsupported script types will have a value of null.
78
+ * Currently supports p2sh, p2shP2wsh, and p2wsh script types.
79
+ * @param rootWalletKeys
80
+ */
81
+ function getNamedDescriptorsForRootWalletKeys(rootWalletKeys) {
82
+ const scopes = ['external', 'internal'];
83
+ return new Map(utxolib.bitgo.outputScripts.scriptTypes2Of3.flatMap((scriptType) => scopes.map((scope) => [
84
+ `${scriptType}/${scope}`,
85
+ isSupportedScriptType(scriptType) ? getDescriptorForScriptType(rootWalletKeys, scriptType, scope) : null,
86
+ ])));
87
+ }
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvbUZpeGVkU2NyaXB0V2FsbGV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Rlc2NyaXB0b3IvZnJvbUZpeGVkU2NyaXB0V2FsbGV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBa0JBLGdFQXNCQztBQWNELG9GQVlDO0FBbEVELDhEQUFnRDtBQUNoRCw0REFBeUQ7QUFFekQsdUVBQXVFO0FBQ3ZFLFNBQVMsTUFBTSxDQUFDLGNBQTRDLEVBQUUsUUFBZ0IsRUFBRSxTQUFpQjtJQUMvRixJQUFJLFFBQVEsS0FBSyxDQUFDLElBQUksUUFBUSxLQUFLLENBQUMsSUFBSSxRQUFRLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDdkQsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFDRCxNQUFNLElBQUksR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ25FLE1BQU0sTUFBTSxHQUFHLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMzRCxPQUFPLElBQUksR0FBRyxHQUFHLEdBQUcsTUFBTSxHQUFHLEdBQUcsR0FBRyxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQ3RELENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsMEJBQTBCLENBQ3hDLGNBQTRDLEVBQzVDLFVBQTBDLEVBQzFDLEtBQThCO0lBRTlCLE1BQU0sS0FBSyxHQUNULEtBQUssS0FBSyxVQUFVO1FBQ2xCLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQztRQUNoRCxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNyRCxNQUFNLEtBQUssR0FBdUI7UUFDaEMsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0tBQ3JGLENBQUM7SUFDRixRQUFRLFVBQVUsRUFBRSxDQUFDO1FBQ25CLEtBQUssTUFBTTtZQUNULE9BQU8sNEJBQVUsQ0FBQyxVQUFVLENBQUMscUJBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUMzRSxLQUFLLFdBQVc7WUFDZCxPQUFPLDRCQUFVLENBQUMsVUFBVSxDQUFDLHFCQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNwRixLQUFLLE9BQU87WUFDVixPQUFPLDRCQUFVLENBQUMsVUFBVSxDQUFDLHFCQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDNUU7WUFDRSxNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQzdELENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBUyxxQkFBcUIsQ0FDNUIsVUFBc0Q7SUFFdEQsT0FBTyxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQzdELENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLG9DQUFvQyxDQUNsRCxjQUE0QztJQUU1QyxNQUFNLE1BQU0sR0FBRyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQVUsQ0FBQztJQUNqRCxPQUFPLElBQUksR0FBRyxDQUNaLE9BQU8sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUNqRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUNwQixHQUFHLFVBQVUsSUFBSSxLQUFLLEVBQUU7UUFDeEIscUJBQXFCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLGNBQWMsRUFBRSxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUk7S0FDekcsQ0FBQyxDQUNILENBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCB7IERlc2NyaXB0b3IsIGFzdCB9IGZyb20gJ0BiaXRnby93YXNtLW1pbmlzY3JpcHQnO1xuXG4vKiogRXhwYW5kIGEgdGVtcGxhdGUgd2l0aCB0aGUgZ2l2ZW4gcm9vdCB3YWxsZXQga2V5cyBhbmQgY2hhaW4gY29kZSAqL1xuZnVuY3Rpb24gZXhwYW5kKHJvb3RXYWxsZXRLZXlzOiB1dHhvbGliLmJpdGdvLlJvb3RXYWxsZXRLZXlzLCBrZXlJbmRleDogbnVtYmVyLCBjaGFpbkNvZGU6IG51bWJlcik6IHN0cmluZyB7XG4gIGlmIChrZXlJbmRleCAhPT0gMCAmJiBrZXlJbmRleCAhPT0gMSAmJiBrZXlJbmRleCAhPT0gMikge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBrZXkgaW5kZXgnKTtcbiAgfVxuICBjb25zdCB4cHViID0gcm9vdFdhbGxldEtleXMudHJpcGxlW2tleUluZGV4XS5uZXV0ZXJlZCgpLnRvQmFzZTU4KCk7XG4gIGNvbnN0IHByZWZpeCA9IHJvb3RXYWxsZXRLZXlzLmRlcml2YXRpb25QcmVmaXhlc1trZXlJbmRleF07XG4gIHJldHVybiB4cHViICsgJy8nICsgcHJlZml4ICsgJy8nICsgY2hhaW5Db2RlICsgJy8qJztcbn1cblxuLyoqXG4gKiBHZXQgYSBzdGFuZGFyZCBvdXRwdXQgZGVzY3JpcHRvciB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBwcm9wcmlldGFyeSBIRCB3YWxsZXQgc2V0dXBcbiAqIHVzZWQgaW4gQml0R28gd2FsbGV0cy5cbiAqIE9ubHkgc3VwcG9ydHMgYSBzdWJzZXQgb2Ygc2NyaXB0IHR5cGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVzY3JpcHRvckZvclNjcmlwdFR5cGUoXG4gIHJvb3RXYWxsZXRLZXlzOiB1dHhvbGliLmJpdGdvLlJvb3RXYWxsZXRLZXlzLFxuICBzY3JpcHRUeXBlOiAncDJzaCcgfCAncDJzaFAyd3NoJyB8ICdwMndzaCcsXG4gIHNjb3BlOiAnaW50ZXJuYWwnIHwgJ2V4dGVybmFsJ1xuKTogRGVzY3JpcHRvciB7XG4gIGNvbnN0IGNoYWluID1cbiAgICBzY29wZSA9PT0gJ2V4dGVybmFsJ1xuICAgICAgPyB1dHhvbGliLmJpdGdvLmdldEV4dGVybmFsQ2hhaW5Db2RlKHNjcmlwdFR5cGUpXG4gICAgICA6IHV0eG9saWIuYml0Z28uZ2V0SW50ZXJuYWxDaGFpbkNvZGUoc2NyaXB0VHlwZSk7XG4gIGNvbnN0IG11bHRpOiBhc3QuTWluaXNjcmlwdE5vZGUgPSB7XG4gICAgbXVsdGk6IFsyLCAuLi5yb290V2FsbGV0S2V5cy50cmlwbGUubWFwKChfLCBpKSA9PiBleHBhbmQocm9vdFdhbGxldEtleXMsIGksIGNoYWluKSldLFxuICB9O1xuICBzd2l0Y2ggKHNjcmlwdFR5cGUpIHtcbiAgICBjYXNlICdwMnNoJzpcbiAgICAgIHJldHVybiBEZXNjcmlwdG9yLmZyb21TdHJpbmcoYXN0LmZvcm1hdE5vZGUoeyBzaDogbXVsdGkgfSksICdkZXJpdmFibGUnKTtcbiAgICBjYXNlICdwMnNoUDJ3c2gnOlxuICAgICAgcmV0dXJuIERlc2NyaXB0b3IuZnJvbVN0cmluZyhhc3QuZm9ybWF0Tm9kZSh7IHNoOiB7IHdzaDogbXVsdGkgfSB9KSwgJ2Rlcml2YWJsZScpO1xuICAgIGNhc2UgJ3Ayd3NoJzpcbiAgICAgIHJldHVybiBEZXNjcmlwdG9yLmZyb21TdHJpbmcoYXN0LmZvcm1hdE5vZGUoeyB3c2g6IG11bHRpIH0pLCAnZGVyaXZhYmxlJyk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgc2NyaXB0IHR5cGUgJHtzY3JpcHRUeXBlfWApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzU3VwcG9ydGVkU2NyaXB0VHlwZShcbiAgc2NyaXB0VHlwZTogdXR4b2xpYi5iaXRnby5vdXRwdXRTY3JpcHRzLlNjcmlwdFR5cGUyT2YzXG4pOiBzY3JpcHRUeXBlIGlzICdwMnNoJyB8ICdwMnNoUDJ3c2gnIHwgJ3Ayd3NoJyB7XG4gIHJldHVybiBbJ3Ayc2gnLCAncDJzaFAyd3NoJywgJ3Ayd3NoJ10uaW5jbHVkZXMoc2NyaXB0VHlwZSk7XG59XG5cbi8qKlxuICogR2V0IGEgbWFwIG9mIG5hbWVkIGRlc2NyaXB0b3JzIGZvciB0aGUgZ2l2ZW4gcm9vdCB3YWxsZXQga2V5cy5cbiAqIFVuc3VwcG9ydGVkIHNjcmlwdCB0eXBlcyB3aWxsIGhhdmUgYSB2YWx1ZSBvZiBudWxsLlxuICogQ3VycmVudGx5IHN1cHBvcnRzIHAyc2gsIHAyc2hQMndzaCwgYW5kIHAyd3NoIHNjcmlwdCB0eXBlcy5cbiAqIEBwYXJhbSByb290V2FsbGV0S2V5c1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmFtZWREZXNjcmlwdG9yc0ZvclJvb3RXYWxsZXRLZXlzKFxuICByb290V2FsbGV0S2V5czogdXR4b2xpYi5iaXRnby5Sb290V2FsbGV0S2V5c1xuKTogTWFwPHN0cmluZywgRGVzY3JpcHRvciB8IG51bGw+IHtcbiAgY29uc3Qgc2NvcGVzID0gWydleHRlcm5hbCcsICdpbnRlcm5hbCddIGFzIGNvbnN0O1xuICByZXR1cm4gbmV3IE1hcChcbiAgICB1dHhvbGliLmJpdGdvLm91dHB1dFNjcmlwdHMuc2NyaXB0VHlwZXMyT2YzLmZsYXRNYXAoKHNjcmlwdFR5cGUpID0+XG4gICAgICBzY29wZXMubWFwKChzY29wZSkgPT4gW1xuICAgICAgICBgJHtzY3JpcHRUeXBlfS8ke3Njb3BlfWAsXG4gICAgICAgIGlzU3VwcG9ydGVkU2NyaXB0VHlwZShzY3JpcHRUeXBlKSA/IGdldERlc2NyaXB0b3JGb3JTY3JpcHRUeXBlKHJvb3RXYWxsZXRLZXlzLCBzY3JpcHRUeXBlLCBzY29wZSkgOiBudWxsLFxuICAgICAgXSlcbiAgICApXG4gICk7XG59XG4iXX0=
@@ -4,6 +4,8 @@ export * from './DescriptorMap';
4
4
  export * from './derive';
5
5
  export * from './Output';
6
6
  export * from './VirtualSize';
7
+ export * from './fromFixedScriptWallet';
8
+ export * from './parse/PatternMatcher';
7
9
  /** @deprecated - import from @bitgo-beta/utxo-core directly instead */
8
10
  export * from '../Output';
9
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/descriptor/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAE9B,uEAAuE;AACvE,cAAc,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/descriptor/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AAEvC,uEAAuE;AACvE,cAAc,WAAW,CAAC"}
@@ -20,6 +20,8 @@ __exportStar(require("./DescriptorMap"), exports);
20
20
  __exportStar(require("./derive"), exports);
21
21
  __exportStar(require("./Output"), exports);
22
22
  __exportStar(require("./VirtualSize"), exports);
23
+ __exportStar(require("./fromFixedScriptWallet"), exports);
24
+ __exportStar(require("./parse/PatternMatcher"), exports);
23
25
  /** @deprecated - import from @bitgo-beta/utxo-core directly instead */
24
26
  __exportStar(require("../Output"), exports);
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGVzY3JpcHRvci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEseUNBQXVCO0FBQ3ZCLDRDQUEwQjtBQUMxQixrREFBZ0M7QUFDaEMsMkNBQXlCO0FBQ3pCLDJDQUF5QjtBQUN6QixnREFBOEI7QUFFOUIsdUVBQXVFO0FBQ3ZFLDRDQUEwQiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vcHNidCc7XG5leHBvcnQgKiBmcm9tICcuL2FkZHJlc3MnO1xuZXhwb3J0ICogZnJvbSAnLi9EZXNjcmlwdG9yTWFwJztcbmV4cG9ydCAqIGZyb20gJy4vZGVyaXZlJztcbmV4cG9ydCAqIGZyb20gJy4vT3V0cHV0JztcbmV4cG9ydCAqIGZyb20gJy4vVmlydHVhbFNpemUnO1xuXG4vKiogQGRlcHJlY2F0ZWQgLSBpbXBvcnQgZnJvbSBAYml0Z28tYmV0YS91dHhvLWNvcmUgZGlyZWN0bHkgaW5zdGVhZCAqL1xuZXhwb3J0ICogZnJvbSAnLi4vT3V0cHV0JztcbiJdfQ==
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGVzY3JpcHRvci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEseUNBQXVCO0FBQ3ZCLDRDQUEwQjtBQUMxQixrREFBZ0M7QUFDaEMsMkNBQXlCO0FBQ3pCLDJDQUF5QjtBQUN6QixnREFBOEI7QUFDOUIsMERBQXdDO0FBQ3hDLHlEQUF1QztBQUV2Qyx1RUFBdUU7QUFDdkUsNENBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9wc2J0JztcbmV4cG9ydCAqIGZyb20gJy4vYWRkcmVzcyc7XG5leHBvcnQgKiBmcm9tICcuL0Rlc2NyaXB0b3JNYXAnO1xuZXhwb3J0ICogZnJvbSAnLi9kZXJpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9PdXRwdXQnO1xuZXhwb3J0ICogZnJvbSAnLi9WaXJ0dWFsU2l6ZSc7XG5leHBvcnQgKiBmcm9tICcuL2Zyb21GaXhlZFNjcmlwdFdhbGxldCc7XG5leHBvcnQgKiBmcm9tICcuL3BhcnNlL1BhdHRlcm5NYXRjaGVyJztcblxuLyoqIEBkZXByZWNhdGVkIC0gaW1wb3J0IGZyb20gQGJpdGdvLWJldGEvdXR4by1jb3JlIGRpcmVjdGx5IGluc3RlYWQgKi9cbmV4cG9ydCAqIGZyb20gJy4uL091dHB1dCc7XG4iXX0=
@@ -0,0 +1,14 @@
1
+ export type PatternVar = {
2
+ $var: string;
3
+ };
4
+ export type Pattern = PatternVar | string | number | {
5
+ [key: string]: Pattern | Pattern[];
6
+ } | Pattern[];
7
+ export type ExtractedVars = Record<string, unknown>;
8
+ export declare class PatternMatcher {
9
+ match(node: unknown, pattern: Pattern): ExtractedVars | null;
10
+ private matchNode;
11
+ private isPatternVar;
12
+ private deepEqual;
13
+ }
14
+ //# sourceMappingURL=PatternMatcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PatternMatcher.d.ts","sourceRoot":"","sources":["../../../../src/descriptor/parse/PatternMatcher.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,UAAU,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAC1C,MAAM,MAAM,OAAO,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,EAAE,CAAA;CAAE,GAAG,OAAO,EAAE,CAAC;AAExG,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEpD,qBAAa,cAAc;IACzB,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,aAAa,GAAG,IAAI;IAK5D,OAAO,CAAC,SAAS;IAwCjB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,SAAS;CAgBlB"}