@bitgo-beta/utxo-core 1.0.1-alpha.2 → 1.0.1-alpha.200

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 +43 -0
  2. package/dist/cjs/src/Output.d.ts.map +1 -0
  3. package/dist/cjs/src/Output.js +60 -0
  4. package/dist/cjs/src/bip322/index.d.ts +5 -0
  5. package/dist/cjs/src/bip322/index.d.ts.map +1 -0
  6. package/dist/cjs/src/bip322/index.js +21 -0
  7. package/dist/cjs/src/bip322/toSign.d.ts +25 -0
  8. package/dist/cjs/src/bip322/toSign.d.ts.map +1 -0
  9. package/dist/cjs/src/bip322/toSign.js +125 -0
  10. package/dist/cjs/src/bip322/toSpend.d.ts +22 -0
  11. package/dist/cjs/src/bip322/toSpend.d.ts.map +1 -0
  12. package/dist/cjs/src/bip322/toSpend.js +72 -0
  13. package/dist/cjs/src/bip322/utils.d.ts +18 -0
  14. package/dist/cjs/src/bip322/utils.d.ts.map +1 -0
  15. package/dist/cjs/src/bip322/utils.js +115 -0
  16. package/dist/cjs/src/bip322/verify.d.ts +12 -0
  17. package/dist/cjs/src/bip322/verify.d.ts.map +1 -0
  18. package/dist/cjs/src/bip322/verify.js +113 -0
  19. package/dist/cjs/src/bip32utils.d.ts +12 -0
  20. package/dist/cjs/src/bip32utils.d.ts.map +1 -0
  21. package/dist/cjs/src/bip32utils.js +15 -0
  22. package/dist/cjs/src/bip65/index.d.ts +2 -0
  23. package/dist/cjs/src/bip65/index.d.ts.map +1 -0
  24. package/dist/{src/testutil → cjs/src/bip65}/index.js +2 -4
  25. package/dist/cjs/src/bip65/locktime.d.ts +8 -0
  26. package/dist/cjs/src/bip65/locktime.d.ts.map +1 -0
  27. package/dist/cjs/src/bip65/locktime.js +37 -0
  28. package/dist/{src → cjs/src}/descriptor/DescriptorMap.d.ts +1 -1
  29. package/dist/cjs/src/descriptor/DescriptorMap.d.ts.map +1 -0
  30. package/dist/cjs/src/descriptor/DescriptorMap.js +9 -0
  31. package/dist/cjs/src/descriptor/Output.d.ts +23 -0
  32. package/dist/cjs/src/descriptor/Output.d.ts.map +1 -0
  33. package/dist/cjs/src/descriptor/Output.js +41 -0
  34. package/dist/{src → cjs/src}/descriptor/VirtualSize.d.ts +3 -1
  35. package/dist/cjs/src/descriptor/VirtualSize.d.ts.map +1 -0
  36. package/dist/cjs/src/descriptor/VirtualSize.js +100 -0
  37. package/dist/{src → cjs/src}/descriptor/address.d.ts +2 -2
  38. package/dist/cjs/src/descriptor/address.d.ts.map +1 -0
  39. package/dist/{src → cjs/src}/descriptor/address.js +2 -2
  40. package/dist/cjs/src/descriptor/derive.d.ts +13 -0
  41. package/dist/cjs/src/descriptor/derive.d.ts.map +1 -0
  42. package/dist/cjs/src/descriptor/derive.js +45 -0
  43. package/dist/cjs/src/descriptor/fromFixedScriptWallet.d.ts +16 -0
  44. package/dist/cjs/src/descriptor/fromFixedScriptWallet.d.ts.map +1 -0
  45. package/dist/cjs/src/descriptor/fromFixedScriptWallet.js +88 -0
  46. package/dist/cjs/src/descriptor/index.d.ts +11 -0
  47. package/dist/cjs/src/descriptor/index.d.ts.map +1 -0
  48. package/dist/cjs/src/descriptor/index.js +27 -0
  49. package/dist/cjs/src/descriptor/parse/PatternMatcher.d.ts +14 -0
  50. package/dist/cjs/src/descriptor/parse/PatternMatcher.d.ts.map +1 -0
  51. package/dist/cjs/src/descriptor/parse/PatternMatcher.js +60 -0
  52. package/dist/{src → cjs/src}/descriptor/psbt/assertSatisfiable.d.ts +1 -1
  53. package/dist/cjs/src/descriptor/psbt/assertSatisfiable.d.ts.map +1 -0
  54. package/dist/cjs/src/descriptor/psbt/assertSatisfiable.js +74 -0
  55. package/dist/cjs/src/descriptor/psbt/createPsbt.d.ts +23 -0
  56. package/dist/cjs/src/descriptor/psbt/createPsbt.d.ts.map +1 -0
  57. package/dist/cjs/src/descriptor/psbt/createPsbt.js +107 -0
  58. package/dist/{src → cjs/src}/descriptor/psbt/findDescriptors.d.ts +7 -3
  59. package/dist/cjs/src/descriptor/psbt/findDescriptors.d.ts.map +1 -0
  60. package/dist/cjs/src/descriptor/psbt/findDescriptors.js +98 -0
  61. package/dist/{src → cjs/src}/descriptor/psbt/index.d.ts +1 -0
  62. package/dist/cjs/src/descriptor/psbt/index.d.ts.map +1 -0
  63. package/dist/{src → cjs/src}/descriptor/psbt/index.js +2 -1
  64. package/dist/{src → cjs/src}/descriptor/psbt/parse.d.ts +2 -2
  65. package/dist/cjs/src/descriptor/psbt/parse.d.ts.map +1 -0
  66. package/dist/cjs/src/descriptor/psbt/parse.js +87 -0
  67. package/dist/cjs/src/descriptor/psbt/sign.d.ts +26 -0
  68. package/dist/cjs/src/descriptor/psbt/sign.d.ts.map +1 -0
  69. package/dist/cjs/src/descriptor/psbt/sign.js +42 -0
  70. package/dist/{src → cjs/src}/descriptor/psbt/wrap.d.ts +1 -1
  71. package/dist/cjs/src/descriptor/psbt/wrap.d.ts.map +1 -0
  72. package/dist/cjs/src/descriptor/psbt/wrap.js +76 -0
  73. package/dist/cjs/src/dustThreshold.d.ts +4 -0
  74. package/dist/cjs/src/dustThreshold.d.ts.map +1 -0
  75. package/dist/cjs/src/dustThreshold.js +134 -0
  76. package/dist/cjs/src/index.d.ts +10 -0
  77. package/dist/cjs/src/index.d.ts.map +1 -0
  78. package/dist/{src → cjs/src}/index.js +12 -2
  79. package/dist/cjs/src/paygo/attestation.d.ts +11 -0
  80. package/dist/cjs/src/paygo/attestation.d.ts.map +1 -0
  81. package/dist/cjs/src/paygo/attestation.js +58 -0
  82. package/dist/cjs/src/paygo/index.d.ts +3 -0
  83. package/dist/cjs/src/paygo/index.d.ts.map +1 -0
  84. package/dist/cjs/src/paygo/index.js +19 -0
  85. package/dist/cjs/src/paygo/parsePayGoAttestation.d.ts +16 -0
  86. package/dist/cjs/src/paygo/parsePayGoAttestation.d.ts.map +1 -0
  87. package/dist/cjs/src/paygo/parsePayGoAttestation.js +50 -0
  88. package/dist/cjs/src/paygo/psbt/Errors.d.ts +22 -0
  89. package/dist/cjs/src/paygo/psbt/Errors.d.ts.map +1 -0
  90. package/dist/cjs/src/paygo/psbt/Errors.js +44 -0
  91. package/dist/cjs/src/paygo/psbt/index.d.ts +2 -0
  92. package/dist/cjs/src/paygo/psbt/index.d.ts.map +1 -0
  93. package/dist/cjs/src/paygo/psbt/index.js +18 -0
  94. package/dist/cjs/src/paygo/psbt/payGoAddressProof.d.ts +29 -0
  95. package/dist/cjs/src/paygo/psbt/payGoAddressProof.d.ts.map +1 -0
  96. package/dist/cjs/src/paygo/psbt/payGoAddressProof.js +124 -0
  97. package/dist/{src → cjs/src}/testutil/descriptor/descriptors.d.ts +5 -2
  98. package/dist/cjs/src/testutil/descriptor/descriptors.d.ts.map +1 -0
  99. package/dist/cjs/src/testutil/descriptor/descriptors.js +162 -0
  100. package/dist/cjs/src/testutil/descriptor/index.d.ts.map +1 -0
  101. package/dist/{src → cjs/src}/testutil/descriptor/index.js +1 -1
  102. package/dist/{src → cjs/src}/testutil/descriptor/mock.utils.d.ts +6 -4
  103. package/dist/cjs/src/testutil/descriptor/mock.utils.d.ts.map +1 -0
  104. package/dist/cjs/src/testutil/descriptor/mock.utils.js +92 -0
  105. package/dist/cjs/src/testutil/descriptor/psbt.utils.d.ts.map +1 -0
  106. package/dist/cjs/src/testutil/descriptor/psbt.utils.js +21 -0
  107. package/dist/cjs/src/testutil/fixtures.utils.d.ts.map +1 -0
  108. package/dist/cjs/src/testutil/fixtures.utils.js +127 -0
  109. package/dist/cjs/src/testutil/generatePayGoAttestationProof.utils.d.ts +12 -0
  110. package/dist/cjs/src/testutil/generatePayGoAttestationProof.utils.d.ts.map +1 -0
  111. package/dist/cjs/src/testutil/generatePayGoAttestationProof.utils.js +38 -0
  112. package/dist/cjs/src/testutil/index.d.ts +6 -0
  113. package/dist/cjs/src/testutil/index.d.ts.map +1 -0
  114. package/dist/cjs/src/testutil/index.js +22 -0
  115. package/dist/{src → cjs/src}/testutil/key.utils.d.ts +1 -1
  116. package/dist/cjs/src/testutil/key.utils.d.ts.map +1 -0
  117. package/dist/cjs/src/testutil/key.utils.js +60 -0
  118. package/dist/cjs/src/testutil/toPlainObject.utils.d.ts.map +1 -0
  119. package/dist/cjs/src/testutil/toPlainObject.utils.js +89 -0
  120. package/dist/cjs/src/testutil/trimMessagePrefix.d.ts +11 -0
  121. package/dist/cjs/src/testutil/trimMessagePrefix.d.ts.map +1 -0
  122. package/dist/cjs/src/testutil/trimMessagePrefix.js +60 -0
  123. package/dist/cjs/src/xOnlyPubkey.d.ts +2 -0
  124. package/dist/cjs/src/xOnlyPubkey.d.ts.map +1 -0
  125. package/dist/cjs/src/xOnlyPubkey.js +18 -0
  126. package/dist/cjs/test/Output.d.ts +2 -0
  127. package/dist/cjs/test/Output.d.ts.map +1 -0
  128. package/dist/cjs/test/Output.js +70 -0
  129. package/dist/cjs/test/bip322/bip322.utils.d.ts +7 -0
  130. package/dist/cjs/test/bip322/bip322.utils.d.ts.map +1 -0
  131. package/dist/cjs/test/bip322/bip322.utils.js +16 -0
  132. package/dist/cjs/test/bip322/toSign.d.ts +2 -0
  133. package/dist/cjs/test/bip322/toSign.d.ts.map +1 -0
  134. package/dist/cjs/test/bip322/toSign.js +133 -0
  135. package/dist/cjs/test/bip322/toSpend.d.ts +2 -0
  136. package/dist/cjs/test/bip322/toSpend.d.ts.map +1 -0
  137. package/dist/cjs/test/bip322/toSpend.js +70 -0
  138. package/dist/cjs/test/bip322/utils.d.ts +2 -0
  139. package/dist/cjs/test/bip322/utils.d.ts.map +1 -0
  140. package/dist/cjs/test/bip322/utils.js +79 -0
  141. package/dist/cjs/test/bip322/verify.d.ts +2 -0
  142. package/dist/cjs/test/bip322/verify.d.ts.map +1 -0
  143. package/dist/cjs/test/bip322/verify.js +293 -0
  144. package/dist/cjs/test/bip32utils.d.ts +2 -0
  145. package/dist/cjs/test/bip32utils.d.ts.map +1 -0
  146. package/dist/cjs/test/bip32utils.js +62 -0
  147. package/dist/cjs/test/bip65/locktime.d.ts +2 -0
  148. package/dist/cjs/test/bip65/locktime.d.ts.map +1 -0
  149. package/dist/cjs/test/bip65/locktime.js +22 -0
  150. package/dist/cjs/test/descriptor/Output.d.ts +2 -0
  151. package/dist/cjs/test/descriptor/Output.d.ts.map +1 -0
  152. package/dist/cjs/test/descriptor/Output.js +44 -0
  153. package/dist/cjs/test/descriptor/derive.d.ts +2 -0
  154. package/dist/cjs/test/descriptor/derive.d.ts.map +1 -0
  155. package/dist/cjs/test/descriptor/derive.js +27 -0
  156. package/dist/cjs/test/descriptor/fromFixedScriptWallet.d.ts +2 -0
  157. package/dist/cjs/test/descriptor/fromFixedScriptWallet.d.ts.map +1 -0
  158. package/dist/cjs/test/descriptor/fromFixedScriptWallet.js +145 -0
  159. package/dist/cjs/test/descriptor/parse/PatternMatcher.d.ts +2 -0
  160. package/dist/cjs/test/descriptor/parse/PatternMatcher.d.ts.map +1 -0
  161. package/dist/cjs/test/descriptor/parse/PatternMatcher.js +120 -0
  162. package/dist/cjs/test/descriptor/psbt/VirtualSize.d.ts +2 -0
  163. package/dist/cjs/test/descriptor/psbt/VirtualSize.d.ts.map +1 -0
  164. package/dist/cjs/test/descriptor/psbt/VirtualSize.js +71 -0
  165. package/dist/cjs/test/descriptor/psbt/assertSatisfiable.d.ts +2 -0
  166. package/dist/cjs/test/descriptor/psbt/assertSatisfiable.d.ts.map +1 -0
  167. package/dist/cjs/test/descriptor/psbt/assertSatisfiable.js +56 -0
  168. package/dist/cjs/test/descriptor/psbt/findDescriptors.d.ts +2 -0
  169. package/dist/cjs/test/descriptor/psbt/findDescriptors.d.ts.map +1 -0
  170. package/dist/cjs/test/descriptor/psbt/findDescriptors.js +70 -0
  171. package/dist/cjs/test/descriptor/psbt/psbt.d.ts +2 -0
  172. package/dist/cjs/test/descriptor/psbt/psbt.d.ts.map +1 -0
  173. package/dist/cjs/test/descriptor/psbt/psbt.js +211 -0
  174. package/dist/cjs/test/dustThreshold.d.ts +2 -0
  175. package/dist/cjs/test/dustThreshold.d.ts.map +1 -0
  176. package/dist/cjs/test/dustThreshold.js +110 -0
  177. package/dist/cjs/test/paygo/attestation.d.ts +2 -0
  178. package/dist/cjs/test/paygo/attestation.d.ts.map +1 -0
  179. package/dist/cjs/test/paygo/attestation.js +23 -0
  180. package/dist/cjs/test/paygo/parsePayGoAttestation.d.ts +2 -0
  181. package/dist/cjs/test/paygo/parsePayGoAttestation.d.ts.map +1 -0
  182. package/dist/cjs/test/paygo/parsePayGoAttestation.js +75 -0
  183. package/dist/cjs/test/paygo/psbt/payGoAddressProof.d.ts +9 -0
  184. package/dist/cjs/test/paygo/psbt/payGoAddressProof.d.ts.map +1 -0
  185. package/dist/cjs/test/paygo/psbt/payGoAddressProof.js +163 -0
  186. package/dist/cjs/test/xOnlyPubkey.d.ts +2 -0
  187. package/dist/cjs/test/xOnlyPubkey.d.ts.map +1 -0
  188. package/dist/cjs/test/xOnlyPubkey.js +18 -0
  189. package/dist/cjs/tsconfig.tsbuildinfo +1 -0
  190. package/dist/esm/Output.d.ts +43 -0
  191. package/dist/esm/Output.d.ts.map +1 -0
  192. package/dist/esm/Output.js +53 -0
  193. package/dist/esm/bip322/index.d.ts +5 -0
  194. package/dist/esm/bip322/index.d.ts.map +1 -0
  195. package/dist/esm/bip322/index.js +5 -0
  196. package/dist/esm/bip322/toSign.d.ts +25 -0
  197. package/dist/esm/bip322/toSign.d.ts.map +1 -0
  198. package/dist/esm/bip322/toSign.js +119 -0
  199. package/dist/esm/bip322/toSpend.d.ts +22 -0
  200. package/dist/esm/bip322/toSpend.d.ts.map +1 -0
  201. package/dist/esm/bip322/toSpend.js +66 -0
  202. package/dist/esm/bip322/utils.d.ts +18 -0
  203. package/dist/esm/bip322/utils.d.ts.map +1 -0
  204. package/dist/esm/bip322/utils.js +77 -0
  205. package/dist/esm/bip322/verify.d.ts +12 -0
  206. package/dist/esm/bip322/verify.d.ts.map +1 -0
  207. package/dist/esm/bip322/verify.js +74 -0
  208. package/dist/esm/bip32utils.d.ts +12 -0
  209. package/dist/esm/bip32utils.d.ts.map +1 -0
  210. package/dist/esm/bip32utils.js +12 -0
  211. package/dist/esm/bip65/index.d.ts +2 -0
  212. package/dist/esm/bip65/index.d.ts.map +1 -0
  213. package/dist/esm/bip65/index.js +2 -0
  214. package/dist/esm/bip65/locktime.d.ts +8 -0
  215. package/dist/esm/bip65/locktime.d.ts.map +1 -0
  216. package/dist/esm/bip65/locktime.js +34 -0
  217. package/dist/esm/descriptor/DescriptorMap.d.ts +9 -0
  218. package/dist/{src → esm}/descriptor/DescriptorMap.d.ts.map +1 -1
  219. package/dist/esm/descriptor/DescriptorMap.js +6 -0
  220. package/dist/esm/descriptor/Output.d.ts +23 -0
  221. package/dist/esm/descriptor/Output.d.ts.map +1 -0
  222. package/dist/esm/descriptor/Output.js +32 -0
  223. package/dist/esm/descriptor/VirtualSize.d.ts +23 -0
  224. package/dist/esm/descriptor/VirtualSize.d.ts.map +1 -0
  225. package/dist/esm/descriptor/VirtualSize.js +94 -0
  226. package/dist/esm/descriptor/address.d.ts +5 -0
  227. package/dist/esm/descriptor/address.d.ts.map +1 -0
  228. package/dist/esm/descriptor/address.js +11 -0
  229. package/dist/esm/descriptor/derive.d.ts +13 -0
  230. package/dist/esm/descriptor/derive.d.ts.map +1 -0
  231. package/dist/esm/descriptor/derive.js +38 -0
  232. package/dist/esm/descriptor/fromFixedScriptWallet.d.ts +16 -0
  233. package/dist/esm/descriptor/fromFixedScriptWallet.d.ts.map +1 -0
  234. package/dist/esm/descriptor/fromFixedScriptWallet.js +51 -0
  235. package/dist/esm/descriptor/index.d.ts +11 -0
  236. package/dist/esm/descriptor/index.d.ts.map +1 -0
  237. package/dist/esm/descriptor/index.js +11 -0
  238. package/dist/esm/descriptor/parse/PatternMatcher.d.ts +14 -0
  239. package/dist/esm/descriptor/parse/PatternMatcher.d.ts.map +1 -0
  240. package/dist/esm/descriptor/parse/PatternMatcher.js +56 -0
  241. package/dist/esm/descriptor/psbt/assertSatisfiable.d.ts +20 -0
  242. package/dist/{src → esm}/descriptor/psbt/assertSatisfiable.d.ts.map +1 -1
  243. package/dist/esm/descriptor/psbt/assertSatisfiable.js +69 -0
  244. package/dist/esm/descriptor/psbt/createPsbt.d.ts +23 -0
  245. package/dist/esm/descriptor/psbt/createPsbt.d.ts.map +1 -0
  246. package/dist/esm/descriptor/psbt/createPsbt.js +69 -0
  247. package/dist/esm/descriptor/psbt/findDescriptors.d.ts +26 -0
  248. package/dist/esm/descriptor/psbt/findDescriptors.d.ts.map +1 -0
  249. package/dist/esm/descriptor/psbt/findDescriptors.js +94 -0
  250. package/dist/esm/descriptor/psbt/index.d.ts +7 -0
  251. package/dist/{src → esm}/descriptor/psbt/index.d.ts.map +1 -1
  252. package/dist/esm/descriptor/psbt/index.js +7 -0
  253. package/dist/esm/descriptor/psbt/parse.d.ts +27 -0
  254. package/dist/esm/descriptor/psbt/parse.d.ts.map +1 -0
  255. package/dist/esm/descriptor/psbt/parse.js +51 -0
  256. package/dist/esm/descriptor/psbt/sign.d.ts +26 -0
  257. package/dist/esm/descriptor/psbt/sign.d.ts.map +1 -0
  258. package/dist/esm/descriptor/psbt/sign.js +34 -0
  259. package/dist/esm/descriptor/psbt/wrap.d.ts +12 -0
  260. package/dist/{src → esm}/descriptor/psbt/wrap.d.ts.map +1 -1
  261. package/dist/esm/descriptor/psbt/wrap.js +38 -0
  262. package/dist/esm/dustThreshold.d.ts +4 -0
  263. package/dist/esm/dustThreshold.d.ts.map +1 -0
  264. package/dist/esm/dustThreshold.js +97 -0
  265. package/dist/esm/index.d.ts +10 -0
  266. package/dist/esm/index.d.ts.map +1 -0
  267. package/dist/esm/index.js +10 -0
  268. package/dist/esm/paygo/attestation.d.ts +11 -0
  269. package/dist/esm/paygo/attestation.d.ts.map +1 -0
  270. package/dist/esm/paygo/attestation.js +18 -0
  271. package/dist/esm/paygo/index.d.ts +3 -0
  272. package/dist/esm/paygo/index.d.ts.map +1 -0
  273. package/dist/esm/paygo/index.js +3 -0
  274. package/dist/esm/paygo/parsePayGoAttestation.d.ts +16 -0
  275. package/dist/esm/paygo/parsePayGoAttestation.d.ts.map +1 -0
  276. package/dist/esm/paygo/parsePayGoAttestation.js +43 -0
  277. package/dist/esm/paygo/psbt/Errors.d.ts +22 -0
  278. package/dist/esm/paygo/psbt/Errors.d.ts.map +1 -0
  279. package/dist/esm/paygo/psbt/Errors.js +35 -0
  280. package/dist/esm/paygo/psbt/index.d.ts +2 -0
  281. package/dist/esm/paygo/psbt/index.d.ts.map +1 -0
  282. package/dist/esm/paygo/psbt/index.js +2 -0
  283. package/dist/esm/paygo/psbt/payGoAddressProof.d.ts +29 -0
  284. package/dist/esm/paygo/psbt/payGoAddressProof.d.ts.map +1 -0
  285. package/dist/esm/paygo/psbt/payGoAddressProof.js +85 -0
  286. package/dist/esm/testutil/descriptor/descriptors.d.ts +13 -0
  287. package/dist/esm/testutil/descriptor/descriptors.d.ts.map +1 -0
  288. package/dist/esm/testutil/descriptor/descriptors.js +150 -0
  289. package/dist/esm/testutil/descriptor/index.d.ts +4 -0
  290. package/dist/esm/testutil/descriptor/index.js +4 -0
  291. package/dist/esm/testutil/descriptor/mock.utils.d.ts +36 -0
  292. package/dist/esm/testutil/descriptor/mock.utils.d.ts.map +1 -0
  293. package/dist/esm/testutil/descriptor/mock.utils.js +53 -0
  294. package/dist/esm/testutil/descriptor/psbt.utils.d.ts +4 -0
  295. package/dist/{src → esm}/testutil/descriptor/psbt.utils.d.ts.map +1 -1
  296. package/dist/esm/testutil/descriptor/psbt.utils.js +17 -0
  297. package/dist/esm/testutil/fixtures.utils.d.ts +15 -0
  298. package/dist/{src → esm}/testutil/fixtures.utils.js +5 -42
  299. package/dist/esm/testutil/generatePayGoAttestationProof.utils.d.ts +12 -0
  300. package/dist/esm/testutil/generatePayGoAttestationProof.utils.d.ts.map +1 -0
  301. package/dist/esm/testutil/generatePayGoAttestationProof.utils.js +32 -0
  302. package/dist/esm/testutil/index.d.ts +6 -0
  303. package/dist/{src → esm}/testutil/index.d.ts.map +1 -1
  304. package/dist/esm/testutil/index.js +6 -0
  305. package/dist/esm/testutil/key.utils.d.ts +16 -0
  306. package/dist/{src → esm}/testutil/key.utils.d.ts.map +1 -1
  307. package/dist/esm/testutil/key.utils.js +22 -0
  308. package/dist/esm/testutil/toPlainObject.utils.d.ts +11 -0
  309. package/dist/{src → esm}/testutil/toPlainObject.utils.d.ts.map +1 -1
  310. package/dist/esm/testutil/toPlainObject.utils.js +85 -0
  311. package/dist/esm/testutil/trimMessagePrefix.d.ts +11 -0
  312. package/dist/esm/testutil/trimMessagePrefix.d.ts.map +1 -0
  313. package/dist/esm/testutil/trimMessagePrefix.js +24 -0
  314. package/dist/esm/xOnlyPubkey.d.ts +2 -0
  315. package/dist/esm/xOnlyPubkey.d.ts.map +1 -0
  316. package/dist/esm/xOnlyPubkey.js +15 -0
  317. package/package.json +51 -22
  318. package/dist/src/descriptor/DescriptorMap.js +0 -12
  319. package/dist/src/descriptor/Output.d.ts +0 -24
  320. package/dist/src/descriptor/Output.d.ts.map +0 -1
  321. package/dist/src/descriptor/Output.js +0 -22
  322. package/dist/src/descriptor/VirtualSize.d.ts.map +0 -1
  323. package/dist/src/descriptor/VirtualSize.js +0 -87
  324. package/dist/src/descriptor/address.d.ts.map +0 -1
  325. package/dist/src/descriptor/index.d.ts +0 -9
  326. package/dist/src/descriptor/index.d.ts.map +0 -1
  327. package/dist/src/descriptor/index.js +0 -49
  328. package/dist/src/descriptor/psbt/assertSatisfiable.js +0 -74
  329. package/dist/src/descriptor/psbt/createPsbt.d.ts +0 -15
  330. package/dist/src/descriptor/psbt/createPsbt.d.ts.map +0 -1
  331. package/dist/src/descriptor/psbt/createPsbt.js +0 -82
  332. package/dist/src/descriptor/psbt/findDescriptors.d.ts.map +0 -1
  333. package/dist/src/descriptor/psbt/findDescriptors.js +0 -85
  334. package/dist/src/descriptor/psbt/parse.d.ts.map +0 -1
  335. package/dist/src/descriptor/psbt/parse.js +0 -87
  336. package/dist/src/descriptor/psbt/wrap.js +0 -76
  337. package/dist/src/index.d.ts +0 -3
  338. package/dist/src/index.d.ts.map +0 -1
  339. package/dist/src/testutil/descriptor/descriptors.d.ts.map +0 -1
  340. package/dist/src/testutil/descriptor/descriptors.js +0 -105
  341. package/dist/src/testutil/descriptor/mock.utils.d.ts.map +0 -1
  342. package/dist/src/testutil/descriptor/mock.utils.js +0 -87
  343. package/dist/src/testutil/descriptor/psbt.utils.js +0 -20
  344. package/dist/src/testutil/index.d.ts +0 -4
  345. package/dist/src/testutil/key.utils.js +0 -59
  346. package/dist/src/testutil/toPlainObject.utils.js +0 -75
  347. /package/dist/{src → cjs/src}/testutil/descriptor/index.d.ts +0 -0
  348. /package/dist/{src → cjs/src}/testutil/descriptor/psbt.utils.d.ts +0 -0
  349. /package/dist/{src → cjs/src}/testutil/fixtures.utils.d.ts +0 -0
  350. /package/dist/{src → cjs/src}/testutil/toPlainObject.utils.d.ts +0 -0
  351. /package/dist/{src → esm}/testutil/descriptor/index.d.ts.map +0 -0
  352. /package/dist/{src → esm}/testutil/fixtures.utils.d.ts.map +0 -0
