@bitgo-beta/utxo-core 1.8.1-beta.502 → 1.8.1-beta.504

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 (352) hide show
  1. package/dist/cjs/src/Output.d.ts.map +1 -0
  2. package/dist/cjs/src/Output.js +60 -0
  3. package/dist/cjs/src/bip322/index.d.ts.map +1 -0
  4. package/dist/{src → cjs/src}/bip322/index.js +1 -1
  5. package/dist/cjs/src/bip322/toSign.d.ts.map +1 -0
  6. package/dist/cjs/src/bip322/toSign.js +126 -0
  7. package/dist/cjs/src/bip322/toSpend.d.ts.map +1 -0
  8. package/dist/cjs/src/bip322/toSpend.js +72 -0
  9. package/dist/cjs/src/bip322/utils.d.ts.map +1 -0
  10. package/dist/cjs/src/bip322/utils.js +115 -0
  11. package/dist/cjs/src/bip322/verify.d.ts.map +1 -0
  12. package/dist/cjs/src/bip322/verify.js +115 -0
  13. package/dist/cjs/src/bip32utils.d.ts.map +1 -0
  14. package/dist/cjs/src/bip32utils.js +71 -0
  15. package/dist/cjs/src/bip65/index.d.ts.map +1 -0
  16. package/dist/{src → cjs/src}/bip65/index.js +1 -1
  17. package/dist/cjs/src/bip65/locktime.d.ts.map +1 -0
  18. package/dist/cjs/src/bip65/locktime.js +37 -0
  19. package/dist/cjs/src/descriptor/DescriptorMap.d.ts.map +1 -0
  20. package/dist/cjs/src/descriptor/DescriptorMap.js +9 -0
  21. package/dist/cjs/src/descriptor/Output.d.ts.map +1 -0
  22. package/dist/cjs/src/descriptor/Output.js +41 -0
  23. package/dist/cjs/src/descriptor/VirtualSize.d.ts.map +1 -0
  24. package/dist/cjs/src/descriptor/VirtualSize.js +100 -0
  25. package/dist/cjs/src/descriptor/address.d.ts.map +1 -0
  26. package/dist/{src → cjs/src}/descriptor/address.js +1 -1
  27. package/dist/cjs/src/descriptor/derive.d.ts.map +1 -0
  28. package/dist/cjs/src/descriptor/derive.js +45 -0
  29. package/dist/cjs/src/descriptor/fromFixedScriptWallet.d.ts.map +1 -0
  30. package/dist/cjs/src/descriptor/fromFixedScriptWallet.js +88 -0
  31. package/dist/cjs/src/descriptor/index.d.ts.map +1 -0
  32. package/dist/{src → cjs/src}/descriptor/index.js +1 -1
  33. package/dist/cjs/src/descriptor/parse/PatternMatcher.d.ts.map +1 -0
  34. package/dist/cjs/src/descriptor/parse/PatternMatcher.js +60 -0
  35. package/dist/cjs/src/descriptor/psbt/assertSatisfiable.d.ts.map +1 -0
  36. package/dist/cjs/src/descriptor/psbt/assertSatisfiable.js +74 -0
  37. package/dist/cjs/src/descriptor/psbt/createPsbt.d.ts.map +1 -0
  38. package/dist/cjs/src/descriptor/psbt/createPsbt.js +107 -0
  39. package/dist/cjs/src/descriptor/psbt/findDescriptors.d.ts.map +1 -0
  40. package/dist/cjs/src/descriptor/psbt/findDescriptors.js +98 -0
  41. package/dist/cjs/src/descriptor/psbt/index.d.ts.map +1 -0
  42. package/dist/{src → cjs/src}/descriptor/psbt/index.js +1 -1
  43. package/dist/cjs/src/descriptor/psbt/parse.d.ts.map +1 -0
  44. package/dist/cjs/src/descriptor/psbt/parse.js +87 -0
  45. package/dist/cjs/src/descriptor/psbt/sign.d.ts.map +1 -0
  46. package/dist/cjs/src/descriptor/psbt/sign.js +42 -0
  47. package/dist/cjs/src/descriptor/psbt/wrap.d.ts.map +1 -0
  48. package/dist/cjs/src/descriptor/psbt/wrap.js +76 -0
  49. package/dist/cjs/src/dustThreshold.d.ts.map +1 -0
  50. package/dist/cjs/src/dustThreshold.js +134 -0
  51. package/dist/cjs/src/index.d.ts.map +1 -0
  52. package/dist/{src → cjs/src}/index.js +1 -1
  53. package/dist/cjs/src/paygo/attestation.d.ts.map +1 -0
  54. package/dist/{src → cjs/src}/paygo/attestation.js +1 -1
  55. package/dist/cjs/src/paygo/index.d.ts.map +1 -0
  56. package/dist/{src → cjs/src}/paygo/index.js +1 -1
  57. package/dist/cjs/src/paygo/parsePayGoAttestation.d.ts.map +1 -0
  58. package/dist/cjs/src/paygo/parsePayGoAttestation.js +50 -0
  59. package/dist/cjs/src/paygo/psbt/Errors.d.ts.map +1 -0
  60. package/dist/cjs/src/paygo/psbt/Errors.js +44 -0
  61. package/dist/cjs/src/paygo/psbt/index.d.ts.map +1 -0
  62. package/dist/{src → cjs/src}/paygo/psbt/index.js +1 -1
  63. package/dist/cjs/src/paygo/psbt/payGoAddressProof.d.ts.map +1 -0
  64. package/dist/cjs/src/paygo/psbt/payGoAddressProof.js +124 -0
  65. package/dist/cjs/src/testutil/descriptor/descriptors.d.ts.map +1 -0
  66. package/dist/cjs/src/testutil/descriptor/descriptors.js +162 -0
  67. package/dist/cjs/src/testutil/descriptor/index.d.ts.map +1 -0
  68. package/dist/{src → cjs/src}/testutil/descriptor/index.js +1 -1
  69. package/dist/cjs/src/testutil/descriptor/mock.utils.d.ts.map +1 -0
  70. package/dist/cjs/src/testutil/descriptor/mock.utils.js +92 -0
  71. package/dist/cjs/src/testutil/descriptor/psbt.utils.d.ts.map +1 -0
  72. package/dist/cjs/src/testutil/descriptor/psbt.utils.js +21 -0
  73. package/dist/cjs/src/testutil/fixtures.utils.d.ts.map +1 -0
  74. package/dist/cjs/src/testutil/fixtures.utils.js +127 -0
  75. package/dist/cjs/src/testutil/generatePayGoAttestationProof.utils.d.ts.map +1 -0
  76. package/dist/cjs/src/testutil/generatePayGoAttestationProof.utils.js +38 -0
  77. package/dist/cjs/src/testutil/index.d.ts.map +1 -0
  78. package/dist/{src → cjs/src}/testutil/index.js +1 -1
  79. package/dist/cjs/src/testutil/key.utils.d.ts.map +1 -0
  80. package/dist/{src → cjs/src}/testutil/key.utils.js +1 -1
  81. package/dist/cjs/src/testutil/toPlainObject.utils.d.ts.map +1 -0
  82. package/dist/cjs/src/testutil/toPlainObject.utils.js +89 -0
  83. package/dist/cjs/src/testutil/trimMessagePrefix.d.ts.map +1 -0
  84. package/dist/{src → cjs/src}/testutil/trimMessagePrefix.js +1 -1
  85. package/dist/cjs/src/xOnlyPubkey.d.ts.map +1 -0
  86. package/dist/cjs/src/xOnlyPubkey.js +18 -0
  87. package/dist/cjs/test/Output.d.ts +2 -0
  88. package/dist/cjs/test/Output.d.ts.map +1 -0
  89. package/dist/cjs/test/Output.js +70 -0
  90. package/dist/cjs/test/bip322/bip322.utils.d.ts +7 -0
  91. package/dist/cjs/test/bip322/bip322.utils.d.ts.map +1 -0
  92. package/dist/cjs/test/bip322/bip322.utils.js +16 -0
  93. package/dist/cjs/test/bip322/toSign.d.ts +2 -0
  94. package/dist/cjs/test/bip322/toSign.d.ts.map +1 -0
  95. package/dist/cjs/test/bip322/toSign.js +133 -0
  96. package/dist/cjs/test/bip322/toSpend.d.ts +2 -0
  97. package/dist/cjs/test/bip322/toSpend.d.ts.map +1 -0
  98. package/dist/cjs/test/bip322/toSpend.js +70 -0
  99. package/dist/cjs/test/bip322/utils.d.ts +2 -0
  100. package/dist/cjs/test/bip322/utils.d.ts.map +1 -0
  101. package/dist/cjs/test/bip322/utils.js +79 -0
  102. package/dist/cjs/test/bip322/verify.d.ts +2 -0
  103. package/dist/cjs/test/bip322/verify.d.ts.map +1 -0
  104. package/dist/cjs/test/bip322/verify.js +293 -0
  105. package/dist/cjs/test/bip32utils.d.ts +2 -0
  106. package/dist/cjs/test/bip32utils.d.ts.map +1 -0
  107. package/dist/cjs/test/bip32utils.js +62 -0
  108. package/dist/cjs/test/bip65/locktime.d.ts +2 -0
  109. package/dist/cjs/test/bip65/locktime.d.ts.map +1 -0
  110. package/dist/cjs/test/bip65/locktime.js +22 -0
  111. package/dist/cjs/test/descriptor/Output.d.ts +2 -0
  112. package/dist/cjs/test/descriptor/Output.d.ts.map +1 -0
  113. package/dist/cjs/test/descriptor/Output.js +44 -0
  114. package/dist/cjs/test/descriptor/derive.d.ts +2 -0
  115. package/dist/cjs/test/descriptor/derive.d.ts.map +1 -0
  116. package/dist/cjs/test/descriptor/derive.js +27 -0
  117. package/dist/cjs/test/descriptor/fromFixedScriptWallet.d.ts +2 -0
  118. package/dist/cjs/test/descriptor/fromFixedScriptWallet.d.ts.map +1 -0
  119. package/dist/cjs/test/descriptor/fromFixedScriptWallet.js +145 -0
  120. package/dist/cjs/test/descriptor/parse/PatternMatcher.d.ts +2 -0
  121. package/dist/cjs/test/descriptor/parse/PatternMatcher.d.ts.map +1 -0
  122. package/dist/cjs/test/descriptor/parse/PatternMatcher.js +120 -0
  123. package/dist/cjs/test/descriptor/psbt/VirtualSize.d.ts +2 -0
  124. package/dist/cjs/test/descriptor/psbt/VirtualSize.d.ts.map +1 -0
  125. package/dist/cjs/test/descriptor/psbt/VirtualSize.js +71 -0
  126. package/dist/cjs/test/descriptor/psbt/assertSatisfiable.d.ts +2 -0
  127. package/dist/cjs/test/descriptor/psbt/assertSatisfiable.d.ts.map +1 -0
  128. package/dist/cjs/test/descriptor/psbt/assertSatisfiable.js +56 -0
  129. package/dist/cjs/test/descriptor/psbt/findDescriptors.d.ts +2 -0
  130. package/dist/cjs/test/descriptor/psbt/findDescriptors.d.ts.map +1 -0
  131. package/dist/cjs/test/descriptor/psbt/findDescriptors.js +70 -0
  132. package/dist/cjs/test/descriptor/psbt/psbt.d.ts +2 -0
  133. package/dist/cjs/test/descriptor/psbt/psbt.d.ts.map +1 -0
  134. package/dist/cjs/test/descriptor/psbt/psbt.js +211 -0
  135. package/dist/cjs/test/dustThreshold.d.ts +2 -0
  136. package/dist/cjs/test/dustThreshold.d.ts.map +1 -0
  137. package/dist/cjs/test/dustThreshold.js +110 -0
  138. package/dist/cjs/test/paygo/attestation.d.ts +2 -0
  139. package/dist/cjs/test/paygo/attestation.d.ts.map +1 -0
  140. package/dist/cjs/test/paygo/attestation.js +23 -0
  141. package/dist/cjs/test/paygo/parsePayGoAttestation.d.ts +2 -0
  142. package/dist/cjs/test/paygo/parsePayGoAttestation.d.ts.map +1 -0
  143. package/dist/cjs/test/paygo/parsePayGoAttestation.js +75 -0
  144. package/dist/cjs/test/paygo/psbt/payGoAddressProof.d.ts +10 -0
  145. package/dist/cjs/test/paygo/psbt/payGoAddressProof.d.ts.map +1 -0
  146. package/dist/cjs/test/paygo/psbt/payGoAddressProof.js +137 -0
  147. package/dist/cjs/test/xOnlyPubkey.d.ts +2 -0
  148. package/dist/cjs/test/xOnlyPubkey.d.ts.map +1 -0
  149. package/dist/cjs/test/xOnlyPubkey.js +18 -0
  150. package/dist/cjs/tsconfig.tsbuildinfo +1 -0
  151. package/dist/esm/Output.d.ts +43 -0
  152. package/dist/esm/Output.js +53 -0
  153. package/dist/esm/bip322/index.d.ts +5 -0
  154. package/dist/esm/bip322/index.js +5 -0
  155. package/dist/esm/bip322/toSign.d.ts +25 -0
  156. package/dist/esm/bip322/toSign.js +120 -0
  157. package/dist/esm/bip322/toSpend.d.ts +22 -0
  158. package/dist/esm/bip322/toSpend.js +66 -0
  159. package/dist/esm/bip322/utils.d.ts +18 -0
  160. package/dist/esm/bip322/utils.js +77 -0
  161. package/dist/esm/bip322/verify.d.ts +12 -0
  162. package/dist/esm/bip322/verify.js +76 -0
  163. package/dist/esm/bip32utils.d.ts +16 -0
  164. package/dist/esm/bip32utils.js +34 -0
  165. package/dist/esm/bip65/index.d.ts +2 -0
  166. package/dist/esm/bip65/index.js +2 -0
  167. package/dist/esm/bip65/locktime.d.ts +8 -0
  168. package/dist/esm/bip65/locktime.js +34 -0
  169. package/dist/esm/descriptor/DescriptorMap.d.ts +9 -0
  170. package/dist/esm/descriptor/DescriptorMap.js +6 -0
  171. package/dist/esm/descriptor/Output.d.ts +23 -0
  172. package/dist/esm/descriptor/Output.js +32 -0
  173. package/dist/esm/descriptor/VirtualSize.d.ts +23 -0
  174. package/dist/esm/descriptor/VirtualSize.js +94 -0
  175. package/dist/esm/descriptor/address.d.ts +5 -0
  176. package/dist/esm/descriptor/address.js +11 -0
  177. package/dist/esm/descriptor/derive.d.ts +13 -0
  178. package/dist/esm/descriptor/derive.js +38 -0
  179. package/dist/esm/descriptor/fromFixedScriptWallet.d.ts +16 -0
  180. package/dist/esm/descriptor/fromFixedScriptWallet.js +51 -0
  181. package/dist/esm/descriptor/index.d.ts +11 -0
  182. package/dist/esm/descriptor/index.js +11 -0
  183. package/dist/esm/descriptor/parse/PatternMatcher.d.ts +14 -0
  184. package/dist/esm/descriptor/parse/PatternMatcher.js +56 -0
  185. package/dist/esm/descriptor/psbt/assertSatisfiable.d.ts +20 -0
  186. package/dist/esm/descriptor/psbt/assertSatisfiable.js +69 -0
  187. package/dist/esm/descriptor/psbt/createPsbt.d.ts +23 -0
  188. package/dist/esm/descriptor/psbt/createPsbt.js +69 -0
  189. package/dist/esm/descriptor/psbt/findDescriptors.d.ts +26 -0
  190. package/dist/esm/descriptor/psbt/findDescriptors.js +94 -0
  191. package/dist/esm/descriptor/psbt/index.d.ts +7 -0
  192. package/dist/esm/descriptor/psbt/index.js +7 -0
  193. package/dist/esm/descriptor/psbt/parse.d.ts +27 -0
  194. package/dist/esm/descriptor/psbt/parse.js +51 -0
  195. package/dist/esm/descriptor/psbt/sign.d.ts +26 -0
  196. package/dist/esm/descriptor/psbt/sign.js +34 -0
  197. package/dist/esm/descriptor/psbt/wrap.d.ts +12 -0
  198. package/dist/esm/descriptor/psbt/wrap.js +38 -0
  199. package/dist/esm/dustThreshold.d.ts +4 -0
  200. package/dist/esm/dustThreshold.js +97 -0
  201. package/dist/esm/index.d.ts +10 -0
  202. package/dist/esm/index.js +10 -0
  203. package/dist/esm/paygo/attestation.d.ts +11 -0
  204. package/dist/esm/paygo/attestation.js +18 -0
  205. package/dist/esm/paygo/index.d.ts +3 -0
  206. package/dist/esm/paygo/index.js +3 -0
  207. package/dist/esm/paygo/parsePayGoAttestation.d.ts +16 -0
  208. package/dist/esm/paygo/parsePayGoAttestation.js +43 -0
  209. package/dist/esm/paygo/psbt/Errors.d.ts +22 -0
  210. package/dist/esm/paygo/psbt/Errors.js +35 -0
  211. package/dist/esm/paygo/psbt/index.d.ts +2 -0
  212. package/dist/esm/paygo/psbt/index.js +2 -0
  213. package/dist/esm/paygo/psbt/payGoAddressProof.d.ts +29 -0
  214. package/dist/esm/paygo/psbt/payGoAddressProof.js +85 -0
  215. package/dist/esm/testutil/descriptor/descriptors.d.ts +13 -0
  216. package/dist/esm/testutil/descriptor/descriptors.js +150 -0
  217. package/dist/esm/testutil/descriptor/index.d.ts +4 -0
  218. package/dist/esm/testutil/descriptor/index.js +4 -0
  219. package/dist/esm/testutil/descriptor/mock.utils.d.ts +36 -0
  220. package/dist/esm/testutil/descriptor/mock.utils.js +53 -0
  221. package/dist/esm/testutil/descriptor/psbt.utils.d.ts +4 -0
  222. package/dist/esm/testutil/descriptor/psbt.utils.js +17 -0
  223. package/dist/esm/testutil/fixtures.utils.d.ts +15 -0
  224. package/dist/{src → esm}/testutil/fixtures.utils.js +5 -42
  225. package/dist/esm/testutil/generatePayGoAttestationProof.utils.d.ts +12 -0
  226. package/dist/esm/testutil/generatePayGoAttestationProof.utils.js +32 -0
  227. package/dist/esm/testutil/index.d.ts +6 -0
  228. package/dist/esm/testutil/index.js +6 -0
  229. package/dist/esm/testutil/key.utils.d.ts +16 -0
  230. package/dist/esm/testutil/key.utils.js +22 -0
  231. package/dist/esm/testutil/toPlainObject.utils.d.ts +11 -0
  232. package/dist/esm/testutil/toPlainObject.utils.js +85 -0
  233. package/dist/esm/testutil/trimMessagePrefix.d.ts +11 -0
  234. package/dist/esm/testutil/trimMessagePrefix.js +24 -0
  235. package/dist/esm/xOnlyPubkey.d.ts +2 -0
  236. package/dist/esm/xOnlyPubkey.js +15 -0
  237. package/package.json +54 -20
  238. package/dist/src/Output.js +0 -60
  239. package/dist/src/bip322/toSign.js +0 -126
  240. package/dist/src/bip322/toSpend.js +0 -72
  241. package/dist/src/bip322/utils.js +0 -115
  242. package/dist/src/bip322/verify.js +0 -115
  243. package/dist/src/bip32utils.js +0 -71
  244. package/dist/src/bip65/locktime.js +0 -37
  245. package/dist/src/descriptor/DescriptorMap.js +0 -9
  246. package/dist/src/descriptor/Output.js +0 -41
  247. package/dist/src/descriptor/VirtualSize.js +0 -100
  248. package/dist/src/descriptor/derive.js +0 -45
  249. package/dist/src/descriptor/fromFixedScriptWallet.js +0 -88
  250. package/dist/src/descriptor/parse/PatternMatcher.js +0 -60
  251. package/dist/src/descriptor/psbt/assertSatisfiable.js +0 -74
  252. package/dist/src/descriptor/psbt/createPsbt.js +0 -107
  253. package/dist/src/descriptor/psbt/findDescriptors.js +0 -98
  254. package/dist/src/descriptor/psbt/parse.js +0 -87
  255. package/dist/src/descriptor/psbt/sign.js +0 -42
  256. package/dist/src/descriptor/psbt/wrap.js +0 -76
  257. package/dist/src/dustThreshold.js +0 -134
  258. package/dist/src/paygo/parsePayGoAttestation.js +0 -50
  259. package/dist/src/paygo/psbt/Errors.js +0 -44
  260. package/dist/src/paygo/psbt/payGoAddressProof.js +0 -124
  261. package/dist/src/testutil/descriptor/descriptors.js +0 -162
  262. package/dist/src/testutil/descriptor/mock.utils.js +0 -92
  263. package/dist/src/testutil/descriptor/psbt.utils.js +0 -21
  264. package/dist/src/testutil/generatePayGoAttestationProof.utils.js +0 -38
  265. package/dist/src/testutil/toPlainObject.utils.js +0 -89
  266. package/dist/src/xOnlyPubkey.js +0 -18
  267. /package/dist/{src → cjs/src}/Output.d.ts +0 -0
  268. /package/dist/{src → cjs/src}/bip322/index.d.ts +0 -0
  269. /package/dist/{src → cjs/src}/bip322/toSign.d.ts +0 -0
  270. /package/dist/{src → cjs/src}/bip322/toSpend.d.ts +0 -0
  271. /package/dist/{src → cjs/src}/bip322/utils.d.ts +0 -0
  272. /package/dist/{src → cjs/src}/bip322/verify.d.ts +0 -0
  273. /package/dist/{src → cjs/src}/bip32utils.d.ts +0 -0
  274. /package/dist/{src → cjs/src}/bip65/index.d.ts +0 -0
  275. /package/dist/{src → cjs/src}/bip65/locktime.d.ts +0 -0
  276. /package/dist/{src → cjs/src}/descriptor/DescriptorMap.d.ts +0 -0
  277. /package/dist/{src → cjs/src}/descriptor/Output.d.ts +0 -0
  278. /package/dist/{src → cjs/src}/descriptor/VirtualSize.d.ts +0 -0
  279. /package/dist/{src → cjs/src}/descriptor/address.d.ts +0 -0
  280. /package/dist/{src → cjs/src}/descriptor/derive.d.ts +0 -0
  281. /package/dist/{src → cjs/src}/descriptor/fromFixedScriptWallet.d.ts +0 -0
  282. /package/dist/{src → cjs/src}/descriptor/index.d.ts +0 -0
  283. /package/dist/{src → cjs/src}/descriptor/parse/PatternMatcher.d.ts +0 -0
  284. /package/dist/{src → cjs/src}/descriptor/psbt/assertSatisfiable.d.ts +0 -0
  285. /package/dist/{src → cjs/src}/descriptor/psbt/createPsbt.d.ts +0 -0
  286. /package/dist/{src → cjs/src}/descriptor/psbt/findDescriptors.d.ts +0 -0
  287. /package/dist/{src → cjs/src}/descriptor/psbt/index.d.ts +0 -0
  288. /package/dist/{src → cjs/src}/descriptor/psbt/parse.d.ts +0 -0
  289. /package/dist/{src → cjs/src}/descriptor/psbt/sign.d.ts +0 -0
  290. /package/dist/{src → cjs/src}/descriptor/psbt/wrap.d.ts +0 -0
  291. /package/dist/{src → cjs/src}/dustThreshold.d.ts +0 -0
  292. /package/dist/{src → cjs/src}/index.d.ts +0 -0
  293. /package/dist/{src → cjs/src}/paygo/attestation.d.ts +0 -0
  294. /package/dist/{src → cjs/src}/paygo/index.d.ts +0 -0
  295. /package/dist/{src → cjs/src}/paygo/parsePayGoAttestation.d.ts +0 -0
  296. /package/dist/{src → cjs/src}/paygo/psbt/Errors.d.ts +0 -0
  297. /package/dist/{src → cjs/src}/paygo/psbt/index.d.ts +0 -0
  298. /package/dist/{src → cjs/src}/paygo/psbt/payGoAddressProof.d.ts +0 -0
  299. /package/dist/{src → cjs/src}/testutil/descriptor/descriptors.d.ts +0 -0
  300. /package/dist/{src → cjs/src}/testutil/descriptor/index.d.ts +0 -0
  301. /package/dist/{src → cjs/src}/testutil/descriptor/mock.utils.d.ts +0 -0
  302. /package/dist/{src → cjs/src}/testutil/descriptor/psbt.utils.d.ts +0 -0
  303. /package/dist/{src → cjs/src}/testutil/fixtures.utils.d.ts +0 -0
  304. /package/dist/{src → cjs/src}/testutil/generatePayGoAttestationProof.utils.d.ts +0 -0
  305. /package/dist/{src → cjs/src}/testutil/index.d.ts +0 -0
  306. /package/dist/{src → cjs/src}/testutil/key.utils.d.ts +0 -0
  307. /package/dist/{src → cjs/src}/testutil/toPlainObject.utils.d.ts +0 -0
  308. /package/dist/{src → cjs/src}/testutil/trimMessagePrefix.d.ts +0 -0
  309. /package/dist/{src → cjs/src}/xOnlyPubkey.d.ts +0 -0
  310. /package/dist/{src → esm}/Output.d.ts.map +0 -0
  311. /package/dist/{src → esm}/bip322/index.d.ts.map +0 -0
  312. /package/dist/{src → esm}/bip322/toSign.d.ts.map +0 -0
  313. /package/dist/{src → esm}/bip322/toSpend.d.ts.map +0 -0
  314. /package/dist/{src → esm}/bip322/utils.d.ts.map +0 -0
  315. /package/dist/{src → esm}/bip322/verify.d.ts.map +0 -0
  316. /package/dist/{src → esm}/bip32utils.d.ts.map +0 -0
  317. /package/dist/{src → esm}/bip65/index.d.ts.map +0 -0
  318. /package/dist/{src → esm}/bip65/locktime.d.ts.map +0 -0
  319. /package/dist/{src → esm}/descriptor/DescriptorMap.d.ts.map +0 -0
  320. /package/dist/{src → esm}/descriptor/Output.d.ts.map +0 -0
  321. /package/dist/{src → esm}/descriptor/VirtualSize.d.ts.map +0 -0
  322. /package/dist/{src → esm}/descriptor/address.d.ts.map +0 -0
  323. /package/dist/{src → esm}/descriptor/derive.d.ts.map +0 -0
  324. /package/dist/{src → esm}/descriptor/fromFixedScriptWallet.d.ts.map +0 -0
  325. /package/dist/{src → esm}/descriptor/index.d.ts.map +0 -0
  326. /package/dist/{src → esm}/descriptor/parse/PatternMatcher.d.ts.map +0 -0
  327. /package/dist/{src → esm}/descriptor/psbt/assertSatisfiable.d.ts.map +0 -0
  328. /package/dist/{src → esm}/descriptor/psbt/createPsbt.d.ts.map +0 -0
  329. /package/dist/{src → esm}/descriptor/psbt/findDescriptors.d.ts.map +0 -0
  330. /package/dist/{src → esm}/descriptor/psbt/index.d.ts.map +0 -0
  331. /package/dist/{src → esm}/descriptor/psbt/parse.d.ts.map +0 -0
  332. /package/dist/{src → esm}/descriptor/psbt/sign.d.ts.map +0 -0
  333. /package/dist/{src → esm}/descriptor/psbt/wrap.d.ts.map +0 -0
  334. /package/dist/{src → esm}/dustThreshold.d.ts.map +0 -0
  335. /package/dist/{src → esm}/index.d.ts.map +0 -0
  336. /package/dist/{src → esm}/paygo/attestation.d.ts.map +0 -0
  337. /package/dist/{src → esm}/paygo/index.d.ts.map +0 -0
  338. /package/dist/{src → esm}/paygo/parsePayGoAttestation.d.ts.map +0 -0
  339. /package/dist/{src → esm}/paygo/psbt/Errors.d.ts.map +0 -0
  340. /package/dist/{src → esm}/paygo/psbt/index.d.ts.map +0 -0
  341. /package/dist/{src → esm}/paygo/psbt/payGoAddressProof.d.ts.map +0 -0
  342. /package/dist/{src → esm}/testutil/descriptor/descriptors.d.ts.map +0 -0
  343. /package/dist/{src → esm}/testutil/descriptor/index.d.ts.map +0 -0
  344. /package/dist/{src → esm}/testutil/descriptor/mock.utils.d.ts.map +0 -0
  345. /package/dist/{src → esm}/testutil/descriptor/psbt.utils.d.ts.map +0 -0
  346. /package/dist/{src → esm}/testutil/fixtures.utils.d.ts.map +0 -0
  347. /package/dist/{src → esm}/testutil/generatePayGoAttestationProof.utils.d.ts.map +0 -0
  348. /package/dist/{src → esm}/testutil/index.d.ts.map +0 -0
  349. /package/dist/{src → esm}/testutil/key.utils.d.ts.map +0 -0
  350. /package/dist/{src → esm}/testutil/toPlainObject.utils.d.ts.map +0 -0
  351. /package/dist/{src → esm}/testutil/trimMessagePrefix.d.ts.map +0 -0
  352. /package/dist/{src → esm}/xOnlyPubkey.d.ts.map +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Output.d.ts","sourceRoot":"","sources":["../../../src/Output.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,MAAM,CAAC,MAAM,GAAG,MAAM,IAAI;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AACF,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AACtC,KAAK,WAAW,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AACrC,KAAK,QAAQ,GAAG;IAAE,KAAK,EAAE,KAAK,CAAA;CAAE,CAAC;AAEjC;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,WAAW,EAAE,CAAC,SAAS,QAAQ,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,MAAM,IAAI,CAAC,CAEjG;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,WAAW,EAAE,CAAC,SAAS,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,SAAS,CASzG;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,CAE3D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,CAAC,WAAW,GAAG,QAAQ,CAAC,EAAE,GAAG,MAAM,CAE7E;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,WAAW,EAAE,CAAC,SAAS,QAAQ,EACtE,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAClB,MAAM,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,GAC5B,CAAC,EAAE,CAaL;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC"}
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isMaxOutput = isMaxOutput;
4
+ exports.getMaxOutput = getMaxOutput;
5
+ exports.getOutputSum = getOutputSum;
6
+ exports.getFixedOutputSum = getFixedOutputSum;
7
+ exports.toFixedOutputs = toFixedOutputs;
8
+ /**
9
+ * @return true if the output is a max output
10
+ */
11
+ function isMaxOutput(output) {
12
+ return output.value === 'max';
13
+ }
14
+ /**
15
+ * @return the max output if there is one
16
+ * @throws if there are multiple max outputs
17
+ */
18
+ function getMaxOutput(outputs) {
19
+ const max = outputs.filter((isMaxOutput));
20
+ if (max.length === 0) {
21
+ return undefined;
22
+ }
23
+ if (max.length > 1) {
24
+ throw new Error('Multiple max outputs');
25
+ }
26
+ return max[0];
27
+ }
28
+ /**
29
+ * @return the sum of the outputs
30
+ */
31
+ function getOutputSum(outputs) {
32
+ return outputs.reduce((sum, output) => sum + output.value, 0n);
33
+ }
34
+ /**
35
+ * @return the sum of the outputs that are not 'max'
36
+ */
37
+ function getFixedOutputSum(outputs) {
38
+ return getOutputSum(outputs.filter((o) => !isMaxOutput(o)));
39
+ }
40
+ /**
41
+ * @param outputs
42
+ * @param params
43
+ * @return the outputs with the 'max' output replaced with the max amount
44
+ */
45
+ function toFixedOutputs(outputs, params) {
46
+ // assert that there is at most one max output
47
+ const maxOutput = getMaxOutput(outputs);
48
+ return outputs.map((output) => {
49
+ if (isMaxOutput(output)) {
50
+ if (output !== maxOutput) {
51
+ throw new Error('illegal state');
52
+ }
53
+ return { ...output, value: params.maxAmount };
54
+ }
55
+ else {
56
+ return output;
57
+ }
58
+ });
59
+ }
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT3V0cHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL091dHB1dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQVdBLGtDQUVDO0FBTUQsb0NBU0M7QUFLRCxvQ0FFQztBQUtELDhDQUVDO0FBT0Qsd0NBZ0JDO0FBekREOztHQUVHO0FBQ0gsU0FBZ0IsV0FBVyxDQUE0QyxNQUFhO0lBQ2xGLE9BQU8sTUFBTSxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUM7QUFDaEMsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQWdCLFlBQVksQ0FBNEMsT0FBa0I7SUFDeEYsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFBLFdBQWlCLENBQUEsQ0FBQyxDQUFDO0lBQzlDLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNyQixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBQ0QsSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ25CLE1BQU0sSUFBSSxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsWUFBWSxDQUFDLE9BQXNCO0lBQ2pELE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ2pFLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLGlCQUFpQixDQUFDLE9BQW1DO0lBQ25FLE9BQU8sWUFBWSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQWUsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRSxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLGNBQWMsQ0FDNUIsT0FBa0IsRUFDbEIsTUFBNkI7SUFFN0IsOENBQThDO0lBQzlDLE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBTyxPQUFPLENBQUMsQ0FBQztJQUM5QyxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUssRUFBRTtRQUMvQixJQUFJLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ3hCLElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUN6QixNQUFNLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ25DLENBQUM7WUFDRCxPQUFPLEVBQUUsR0FBRyxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNoRCxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBPdXRwdXQ8VFZhbHVlID0gYmlnaW50PiA9IHtcbiAgc2NyaXB0OiBCdWZmZXI7XG4gIHZhbHVlOiBUVmFsdWU7XG59O1xuZXhwb3J0IHR5cGUgTWF4T3V0cHV0ID0gT3V0cHV0PCdtYXgnPjtcbnR5cGUgVmFsdWVCaWdJbnQgPSB7IHZhbHVlOiBiaWdpbnQgfTtcbnR5cGUgVmFsdWVNYXggPSB7IHZhbHVlOiAnbWF4JyB9O1xuXG4vKipcbiAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgb3V0cHV0IGlzIGEgbWF4IG91dHB1dFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNNYXhPdXRwdXQ8QSBleHRlbmRzIFZhbHVlQmlnSW50LCBCIGV4dGVuZHMgVmFsdWVNYXg+KG91dHB1dDogQSB8IEIpOiBvdXRwdXQgaXMgQiB7XG4gIHJldHVybiBvdXRwdXQudmFsdWUgPT09ICdtYXgnO1xufVxuXG4vKipcbiAqIEByZXR1cm4gdGhlIG1heCBvdXRwdXQgaWYgdGhlcmUgaXMgb25lXG4gKiBAdGhyb3dzIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBtYXggb3V0cHV0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWF4T3V0cHV0PEEgZXh0ZW5kcyBWYWx1ZUJpZ0ludCwgQiBleHRlbmRzIFZhbHVlTWF4PihvdXRwdXRzOiAoQSB8IEIpW10pOiBCIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgbWF4ID0gb3V0cHV0cy5maWx0ZXIoaXNNYXhPdXRwdXQ8QSwgQj4pO1xuICBpZiAobWF4Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKG1heC5sZW5ndGggPiAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNdWx0aXBsZSBtYXggb3V0cHV0cycpO1xuICB9XG4gIHJldHVybiBtYXhbMF07XG59XG5cbi8qKlxuICogQHJldHVybiB0aGUgc3VtIG9mIHRoZSBvdXRwdXRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRPdXRwdXRTdW0ob3V0cHV0czogVmFsdWVCaWdJbnRbXSk6IGJpZ2ludCB7XG4gIHJldHVybiBvdXRwdXRzLnJlZHVjZSgoc3VtLCBvdXRwdXQpID0+IHN1bSArIG91dHB1dC52YWx1ZSwgMG4pO1xufVxuXG4vKipcbiAqIEByZXR1cm4gdGhlIHN1bSBvZiB0aGUgb3V0cHV0cyB0aGF0IGFyZSBub3QgJ21heCdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZpeGVkT3V0cHV0U3VtKG91dHB1dHM6IChWYWx1ZUJpZ0ludCB8IFZhbHVlTWF4KVtdKTogYmlnaW50IHtcbiAgcmV0dXJuIGdldE91dHB1dFN1bShvdXRwdXRzLmZpbHRlcigobyk6IG8gaXMgT3V0cHV0ID0+ICFpc01heE91dHB1dChvKSkpO1xufVxuXG4vKipcbiAqIEBwYXJhbSBvdXRwdXRzXG4gKiBAcGFyYW0gcGFyYW1zXG4gKiBAcmV0dXJuIHRoZSBvdXRwdXRzIHdpdGggdGhlICdtYXgnIG91dHB1dCByZXBsYWNlZCB3aXRoIHRoZSBtYXggYW1vdW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0ZpeGVkT3V0cHV0czxBIGV4dGVuZHMgVmFsdWVCaWdJbnQsIEIgZXh0ZW5kcyBWYWx1ZU1heD4oXG4gIG91dHB1dHM6IChBIHwgQilbXSxcbiAgcGFyYW1zOiB7IG1heEFtb3VudDogYmlnaW50IH1cbik6IEFbXSB7XG4gIC8vIGFzc2VydCB0aGF0IHRoZXJlIGlzIGF0IG1vc3Qgb25lIG1heCBvdXRwdXRcbiAgY29uc3QgbWF4T3V0cHV0ID0gZ2V0TWF4T3V0cHV0PEEsIEI+KG91dHB1dHMpO1xuICByZXR1cm4gb3V0cHV0cy5tYXAoKG91dHB1dCk6IEEgPT4ge1xuICAgIGlmIChpc01heE91dHB1dChvdXRwdXQpKSB7XG4gICAgICBpZiAob3V0cHV0ICE9PSBtYXhPdXRwdXQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbGxlZ2FsIHN0YXRlJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4geyAuLi5vdXRwdXQsIHZhbHVlOiBwYXJhbXMubWF4QW1vdW50IH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IHR5cGUgUHJldk91dHB1dCA9IHtcbiAgaGFzaDogc3RyaW5nO1xuICBpbmRleDogbnVtYmVyO1xuICB3aXRuZXNzVXR4bzogT3V0cHV0O1xufTtcbiJdfQ==
@@ -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;AACxB,cAAc,UAAU,CAAC"}
@@ -18,4 +18,4 @@ __exportStar(require("./toSpend"), exports);
18
18
  __exportStar(require("./toSign"), exports);
