@bitgo-beta/utxo-core 1.8.1-beta.61 → 1.8.1-beta.611

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 (356) 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 +5 -0
  4. package/dist/cjs/src/bip322/index.d.ts.map +1 -0
  5. package/dist/cjs/src/bip322/index.js +21 -0
  6. package/dist/cjs/src/bip322/toSign.d.ts +25 -0
  7. package/dist/cjs/src/bip322/toSign.d.ts.map +1 -0
  8. package/dist/cjs/src/bip322/toSign.js +126 -0
  9. package/dist/cjs/src/bip322/toSpend.d.ts +22 -0
  10. package/dist/cjs/src/bip322/toSpend.d.ts.map +1 -0
  11. package/dist/cjs/src/bip322/toSpend.js +72 -0
  12. package/dist/cjs/src/bip322/utils.d.ts +18 -0
  13. package/dist/cjs/src/bip322/utils.d.ts.map +1 -0
  14. package/dist/cjs/src/bip322/utils.js +115 -0
  15. package/dist/cjs/src/bip322/verify.d.ts +12 -0
  16. package/dist/cjs/src/bip322/verify.d.ts.map +1 -0
  17. package/dist/cjs/src/bip322/verify.js +115 -0
  18. package/dist/cjs/src/bip32utils.d.ts +16 -0
  19. package/dist/cjs/src/bip32utils.d.ts.map +1 -0
  20. package/dist/cjs/src/bip32utils.js +71 -0
  21. package/dist/cjs/src/bip65/index.d.ts.map +1 -0
  22. package/dist/{src → cjs/src}/bip65/index.js +1 -1
  23. package/dist/cjs/src/bip65/locktime.d.ts.map +1 -0
  24. package/dist/cjs/src/bip65/locktime.js +37 -0
  25. package/dist/{src → cjs/src}/descriptor/DescriptorMap.d.ts +1 -1
  26. package/dist/cjs/src/descriptor/DescriptorMap.d.ts.map +1 -0
  27. package/dist/cjs/src/descriptor/DescriptorMap.js +9 -0
  28. package/dist/{src → cjs/src}/descriptor/Output.d.ts +1 -1
  29. package/dist/cjs/src/descriptor/Output.d.ts.map +1 -0
  30. package/dist/cjs/src/descriptor/Output.js +41 -0
  31. package/dist/{src → cjs/src}/descriptor/VirtualSize.d.ts +1 -1
  32. package/dist/cjs/src/descriptor/VirtualSize.d.ts.map +1 -0
  33. package/dist/cjs/src/descriptor/VirtualSize.js +100 -0
  34. package/dist/{src → cjs/src}/descriptor/address.d.ts +1 -1
  35. package/dist/cjs/src/descriptor/address.d.ts.map +1 -0
  36. package/dist/{src → cjs/src}/descriptor/address.js +1 -1
  37. package/dist/{src → cjs/src}/descriptor/derive.d.ts +1 -1
  38. package/dist/cjs/src/descriptor/derive.d.ts.map +1 -0
  39. package/dist/cjs/src/descriptor/derive.js +45 -0
  40. package/dist/{src → cjs/src}/descriptor/fromFixedScriptWallet.d.ts +1 -1
  41. package/dist/cjs/src/descriptor/fromFixedScriptWallet.d.ts.map +1 -0
  42. package/dist/cjs/src/descriptor/fromFixedScriptWallet.js +88 -0
  43. package/dist/{src → cjs/src}/descriptor/index.d.ts +1 -0
  44. package/dist/cjs/src/descriptor/index.d.ts.map +1 -0
  45. package/dist/{src → cjs/src}/descriptor/index.js +2 -1
  46. package/dist/cjs/src/descriptor/parse/PatternMatcher.d.ts +14 -0
  47. package/dist/cjs/src/descriptor/parse/PatternMatcher.d.ts.map +1 -0
  48. package/dist/cjs/src/descriptor/parse/PatternMatcher.js +60 -0
  49. package/dist/{src → cjs/src}/descriptor/psbt/assertSatisfiable.d.ts +1 -1
  50. package/dist/cjs/src/descriptor/psbt/assertSatisfiable.d.ts.map +1 -0
  51. package/dist/cjs/src/descriptor/psbt/assertSatisfiable.js +74 -0
  52. package/dist/{src → cjs/src}/descriptor/psbt/createPsbt.d.ts +4 -0
  53. package/dist/cjs/src/descriptor/psbt/createPsbt.d.ts.map +1 -0
  54. package/dist/cjs/src/descriptor/psbt/createPsbt.js +107 -0
  55. package/dist/{src → cjs/src}/descriptor/psbt/findDescriptors.d.ts +1 -1
  56. package/dist/cjs/src/descriptor/psbt/findDescriptors.d.ts.map +1 -0
  57. package/dist/cjs/src/descriptor/psbt/findDescriptors.js +98 -0
  58. package/dist/cjs/src/descriptor/psbt/index.d.ts.map +1 -0
  59. package/dist/{src → cjs/src}/descriptor/psbt/index.js +1 -1
  60. package/dist/{src → cjs/src}/descriptor/psbt/parse.d.ts +1 -1
  61. package/dist/cjs/src/descriptor/psbt/parse.d.ts.map +1 -0
  62. package/dist/cjs/src/descriptor/psbt/parse.js +87 -0
  63. package/dist/{src → cjs/src}/descriptor/psbt/sign.d.ts +4 -4
  64. package/dist/cjs/src/descriptor/psbt/sign.d.ts.map +1 -0
  65. package/dist/cjs/src/descriptor/psbt/sign.js +42 -0
  66. package/dist/{src → cjs/src}/descriptor/psbt/wrap.d.ts +1 -1
  67. package/dist/cjs/src/descriptor/psbt/wrap.d.ts.map +1 -0
  68. package/dist/cjs/src/descriptor/psbt/wrap.js +76 -0
  69. package/dist/cjs/src/dustThreshold.d.ts.map +1 -0
  70. package/dist/cjs/src/dustThreshold.js +134 -0
  71. package/dist/{src → cjs/src}/index.d.ts +1 -0
  72. package/dist/cjs/src/index.d.ts.map +1 -0
  73. package/dist/{src → cjs/src}/index.js +3 -2
  74. package/dist/cjs/src/paygo/attestation.d.ts +11 -0
  75. package/dist/cjs/src/paygo/attestation.d.ts.map +1 -0
  76. package/dist/cjs/src/paygo/attestation.js +58 -0
  77. package/dist/cjs/src/paygo/index.d.ts +3 -0
  78. package/dist/cjs/src/paygo/index.d.ts.map +1 -0
  79. package/dist/cjs/src/paygo/index.js +19 -0
  80. package/dist/{src/paygo/ExtractAddressPayGoAttestation.d.ts → cjs/src/paygo/parsePayGoAttestation.d.ts} +8 -3
  81. package/dist/cjs/src/paygo/parsePayGoAttestation.d.ts.map +1 -0
  82. package/dist/cjs/src/paygo/parsePayGoAttestation.js +50 -0
  83. package/dist/cjs/src/paygo/psbt/Errors.d.ts +22 -0
  84. package/dist/cjs/src/paygo/psbt/Errors.d.ts.map +1 -0
  85. package/dist/cjs/src/paygo/psbt/Errors.js +44 -0
  86. package/dist/cjs/src/paygo/psbt/index.d.ts +2 -0
  87. package/dist/cjs/src/paygo/psbt/index.d.ts.map +1 -0
  88. package/dist/{src/paygo → cjs/src/paygo/psbt}/index.js +2 -2
  89. package/dist/cjs/src/paygo/psbt/payGoAddressProof.d.ts +29 -0
  90. package/dist/cjs/src/paygo/psbt/payGoAddressProof.d.ts.map +1 -0
  91. package/dist/cjs/src/paygo/psbt/payGoAddressProof.js +124 -0
  92. package/dist/{src → cjs/src}/testutil/descriptor/descriptors.d.ts +4 -1
  93. package/dist/cjs/src/testutil/descriptor/descriptors.d.ts.map +1 -0
  94. package/dist/cjs/src/testutil/descriptor/descriptors.js +162 -0
  95. package/dist/cjs/src/testutil/descriptor/index.d.ts.map +1 -0
  96. package/dist/{src → cjs/src}/testutil/descriptor/index.js +1 -1
  97. package/dist/{src → cjs/src}/testutil/descriptor/mock.utils.d.ts +3 -1
  98. package/dist/cjs/src/testutil/descriptor/mock.utils.d.ts.map +1 -0
  99. package/dist/cjs/src/testutil/descriptor/mock.utils.js +92 -0
  100. package/dist/cjs/src/testutil/descriptor/psbt.utils.d.ts.map +1 -0
  101. package/dist/cjs/src/testutil/descriptor/psbt.utils.js +21 -0
  102. package/dist/cjs/src/testutil/fixtures.utils.d.ts.map +1 -0
  103. package/dist/cjs/src/testutil/fixtures.utils.js +127 -0
  104. package/dist/{src → cjs/src}/testutil/generatePayGoAttestationProof.utils.d.ts +1 -1
  105. package/dist/cjs/src/testutil/generatePayGoAttestationProof.utils.d.ts.map +1 -0
  106. package/dist/cjs/src/testutil/generatePayGoAttestationProof.utils.js +38 -0
  107. package/dist/{src → cjs/src}/testutil/index.d.ts +1 -0
  108. package/dist/cjs/src/testutil/index.d.ts.map +1 -0
  109. package/dist/{src → cjs/src}/testutil/index.js +2 -1
  110. package/dist/{src → cjs/src}/testutil/key.utils.d.ts +1 -1
  111. package/dist/cjs/src/testutil/key.utils.d.ts.map +1 -0
  112. package/dist/cjs/src/testutil/key.utils.js +60 -0
  113. package/dist/cjs/src/testutil/toPlainObject.utils.d.ts.map +1 -0
  114. package/dist/cjs/src/testutil/toPlainObject.utils.js +89 -0
  115. package/dist/cjs/src/testutil/trimMessagePrefix.d.ts +11 -0
  116. package/dist/cjs/src/testutil/trimMessagePrefix.d.ts.map +1 -0
  117. package/dist/cjs/src/testutil/trimMessagePrefix.js +60 -0
  118. package/dist/cjs/src/xOnlyPubkey.d.ts.map +1 -0
  119. package/dist/cjs/src/xOnlyPubkey.js +18 -0
  120. package/dist/cjs/test/Output.d.ts +2 -0
  121. package/dist/cjs/test/Output.d.ts.map +1 -0
  122. package/dist/cjs/test/Output.js +70 -0
  123. package/dist/cjs/test/bip322/bip322.utils.d.ts +7 -0
  124. package/dist/cjs/test/bip322/bip322.utils.d.ts.map +1 -0
  125. package/dist/cjs/test/bip322/bip322.utils.js +16 -0
  126. package/dist/cjs/test/bip322/toSign.d.ts +2 -0
  127. package/dist/cjs/test/bip322/toSign.d.ts.map +1 -0
  128. package/dist/cjs/test/bip322/toSign.js +133 -0
  129. package/dist/cjs/test/bip322/toSpend.d.ts +2 -0
  130. package/dist/cjs/test/bip322/toSpend.d.ts.map +1 -0
  131. package/dist/cjs/test/bip322/toSpend.js +70 -0
  132. package/dist/cjs/test/bip322/utils.d.ts +2 -0
  133. package/dist/cjs/test/bip322/utils.d.ts.map +1 -0
  134. package/dist/cjs/test/bip322/utils.js +79 -0
  135. package/dist/cjs/test/bip322/verify.d.ts +2 -0
  136. package/dist/cjs/test/bip322/verify.d.ts.map +1 -0
  137. package/dist/cjs/test/bip322/verify.js +293 -0
  138. package/dist/cjs/test/bip32utils.d.ts +2 -0
  139. package/dist/cjs/test/bip32utils.d.ts.map +1 -0
  140. package/dist/cjs/test/bip32utils.js +62 -0
  141. package/dist/cjs/test/bip65/locktime.d.ts +2 -0
  142. package/dist/cjs/test/bip65/locktime.d.ts.map +1 -0
  143. package/dist/cjs/test/bip65/locktime.js +22 -0
  144. package/dist/cjs/test/descriptor/Output.d.ts +2 -0
  145. package/dist/cjs/test/descriptor/Output.d.ts.map +1 -0
  146. package/dist/cjs/test/descriptor/Output.js +44 -0
  147. package/dist/cjs/test/descriptor/derive.d.ts +2 -0
  148. package/dist/cjs/test/descriptor/derive.d.ts.map +1 -0
  149. package/dist/cjs/test/descriptor/derive.js +27 -0
  150. package/dist/cjs/test/descriptor/fromFixedScriptWallet.d.ts +2 -0
  151. package/dist/cjs/test/descriptor/fromFixedScriptWallet.d.ts.map +1 -0
  152. package/dist/cjs/test/descriptor/fromFixedScriptWallet.js +145 -0
  153. package/dist/cjs/test/descriptor/parse/PatternMatcher.d.ts +2 -0
  154. package/dist/cjs/test/descriptor/parse/PatternMatcher.d.ts.map +1 -0
  155. package/dist/cjs/test/descriptor/parse/PatternMatcher.js +120 -0
  156. package/dist/cjs/test/descriptor/psbt/VirtualSize.d.ts +2 -0
  157. package/dist/cjs/test/descriptor/psbt/VirtualSize.d.ts.map +1 -0
  158. package/dist/cjs/test/descriptor/psbt/VirtualSize.js +71 -0
  159. package/dist/cjs/test/descriptor/psbt/assertSatisfiable.d.ts +2 -0
  160. package/dist/cjs/test/descriptor/psbt/assertSatisfiable.d.ts.map +1 -0
  161. package/dist/cjs/test/descriptor/psbt/assertSatisfiable.js +56 -0
  162. package/dist/cjs/test/descriptor/psbt/findDescriptors.d.ts +2 -0
  163. package/dist/cjs/test/descriptor/psbt/findDescriptors.d.ts.map +1 -0
  164. package/dist/cjs/test/descriptor/psbt/findDescriptors.js +70 -0
  165. package/dist/cjs/test/descriptor/psbt/psbt.d.ts +2 -0
  166. package/dist/cjs/test/descriptor/psbt/psbt.d.ts.map +1 -0
  167. package/dist/cjs/test/descriptor/psbt/psbt.js +211 -0
  168. package/dist/cjs/test/dustThreshold.d.ts +2 -0
  169. package/dist/cjs/test/dustThreshold.d.ts.map +1 -0
  170. package/dist/cjs/test/dustThreshold.js +110 -0
  171. package/dist/cjs/test/paygo/attestation.d.ts +2 -0
  172. package/dist/cjs/test/paygo/attestation.d.ts.map +1 -0
  173. package/dist/cjs/test/paygo/attestation.js +23 -0
  174. package/dist/cjs/test/paygo/parsePayGoAttestation.d.ts +2 -0
  175. package/dist/cjs/test/paygo/parsePayGoAttestation.d.ts.map +1 -0
  176. package/dist/cjs/test/paygo/parsePayGoAttestation.js +75 -0
  177. package/dist/cjs/test/paygo/psbt/payGoAddressProof.d.ts +9 -0
  178. package/dist/cjs/test/paygo/psbt/payGoAddressProof.d.ts.map +1 -0
  179. package/dist/cjs/test/paygo/psbt/payGoAddressProof.js +163 -0
  180. package/dist/cjs/test/xOnlyPubkey.d.ts +2 -0
  181. package/dist/cjs/test/xOnlyPubkey.d.ts.map +1 -0
  182. package/dist/cjs/test/xOnlyPubkey.js +18 -0
  183. package/dist/cjs/tsconfig.tsbuildinfo +1 -0
  184. package/dist/esm/Output.d.ts +43 -0
  185. package/dist/esm/Output.js +53 -0
  186. package/dist/esm/bip322/index.d.ts +5 -0
  187. package/dist/esm/bip322/index.d.ts.map +1 -0
  188. package/dist/esm/bip322/index.js +5 -0
  189. package/dist/esm/bip322/toSign.d.ts +25 -0
  190. package/dist/esm/bip322/toSign.d.ts.map +1 -0
  191. package/dist/esm/bip322/toSign.js +120 -0
  192. package/dist/esm/bip322/toSpend.d.ts +22 -0
  193. package/dist/esm/bip322/toSpend.d.ts.map +1 -0
  194. package/dist/esm/bip322/toSpend.js +66 -0
  195. package/dist/esm/bip322/utils.d.ts +18 -0
  196. package/dist/esm/bip322/utils.d.ts.map +1 -0
  197. package/dist/esm/bip322/utils.js +77 -0
  198. package/dist/esm/bip322/verify.d.ts +12 -0
  199. package/dist/esm/bip322/verify.d.ts.map +1 -0
  200. package/dist/esm/bip322/verify.js +76 -0
  201. package/dist/esm/bip32utils.d.ts +16 -0
  202. package/dist/esm/bip32utils.d.ts.map +1 -0
  203. package/dist/esm/bip32utils.js +34 -0
  204. package/dist/esm/bip65/index.d.ts +2 -0
  205. package/dist/esm/bip65/index.js +2 -0
  206. package/dist/esm/bip65/locktime.d.ts +8 -0
  207. package/dist/esm/bip65/locktime.js +34 -0
  208. package/dist/esm/descriptor/DescriptorMap.d.ts +9 -0
  209. package/dist/{src → esm}/descriptor/DescriptorMap.d.ts.map +1 -1
  210. package/dist/esm/descriptor/DescriptorMap.js +6 -0
  211. package/dist/esm/descriptor/Output.d.ts +23 -0
  212. package/dist/{src → esm}/descriptor/Output.d.ts.map +1 -1
  213. package/dist/esm/descriptor/Output.js +32 -0
  214. package/dist/esm/descriptor/VirtualSize.d.ts +23 -0
  215. package/dist/{src → esm}/descriptor/VirtualSize.d.ts.map +1 -1
  216. package/dist/esm/descriptor/VirtualSize.js +94 -0
  217. package/dist/esm/descriptor/address.d.ts +5 -0
  218. package/dist/{src → esm}/descriptor/address.d.ts.map +1 -1
  219. package/dist/esm/descriptor/address.js +11 -0
  220. package/dist/esm/descriptor/derive.d.ts +13 -0
  221. package/dist/{src → esm}/descriptor/derive.d.ts.map +1 -1
  222. package/dist/esm/descriptor/derive.js +38 -0
  223. package/dist/esm/descriptor/fromFixedScriptWallet.d.ts +16 -0
  224. package/dist/{src → esm}/descriptor/fromFixedScriptWallet.d.ts.map +1 -1
  225. package/dist/esm/descriptor/fromFixedScriptWallet.js +51 -0
  226. package/dist/esm/descriptor/index.d.ts +11 -0
  227. package/dist/{src → esm}/descriptor/index.d.ts.map +1 -1
  228. package/dist/esm/descriptor/index.js +11 -0
  229. package/dist/esm/descriptor/parse/PatternMatcher.d.ts +14 -0
  230. package/dist/esm/descriptor/parse/PatternMatcher.d.ts.map +1 -0
  231. package/dist/esm/descriptor/parse/PatternMatcher.js +56 -0
  232. package/dist/esm/descriptor/psbt/assertSatisfiable.d.ts +20 -0
  233. package/dist/{src → esm}/descriptor/psbt/assertSatisfiable.d.ts.map +1 -1
  234. package/dist/esm/descriptor/psbt/assertSatisfiable.js +69 -0
  235. package/dist/esm/descriptor/psbt/createPsbt.d.ts +23 -0
  236. package/dist/esm/descriptor/psbt/createPsbt.d.ts.map +1 -0
  237. package/dist/esm/descriptor/psbt/createPsbt.js +69 -0
  238. package/dist/esm/descriptor/psbt/findDescriptors.d.ts +26 -0
  239. package/dist/{src → esm}/descriptor/psbt/findDescriptors.d.ts.map +1 -1
  240. package/dist/esm/descriptor/psbt/findDescriptors.js +94 -0
  241. package/dist/esm/descriptor/psbt/index.d.ts +7 -0
  242. package/dist/esm/descriptor/psbt/index.js +7 -0
  243. package/dist/esm/descriptor/psbt/parse.d.ts +27 -0
  244. package/dist/{src → esm}/descriptor/psbt/parse.d.ts.map +1 -1
  245. package/dist/esm/descriptor/psbt/parse.js +51 -0
  246. package/dist/esm/descriptor/psbt/sign.d.ts +26 -0
  247. package/dist/esm/descriptor/psbt/sign.d.ts.map +1 -0
  248. package/dist/esm/descriptor/psbt/sign.js +34 -0
  249. package/dist/esm/descriptor/psbt/wrap.d.ts +12 -0
  250. package/dist/{src → esm}/descriptor/psbt/wrap.d.ts.map +1 -1
  251. package/dist/esm/descriptor/psbt/wrap.js +38 -0
  252. package/dist/esm/dustThreshold.d.ts +4 -0
  253. package/dist/esm/dustThreshold.js +97 -0
  254. package/dist/esm/index.d.ts +10 -0
  255. package/dist/{src → esm}/index.d.ts.map +1 -1
  256. package/dist/esm/index.js +10 -0
  257. package/dist/esm/paygo/attestation.d.ts +11 -0
  258. package/dist/esm/paygo/attestation.d.ts.map +1 -0
  259. package/dist/esm/paygo/attestation.js +18 -0
  260. package/dist/esm/paygo/index.d.ts +3 -0
  261. package/dist/esm/paygo/index.d.ts.map +1 -0
  262. package/dist/esm/paygo/index.js +3 -0
  263. package/dist/esm/paygo/parsePayGoAttestation.d.ts +16 -0
  264. package/dist/esm/paygo/parsePayGoAttestation.d.ts.map +1 -0
  265. package/dist/esm/paygo/parsePayGoAttestation.js +43 -0
  266. package/dist/esm/paygo/psbt/Errors.d.ts +22 -0
  267. package/dist/esm/paygo/psbt/Errors.d.ts.map +1 -0
  268. package/dist/esm/paygo/psbt/Errors.js +35 -0
  269. package/dist/esm/paygo/psbt/index.d.ts +2 -0
  270. package/dist/esm/paygo/psbt/index.d.ts.map +1 -0
  271. package/dist/esm/paygo/psbt/index.js +2 -0
  272. package/dist/esm/paygo/psbt/payGoAddressProof.d.ts +29 -0
  273. package/dist/esm/paygo/psbt/payGoAddressProof.d.ts.map +1 -0
  274. package/dist/esm/paygo/psbt/payGoAddressProof.js +85 -0
  275. package/dist/esm/testutil/descriptor/descriptors.d.ts +13 -0
  276. package/dist/esm/testutil/descriptor/descriptors.d.ts.map +1 -0
  277. package/dist/esm/testutil/descriptor/descriptors.js +150 -0
  278. package/dist/esm/testutil/descriptor/index.d.ts +4 -0
  279. package/dist/esm/testutil/descriptor/index.js +4 -0
  280. package/dist/esm/testutil/descriptor/mock.utils.d.ts +36 -0
  281. package/dist/esm/testutil/descriptor/mock.utils.d.ts.map +1 -0
  282. package/dist/esm/testutil/descriptor/mock.utils.js +53 -0
  283. package/dist/esm/testutil/descriptor/psbt.utils.d.ts +4 -0
  284. package/dist/{src → esm}/testutil/descriptor/psbt.utils.d.ts.map +1 -1
  285. package/dist/esm/testutil/descriptor/psbt.utils.js +17 -0
  286. package/dist/esm/testutil/fixtures.utils.d.ts +15 -0
  287. package/dist/{src → esm}/testutil/fixtures.utils.js +5 -42
  288. package/dist/esm/testutil/generatePayGoAttestationProof.utils.d.ts +12 -0
  289. package/dist/esm/testutil/generatePayGoAttestationProof.utils.d.ts.map +1 -0
  290. package/dist/esm/testutil/generatePayGoAttestationProof.utils.js +32 -0
  291. package/dist/esm/testutil/index.d.ts +6 -0
  292. package/dist/{src → esm}/testutil/index.d.ts.map +1 -1
  293. package/dist/esm/testutil/index.js +6 -0
  294. package/dist/esm/testutil/key.utils.d.ts +16 -0
  295. package/dist/{src → esm}/testutil/key.utils.d.ts.map +1 -1
  296. package/dist/esm/testutil/key.utils.js +22 -0
  297. package/dist/esm/testutil/toPlainObject.utils.d.ts +11 -0
  298. package/dist/{src → esm}/testutil/toPlainObject.utils.d.ts.map +1 -1
  299. package/dist/esm/testutil/toPlainObject.utils.js +85 -0
  300. package/dist/esm/testutil/trimMessagePrefix.d.ts +11 -0
  301. package/dist/esm/testutil/trimMessagePrefix.d.ts.map +1 -0
  302. package/dist/esm/testutil/trimMessagePrefix.js +24 -0
  303. package/dist/esm/xOnlyPubkey.d.ts +2 -0
  304. package/dist/esm/xOnlyPubkey.js +15 -0
  305. package/package.json +50 -25
  306. package/dist/src/Output.js +0 -60
  307. package/dist/src/bip32utils.d.ts +0 -16
  308. package/dist/src/bip32utils.d.ts.map +0 -1
  309. package/dist/src/bip32utils.js +0 -72
  310. package/dist/src/bip65/locktime.js +0 -37
  311. package/dist/src/descriptor/DescriptorMap.js +0 -9
  312. package/dist/src/descriptor/Output.js +0 -41
  313. package/dist/src/descriptor/VirtualSize.js +0 -100
  314. package/dist/src/descriptor/derive.js +0 -45
  315. package/dist/src/descriptor/fromFixedScriptWallet.js +0 -88
  316. package/dist/src/descriptor/psbt/assertSatisfiable.js +0 -74
  317. package/dist/src/descriptor/psbt/createPsbt.d.ts.map +0 -1
  318. package/dist/src/descriptor/psbt/createPsbt.js +0 -82
  319. package/dist/src/descriptor/psbt/findDescriptors.js +0 -98
  320. package/dist/src/descriptor/psbt/parse.js +0 -87
  321. package/dist/src/descriptor/psbt/sign.d.ts.map +0 -1
  322. package/dist/src/descriptor/psbt/sign.js +0 -42
  323. package/dist/src/descriptor/psbt/wrap.js +0 -76
  324. package/dist/src/dustThreshold.js +0 -134
  325. package/dist/src/paygo/ExtractAddressPayGoAttestation.d.ts.map +0 -1
  326. package/dist/src/paygo/ExtractAddressPayGoAttestation.js +0 -44
  327. package/dist/src/paygo/index.d.ts +0 -2
  328. package/dist/src/paygo/index.d.ts.map +0 -1
  329. package/dist/src/testutil/descriptor/descriptors.d.ts.map +0 -1
  330. package/dist/src/testutil/descriptor/descriptors.js +0 -125
  331. package/dist/src/testutil/descriptor/mock.utils.d.ts.map +0 -1
  332. package/dist/src/testutil/descriptor/mock.utils.js +0 -91
  333. package/dist/src/testutil/descriptor/psbt.utils.js +0 -20
  334. package/dist/src/testutil/generatePayGoAttestationProof.utils.d.ts.map +0 -1
  335. package/dist/src/testutil/generatePayGoAttestationProof.utils.js +0 -43
  336. package/dist/src/testutil/key.utils.js +0 -59
  337. package/dist/src/testutil/toPlainObject.utils.js +0 -75
  338. package/dist/src/xOnlyPubkey.js +0 -18
  339. /package/dist/{src → cjs/src}/Output.d.ts +0 -0
  340. /package/dist/{src → cjs/src}/bip65/index.d.ts +0 -0
  341. /package/dist/{src → cjs/src}/bip65/locktime.d.ts +0 -0
  342. /package/dist/{src → cjs/src}/descriptor/psbt/index.d.ts +0 -0
  343. /package/dist/{src → cjs/src}/dustThreshold.d.ts +0 -0
  344. /package/dist/{src → cjs/src}/testutil/descriptor/index.d.ts +0 -0
  345. /package/dist/{src → cjs/src}/testutil/descriptor/psbt.utils.d.ts +0 -0
  346. /package/dist/{src → cjs/src}/testutil/fixtures.utils.d.ts +0 -0
  347. /package/dist/{src → cjs/src}/testutil/toPlainObject.utils.d.ts +0 -0
  348. /package/dist/{src → cjs/src}/xOnlyPubkey.d.ts +0 -0
  349. /package/dist/{src → esm}/Output.d.ts.map +0 -0
  350. /package/dist/{src → esm}/bip65/index.d.ts.map +0 -0
  351. /package/dist/{src → esm}/bip65/locktime.d.ts.map +0 -0
  352. /package/dist/{src → esm}/descriptor/psbt/index.d.ts.map +0 -0
  353. /package/dist/{src → esm}/dustThreshold.d.ts.map +0 -0
  354. /package/dist/{src → esm}/testutil/descriptor/index.d.ts.map +0 -0
  355. /package/dist/{src → esm}/testutil/fixtures.utils.d.ts.map +0 -0
  356. /package/dist/{src → esm}/xOnlyPubkey.d.ts.map +0 -0