@@ -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;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,66 @@
1
+ import { Hash } from 'fast-sha256';
2
+ import { Psbt, bitgo, networks } from '@bitgo-beta/utxo-lib';
3
+ export const BIP322_TAG = 'BIP0322-signed-message';
4
+ /**
5
+ * Perform a tagged hash
6
+ *
7
+ * @param {string | Buffer} message - The message to hash as a Buffer or utf-8 string
8
+ * @param {Buffer} [tag=BIP322_TAG] - The tag to use for hashing, defaults to BIP322_TAG.
9
+ * @returns {Buffer} - The resulting hash of the message with the tag.
10
+ */
11
+ export function hashMessageWithTag(message, tag = BIP322_TAG) {
12
+ // Compute the message hash - SHA256(SHA256(tag) || SHA256(tag) || message)
13
+ // Reference: https://github.com/bitcoin/bips/blob/master/bip-0322.mediawiki#full
14
+ const tagHasher = new Hash();
15
+ tagHasher.update(Buffer.from(BIP322_TAG));
16
+ const tagHash = tagHasher.digest();
17
+ const messageHasher = new Hash();
18
+ messageHasher.update(tagHash);
19
+ messageHasher.update(tagHash);
20
+ messageHasher.update(Buffer.from(message));
21
+ const messageHash = messageHasher.digest();
22
+ return Buffer.from(messageHash);
23
+ }
24
+ /**
25
+ * Build a BIP322 "to spend" transaction
26
+ * Source: https://github.com/bitcoin/bips/blob/master/bip-0322.mediawiki#full
27
+ *
28
+ * @param {Buffer} scriptPubKey - The scriptPubKey to use for the output
29
+ * @param {string | Buffer} message - The message to include in the transaction
30
+ * @param {Buffer} [tag=BIP322_TAG] - The tag to use for hashing, defaults to BIP322_TAG.
31
+ * @returns {Transaction} - The constructed transaction
32
+ */
33
+ export function buildToSpendTransaction(scriptPubKey, message, tag = BIP322_TAG) {
34
+ // Create PSBT object for constructing the transaction
35
+ const psbt = new Psbt();
36
+ // Set default value for nVersion and nLockTime
37
+ psbt.setVersion(0); // nVersion = 0
38
+ psbt.setLocktime(0); // nLockTime = 0
39
+ // Compute the message hash - SHA256(SHA256(tag) || SHA256(tag) || message)
40
+ const messageHash = hashMessageWithTag(message, tag);
41
+ // Construct the scriptSig - OP_0 PUSH32[ message_hash ]
42
+ const scriptSigPartOne = new Uint8Array([0x00, 0x20]); // OP_0 PUSH32
43
+ const scriptSig = new Uint8Array(scriptSigPartOne.length + messageHash.length);
44
+ scriptSig.set(scriptSigPartOne);
45
+ scriptSig.set(messageHash, scriptSigPartOne.length);
46
+ // Set the input
47
+ psbt.addInput({
48
+ hash: '0'.repeat(64), // vin[0].prevout.hash = 0000...000
49
+ index: 0xffffffff, // vin[0].prevout.n = 0xFFFFFFFF
50
+ sequence: 0, // vin[0].nSequence = 0
51
+ finalScriptSig: Buffer.from(scriptSig), // vin[0].scriptSig = OP_0 PUSH32[ message_hash ]
52
+ witnessScript: Buffer.from([]), // vin[0].scriptWitness = []
53
+ });
54
+ // Set the output
55
+ psbt.addOutput({
56
+ value: BigInt(0), // vout[0].nValue = 0
57
+ script: scriptPubKey, // vout[0].scriptPubKey = message_challenge
58
+ });
59
+ // Return transaction
60
+ return psbt.extractTransaction();
61
+ }
62
+ export function buildToSpendTransactionFromChainAndIndex(rootWalletKeys, chain, index, message, tag = BIP322_TAG) {
63
+ const outputScript = bitgo.outputScripts.createOutputScript2of3(rootWalletKeys.deriveForChainAndIndex(chain, index).publicKeys, bitgo.scriptTypeForChain(chain), networks.bitcoin);
64
+ return buildToSpendTransaction(outputScript.scriptPubKey, message, tag);
65
+ }
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9TcGVuZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iaXAzMjIvdG9TcGVuZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ25DLE9BQU8sRUFBRSxJQUFJLEVBQWUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRTFFLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyx3QkFBd0IsQ0FBQztBQUVuRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsT0FBd0IsRUFBRSxHQUFHLEdBQUcsVUFBVTtJQUMzRSwyRUFBMkU7SUFDM0UsaUZBQWlGO0lBQ2pGLE1BQU0sU0FBUyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7SUFDN0IsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDMUMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ25DLE1BQU0sYUFBYSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7SUFDakMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM5QixhQUFhLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzlCLGFBQWEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQzNDLE1BQU0sV0FBVyxHQUFHLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUMzQyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDbEMsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxVQUFVLHVCQUF1QixDQUNyQyxZQUFvQixFQUNwQixPQUF3QixFQUN4QixHQUFHLEdBQUcsVUFBVTtJQUVoQixzREFBc0Q7SUFDdEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUN4QiwrQ0FBK0M7SUFDL0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWU7SUFDbkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQjtJQUNyQywyRUFBMkU7SUFDM0UsTUFBTSxXQUFXLEdBQUcsa0JBQWtCLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3JELHdEQUF3RDtJQUN4RCxNQUFNLGdCQUFnQixHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjO0lBQ3JFLE1BQU0sU0FBUyxHQUFHLElBQUksVUFBVSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDL0UsU0FBUyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ2hDLFNBQVMsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3BELGdCQUFnQjtJQUNoQixJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ1osSUFBSSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsbUNBQW1DO1FBQ3pELEtBQUssRUFBRSxVQUFVLEVBQUUsZ0NBQWdDO1FBQ25ELFFBQVEsRUFBRSxDQUFDLEVBQUUsdUJBQXVCO1FBQ3BDLGNBQWMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLGlEQUFpRDtRQUN6RixhQUFhLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSw0QkFBNEI7S0FDN0QsQ0FBQyxDQUFDO0lBQ0gsaUJBQWlCO0lBQ2pCLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDYixLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLHFCQUFxQjtRQUN2QyxNQUFNLEVBQUUsWUFBWSxFQUFFLDJDQUEyQztLQUNsRSxDQUFDLENBQUM7SUFDSCxxQkFBcUI7SUFDckIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztBQUNuQyxDQUFDO0FBRUQsTUFBTSxVQUFVLHdDQUF3QyxDQUN0RCxjQUFvQyxFQUNwQyxLQUFzQixFQUN0QixLQUFhLEVBQ2IsT0FBd0IsRUFDeEIsR0FBRyxHQUFHLFVBQVU7SUFFaEIsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxzQkFBc0IsQ0FDN0QsY0FBYyxDQUFDLHNCQUFzQixDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxVQUFVLEVBQzlELEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsRUFDL0IsUUFBUSxDQUFDLE9BQU8sQ0FDakIsQ0FBQztJQUNGLE9BQU8sdUJBQXVCLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEhhc2ggfSBmcm9tICdmYXN0LXNoYTI1Nic7XG5pbXBvcnQgeyBQc2J0LCBUcmFuc2FjdGlvbiwgYml0Z28sIG5ldHdvcmtzIH0gZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuXG5leHBvcnQgY29uc3QgQklQMzIyX1RBRyA9ICdCSVAwMzIyLXNpZ25lZC1tZXNzYWdlJztcblxuLyoqXG4gKiBQZXJmb3JtIGEgdGFnZ2VkIGhhc2hcbiAqXG4gKiBAcGFyYW0ge3N0cmluZyB8IEJ1ZmZlcn0gbWVzc2FnZSAtIFRoZSBtZXNzYWdlIHRvIGhhc2ggYXMgYSBCdWZmZXIgb3IgdXRmLTggc3RyaW5nXG4gKiBAcGFyYW0ge0J1ZmZlcn0gW3RhZz1CSVAzMjJfVEFHXSAtIFRoZSB0YWcgdG8gdXNlIGZvciBoYXNoaW5nLCBkZWZhdWx0cyB0byBCSVAzMjJfVEFHLlxuICogQHJldHVybnMge0J1ZmZlcn0gLSBUaGUgcmVzdWx0aW5nIGhhc2ggb2YgdGhlIG1lc3NhZ2Ugd2l0aCB0aGUgdGFnLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzaE1lc3NhZ2VXaXRoVGFnKG1lc3NhZ2U6IHN0cmluZyB8IEJ1ZmZlciwgdGFnID0gQklQMzIyX1RBRyk6IEJ1ZmZlciB7XG4gIC8vIENvbXB1dGUgdGhlIG1lc3NhZ2UgaGFzaCAtIFNIQTI1NihTSEEyNTYodGFnKSB8fCBTSEEyNTYodGFnKSB8fCBtZXNzYWdlKVxuICAvLyBSZWZlcmVuY2U6IGh0dHBzOi8vZ2l0aHViLmNvbS9iaXRjb2luL2JpcHMvYmxvYi9tYXN0ZXIvYmlwLTAzMjIubWVkaWF3aWtpI2Z1bGxcbiAgY29uc3QgdGFnSGFzaGVyID0gbmV3IEhhc2goKTtcbiAgdGFnSGFzaGVyLnVwZGF0ZShCdWZmZXIuZnJvbShCSVAzMjJfVEFHKSk7XG4gIGNvbnN0IHRhZ0hhc2ggPSB0YWdIYXNoZXIuZGlnZXN0KCk7XG4gIGNvbnN0IG1lc3NhZ2VIYXNoZXIgPSBuZXcgSGFzaCgpO1xuICBtZXNzYWdlSGFzaGVyLnVwZGF0ZSh0YWdIYXNoKTtcbiAgbWVzc2FnZUhhc2hlci51cGRhdGUodGFnSGFzaCk7XG4gIG1lc3NhZ2VIYXNoZXIudXBkYXRlKEJ1ZmZlci5mcm9tKG1lc3NhZ2UpKTtcbiAgY29uc3QgbWVzc2FnZUhhc2ggPSBtZXNzYWdlSGFzaGVyLmRpZ2VzdCgpO1xuICByZXR1cm4gQnVmZmVyLmZyb20obWVzc2FnZUhhc2gpO1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgQklQMzIyIFwidG8gc3BlbmRcIiB0cmFuc2FjdGlvblxuICogU291cmNlOiBodHRwczovL2dpdGh1Yi5jb20vYml0Y29pbi9iaXBzL2Jsb2IvbWFzdGVyL2JpcC0wMzIyLm1lZGlhd2lraSNmdWxsXG4gKlxuICogQHBhcmFtIHtCdWZmZXJ9IHNjcmlwdFB1YktleSAtIFRoZSBzY3JpcHRQdWJLZXkgdG8gdXNlIGZvciB0aGUgb3V0cHV0XG4gKiBAcGFyYW0ge3N0cmluZyB8IEJ1ZmZlcn0gbWVzc2FnZSAtIFRoZSBtZXNzYWdlIHRvIGluY2x1ZGUgaW4gdGhlIHRyYW5zYWN0aW9uXG4gKiBAcGFyYW0ge0J1ZmZlcn0gW3RhZz1CSVAzMjJfVEFHXSAtIFRoZSB0YWcgdG8gdXNlIGZvciBoYXNoaW5nLCBkZWZhdWx0cyB0byBCSVAzMjJfVEFHLlxuICogQHJldHVybnMge1RyYW5zYWN0aW9ufSAtIFRoZSBjb25zdHJ1Y3RlZCB0cmFuc2FjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRUb1NwZW5kVHJhbnNhY3Rpb24oXG4gIHNjcmlwdFB1YktleTogQnVmZmVyLFxuICBtZXNzYWdlOiBzdHJpbmcgfCBCdWZmZXIsXG4gIHRhZyA9IEJJUDMyMl9UQUdcbik6IFRyYW5zYWN0aW9uPGJpZ2ludD4ge1xuICAvLyBDcmVhdGUgUFNCVCBvYmplY3QgZm9yIGNvbnN0cnVjdGluZyB0aGUgdHJhbnNhY3Rpb25cbiAgY29uc3QgcHNidCA9IG5ldyBQc2J0KCk7XG4gIC8vIFNldCBkZWZhdWx0IHZhbHVlIGZvciBuVmVyc2lvbiBhbmQgbkxvY2tUaW1lXG4gIHBzYnQuc2V0VmVyc2lvbigwKTsgLy8gblZlcnNpb24gPSAwXG4gIHBzYnQuc2V0TG9ja3RpbWUoMCk7IC8vIG5Mb2NrVGltZSA9IDBcbiAgLy8gQ29tcHV0ZSB0aGUgbWVzc2FnZSBoYXNoIC0gU0hBMjU2KFNIQTI1Nih0YWcpIHx8IFNIQTI1Nih0YWcpIHx8IG1lc3NhZ2UpXG4gIGNvbnN0IG1lc3NhZ2VIYXNoID0gaGFzaE1lc3NhZ2VXaXRoVGFnKG1lc3NhZ2UsIHRhZyk7XG4gIC8vIENvbnN0cnVjdCB0aGUgc2NyaXB0U2lnIC0gT1BfMCBQVVNIMzJbIG1lc3NhZ2VfaGFzaCBdXG4gIGNvbnN0IHNjcmlwdFNpZ1BhcnRPbmUgPSBuZXcgVWludDhBcnJheShbMHgwMCwgMHgyMF0pOyAvLyBPUF8wIFBVU0gzMlxuICBjb25zdCBzY3JpcHRTaWcgPSBuZXcgVWludDhBcnJheShzY3JpcHRTaWdQYXJ0T25lLmxlbmd0aCArIG1lc3NhZ2VIYXNoLmxlbmd0aCk7XG4gIHNjcmlwdFNpZy5zZXQoc2NyaXB0U2lnUGFydE9uZSk7XG4gIHNjcmlwdFNpZy5zZXQobWVzc2FnZUhhc2gsIHNjcmlwdFNpZ1BhcnRPbmUubGVuZ3RoKTtcbiAgLy8gU2V0IHRoZSBpbnB1dFxuICBwc2J0LmFkZElucHV0KHtcbiAgICBoYXNoOiAnMCcucmVwZWF0KDY0KSwgLy8gdmluWzBdLnByZXZvdXQuaGFzaCA9IDAwMDAuLi4wMDBcbiAgICBpbmRleDogMHhmZmZmZmZmZiwgLy8gdmluWzBdLnByZXZvdXQubiA9IDB4RkZGRkZGRkZcbiAgICBzZXF1ZW5jZTogMCwgLy8gdmluWzBdLm5TZXF1ZW5jZSA9IDBcbiAgICBmaW5hbFNjcmlwdFNpZzogQnVmZmVyLmZyb20oc2NyaXB0U2lnKSwgLy8gdmluWzBdLnNjcmlwdFNpZyA9IE9QXzAgUFVTSDMyWyBtZXNzYWdlX2hhc2ggXVxuICAgIHdpdG5lc3NTY3JpcHQ6IEJ1ZmZlci5mcm9tKFtdKSwgLy8gdmluWzBdLnNjcmlwdFdpdG5lc3MgPSBbXVxuICB9KTtcbiAgLy8gU2V0IHRoZSBvdXRwdXRcbiAgcHNidC5hZGRPdXRwdXQoe1xuICAgIHZhbHVlOiBCaWdJbnQoMCksIC8vIHZvdXRbMF0ublZhbHVlID0gMFxuICAgIHNjcmlwdDogc2NyaXB0UHViS2V5LCAvLyB2b3V0WzBdLnNjcmlwdFB1YktleSA9IG1lc3NhZ2VfY2hhbGxlbmdlXG4gIH0pO1xuICAvLyBSZXR1cm4gdHJhbnNhY3Rpb25cbiAgcmV0dXJuIHBzYnQuZXh0cmFjdFRyYW5zYWN0aW9uKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFRvU3BlbmRUcmFuc2FjdGlvbkZyb21DaGFpbkFuZEluZGV4KFxuICByb290V2FsbGV0S2V5czogYml0Z28uUm9vdFdhbGxldEtleXMsXG4gIGNoYWluOiBiaXRnby5DaGFpbkNvZGUsXG4gIGluZGV4OiBudW1iZXIsXG4gIG1lc3NhZ2U6IHN0cmluZyB8IEJ1ZmZlcixcbiAgdGFnID0gQklQMzIyX1RBR1xuKTogVHJhbnNhY3Rpb248YmlnaW50PiB7XG4gIGNvbnN0IG91dHB1dFNjcmlwdCA9IGJpdGdvLm91dHB1dFNjcmlwdHMuY3JlYXRlT3V0cHV0U2NyaXB0Mm9mMyhcbiAgICByb290V2FsbGV0S2V5cy5kZXJpdmVGb3JDaGFpbkFuZEluZGV4KGNoYWluLCBpbmRleCkucHVibGljS2V5cyxcbiAgICBiaXRnby5zY3JpcHRUeXBlRm9yQ2hhaW4oY2hhaW4pLFxuICAgIG5ldHdvcmtzLmJpdGNvaW5cbiAgKTtcbiAgcmV0dXJuIGJ1aWxkVG9TcGVuZFRyYW5zYWN0aW9uKG91dHB1dFNjcmlwdC5zY3JpcHRQdWJLZXksIG1lc3NhZ2UsIHRhZyk7XG59XG4iXX0=
@@ -0,0 +1,18 @@
1
+ import * as utxolib from '@bitgo-beta/utxo-lib';
2
+ export declare function addBip322ProofMessage(psbt: utxolib.Psbt, inputIndex: number, message: Buffer): void;
3
+ /**
4
+ * Get the BIP322 proof message at a specific input index of the PSBT
5
+ * @param psbt
6
+ * @param inputIndex
7
+ * @returns The BIP322 proof message as a Buffer, or undefined if not found
8
+ */
9
+ export declare function getBip322ProofMessageAtIndex(psbt: utxolib.Psbt, inputIndex: number): Buffer | undefined;
10
+ /**
11
+ * checks if the transaction contains a BIP322 proof
12
+ * does not check if the proof is valid
13
+ * Source: https://github.com/bitcoin/bips/blob/master/bip-0322.mediawiki#user-content-Full
14
+ * @params tx The transaction or the PSBT to check
15
+ * @returns boolean
16
+ */
17
+ export declare function isBip322ProofCheck(tx: utxolib.bitgo.UtxoPsbt | utxolib.bitgo.UtxoTransaction<bigint>): boolean;
18
+ //# 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,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,77 @@
1
+ import * as utxolib from '@bitgo-beta/utxo-lib';
2
+ export function addBip322ProofMessage(psbt, inputIndex, message) {
3
+ utxolib.bitgo.addProprietaryKeyValuesFromUnknownKeyValues(psbt, 'input', inputIndex, {
4
+ key: {
5
+ identifier: utxolib.bitgo.PSBT_PROPRIETARY_IDENTIFIER,
6
+ subtype: utxolib.bitgo.ProprietaryKeySubtype.BIP322_MESSAGE,
7
+ keydata: Buffer.alloc(0),
8
+ },
9
+ value: message,
10
+ });
11
+ }
12
+ /**
13
+ * Get the BIP322 proof message at a specific input index of the PSBT
14
+ * @param psbt
15
+ * @param inputIndex
16
+ * @returns The BIP322 proof message as a Buffer, or undefined if not found
17
+ */
18
+ export function getBip322ProofMessageAtIndex(psbt, inputIndex) {
19
+ if (psbt.data.inputs.length <= inputIndex) {
20
+ throw new Error(`Input index ${inputIndex} is out of bounds for the PSBT`);
21
+ }
22
+ const input = psbt.data.inputs[inputIndex];
23
+ const proprietaryKeyVals = utxolib.bitgo.getPsbtInputProprietaryKeyVals(input, {
24
+ identifier: utxolib.bitgo.PSBT_PROPRIETARY_IDENTIFIER,
25
+ subtype: utxolib.bitgo.ProprietaryKeySubtype.BIP322_MESSAGE,
26
+ });
27
+ if (proprietaryKeyVals.length === 0) {
28
+ return undefined;
29
+ }
30
+ else if (proprietaryKeyVals.length > 1) {
31
+ throw new Error(`Multiple BIP322 messages found at input index ${inputIndex}`);
32
+ }
33
+ return Buffer.from(proprietaryKeyVals[0].value);
34
+ }
35
+ /**
36
+ * checks if the transaction contains a BIP322 proof
37
+ * does not check if the proof is valid
38
+ * Source: https://github.com/bitcoin/bips/blob/master/bip-0322.mediawiki#user-content-Full
39
+ * @params tx The transaction or the PSBT to check
40
+ * @returns boolean
41
+ */
42
+ export function isBip322ProofCheck(tx) {
43
+ if (tx instanceof utxolib.bitgo.UtxoPsbt) {
44
+ if (tx.version !== 0 || tx.locktime !== 0 || tx.data.outputs.length !== 1) {
45
+ return false;
46
+ }
47
+ const output = tx.txOutputs[0];
48
+ if (output.script.toString('hex') !== '6a' || output.value !== 0n) {
49
+ return false;
50
+ }
51
+ // Return true if there is a message encoded in every input in the proprietary field
52
+ return tx.data.inputs.every((input, index) => getBip322ProofMessageAtIndex(tx, index) !== undefined);
53
+ }
54
+ else if (tx instanceof utxolib.bitgo.UtxoTransaction) {
55
+ if (tx.version !== 0 || tx.locktime !== 0 || tx.outs.length !== 1) {
56
+ return false;
57
+ }
58
+ if (tx.outs.length !== 1) {
59
+ return false;
60
+ }
61
+ const output = tx.outs[0];
62
+ // check that the only output is an OP_RETURN with 0 value
63
+ if (output.script.toString('hex') !== '6a' || output.value !== 0n) {
64
+ return false;
65
+ }
66
+ for (const input of tx.ins) {
67
+ if (input.index !== 0 || input.sequence !== 0) {
68
+ return false;
69
+ }
70
+ }
71
+ return true;
72
+ }
73
+ else {
74
+ throw new Error('Unsupported transaction type for BIP322 proof check');
75
+ }
76
+ }
77
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmlwMzIyL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sc0JBQXNCLENBQUM7QUFFaEQsTUFBTSxVQUFVLHFCQUFxQixDQUFDLElBQWtCLEVBQUUsVUFBa0IsRUFBRSxPQUFlO0lBQzNGLE9BQU8sQ0FBQyxLQUFLLENBQUMsMkNBQTJDLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUU7UUFDbkYsR0FBRyxFQUFFO1lBQ0gsVUFBVSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsMkJBQTJCO1lBQ3JELE9BQU8sRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLGNBQWM7WUFDM0QsT0FBTyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1NBQ3pCO1FBQ0QsS0FBSyxFQUFFLE9BQU87S0FDZixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsNEJBQTRCLENBQUMsSUFBa0IsRUFBRSxVQUFrQjtJQUNqRixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUMxQyxNQUFNLElBQUksS0FBSyxDQUFDLGVBQWUsVUFBVSxnQ0FBZ0MsQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFDRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMzQyxNQUFNLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsOEJBQThCLENBQUMsS0FBSyxFQUFFO1FBQzdFLFVBQVUsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLDJCQUEyQjtRQUNyRCxPQUFPLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxjQUFjO0tBQzVELENBQUMsQ0FBQztJQUNILElBQUksa0JBQWtCLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3BDLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7U0FBTSxJQUFJLGtCQUFrQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN6QyxNQUFNLElBQUksS0FBSyxDQUFDLGlEQUFpRCxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQ2pGLENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbEQsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxFQUFrRTtJQUNuRyxJQUFJLEVBQUUsWUFBWSxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3pDLElBQUksRUFBRSxDQUFDLE9BQU8sS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzFFLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0IsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLElBQUksTUFBTSxDQUFDLEtBQUssS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUNsRSxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCxvRkFBb0Y7UUFDcEYsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyw0QkFBNEIsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUM7SUFDdkcsQ0FBQztTQUFNLElBQUksRUFBRSxZQUFZLE9BQU8sQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkQsSUFBSSxFQUFFLENBQUMsT0FBTyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNsRSxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFDRCxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3pCLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUIsMERBQTBEO1FBQzFELElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxJQUFJLE1BQU0sQ0FBQyxLQUFLLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDbEUsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsS0FBSyxNQUFNLEtBQUssSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDM0IsSUFBSSxLQUFLLENBQUMsS0FBSyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsUUFBUSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUM5QyxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO1NBQU0sQ0FBQztRQUNOLE1BQU0sSUFBSSxLQUFLLENBQUMscURBQXFELENBQUMsQ0FBQztJQUN6RSxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuXG5leHBvcnQgZnVuY3Rpb24gYWRkQmlwMzIyUHJvb2ZNZXNzYWdlKHBzYnQ6IHV0eG9saWIuUHNidCwgaW5wdXRJbmRleDogbnVtYmVyLCBtZXNzYWdlOiBCdWZmZXIpOiB2b2lkIHtcbiAgdXR4b2xpYi5iaXRnby5hZGRQcm9wcmlldGFyeUtleVZhbHVlc0Zyb21Vbmtub3duS2V5VmFsdWVzKHBzYnQsICdpbnB1dCcsIGlucHV0SW5kZXgsIHtcbiAgICBrZXk6IHtcbiAgICAgIGlkZW50aWZpZXI6IHV0eG9saWIuYml0Z28uUFNCVF9QUk9QUklFVEFSWV9JREVOVElGSUVSLFxuICAgICAgc3VidHlwZTogdXR4b2xpYi5iaXRnby5Qcm9wcmlldGFyeUtleVN1YnR5cGUuQklQMzIyX01FU1NBR0UsXG4gICAgICBrZXlkYXRhOiBCdWZmZXIuYWxsb2MoMCksXG4gICAgfSxcbiAgICB2YWx1ZTogbWVzc2FnZSxcbiAgfSk7XG59XG5cbi8qKlxuICogR2V0IHRoZSBCSVAzMjIgcHJvb2YgbWVzc2FnZSBhdCBhIHNwZWNpZmljIGlucHV0IGluZGV4IG9mIHRoZSBQU0JUXG4gKiBAcGFyYW0gcHNidFxuICogQHBhcmFtIGlucHV0SW5kZXhcbiAqIEByZXR1cm5zIFRoZSBCSVAzMjIgcHJvb2YgbWVzc2FnZSBhcyBhIEJ1ZmZlciwgb3IgdW5kZWZpbmVkIGlmIG5vdCBmb3VuZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QmlwMzIyUHJvb2ZNZXNzYWdlQXRJbmRleChwc2J0OiB1dHhvbGliLlBzYnQsIGlucHV0SW5kZXg6IG51bWJlcik6IEJ1ZmZlciB8IHVuZGVmaW5lZCB7XG4gIGlmIChwc2J0LmRhdGEuaW5wdXRzLmxlbmd0aCA8PSBpbnB1dEluZGV4KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnB1dCBpbmRleCAke2lucHV0SW5kZXh9IGlzIG91dCBvZiBib3VuZHMgZm9yIHRoZSBQU0JUYCk7XG4gIH1cbiAgY29uc3QgaW5wdXQgPSBwc2J0LmRhdGEuaW5wdXRzW2lucHV0SW5kZXhdO1xuICBjb25zdCBwcm9wcmlldGFyeUtleVZhbHMgPSB1dHhvbGliLmJpdGdvLmdldFBzYnRJbnB1dFByb3ByaWV0YXJ5S2V5VmFscyhpbnB1dCwge1xuICAgIGlkZW50aWZpZXI6IHV0eG9saWIuYml0Z28uUFNCVF9QUk9QUklFVEFSWV9JREVOVElGSUVSLFxuICAgIHN1YnR5cGU6IHV0eG9saWIuYml0Z28uUHJvcHJpZXRhcnlLZXlTdWJ0eXBlLkJJUDMyMl9NRVNTQUdFLFxuICB9KTtcbiAgaWYgKHByb3ByaWV0YXJ5S2V5VmFscy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9IGVsc2UgaWYgKHByb3ByaWV0YXJ5S2V5VmFscy5sZW5ndGggPiAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBNdWx0aXBsZSBCSVAzMjIgbWVzc2FnZXMgZm91bmQgYXQgaW5wdXQgaW5kZXggJHtpbnB1dEluZGV4fWApO1xuICB9XG4gIHJldHVybiBCdWZmZXIuZnJvbShwcm9wcmlldGFyeUtleVZhbHNbMF0udmFsdWUpO1xufVxuXG4vKipcbiAqIGNoZWNrcyBpZiB0aGUgdHJhbnNhY3Rpb24gY29udGFpbnMgYSBCSVAzMjIgcHJvb2ZcbiAqIGRvZXMgbm90IGNoZWNrIGlmIHRoZSBwcm9vZiBpcyB2YWxpZFxuICogU291cmNlOiBodHRwczovL2dpdGh1Yi5jb20vYml0Y29pbi9iaXBzL2Jsb2IvbWFzdGVyL2JpcC0wMzIyLm1lZGlhd2lraSN1c2VyLWNvbnRlbnQtRnVsbFxuICogQHBhcmFtcyB0eCBUaGUgdHJhbnNhY3Rpb24gb3IgdGhlIFBTQlQgdG8gY2hlY2tcbiAqIEByZXR1cm5zIGJvb2xlYW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQmlwMzIyUHJvb2ZDaGVjayh0eDogdXR4b2xpYi5iaXRnby5VdHhvUHNidCB8IHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uPGJpZ2ludD4pOiBib29sZWFuIHtcbiAgaWYgKHR4IGluc3RhbmNlb2YgdXR4b2xpYi5iaXRnby5VdHhvUHNidCkge1xuICAgIGlmICh0eC52ZXJzaW9uICE9PSAwIHx8IHR4LmxvY2t0aW1lICE9PSAwIHx8IHR4LmRhdGEub3V0cHV0cy5sZW5ndGggIT09IDEpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3Qgb3V0cHV0ID0gdHgudHhPdXRwdXRzWzBdO1xuICAgIGlmIChvdXRwdXQuc2NyaXB0LnRvU3RyaW5nKCdoZXgnKSAhPT0gJzZhJyB8fCBvdXRwdXQudmFsdWUgIT09IDBuKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIHRydWUgaWYgdGhlcmUgaXMgYSBtZXNzYWdlIGVuY29kZWQgaW4gZXZlcnkgaW5wdXQgaW4gdGhlIHByb3ByaWV0YXJ5IGZpZWxkXG4gICAgcmV0dXJuIHR4LmRhdGEuaW5wdXRzLmV2ZXJ5KChpbnB1dCwgaW5kZXgpID0+IGdldEJpcDMyMlByb29mTWVzc2FnZUF0SW5kZXgodHgsIGluZGV4KSAhPT0gdW5kZWZpbmVkKTtcbiAgfSBlbHNlIGlmICh0eCBpbnN0YW5jZW9mIHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uKSB7XG4gICAgaWYgKHR4LnZlcnNpb24gIT09IDAgfHwgdHgubG9ja3RpbWUgIT09IDAgfHwgdHgub3V0cy5sZW5ndGggIT09IDEpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHR4Lm91dHMubGVuZ3RoICE9PSAxKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IG91dHB1dCA9IHR4Lm91dHNbMF07XG4gICAgLy8gY2hlY2sgdGhhdCB0aGUgb25seSBvdXRwdXQgaXMgYW4gT1BfUkVUVVJOIHdpdGggMCB2YWx1ZVxuICAgIGlmIChvdXRwdXQuc2NyaXB0LnRvU3RyaW5nKCdoZXgnKSAhPT0gJzZhJyB8fCBvdXRwdXQudmFsdWUgIT09IDBuKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBpbnB1dCBvZiB0eC5pbnMpIHtcbiAgICAgIGlmIChpbnB1dC5pbmRleCAhPT0gMCB8fCBpbnB1dC5zZXF1ZW5jZSAhPT0gMCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCB0cmFuc2FjdGlvbiB0eXBlIGZvciBCSVAzMjIgcHJvb2YgY2hlY2snKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,12 @@
1
+ import * as utxolib from '@bitgo-beta/utxo-lib';
2
+ export type MessageInfo = {
3
+ address: string;
4
+ message: string;
5
+ pubkeys: string[];
6
+ scriptType: utxolib.bitgo.outputScripts.ScriptType2Of3;
7
+ };
8
+ export declare function assertBaseTx(tx: utxolib.bitgo.UtxoTransaction<bigint>): void;
9
+ export declare function assertTxInput(tx: utxolib.bitgo.UtxoTransaction<bigint>, inputIndex: number, prevOuts: utxolib.TxOutput<bigint>[], info: MessageInfo, checkSignature: boolean): void;
10
+ export declare function assertBip322TxProof(tx: utxolib.bitgo.UtxoTransaction<bigint>, messageInfo: MessageInfo[]): void;
11
+ export declare function assertBip322PsbtProof(psbt: utxolib.bitgo.UtxoPsbt, messageInfo: MessageInfo[]): void;
12
+ //# sourceMappingURL=verify.d.ts.map
@@ -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,CAyCpG"}
@@ -0,0 +1,74 @@
1
+ import * as assert from 'assert';
2
+ import * as utxolib from '@bitgo-beta/utxo-lib';
3
+ import { buildToSpendTransaction } from './toSpend';
4
+ export function assertBaseTx(tx) {
5
+ assert.deepStrictEqual(tx.version, 0, 'Transaction version must be 0.');
6
+ assert.deepStrictEqual(tx.locktime, 0, 'Transaction locktime must be 0.');
7
+ assert.deepStrictEqual(tx.outs.length, 1, 'Transaction must have exactly 1 output.');
8
+ assert.deepStrictEqual(tx.outs[0].value, BigInt(0), 'Transaction output value must be 0.');
9
+ assert.deepStrictEqual(tx.outs[0].script.toString('hex'), '6a', 'Transaction output script must be OP_RETURN.');
10
+ }
11
+ export function assertTxInput(tx, inputIndex, prevOuts, info, checkSignature) {
12
+ assert.ok(inputIndex < tx.ins.length, `inputIndex ${inputIndex} is out of range for tx with ${tx.ins.length} inputs.`);
13
+ const input = tx.ins[inputIndex];
14
+ assert.deepStrictEqual(input.index, 0, `transaction input ${inputIndex} must have index=0.`);
15
+ assert.deepStrictEqual(input.sequence, 0, `transaction input ${inputIndex} sequence must be 0.`);
16
+ // Make sure that the message is correctly encoded into the input of the transaction and
17
+ // verify that the message info corresponds
18
+ const scriptPubKey = utxolib.bitgo.outputScripts.createOutputScript2of3(info.pubkeys.map((pubkey) => Buffer.from(pubkey, 'hex')), info.scriptType, tx.network).scriptPubKey;
19
+ assert.deepStrictEqual(info.address, utxolib.address.fromOutputScript(scriptPubKey, tx.network).toString(), `Address does not match derived scriptPubKey for input ${inputIndex}.`);
20
+ const txid = utxolib.bitgo.getOutputIdForInput(input).txid;
21
+ const toSpendTx = buildToSpendTransaction(scriptPubKey, info.message);
22
+ assert.deepStrictEqual(txid, toSpendTx.getId(), `Input ${inputIndex} derived to_spend transaction is not encoded in the input.`);
23
+ if (checkSignature) {
24
+ const signatureScript = utxolib.bitgo.parseSignatureScript2Of3(input);
25
+ const scriptType = signatureScript.scriptType === 'taprootKeyPathSpend'
26
+ ? 'p2trMusig2'
27
+ : signatureScript.scriptType === 'taprootScriptPathSpend'
28
+ ? 'p2tr'
29
+ : signatureScript.scriptType;
30
+ assert.deepStrictEqual(scriptType, info.scriptType, 'Script type does not match.');
31
+ utxolib.bitgo.verifySignatureWithPublicKeys(tx, inputIndex, prevOuts, info.pubkeys.map((pubkey) => Buffer.from(pubkey, 'hex')));
32
+ }
33
+ }
34
+ export function assertBip322TxProof(tx, messageInfo) {
35
+ assertBaseTx(tx);
36
+ assert.deepStrictEqual(tx.ins.length, messageInfo.length, 'Transaction must have the same number of inputs as messageInfo entries.');
37
+ const prevOuts = messageInfo.map((info) => {
38
+ return {
39
+ value: 0n,
40
+ script: utxolib.bitgo.outputScripts.createOutputScript2of3(info.pubkeys.map((pubkey) => Buffer.from(pubkey, 'hex')), info.scriptType, tx.network).scriptPubKey,
41
+ };
42
+ });
43
+ tx.ins.forEach((input, inputIndex) => assertTxInput(tx, inputIndex, prevOuts, messageInfo[inputIndex], true));
44
+ }
45
+ export function assertBip322PsbtProof(psbt, messageInfo) {
46
+ const unsignedTx = psbt.getUnsignedTx();
47
+ assertBaseTx(unsignedTx);
48
+ assert.deepStrictEqual(psbt.data.inputs.length, messageInfo.length, 'PSBT must have the same number of inputs as messageInfo entries.');
49
+ const prevOuts = psbt.data.inputs.map((input, inputIndex) => {
50
+ assert.ok(input.witnessUtxo, `PSBT input ${inputIndex} is missing witnessUtxo`);
51
+ return input.witnessUtxo;
52
+ });
53
+ psbt.data.inputs.forEach((input, inputIndex) => {
54
+ // Check that the metadata in the PSBT matches the messageInfo, then check the input data
55
+ const info = messageInfo[inputIndex];
56
+ // Note: nonWitnessUtxo is not required - the txid check in assertTxInput verifies
57
+ // the input references the correct to_spend transaction (computed from message + scriptPubKey)
58
+ if (input.bip32Derivation) {
59
+ input.bip32Derivation.forEach((b) => {
60
+ const pubkey = b.pubkey.toString('hex');
61
+ assert.ok(info.pubkeys.includes(pubkey), `PSBT input ${inputIndex} has a pubkey in (tap)bip32Derivation that is not in messageInfo`);
62
+ });
63
+ }
64
+ else if (!input.tapBip32Derivation) {
65
+ throw new Error(`PSBT input ${inputIndex} is missing (tap)bip32Derivation when it should have it.`);
66
+ }
67
+ // Verify the signature on the input
68
+ assert.ok(psbt.validateSignaturesOfInputCommon(inputIndex), `PSBT input ${inputIndex} has an invalid signature.`);
69
+ // Do not check the signature when using the PSBT, the signature is not there. We are going
70
+ // to signatures in the PSBT.
71
+ assertTxInput(unsignedTx, inputIndex, prevOuts, info, false);
72
+ });
73
+ }
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyaWZ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JpcDMyMi92ZXJpZnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFFakMsT0FBTyxLQUFLLE9BQU8sTUFBTSxzQkFBc0IsQ0FBQztBQUVoRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFVcEQsTUFBTSxVQUFVLFlBQVksQ0FBQyxFQUF5QztJQUNwRSxNQUFNLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLGdDQUFnQyxDQUFDLENBQUM7SUFDeEUsTUFBTSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxpQ0FBaUMsQ0FBQyxDQUFDO0lBQzFFLE1BQU0sQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLHlDQUF5QyxDQUFDLENBQUM7SUFDckYsTUFBTSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUscUNBQXFDLENBQUMsQ0FBQztJQUMzRixNQUFNLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLEVBQUUsOENBQThDLENBQUMsQ0FBQztBQUNsSCxDQUFDO0FBRUQsTUFBTSxVQUFVLGFBQWEsQ0FDM0IsRUFBeUMsRUFDekMsVUFBa0IsRUFDbEIsUUFBb0MsRUFDcEMsSUFBaUIsRUFDakIsY0FBdUI7SUFFdkIsTUFBTSxDQUFDLEVBQUUsQ0FDUCxVQUFVLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQzFCLGNBQWMsVUFBVSxnQ0FB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ckMsa0ZBQWtGO1FBQ2xGLCtGQUErRjtRQUUvRixJQUFJLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUMxQixLQUFLLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUNsQyxNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDeEMsTUFBTSxDQUFDLEVBQUUsQ0FDUCxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFDN0IsY0FBYyxVQUFVLGtFQUFrRSxDQUMzRixDQUFDO1lBQ0osQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO2FBQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQ3JDLE1BQU0sSUFBSSxLQUFLLENBQUMsY0FBYyxVQUFVLDBEQUEwRCxDQUFDLENBQUM7UUFDdEcsQ0FBQztRQUVELG9DQUFvQztRQUNwQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxVQUFVLENBQUMsRUFBRSxjQUFjLFVBQVUsNEJBQTRCLENBQUMsQ0FBQztRQUVsSCwyRkFBMkY7UUFDM0YsNkJBQTZCO1FBQzdCLGFBQWEsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDL0QsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuXG5pbXBvcnQgeyBidWlsZFRvU3BlbmRUcmFuc2FjdGlvbiB9IGZyb20gJy4vdG9TcGVuZCc7XG5cbmV4cG9ydCB0eXBlIE1lc3NhZ2VJbmZvID0ge1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgLy8gSGV4IGVuY29kZWQgcHVia2V5c1xuICBwdWJrZXlzOiBzdHJpbmdbXTtcbiAgc2NyaXB0VHlwZTogdXR4b2xpYi5iaXRnby5vdXRwdXRTY3JpcHRzLlNjcmlwdFR5cGUyT2YzO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydEJhc2VUeCh0eDogdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb248YmlnaW50Pik6IHZvaWQge1xuICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHR4LnZlcnNpb24sIDAsICdUcmFuc2FjdGlvbiB2ZXJzaW9uIG11c3QgYmUgMC4nKTtcbiAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbCh0eC5sb2NrdGltZSwgMCwgJ1RyYW5zYWN0aW9uIGxvY2t0aW1lIG11c3QgYmUgMC4nKTtcbiAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbCh0eC5vdXRzLmxlbmd0aCwgMSwgJ1RyYW5zYWN0aW9uIG11c3QgaGF2ZSBleGFjdGx5IDEgb3V0cHV0LicpO1xuICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHR4Lm91dHNbMF0udmFsdWUsIEJpZ0ludCgwKSwgJ1RyYW5zYWN0aW9uIG91dHB1dCB2YWx1ZSBtdXN0IGJlIDAuJyk7XG4gIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwodHgub3V0c1swXS5zY3JpcHQudG9TdHJpbmcoJ2hleCcpLCAnNmEnLCAnVHJhbnNhY3Rpb24gb3V0cHV0IHNjcmlwdCBtdXN0IGJlIE9QX1JFVFVSTi4nKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydFR4SW5wdXQoXG4gIHR4OiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbjxiaWdpbnQ+LFxuICBpbnB1dEluZGV4OiBudW1iZXIsXG4gIHByZXZPdXRzOiB1dHhvbGliLlR4T3V0cHV0PGJpZ2ludD5bXSxcbiAgaW5mbzogTWVzc2FnZUluZm8sXG4gIGNoZWNrU2lnbmF0dXJlOiBib29sZWFuXG4pOiB2b2lkIHtcbiAgYXNzZXJ0Lm9rKFxuICAgIGlucHV0SW5kZXggPCB0eC5pbnMubGVuZ3RoLFxuICAgIGBpbnB1dEluZGV4ICR7aW5wdXRJbmRleH0gaXMgb3V0IG9mIHJhbmdlIGZvciB0eCB3aXRoICR7dHguaW5zLmxlbmd0aH0gaW5wdXRzLmBcbiAgKTtcbiAgY29uc3QgaW5wdXQgPSB0eC5pbnNbaW5wdXRJbmRleF07XG4gIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoaW5wdXQuaW5kZXgsIDAsIGB0cmFuc2FjdGlvbiBpbnB1dCAke2lucHV0SW5kZXh9IG11c3QgaGF2ZSBpbmRleD0wLmApO1xuICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKGlucHV0LnNlcXVlbmNlLCAwLCBgdHJhbnNhY3Rpb24gaW5wdXQgJHtpbnB1dEluZGV4fSBzZXF1ZW5jZSBtdXN0IGJlIDAuYCk7XG5cbiAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIG1lc3NhZ2UgaXMgY29ycmVjdGx5IGVuY29kZWQgaW50byB0aGUgaW5wdXQgb2YgdGhlIHRyYW5zYWN0aW9uIGFuZFxuICAvLyB2ZXJpZnkgdGhhdCB0aGUgbWVzc2FnZSBpbmZvIGNvcnJlc3BvbmRzXG4gIGNvbnN0IHNjcmlwdFB1YktleSA9IHV0eG9saWIuYml0Z28ub3V0cHV0U2NyaXB0cy5jcmVhdGVPdXRwdXRTY3JpcHQyb2YzKFxuICAgIGluZm8ucHVia2V5cy5tYXAoKHB1YmtleSkgPT4gQnVmZmVyLmZyb20ocHVia2V5LCAnaGV4JykpLFxuICAgIGluZm8uc2NyaXB0VHlwZSxcbiAgICB0eC5uZXR3b3JrXG4gICkuc2NyaXB0UHViS2V5O1xuICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKFxuICAgIGluZm8uYWRkcmVzcyxcbiAgICB1dHhvbGliLmFkZHJlc3MuZnJvbU91dHB1dFNjcmlwdChzY3JpcHRQdWJLZXksIHR4Lm5ldHdvcmspLnRvU3RyaW5nKCksXG4gICAgYEFkZHJlc3MgZG9lcyBub3QgbWF0Y2ggZGVyaXZlZCBzY3JpcHRQdWJLZXkgZm9yIGlucHV0ICR7aW5wdXRJbmRleH0uYFxuICApO1xuXG4gIGNvbnN0IHR4aWQgPSB1dHhvbGliLmJpdGdvLmdldE91dHB1dElkRm9ySW5wdXQoaW5wdXQpLnR4aWQ7XG4gIGNvbnN0IHRvU3BlbmRUeCA9IGJ1aWxkVG9TcGVuZFRyYW5zYWN0aW9uKHNjcmlwdFB1YktleSwgaW5mby5tZXNzYWdlKTtcbiAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChcbiAgICB0eGlkLFxuICAgIHRvU3BlbmRUeC5nZXRJZCgpLFxuICAgIGBJbnB1dCAke2lucHV0SW5kZXh9IGRlcml2ZWQgdG9fc3BlbmQgdHJhbnNhY3Rpb24gaXMgbm90IGVuY29kZWQgaW4gdGhlIGlucHV0LmBcbiAgKTtcblxuICBpZiAoY2hlY2tTaWduYXR1cmUpIHtcbiAgICBjb25zdCBzaWduYXR1cmVTY3JpcHQgPSB1dHhvbGliLmJpdGdvLnBhcnNlU2lnbmF0dXJlU2NyaXB0Mk9mMyhpbnB1dCk7XG4gICAgY29uc3Qgc2NyaXB0VHlwZSA9XG4gICAgICBzaWduYXR1cmVTY3JpcHQuc2NyaXB0VHlwZSA9PT0gJ3RhcHJvb3RLZXlQYXRoU3BlbmQnXG4gICAgICAgID8gJ3AydHJNdXNpZzInXG4gICAgICAgIDogc2lnbmF0dXJlU2NyaXB0LnNjcmlwdFR5cGUgPT09ICd0YXByb290U2NyaXB0UGF0aFNwZW5kJ1xuICAgICAgICA/ICdwMnRyJ1xuICAgICAgICA6IHNpZ25hdHVyZVNjcmlwdC5zY3JpcHRUeXBlO1xuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoc2NyaXB0VHlwZSwgaW5mby5zY3JpcHRUeXBlLCAnU2NyaXB0IHR5cGUgZG9lcyBub3QgbWF0Y2guJyk7XG4gICAgdXR4b2xpYi5iaXRnby52ZXJpZnlTaWduYXR1cmVXaXRoUHVibGljS2V5cyhcbiAgICAgIHR4LFxuICAgICAgaW5wdXRJbmRleCxcbiAgICAgIHByZXZPdXRzLFxuICAgICAgaW5mby5wdWJrZXlzLm1hcCgocHVia2V5KSA9PiBCdWZmZXIuZnJvbShwdWJrZXksICdoZXgnKSlcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRCaXAzMjJUeFByb29mKHR4OiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbjxiaWdpbnQ+LCBtZXNzYWdlSW5mbzogTWVzc2FnZUluZm9bXSk6IHZvaWQge1xuICBhc3NlcnRCYXNlVHgodHgpO1xuICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKFxuICAgIHR4Lmlucy5sZW5ndGgsXG4gICAgbWVzc2FnZUluZm8ubGVuZ3RoLFxuICAgICdUcmFuc2FjdGlvbiBtdXN0IGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIGlucHV0cyBhcyBtZXNzYWdlSW5mbyBlbnRyaWVzLidcbiAgKTtcbiAgY29uc3QgcHJldk91dHMgPSBtZXNzYWdlSW5mby5tYXAoKGluZm8pID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IDBuLFxuICAgICAgc2NyaXB0OiB1dHhvbGliLmJpdGdvLm91dHB1dFNjcmlwdHMuY3JlYXRlT3V0cHV0U2NyaXB0Mm9mMyhcbiAgICAgICAgaW5mby5wdWJrZXlzLm1hcCgocHVia2V5KSA9PiBCdWZmZXIuZnJvbShwdWJrZXksICdoZXgnKSksXG4gICAgICAgIGluZm8uc2NyaXB0VHlwZSxcbiAgICAgICAgdHgubmV0d29ya1xuICAgICAgKS5zY3JpcHRQdWJLZXksXG4gICAgfTtcbiAgfSk7XG4gIHR4Lmlucy5mb3JFYWNoKChpbnB1dCwgaW5wdXRJbmRleCkgPT4gYXNzZXJ0VHhJbnB1dCh0eCwgaW5wdXRJbmRleCwgcHJldk91dHMsIG1lc3NhZ2VJbmZvW2lucHV0SW5kZXhdLCB0cnVlKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRCaXAzMjJQc2J0UHJvb2YocHNidDogdXR4b2xpYi5iaXRnby5VdHhvUHNidCwgbWVzc2FnZUluZm86IE1lc3NhZ2VJbmZvW10pOiB2b2lkIHtcbiAgY29uc3QgdW5zaWduZWRUeCA9IHBzYnQuZ2V0VW5zaWduZWRUeCgpO1xuXG4gIGFzc2VydEJhc2VUeCh1bnNpZ25lZFR4KTtcbiAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChcbiAgICBwc2J0LmRhdGEuaW5wdXRzLmxlbmd0aCxcbiAgICBtZXNzYWdlSW5mby5sZW5ndGgsXG4gICAgJ1BTQlQgbXVzdCBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBpbnB1dHMgYXMgbWVzc2FnZUluZm8gZW50cmllcy4nXG4gICk7XG5cbiAgY29uc3QgcHJldk91dHMgPSBwc2J0LmRhdGEuaW5wdXRzLm1hcCgoaW5wdXQsIGlucHV0SW5kZXgpID0+IHtcbiAgICBhc3NlcnQub2soaW5wdXQud2l0bmVzc1V0eG8sIGBQU0JUIGlucHV0ICR7aW5wdXRJbmRleH0gaXMgbWlzc2luZyB3aXRuZXNzVXR4b2ApO1xuICAgIHJldHVybiBpbnB1dC53aXRuZXNzVXR4bztcbiAgfSk7XG5cbiAgcHNidC5kYXRhLmlucHV0cy5mb3JFYWNoKChpbnB1dCwgaW5wdXRJbmRleCkgPT4ge1xuICAgIC8vIENoZWNrIHRoYXQgdGhlIG1ldGFkYXRhIGluIHRoZSBQU0JUIG1hdGNoZXMgdGhlIG1lc3NhZ2VJbmZvLCB0aGVuIGNoZWNrIHRoZSBpbnB1dCBkYXRhXG4gICAgY29uc3QgaW5mbyA9IG1lc3NhZ2VJbmZvW2lucHV0SW5kZXhdO1xuXG4gICAgLy8gTm90ZTogbm9uV2l0bmVzc1V0eG8gaXMgbm90IHJlcXVpcmVkIC0gdGhlIHR4aWQgY2hlY2sgaW4gYXNzZXJ0VHhJbnB1dCB2ZXJpZmllc1xuICAgIC8vIHRoZSBpbnB1dCByZWZlcmVuY2VzIHRoZSBjb3JyZWN0IHRvX3NwZW5kIHRyYW5zYWN0aW9uIChjb21wdXRlZCBmcm9tIG1lc3NhZ2UgKyBzY3JpcHRQdWJLZXkpXG5cbiAgICBpZiAoaW5wdXQuYmlwMzJEZXJpdmF0aW9uKSB7XG4gICAgICBpbnB1dC5iaXAzMkRlcml2YXRpb24uZm9yRWFjaCgoYikgPT4ge1xuICAgICAgICBjb25zdCBwdWJrZXkgPSBiLnB1YmtleS50b1N0cmluZygnaGV4Jyk7XG4gICAgICAgIGFzc2VydC5vayhcbiAgICAgICAgICBpbmZvLnB1YmtleXMuaW5jbHVkZXMocHVia2V5KSxcbiAgICAgICAgICBgUFNCVCBpbnB1dCAke2lucHV0SW5kZXh9IGhhcyBhIHB1YmtleSBpbiAodGFwKWJpcDMyRGVyaXZhdGlvbiB0aGF0IGlzIG5vdCBpbiBtZXNzYWdlSW5mb2BcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoIWlucHV0LnRhcEJpcDMyRGVyaXZhdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQU0JUIGlucHV0ICR7aW5wdXRJbmRleH0gaXMgbWlzc2luZyAodGFwKWJpcDMyRGVyaXZhdGlvbiB3aGVuIGl0IHNob3VsZCBoYXZlIGl0LmApO1xuICAgIH1cblxuICAgIC8vIFZlcmlmeSB0aGUgc2lnbmF0dXJlIG9uIHRoZSBpbnB1dFxuICAgIGFzc2VydC5vayhwc2J0LnZhbGlkYXRlU2lnbmF0dXJlc09mSW5wdXRDb21tb24oaW5wdXRJbmRleCksIGBQU0JUIGlucHV0ICR7aW5wdXRJbmRleH0gaGFzIGFuIGludmFsaWQgc2lnbmF0dXJlLmApO1xuXG4gICAgLy8gRG8gbm90IGNoZWNrIHRoZSBzaWduYXR1cmUgd2hlbiB1c2luZyB0aGUgUFNCVCwgdGhlIHNpZ25hdHVyZSBpcyBub3QgdGhlcmUuIFdlIGFyZSBnb2luZ1xuICAgIC8vIHRvIHNpZ25hdHVyZXMgaW4gdGhlIFBTQlQuXG4gICAgYXNzZXJ0VHhJbnB1dCh1bnNpZ25lZFR4LCBpbnB1dEluZGV4LCBwcmV2T3V0cywgaW5mbywgZmFsc2UpO1xuICB9KTtcbn1cbiJdfQ==
@@ -0,0 +1,12 @@
1
+ import { bip32utils } from '@bitgo-beta/secp256k1';
2
+ /**
3
+ * @deprecated Use signMessage from @bitgo-beta/secp256k1 instead
4
+ * @see {bip32utils.signMessage}
5
+ */
6
+ export declare const signMessage: typeof bip32utils.signMessage;
7
+ /**
8
+ * @deprecated Use verifyMessage from @bitgo-beta/secp256k1 instead
9
+ * @see {bip32utils.verifyMessage}
10
+ */
11
+ export declare const verifyMessage: typeof bip32utils.verifyMessage;
12
+ //# sourceMappingURL=bip32utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bip32utils.d.ts","sourceRoot":"","sources":["../../src/bip32utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD;;;GAGG;AACH,eAAO,MAAM,WAAW,+BAAyB,CAAC;AAElD;;;GAGG;AACH,eAAO,MAAM,aAAa,iCAA2B,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { bip32utils } from '@bitgo-beta/secp256k1';
2
+ /**
3
+ * @deprecated Use signMessage from @bitgo-beta/secp256k1 instead
4
+ * @see {bip32utils.signMessage}
5
+ */
6
+ export const signMessage = bip32utils.signMessage;
7
+ /**
8
+ * @deprecated Use verifyMessage from @bitgo-beta/secp256k1 instead
9
+ * @see {bip32utils.verifyMessage}
10
+ */
11
+ export const verifyMessage = bip32utils.verifyMessage;
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlwMzJ1dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iaXAzMnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVuRDs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQztBQUVsRDs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGJpcDMydXRpbHMgfSBmcm9tICdAYml0Z28tYmV0YS9zZWNwMjU2azEnO1xuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBzaWduTWVzc2FnZSBmcm9tIEBiaXRnby1iZXRhL3NlY3AyNTZrMSBpbnN0ZWFkXG4gKiBAc2VlIHtiaXAzMnV0aWxzLnNpZ25NZXNzYWdlfVxuICovXG5leHBvcnQgY29uc3Qgc2lnbk1lc3NhZ2UgPSBiaXAzMnV0aWxzLnNpZ25NZXNzYWdlO1xuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSB2ZXJpZnlNZXNzYWdlIGZyb20gQGJpdGdvLWJldGEvc2VjcDI1NmsxIGluc3RlYWRcbiAqIEBzZWUge2JpcDMydXRpbHMudmVyaWZ5TWVzc2FnZX1cbiAqL1xuZXhwb3J0IGNvbnN0IHZlcmlmeU1lc3NhZ2UgPSBiaXAzMnV0aWxzLnZlcmlmeU1lc3NhZ2U7XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export * from './locktime';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/bip65/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './locktime';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmlwNjUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxZQUFZLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xvY2t0aW1lJztcbiJdfQ==
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @param obj
3
+ * @return number
4
+ */
5
+ export declare function encodeLocktime(obj: Date | {
6
+ blocks: number;
7
+ }): number;
8
+ //# sourceMappingURL=locktime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"locktime.d.ts","sourceRoot":"","sources":["../../../src/bip65/locktime.ts"],"names":[],"mappings":"AAWA;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,IAAI,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAwBrE"}
@@ -0,0 +1,34 @@
1
+ /*
2
+
3
+ Modified version of https://github.com/bitcoinjs/bip65/blob/master/index.js
4
+
5
+ BIP0065: https://github.com/bitcoin/bips/blob/master/bip-0065.mediawiki
6
+
7
+ */
8
+ // https://github.com/bitcoin/bitcoin/blob/v28.0/src/script/script.h#L44-L46
9
+ const LOCKTIME_THRESHOLD = 500000000;
10
+ /**
11
+ * @param obj
12
+ * @return number
13
+ */
14
+ export function encodeLocktime(obj) {
15
+ if (obj instanceof Date) {
16
+ if (!Number.isFinite(obj.getTime())) {
17
+ throw new Error('invalid date');
18
+ }
19
+ const seconds = Math.floor(obj.getTime() / 1000);
20
+ if (seconds < LOCKTIME_THRESHOLD) {
21
+ throw new TypeError('Expected Number utc >= ' + LOCKTIME_THRESHOLD);
22
+ }
23
+ return seconds;
24
+ }
25
+ const { blocks } = obj;
26
+ if (!Number.isFinite(blocks) || !Number.isInteger(blocks)) {
27
+ throw new TypeError('Expected Number blocks');
28
+ }
29
+ if (blocks >= LOCKTIME_THRESHOLD) {
30
+ throw new TypeError('Expected Number blocks < ' + LOCKTIME_THRESHOLD);
31
+ }
32
+ return blocks;
33
+ }
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9ja3RpbWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmlwNjUvbG9ja3RpbWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztFQU1FO0FBRUYsNEVBQTRFO0FBQzVFLE1BQU0sa0JBQWtCLEdBQUcsU0FBVyxDQUFDO0FBRXZDOzs7R0FHRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQUMsR0FBOEI7SUFDM0QsSUFBSSxHQUFHLFlBQVksSUFBSSxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNwQyxNQUFNLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2xDLENBQUM7UUFDRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUNqRCxJQUFJLE9BQU8sR0FBRyxrQkFBa0IsRUFBRSxDQUFDO1lBQ2pDLE1BQU0sSUFBSSxTQUFTLENBQUMseUJBQXlCLEdBQUcsa0JBQWtCLENBQUMsQ0FBQztRQUN0RSxDQUFDO1FBRUQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUM7SUFFdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDMUQsTUFBTSxJQUFJLFNBQVMsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxJQUFJLE1BQU0sSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1FBQ2pDLE1BQU0sSUFBSSxTQUFTLENBQUMsMkJBQTJCLEdBQUcsa0JBQWtCLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5cbk1vZGlmaWVkIHZlcnNpb24gb2YgaHR0cHM6Ly9naXRodWIuY29tL2JpdGNvaW5qcy9iaXA2NS9ibG9iL21hc3Rlci9pbmRleC5qc1xuXG5CSVAwMDY1OiBodHRwczovL2dpdGh1Yi5jb20vYml0Y29pbi9iaXBzL2Jsb2IvbWFzdGVyL2JpcC0wMDY1Lm1lZGlhd2lraVxuXG4qL1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vYml0Y29pbi9iaXRjb2luL2Jsb2IvdjI4LjAvc3JjL3NjcmlwdC9zY3JpcHQuaCNMNDQtTDQ2XG5jb25zdCBMT0NLVElNRV9USFJFU0hPTEQgPSA1MDBfMDAwXzAwMDtcblxuLyoqXG4gKiBAcGFyYW0gb2JqXG4gKiBAcmV0dXJuIG51bWJlclxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlTG9ja3RpbWUob2JqOiBEYXRlIHwgeyBibG9ja3M6IG51bWJlciB9KTogbnVtYmVyIHtcbiAgaWYgKG9iaiBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShvYmouZ2V0VGltZSgpKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGRhdGUnKTtcbiAgICB9XG4gICAgY29uc3Qgc2Vjb25kcyA9IE1hdGguZmxvb3Iob2JqLmdldFRpbWUoKSAvIDEwMDApO1xuICAgIGlmIChzZWNvbmRzIDwgTE9DS1RJTUVfVEhSRVNIT0xEKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBOdW1iZXIgdXRjID49ICcgKyBMT0NLVElNRV9USFJFU0hPTEQpO1xuICAgIH1cblxuICAgIHJldHVybiBzZWNvbmRzO1xuICB9XG5cbiAgY29uc3QgeyBibG9ja3MgfSA9IG9iajtcblxuICBpZiAoIU51bWJlci5pc0Zpbml0ZShibG9ja3MpIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKGJsb2NrcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBOdW1iZXIgYmxvY2tzJyk7XG4gIH1cblxuICBpZiAoYmxvY2tzID49IExPQ0tUSU1FX1RIUkVTSE9MRCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIE51bWJlciBibG9ja3MgPCAnICsgTE9DS1RJTUVfVEhSRVNIT0xEKTtcbiAgfVxuXG4gIHJldHVybiBibG9ja3M7XG59XG4iXX0=
@@ -0,0 +1,9 @@
1
+ import { Descriptor } from '@bitgo/wasm-utxo';
2
+ /** Map from descriptor name to descriptor */
3
+ export type DescriptorMap = Map<string, Descriptor>;
4
+ /** Convert an array of descriptor name-value pairs to a descriptor map */
5
+ export declare function toDescriptorMap(descriptors: {
6
+ name: string;
7
+ value: Descriptor | string;
8
+ }[]): DescriptorMap;
9
+ //# sourceMappingURL=DescriptorMap.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DescriptorMap.d.ts","sourceRoot":"","sources":["../../../src/descriptor/DescriptorMap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,6CAA6C;AAC7C,MAAM,MAAM,aAAa,GAAG,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAEpD,0EAA0E;AAC1E,wBAAgB,eAAe,CAAC,WAAW,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAAA;CAAE,EAAE,GAAG,aAAa,CAO1G"}
1
+ {"version":3,"file":"DescriptorMap.d.ts","sourceRoot":"","sources":["../../../src/descriptor/DescriptorMap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,6CAA6C;AAC7C,MAAM,MAAM,aAAa,GAAG,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAEpD,0EAA0E;AAC1E,wBAAgB,eAAe,CAAC,WAAW,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAAA;CAAE,EAAE,GAAG,aAAa,CAI1G"}
@@ -0,0 +1,6 @@
1
+ import { Descriptor } from '@bitgo/wasm-utxo';
2
+ /** Convert an array of descriptor name-value pairs to a descriptor map */
3
+ export function toDescriptorMap(descriptors) {
4
+ return new Map(descriptors.map((d) => [d.name, d.value instanceof Descriptor ? d.value : Descriptor.fromStringDetectType(d.value)]));
5
+ }
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVzY3JpcHRvck1hcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kZXNjcmlwdG9yL0Rlc2NyaXB0b3JNYXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBSzlDLDBFQUEwRTtBQUMxRSxNQUFNLFVBQVUsZUFBZSxDQUFDLFdBQTJEO0lBQ3pGLE9BQU8sSUFBSSxHQUFHLENBQ1osV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLFlBQVksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FDckgsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZXNjcmlwdG9yIH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5cbi8qKiBNYXAgZnJvbSBkZXNjcmlwdG9yIG5hbWUgdG8gZGVzY3JpcHRvciAqL1xuZXhwb3J0IHR5cGUgRGVzY3JpcHRvck1hcCA9IE1hcDxzdHJpbmcsIERlc2NyaXB0b3I+O1xuXG4vKiogQ29udmVydCBhbiBhcnJheSBvZiBkZXNjcmlwdG9yIG5hbWUtdmFsdWUgcGFpcnMgdG8gYSBkZXNjcmlwdG9yIG1hcCAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvRGVzY3JpcHRvck1hcChkZXNjcmlwdG9yczogeyBuYW1lOiBzdHJpbmc7IHZhbHVlOiBEZXNjcmlwdG9yIHwgc3RyaW5nIH1bXSk6IERlc2NyaXB0b3JNYXAge1xuICByZXR1cm4gbmV3IE1hcChcbiAgICBkZXNjcmlwdG9ycy5tYXAoKGQpID0+IFtkLm5hbWUsIGQudmFsdWUgaW5zdGFuY2VvZiBEZXNjcmlwdG9yID8gZC52YWx1ZSA6IERlc2NyaXB0b3IuZnJvbVN0cmluZ0RldGVjdFR5cGUoZC52YWx1ZSldKVxuICApO1xufVxuIl19
@@ -0,0 +1,23 @@
1
+ import { Descriptor } from '@bitgo/wasm-utxo';
2
+ import { MaxOutput, Output, PrevOutput } from '../Output';
3
+ import { DescriptorMap } from './DescriptorMap';
4
+ export type WithDescriptor<T> = T & {
5
+ descriptor: Descriptor;
6
+ };
7
+ export type WithOptDescriptor<T> = T & {
8
+ descriptor?: Descriptor;
9
+ };
10
+ export declare function isInternalOutput<T extends object>(output: T | WithDescriptor<T>): output is WithDescriptor<T>;
11
+ export declare function isExternalOutput<T extends object>(output: T | WithDescriptor<T>): output is T;
12
+ /**
13
+ * @return the sum of the external outputs that are not 'max'
14
+ * @param outputs
15
+ */
16
+ export declare function getExternalFixedAmount(outputs: WithOptDescriptor<Output | MaxOutput>[]): bigint;
17
+ export type DescriptorWalletOutput = PrevOutput & {
18
+ descriptorName: string;
19
+ descriptorIndex: number | undefined;
20
+ };
21
+ export type DerivedDescriptorWalletOutput = WithDescriptor<PrevOutput>;
22
+ export declare function toDerivedDescriptorWalletOutput(output: DescriptorWalletOutput, descriptorMap: DescriptorMap): DerivedDescriptorWalletOutput;
23
+ //# sourceMappingURL=Output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Output.d.ts","sourceRoot":"","sources":["../../../src/descriptor/Output.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAqB,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE7E,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGhD,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG;IAClC,UAAU,EAAE,UAAU,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI,CAAC,GAAG;IACrC,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,cAAc,CAAC,CAAC,CAAC,CAE7G;AAED,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC,CAE7F;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,iBAAiB,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,GAAG,MAAM,CAE/F;AAED,MAAM,MAAM,sBAAsB,GAAG,UAAU,GAAG;IAChD,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;AAEvE,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,sBAAsB,EAC9B,aAAa,EAAE,aAAa,GAC3B,6BAA6B,CAkB/B"}
@@ -0,0 +1,32 @@
1
+ import assert from 'assert';
2
+ import { Descriptor } from '@bitgo/wasm-utxo';
3
+ import { getFixedOutputSum } from '../Output';
4
+ import { getDescriptorAtIndexCheckScript } from './derive';
5
+ export function isInternalOutput(output) {
6
+ return 'descriptor' in output && output.descriptor !== undefined;
7
+ }
8
+ export function isExternalOutput(output) {
9
+ return !isInternalOutput(output);
10
+ }
11
+ /**
12
+ * @return the sum of the external outputs that are not 'max'
13
+ * @param outputs
14
+ */
15
+ export function getExternalFixedAmount(outputs) {
16
+ return getFixedOutputSum(outputs.filter(isExternalOutput));
17
+ }
18
+ export function toDerivedDescriptorWalletOutput(output, descriptorMap) {
19
+ const descriptor = descriptorMap.get(output.descriptorName);
20
+ if (!descriptor) {
21
+ throw new Error(`Descriptor not found: ${output.descriptorName}`);
22
+ }
23
+ assert(descriptor instanceof Descriptor);
24
+ const descriptorAtIndex = getDescriptorAtIndexCheckScript(descriptor, output.descriptorIndex, output.witnessUtxo.script, output.descriptorName);
25
+ return {
26
+ hash: output.hash,
27
+ index: output.index,
28
+ witnessUtxo: output.witnessUtxo,
29
+ descriptor: descriptorAtIndex,
30
+ };
31
+ }
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT3V0cHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Rlc2NyaXB0b3IvT3V0cHV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUU1QixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFOUMsT0FBTyxFQUFFLGlCQUFpQixFQUFpQyxNQUFNLFdBQVcsQ0FBQztBQUc3RSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFVM0QsTUFBTSxVQUFVLGdCQUFnQixDQUFtQixNQUE2QjtJQUM5RSxPQUFPLFlBQVksSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLFVBQVUsS0FBSyxTQUFTLENBQUM7QUFDbkUsQ0FBQztBQUVELE1BQU0sVUFBVSxnQkFBZ0IsQ0FBbUIsTUFBNkI7SUFDOUUsT0FBTyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ25DLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsT0FBZ0Q7SUFDckYsT0FBTyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztBQUM3RCxDQUFDO0FBU0QsTUFBTSxVQUFVLCtCQUErQixDQUM3QyxNQUE4QixFQUM5QixhQUE0QjtJQUU1QixNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUM1RCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUNELE1BQU0sQ0FBQyxVQUFVLFlBQVksVUFBVSxDQUFDLENBQUM7SUFDekMsTUFBTSxpQkFBaUIsR0FBRywrQkFBK0IsQ0FDdkQsVUFBVSxFQUNWLE1BQU0sQ0FBQyxlQUFlLEVBQ3RCLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUN6QixNQUFNLENBQUMsY0FBYyxDQUN0QixDQUFDO0lBQ0YsT0FBTztRQUNMLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtRQUNqQixLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUs7UUFDbkIsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXO1FBQy9CLFVBQVUsRUFBRSxpQkFBaUI7S0FDOUIsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCB7IERlc2NyaXB0b3IgfSBmcm9tICdAYml0Z28vd2FzbS11dHhvJztcblxuaW1wb3J0IHsgZ2V0Rml4ZWRPdXRwdXRTdW0sIE1heE91dHB1dCwgT3V0cHV0LCBQcmV2T3V0cHV0IH0gZnJvbSAnLi4vT3V0cHV0JztcblxuaW1wb3J0IHsgRGVzY3JpcHRvck1hcCB9IGZyb20gJy4vRGVzY3JpcHRvck1hcCc7XG5pbXBvcnQgeyBnZXREZXNjcmlwdG9yQXRJbmRleENoZWNrU2NyaXB0IH0gZnJvbSAnLi9kZXJpdmUnO1xuXG5leHBvcnQgdHlwZSBXaXRoRGVzY3JpcHRvcjxUPiA9IFQgJiB7XG4gIGRlc2NyaXB0b3I6IERlc2NyaXB0b3I7XG59O1xuXG5leHBvcnQgdHlwZSBXaXRoT3B0RGVzY3JpcHRvcjxUPiA9IFQgJiB7XG4gIGRlc2NyaXB0b3I/OiBEZXNjcmlwdG9yO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzSW50ZXJuYWxPdXRwdXQ8VCBleHRlbmRzIG9iamVjdD4ob3V0cHV0OiBUIHwgV2l0aERlc2NyaXB0b3I8VD4pOiBvdXRwdXQgaXMgV2l0aERlc2NyaXB0b3I8VD4ge1xuICByZXR1cm4gJ2Rlc2NyaXB0b3InIGluIG91dHB1dCAmJiBvdXRwdXQuZGVzY3JpcHRvciAhPT0gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNFeHRlcm5hbE91dHB1dDxUIGV4dGVuZHMgb2JqZWN0PihvdXRwdXQ6IFQgfCBXaXRoRGVzY3JpcHRvcjxUPik6IG91dHB1dCBpcyBUIHtcbiAgcmV0dXJuICFpc0ludGVybmFsT3V0cHV0KG91dHB1dCk7XG59XG5cbi8qKlxuICogQHJldHVybiB0aGUgc3VtIG9mIHRoZSBleHRlcm5hbCBvdXRwdXRzIHRoYXQgYXJlIG5vdCAnbWF4J1xuICogQHBhcmFtIG91dHB1dHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEV4dGVybmFsRml4ZWRBbW91bnQob3V0cHV0czogV2l0aE9wdERlc2NyaXB0b3I8T3V0cHV0IHwgTWF4T3V0cHV0PltdKTogYmlnaW50IHtcbiAgcmV0dXJuIGdldEZpeGVkT3V0cHV0U3VtKG91dHB1dHMuZmlsdGVyKGlzRXh0ZXJuYWxPdXRwdXQpKTtcbn1cblxuZXhwb3J0IHR5cGUgRGVzY3JpcHRvcldhbGxldE91dHB1dCA9IFByZXZPdXRwdXQgJiB7XG4gIGRlc2NyaXB0b3JOYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0b3JJbmRleDogbnVtYmVyIHwgdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IHR5cGUgRGVyaXZlZERlc2NyaXB0b3JXYWxsZXRPdXRwdXQgPSBXaXRoRGVzY3JpcHRvcjxQcmV2T3V0cHV0PjtcblxuZXhwb3J0IGZ1bmN0aW9uIHRvRGVyaXZlZERlc2NyaXB0b3JXYWxsZXRPdXRwdXQoXG4gIG91dHB1dDogRGVzY3JpcHRvcldhbGxldE91dHB1dCxcbiAgZGVzY3JpcHRvck1hcDogRGVzY3JpcHRvck1hcFxuKTogRGVyaXZlZERlc2NyaXB0b3JXYWxsZXRPdXRwdXQge1xuICBjb25zdCBkZXNjcmlwdG9yID0gZGVzY3JpcHRvck1hcC5nZXQob3V0cHV0LmRlc2NyaXB0b3JOYW1lKTtcbiAgaWYgKCFkZXNjcmlwdG9yKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBEZXNjcmlwdG9yIG5vdCBmb3VuZDogJHtvdXRwdXQuZGVzY3JpcHRvck5hbWV9YCk7XG4gIH1cbiAgYXNzZXJ0KGRlc2NyaXB0b3IgaW5zdGFuY2VvZiBEZXNjcmlwdG9yKTtcbiAgY29uc3QgZGVzY3JpcHRvckF0SW5kZXggPSBnZXREZXNjcmlwdG9yQXRJbmRleENoZWNrU2NyaXB0KFxuICAgIGRlc2NyaXB0b3IsXG4gICAgb3V0cHV0LmRlc2NyaXB0b3JJbmRleCxcbiAgICBvdXRwdXQud2l0bmVzc1V0eG8uc2NyaXB0LFxuICAgIG91dHB1dC5kZXNjcmlwdG9yTmFtZVxuICApO1xuICByZXR1cm4ge1xuICAgIGhhc2g6IG91dHB1dC5oYXNoLFxuICAgIGluZGV4OiBvdXRwdXQuaW5kZXgsXG4gICAgd2l0bmVzc1V0eG86IG91dHB1dC53aXRuZXNzVXR4byxcbiAgICBkZXNjcmlwdG9yOiBkZXNjcmlwdG9yQXRJbmRleCxcbiAgfTtcbn1cbiJdfQ==
@@ -0,0 +1,23 @@
1
+ import * as utxolib from '@bitgo-beta/utxo-lib';
2
+ import { Descriptor } from '@bitgo/wasm-utxo';
3
+ import { DescriptorMap } from './DescriptorMap';
4
+ export declare function getInputVSizesForDescriptors(descriptors: DescriptorMap): Record<string, number>;
5
+ export declare function getChangeOutputVSizesForDescriptor(d: Descriptor): {
6
+ inputVSize: number;
7
+ outputVSize: number;
8
+ };
9
+ type InputWithDescriptorName = {
10
+ descriptorName: string;
11
+ };
12
+ type OutputWithScript = {
13
+ script: Buffer;
14
+ };
15
+ type Tx<TInput> = {
16
+ inputs: TInput[];
17
+ outputs: OutputWithScript[];
18
+ };
19
+ export declare function getVirtualSize(tx: Tx<Descriptor>): number;
20
+ export declare function getVirtualSize(tx: Tx<InputWithDescriptorName>, descriptors: DescriptorMap): number;
21
+ export declare function getVirtualSizeEstimateForPsbt(psbt: utxolib.Psbt, descriptorMap: DescriptorMap): number;
22
+ export {};
23
+ //# sourceMappingURL=VirtualSize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VirtualSize.d.ts","sourceRoot":"","sources":["../../../src/descriptor/VirtualSize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAEhD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAkDhD,wBAAgB,4BAA4B,CAAC,WAAW,EAAE,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAM/F;AAED,wBAAgB,kCAAkC,CAAC,CAAC,EAAE,UAAU,GAAG;IACjE,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB,CAKA;AAED,KAAK,uBAAuB,GAAG;IAAE,cAAc,EAAE,MAAM,CAAA;CAAE,CAAC;AAC1D,KAAK,gBAAgB,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3C,KAAK,EAAE,CAAC,MAAM,IAAI;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,gBAAgB,EAAE,CAAC;CAC7B,CAAC;AAEF,wBAAgB,cAAc,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC;AAC3D,wBAAgB,cAAc,CAAC,EAAE,EAAE,EAAE,CAAC,uBAAuB,CAAC,EAAE,WAAW,EAAE,aAAa,GAAG,MAAM,CAAC;AA6BpG,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,aAAa,EAAE,aAAa,GAAG,MAAM,CAUtG"}