19
19
  __exportStar(require("./utils"), exports);
20
20
  __exportStar(require("./verify"), exports);
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmlwMzIyL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw0Q0FBMEI7QUFDMUIsMkNBQXlCO0FBQ3pCLDBDQUF3QjtBQUN4QiwyQ0FBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3RvU3BlbmQnO1xuZXhwb3J0ICogZnJvbSAnLi90b1NpZ24nO1xuZXhwb3J0ICogZnJvbSAnLi91dGlscyc7XG5leHBvcnQgKiBmcm9tICcuL3ZlcmlmeSc7XG4iXX0=
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYmlwMzIyL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw0Q0FBMEI7QUFDMUIsMkNBQXlCO0FBQ3pCLDBDQUF3QjtBQUN4QiwyQ0FBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3RvU3BlbmQnO1xuZXhwb3J0ICogZnJvbSAnLi90b1NpZ24nO1xuZXhwb3J0ICogZnJvbSAnLi91dGlscyc7XG5leHBvcnQgKiBmcm9tICcuL3ZlcmlmeSc7XG4iXX0=
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toSign.d.ts","sourceRoot":"","sources":["../../../../src/bip322/toSign.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAyB,MAAM,sBAAsB,CAAC;AAM1E,MAAM,MAAM,cAAc,GAAG;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AACF,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAEzC;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,cAAc,CAAC,EAAE,KAAK,CAAC,cAAc,EACrC,OAAO,yCAAmB,GACzB,KAAK,CAAC,QAAQ,CAmBhB;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,cAAc,EAAE,GAAG,SAAa,GAAG,IAAI,CA6BlH;AAED,wBAAgB,+BAA+B,CAC7C,IAAI,EAAE,KAAK,CAAC,QAAQ,EACpB,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,KAAK,CAAC,cAAc,EACpC,QAAQ,EAAE,KAAK,CAAC,QAAQ,GACvB,IAAI,CA0EN"}
@@ -0,0 +1,126 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MAX_NUM_BIP322_INPUTS = void 0;
4
+ exports.createBaseToSignPsbt = createBaseToSignPsbt;
5
+ exports.addBip322Input = addBip322Input;
6
+ exports.addBip322InputWithChainAndIndex = addBip322InputWithChainAndIndex;
7
+ const utxo_lib_1 = require("@bitgo-beta/utxo-lib");
8
+ const outputScripts_1 = require("@bitgo-beta/utxo-lib/dist/src/bitgo/outputScripts");
9
+ const utils_1 = require("./utils");
10
+ const toSpend_1 = require("./toSpend");
11
+ exports.MAX_NUM_BIP322_INPUTS = 200;
12
+ /**
13
+ * Create the base PSBT for the to_sign transaction for BIP322 signing.
14
+ * There will be ever 1 output.
15
+ */
16
+ function createBaseToSignPsbt(rootWalletKeys, network = utxo_lib_1.networks.bitcoin) {
17
+ // Create PSBT object for constructing the transaction
18
+ const psbt = utxo_lib_1.bitgo.createPsbtForNetwork({ network });
19
+ // Set default value for nVersion and nLockTime
20
+ psbt.setVersion(0); // nVersion = 0
21
+ psbt.setLocktime(0); // nLockTime = 0
22
+ // Set the output
23
+ psbt.addOutput({
24
+ value: BigInt(0), // vout[0].nValue = 0
25
+ script: Buffer.from([0x6a]), // vout[0].scriptPubKey = OP_RETURN
26
+ });
27
+ // If rootWalletKeys are provided, add them to the PSBT as global xpubs
28
+ if (rootWalletKeys) {
29
+ utxo_lib_1.bitgo.addXpubsToPsbt(psbt, rootWalletKeys);
30
+ }
31
+ return psbt;
32
+ }
33
+ /**
34
+ * Add a BIP322 input to the PSBT.
35
+ * Source implementation:
36
+ * https://github.com/bitcoin/bips/blob/master/bip-0322.mediawiki#full
37
+ *
38
+ * @param {string} message - The message that is hashed into the `to_spend` transaction.
39
+ * @param {AddressDetails} addressDetails - The details of the address, including redeemScript and/or witnessScript.
40
+ * @param {string} [tag=BIP322_TAG] - The tag to use for hashing, defaults to BIP322_TAG.
41
+ * @returns {Psbt} - The hex representation of the constructed PSBT.
42
+ */
43
+ function addBip322Input(psbt, message, addressDetails, tag = toSpend_1.BIP322_TAG) {
44
+ const toSpendTx = (0, toSpend_1.buildToSpendTransaction)(addressDetails.scriptPubKey, message, tag);
45
+ if (psbt.data.inputs.length >= exports.MAX_NUM_BIP322_INPUTS) {
46
+ throw new Error(`Exceeded maximum number of BIP322 inputs (${exports.MAX_NUM_BIP322_INPUTS})`);
47
+ }
48
+ psbt.addInput({
49
+ hash: toSpendTx.getId(), // vin[0].prevout.hash = to_spend.txid
50
+ index: 0, // vin[0].prevout.n = 0
51
+ sequence: 0, // vin[0].nSequence = 0
52
+ nonWitnessUtxo: toSpendTx.toBuffer(), // previous transaction for us to rebuild later to verify
53
+ sighashType: utxo_lib_1.Transaction.SIGHASH_ALL,
54
+ });
55
+ const inputIndex = psbt.data.inputs.length - 1;
56
+ psbt.updateInput(inputIndex, {
57
+ witnessUtxo: { value: BigInt(0), script: addressDetails.scriptPubKey },
58
+ });
59
+ if (addressDetails.redeemScript) {
60
+ psbt.updateInput(inputIndex, { redeemScript: addressDetails.redeemScript });
61
+ }
62
+ if (addressDetails.witnessScript) {
63
+ psbt.updateInput(inputIndex, {
64
+ witnessScript: addressDetails.witnessScript,
65
+ });
66
+ }
67
+ // Add the message as a proprietary key value to the PSBT so we can verify it later
68
+ (0, utils_1.addBip322ProofMessage)(psbt, inputIndex, Buffer.from(message));
69
+ }
70
+ function addBip322InputWithChainAndIndex(psbt, message, rootWalletKeys, scriptId) {
71
+ const scriptType = utxo_lib_1.bitgo.scriptTypeForChain(scriptId.chain);
72
+ const walletKeys = rootWalletKeys.deriveForChainAndIndex(scriptId.chain, scriptId.index);
73
+ const output = utxo_lib_1.bitgo.outputScripts.createOutputScript2of3(walletKeys.publicKeys, utxo_lib_1.bitgo.scriptTypeForChain(scriptId.chain));
74
+ addBip322Input(psbt, message, {
75
+ scriptPubKey: output.scriptPubKey,
76
+ redeemScript: output.redeemScript,
77
+ witnessScript: output.witnessScript,
78
+ });
79
+ const inputIndex = psbt.data.inputs.length - 1;
80
+ // When adding the taproot metadata, we assume that we are NOT using the backup path
81
+ // For script type p2tr, it means that we are using signer and bitgo keys when creating the tap tree
82
+ // spending paths. For p2trMusig2, it means that we are using the taproot key path spending
83
+ const keyNames = ['user', 'bitgo'];
84
+ if (scriptType === 'p2tr') {
85
+ const { controlBlock, witnessScript, leafVersion, leafHash } = utxo_lib_1.bitgo.outputScripts.createSpendScriptP2tr(walletKeys.publicKeys, [walletKeys.user.publicKey, walletKeys.bitgo.publicKey]);
86
+ psbt.updateInput(inputIndex, {
87
+ tapLeafScript: [{ controlBlock, script: witnessScript, leafVersion }],
88
+ });
89
+ psbt.updateInput(inputIndex, {
90
+ tapBip32Derivation: keyNames.map((key) => ({
91
+ leafHashes: [leafHash],
92
+ pubkey: (0, outputScripts_1.toXOnlyPublicKey)(walletKeys[key].publicKey),
93
+ path: rootWalletKeys.getDerivationPath(rootWalletKeys[key], scriptId.chain, scriptId.index),
94
+ masterFingerprint: rootWalletKeys[key].fingerprint,
95
+ })),
96
+ });
97
+ }
98
+ else if (scriptType === 'p2trMusig2') {
99
+ const { internalPubkey: tapInternalKey, outputPubkey: tapOutputKey, taptreeRoot, } = utxo_lib_1.bitgo.outputScripts.createKeyPathP2trMusig2(walletKeys.publicKeys);
100
+ const participantsKeyValData = utxo_lib_1.bitgo.musig2.encodePsbtMusig2Participants({
101
+ tapOutputKey,
102
+ tapInternalKey,
103
+ participantPubKeys: [walletKeys.user.publicKey, walletKeys.bitgo.publicKey],
104
+ });
105
+ utxo_lib_1.bitgo.addProprietaryKeyValuesFromUnknownKeyValues(psbt, 'input', inputIndex, participantsKeyValData);
106
+ psbt.updateInput(inputIndex, {
107
+ tapInternalKey: tapInternalKey,
108
+ });
109
+ psbt.updateInput(inputIndex, {
110
+ tapMerkleRoot: taptreeRoot,
111
+ });
112
+ psbt.updateInput(inputIndex, {
113
+ tapBip32Derivation: keyNames.map((key) => ({
114
+ leafHashes: [],
115
+ pubkey: (0, outputScripts_1.toXOnlyPublicKey)(walletKeys[key].publicKey),
116
+ path: rootWalletKeys.getDerivationPath(rootWalletKeys[key], scriptId.chain, scriptId.index),
117
+ masterFingerprint: rootWalletKeys[key].fingerprint,
118
+ })),
119
+ });
120
+ }
121
+ else {
122
+ // Add bip32 derivation information for the input
123
+ psbt.updateInput(inputIndex, utxo_lib_1.bitgo.getPsbtBip32DerivationOutputUpdate(rootWalletKeys, walletKeys, utxo_lib_1.bitgo.scriptTypeForChain(scriptId.chain)));
124
+ }
125
+ }
126
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9TaWduLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2JpcDMyMi90b1NpZ24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBaUJBLG9EQXNCQztBQVlELHdDQTZCQztBQUVELDBFQStFQztBQWpLRCxtREFBMEU7QUFDMUUscUZBQXFGO0FBRXJGLG1DQUFnRDtBQUNoRCx1Q0FBZ0U7QUFPbkQsUUFBQSxxQkFBcUIsR0FBRyxHQUFHLENBQUM7QUFFekM7OztHQUdHO0FBQ0gsU0FBZ0Isb0JBQW9CLENBQ2xDLGNBQXFDLEVBQ3JDLE9BQU8sR0FBRyxtQkFBUSxDQUFDLE9BQU87SUFFMUIsc0RBQXNEO0lBQ3RELE1BQU0sSUFBSSxHQUFHLGdCQUFLLENBQUMsb0JBQW9CLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ3JELCtDQUErQztJQUMvQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZTtJQUNuQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCO0lBRXJDLGlCQUFpQjtJQUNqQixJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ2IsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxxQkFBcUI7UUFDdkMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLG1DQUFtQztLQUNqRSxDQUFDLENBQUM7SUFFSCx1RUFBdUU7SUFDdkUsSUFBSSxjQUFjLEVBQUUsQ0FBQztRQUNuQixnQkFBSyxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILFNBQWdCLGNBQWMsQ0FBQyxJQUFVLEVBQUUsT0FBZSxFQUFFLGNBQThCLEVBQUUsR0FBRyxHQUFHLG9C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dHdvcmtzLCBUcmFuc2FjdGlvbiB9IGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCB7IHRvWE9ubHlQdWJsaWNLZXkgfSBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYi9kaXN0L3NyYy9iaXRnby9vdXRwdXRTY3JpcHRzJztcblxuaW1wb3J0IHsgYWRkQmlwMzIyUHJvb2ZNZXNzYWdlIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBCSVAzMjJfVEFHLCBidWlsZFRvU3BlbmRUcmFuc2FjdGlvbiB9IGZyb20gJy4vdG9TcGVuZCc7XG5cbmV4cG9ydCB0eXBlIEFkZHJlc3NEZXRhaWxzID0ge1xuICByZWRlZW1TY3JpcHQ/OiBCdWZmZXI7XG4gIHdpdG5lc3NTY3JpcHQ/OiBCdWZmZXI7XG4gIHNjcmlwdFB1YktleTogQnVmZmVyO1xufTtcbmV4cG9ydCBjb25zdCBNQVhfTlVNX0JJUDMyMl9JTlBVVFMgPSAyMDA7XG5cbi8qKlxuICogQ3JlYXRlIHRoZSBiYXNlIFBTQlQgZm9yIHRoZSB0b19zaWduIHRyYW5zYWN0aW9uIGZvciBCSVAzMjIgc2lnbmluZy5cbiAqIFRoZXJlIHdpbGwgYmUgZXZlciAxIG91dHB1dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUJhc2VUb1NpZ25Qc2J0KFxuICByb290V2FsbGV0S2V5cz86IGJpdGdvLlJvb3RXYWxsZXRLZXlzLFxuICBuZXR3b3JrID0gbmV0d29ya3MuYml0Y29pblxuKTogYml0Z28uVXR4b1BzYnQge1xuICAvLyBDcmVhdGUgUFNCVCBvYmplY3QgZm9yIGNvbnN0cnVjdGluZyB0aGUgdHJhbnNhY3Rpb25cbiAgY29uc3QgcHNidCA9IGJpdGdvLmNyZWF0ZVBzYnRGb3JOZXR3b3JrKHsgbmV0d29yayB9KTtcbiAgLy8gU2V0IGRlZmF1bHQgdmFsdWUgZm9yIG5WZXJzaW9uIGFuZCBuTG9ja1RpbWVcbiAgcHNidC5zZXRWZXJzaW9uKDApOyAvLyBuVmVyc2lvbiA9IDBcbiAgcHNidC5zZXRMb2NrdGltZSgwKTsgLy8gbkxvY2tUaW1lID0gMFxuXG4gIC8vIFNldCB0aGUgb3V0cHV0XG4gIHBzYnQuYWRkT3V0cHV0KHtcbiAgICB2YWx1ZTogQmlnSW50KDApLCAvLyB2b3V0WzBdLm5WYWx1ZSA9IDBcbiAgICBzY3JpcHQ6IEJ1ZmZlci5mcm9tKFsweDZhXSksIC8vIHZvdXRbMF0uc2NyaXB0UHViS2V5ID0gT1BfUkVUVVJOXG4gIH0pO1xuXG4gIC8vIElmIHJvb3RXYWxsZXRLZXlzIGFyZSBwcm92aWRlZCwgYWRkIHRoZW0gdG8gdGhlIFBTQlQgYXMgZ2xvYmFsIHhwdWJzXG4gIGlmIChyb290V2FsbGV0S2V5cykge1xuICAgIGJpdGdvLmFkZFhwdWJzVG9Qc2J0KHBzYnQsIHJvb3RXYWxsZXRLZXlzKTtcbiAgfVxuXG4gIHJldHVybiBwc2J0O1xufVxuXG4vKipcbiAqIEFkZCBhIEJJUDMyMiBpbnB1dCB0byB0aGUgUFNCVC5cbiAqIFNvdXJjZSBpbXBsZW1lbnRhdGlvbjpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9iaXRjb2luL2JpcHMvYmxvYi9tYXN0ZXIvYmlwLTAzMjIubWVkaWF3aWtpI2Z1bGxcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSAtIFRoZSBtZXNzYWdlIHRoYXQgaXMgaGFzaGVkIGludG8gdGhlIGB0b19zcGVuZGAgdHJhbnNhY3Rpb24uXG4gKiBAcGFyYW0ge0FkZHJlc3NEZXRhaWxzfSBhZGRyZXNzRGV0YWlscyAtIFRoZSBkZXRhaWxzIG9mIHRoZSBhZGRyZXNzLCBpbmNsdWRpbmcgcmVkZWVtU2NyaXB0IGFuZC9vciB3aXRuZXNzU2NyaXB0LlxuICogQHBhcmFtIHtzdHJpbmd9IFt0YWc9QklQMzIyX1RBR10gLSBUaGUgdGFnIHRvIHVzZSBmb3IgaGFzaGluZywgZGVmYXVsdHMgdG8gQklQMzIyX1RBRy5cbiAqIEByZXR1cm5zIHtQc2J0fSAtIFRoZSBoZXggcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbnN0cnVjdGVkIFBTQlQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRCaXAzMjJJbnB1dChwc2J0OiBQc2J0LCBtZXNzYWdlOiBzdHJpbmcsIGFkZHJlc3NEZXRhaWxzOiBBZGRyZXNzRGV0YWlscywgdGFnID0gQklQMzIyX1RBRyk6IHZvaWQge1xuICBjb25zdCB0b1NwZW5kVHggPSBidWlsZFRvU3BlbmRUcmFuc2FjdGlvbihhZGRyZXNzRGV0YWlscy5zY3JpcHRQdWJLZXksIG1lc3NhZ2UsIHRhZyk7XG4gIGlmIChwc2J0LmRhdGEuaW5wdXRzLmxlbmd0aCA+PSBNQVhfTlVNX0JJUDMyMl9JTlBVVFMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4Y2VlZGVkIG1heGltdW0gbnVtYmVyIG9mIEJJUDMyMiBpbnB1dHMgKCR7TUFYX05VTV9CSVAzMjJfSU5QVVRTfSlgKTtcbiAgfVxuXG4gIHBzYnQuYWRkSW5wdXQoe1xuICAgIGhhc2g6IHRvU3BlbmRUeC5nZXRJZCgpLCAvLyB2aW5bMF0ucHJldm91dC5oYXNoID0gdG9fc3BlbmQudHhpZFxuICAgIGluZGV4OiAwLCAvLyB2aW5bMF0ucHJldm91dC5uID0gMFxuICAgIHNlcXVlbmNlOiAwLCAvLyB2aW5bMF0ublNlcXVlbmNlID0gMFxuICAgIG5vbldpdG5lc3NVdHhvOiB0b1NwZW5kVHgudG9CdWZmZXIoKSwgLy8gcHJldmlvdXMgdHJhbnNhY3Rpb24gZm9yIHVzIHRvIHJlYnVpbGQgbGF0ZXIgdG8gdmVyaWZ5XG4gICAgc2lnaGFzaFR5cGU6IFRyYW5zYWN0aW9uLlNJR0hBU0hfQUxMLFxuICB9KTtcbiAgY29uc3QgaW5wdXRJbmRleCA9IHBzYnQuZGF0YS5pbnB1dHMubGVuZ3RoIC0gMTtcbiAgcHNidC51cGRhdGVJbnB1dChpbnB1dEluZGV4LCB7XG4gICAgd2l0bmVzc1V0eG86IHsgdmFsdWU6IEJpZ0ludCgwKSwgc2NyaXB0OiBhZGRyZXNzRGV0YWlscy5zY3JpcHRQdWJLZXkgfSxcbiAgfSk7XG5cbiAgaWYgKGFkZHJlc3NEZXRhaWxzLnJlZGVlbVNjcmlwdCkge1xuICAgIHBzYnQudXBkYXRlSW5wdXQoaW5wdXRJbmRleCwgeyByZWRlZW1TY3JpcHQ6IGFkZHJlc3NEZXRhaWxzLnJlZGVlbVNjcmlwdCB9KTtcbiAgfVxuICBpZiAoYWRkcmVzc0RldGFpbHMud2l0bmVzc1NjcmlwdCkge1xuICAgIHBzYnQudXBkYXRlSW5wdXQoaW5wdXRJbmRleCwge1xuICAgICAgd2l0bmVzc1NjcmlwdDogYWRkcmVzc0RldGFpbHMud2l0bmVzc1NjcmlwdCxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEFkZCB0aGUgbWVzc2FnZSBhcyBhIHByb3ByaWV0YXJ5IGtleSB2YWx1ZSB0byB0aGUgUFNCVCBzbyB3ZSBjYW4gdmVyaWZ5IGl0IGxhdGVyXG4gIGFkZEJpcDMyMlByb29mTWVzc2FnZShwc2J0LCBpbnB1dEluZGV4LCBCdWZmZXIuZnJvbShtZXNzYWdlKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRCaXAzMjJJbnB1dFdpdGhDaGFpbkFuZEluZGV4KFxuICBwc2J0OiBiaXRnby5VdHhvUHNidCxcbiAgbWVzc2FnZTogc3RyaW5nLFxuICByb290V2FsbGV0S2V5czogYml0Z28uUm9vdFdhbGxldEtleXMsXG4gIHNjcmlwdElkOiBiaXRnby5TY3JpcHRJZFxuKTogdm9pZCB7XG4gIGNvbnN0IHNjcmlwdFR5cGUgPSBiaXRnby5zY3JpcHRUeXBlRm9yQ2hhaW4oc2NyaXB0SWQuY2hhaW4pO1xuICBjb25zdCB3YWxsZXRLZXlzID0gcm9vdFdhbGxldEtleXMuZGVyaXZlRm9yQ2hhaW5BbmRJbmRleChzY3JpcHRJZC5jaGFpbiwgc2NyaXB0SWQuaW5kZXgpO1xuICBjb25zdCBvdXRwdXQgPSBiaXRnby5vdXRwdXRTY3JpcHRzLmNyZWF0ZU91dHB1dFNjcmlwdDJvZjMoXG4gICAgd2FsbGV0S2V5cy5wdWJsaWNLZXlzLFxuICAgIGJpdGdvLnNjcmlwdFR5cGVGb3JDaGFpbihzY3JpcHRJZC5jaGFpbilcbiAgKTtcblxuICBhZGRCaXAzMjJJbnB1dChwc2J0IGFzIFBzYnQsIG1lc3NhZ2UsIHtcbiAgICBzY3JpcHRQdWJLZXk6IG91dHB1dC5zY3JpcHRQdWJLZXksXG4gICAgcmVkZWVtU2NyaXB0OiBvdXRwdXQucmVkZWVtU2NyaXB0LFxuICAgIHdpdG5lc3NTY3JpcHQ6IG91dHB1dC53aXRuZXNzU2NyaXB0LFxuICB9KTtcblxuICBjb25zdCBpbnB1dEluZGV4ID0gcHNidC5kYXRhLmlucHV0cy5sZW5ndGggLSAxO1xuXG4gIC8vIFdoZW4gYWRkaW5nIHRoZSB0YXByb290IG1ldGFkYXRhLCB3ZSBhc3N1bWUgdGhhdCB3ZSBhcmUgTk9UIHVzaW5nIHRoZSBiYWNrdXAgcGF0aFxuICAvLyBGb3Igc2NyaXB0IHR5cGUgcDJ0ciwgaXQgbWVhbnMgdGhhdCB3ZSBhcmUgdXNpbmcgc2lnbmVyIGFuZCBiaXRnbyBrZXlzIHdoZW4gY3JlYXRpbmcgdGhlIHRhcCB0cmVlXG4gIC8vIHNwZW5kaW5nIHBhdGhzLiBGb3IgcDJ0ck11c2lnMiwgaXQgbWVhbnMgdGhhdCB3ZSBhcmUgdXNpbmcgdGhlIHRhcHJvb3Qga2V5IHBhdGggc3BlbmRpbmdcbiAgY29uc3Qga2V5TmFtZXMgPSBbJ3VzZXInLCAnYml0Z28nXSBhcyBiaXRnby5LZXlOYW1lW107XG4gIGlmIChzY3JpcHRUeXBlID09PSAncDJ0cicpIHtcbiAgICBjb25zdCB7IGNvbnRyb2xCbG9jaywgd2l0bmVzc1NjcmlwdCwgbGVhZlZlcnNpb24sIGxlYWZIYXNoIH0gPSBiaXRnby5vdXRwdXRTY3JpcHRzLmNyZWF0ZVNwZW5kU2NyaXB0UDJ0cihcbiAgICAgIHdhbGxldEtleXMucHVibGljS2V5cyxcbiAgICAgIFt3YWxsZXRLZXlzLnVzZXIucHVibGljS2V5LCB3YWxsZXRLZXlzLmJpdGdvLnB1YmxpY0tleV1cbiAgICApO1xuICAgIHBzYnQudXBkYXRlSW5wdXQoaW5wdXRJbmRleCwge1xuICAgICAgdGFwTGVhZlNjcmlwdDogW3sgY29udHJvbEJsb2NrLCBzY3JpcHQ6IHdpdG5lc3NTY3JpcHQsIGxlYWZWZXJzaW9uIH1dLFxuICAgIH0pO1xuXG4gICAgcHNidC51cGRhdGVJbnB1dChpbnB1dEluZGV4LCB7XG4gICAgICB0YXBCaXAzMkRlcml2YXRpb246IGtleU5hbWVzLm1hcCgoa2V5KSA9PiAoe1xuICAgICAgICBsZWFmSGFzaGVzOiBbbGVhZkhhc2hdLFxuICAgICAgICBwdWJrZXk6IHRvWE9ubHlQdWJsaWNLZXkod2FsbGV0S2V5c1trZXldLnB1YmxpY0tleSksXG4gICAgICAgIHBhdGg6IHJvb3RXYWxsZXRLZXlzLmdldERlcml2YXRpb25QYXRoKHJvb3RXYWxsZXRLZXlzW2tleV0sIHNjcmlwdElkLmNoYWluLCBzY3JpcHRJZC5pbmRleCksXG4gICAgICAgIG1hc3RlckZpbmdlcnByaW50OiByb290V2FsbGV0S2V5c1trZXldLmZpbmdlcnByaW50LFxuICAgICAgfSkpLFxuICAgIH0pO1xuICB9IGVsc2UgaWYgKHNjcmlwdFR5cGUgPT09ICdwMnRyTXVzaWcyJykge1xuICAgIGNvbnN0IHtcbiAgICAgIGludGVybmFsUHVia2V5OiB0YXBJbnRlcm5hbEtleSxcbiAgICAgIG91dHB1dFB1YmtleTogdGFwT3V0cHV0S2V5LFxuICAgICAgdGFwdHJlZVJvb3QsXG4gICAgfSA9IGJpdGdvLm91dHB1dFNjcmlwdHMuY3JlYXRlS2V5UGF0aFAydHJNdXNpZzIod2FsbGV0S2V5cy5wdWJsaWNLZXlzKTtcblxuICAgIGNvbnN0IHBhcnRpY2lwYW50c0tleVZhbERhdGEgPSBiaXRnby5tdXNpZzIuZW5jb2RlUHNidE11c2lnMlBhcnRpY2lwYW50cyh7XG4gICAgICB0YXBPdXRwdXRLZXksXG4gICAgICB0YXBJbnRlcm5hbEtleSxcbiAgICAgIHBhcnRpY2lwYW50UHViS2V5czogW3dhbGxldEtleXMudXNlci5wdWJsaWNLZXksIHdhbGxldEtleXMuYml0Z28ucHVibGljS2V5XSxcbiAgICB9KTtcbiAgICBiaXRnby5hZGRQcm9wcmlldGFyeUtleVZhbHVlc0Zyb21Vbmtub3duS2V5VmFsdWVzKHBzYnQsICdpbnB1dCcsIGlucHV0SW5kZXgsIHBhcnRpY2lwYW50c0tleVZhbERhdGEpO1xuXG4gICAgcHNidC51cGRhdGVJbnB1dChpbnB1dEluZGV4LCB7XG4gICAgICB0YXBJbnRlcm5hbEtleTogdGFwSW50ZXJuYWxLZXksXG4gICAgfSk7XG5cbiAgICBwc2J0LnVwZGF0ZUlucHV0KGlucHV0SW5kZXgsIHtcbiAgICAgIHRhcE1lcmtsZVJvb3Q6IHRhcHRyZWVSb290LFxuICAgIH0pO1xuXG4gICAgcHNidC51cGRhdGVJbnB1dChpbnB1dEluZGV4LCB7XG4gICAgICB0YXBCaXAzMkRlcml2YXRpb246IGtleU5hbWVzLm1hcCgoa2V5KSA9PiAoe1xuICAgICAgICBsZWFmSGFzaGVzOiBbXSxcbiAgICAgICAgcHVia2V5OiB0b1hPbmx5UHVibGljS2V5KHdhbGxldEtleXNba2V5XS5wdWJsaWNLZXkpLFxuICAgICAgICBwYXRoOiByb290V2FsbGV0S2V5cy5nZXREZXJpdmF0aW9uUGF0aChyb290V2FsbGV0S2V5c1trZXldLCBzY3JpcHRJZC5jaGFpbiwgc2NyaXB0SWQuaW5kZXgpLFxuICAgICAgICBtYXN0ZXJGaW5nZXJwcmludDogcm9vdFdhbGxldEtleXNba2V5XS5maW5nZXJwcmludCxcbiAgICAgIH0pKSxcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBBZGQgYmlwMzIgZGVyaXZhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIGlucHV0XG4gICAgcHNidC51cGRhdGVJbnB1dChcbiAgICAgIGlucHV0SW5kZXgsXG4gICAgICBiaXRnby5nZXRQc2J0QmlwMzJEZXJpdmF0aW9uT3V0cHV0VXBkYXRlKHJvb3RXYWxsZXRLZXlzLCB3YWxsZXRLZXlzLCBiaXRnby5zY3JpcHRUeXBlRm9yQ2hhaW4oc2NyaXB0SWQuY2hhaW4pKVxuICAgICk7XG4gIH1cbn1cbiJdfQ==
@@ -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;AAE1E,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,CAOrB"}
@@ -0,0 +1,72 @@
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
+ exports.BIP322_TAG = 'BIP0322-signed-message';
10
+ /**
11
+ * Perform a tagged hash
12
+ *
13
+ * @param {string | Buffer} message - The message to hash as a Buffer or utf-8 string
14
+ * @param {Buffer} [tag=BIP322_TAG] - The tag to use for hashing, defaults to BIP322_TAG.
15
+ * @returns {Buffer} - The resulting hash of the message with the tag.
16
+ */
17
+ function hashMessageWithTag(message, tag = exports.BIP322_TAG) {
18
+ // Compute the message hash - SHA256(SHA256(tag) || SHA256(tag) || message)
19
+ // Reference: https://github.com/bitcoin/bips/blob/master/bip-0322.mediawiki#full
20
+ const tagHasher = new fast_sha256_1.Hash();
21
+ tagHasher.update(Buffer.from(exports.BIP322_TAG));
22
+ const tagHash = tagHasher.digest();
23
+ const messageHasher = new fast_sha256_1.Hash();
24
+ messageHasher.update(tagHash);
25
+ messageHasher.update(tagHash);
26
+ messageHasher.update(Buffer.from(message));
27
+ const messageHash = messageHasher.digest();
28
+ return Buffer.from(messageHash);
29
+ }
30
+ /**
31
+ * Build a BIP322 "to spend" transaction
32
+ * Source: https://github.com/bitcoin/bips/blob/master/bip-0322.mediawiki#full
33
+ *
34
+ * @param {Buffer} scriptPubKey - The scriptPubKey to use for the output
35
+ * @param {string | Buffer} message - The message to include in the transaction
36
+ * @param {Buffer} [tag=BIP322_TAG] - The tag to use for hashing, defaults to BIP322_TAG.
37
+ * @returns {Transaction} - The constructed transaction
38
+ */
39
+ function buildToSpendTransaction(scriptPubKey, message, tag = exports.BIP322_TAG) {
40
+ // Create PSBT object for constructing the transaction
41
+ const psbt = new utxo_lib_1.Psbt();
42
+ // Set default value for nVersion and nLockTime
43
+ psbt.setVersion(0); // nVersion = 0
44
+ psbt.setLocktime(0); // nLockTime = 0
45
+ // Compute the message hash - SHA256(SHA256(tag) || SHA256(tag) || message)
46
+ const messageHash = hashMessageWithTag(message, tag);
47
+ // Construct the scriptSig - OP_0 PUSH32[ message_hash ]
48
+ const scriptSigPartOne = new Uint8Array([0x00, 0x20]); // OP_0 PUSH32
49
+ const scriptSig = new Uint8Array(scriptSigPartOne.length + messageHash.length);
50
+ scriptSig.set(scriptSigPartOne);
51
+ scriptSig.set(messageHash, scriptSigPartOne.length);
52
+ // Set the input
53
+ psbt.addInput({
54
+ hash: '0'.repeat(64), // vin[0].prevout.hash = 0000...000
55
+ index: 0xffffffff, // vin[0].prevout.n = 0xFFFFFFFF
56
+ sequence: 0, // vin[0].nSequence = 0
57
+ finalScriptSig: Buffer.from(scriptSig), // vin[0].scriptSig = OP_0 PUSH32[ message_hash ]
58
+ witnessScript: Buffer.from([]), // vin[0].scriptWitness = []
59
+ });
60
+ // Set the output
61
+ psbt.addOutput({
62
+ value: BigInt(0), // vout[0].nValue = 0
63
+ script: scriptPubKey, // vout[0].scriptPubKey = message_challenge
64
+ });
65
+ // Return transaction
66
+ return psbt.extractTransaction();
67
+ }
68
+ function buildToSpendTransactionFromChainAndIndex(rootWalletKeys, chain, index, message, tag = exports.BIP322_TAG) {
69
+ const outputScript = utxo_lib_1.bitgo.outputScripts.createOutputScript2of3(rootWalletKeys.deriveForChainAndIndex(chain, index).publicKeys, utxo_lib_1.bitgo.scriptTypeForChain(chain), utxo_lib_1.networks.bitcoin);
70
+ return buildToSpendTransaction(outputScript.scriptPubKey, message, tag);
71
+ }
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9TcGVuZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9iaXAzMjIvdG9TcGVuZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFZQSxnREFZQztBQVdELDBEQWdDQztBQUVELDRGQWFDO0FBbEZELDZDQUFtQztBQUNuQyxtREFBMEU7QUFFN0QsUUFBQSxVQUFVLEdBQUcsd0JBQXdCLENBQUM7QUFFbkQ7Ozs7OztHQU1HO0FBQ0gsU0FBZ0Isa0JBQWtCLENBQUMsT0FBd0IsRUFBRSxHQUFHLEdBQUcsa0JBQVU7SUFDM0UsMkVBQTJFO0lBQzNFLGlGQUFpRjtJQUNqRixNQUFNLFNBQVMsR0FBRyxJQUFJLGtCQUFJLEVBQUUsQ0FBQztJQUM3QixTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQVUsQ0FBQyxDQUFDLENBQUM7SUFDMUMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ25DLE1BQU0sYUFBYSxHQUFHLElBQUksa0JBQUksRUFBRSxDQUFDO0lBQ2pDLGFBQWEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUIsYUFBYSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM5QixhQUFhLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUMzQyxNQUFNLFdBQVcsR0FBRyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDM0MsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ2xDLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQWdCLHVCQUF1QixDQUNyQyxZQUFvQixFQUNwQixPQUF3QixFQUN4QixHQUFHLEdBQUcsa0JBQVU7SUFFaEIsc0RBQXNEO0lBQ3RELE1BQU0sSUFBSSxHQUFHLElBQUksZUFBSSxFQUFFLENBQUM7SUFDeEIsK0NBQStDO0lBQy9DLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlO0lBQ25DLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0I7SUFDckMsMkVBQTJFO0lBQzNFLE1BQU0sV0FBVyxHQUFHLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNyRCx3REFBd0Q7SUFDeEQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYztJQUNyRSxNQUFNLFNBQVMsR0FBRyxJQUFJLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9FLFNBQVMsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNoQyxTQUFTLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwRCxnQkFBZ0I7SUFDaEIsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUNaLElBQUksRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLG1DQUFtQztRQUN6RCxLQUFLLEVBQUUsVUFBVSxFQUFFLGdDQUFnQztRQUNuRCxRQUFRLEVBQUUsQ0FBQyxFQUFFLHVCQUF1QjtRQUNwQyxjQUFjLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxpREFBaUQ7UUFDekYsYUFBYSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsNEJBQTRCO0tBQzdELENBQUMsQ0FBQztJQUNILGlCQUFpQjtJQUNqQixJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ2IsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxxQkFBcUI7UUFDdkMsTUFBTSxFQUFFLFlBQVksRUFBRSwyQ0FBMkM7S0FDbEUsQ0FBQyxDQUFDO0lBQ0gscUJBQXFCO0lBQ3JCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7QUFDbkMsQ0FBQztBQUVELFNBQWdCLHdDQUF3QyxDQUN0RCxjQUFvQyxFQUNwQyxLQUFzQixFQUN0QixLQUFhLEVBQ2IsT0FBd0IsRUFDeEIsR0FBRyxHQUFHLGtCQUFVO0lBRWhCLE1BQU0sWUFBWSxHQUFHLGdCQUFLLENBQUMsYUFBYSxDQUFDLHNCQUFzQixDQUM3RCxjQUFjLENBQUMsc0JBQXNCLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLFVBQVUsRUFDOUQsZ0JBQUssQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsRUFDL0IsbUJBQVEsQ0FBQyxPQUFPLENBQ2pCLENBQUM7SUFDRixPQUFPLHVCQUF1QixDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIYXNoIH0gZnJvbSAnZmFzdC1zaGEyNTYnO1xuaW1wb3J0IHsgUHNidCwgVHJhbnNhY3Rpb24sIGJpdGdvLCBuZXR3b3JrcyB9IGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcblxuZXhwb3J0IGNvbnN0IEJJUDMyMl9UQUcgPSAnQklQMDMyMi1zaWduZWQtbWVzc2FnZSc7XG5cbi8qKlxuICogUGVyZm9ybSBhIHRhZ2dlZCBoYXNoXG4gKlxuICogQHBhcmFtIHtzdHJpbmcgfCBCdWZmZXJ9IG1lc3NhZ2UgLSBUaGUgbWVzc2FnZSB0byBoYXNoIGFzIGEgQnVmZmVyIG9yIHV0Zi04IHN0cmluZ1xuICogQHBhcmFtIHtCdWZmZXJ9IFt0YWc9QklQMzIyX1RBR10gLSBUaGUgdGFnIHRvIHVzZSBmb3IgaGFzaGluZywgZGVmYXVsdHMgdG8gQklQMzIyX1RBRy5cbiAqIEByZXR1cm5zIHtCdWZmZXJ9IC0gVGhlIHJlc3VsdGluZyBoYXNoIG9mIHRoZSBtZXNzYWdlIHdpdGggdGhlIHRhZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc2hNZXNzYWdlV2l0aFRhZyhtZXNzYWdlOiBzdHJpbmcgfCBCdWZmZXIsIHRhZyA9IEJJUDMyMl9UQUcpOiBCdWZmZXIge1xuICAvLyBDb21wdXRlIHRoZSBtZXNzYWdlIGhhc2ggLSBTSEEyNTYoU0hBMjU2KHRhZykgfHwgU0hBMjU2KHRhZykgfHwgbWVzc2FnZSlcbiAgLy8gUmVmZXJlbmNlOiBodHRwczovL2dpdGh1Yi5jb20vYml0Y29pbi9iaXBzL2Jsb2IvbWFzdGVyL2JpcC0wMzIyLm1lZGlhd2lraSNmdWxsXG4gIGNvbnN0IHRhZ0hhc2hlciA9IG5ldyBIYXNoKCk7XG4gIHRhZ0hhc2hlci51cGRhdGUoQnVmZmVyLmZyb20oQklQMzIyX1RBRykpO1xuICBjb25zdCB0YWdIYXNoID0gdGFnSGFzaGVyLmRpZ2VzdCgpO1xuICBjb25zdCBtZXNzYWdlSGFzaGVyID0gbmV3IEhhc2goKTtcbiAgbWVzc2FnZUhhc2hlci51cGRhdGUodGFnSGFzaCk7XG4gIG1lc3NhZ2VIYXNoZXIudXBkYXRlKHRhZ0hhc2gpO1xuICBtZXNzYWdlSGFzaGVyLnVwZGF0ZShCdWZmZXIuZnJvbShtZXNzYWdlKSk7XG4gIGNvbnN0IG1lc3NhZ2VIYXNoID0gbWVzc2FnZUhhc2hlci5kaWdlc3QoKTtcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKG1lc3NhZ2VIYXNoKTtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIEJJUDMyMiBcInRvIHNwZW5kXCIgdHJhbnNhY3Rpb25cbiAqIFNvdXJjZTogaHR0cHM6Ly9naXRodWIuY29tL2JpdGNvaW4vYmlwcy9ibG9iL21hc3Rlci9iaXAtMDMyMi5tZWRpYXdpa2kjZnVsbFxuICpcbiAqIEBwYXJhbSB7QnVmZmVyfSBzY3JpcHRQdWJLZXkgLSBUaGUgc2NyaXB0UHViS2V5IHRvIHVzZSBmb3IgdGhlIG91dHB1dFxuICogQHBhcmFtIHtzdHJpbmcgfCBCdWZmZXJ9IG1lc3NhZ2UgLSBUaGUgbWVzc2FnZSB0byBpbmNsdWRlIGluIHRoZSB0cmFuc2FjdGlvblxuICogQHBhcmFtIHtCdWZmZXJ9IFt0YWc9QklQMzIyX1RBR10gLSBUaGUgdGFnIHRvIHVzZSBmb3IgaGFzaGluZywgZGVmYXVsdHMgdG8gQklQMzIyX1RBRy5cbiAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbn0gLSBUaGUgY29uc3RydWN0ZWQgdHJhbnNhY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkVG9TcGVuZFRyYW5zYWN0aW9uKFxuICBzY3JpcHRQdWJLZXk6IEJ1ZmZlcixcbiAgbWVzc2FnZTogc3RyaW5nIHwgQnVmZmVyLFxuICB0YWcgPSBCSVAzMjJfVEFHXG4pOiBUcmFuc2FjdGlvbjxiaWdpbnQ+IHtcbiAgLy8gQ3JlYXRlIFBTQlQgb2JqZWN0IGZvciBjb25zdHJ1Y3RpbmcgdGhlIHRyYW5zYWN0aW9uXG4gIGNvbnN0IHBzYnQgPSBuZXcgUHNidCgpO1xuICAvLyBTZXQgZGVmYXVsdCB2YWx1ZSBmb3IgblZlcnNpb24gYW5kIG5Mb2NrVGltZVxuICBwc2J0LnNldFZlcnNpb24oMCk7IC8vIG5WZXJzaW9uID0gMFxuICBwc2J0LnNldExvY2t0aW1lKDApOyAvLyBuTG9ja1RpbWUgPSAwXG4gIC8vIENvbXB1dGUgdGhlIG1lc3NhZ2UgaGFzaCAtIFNIQTI1NihTSEEyNTYodGFnKSB8fCBTSEEyNTYodGFnKSB8fCBtZXNzYWdlKVxuICBjb25zdCBtZXNzYWdlSGFzaCA9IGhhc2hNZXNzYWdlV2l0aFRhZyhtZXNzYWdlLCB0YWcpO1xuICAvLyBDb25zdHJ1Y3QgdGhlIHNjcmlwdFNpZyAtIE9QXzAgUFVTSDMyWyBtZXNzYWdlX2hhc2ggXVxuICBjb25zdCBzY3JpcHRTaWdQYXJ0T25lID0gbmV3IFVpbnQ4QXJyYXkoWzB4MDAsIDB4MjBdKTsgLy8gT1BfMCBQVVNIMzJcbiAgY29uc3Qgc2NyaXB0U2lnID0gbmV3IFVpbnQ4QXJyYXkoc2NyaXB0U2lnUGFydE9uZS5sZW5ndGggKyBtZXNzYWdlSGFzaC5sZW5ndGgpO1xuICBzY3JpcHRTaWcuc2V0KHNjcmlwdFNpZ1BhcnRPbmUpO1xuICBzY3JpcHRTaWcuc2V0KG1lc3NhZ2VIYXNoLCBzY3JpcHRTaWdQYXJ0T25lLmxlbmd0aCk7XG4gIC8vIFNldCB0aGUgaW5wdXRcbiAgcHNidC5hZGRJbnB1dCh7XG4gICAgaGFzaDogJzAnLnJlcGVhdCg2NCksIC8vIHZpblswXS5wcmV2b3V0Lmhhc2ggPSAwMDAwLi4uMDAwXG4gICAgaW5kZXg6IDB4ZmZmZmZmZmYsIC8vIHZpblswXS5wcmV2b3V0Lm4gPSAweEZGRkZGRkZGXG4gICAgc2VxdWVuY2U6IDAsIC8vIHZpblswXS5uU2VxdWVuY2UgPSAwXG4gICAgZmluYWxTY3JpcHRTaWc6IEJ1ZmZlci5mcm9tKHNjcmlwdFNpZyksIC8vIHZpblswXS5zY3JpcHRTaWcgPSBPUF8wIFBVU0gzMlsgbWVzc2FnZV9oYXNoIF1cbiAgICB3aXRuZXNzU2NyaXB0OiBCdWZmZXIuZnJvbShbXSksIC8vIHZpblswXS5zY3JpcHRXaXRuZXNzID0gW11cbiAgfSk7XG4gIC8vIFNldCB0aGUgb3V0cHV0XG4gIHBzYnQuYWRkT3V0cHV0KHtcbiAgICB2YWx1ZTogQmlnSW50KDApLCAvLyB2b3V0WzBdLm5WYWx1ZSA9IDBcbiAgICBzY3JpcHQ6IHNjcmlwdFB1YktleSwgLy8gdm91dFswXS5zY3JpcHRQdWJLZXkgPSBtZXNzYWdlX2NoYWxsZW5nZVxuICB9KTtcbiAgLy8gUmV0dXJuIHRyYW5zYWN0aW9uXG4gIHJldHVybiBwc2J0LmV4dHJhY3RUcmFuc2FjdGlvbigpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRUb1NwZW5kVHJhbnNhY3Rpb25Gcm9tQ2hhaW5BbmRJbmRleChcbiAgcm9vdFdhbGxldEtleXM6IGJpdGdvLlJvb3RXYWxsZXRLZXlzLFxuICBjaGFpbjogYml0Z28uQ2hhaW5Db2RlLFxuICBpbmRleDogbnVtYmVyLFxuICBtZXNzYWdlOiBzdHJpbmcgfCBCdWZmZXIsXG4gIHRhZyA9IEJJUDMyMl9UQUdcbik6IFRyYW5zYWN0aW9uPGJpZ2ludD4ge1xuICBjb25zdCBvdXRwdXRTY3JpcHQgPSBiaXRnby5vdXRwdXRTY3JpcHRzLmNyZWF0ZU91dHB1dFNjcmlwdDJvZjMoXG4gICAgcm9vdFdhbGxldEtleXMuZGVyaXZlRm9yQ2hhaW5BbmRJbmRleChjaGFpbiwgaW5kZXgpLnB1YmxpY0tleXMsXG4gICAgYml0Z28uc2NyaXB0VHlwZUZvckNoYWluKGNoYWluKSxcbiAgICBuZXR3b3Jrcy5iaXRjb2luXG4gICk7XG4gIHJldHVybiBidWlsZFRvU3BlbmRUcmFuc2FjdGlvbihvdXRwdXRTY3JpcHQuc2NyaXB0UHViS2V5LCBtZXNzYWdlLCB0YWcpO1xufVxuIl19
@@ -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,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CASnG;AAED;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAevG;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,OAAO,CAmC9G"}
@@ -0,0 +1,115 @@
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.getBip322ProofMessageAtIndex = getBip322ProofMessageAtIndex;
38
+ exports.isBip322ProofCheck = isBip322ProofCheck;
39
+ const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
40
+ function addBip322ProofMessage(psbt, inputIndex, message) {
41
+ utxolib.bitgo.addProprietaryKeyValuesFromUnknownKeyValues(psbt, 'input', inputIndex, {
42
+ key: {
43
+ identifier: utxolib.bitgo.PSBT_PROPRIETARY_IDENTIFIER,
44
+ subtype: utxolib.bitgo.ProprietaryKeySubtype.BIP322_MESSAGE,
45
+ keydata: Buffer.alloc(0),
46
+ },
47
+ value: message,
48
+ });
49
+ }
50
+ /**
51
+ * Get the BIP322 proof message at a specific input index of the PSBT
52
+ * @param psbt
53
+ * @param inputIndex
54
+ * @returns The BIP322 proof message as a Buffer, or undefined if not found
55
+ */
56
+ function getBip322ProofMessageAtIndex(psbt, inputIndex) {
57
+ if (psbt.data.inputs.length <= inputIndex) {
58
+ throw new Error(`Input index ${inputIndex} is out of bounds for the PSBT`);
59
+ }
60
+ const input = psbt.data.inputs[inputIndex];
61
+ const proprietaryKeyVals = utxolib.bitgo.getPsbtInputProprietaryKeyVals(input, {
62
+ identifier: utxolib.bitgo.PSBT_PROPRIETARY_IDENTIFIER,
63
+ subtype: utxolib.bitgo.ProprietaryKeySubtype.BIP322_MESSAGE,
64
+ });
65
+ if (proprietaryKeyVals.length === 0) {
66
+ return undefined;
67
+ }
68
+ else if (proprietaryKeyVals.length > 1) {
69
+ throw new Error(`Multiple BIP322 messages found at input index ${inputIndex}`);
70
+ }
71
+ return Buffer.from(proprietaryKeyVals[0].value);
72
+ }
73
+ /**
74
+ * checks if the transaction contains a BIP322 proof
75
+ * does not check if the proof is valid
76
+ * Source: https://github.com/bitcoin/bips/blob/master/bip-0322.mediawiki#user-content-Full
77
+ * @params tx The transaction or the PSBT to check
78
+ * @returns boolean
79
+ */
80
+ function isBip322ProofCheck(tx) {
81
+ if (tx instanceof utxolib.bitgo.UtxoPsbt) {
82
+ if (tx.version !== 0 || tx.locktime !== 0 || tx.data.outputs.length !== 1) {
83
+ return false;
84
+ }
85
+ const output = tx.txOutputs[0];
86
+ if (output.script.toString('hex') !== '6a' || output.value !== 0n) {
87
+ return false;
88
+ }
89
+ // Return true if there is a message encoded in every input in the proprietary field
90
+ return tx.data.inputs.every((input, index) => getBip322ProofMessageAtIndex(tx, index) !== undefined);
91
+ }
92
+ else if (tx instanceof utxolib.bitgo.UtxoTransaction) {
93
+ if (tx.version !== 0 || tx.locktime !== 0 || tx.outs.length !== 1) {
94
+ return false;
95
+ }
96
+ if (tx.outs.length !== 1) {
97
+ return false;
98
+ }
99
+ const output = tx.outs[0];
100
+ // check that the only output is an OP_RETURN with 0 value
101
+ if (output.script.toString('hex') !== '6a' || output.value !== 0n) {
102
+ return false;
103
+ }
104
+ for (const input of tx.ins) {
105
+ if (input.index !== 0 || input.sequence !== 0) {
106
+ return false;
107
+ }
108
+ }
109
+ return true;
110
+ }
111
+ else {
112
+ throw new Error('Unsupported transaction type for BIP322 proof check');
113
+ }
114
+ }
115
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYmlwMzIyL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsc0RBU0M7QUFRRCxvRUFlQztBQVNELGdEQW1DQztBQTlFRCw4REFBZ0Q7QUFFaEQsU0FBZ0IscUJBQXFCLENBQUMsSUFBa0IsRUFBRSxVQUFrQixFQUFFLE9BQWU7SUFDM0YsT0FBTyxDQUFDLEtBQUssQ0FBQywyQ0FBMkMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRTtRQUNuRixHQUFHLEVBQUU7WUFDSCxVQUFVLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQywyQkFBMkI7WUFDckQsT0FBTyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsY0FBYztZQUMzRCxPQUFPLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7U0FDekI7UUFDRCxLQUFLLEVBQUUsT0FBTztLQUNmLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLDRCQUE0QixDQUFDLElBQWtCLEVBQUUsVUFBa0I7SUFDakYsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksVUFBVSxFQUFFLENBQUM7UUFDMUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxlQUFlLFVBQVUsZ0NBQWdDLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBQ0QsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDM0MsTUFBTSxrQkFBa0IsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLDhCQUE4QixDQUFDLEtBQUssRUFBRTtRQUM3RSxVQUFVLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQywyQkFBMkI7UUFDckQsT0FBTyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsY0FBYztLQUM1RCxDQUFDLENBQUM7SUFDSCxJQUFJLGtCQUFrQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNwQyxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO1NBQU0sSUFBSSxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDekMsTUFBTSxJQUFJLEtBQUssQ0FBQyxpREFBaUQsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUNqRixDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2xELENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFnQixrQkFBa0IsQ0FBQyxFQUFrRTtJQUNuRyxJQUFJLEVBQUUsWUFBWSxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3pDLElBQUksRUFBRSxDQUFDLE9BQU8sS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzFFLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0IsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLElBQUksTUFBTSxDQUFDLEtBQUssS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUNsRSxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCxvRkFBb0Y7UUFDcEYsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyw0QkFBNEIsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUM7SUFDdkcsQ0FBQztTQUFNLElBQUksRUFBRSxZQUFZLE9BQU8sQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkQsSUFBSSxFQUFFLENBQUMsT0FBTyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNsRSxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFDRCxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3pCLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUIsMERBQTBEO1FBQzFELElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxJQUFJLE1BQU0sQ0FBQyxLQUFLLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDbEUsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsS0FBSyxNQUFNLEtBQUssSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDM0IsSUFBSSxLQUFLLENBQUMsS0FBSyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsUUFBUSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUM5QyxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO1NBQU0sQ0FBQztRQUNOLE1BQU0sSUFBSSxLQUFLLENBQUMscURBQXFELENBQUMsQ0FBQztJQUN6RSxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuXG5leHBvcnQgZnVuY3Rpb24gYWRkQmlwMzIyUHJvb2ZNZXNzYWdlKHBzYnQ6IHV0eG9saWIuUHNidCwgaW5wdXRJbmRleDogbnVtYmVyLCBtZXNzYWdlOiBCdWZmZXIpOiB2b2lkIHtcbiAgdXR4b2xpYi5iaXRnby5hZGRQcm9wcmlldGFyeUtleVZhbHVlc0Zyb21Vbmtub3duS2V5VmFsdWVzKHBzYnQsICdpbnB1dCcsIGlucHV0SW5kZXgsIHtcbiAgICBrZXk6IHtcbiAgICAgIGlkZW50aWZpZXI6IHV0eG9saWIuYml0Z28uUFNCVF9QUk9QUklFVEFSWV9JREVOVElGSUVSLFxuICAgICAgc3VidHlwZTogdXR4b2xpYi5iaXRnby5Qcm9wcmlldGFyeUtleVN1YnR5cGUuQklQMzIyX01FU1NBR0UsXG4gICAgICBrZXlkYXRhOiBCdWZmZXIuYWxsb2MoMCksXG4gICAgfSxcbiAgICB2YWx1ZTogbWVzc2FnZSxcbiAgfSk7XG59XG5cbi8qKlxuICogR2V0IHRoZSBCSVAzMjIgcHJvb2YgbWVzc2FnZSBhdCBhIHNwZWNpZmljIGlucHV0IGluZGV4IG9mIHRoZSBQU0JUXG4gKiBAcGFyYW0gcHNidFxuICogQHBhcmFtIGlucHV0SW5kZXhcbiAqIEByZXR1cm5zIFRoZSBCSVAzMjIgcHJvb2YgbWVzc2FnZSBhcyBhIEJ1ZmZlciwgb3IgdW5kZWZpbmVkIGlmIG5vdCBmb3VuZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QmlwMzIyUHJvb2ZNZXNzYWdlQXRJbmRleChwc2J0OiB1dHhvbGliLlBzYnQsIGlucHV0SW5kZXg6IG51bWJlcik6IEJ1ZmZlciB8IHVuZGVmaW5lZCB7XG4gIGlmIChwc2J0LmRhdGEuaW5wdXRzLmxlbmd0aCA8PSBpbnB1dEluZGV4KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnB1dCBpbmRleCAke2lucHV0SW5kZXh9IGlzIG91dCBvZiBib3VuZHMgZm9yIHRoZSBQU0JUYCk7XG4gIH1cbiAgY29uc3QgaW5wdXQgPSBwc2J0LmRhdGEuaW5wdXRzW2lucHV0SW5kZXhdO1xuICBjb25zdCBwcm9wcmlldGFyeUtleVZhbHMgPSB1dHhvbGliLmJpdGdvLmdldFBzYnRJbnB1dFByb3ByaWV0YXJ5S2V5VmFscyhpbnB1dCwge1xuICAgIGlkZW50aWZpZXI6IHV0eG9saWIuYml0Z28uUFNCVF9QUk9QUklFVEFSWV9JREVOVElGSUVSLFxuICAgIHN1YnR5cGU6IHV0eG9saWIuYml0Z28uUHJvcHJpZXRhcnlLZXlTdWJ0eXBlLkJJUDMyMl9NRVNTQUdFLFxuICB9KTtcbiAgaWYgKHByb3ByaWV0YXJ5S2V5VmFscy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9IGVsc2UgaWYgKHByb3ByaWV0YXJ5S2V5VmFscy5sZW5ndGggPiAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBNdWx0aXBsZSBCSVAzMjIgbWVzc2FnZXMgZm91bmQgYXQgaW5wdXQgaW5kZXggJHtpbnB1dEluZGV4fWApO1xuICB9XG4gIHJldHVybiBCdWZmZXIuZnJvbShwcm9wcmlldGFyeUtleVZhbHNbMF0udmFsdWUpO1xufVxuXG4vKipcbiAqIGNoZWNrcyBpZiB0aGUgdHJhbnNhY3Rpb24gY29udGFpbnMgYSBCSVAzMjIgcHJvb2ZcbiAqIGRvZXMgbm90IGNoZWNrIGlmIHRoZSBwcm9vZiBpcyB2YWxpZFxuICogU291cmNlOiBodHRwczovL2dpdGh1Yi5jb20vYml0Y29pbi9iaXBzL2Jsb2IvbWFzdGVyL2JpcC0wMzIyLm1lZGlhd2lraSN1c2VyLWNvbnRlbnQtRnVsbFxuICogQHBhcmFtcyB0eCBUaGUgdHJhbnNhY3Rpb24gb3IgdGhlIFBTQlQgdG8gY2hlY2tcbiAqIEByZXR1cm5zIGJvb2xlYW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQmlwMzIyUHJvb2ZDaGVjayh0eDogdXR4b2xpYi5iaXRnby5VdHhvUHNidCB8IHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uPGJpZ2ludD4pOiBib29sZWFuIHtcbiAgaWYgKHR4IGluc3RhbmNlb2YgdXR4b2xpYi5iaXRnby5VdHhvUHNidCkge1xuICAgIGlmICh0eC52ZXJzaW9uICE9PSAwIHx8IHR4LmxvY2t0aW1lICE9PSAwIHx8IHR4LmRhdGEub3V0cHV0cy5sZW5ndGggIT09IDEpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3Qgb3V0cHV0ID0gdHgudHhPdXRwdXRzWzBdO1xuICAgIGlmIChvdXRwdXQuc2NyaXB0LnRvU3RyaW5nKCdoZXgnKSAhPT0gJzZhJyB8fCBvdXRwdXQudmFsdWUgIT09IDBuKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIHRydWUgaWYgdGhlcmUgaXMgYSBtZXNzYWdlIGVuY29kZWQgaW4gZXZlcnkgaW5wdXQgaW4gdGhlIHByb3ByaWV0YXJ5IGZpZWxkXG4gICAgcmV0dXJuIHR4LmRhdGEuaW5wdXRzLmV2ZXJ5KChpbnB1dCwgaW5kZXgpID0+IGdldEJpcDMyMlByb29mTWVzc2FnZUF0SW5kZXgodHgsIGluZGV4KSAhPT0gdW5kZWZpbmVkKTtcbiAgfSBlbHNlIGlmICh0eCBpbnN0YW5jZW9mIHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uKSB7XG4gICAgaWYgKHR4LnZlcnNpb24gIT09IDAgfHwgdHgubG9ja3RpbWUgIT09IDAgfHwgdHgub3V0cy5sZW5ndGggIT09IDEpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHR4Lm91dHMubGVuZ3RoICE9PSAxKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IG91dHB1dCA9IHR4Lm91dHNbMF07XG4gICAgLy8gY2hlY2sgdGhhdCB0aGUgb25seSBvdXRwdXQgaXMgYW4gT1BfUkVUVVJOIHdpdGggMCB2YWx1ZVxuICAgIGlmIChvdXRwdXQuc2NyaXB0LnRvU3RyaW5nKCdoZXgnKSAhPT0gJzZhJyB8fCBvdXRwdXQudmFsdWUgIT09IDBuKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBpbnB1dCBvZiB0eC5pbnMpIHtcbiAgICAgIGlmIChpbnB1dC5pbmRleCAhPT0gMCB8fCBpbnB1dC5zZXF1ZW5jZSAhPT0gMCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCB0cmFuc2FjdGlvbiB0eXBlIGZvciBCSVAzMjIgcHJvb2YgY2hlY2snKTtcbiAgfVxufVxuIl19
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../../../src/bip322/verify.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAIhD,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAEhB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,cAAc,CAAC;CACxD,CAAC;AAEF,wBAAgB,YAAY,CAAC,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,IAAI,CAM5E;AAED,wBAAgB,aAAa,CAC3B,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,EACzC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,EACpC,IAAI,EAAE,WAAW,EACjB,cAAc,EAAE,OAAO,GACtB,IAAI,CA8CN;AAED,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,IAAI,CAkB/G;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,IAAI,CA2CpG"}
@@ -0,0 +1,115 @@
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.assertBaseTx = assertBaseTx;
37
+ exports.assertTxInput = assertTxInput;
38
+ exports.assertBip322TxProof = assertBip322TxProof;
39
+ exports.assertBip322PsbtProof = assertBip322PsbtProof;
40
+ const assert = __importStar(require("assert"));
41
+ const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
42
+ const toSpend_1 = require("./toSpend");
43
+ function assertBaseTx(tx) {
44
+ assert.deepStrictEqual(tx.version, 0, 'Transaction version must be 0.');
45
+ assert.deepStrictEqual(tx.locktime, 0, 'Transaction locktime must be 0.');
46
+ assert.deepStrictEqual(tx.outs.length, 1, 'Transaction must have exactly 1 output.');
47
+ assert.deepStrictEqual(tx.outs[0].value, BigInt(0), 'Transaction output value must be 0.');
48
+ assert.deepStrictEqual(tx.outs[0].script.toString('hex'), '6a', 'Transaction output script must be OP_RETURN.');
49
+ }
50
+ function assertTxInput(tx, inputIndex, prevOuts, info, checkSignature) {
51
+ assert.ok(inputIndex < tx.ins.length, `inputIndex ${inputIndex} is out of range for tx with ${tx.ins.length} inputs.`);
52
+ const input = tx.ins[inputIndex];
53
+ assert.deepStrictEqual(input.index, 0, `transaction input ${inputIndex} must have index=0.`);
54
+ assert.deepStrictEqual(input.sequence, 0, `transaction input ${inputIndex} sequence must be 0.`);
55
+ // Make sure that the message is correctly encoded into the input of the transaction and
56
+ // verify that the message info corresponds
57
+ const scriptPubKey = utxolib.bitgo.outputScripts.createOutputScript2of3(info.pubkeys.map((pubkey) => Buffer.from(pubkey, 'hex')), info.scriptType, tx.network).scriptPubKey;
58
+ assert.deepStrictEqual(info.address, utxolib.address.fromOutputScript(scriptPubKey, tx.network).toString(), `Address does not match derived scriptPubKey for input ${inputIndex}.`);
59
+ const txid = utxolib.bitgo.getOutputIdForInput(input).txid;
60
+ const toSpendTx = (0, toSpend_1.buildToSpendTransaction)(scriptPubKey, info.message);
61
+ assert.deepStrictEqual(txid, toSpendTx.getId(), `Input ${inputIndex} derived to_spend transaction is not encoded in the input.`);
62
+ if (checkSignature) {
63
+ const signatureScript = utxolib.bitgo.parseSignatureScript2Of3(input);
64
+ const scriptType = signatureScript.scriptType === 'taprootKeyPathSpend'
65
+ ? 'p2trMusig2'
66
+ : signatureScript.scriptType === 'taprootScriptPathSpend'
67
+ ? 'p2tr'
68
+ : signatureScript.scriptType;
69
+ assert.deepStrictEqual(scriptType, info.scriptType, 'Script type does not match.');
70
+ utxolib.bitgo.verifySignatureWithPublicKeys(tx, inputIndex, prevOuts, info.pubkeys.map((pubkey) => Buffer.from(pubkey, 'hex')));
71
+ }
72
+ }
73
+ function assertBip322TxProof(tx, messageInfo) {
74
+ assertBaseTx(tx);
75
+ assert.deepStrictEqual(tx.ins.length, messageInfo.length, 'Transaction must have the same number of inputs as messageInfo entries.');
76
+ const prevOuts = messageInfo.map((info) => {
77
+ return {
78
+ value: 0n,
79
+ script: utxolib.bitgo.outputScripts.createOutputScript2of3(info.pubkeys.map((pubkey) => Buffer.from(pubkey, 'hex')), info.scriptType, tx.network).scriptPubKey,
80
+ };
81
+ });
82
+ tx.ins.forEach((input, inputIndex) => assertTxInput(tx, inputIndex, prevOuts, messageInfo[inputIndex], true));
83
+ }
84
+ function assertBip322PsbtProof(psbt, messageInfo) {
85
+ const unsignedTx = psbt.getUnsignedTx();
86
+ assertBaseTx(unsignedTx);
87
+ assert.deepStrictEqual(psbt.data.inputs.length, messageInfo.length, 'PSBT must have the same number of inputs as messageInfo entries.');
88
+ const prevOuts = psbt.data.inputs.map((input, inputIndex) => {
89
+ assert.ok(input.witnessUtxo, `PSBT input ${inputIndex} is missing witnessUtxo`);
90
+ return input.witnessUtxo;
91
+ });
92
+ psbt.data.inputs.forEach((input, inputIndex) => {
93
+ // Check that the metadata in the PSBT matches the messageInfo, then check the input data
94
+ const info = messageInfo[inputIndex];
95
+ // Check that the to_spend transaction is encoded in the nonWitnessUtxo
96
+ assert.ok(input.nonWitnessUtxo, `PSBT input ${inputIndex} is missing nonWitnessUtxo`);
97
+ const toSpendTx = (0, toSpend_1.buildToSpendTransaction)(prevOuts[inputIndex].script, info.message);
98
+ assert.deepStrictEqual(input.nonWitnessUtxo.toString('hex'), toSpendTx.toHex());
99
+ if (input.bip32Derivation) {
100
+ input.bip32Derivation.forEach((b) => {
101
+ const pubkey = b.pubkey.toString('hex');
102
+ assert.ok(info.pubkeys.includes(pubkey), `PSBT input ${inputIndex} has a pubkey in (tap)bip32Derivation that is not in messageInfo`);
103
+ });
104
+ }
105
+ else if (!input.tapBip32Derivation) {
106
+ throw new Error(`PSBT input ${inputIndex} is missing (tap)bip32Derivation when it should have it.`);
107
+ }
108
+ // Verify the signature on the input
109
+ assert.ok(psbt.validateSignaturesOfInputCommon(inputIndex), `PSBT input ${inputIndex} has an invalid signature.`);
110
+ // Do not check the signature when using the PSBT, the signature is not there. We are going
111
+ // to signatures in the PSBT.
112
+ assertTxInput(unsignedTx, inputIndex, prevOuts, info, false);
113
+ });
114
+ }
115
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyaWZ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2JpcDMyMi92ZXJpZnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFjQSxvQ0FNQztBQUVELHNDQW9EQztBQUVELGtEQWtCQztBQUVELHNEQTJDQztBQTNJRCwrQ0FBaUM7QUFFakMsOERBQWdEO0FBRWhELHVDQUFvRDtBQVVwRCxTQUFnQixZQUFZLENBQUMsRUFBeUM7SUFDcEUsTUFBTSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxnQ0FBZ0MsQ0FBQyxDQUFDO0lBQ3hFLE1BQU0sQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsaUNBQWlDLENBQUMsQ0FBQztJQUMxRSxNQUFNLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSx5Q0FBeUMsQ0FBQyxDQUFDO0lBQ3JGLE1BQU0sQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLHFDQUFxQyxDQUFDLENBQUM7SUFDM0YsTUFBTSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxFQUFFLDhDQUE4QyxDQUFDLENBQUM7QUFDbEgsQ0FBQztBQUVELFNBQWdCLGFBQWEsQ0FDM0IsRUFBeUMsRUFDekMsVUFBa0IsRUFDbEIsUUFBb0MsRUFDcEMsSUFBaUIsRUFDakIsY0FBdUI7SUFFdkIsTUFBTSxDQUFDLEVBQUUsQ0FDUCxVQUFVLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQzFCLGNBQWMsVUFBVSxnQ0FB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Q0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcblxuaW1wb3J0IHsgYnVpbGRUb1NwZW5kVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RvU3BlbmQnO1xuXG5leHBvcnQgdHlwZSBNZXNzYWdlSW5mbyA9IHtcbiAgYWRkcmVzczogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIC8vIEhleCBlbmNvZGVkIHB1YmtleXNcbiAgcHVia2V5czogc3RyaW5nW107XG4gIHNjcmlwdFR5cGU6IHV0eG9saWIuYml0Z28ub3V0cHV0U2NyaXB0cy5TY3JpcHRUeXBlMk9mMztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRCYXNlVHgodHg6IHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uPGJpZ2ludD4pOiB2b2lkIHtcbiAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbCh0eC52ZXJzaW9uLCAwLCAnVHJhbnNhY3Rpb24gdmVyc2lvbiBtdXN0IGJlIDAuJyk7XG4gIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwodHgubG9ja3RpbWUsIDAsICdUcmFuc2FjdGlvbiBsb2NrdGltZSBtdXN0IGJlIDAuJyk7XG4gIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwodHgub3V0cy5sZW5ndGgsIDEsICdUcmFuc2FjdGlvbiBtdXN0IGhhdmUgZXhhY3RseSAxIG91dHB1dC4nKTtcbiAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbCh0eC5vdXRzWzBdLnZhbHVlLCBCaWdJbnQoMCksICdUcmFuc2FjdGlvbiBvdXRwdXQgdmFsdWUgbXVzdCBiZSAwLicpO1xuICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHR4Lm91dHNbMF0uc2NyaXB0LnRvU3RyaW5nKCdoZXgnKSwgJzZhJywgJ1RyYW5zYWN0aW9uIG91dHB1dCBzY3JpcHQgbXVzdCBiZSBPUF9SRVRVUk4uJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRUeElucHV0KFxuICB0eDogdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb248YmlnaW50PixcbiAgaW5wdXRJbmRleDogbnVtYmVyLFxuICBwcmV2T3V0czogdXR4b2xpYi5UeE91dHB1dDxiaWdpbnQ+W10sXG4gIGluZm86IE1lc3NhZ2VJbmZvLFxuICBjaGVja1NpZ25hdHVyZTogYm9vbGVhblxuKTogdm9pZCB7XG4gIGFzc2VydC5vayhcbiAgICBpbnB1dEluZGV4IDwgdHguaW5zLmxlbmd0aCxcbiAgICBgaW5wdXRJbmRleCAke2lucHV0SW5kZXh9IGlzIG91dCBvZiByYW5nZSBmb3IgdHggd2l0aCAke3R4Lmlucy5sZW5ndGh9IGlucHV0cy5gXG4gICk7XG4gIGNvbnN0IGlucHV0ID0gdHguaW5zW2lucHV0SW5kZXhdO1xuICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKGlucHV0LmluZGV4LCAwLCBgdHJhbnNhY3Rpb24gaW5wdXQgJHtpbnB1dEluZGV4fSBtdXN0IGhhdmUgaW5kZXg9MC5gKTtcbiAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChpbnB1dC5zZXF1ZW5jZSwgMCwgYHRyYW5zYWN0aW9uIGlucHV0ICR7aW5wdXRJbmRleH0gc2VxdWVuY2UgbXVzdCBiZSAwLmApO1xuXG4gIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBtZXNzYWdlIGlzIGNvcnJlY3RseSBlbmNvZGVkIGludG8gdGhlIGlucHV0IG9mIHRoZSB0cmFuc2FjdGlvbiBhbmRcbiAgLy8gdmVyaWZ5IHRoYXQgdGhlIG1lc3NhZ2UgaW5mbyBjb3JyZXNwb25kc1xuICBjb25zdCBzY3JpcHRQdWJLZXkgPSB1dHhvbGliLmJpdGdvLm91dHB1dFNjcmlwdHMuY3JlYXRlT3V0cHV0U2NyaXB0Mm9mMyhcbiAgICBpbmZvLnB1YmtleXMubWFwKChwdWJrZXkpID0+IEJ1ZmZlci5mcm9tKHB1YmtleSwgJ2hleCcpKSxcbiAgICBpbmZvLnNjcmlwdFR5cGUsXG4gICAgdHgubmV0d29ya1xuICApLnNjcmlwdFB1YktleTtcbiAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChcbiAgICBpbmZvLmFkZHJlc3MsXG4gICAgdXR4b2xpYi5hZGRyZXNzLmZyb21PdXRwdXRTY3JpcHQoc2NyaXB0UHViS2V5LCB0eC5uZXR3b3JrKS50b1N0cmluZygpLFxuICAgIGBBZGRyZXNzIGRvZXMgbm90IG1hdGNoIGRlcml2ZWQgc2NyaXB0UHViS2V5IGZvciBpbnB1dCAke2lucHV0SW5kZXh9LmBcbiAgKTtcblxuICBjb25zdCB0eGlkID0gdXR4b2xpYi5iaXRnby5nZXRPdXRwdXRJZEZvcklucHV0KGlucHV0KS50eGlkO1xuICBjb25zdCB0b1NwZW5kVHggPSBidWlsZFRvU3BlbmRUcmFuc2FjdGlvbihzY3JpcHRQdWJLZXksIGluZm8ubWVzc2FnZSk7XG4gIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoXG4gICAgdHhpZCxcbiAgICB0b1NwZW5kVHguZ2V0SWQoKSxcbiAgICBgSW5wdXQgJHtpbnB1dEluZGV4fSBkZXJpdmVkIHRvX3NwZW5kIHRyYW5zYWN0aW9uIGlzIG5vdCBlbmNvZGVkIGluIHRoZSBpbnB1dC5gXG4gICk7XG5cbiAgaWYgKGNoZWNrU2lnbmF0dXJlKSB7XG4gICAgY29uc3Qgc2lnbmF0dXJlU2NyaXB0ID0gdXR4b2xpYi5iaXRnby5wYXJzZVNpZ25hdHVyZVNjcmlwdDJPZjMoaW5wdXQpO1xuICAgIGNvbnN0IHNjcmlwdFR5cGUgPVxuICAgICAgc2lnbmF0dXJlU2NyaXB0LnNjcmlwdFR5cGUgPT09ICd0YXByb290S2V5UGF0aFNwZW5kJ1xuICAgICAgICA/ICdwMnRyTXVzaWcyJ1xuICAgICAgICA6IHNpZ25hdHVyZVNjcmlwdC5zY3JpcHRUeXBlID09PSAndGFwcm9vdFNjcmlwdFBhdGhTcGVuZCdcbiAgICAgICAgPyAncDJ0cidcbiAgICAgICAgOiBzaWduYXR1cmVTY3JpcHQuc2NyaXB0VHlwZTtcbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHNjcmlwdFR5cGUsIGluZm8uc2NyaXB0VHlwZSwgJ1NjcmlwdCB0eXBlIGRvZXMgbm90IG1hdGNoLicpO1xuICAgIHV0eG9saWIuYml0Z28udmVyaWZ5U2lnbmF0dXJlV2l0aFB1YmxpY0tleXMoXG4gICAgICB0eCxcbiAgICAgIGlucHV0SW5kZXgsXG4gICAgICBwcmV2T3V0cyxcbiAgICAgIGluZm8ucHVia2V5cy5tYXAoKHB1YmtleSkgPT4gQnVmZmVyLmZyb20ocHVia2V5LCAnaGV4JykpXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0QmlwMzIyVHhQcm9vZih0eDogdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb248YmlnaW50PiwgbWVzc2FnZUluZm86IE1lc3NhZ2VJbmZvW10pOiB2b2lkIHtcbiAgYXNzZXJ0QmFzZVR4KHR4KTtcbiAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChcbiAgICB0eC5pbnMubGVuZ3RoLFxuICAgIG1lc3NhZ2VJbmZvLmxlbmd0aCxcbiAgICAnVHJhbnNhY3Rpb24gbXVzdCBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBpbnB1dHMgYXMgbWVzc2FnZUluZm8gZW50cmllcy4nXG4gICk7XG4gIGNvbnN0IHByZXZPdXRzID0gbWVzc2FnZUluZm8ubWFwKChpbmZvKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiAwbixcbiAgICAgIHNjcmlwdDogdXR4b2xpYi5iaXRnby5vdXRwdXRTY3JpcHRzLmNyZWF0ZU91dHB1dFNjcmlwdDJvZjMoXG4gICAgICAgIGluZm8ucHVia2V5cy5tYXAoKHB1YmtleSkgPT4gQnVmZmVyLmZyb20ocHVia2V5LCAnaGV4JykpLFxuICAgICAgICBpbmZvLnNjcmlwdFR5cGUsXG4gICAgICAgIHR4Lm5ldHdvcmtcbiAgICAgICkuc2NyaXB0UHViS2V5LFxuICAgIH07XG4gIH0pO1xuICB0eC5pbnMuZm9yRWFjaCgoaW5wdXQsIGlucHV0SW5kZXgpID0+IGFzc2VydFR4SW5wdXQodHgsIGlucHV0SW5kZXgsIHByZXZPdXRzLCBtZXNzYWdlSW5mb1tpbnB1dEluZGV4XSwgdHJ1ZSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0QmlwMzIyUHNidFByb29mKHBzYnQ6IHV0eG9saWIuYml0Z28uVXR4b1BzYnQsIG1lc3NhZ2VJbmZvOiBNZXNzYWdlSW5mb1tdKTogdm9pZCB7XG4gIGNvbnN0IHVuc2lnbmVkVHggPSBwc2J0LmdldFVuc2lnbmVkVHgoKTtcblxuICBhc3NlcnRCYXNlVHgodW5zaWduZWRUeCk7XG4gIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoXG4gICAgcHNidC5kYXRhLmlucHV0cy5sZW5ndGgsXG4gICAgbWVzc2FnZUluZm8ubGVuZ3RoLFxuICAgICdQU0JUIG11c3QgaGF2ZSB0aGUgc2FtZSBudW1iZXIgb2YgaW5wdXRzIGFzIG1lc3NhZ2VJbmZvIGVudHJpZXMuJ1xuICApO1xuXG4gIGNvbnN0IHByZXZPdXRzID0gcHNidC5kYXRhLmlucHV0cy5tYXAoKGlucHV0LCBpbnB1dEluZGV4KSA9PiB7XG4gICAgYXNzZXJ0Lm9rKGlucHV0LndpdG5lc3NVdHhvLCBgUFNCVCBpbnB1dCAke2lucHV0SW5kZXh9IGlzIG1pc3Npbmcgd2l0bmVzc1V0eG9gKTtcbiAgICByZXR1cm4gaW5wdXQud2l0bmVzc1V0eG87XG4gIH0pO1xuXG4gIHBzYnQuZGF0YS5pbnB1dHMuZm9yRWFjaCgoaW5wdXQsIGlucHV0SW5kZXgpID0+IHtcbiAgICAvLyBDaGVjayB0aGF0IHRoZSBtZXRhZGF0YSBpbiB0aGUgUFNCVCBtYXRjaGVzIHRoZSBtZXNzYWdlSW5mbywgdGhlbiBjaGVjayB0aGUgaW5wdXQgZGF0YVxuICAgIGNvbnN0IGluZm8gPSBtZXNzYWdlSW5mb1tpbnB1dEluZGV4XTtcblxuICAgIC8vIENoZWNrIHRoYXQgdGhlIHRvX3NwZW5kIHRyYW5zYWN0aW9uIGlzIGVuY29kZWQgaW4gdGhlIG5vbldpdG5lc3NVdHhvXG4gICAgYXNzZXJ0Lm9rKGlucHV0Lm5vbldpdG5lc3NVdHhvLCBgUFNCVCBpbnB1dCAke2lucHV0SW5kZXh9IGlzIG1pc3Npbmcgbm9uV2l0bmVzc1V0eG9gKTtcbiAgICBjb25zdCB0b1NwZW5kVHggPSBidWlsZFRvU3BlbmRUcmFuc2FjdGlvbihwcmV2T3V0c1tpbnB1dEluZGV4XS5zY3JpcHQsIGluZm8ubWVzc2FnZSk7XG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChpbnB1dC5ub25XaXRuZXNzVXR4by50b1N0cmluZygnaGV4JyksIHRvU3BlbmRUeC50b0hleCgpKTtcblxuICAgIGlmIChpbnB1dC5iaXAzMkRlcml2YXRpb24pIHtcbiAgICAgIGlucHV0LmJpcDMyRGVyaXZhdGlvbi5mb3JFYWNoKChiKSA9PiB7XG4gICAgICAgIGNvbnN0IHB1YmtleSA9IGIucHVia2V5LnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgICAgYXNzZXJ0Lm9rKFxuICAgICAgICAgIGluZm8ucHVia2V5cy5pbmNsdWRlcyhwdWJrZXkpLFxuICAgICAgICAgIGBQU0JUIGlucHV0ICR7aW5wdXRJbmRleH0gaGFzIGEgcHVia2V5IGluICh0YXApYmlwMzJEZXJpdmF0aW9uIHRoYXQgaXMgbm90IGluIG1lc3NhZ2VJbmZvYFxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICghaW5wdXQudGFwQmlwMzJEZXJpdmF0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFBTQlQgaW5wdXQgJHtpbnB1dEluZGV4fSBpcyBtaXNzaW5nICh0YXApYmlwMzJEZXJpdmF0aW9uIHdoZW4gaXQgc2hvdWxkIGhhdmUgaXQuYCk7XG4gICAgfVxuXG4gICAgLy8gVmVyaWZ5IHRoZSBzaWduYXR1cmUgb24gdGhlIGlucHV0XG4gICAgYXNzZXJ0Lm9rKHBzYnQudmFsaWRhdGVTaWduYXR1cmVzT2ZJbnB1dENvbW1vbihpbnB1dEluZGV4KSwgYFBTQlQgaW5wdXQgJHtpbnB1dEluZGV4fSBoYXMgYW4gaW52YWxpZCBzaWduYXR1cmUuYCk7XG5cbiAgICAvLyBEbyBub3QgY2hlY2sgdGhlIHNpZ25hdHVyZSB3aGVuIHVzaW5nIHRoZSBQU0JULCB0aGUgc2lnbmF0dXJlIGlzIG5vdCB0aGVyZS4gV2UgYXJlIGdvaW5nXG4gICAgLy8gdG8gc2lnbmF0dXJlcyBpbiB0aGUgUFNCVC5cbiAgICBhc3NlcnRUeElucHV0KHVuc2lnbmVkVHgsIGlucHV0SW5kZXgsIHByZXZPdXRzLCBpbmZvLCBmYWxzZSk7XG4gIH0pO1xufVxuIl19
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bip32utils.d.ts","sourceRoot":"","sources":["../../../src/bip32utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAGvD;;;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"}