@@ -0,0 +1,293 @@
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
+ const assert = __importStar(require("assert"));
37
+ const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
38
+ const bip322 = __importStar(require("../../src/bip322"));
39
+ const testutils = __importStar(require("./bip322.utils"));
40
+ const opReturnOutput = { value: 0n, script: Buffer.from('6a', 'hex') };
41
+ describe('Verify BIP322 proofs', function () {
42
+ describe('assertBaseTx', function () {
43
+ it('should pass for a valid bip322 transaction', function () {
44
+ assert.doesNotThrow(() => bip322.assertBaseTx(testutils.BIP322_FIXTURE_HELLO_WORLD_TOSIGN_PSBT.getUnsignedTx()));
45
+ });
46
+ it('should reject if the outputs are not conformed correctly', function () {
47
+ let psbt = utxolib.bitgo.createPsbtForNetwork({
48
+ network: utxolib.networks.bitcoin,
49
+ });
50
+ psbt.addOutput(opReturnOutput);
51
+ psbt.addOutput({ value: 1n, script: Buffer.from('6a', 'hex') });
52
+ psbt.setVersion(0);
53
+ psbt.setLocktime(0);
54
+ assert.throws(() => bip322.assertBaseTx(psbt.getUnsignedTx()), /Transaction must have exactly 1 output./);
55
+ psbt = utxolib.bitgo.createPsbtForNetwork({
56
+ network: utxolib.networks.bitcoin,
57
+ });
58
+ psbt.setVersion(0);
59
+ psbt.setLocktime(0);
60
+ psbt.addOutput({ value: 1n, script: Buffer.from('6a', 'hex') });
61
+ assert.throws(() => bip322.assertBaseTx(psbt.getUnsignedTx()), /Transaction output value must be 0./);
62
+ psbt = utxolib.bitgo.createPsbtForNetwork({
63
+ network: utxolib.networks.bitcoin,
64
+ });
65
+ psbt.setVersion(0);
66
+ psbt.setLocktime(0);
67
+ psbt.addOutput({
68
+ value: 0n,
69
+ script: utxolib.bitgo.outputScripts.createOutputScript2of3(utxolib.testutil.getDefaultWalletKeys().deriveForChainAndIndex(0, 0).publicKeys, 'p2wsh', utxolib.networks.bitcoin).scriptPubKey,
70
+ });
71
+ assert.throws(() => bip322.assertBaseTx(psbt.getUnsignedTx()), /Transaction output script must be OP_RETURN./);
72
+ });
73
+ it('should reject if version is not 0', function () {
74
+ const psbt = utxolib.bitgo.createPsbtForNetwork({
75
+ network: utxolib.networks.bitcoin,
76
+ });
77
+ psbt.addOutput({ value: 1n, script: Buffer.from('6a', 'hex') });
78
+ psbt.setVersion(1);
79
+ assert.throws(() => bip322.assertBaseTx(psbt.getUnsignedTx()), /Transaction version must be 0./);
80
+ });
81
+ it('should reject if locktime is not 0', function () {
82
+ const psbt = utxolib.bitgo.createPsbtForNetwork({
83
+ network: utxolib.networks.bitcoin,
84
+ });
85
+ psbt.setVersion(0);
86
+ psbt.addOutput({ value: 1n, script: Buffer.from('6a', 'hex') });
87
+ psbt.setLocktime(1);
88
+ assert.throws(() => bip322.assertBaseTx(psbt.getUnsignedTx()), /Transaction locktime must be 0./);
89
+ });
90
+ });
91
+ describe('assertTxInput', function () {
92
+ it('should fail if input index is out of range', function () {
93
+ const tx = utxolib.bitgo.createPsbtForNetwork({ network: utxolib.networks.bitcoin }).getUnsignedTx();
94
+ assert.throws(() => bip322.assertTxInput(tx, 1, [], { address: '', message: '', pubkeys: [], scriptType: 'p2wsh' }, false), /inputIndex 1 is out of range for tx with 0 inputs./);
95
+ });
96
+ it('should fail if txInput index is not 0', function () {
97
+ const psbt = utxolib.bitgo.createPsbtForNetwork({
98
+ network: utxolib.networks.bitcoin,
99
+ });
100
+ psbt.setVersion(0);
101
+ psbt.setLocktime(0);
102
+ psbt.addOutput(opReturnOutput);
103
+ psbt.addInput({
104
+ index: 1,
105
+ hash: Buffer.alloc(32),
106
+ });
107
+ assert.throws(() => bip322.assertTxInput(psbt.getUnsignedTx(), 0, [], { address: '', message: '', pubkeys: [], scriptType: 'p2wsh' }, false), /transaction input 0 must have index=0./);
108
+ });
109
+ it('should fail if txInput sequence is not 0', function () {
110
+ const psbt = utxolib.bitgo.createPsbtForNetwork({
111
+ network: utxolib.networks.bitcoin,
112
+ });
113
+ psbt.setVersion(0);
114
+ psbt.setLocktime(0);
115
+ psbt.addOutput(opReturnOutput);
116
+ psbt.addInput({
117
+ index: 0,
118
+ hash: Buffer.alloc(32),
119
+ sequence: 1,
120
+ });
121
+ assert.throws(() => bip322.assertTxInput(psbt.getUnsignedTx(), 0, [], { address: '', message: '', pubkeys: [], scriptType: 'p2wsh' }, false), /transaction input 0 sequence must be 0./);
122
+ });
123
+ it('should fail if the scriptPubKey created by the public keys does not match the address provided in the messageInfo', function () {
124
+ const rootWalletKeys = utxolib.testutil.getDefaultWalletKeys();
125
+ const psbt = bip322.createBaseToSignPsbt(rootWalletKeys);
126
+ const message = 'to be or not to be';
127
+ bip322.addBip322InputWithChainAndIndex(psbt, message, rootWalletKeys, {
128
+ chain: 20,
129
+ index: 0,
130
+ });
131
+ assert.ok(psbt.data.inputs[0]?.witnessUtxo?.script);
132
+ const address = utxolib.address.fromOutputScript(psbt.data.inputs[0].witnessUtxo.script, utxolib.networks.bitcoin);
133
+ const wrongPublicKeys = rootWalletKeys.deriveForChainAndIndex(20, 1).publicKeys.map((p) => p.toString('hex'));
134
+ assert.throws(() => bip322.assertTxInput(psbt.getUnsignedTx(), 0, [], { address, message, pubkeys: wrongPublicKeys, scriptType: 'p2wsh' }, false), /Address does not match derived scriptPubKey for input 0./);
135
+ });
136
+ it('should fail if the txid of the input does not match the derived to_spend transaction', function () {
137
+ const rootWalletKeys = utxolib.testutil.getDefaultWalletKeys();
138
+ const psbt = bip322.createBaseToSignPsbt(rootWalletKeys);
139
+ const message = 'to be or not to be';
140
+ const output = utxolib.bitgo.outputScripts.createOutputScript2of3(rootWalletKeys.deriveForChainAndIndex(20, 0).publicKeys, 'p2wsh', psbt.network);
141
+ bip322.addBip322Input(psbt, message, output);
142
+ assert.ok(psbt.data.inputs[0]?.witnessUtxo?.script);
143
+ const address = utxolib.address.fromOutputScript(output.scriptPubKey, utxolib.networks.bitcoin);
144
+ const pubkeys = rootWalletKeys.deriveForChainAndIndex(20, 0).publicKeys.map((p) => p.toString('hex'));
145
+ assert.throws(() => bip322.assertTxInput(psbt.getUnsignedTx(), 0, [], {
146
+ address,
147
+ message: 'that is the question',
148
+ pubkeys,
149
+ scriptType: 'p2wsh',
150
+ }, false));
151
+ });
152
+ describe('checkSignature=true', function () {
153
+ it('should fail if the scriptType is not a 2of3 script', function () {
154
+ const rootWalletKeys = utxolib.testutil.getDefaultWalletKeys();
155
+ const psbt = bip322.createBaseToSignPsbt(rootWalletKeys);
156
+ const message = 'to be or not to be';
157
+ const derivedWalletKeys = rootWalletKeys.deriveForChainAndIndex(20, 0).publicKeys;
158
+ const output = utxolib.payments.p2pkh({
159
+ pubkey: rootWalletKeys.publicKeys[0],
160
+ network: psbt.network,
161
+ }).output;
162
+ assert.ok(output);
163
+ bip322.addBip322Input(psbt, message, {
164
+ scriptPubKey: Buffer.from(output),
165
+ });
166
+ psbt.signAllInputs(rootWalletKeys.user);
167
+ assert.throws(() => bip322.assertTxInput(psbt.getUnsignedTx(), 0, [], {
168
+ // Make the messageInfo self consistent, but not match the non-2of3 address in the PSBT
169
+ address: utxolib.address.fromOutputScript(utxolib.bitgo.outputScripts.createOutputScript2of3(derivedWalletKeys, 'p2wsh', psbt.network)
170
+ .scriptPubKey, psbt.network),
171
+ message,
172
+ pubkeys: derivedWalletKeys.map((k) => k.toString('hex')),
173
+ scriptType: 'p2wsh',
174
+ }, false));
175
+ });
176
+ utxolib.bitgo.outputScripts.scriptTypes2Of3.forEach((scriptType) => {
177
+ describe(scriptType + ' address', function () {
178
+ it('should pass with a full signed tx', function () {
179
+ const rootWalletKeys = utxolib.testutil.getDefaultWalletKeys();
180
+ const psbt = bip322.createBaseToSignPsbt(rootWalletKeys);
181
+ const message = 'to be or not to be';
182
+ const chainCode = utxolib.bitgo.getExternalChainCode(scriptType);
183
+ const derivedWalletKeys = rootWalletKeys.deriveForChainAndIndex(chainCode, 0).publicKeys;
184
+ const address = utxolib.address.fromOutputScript(utxolib.bitgo.outputScripts.createOutputScript2of3(derivedWalletKeys, scriptType, psbt.network)
185
+ .scriptPubKey, psbt.network);
186
+ bip322.addBip322InputWithChainAndIndex(psbt, message, rootWalletKeys, { chain: chainCode, index: 0 });
187
+ if (scriptType === 'p2trMusig2') {
188
+ psbt.setAllInputsMusig2NonceHD(rootWalletKeys.user);
189
+ psbt.setAllInputsMusig2NonceHD(rootWalletKeys.bitgo);
190
+ }
191
+ psbt.signAllInputsHD(rootWalletKeys.user);
192
+ psbt.signAllInputsHD(rootWalletKeys.bitgo);
193
+ psbt.validateSignaturesOfAllInputs();
194
+ psbt.finalizeAllInputs();
195
+ const tx = psbt.extractTransaction();
196
+ assert.doesNotThrow(() => bip322.assertTxInput(tx, 0, [
197
+ {
198
+ value: 0n,
199
+ script: utxolib.address.toOutputScript(address, psbt.network),
200
+ },
201
+ ], {
202
+ // Make the messageInfo self consistent, but not match the non-2of3 address in the PSBT
203
+ address,
204
+ message,
205
+ pubkeys: derivedWalletKeys.map((k) => k.toString('hex')),
206
+ scriptType,
207
+ }, true));
208
+ });
209
+ });
210
+ });
211
+ });
212
+ describe('checkSignature=false', function () {
213
+ it('should not throw if the input is not signed', function () {
214
+ const rootWalletKeys = utxolib.testutil.getDefaultWalletKeys();
215
+ const psbt = bip322.createBaseToSignPsbt(rootWalletKeys);
216
+ const message = 'to be or not to be';
217
+ const output = utxolib.bitgo.outputScripts.createOutputScript2of3(rootWalletKeys.deriveForChainAndIndex(20, 0).publicKeys, 'p2wsh', psbt.network);
218
+ bip322.addBip322Input(psbt, message, output);
219
+ const address = utxolib.address.fromOutputScript(output.scriptPubKey, utxolib.networks.bitcoin);
220
+ assert.doesNotThrow(() => bip322.assertTxInput(psbt.getUnsignedTx(), 0, [], {
221
+ address,
222
+ message,
223
+ pubkeys: rootWalletKeys.deriveForChainAndIndex(20, 0).publicKeys.map((p) => p.toString('hex')),
224
+ scriptType: 'p2wsh',
225
+ }, false));
226
+ });
227
+ });
228
+ });
229
+ describe('assertBip322TxProof', function () {
230
+ const messageInfo = [];
231
+ let tx;
232
+ before(function () {
233
+ const rootWalletKeys = utxolib.testutil.getDefaultWalletKeys();
234
+ const psbt = bip322.createBaseToSignPsbt(rootWalletKeys);
235
+ utxolib.bitgo.outputScripts.scriptTypes2Of3.forEach((scriptType, index) => {
236
+ const chain = utxolib.bitgo.getExternalChainCode(scriptType);
237
+ const message = `message for ${scriptType}`;
238
+ const derivedKeys = rootWalletKeys.deriveForChainAndIndex(chain, index).publicKeys;
239
+ messageInfo.push({
240
+ address: utxolib.address.fromOutputScript(utxolib.bitgo.outputScripts.createOutputScript2of3(derivedKeys, scriptType, psbt.network).scriptPubKey, psbt.network),
241
+ message,
242
+ pubkeys: derivedKeys.map((p) => p.toString('hex')),
243
+ scriptType,
244
+ });
245
+ bip322.addBip322InputWithChainAndIndex(psbt, message, rootWalletKeys, { chain, index });
246
+ });
247
+ psbt.setAllInputsMusig2NonceHD(rootWalletKeys.user);
248
+ psbt.setAllInputsMusig2NonceHD(rootWalletKeys.bitgo);
249
+ psbt.signAllInputsHD(rootWalletKeys.user);
250
+ psbt.signAllInputsHD(rootWalletKeys.bitgo);
251
+ assert.ok(psbt.validateSignaturesOfAllInputs(), `All signatures on the inputs should be valid`);
252
+ psbt.finalizeAllInputs();
253
+ tx = psbt.extractTransaction();
254
+ });
255
+ it('should pass if the messageInfo matches the transaction', function () {
256
+ assert.doesNotThrow(() => bip322.assertBip322TxProof(tx, messageInfo));
257
+ });
258
+ it('should fail if the messageInfo does not match the transaction', function () {
259
+ assert.throws(() => bip322.assertBip322TxProof(tx, messageInfo.map((m) => ({ ...m, message: m.message + ' altered' }))));
260
+ });
261
+ });
262
+ describe('assertBip322PsbtProof', function () {
263
+ const messageInfo = [];
264
+ const rootWalletKeys = utxolib.testutil.getDefaultWalletKeys();
265
+ const psbt = bip322.createBaseToSignPsbt(rootWalletKeys);
266
+ before(function () {
267
+ utxolib.bitgo.outputScripts.scriptTypes2Of3.forEach((scriptType, index) => {
268
+ const chain = utxolib.bitgo.getExternalChainCode(scriptType);
269
+ const message = `message for ${scriptType}`;
270
+ const derivedKeys = rootWalletKeys.deriveForChainAndIndex(chain, index).publicKeys;
271
+ messageInfo.push({
272
+ address: utxolib.address.fromOutputScript(utxolib.bitgo.outputScripts.createOutputScript2of3(derivedKeys, scriptType, psbt.network).scriptPubKey, psbt.network),
273
+ message,
274
+ pubkeys: derivedKeys.map((p) => p.toString('hex')),
275
+ scriptType,
276
+ });
277
+ bip322.addBip322InputWithChainAndIndex(psbt, message, rootWalletKeys, { chain, index });
278
+ });
279
+ psbt.setAllInputsMusig2NonceHD(rootWalletKeys.user);
280
+ psbt.setAllInputsMusig2NonceHD(rootWalletKeys.bitgo);
281
+ psbt.signAllInputsHD(rootWalletKeys.user);
282
+ psbt.signAllInputsHD(rootWalletKeys.bitgo);
283
+ assert.ok(psbt.validateSignaturesOfAllInputs(), `All signatures on the inputs should be valid`);
284
+ });
285
+ it('should work when the message info matches what is in the PSBT', function () {
286
+ assert.doesNotThrow(() => bip322.assertBip322PsbtProof(psbt, messageInfo));
287
+ });
288
+ it('should fail when the message info does not match what is in the PSBT', function () {
289
+ assert.throws(() => bip322.assertBip322PsbtProof(psbt, messageInfo.map((m) => ({ ...m, message: m.message + ' altered' }))));
290
+ });
291
+ });
292
+ });
293
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyaWZ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC9iaXAzMjIvdmVyaWZ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0NBQWlDO0FBRWpDLDhEQUFnRDtBQUVoRCx5REFBMkM7QUFFM0MsMERBQTRDO0FBRTVDLE1BQU0sY0FBYyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztBQUV2RSxRQUFRLENBQUMsc0JBQXNCLEVBQUU7SUFDL0IsUUFBUSxDQUFDLGNBQWMsRUFBRTtRQUN2QixFQUFFLENBQUMsNENBQTRDLEVBQUU7WUFDL0MsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxzQ0FBc0MsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbkgsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsMERBQTBELEVBQUU7WUFDN0QsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQztnQkFDNUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTzthQUNsQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQy9CLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDaEUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuQixJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lB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cyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5cbmltcG9ydCAqIGFzIGJpcDMyMiBmcm9tICcuLi8uLi9zcmMvYmlwMzIyJztcblxuaW1wb3J0ICogYXMgdGVzdHV0aWxzIGZyb20gJy4vYmlwMzIyLnV0aWxzJztcblxuY29uc3Qgb3BSZXR1cm5PdXRwdXQgPSB7IHZhbHVlOiAwbiwgc2NyaXB0OiBCdWZmZXIuZnJvbSgnNmEnLCAnaGV4JykgfTtcblxuZGVzY3JpYmUoJ1ZlcmlmeSBCSVAzMjIgcHJvb2ZzJywgZnVuY3Rpb24gKCkge1xuICBkZXNjcmliZSgnYXNzZXJ0QmFzZVR4JywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgcGFzcyBmb3IgYSB2YWxpZCBiaXAzMjIgdHJhbnNhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IGJpcDMyMi5hc3NlcnRCYXNlVHgodGVzdHV0aWxzLkJJUDMyMl9GSVhUVVJFX0hFTExPX1dPUkxEX1RPU0lHTl9QU0JULmdldFVuc2lnbmVkVHgoKSkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3QgaWYgdGhlIG91dHB1dHMgYXJlIG5vdCBjb25mb3JtZWQgY29ycmVjdGx5JywgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IHBzYnQgPSB1dHhvbGliLmJpdGdvLmNyZWF0ZVBzYnRGb3JOZXR3b3JrKHtcbiAgICAgICAgbmV0d29yazogdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luLFxuICAgICAgfSk7XG4gICAgICBwc2J0LmFkZE91dHB1dChvcFJldHVybk91dHB1dCk7XG4gICAgICBwc2J0LmFkZE91dHB1dCh7IHZhbHVlOiAxbiwgc2NyaXB0OiBCdWZmZXIuZnJvbSgnNmEnLCAnaGV4JykgfSk7XG4gICAgICBwc2J0LnNldFZlcnNpb24oMCk7XG4gICAgICBwc2J0LnNldExvY2t0aW1lKDApO1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBiaXAzMjIuYXNzZXJ0QmFzZVR4KHBzYnQuZ2V0VW5zaWduZWRUeCgpKSwgL1RyYW5zYWN0aW9uIG11c3QgaGF2ZSBleGFjdGx5IDEgb3V0cHV0Li8pO1xuXG4gICAgICBwc2J0ID0gdXR4b2xpYi5iaXRnby5jcmVhdGVQc2J0Rm9yTmV0d29yayh7XG4gICAgICAgIG5ldHdvcms6IHV0eG9saWIubmV0d29ya3MuYml0Y29pbixcbiAgICAgIH0pO1xuICAgICAgcHNidC5zZXRWZXJzaW9uKDApO1xuICAgICAgcHNidC5zZXRMb2NrdGltZSgwKTtcbiAgICAgIHBzYnQuYWRkT3V0cHV0KHsgdmFsdWU6IDFuLCBzY3JpcHQ6IEJ1ZmZlci5mcm9tKCc2YScsICdoZXgnKSB9KTtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYmlwMzIyLmFzc2VydEJhc2VUeChwc2J0LmdldFVuc2lnbmVkVHgoKSksIC9UcmFuc2FjdGlvbiBvdXRwdXQgdmFsdWUgbXVzdCBiZSAwLi8pO1xuXG4gICAgICBwc2J0ID0gdXR4b2xpYi5iaXRnby5jcmVhdGVQc2J0Rm9yTmV0d29yayh7XG4gICAgICAgIG5ldHdvcms6IHV0eG9saWIubmV0d29ya3MuYml0Y29pbixcbiAgICAgIH0pO1xuICAgICAgcHNidC5zZXRWZXJzaW9uKDApO1xuICAgICAgcHNidC5zZXRMb2NrdGltZSgwKTtcbiAgICAgIHBzYnQuYWRkT3V0cHV0KHtcbiAgICAgICAgdmFsdWU6IDBuLFxuICAgICAgICBzY3JpcHQ6IHV0eG9saWIuYml0Z28ub3V0cHV0U2NyaXB0cy5jcmVhdGVPdXRwdXRTY3JpcHQyb2YzKFxuICAgICAgICAgIHV0eG9saWIudGVzdHV0aWwuZ2V0RGVmYXVsdFdhbGxldEtleXMoKS5kZXJpdmVGb3JDaGFpbkFuZEluZGV4KDAsIDApLnB1YmxpY0tleXMsXG4gICAgICAgICAgJ3Ayd3NoJyxcbiAgICAgICAgICB1dHhvbGliLm5ldHdvcmtzLmJpdGNvaW5cbiAgICAgICAgKS5zY3JpcHRQdWJLZXksXG4gICAgICB9KTtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYmlwMzIyLmFzc2VydEJhc2VUeChwc2J0LmdldFVuc2lnbmVkVHgoKSksIC9UcmFuc2FjdGlvbiBvdXRwdXQgc2NyaXB0IG11c3QgYmUgT1BfUkVUVVJOLi8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3QgaWYgdmVyc2lvbiBpcyBub3QgMCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBzYnQgPSB1dHhvbGliLmJpdGdvLmNyZWF0ZVBzYnRGb3JOZXR3b3JrKHtcbiAgICAgICAgbmV0d29yazogdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luLFxuICAgICAgfSk7XG4gICAgICBwc2J0LmFkZE91dHB1dCh7IHZhbHVlOiAxbiwgc2NyaXB0OiBCdWZmZXIuZnJvbSgnNmEnLCAnaGV4JykgfSk7XG4gICAgICBwc2J0LnNldFZlcnNpb24oMSk7XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGJpcDMyMi5hc3NlcnRCYXNlVHgocHNidC5nZXRVbnNpZ25lZFR4KCkpLCAvVHJhbnNhY3Rpb24gdmVyc2lvbiBtdXN0IGJlIDAuLyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlamVjdCBpZiBsb2NrdGltZSBpcyBub3QgMCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBzYnQgPSB1dHhvbGliLmJpdGdvLmNyZWF0ZVBzYnRGb3JOZXR3b3JrKHtcbiAgICAgICAgbmV0d29yazogdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luLFxuICAgICAgfSk7XG4gICAgICBwc2J0LnNldFZlcnNpb24oMCk7XG4gICAgICBwc2J0LmFkZE91dHB1dCh7IHZhbHVlOiAxbiwgc2NyaXB0OiBCdWZmZXIuZnJvbSgnNmEnLCAnaGV4JykgfSk7XG4gICAgICBwc2J0LnNldExvY2t0aW1lKDEpO1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBiaXAzMjIuYXNzZXJ0QmFzZVR4KHBzYnQuZ2V0VW5zaWduZWRUeCgpKSwgL1RyYW5zYWN0aW9uIGxvY2t0aW1lIG11c3QgYmUgMC4vKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2Fzc2VydFR4SW5wdXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBmYWlsIGlmIGlucHV0IGluZGV4IGlzIG91dCBvZiByYW5nZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4ID0gdXR4b2xpYi5iaXRnby5jcmVhdGVQc2J0Rm9yTmV0d29yayh7IG5ldHdvcms6IHV0eG9saWIubmV0d29ya3MuYml0Y29pbiB9KS5nZXRVbnNpZ25lZFR4KCk7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiBiaXAzMjIuYXNzZXJ0VHhJbnB1dCh0eCwgMSwgW10sIHsgYWRkcmVzczogJycsIG1lc3NhZ2U6ICcnLCBwdWJrZXlzOiBbXSwgc2NyaXB0VHlwZTogJ3Ayd3NoJyB9LCBmYWxzZSksXG4gICAgICAgIC9pbnB1dEluZGV4IDEgaXMgb3V0IG9mIHJhbmdlIGZvciB0eCB3aXRoIDAgaW5wdXRzLi9cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgaWYgdHhJbnB1dCBpbmRleCBpcyBub3QgMCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBzYnQgPSB1dHhvbGliLmJpdGdvLmNyZWF0ZVBzYnRGb3JOZXR3b3JrKHtcbiAgICAgICAgbmV0d29yazogdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luLFxuICAgICAgfSk7XG4gICAgICBwc2J0LnNldFZlcnNpb24oMCk7XG4gICAgICBwc2J0LnNldExvY2t0aW1lKDApO1xuICAgICAgcHNidC5hZGRPdXRwdXQob3BSZXR1cm5PdXRwdXQpO1xuICAgICAgcHNidC5hZGRJbnB1dCh7XG4gICAgICAgIGluZGV4OiAxLFxuICAgICAgICBoYXNoOiBCdWZmZXIuYWxsb2MoMzIpLFxuICAgICAgfSk7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PlxuICAgICAgICAgIGJpcDMyMi5hc3NlcnRUeElucHV0KFxuICAgICAgICAgICAgcHNidC5nZXRVbnNpZ25lZFR4KCksXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgW10sXG4gICAgICAgICAgICB7IGFkZHJlc3M6ICcnLCBtZXNzYWdlOiAnJywgcHVia2V5czogW10sIHNjcmlwdFR5cGU6ICdwMndzaCcgfSxcbiAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgKSxcbiAgICAgICAgL3RyYW5zYWN0aW9uIGlucHV0IDAgbXVzdCBoYXZlIGluZGV4PTAuL1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCBpZiB0eElucHV0IHNlcXVlbmNlIGlzIG5vdCAwJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcHNidCA9IHV0eG9saWIuYml0Z28uY3JlYXRlUHNidEZvck5ldHdvcmsoe1xuICAgICAgICBuZXR3b3JrOiB1dHhvbGliLm5ldHdvcmtzLmJpdGNvaW4sXG4gICAgICB9KTtcbiAgICAgIHBzYnQuc2V0VmVyc2lvbigwKTtcbiAgICAgIHBzYnQuc2V0TG9ja3RpbWUoMCk7XG4gICAgICBwc2J0LmFkZE91dHB1dChvcFJldHVybk91dHB1dCk7XG4gICAgICBwc2J0LmFkZElucHV0KHtcbiAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgIGhhc2g6IEJ1ZmZlci5hbGxvYygzMiksXG4gICAgICAgIHNlcXVlbmNlOiAxLFxuICAgICAgfSk7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PlxuICAgICAgICAgIGJpcDMyMi5hc3NlcnRUeElucHV0KFxuICAgICAgICAgICAgcHNidC5nZXRVbnNpZ25lZFR4KCksXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgW10sXG4gICAgICAgICAgICB7IGFkZHJlc3M6ICcnLCBtZXNzYWdlOiAnJywgcHVia2V5czogW10sIHNjcmlwdFR5cGU6ICdwMndzaCcgfSxcbiAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgKSxcbiAgICAgICAgL3RyYW5zYWN0aW9uIGlucHV0IDAgc2VxdWVuY2UgbXVzdCBiZSAwLi9cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgaWYgdGhlIHNjcmlwdFB1YktleSBjcmVhdGVkIGJ5IHRoZSBwdWJsaWMga2V5cyBkb2VzIG5vdCBtYXRjaCB0aGUgYWRkcmVzcyBwcm92aWRlZCBpbiB0aGUgbWVzc2FnZUluZm8nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByb290V2FsbGV0S2V5cyA9IHV0eG9saWIudGVzdHV0aWwuZ2V0RGVmYXVsdFdhbGxldEtleXMoKTtcbiAgICAgIGNvbnN0IHBzYnQgPSBiaXAzMjIuY3JlYXRlQmFzZVRvU2lnblBzYnQocm9vdFdhbGxldEtleXMpO1xuICAgICAgY29uc3QgbWVzc2FnZSA9ICd0byBiZSBvciBub3QgdG8gYmUnO1xuICAgICAgYmlwMzIyLmFkZEJpcDMyMklucHV0V2l0aENoYWluQW5kSW5kZXgocHNidCwgbWVzc2FnZSwgcm9vdFdhbGxldEtleXMsIHtcbiAgICAgICAgY2hhaW46IDIwLFxuICAgICAgICBpbmRleDogMCxcbiAgICAgIH0pO1xuICAgICAgYXNzZXJ0Lm9rKHBzYnQuZGF0YS5pbnB1dHNbMF0/LndpdG5lc3NVdHhvPy5zY3JpcHQpO1xuICAgICAgY29uc3QgYWRkcmVzcyA9IHV0eG9saWIuYWRkcmVzcy5mcm9tT3V0cHV0U2NyaXB0KFxuICAgICAgICBwc2J0LmRhdGEuaW5wdXRzWzBdLndpdG5lc3NVdHhvLnNjcmlwdCxcbiAgICAgICAgdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luXG4gICAgICApO1xuICAgICAgY29uc3Qgd3JvbmdQdWJsaWNLZXlzID0gcm9vdFdhbGxldEtleXMuZGVyaXZlRm9yQ2hhaW5BbmRJbmRleCgyMCwgMSkucHVibGljS2V5cy5tYXAoKHApID0+IHAudG9TdHJpbmcoJ2hleCcpKTtcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+XG4gICAgICAgICAgYmlwMzIyLmFzc2VydFR4SW5wdXQoXG4gICAgICAgICAgICBwc2J0LmdldFVuc2lnbmVkVHgoKSxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICBbXSxcbiAgICAgICAgICAgIHsgYWRkcmVzcywgbWVzc2FnZSwgcHVia2V5czogd3JvbmdQdWJsaWNLZXlzLCBzY3JpcHRUeXBlOiAncDJ3c2gnIH0sXG4gICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICksXG4gICAgICAgIC9BZGRyZXNzIGRvZXMgbm90IG1hdGNoIGRlcml2ZWQgc2NyaXB0UHViS2V5IGZvciBpbnB1dCAwLi9cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgaWYgdGhlIHR4aWQgb2YgdGhlIGlucHV0IGRvZXMgbm90IG1hdGNoIHRoZSBkZXJpdmVkIHRvX3NwZW5kIHRyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgcm9vdFdhbGxldEtleXMgPSB1dHhvbGliLnRlc3R1dGlsLmdldERlZmF1bHRXYWxsZXRLZXlzKCk7XG4gICAgICBjb25zdCBwc2J0ID0gYmlwMzIyLmNyZWF0ZUJhc2VUb1NpZ25Qc2J0KHJvb3RXYWxsZXRLZXlzKTtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSAndG8gYmUgb3Igbm90IHRvIGJlJztcblxuICAgICAgY29uc3Qgb3V0cHV0ID0gdXR4b2xpYi5iaXRnby5vdXRwdXRTY3JpcHRzLmNyZWF0ZU91dHB1dFNjcmlwdDJvZjMoXG4gICAgICAgIHJvb3RXYWxsZXRLZXlzLmRlcml2ZUZvckNoYWluQW5kSW5kZXgoMjAsIDApLnB1YmxpY0tleXMsXG4gICAgICAgICdwMndzaCcsXG4gICAgICAgIHBzYnQubmV0d29ya1xuICAgICAgKTtcbiAgICAgIGJpcDMyMi5hZGRCaXAzMjJJbnB1dChwc2J0LCBtZXNzYWdlLCBvdXRwdXQpO1xuICAgICAgYXNzZXJ0Lm9rKHBzYnQuZGF0YS5pbnB1dHNbMF0/LndpdG5lc3NVdHhvPy5zY3JpcHQpO1xuICAgICAgY29uc3QgYWRkcmVzcyA9IHV0eG9saWIuYWRkcmVzcy5mcm9tT3V0cHV0U2NyaXB0KG91dHB1dC5zY3JpcHRQdWJLZXksIHV0eG9saWIubmV0d29ya3MuYml0Y29pbik7XG4gICAgICBjb25zdCBwdWJrZXlzID0gcm9vdFdhbGxldEtleXMuZGVyaXZlRm9yQ2hhaW5BbmRJbmRleCgyMCwgMCkucHVibGljS2V5cy5tYXAoKHApID0+IHAudG9TdHJpbmcoJ2hleCcpKTtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT5cbiAgICAgICAgYmlwMzIyLmFzc2VydFR4SW5wdXQoXG4gICAgICAgICAgcHNidC5nZXRVbnNpZ25lZFR4KCksXG4gICAgICAgICAgMCxcbiAgICAgICAgICBbXSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzLFxuICAgICAgICAgICAgbWVzc2FnZTogJ3RoYXQgaXMgdGhlIHF1ZXN0aW9uJyxcbiAgICAgICAgICAgIHB1YmtleXMsXG4gICAgICAgICAgICBzY3JpcHRUeXBlOiAncDJ3c2gnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmFsc2VcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdjaGVja1NpZ25hdHVyZT10cnVlJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ3Nob3VsZCBmYWlsIGlmIHRoZSBzY3JpcHRUeXBlIGlzIG5vdCBhIDJvZjMgc2NyaXB0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCByb290V2FsbGV0S2V5cyA9IHV0eG9saWIudGVzdHV0aWwuZ2V0RGVmYXVsdFdhbGxldEtleXMoKTtcbiAgICAgICAgY29uc3QgcHNidCA9IGJpcDMyMi5jcmVhdGVCYXNlVG9TaWduUHNidChyb290V2FsbGV0S2V5cyk7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSAndG8gYmUgb3Igbm90IHRvIGJlJztcbiAgICAgICAgY29uc3QgZGVyaXZlZFdhbGxldEtleXMgPSByb290V2FsbGV0S2V5cy5kZXJpdmVGb3JDaGFpbkFuZEluZGV4KDIwLCAwKS5wdWJsaWNLZXlzO1xuXG4gICAgICAgIGNvbnN0IG91dHB1dCA9IHV0eG9saWIucGF5bWVudHMucDJwa2goe1xuICAgICAgICAgIHB1YmtleTogcm9vdFdhbGxldEtleXMucHVibGljS2V5c1swXSxcbiAgICAgICAgICBuZXR3b3JrOiBwc2J0Lm5ldHdvcmssXG4gICAgICAgIH0pLm91dHB1dDtcbiAgICAgICAgYXNzZXJ0Lm9rKG91dHB1dCk7XG4gICAgICAgIGJpcDMyMi5hZGRCaXAzMjJJbnB1dChwc2J0LCBtZXNzYWdlLCB7XG4gICAgICAgICAgc2NyaXB0UHViS2V5OiBCdWZmZXIuZnJvbShvdXRwdXQpLFxuICAgICAgICB9KTtcbiAgICAgICAgcHNidC5zaWduQWxsSW5wdXRzKHJvb3RXYWxsZXRLZXlzLnVzZXIpO1xuICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+XG4gICAgICAgICAgYmlwMzIyLmFzc2VydFR4SW5wdXQoXG4gICAgICAgICAgICBwc2J0LmdldFVuc2lnbmVkVHgoKSxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICBbXSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgLy8gTWFrZSB0aGUgbWVzc2FnZUluZm8gc2VsZiBjb25zaXN0ZW50LCBidXQgbm90IG1hdGNoIHRoZSBub24tMm9mMyBhZGRyZXNzIGluIHRoZSBQU0JUXG4gICAgICAgICAgICAgIGFkZHJlc3M6IHV0eG9saWIuYWRkcmVzcy5mcm9tT3V0cHV0U2NyaXB0KFxuICAgICAgICAgICAgICAgIHV0eG9saWIuYml0Z28ub3V0cHV0U2NyaXB0cy5jcmVhdGVPdXRwdXRTY3JpcHQyb2YzKGRlcml2ZWRXYWxsZXRLZXlzLCAncDJ3c2gnLCBwc2J0Lm5ldHdvcmspXG4gICAgICAgICAgICAgICAgICAuc2NyaXB0UHViS2V5LFxuICAgICAgICAgICAgICAgIHBzYnQubmV0d29ya1xuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICAgICAgICBwdWJrZXlzOiBkZXJpdmVkV2FsbGV0S2V5cy5tYXAoKGspID0+IGsudG9TdHJpbmcoJ2hleCcpKSxcbiAgICAgICAgICAgICAgc2NyaXB0VHlwZTogJ3Ayd3NoJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmYWxzZVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICB1dHhvbGliLmJpdGdvLm91dHB1dFNjcmlwdHMuc2NyaXB0VHlwZXMyT2YzLmZvckVhY2goKHNjcmlwdFR5cGUpID0+IHtcbiAgICAgICAgZGVzY3JpYmUoc2NyaXB0VHlwZSArICcgYWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpdCgnc2hvdWxkIHBhc3Mgd2l0aCBhIGZ1bGwgc2lnbmVkIHR4JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3Qgcm9vdFdhbGxldEtleXMgPSB1dHhvbGliLnRlc3R1dGlsLmdldERlZmF1bHRXYWxsZXRLZXlzKCk7XG4gICAgICAgICAgICBjb25zdCBwc2J0ID0gYmlwMzIyLmNyZWF0ZUJhc2VUb1NpZ25Qc2J0KHJvb3RXYWxsZXRLZXlzKTtcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSAndG8gYmUgb3Igbm90IHRvIGJlJztcbiAgICAgICAgICAgIGNvbnN0IGNoYWluQ29kZSA9IHV0eG9saWIuYml0Z28uZ2V0RXh0ZXJuYWxDaGFpbkNvZGUoc2NyaXB0VHlwZSk7XG4gICAgICAgICAgICBjb25zdCBkZXJpdmVkV2FsbGV0S2V5cyA9IHJvb3RXYWxsZXRLZXlzLmRlcml2ZUZvckNoYWluQW5kSW5kZXgoY2hhaW5Db2RlLCAwKS5wdWJsaWNLZXlzO1xuICAgICAgICAgICAgY29uc3QgYWRkcmVzcyA9IHV0eG9saWIuYWRkcmVzcy5mcm9tT3V0cHV0U2NyaXB0KFxuICAgICAgICAgICAgICB1dHhvbGliLmJpdGdvLm91dHB1dFNjcmlwdHMuY3JlYXRlT3V0cHV0U2NyaXB0Mm9mMyhkZXJpdmVkV2FsbGV0S2V5cywgc2NyaXB0VHlwZSwgcHNidC5uZXR3b3JrKVxuICAgICAgICAgICAgICAgIC5zY3JpcHRQdWJLZXksXG4gICAgICAgICAgICAgIHBzYnQubmV0d29ya1xuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgYmlwMzIyLmFkZEJpcDMyMklucHV0V2l0aENoYWluQW5kSW5kZXgocHNidCwgbWVzc2FnZSwgcm9vdFdhbGxldEtleXMsIHsgY2hhaW46IGNoYWluQ29kZSwgaW5kZXg6IDAgfSk7XG4gICAgICAgICAgICBpZiAoc2NyaXB0VHlwZSA9PT0gJ3AydHJNdXNpZzInKSB7XG4gICAgICAgICAgICAgIHBzYnQuc2V0QWxsSW5wdXRzTXVzaWcyTm9uY2VIRChyb290V2FsbGV0S2V5cy51c2VyKTtcbiAgICAgICAgICAgICAgcHNidC5zZXRBbGxJbnB1dHNNdXNpZzJOb25jZUhEKHJvb3RXYWxsZXRLZXlzLmJpdGdvKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBzYnQuc2lnbkFsbElucHV0c0hEKHJvb3RXYWxsZXRLZXlzLnVzZXIpO1xuICAgICAgICAgICAgcHNidC5zaWduQWxsSW5wdXRzSEQocm9vdFdhbGxldEtleXMuYml0Z28pO1xuXG4gICAgICAgICAgICBwc2J0LnZhbGlkYXRlU2lnbmF0dXJlc09mQWxsSW5wdXRzKCk7XG4gICAgICAgICAgICBwc2J0LmZpbmFsaXplQWxsSW5wdXRzKCk7XG4gICAgICAgICAgICBjb25zdCB0eCA9IHBzYnQuZXh0cmFjdFRyYW5zYWN0aW9uKCk7XG5cbiAgICAgICAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT5cbiAgICAgICAgICAgICAgYmlwMzIyLmFzc2VydFR4SW5wdXQoXG4gICAgICAgICAgICAgICAgdHgsXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiAwbixcbiAgICAgICAgICAgICAgICAgICAgc2NyaXB0OiB1dHhvbGliLmFkZHJlc3MudG9PdXRwdXRTY3JpcHQoYWRkcmVzcywgcHNidC5uZXR3b3JrKSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAvLyBNYWtlIHRoZSBtZXNzYWdlSW5mbyBzZWxmIGNvbnNpc3RlbnQsIGJ1dCBub3QgbWF0Y2ggdGhlIG5vbi0yb2YzIGFkZHJlc3MgaW4gdGhlIFBTQlRcbiAgICAgICAgICAgICAgICAgIGFkZHJlc3MsXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgcHVia2V5czogZGVyaXZlZFdhbGxldEtleXMubWFwKChrKSA9PiBrLnRvU3RyaW5nKCdoZXgnKSksXG4gICAgICAgICAgICAgICAgICBzY3JpcHRUeXBlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdHJ1ZVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2NoZWNrU2lnbmF0dXJlPWZhbHNlJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ3Nob3VsZCBub3QgdGhyb3cgaWYgdGhlIGlucHV0IGlzIG5vdCBzaWduZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHJvb3RXYWxsZXRLZXlzID0gdXR4b2xpYi50ZXN0dXRpbC5nZXREZWZhdWx0V2FsbGV0S2V5cygpO1xuICAgICAgICBjb25zdCBwc2J0ID0gYmlwMzIyLmNyZWF0ZUJhc2VUb1NpZ25Qc2J0KHJvb3RXYWxsZXRLZXlzKTtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9ICd0byBiZSBvciBub3QgdG8gYmUnO1xuXG4gICAgICAgIGNvbnN0IG91dHB1dCA9IHV0eG9saWIuYml0Z28ub3V0cHV0U2NyaXB0cy5jcmVhdGVPdXRwdXRTY3JpcHQyb2YzKFxuICAgICAgICAgIHJvb3RXYWxsZXRLZXlzLmRlcml2ZUZvckNoYWluQW5kSW5kZXgoMjAsIDApLnB1YmxpY0tleXMsXG4gICAgICAgICAgJ3Ayd3NoJyxcbiAgICAgICAgICBwc2J0Lm5ldHdvcmtcbiAgICAgICAgKTtcbiAgICAgICAgYmlwMzIyLmFkZEJpcDMyMklucHV0KHBzYnQsIG1lc3NhZ2UsIG91dHB1dCk7XG4gICAgICAgIGNvbnN0IGFkZHJlc3MgPSB1dHhvbGliLmFkZHJlc3MuZnJvbU91dHB1dFNjcmlwdChvdXRwdXQuc2NyaXB0UHViS2V5LCB1dHhvbGliLm5ldHdvcmtzLmJpdGNvaW4pO1xuICAgICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+XG4gICAgICAgICAgYmlwMzIyLmFzc2VydFR4SW5wdXQoXG4gICAgICAgICAgICBwc2J0LmdldFVuc2lnbmVkVHgoKSxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICBbXSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYWRkcmVzcyxcbiAgICAgICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgICAgICAgcHVia2V5czogcm9vdFdhbGxldEtleXMuZGVyaXZlRm9yQ2hhaW5BbmRJbmRleCgyMCwgMCkucHVibGljS2V5cy5tYXAoKHApID0+IHAudG9TdHJpbmcoJ2hleCcpKSxcbiAgICAgICAgICAgICAgc2NyaXB0VHlwZTogJ3Ayd3NoJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmYWxzZVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnYXNzZXJ0QmlwMzIyVHhQcm9vZicsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBtZXNzYWdlSW5mbzogYmlwMzIyLk1lc3NhZ2VJbmZvW10gPSBbXTtcbiAgICBsZXQgdHg6IHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uPGJpZ2ludD47XG4gICAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJvb3RXYWxsZXRLZXlzID0gdXR4b2xpYi50ZXN0dXRpbC5nZXREZWZhdWx0V2FsbGV0S2V5cygpO1xuICAgICAgY29uc3QgcHNidCA9IGJpcDMyMi5jcmVhdGVCYXNlVG9TaWduUHNidChyb290V2FsbGV0S2V5cyk7XG4gICAgICB1dHhvbGliLmJpdGdvLm91dHB1dFNjcmlwdHMuc2NyaXB0VHlwZXMyT2YzLmZvckVhY2goKHNjcmlwdFR5cGUsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IGNoYWluID0gdXR4b2xpYi5iaXRnby5nZXRFeHRlcm5hbENoYWluQ29kZShzY3JpcHRUeXBlKTtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGBtZXNzYWdlIGZvciAke3NjcmlwdFR5cGV9YDtcbiAgICAgICAgY29uc3QgZGVyaXZlZEtleXMgPSByb290V2FsbGV0S2V5cy5kZXJpdmVGb3JDaGFpbkFuZEluZGV4KGNoYWluLCBpbmRleCkucHVibGljS2V5cztcbiAgICAgICAgbWVzc2FnZUluZm8ucHVzaCh7XG4gICAgICAgICAgYWRkcmVzczogdXR4b2xpYi5hZGRyZXNzLmZyb21PdXRwdXRTY3JpcHQoXG4gICAgICAgICAgICB1dHhvbGliLmJpdGdvLm91dHB1dFNjcmlwdHMuY3JlYXRlT3V0cHV0U2NyaXB0Mm9mMyhkZXJpdmVkS2V5cywgc2NyaXB0VHlwZSwgcHNidC5uZXR3b3JrKS5zY3JpcHRQdWJLZXksXG4gICAgICAgICAgICBwc2J0Lm5ldHdvcmtcbiAgICAgICAgICApLFxuICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgICAgcHVia2V5czogZGVyaXZlZEtleXMubWFwKChwKSA9PiBwLnRvU3RyaW5nKCdoZXgnKSksXG4gICAgICAgICAgc2NyaXB0VHlwZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYmlwMzIyLmFkZEJpcDMyMklucHV0V2l0aENoYWluQW5kSW5kZXgocHNidCwgbWVzc2FnZSwgcm9vdFdhbGxldEtleXMsIHsgY2hhaW4sIGluZGV4IH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHBzYnQuc2V0QWxsSW5wdXRzTXVzaWcyTm9uY2VIRChyb290V2FsbGV0S2V5cy51c2VyKTtcbiAgICAgIHBzYnQuc2V0QWxsSW5wdXRzTXVzaWcyTm9uY2VIRChyb290V2FsbGV0S2V5cy5iaXRnbyk7XG4gICAgICBwc2J0LnNpZ25BbGxJbnB1dHNIRChyb290V2FsbGV0S2V5cy51c2VyKTtcbiAgICAgIHBzYnQuc2lnbkFsbElucHV0c0hEKHJvb3RXYWxsZXRLZXlzLmJpdGdvKTtcbiAgICAgIGFzc2VydC5vayhwc2J0LnZhbGlkYXRlU2lnbmF0dXJlc09mQWxsSW5wdXRzKCksIGBBbGwgc2lnbmF0dXJlcyBvbiB0aGUgaW5wdXRzIHNob3VsZCBiZSB2YWxpZGApO1xuICAgICAgcHNidC5maW5hbGl6ZUFsbElucHV0cygpO1xuICAgICAgdHggPSBwc2J0LmV4dHJhY3RUcmFuc2FjdGlvbigpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgcGFzcyBpZiB0aGUgbWVzc2FnZUluZm8gbWF0Y2hlcyB0aGUgdHJhbnNhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IGJpcDMyMi5hc3NlcnRCaXAzMjJUeFByb29mKHR4LCBtZXNzYWdlSW5mbykpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIGlmIHRoZSBtZXNzYWdlSW5mbyBkb2VzIG5vdCBtYXRjaCB0aGUgdHJhbnNhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+XG4gICAgICAgIGJpcDMyMi5hc3NlcnRCaXAzMjJUeFByb29mKFxuICAgICAgICAgIHR4LFxuICAgICAgICAgIG1lc3NhZ2VJbmZvLm1hcCgobSkgPT4gKHsgLi4ubSwgbWVzc2FnZTogbS5tZXNzYWdlICsgJyBhbHRlcmVkJyB9KSlcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2Fzc2VydEJpcDMyMlBzYnRQcm9vZicsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBtZXNzYWdlSW5mbzogYmlwMzIyLk1lc3NhZ2VJbmZvW10gPSBbXTtcbiAgICBjb25zdCByb290V2FsbGV0S2V5cyA9IHV0eG9saWIudGVzdHV0aWwuZ2V0RGVmYXVsdFdhbGxldEtleXMoKTtcbiAgICBjb25zdCBwc2J0ID0gYmlwMzIyLmNyZWF0ZUJhc2VUb1NpZ25Qc2J0KHJvb3RXYWxsZXRLZXlzKTtcbiAgICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgICAgdXR4b2xpYi5iaXRnby5vdXRwdXRTY3JpcHRzLnNjcmlwdFR5cGVzMk9mMy5mb3JFYWNoKChzY3JpcHRUeXBlLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBjaGFpbiA9IHV0eG9saWIuYml0Z28uZ2V0RXh0ZXJuYWxDaGFpbkNvZGUoc2NyaXB0VHlwZSk7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgbWVzc2FnZSBmb3IgJHtzY3JpcHRUeXBlfWA7XG4gICAgICAgIGNvbnN0IGRlcml2ZWRLZXlzID0gcm9vdFdhbGxldEtleXMuZGVyaXZlRm9yQ2hhaW5BbmRJbmRleChjaGFpbiwgaW5kZXgpLnB1YmxpY0tleXM7XG4gICAgICAgIG1lc3NhZ2VJbmZvLnB1c2goe1xuICAgICAgICAgIGFkZHJlc3M6IHV0eG9saWIuYWRkcmVzcy5mcm9tT3V0cHV0U2NyaXB0KFxuICAgICAgICAgICAgdXR4b2xpYi5iaXRnby5vdXRwdXRTY3JpcHRzLmNyZWF0ZU91dHB1dFNjcmlwdDJvZjMoZGVyaXZlZEtleXMsIHNjcmlwdFR5cGUsIHBzYnQubmV0d29yaykuc2NyaXB0UHViS2V5LFxuICAgICAgICAgICAgcHNidC5uZXR3b3JrXG4gICAgICAgICAgKSxcbiAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICAgIHB1YmtleXM6IGRlcml2ZWRLZXlzLm1hcCgocCkgPT4gcC50b1N0cmluZygnaGV4JykpLFxuICAgICAgICAgIHNjcmlwdFR5cGUsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGJpcDMyMi5hZGRCaXAzMjJJbnB1dFdpdGhDaGFpbkFuZEluZGV4KHBzYnQsIG1lc3NhZ2UsIHJvb3RXYWxsZXRLZXlzLCB7IGNoYWluLCBpbmRleCB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBwc2J0LnNldEFsbElucHV0c011c2lnMk5vbmNlSEQocm9vdFdhbGxldEtleXMudXNlcik7XG4gICAgICBwc2J0LnNldEFsbElucHV0c011c2lnMk5vbmNlSEQocm9vdFdhbGxldEtleXMuYml0Z28pO1xuICAgICAgcHNidC5zaWduQWxsSW5wdXRzSEQocm9vdFdhbGxldEtleXMudXNlcik7XG4gICAgICBwc2J0LnNpZ25BbGxJbnB1dHNIRChyb290V2FsbGV0S2V5cy5iaXRnbyk7XG4gICAgICBhc3NlcnQub2socHNidC52YWxpZGF0ZVNpZ25hdHVyZXNPZkFsbElucHV0cygpLCBgQWxsIHNpZ25hdHVyZXMgb24gdGhlIGlucHV0cyBzaG91bGQgYmUgdmFsaWRgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgd29yayB3aGVuIHRoZSBtZXNzYWdlIGluZm8gbWF0Y2hlcyB3aGF0IGlzIGluIHRoZSBQU0JUJywgZnVuY3Rpb24gKCkge1xuICAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdygoKSA9PiBiaXAzMjIuYXNzZXJ0QmlwMzIyUHNidFByb29mKHBzYnQsIG1lc3NhZ2VJbmZvKSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgd2hlbiB0aGUgbWVzc2FnZSBpbmZvIGRvZXMgbm90IG1hdGNoIHdoYXQgaXMgaW4gdGhlIFBTQlQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+XG4gICAgICAgIGJpcDMyMi5hc3NlcnRCaXAzMjJQc2J0UHJvb2YoXG4gICAgICAgICAgcHNidCxcbiAgICAgICAgICBtZXNzYWdlSW5mby5tYXAoKG0pID0+ICh7IC4uLm0sIG1lc3NhZ2U6IG0ubWVzc2FnZSArICcgYWx0ZXJlZCcgfSkpXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=bip32utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bip32utils.d.ts","sourceRoot":"","sources":["../../../test/bip32utils.ts"],"names":[],"mappings":""}
@@ -0,0 +1,62 @@
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
+ const crypto = __importStar(require("crypto"));
37
+ const assert = __importStar(require("assert"));
38
+ const secp256k1_1 = require("@bitgo-beta/secp256k1");
39
+ const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
40
+ const bip32utils_1 = require("../src/bip32utils");
41
+ describe('bip32utils', function () {
42
+ function getSeedBuffers(length) {
43
+ return Array.from({ length }).map((_, i) => crypto.createHash('sha256').update(`${i}`).digest());
44
+ }
45
+ it('signMessage/verifyMessage', function () {
46
+ const keys = getSeedBuffers(4).map((seed) => secp256k1_1.bip32.fromSeed(seed));
47
+ const messages = ['hello', 'goodbye', Buffer.from('\x01\x02\x03'), Buffer.from('')];
48
+ keys.forEach((key) => {
49
+ messages.forEach((message) => {
50
+ const signature = (0, bip32utils_1.signMessage)(message, key, utxolib.networks.bitcoin);
51
+ keys.forEach((otherKey) => {
52
+ messages.forEach((otherMessage) => {
53
+ const expectValid = message === otherMessage && key === otherKey;
54
+ assert.strictEqual((0, bip32utils_1.verifyMessage)(otherMessage, otherKey, signature, utxolib.networks.bitcoin), expectValid);
55
+ assert.strictEqual((0, bip32utils_1.verifyMessage)(Buffer.from(otherMessage), otherKey, signature, utxolib.networks.bitcoin), expectValid);
56
+ });
57
+ });
58
+ });
59
+ });
60
+ });
61
+ });
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlwMzJ1dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvYmlwMzJ1dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUFpQztBQUNqQywrQ0FBaUM7QUFFakMscURBQThDO0FBQzlDLDhEQUFnRDtBQUVoRCxrREFBK0Q7QUFFL0QsUUFBUSxDQUFDLFlBQVksRUFBRTtJQUNyQixTQUFTLGNBQWMsQ0FBQyxNQUFjO1FBQ3BDLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDbkcsQ0FBQztJQUNELEVBQUUsQ0FBQywyQkFBMkIsRUFBRTtRQUM5QixNQUFNLElBQUksR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxpQkFBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sUUFBUSxHQUFHLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNwRixJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDbkIsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUMzQixNQUFNLFNBQVMsR0FBRyxJQUFBLHdCQUFXLEVBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUV0RSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7b0JBQ3hCLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLEVBQUUsRUFBRTt3QkFDaEMsTUFBTSxXQUFXLEdBQUcsT0FBTyxLQUFLLFlBQVksSUFBSSxHQUFHLEtBQUssUUFBUSxDQUFDO3dCQUNqRSxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUEsMEJBQWEsRUFBQyxZQUFZLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO3dCQUM1RyxNQUFNLENBQUMsV0FBVyxDQUNoQixJQUFBLDBCQUFhLEVBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQ3ZGLFdBQVcsQ0FDWixDQUFDO29CQUNKLENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjcnlwdG8gZnJvbSAnY3J5cHRvJztcbmltcG9ydCAqIGFzIGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgeyBiaXAzMiB9IGZyb20gJ0BiaXRnby1iZXRhL3NlY3AyNTZrMSc7XG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcblxuaW1wb3J0IHsgc2lnbk1lc3NhZ2UsIHZlcmlmeU1lc3NhZ2UgfSBmcm9tICcuLi9zcmMvYmlwMzJ1dGlscyc7XG5cbmRlc2NyaWJlKCdiaXAzMnV0aWxzJywgZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBnZXRTZWVkQnVmZmVycyhsZW5ndGg6IG51bWJlcikge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoIH0pLm1hcCgoXywgaSkgPT4gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZShgJHtpfWApLmRpZ2VzdCgpKTtcbiAgfVxuICBpdCgnc2lnbk1lc3NhZ2UvdmVyaWZ5TWVzc2FnZScsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBrZXlzID0gZ2V0U2VlZEJ1ZmZlcnMoNCkubWFwKChzZWVkKSA9PiBiaXAzMi5mcm9tU2VlZChzZWVkKSk7XG4gICAgY29uc3QgbWVzc2FnZXMgPSBbJ2hlbGxvJywgJ2dvb2RieWUnLCBCdWZmZXIuZnJvbSgnXFx4MDFcXHgwMlxceDAzJyksIEJ1ZmZlci5mcm9tKCcnKV07XG4gICAga2V5cy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIG1lc3NhZ2VzLmZvckVhY2goKG1lc3NhZ2UpID0+IHtcbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlID0gc2lnbk1lc3NhZ2UobWVzc2FnZSwga2V5LCB1dHhvbGliLm5ldHdvcmtzLmJpdGNvaW4pO1xuXG4gICAgICAgIGtleXMuZm9yRWFjaCgob3RoZXJLZXkpID0+IHtcbiAgICAgICAgICBtZXNzYWdlcy5mb3JFYWNoKChvdGhlck1lc3NhZ2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGV4cGVjdFZhbGlkID0gbWVzc2FnZSA9PT0gb3RoZXJNZXNzYWdlICYmIGtleSA9PT0gb3RoZXJLZXk7XG4gICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodmVyaWZ5TWVzc2FnZShvdGhlck1lc3NhZ2UsIG90aGVyS2V5LCBzaWduYXR1cmUsIHV0eG9saWIubmV0d29ya3MuYml0Y29pbiksIGV4cGVjdFZhbGlkKTtcbiAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChcbiAgICAgICAgICAgICAgdmVyaWZ5TWVzc2FnZShCdWZmZXIuZnJvbShvdGhlck1lc3NhZ2UpLCBvdGhlcktleSwgc2lnbmF0dXJlLCB1dHhvbGliLm5ldHdvcmtzLmJpdGNvaW4pLFxuICAgICAgICAgICAgICBleHBlY3RWYWxpZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=locktime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"locktime.d.ts","sourceRoot":"","sources":["../../../../test/bip65/locktime.ts"],"names":[],"mappings":""}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const assert_1 = __importDefault(require("assert"));
7
+ const locktime_1 = require("../../src/bip65/locktime");
8
+ describe('locktime', function () {
9
+ it('encodes relative and absolute locktimes', function () {
10
+ assert_1.default.strictEqual((0, locktime_1.encodeLocktime)({ blocks: 1 }), 1);
11
+ assert_1.default.strictEqual((0, locktime_1.encodeLocktime)({ blocks: 500000000 - 1 }), 500000000 - 1);
12
+ assert_1.default.strictEqual((0, locktime_1.encodeLocktime)(new Date('1985-11-05T00:53:20Z')), 500000000);
13
+ assert_1.default.strictEqual((0, locktime_1.encodeLocktime)(new Date('2033-05-18T03:33:20.000Z')), 2000000000);
14
+ assert_1.default.throws(() => {
15
+ (0, locktime_1.encodeLocktime)({ blocks: 500000000 });
16
+ });
17
+ assert_1.default.throws(() => {
18
+ (0, locktime_1.encodeLocktime)(new Date('1985-11-05T00:53:19Z'));
19
+ });
20
+ });
21
+ });
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9ja3RpbWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L2JpcDY1L2xvY2t0aW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsb0RBQTRCO0FBRTVCLHVEQUEwRDtBQUUxRCxRQUFRLENBQUMsVUFBVSxFQUFFO0lBQ25CLEVBQUUsQ0FBQyx5Q0FBeUMsRUFBRTtRQUM1QyxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFBLHlCQUFjLEVBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNyRCxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFBLHlCQUFjLEVBQUMsRUFBRSxNQUFNLEVBQUUsU0FBVyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2pGLGdCQUFNLENBQUMsV0FBVyxDQUFDLElBQUEseUJBQWMsRUFBQyxJQUFJLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLEVBQUUsU0FBVyxDQUFDLENBQUM7UUFDbEYsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSx5QkFBYyxFQUFDLElBQUksSUFBSSxDQUFDLDBCQUEwQixDQUFDLENBQUMsRUFBRSxVQUFhLENBQUMsQ0FBQztRQUN4RixnQkFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDakIsSUFBQSx5QkFBYyxFQUFDLEVBQUUsTUFBTSxFQUFFLFNBQVcsRUFBRSxDQUFDLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQUM7UUFDSCxnQkFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDakIsSUFBQSx5QkFBYyxFQUFDLElBQUksSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQztRQUNuRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCB7IGVuY29kZUxvY2t0aW1lIH0gZnJvbSAnLi4vLi4vc3JjL2JpcDY1L2xvY2t0aW1lJztcblxuZGVzY3JpYmUoJ2xvY2t0aW1lJywgZnVuY3Rpb24gKCkge1xuICBpdCgnZW5jb2RlcyByZWxhdGl2ZSBhbmQgYWJzb2x1dGUgbG9ja3RpbWVzJywgZnVuY3Rpb24gKCkge1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChlbmNvZGVMb2NrdGltZSh7IGJsb2NrczogMSB9KSwgMSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGVuY29kZUxvY2t0aW1lKHsgYmxvY2tzOiA1MDBfMDAwXzAwMCAtIDEgfSksIDUwMF8wMDBfMDAwIC0gMSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGVuY29kZUxvY2t0aW1lKG5ldyBEYXRlKCcxOTg1LTExLTA1VDAwOjUzOjIwWicpKSwgNTAwXzAwMF8wMDApO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChlbmNvZGVMb2NrdGltZShuZXcgRGF0ZSgnMjAzMy0wNS0xOFQwMzozMzoyMC4wMDBaJykpLCAyXzAwMF8wMDBfMDAwKTtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IHtcbiAgICAgIGVuY29kZUxvY2t0aW1lKHsgYmxvY2tzOiA1MDBfMDAwXzAwMCB9KTtcbiAgICB9KTtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IHtcbiAgICAgIGVuY29kZUxvY2t0aW1lKG5ldyBEYXRlKCcxOTg1LTExLTA1VDAwOjUzOjE5WicpKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=Output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Output.d.ts","sourceRoot":"","sources":["../../../../test/descriptor/Output.ts"],"names":[],"mappings":""}
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const assert_1 = __importDefault(require("assert"));
7
+ const Output_1 = require("../../src/descriptor/Output");
8
+ const descriptor_1 = require("../../src/testutil/descriptor");
9
+ const descriptor_2 = require("../../src/descriptor");
10
+ describe('decscriptor.Output', function () {
11
+ const descriptor = (0, descriptor_1.getDescriptor)('Wsh2Of3');
12
+ it('isInternalOutput correctly identifies internal outputs', function () {
13
+ const internalOutput = { value: 1n, descriptor };
14
+ const externalOutput = { value: 1n };
15
+ assert_1.default.strictEqual((0, Output_1.isInternalOutput)(internalOutput), true);
16
+ assert_1.default.strictEqual((0, Output_1.isInternalOutput)(externalOutput), false);
17
+ });
18
+ it('isExternalOutput correctly identifies external outputs', function () {
19
+ const internalOutput = { value: 1n, descriptor };
20
+ const externalOutput = { value: 1n };
21
+ assert_1.default.strictEqual((0, Output_1.isExternalOutput)(internalOutput), false);
22
+ assert_1.default.strictEqual((0, Output_1.isExternalOutput)(externalOutput), true);
23
+ });
24
+ it('toDerivedDescriptorWalletOutput returns expected values', function () {
25
+ const derivable = descriptor;
26
+ const definite = derivable.atDerivationIndex(0);
27
+ for (const descriptor of [derivable, definite]) {
28
+ const descriptorIndex = descriptor === derivable ? 0 : undefined;
29
+ const descriptorMap = new Map([['desc', descriptor]]);
30
+ const descriptorWalletOutput = {
31
+ hash: Buffer.alloc(32).toString('hex'),
32
+ index: 0,
33
+ witnessUtxo: {
34
+ script: (0, descriptor_2.createScriptPubKeyFromDescriptor)(descriptor, descriptorIndex),
35
+ value: 1n,
36
+ },
37
+ descriptorName: 'desc',
38
+ descriptorIndex,
39
+ };
40
+ assert_1.default.strictEqual((0, Output_1.toDerivedDescriptorWalletOutput)(descriptorWalletOutput, descriptorMap).descriptor.toString(), definite.toString());
41
+ }
42
+ });
43
+ });
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT3V0cHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC9kZXNjcmlwdG9yL091dHB1dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG9EQUE0QjtBQUU1Qix3REFBa0g7QUFDbEgsOERBQThEO0FBQzlELHFEQUF3RTtBQUV4RSxRQUFRLENBQUMsb0JBQW9CLEVBQUU7SUFDN0IsTUFBTSxVQUFVLEdBQUcsSUFBQSwwQkFBYSxFQUFDLFNBQVMsQ0FBQyxDQUFDO0lBRTVDLEVBQUUsQ0FBQyx3REFBd0QsRUFBRTtRQUMzRCxNQUFNLGNBQWMsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUM7UUFDakQsTUFBTSxjQUFjLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFFckMsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSx5QkFBZ0IsRUFBQyxjQUFjLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMzRCxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFBLHlCQUFnQixFQUFDLGNBQWMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzlELENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHdEQUF3RCxFQUFFO1FBQzNELE1BQU0sY0FBYyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQztRQUNqRCxNQUFNLGNBQWMsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUVyQyxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFBLHlCQUFnQixFQUFDLGNBQWMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVELGdCQUFNLENBQUMsV0FBVyxDQUFDLElBQUEseUJBQWdCLEVBQUMsY0FBYyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDN0QsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMseURBQXlELEVBQUU7UUFDNUQsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDO1FBQzdCLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoRCxLQUFLLE1BQU0sVUFBVSxJQUFJLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDL0MsTUFBTSxlQUFlLEdBQUcsVUFBVSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDakUsTUFBTSxhQUFhLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEQsTUFBTSxzQkFBc0IsR0FBRztnQkFDN0IsSUFBSSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztnQkFDdEMsS0FBSyxFQUFFLENBQUM7Z0JBQ1IsV0FBVyxFQUFFO29CQUNYLE1BQU0sRUFBRSxJQUFBLDZDQUFnQyxFQUFDLFVBQVUsRUFBRSxlQUFlLENBQUM7b0JBQ3JFLEtBQUssRUFBRSxFQUFFO2lCQUNWO2dCQUNELGNBQWMsRUFBRSxNQUFNO2dCQUN0QixlQUFlO2FBQ2hCLENBQUM7WUFDRixnQkFBTSxDQUFDLFdBQVcsQ0FDaEIsSUFBQSx3Q0FBK0IsRUFBQyxzQkFBc0IsRUFBRSxhQUFhLENBQUMsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLEVBQzVGLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FDcEIsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgeyBpc0V4dGVybmFsT3V0cHV0LCBpc0ludGVybmFsT3V0cHV0LCB0b0Rlcml2ZWREZXNjcmlwdG9yV2FsbGV0T3V0cHV0IH0gZnJvbSAnLi4vLi4vc3JjL2Rlc2NyaXB0b3IvT3V0cHV0JztcbmltcG9ydCB7IGdldERlc2NyaXB0b3IgfSBmcm9tICcuLi8uLi9zcmMvdGVzdHV0aWwvZGVzY3JpcHRvcic7XG5pbXBvcnQgeyBjcmVhdGVTY3JpcHRQdWJLZXlGcm9tRGVzY3JpcHRvciB9IGZyb20gJy4uLy4uL3NyYy9kZXNjcmlwdG9yJztcblxuZGVzY3JpYmUoJ2RlY3NjcmlwdG9yLk91dHB1dCcsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgZGVzY3JpcHRvciA9IGdldERlc2NyaXB0b3IoJ1dzaDJPZjMnKTtcblxuICBpdCgnaXNJbnRlcm5hbE91dHB1dCBjb3JyZWN0bHkgaWRlbnRpZmllcyBpbnRlcm5hbCBvdXRwdXRzJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGludGVybmFsT3V0cHV0ID0geyB2YWx1ZTogMW4sIGRlc2NyaXB0b3IgfTtcbiAgICBjb25zdCBleHRlcm5hbE91dHB1dCA9IHsgdmFsdWU6IDFuIH07XG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXNJbnRlcm5hbE91dHB1dChpbnRlcm5hbE91dHB1dCksIHRydWUpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChpc0ludGVybmFsT3V0cHV0KGV4dGVybmFsT3V0cHV0KSwgZmFsc2UpO1xuICB9KTtcblxuICBpdCgnaXNFeHRlcm5hbE91dHB1dCBjb3JyZWN0bHkgaWRlbnRpZmllcyBleHRlcm5hbCBvdXRwdXRzJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGludGVybmFsT3V0cHV0ID0geyB2YWx1ZTogMW4sIGRlc2NyaXB0b3IgfTtcbiAgICBjb25zdCBleHRlcm5hbE91dHB1dCA9IHsgdmFsdWU6IDFuIH07XG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXNFeHRlcm5hbE91dHB1dChpbnRlcm5hbE91dHB1dCksIGZhbHNlKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXNFeHRlcm5hbE91dHB1dChleHRlcm5hbE91dHB1dCksIHRydWUpO1xuICB9KTtcblxuICBpdCgndG9EZXJpdmVkRGVzY3JpcHRvcldhbGxldE91dHB1dCByZXR1cm5zIGV4cGVjdGVkIHZhbHVlcycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBkZXJpdmFibGUgPSBkZXNjcmlwdG9yO1xuICAgIGNvbnN0IGRlZmluaXRlID0gZGVyaXZhYmxlLmF0RGVyaXZhdGlvbkluZGV4KDApO1xuICAgIGZvciAoY29uc3QgZGVzY3JpcHRvciBvZiBbZGVyaXZhYmxlLCBkZWZpbml0ZV0pIHtcbiAgICAgIGNvbnN0IGRlc2NyaXB0b3JJbmRleCA9IGRlc2NyaXB0b3IgPT09IGRlcml2YWJsZSA/IDAgOiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBkZXNjcmlwdG9yTWFwID0gbmV3IE1hcChbWydkZXNjJywgZGVzY3JpcHRvcl1dKTtcbiAgICAgIGNvbnN0IGRlc2NyaXB0b3JXYWxsZXRPdXRwdXQgPSB7XG4gICAgICAgIGhhc2g6IEJ1ZmZlci5hbGxvYygzMikudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICBpbmRleDogMCxcbiAgICAgICAgd2l0bmVzc1V0eG86IHtcbiAgICAgICAgICBzY3JpcHQ6IGNyZWF0ZVNjcmlwdFB1YktleUZyb21EZXNjcmlwdG9yKGRlc2NyaXB0b3IsIGRlc2NyaXB0b3JJbmRleCksXG4gICAgICAgICAgdmFsdWU6IDFuLFxuICAgICAgICB9LFxuICAgICAgICBkZXNjcmlwdG9yTmFtZTogJ2Rlc2MnLFxuICAgICAgICBkZXNjcmlwdG9ySW5kZXgsXG4gICAgICB9O1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKFxuICAgICAgICB0b0Rlcml2ZWREZXNjcmlwdG9yV2FsbGV0T3V0cHV0KGRlc2NyaXB0b3JXYWxsZXRPdXRwdXQsIGRlc2NyaXB0b3JNYXApLmRlc2NyaXB0b3IudG9TdHJpbmcoKSxcbiAgICAgICAgZGVmaW5pdGUudG9TdHJpbmcoKVxuICAgICAgKTtcbiAgICB9XG4gIH0pO1xufSk7XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=derive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"derive.d.ts","sourceRoot":"","sources":["../../../../test/descriptor/derive.ts"],"names":[],"mappings":""}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const assert_1 = __importDefault(require("assert"));
7
+ const descriptor_1 = require("../../src/testutil/descriptor");
8
+ const derive_1 = require("../../src/descriptor/derive");
9
+ describe('derive', function () {
10
+ const derivable = (0, descriptor_1.getDescriptor)('Wsh2Of3');
11
+ const definite = derivable.atDerivationIndex(0);
12
+ it('getDescriptorAtIndex', function () {
13
+ (0, assert_1.default)(derivable.hasWildcard());
14
+ (0, assert_1.default)(!definite.hasWildcard());
15
+ assert_1.default.strictEqual((0, derive_1.getDescriptorAtIndex)(derivable, 0).toString(), definite.toString());
16
+ assert_1.default.strictEqual((0, derive_1.getDescriptorAtIndex)(definite, undefined).toString(), definite.toString());
17
+ assert_1.default.throws(() => (0, derive_1.getDescriptorAtIndex)(derivable, undefined), /Derivable descriptor requires an index/);
18
+ assert_1.default.throws(() => (0, derive_1.getDescriptorAtIndex)(definite, 0), /Definite descriptor cannot be derived with index/);
19
+ });
20
+ it('getDescriptorAtIndexCheckScript', function () {
21
+ const script0 = Buffer.from(derivable.atDerivationIndex(0).scriptPubkey());
22
+ const script1 = Buffer.from(derivable.atDerivationIndex(1).scriptPubkey());
23
+ assert_1.default.strictEqual((0, derive_1.getDescriptorAtIndexCheckScript)(derivable, 0, script0).toString(), definite.toString());
24
+ assert_1.default.throws(() => (0, derive_1.getDescriptorAtIndexCheckScript)(derivable, 0, script1), /Script mismatch/);
25
+ });
26
+ });
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVyaXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC9kZXNjcmlwdG9yL2Rlcml2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG9EQUE0QjtBQUU1Qiw4REFBOEQ7QUFDOUQsd0RBQW9HO0FBRXBHLFFBQVEsQ0FBQyxRQUFRLEVBQUU7SUFDakIsTUFBTSxTQUFTLEdBQUcsSUFBQSwwQkFBYSxFQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzNDLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVoRCxFQUFFLENBQUMsc0JBQXNCLEVBQUU7UUFDekIsSUFBQSxnQkFBTSxFQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ2hDLElBQUEsZ0JBQU0sRUFBQyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ2hDLGdCQUFNLENBQUMsV0FBVyxDQUFDLElBQUEsNkJBQW9CLEVBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZGLGdCQUFNLENBQUMsV0FBVyxDQUFDLElBQUEsNkJBQW9CLEVBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQzlGLGdCQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUEsNkJBQW9CLEVBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxFQUFFLHdDQUF3QyxDQUFDLENBQUM7UUFDMUcsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBQSw2QkFBb0IsRUFBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsa0RBQWtELENBQUMsQ0FBQztJQUM3RyxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxpQ0FBaUMsRUFBRTtRQUNwQyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQzNFLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDM0UsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSx3Q0FBK0IsRUFBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQzNHLGdCQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUEsd0NBQStCLEVBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0lBQ2pHLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCB7IGdldERlc2NyaXB0b3IgfSBmcm9tICcuLi8uLi9zcmMvdGVzdHV0aWwvZGVzY3JpcHRvcic7XG5pbXBvcnQgeyBnZXREZXNjcmlwdG9yQXRJbmRleCwgZ2V0RGVzY3JpcHRvckF0SW5kZXhDaGVja1NjcmlwdCB9IGZyb20gJy4uLy4uL3NyYy9kZXNjcmlwdG9yL2Rlcml2ZSc7XG5cbmRlc2NyaWJlKCdkZXJpdmUnLCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGRlcml2YWJsZSA9IGdldERlc2NyaXB0b3IoJ1dzaDJPZjMnKTtcbiAgY29uc3QgZGVmaW5pdGUgPSBkZXJpdmFibGUuYXREZXJpdmF0aW9uSW5kZXgoMCk7XG5cbiAgaXQoJ2dldERlc2NyaXB0b3JBdEluZGV4JywgZnVuY3Rpb24gKCkge1xuICAgIGFzc2VydChkZXJpdmFibGUuaGFzV2lsZGNhcmQoKSk7XG4gICAgYXNzZXJ0KCFkZWZpbml0ZS5oYXNXaWxkY2FyZCgpKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZ2V0RGVzY3JpcHRvckF0SW5kZXgoZGVyaXZhYmxlLCAwKS50b1N0cmluZygpLCBkZWZpbml0ZS50b1N0cmluZygpKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZ2V0RGVzY3JpcHRvckF0SW5kZXgoZGVmaW5pdGUsIHVuZGVmaW5lZCkudG9TdHJpbmcoKSwgZGVmaW5pdGUudG9TdHJpbmcoKSk7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiBnZXREZXNjcmlwdG9yQXRJbmRleChkZXJpdmFibGUsIHVuZGVmaW5lZCksIC9EZXJpdmFibGUgZGVzY3JpcHRvciByZXF1aXJlcyBhbiBpbmRleC8pO1xuICAgIGFzc2VydC50aHJvd3MoKCkgPT4gZ2V0RGVzY3JpcHRvckF0SW5kZXgoZGVmaW5pdGUsIDApLCAvRGVmaW5pdGUgZGVzY3JpcHRvciBjYW5ub3QgYmUgZGVyaXZlZCB3aXRoIGluZGV4Lyk7XG4gIH0pO1xuXG4gIGl0KCdnZXREZXNjcmlwdG9yQXRJbmRleENoZWNrU2NyaXB0JywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHNjcmlwdDAgPSBCdWZmZXIuZnJvbShkZXJpdmFibGUuYXREZXJpdmF0aW9uSW5kZXgoMCkuc2NyaXB0UHVia2V5KCkpO1xuICAgIGNvbnN0IHNjcmlwdDEgPSBCdWZmZXIuZnJvbShkZXJpdmFibGUuYXREZXJpdmF0aW9uSW5kZXgoMSkuc2NyaXB0UHVia2V5KCkpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChnZXREZXNjcmlwdG9yQXRJbmRleENoZWNrU2NyaXB0KGRlcml2YWJsZSwgMCwgc2NyaXB0MCkudG9TdHJpbmcoKSwgZGVmaW5pdGUudG9TdHJpbmcoKSk7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiBnZXREZXNjcmlwdG9yQXRJbmRleENoZWNrU2NyaXB0KGRlcml2YWJsZSwgMCwgc2NyaXB0MSksIC9TY3JpcHQgbWlzbWF0Y2gvKTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=fromFixedScriptWallet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fromFixedScriptWallet.d.ts","sourceRoot":"","sources":["../../../../test/descriptor/fromFixedScriptWallet.ts"],"names":[],"mappings":""}