@bsv/sdk 1.1.33 → 1.2.0

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 (214) hide show
  1. package/dist/cjs/mod.js +4 -0
  2. package/dist/cjs/mod.js.map +1 -1
  3. package/dist/cjs/package.json +4 -3
  4. package/dist/cjs/src/auth/Certificate.js +163 -0
  5. package/dist/cjs/src/auth/Certificate.js.map +1 -0
  6. package/dist/cjs/src/auth/index.js +9 -0
  7. package/dist/cjs/src/auth/index.js.map +1 -0
  8. package/dist/cjs/src/compat/BSM.js +17 -7
  9. package/dist/cjs/src/compat/BSM.js.map +1 -1
  10. package/dist/cjs/src/compat/ECIES.js +17 -7
  11. package/dist/cjs/src/compat/ECIES.js.map +1 -1
  12. package/dist/cjs/src/compat/HD.js +17 -7
  13. package/dist/cjs/src/compat/HD.js.map +1 -1
  14. package/dist/cjs/src/compat/Mnemonic.js +17 -7
  15. package/dist/cjs/src/compat/Mnemonic.js.map +1 -1
  16. package/dist/cjs/src/compat/index.js +17 -7
  17. package/dist/cjs/src/compat/index.js.map +1 -1
  18. package/dist/cjs/src/messages/index.js +17 -7
  19. package/dist/cjs/src/messages/index.js.map +1 -1
  20. package/dist/cjs/src/overlay-tools/LookupResolver.js +170 -0
  21. package/dist/cjs/src/overlay-tools/LookupResolver.js.map +1 -0
  22. package/dist/cjs/src/overlay-tools/OverlayAdminTokenTemplate.js +69 -0
  23. package/dist/cjs/src/overlay-tools/OverlayAdminTokenTemplate.js.map +1 -0
  24. package/dist/cjs/src/overlay-tools/SHIPBroadcaster.js +336 -0
  25. package/dist/cjs/src/overlay-tools/SHIPBroadcaster.js.map +1 -0
  26. package/dist/cjs/src/overlay-tools/index.js +29 -0
  27. package/dist/cjs/src/overlay-tools/index.js.map +1 -0
  28. package/dist/cjs/src/primitives/PrivateKey.js +17 -7
  29. package/dist/cjs/src/primitives/PrivateKey.js.map +1 -1
  30. package/dist/cjs/src/primitives/TransactionSignature.js +17 -7
  31. package/dist/cjs/src/primitives/TransactionSignature.js.map +1 -1
  32. package/dist/cjs/src/primitives/index.js +17 -7
  33. package/dist/cjs/src/primitives/index.js.map +1 -1
  34. package/dist/cjs/src/script/Spend.js +17 -7
  35. package/dist/cjs/src/script/Spend.js.map +1 -1
  36. package/dist/cjs/src/script/templates/PushDrop.js +218 -0
  37. package/dist/cjs/src/script/templates/PushDrop.js.map +1 -0
  38. package/dist/cjs/src/script/templates/index.js +3 -1
  39. package/dist/cjs/src/script/templates/index.js.map +1 -1
  40. package/dist/cjs/src/transaction/http/DefaultHttpClient.js +1 -1
  41. package/dist/cjs/src/transaction/http/DefaultHttpClient.js.map +1 -1
  42. package/dist/cjs/src/wallet/CachedKeyDeriver.js +177 -0
  43. package/dist/cjs/src/wallet/CachedKeyDeriver.js.map +1 -0
  44. package/dist/cjs/src/wallet/KeyDeriver.js +174 -0
  45. package/dist/cjs/src/wallet/KeyDeriver.js.map +1 -0
  46. package/dist/cjs/src/wallet/ProtoWallet.js +245 -0
  47. package/dist/cjs/src/wallet/ProtoWallet.js.map +1 -0
  48. package/dist/cjs/src/wallet/Wallet.interfaces.js +3 -0
  49. package/dist/cjs/src/wallet/Wallet.interfaces.js.map +1 -0
  50. package/dist/cjs/src/wallet/WalletClient.js +181 -0
  51. package/dist/cjs/src/wallet/WalletClient.js.map +1 -0
  52. package/dist/cjs/src/wallet/WalletError.js +28 -0
  53. package/dist/cjs/src/wallet/WalletError.js.map +1 -0
  54. package/dist/cjs/src/wallet/index.js +34 -0
  55. package/dist/cjs/src/wallet/index.js.map +1 -0
  56. package/dist/cjs/src/wallet/substrates/HTTPWalletWire.js +45 -0
  57. package/dist/cjs/src/wallet/substrates/HTTPWalletWire.js.map +1 -0
  58. package/dist/cjs/src/wallet/substrates/WalletWire.js +3 -0
  59. package/dist/cjs/src/wallet/substrates/WalletWire.js.map +1 -0
  60. package/dist/cjs/src/wallet/substrates/WalletWireCalls.js +36 -0
  61. package/dist/cjs/src/wallet/substrates/WalletWireCalls.js.map +1 -0
  62. package/dist/cjs/src/wallet/substrates/WalletWireProcessor.js +1821 -0
  63. package/dist/cjs/src/wallet/substrates/WalletWireProcessor.js.map +1 -0
  64. package/dist/cjs/src/wallet/substrates/WalletWireTransceiver.js +1305 -0
  65. package/dist/cjs/src/wallet/substrates/WalletWireTransceiver.js.map +1 -0
  66. package/dist/cjs/src/wallet/substrates/XDM.js +130 -0
  67. package/dist/cjs/src/wallet/substrates/XDM.js.map +1 -0
  68. package/dist/cjs/src/wallet/substrates/index.js +33 -0
  69. package/dist/cjs/src/wallet/substrates/index.js.map +1 -0
  70. package/dist/cjs/src/wallet/substrates/window.CWI.js +102 -0
  71. package/dist/cjs/src/wallet/substrates/window.CWI.js.map +1 -0
  72. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  73. package/dist/esm/mod.js +4 -0
  74. package/dist/esm/mod.js.map +1 -1
  75. package/dist/esm/src/auth/Certificate.js +185 -0
  76. package/dist/esm/src/auth/Certificate.js.map +1 -0
  77. package/dist/esm/src/auth/index.js +2 -0
  78. package/dist/esm/src/auth/index.js.map +1 -0
  79. package/dist/esm/src/overlay-tools/LookupResolver.js +167 -0
  80. package/dist/esm/src/overlay-tools/LookupResolver.js.map +1 -0
  81. package/dist/esm/src/overlay-tools/OverlayAdminTokenTemplate.js +64 -0
  82. package/dist/esm/src/overlay-tools/OverlayAdminTokenTemplate.js.map +1 -0
  83. package/dist/esm/src/overlay-tools/SHIPBroadcaster.js +335 -0
  84. package/dist/esm/src/overlay-tools/SHIPBroadcaster.js.map +1 -0
  85. package/dist/esm/src/overlay-tools/index.js +6 -0
  86. package/dist/esm/src/overlay-tools/index.js.map +1 -0
  87. package/dist/esm/src/script/templates/PushDrop.js +215 -0
  88. package/dist/esm/src/script/templates/PushDrop.js.map +1 -0
  89. package/dist/esm/src/script/templates/index.js +1 -0
  90. package/dist/esm/src/script/templates/index.js.map +1 -1
  91. package/dist/esm/src/transaction/http/DefaultHttpClient.js +1 -1
  92. package/dist/esm/src/transaction/http/DefaultHttpClient.js.map +1 -1
  93. package/dist/esm/src/wallet/CachedKeyDeriver.js +174 -0
  94. package/dist/esm/src/wallet/CachedKeyDeriver.js.map +1 -0
  95. package/dist/esm/src/wallet/KeyDeriver.js +172 -0
  96. package/dist/esm/src/wallet/KeyDeriver.js.map +1 -0
  97. package/dist/esm/src/wallet/ProtoWallet.js +207 -0
  98. package/dist/esm/src/wallet/ProtoWallet.js.map +1 -0
  99. package/dist/esm/src/wallet/Wallet.interfaces.js +2 -0
  100. package/dist/esm/src/wallet/Wallet.interfaces.js.map +1 -0
  101. package/dist/esm/src/wallet/WalletClient.js +177 -0
  102. package/dist/esm/src/wallet/WalletClient.js.map +1 -0
  103. package/dist/esm/src/wallet/WalletError.js +25 -0
  104. package/dist/esm/src/wallet/WalletError.js.map +1 -0
  105. package/dist/esm/src/wallet/index.js +9 -0
  106. package/dist/esm/src/wallet/index.js.map +1 -0
  107. package/dist/esm/src/wallet/substrates/HTTPWalletWire.js +42 -0
  108. package/dist/esm/src/wallet/substrates/HTTPWalletWire.js.map +1 -0
  109. package/dist/esm/src/wallet/substrates/WalletWire.js +2 -0
  110. package/dist/esm/src/wallet/substrates/WalletWire.js.map +1 -0
  111. package/dist/esm/src/wallet/substrates/WalletWireCalls.js +34 -0
  112. package/dist/esm/src/wallet/substrates/WalletWireCalls.js.map +1 -0
  113. package/dist/esm/src/wallet/substrates/WalletWireProcessor.js +1816 -0
  114. package/dist/esm/src/wallet/substrates/WalletWireProcessor.js.map +1 -0
  115. package/dist/esm/src/wallet/substrates/WalletWireTransceiver.js +1300 -0
  116. package/dist/esm/src/wallet/substrates/WalletWireTransceiver.js.map +1 -0
  117. package/dist/esm/src/wallet/substrates/XDM.js +128 -0
  118. package/dist/esm/src/wallet/substrates/XDM.js.map +1 -0
  119. package/dist/esm/src/wallet/substrates/index.js +8 -0
  120. package/dist/esm/src/wallet/substrates/index.js.map +1 -0
  121. package/dist/esm/src/wallet/substrates/window.CWI.js +100 -0
  122. package/dist/esm/src/wallet/substrates/window.CWI.js.map +1 -0
  123. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  124. package/dist/types/mod.d.ts +4 -0
  125. package/dist/types/mod.d.ts.map +1 -1
  126. package/dist/types/src/auth/Certificate.d.ts +76 -0
  127. package/dist/types/src/auth/Certificate.d.ts.map +1 -0
  128. package/dist/types/src/auth/index.d.ts +2 -0
  129. package/dist/types/src/auth/index.d.ts.map +1 -0
  130. package/dist/types/src/overlay-tools/LookupResolver.d.ts +71 -0
  131. package/dist/types/src/overlay-tools/LookupResolver.d.ts.map +1 -0
  132. package/dist/types/src/overlay-tools/OverlayAdminTokenTemplate.d.ts +44 -0
  133. package/dist/types/src/overlay-tools/OverlayAdminTokenTemplate.d.ts.map +1 -0
  134. package/dist/types/src/overlay-tools/SHIPBroadcaster.d.ts +90 -0
  135. package/dist/types/src/overlay-tools/SHIPBroadcaster.d.ts.map +1 -0
  136. package/dist/types/src/overlay-tools/index.d.ts +6 -0
  137. package/dist/types/src/overlay-tools/index.d.ts.map +1 -0
  138. package/dist/types/src/script/templates/PushDrop.d.ts +53 -0
  139. package/dist/types/src/script/templates/PushDrop.d.ts.map +1 -0
  140. package/dist/types/src/script/templates/index.d.ts +1 -0
  141. package/dist/types/src/script/templates/index.d.ts.map +1 -1
  142. package/dist/types/src/wallet/CachedKeyDeriver.d.ts +92 -0
  143. package/dist/types/src/wallet/CachedKeyDeriver.d.ts.map +1 -0
  144. package/dist/types/src/wallet/KeyDeriver.d.ts +72 -0
  145. package/dist/types/src/wallet/KeyDeriver.d.ts.map +1 -0
  146. package/dist/types/src/wallet/ProtoWallet.d.ts +415 -0
  147. package/dist/types/src/wallet/ProtoWallet.d.ts.map +1 -0
  148. package/dist/types/src/wallet/Wallet.interfaces.d.ts +996 -0
  149. package/dist/types/src/wallet/Wallet.interfaces.d.ts.map +1 -0
  150. package/dist/types/src/wallet/WalletClient.d.ts +182 -0
  151. package/dist/types/src/wallet/WalletClient.d.ts.map +1 -0
  152. package/dist/types/src/wallet/WalletError.d.ts +14 -0
  153. package/dist/types/src/wallet/WalletError.d.ts.map +1 -0
  154. package/dist/types/src/wallet/index.d.ts +9 -0
  155. package/dist/types/src/wallet/index.d.ts.map +1 -0
  156. package/dist/types/src/wallet/substrates/HTTPWalletWire.d.ts +9 -0
  157. package/dist/types/src/wallet/substrates/HTTPWalletWire.d.ts.map +1 -0
  158. package/dist/types/src/wallet/substrates/WalletWire.d.ts +7 -0
  159. package/dist/types/src/wallet/substrates/WalletWire.d.ts.map +1 -0
  160. package/dist/types/src/wallet/substrates/WalletWireCalls.d.ts +33 -0
  161. package/dist/types/src/wallet/substrates/WalletWireCalls.d.ts.map +1 -0
  162. package/dist/types/src/wallet/substrates/WalletWireProcessor.d.ts +18 -0
  163. package/dist/types/src/wallet/substrates/WalletWireProcessor.d.ts.map +1 -0
  164. package/dist/types/src/wallet/substrates/WalletWireTransceiver.d.ts +196 -0
  165. package/dist/types/src/wallet/substrates/WalletWireTransceiver.d.ts.map +1 -0
  166. package/dist/types/src/wallet/substrates/XDM.d.ts +412 -0
  167. package/dist/types/src/wallet/substrates/XDM.d.ts.map +1 -0
  168. package/dist/types/src/wallet/substrates/index.d.ts +8 -0
  169. package/dist/types/src/wallet/substrates/index.d.ts.map +1 -0
  170. package/dist/types/src/wallet/substrates/window.CWI.d.ts +410 -0
  171. package/dist/types/src/wallet/substrates/window.CWI.d.ts.map +1 -0
  172. package/dist/types/tsconfig.types.tsbuildinfo +1 -1
  173. package/dist/umd/bundle.js +1 -1
  174. package/docs/overlay-tools.md +551 -0
  175. package/docs/script.md +135 -0
  176. package/docs/totp.md +119 -0
  177. package/docs/wallet-substrates.md +10 -0
  178. package/docs/wallet.md +4182 -0
  179. package/mod.ts +5 -1
  180. package/package.json +44 -3
  181. package/src/auth/Certificate.ts +233 -0
  182. package/src/auth/__tests/Certificate.test.ts +282 -0
  183. package/src/auth/index.ts +1 -0
  184. package/src/overlay-tools/LookupResolver.ts +228 -0
  185. package/src/overlay-tools/OverlayAdminTokenTemplate.ts +79 -0
  186. package/src/overlay-tools/SHIPBroadcaster.ts +405 -0
  187. package/src/overlay-tools/__tests/LookupResolver.test.ts +1403 -0
  188. package/src/overlay-tools/__tests/OverlayAdminTokenTemplate.test.ts +69 -0
  189. package/src/overlay-tools/__tests/SHIPBroadcaster.test.ts +904 -0
  190. package/src/overlay-tools/index.ts +5 -0
  191. package/src/script/templates/PushDrop.ts +246 -0
  192. package/src/script/templates/__tests/PushDrop.test.ts +158 -0
  193. package/src/script/templates/index.ts +1 -0
  194. package/src/transaction/http/DefaultHttpClient.ts +1 -1
  195. package/src/wallet/CachedKeyDeriver.ts +193 -0
  196. package/src/wallet/KeyDeriver.ts +178 -0
  197. package/src/wallet/ProtoWallet.ts +732 -0
  198. package/src/wallet/Wallet.interfaces.ts +1170 -0
  199. package/src/wallet/WalletClient.ts +201 -0
  200. package/src/wallet/WalletError.ts +27 -0
  201. package/src/wallet/__tests/CachedKeyDeriver.test.ts +322 -0
  202. package/src/wallet/__tests/KeyDeriver.test.ts +118 -0
  203. package/src/wallet/__tests/ProtoWallet.test.ts +543 -0
  204. package/src/wallet/index.ts +8 -0
  205. package/src/wallet/substrates/HTTPWalletWire.ts +47 -0
  206. package/src/wallet/substrates/WalletWire.ts +6 -0
  207. package/src/wallet/substrates/WalletWireCalls.ts +34 -0
  208. package/src/wallet/substrates/WalletWireProcessor.ts +2046 -0
  209. package/src/wallet/substrates/WalletWireTransceiver.ts +1454 -0
  210. package/src/wallet/substrates/XDM.ts +157 -0
  211. package/src/wallet/substrates/__tests/WalletWire.integration.test.ts +2194 -0
  212. package/src/wallet/substrates/__tests/XDM.test.ts +659 -0
  213. package/src/wallet/substrates/index.ts +7 -0
  214. package/src/wallet/substrates/window.CWI.ts +133 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PushDrop.js","sourceRoot":"","sources":["../../../../../src/script/templates/PushDrop.ts"],"names":[],"mappings":"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"}
@@ -3,9 +3,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.RPuzzle = exports.P2PKH = void 0;
6
+ exports.PushDrop = exports.RPuzzle = exports.P2PKH = void 0;
7
7
  var P2PKH_js_1 = require("./P2PKH.js");
8
8
  Object.defineProperty(exports, "P2PKH", { enumerable: true, get: function () { return __importDefault(P2PKH_js_1).default; } });
9
9
  var RPuzzle_js_1 = require("./RPuzzle.js");
10
10
  Object.defineProperty(exports, "RPuzzle", { enumerable: true, get: function () { return __importDefault(RPuzzle_js_1).default; } });
11
+ var PushDrop_js_1 = require("./PushDrop.js");
12
+ Object.defineProperty(exports, "PushDrop", { enumerable: true, get: function () { return __importDefault(PushDrop_js_1).default; } });
11
13
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/script/templates/index.ts"],"names":[],"mappings":";;;;;;AAAA,uCAA6C;AAApC,kHAAA,OAAO,OAAS;AACzB,2CAAiD;AAAxC,sHAAA,OAAO,OAAW"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/script/templates/index.ts"],"names":[],"mappings":";;;;;;AAAA,uCAA6C;AAApC,kHAAA,OAAO,OAAS;AACzB,2CAAiD;AAAxC,sHAAA,OAAO,OAAW;AAC3B,6CAAmD;AAA1C,wHAAA,OAAO,OAAY"}
@@ -16,7 +16,7 @@ function defaultHttpClient() {
16
16
  };
17
17
  if (typeof window !== 'undefined' && typeof window.fetch === 'function') {
18
18
  // Use fetch in a browser environment
19
- return new FetchHttpClient_js_1.FetchHttpClient(window.fetch);
19
+ return new FetchHttpClient_js_1.FetchHttpClient(window.fetch.bind(window));
20
20
  }
21
21
  else if (typeof require !== 'undefined') {
22
22
  // Use Node.js https module
@@ -1 +1 @@
1
- {"version":3,"file":"DefaultHttpClient.js","sourceRoot":"","sources":["../../../../../src/transaction/http/DefaultHttpClient.ts"],"names":[],"mappings":";;AASA,8CAsBC;AA9BD,+DAAwD;AACxD,6DAAsD;AAEtD;;;;GAIG;AACH,SAAgB,iBAAiB;IAC/B,MAAM,YAAY,GAAe;QAC/B,KAAK,CAAC,OAAO,CAAE,GAAG,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAA;QAChE,CAAC;KACF,CAAA;IAED,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;QACxE,qCAAqC;QACrC,OAAO,IAAI,oCAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAC1C,CAAC;SAAM,IAAI,OAAO,OAAO,KAAK,WAAW,EAAE,CAAC;QAC1C,2BAA2B;QAC3B,2BAA2B;QAC3B,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;YAC9B,OAAO,IAAI,sCAAgB,CAAC,KAAK,CAAC,CAAA;QACpC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,YAAY,CAAA;QACrB,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,YAAY,CAAA;IACrB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"DefaultHttpClient.js","sourceRoot":"","sources":["../../../../../src/transaction/http/DefaultHttpClient.ts"],"names":[],"mappings":";;AASA,8CAsBC;AA9BD,+DAAwD;AACxD,6DAAsD;AAEtD;;;;GAIG;AACH,SAAgB,iBAAiB;IAC/B,MAAM,YAAY,GAAe;QAC/B,KAAK,CAAC,OAAO,CAAE,GAAG,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAA;QAChE,CAAC;KACF,CAAA;IAED,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;QACxE,qCAAqC;QACrC,OAAO,IAAI,oCAAe,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;IACvD,CAAC;SAAM,IAAI,OAAO,OAAO,KAAK,WAAW,EAAE,CAAC;QAC1C,2BAA2B;QAC3B,2BAA2B;QAC3B,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;YAC9B,OAAO,IAAI,sCAAgB,CAAC,KAAK,CAAC,CAAA;QACpC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,YAAY,CAAA;QACrB,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,YAAY,CAAA;IACrB,CAAC;AACH,CAAC"}
@@ -0,0 +1,177 @@
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 index_js_1 = require("../primitives/index.js");
7
+ const KeyDeriver_js_1 = __importDefault(require("./KeyDeriver.js"));
8
+ /**
9
+ * A cached version of KeyDeriver that caches the results of key derivation methods.
10
+ * This is useful for optimizing performance when the same keys are derived multiple times.
11
+ * It supports configurable cache size with sane defaults and maintains cache entries using LRU (Least Recently Used) eviction policy.
12
+ */
13
+ class CachedKeyDeriver {
14
+ /**
15
+ * Initializes the CachedKeyDeriver instance with a root private key and optional cache settings.
16
+ * @param {PrivateKey | 'anyone'} rootKey - The root private key or the string 'anyone'.
17
+ * @param {Object} [options] - Optional settings for the cache.
18
+ * @param {number} [options.maxCacheSize=1000] - The maximum number of entries to store in the cache.
19
+ */
20
+ constructor(rootKey, options) {
21
+ this.keyDeriver = new KeyDeriver_js_1.default(rootKey);
22
+ this.cache = new Map();
23
+ this.maxCacheSize = (options === null || options === void 0 ? void 0 : options.maxCacheSize) || 1000;
24
+ }
25
+ /**
26
+ * Derives a public key based on protocol ID, key ID, and counterparty.
27
+ * Caches the result for future calls with the same parameters.
28
+ * @param {[0 | 1 | 2, string]} protocolID - The protocol ID including a security level and protocol name.
29
+ * @param {string} keyID - The key identifier.
30
+ * @param {PublicKey | string | 'self' | 'anyone'} counterparty - The counterparty's public key or a predefined value ('self' or 'anyone').
31
+ * @param {boolean} [forSelf=false] - Whether deriving for self.
32
+ * @returns {PublicKey} - The derived public key.
33
+ */
34
+ derivePublicKey(protocolID, keyID, counterparty, forSelf = false) {
35
+ const cacheKey = this.generateCacheKey('derivePublicKey', protocolID, keyID, counterparty, forSelf);
36
+ if (this.cache.has(cacheKey)) {
37
+ return this.cacheGet(cacheKey);
38
+ }
39
+ else {
40
+ const result = this.keyDeriver.derivePublicKey(protocolID, keyID, counterparty, forSelf);
41
+ this.cacheSet(cacheKey, result);
42
+ return result;
43
+ }
44
+ }
45
+ /**
46
+ * Derives a private key based on protocol ID, key ID, and counterparty.
47
+ * Caches the result for future calls with the same parameters.
48
+ * @param {[0 | 1 | 2, string]} protocolID - The protocol ID including a security level and protocol name.
49
+ * @param {string} keyID - The key identifier.
50
+ * @param {PublicKey | string | 'self' | 'anyone'} counterparty - The counterparty's public key or a predefined value ('self' or 'anyone').
51
+ * @returns {PrivateKey} - The derived private key.
52
+ */
53
+ derivePrivateKey(protocolID, keyID, counterparty) {
54
+ const cacheKey = this.generateCacheKey('derivePrivateKey', protocolID, keyID, counterparty);
55
+ if (this.cache.has(cacheKey)) {
56
+ return this.cacheGet(cacheKey);
57
+ }
58
+ else {
59
+ const result = this.keyDeriver.derivePrivateKey(protocolID, keyID, counterparty);
60
+ this.cacheSet(cacheKey, result);
61
+ return result;
62
+ }
63
+ }
64
+ /**
65
+ * Derives a symmetric key based on protocol ID, key ID, and counterparty.
66
+ * Caches the result for future calls with the same parameters.
67
+ * @param {[0 | 1 | 2, string]} protocolID - The protocol ID including a security level and protocol name.
68
+ * @param {string} keyID - The key identifier.
69
+ * @param {PublicKey | string | 'self' | 'anyone'} counterparty - The counterparty's public key or a predefined value ('self' or 'anyone').
70
+ * @returns {SymmetricKey} - The derived symmetric key.
71
+ * @throws {Error} - Throws an error if attempting to derive a symmetric key for 'anyone'.
72
+ */
73
+ deriveSymmetricKey(protocolID, keyID, counterparty) {
74
+ const cacheKey = this.generateCacheKey('deriveSymmetricKey', protocolID, keyID, counterparty);
75
+ if (this.cache.has(cacheKey)) {
76
+ return this.cacheGet(cacheKey);
77
+ }
78
+ else {
79
+ const result = this.keyDeriver.deriveSymmetricKey(protocolID, keyID, counterparty);
80
+ this.cacheSet(cacheKey, result);
81
+ return result;
82
+ }
83
+ }
84
+ /**
85
+ * Reveals the shared secret between the root key and the counterparty.
86
+ * Caches the result for future calls with the same parameters.
87
+ * @param {PublicKey | string | 'self' | 'anyone'} counterparty - The counterparty's public key or a predefined value ('self' or 'anyone').
88
+ * @returns {number[]} - The shared secret as a number array.
89
+ * @throws {Error} - Throws an error if attempting to reveal a shared secret for 'self'.
90
+ */
91
+ revealCounterpartySecret(counterparty) {
92
+ const cacheKey = this.generateCacheKey('revealCounterpartySecret', counterparty);
93
+ if (this.cache.has(cacheKey)) {
94
+ return this.cacheGet(cacheKey);
95
+ }
96
+ else {
97
+ const result = this.keyDeriver.revealCounterpartySecret(counterparty);
98
+ this.cacheSet(cacheKey, result);
99
+ return result;
100
+ }
101
+ }
102
+ /**
103
+ * Reveals the specific key association for a given protocol ID, key ID, and counterparty.
104
+ * Caches the result for future calls with the same parameters.
105
+ * @param {PublicKey | string | 'self' | 'anyone'} counterparty - The counterparty's public key or a predefined value ('self' or 'anyone').
106
+ * @param {[0 | 1 | 2, string]} protocolID - The protocol ID including a security level and protocol name.
107
+ * @param {string} keyID - The key identifier.
108
+ * @returns {number[]} - The specific key association as a number array.
109
+ */
110
+ revealSpecificSecret(counterparty, protocolID, keyID) {
111
+ const cacheKey = this.generateCacheKey('revealSpecificSecret', counterparty, protocolID, keyID);
112
+ if (this.cache.has(cacheKey)) {
113
+ return this.cacheGet(cacheKey);
114
+ }
115
+ else {
116
+ const result = this.keyDeriver.revealSpecificSecret(counterparty, protocolID, keyID);
117
+ this.cacheSet(cacheKey, result);
118
+ return result;
119
+ }
120
+ }
121
+ /**
122
+ * Generates a unique cache key based on the method name and input parameters.
123
+ * @param {string} methodName - The name of the method.
124
+ * @param {...any} args - The arguments passed to the method.
125
+ * @returns {string} - The generated cache key.
126
+ */
127
+ generateCacheKey(methodName, ...args) {
128
+ const serializedArgs = args.map((arg) => this.serializeArgument(arg)).join('|');
129
+ return `${methodName}|${serializedArgs}`;
130
+ }
131
+ /**
132
+ * Serializes an argument to a string for use in a cache key.
133
+ * @param {any} arg - The argument to serialize.
134
+ * @returns {string} - The serialized argument.
135
+ */
136
+ serializeArgument(arg) {
137
+ if (arg instanceof index_js_1.PublicKey || arg instanceof index_js_1.PrivateKey) {
138
+ return arg.toString();
139
+ }
140
+ else if (Array.isArray(arg)) {
141
+ return arg.map((item) => this.serializeArgument(item)).join(',');
142
+ }
143
+ else if (typeof arg === 'object' && arg !== null) {
144
+ return JSON.stringify(arg);
145
+ }
146
+ else {
147
+ return String(arg);
148
+ }
149
+ }
150
+ /**
151
+ * Retrieves an item from the cache and updates its position to reflect recent use.
152
+ * @param {string} cacheKey - The key of the cached item.
153
+ * @returns {any} - The cached value.
154
+ */
155
+ cacheGet(cacheKey) {
156
+ const value = this.cache.get(cacheKey);
157
+ // Update the entry to reflect recent use
158
+ this.cache.delete(cacheKey);
159
+ this.cache.set(cacheKey, value);
160
+ return value;
161
+ }
162
+ /**
163
+ * Adds an item to the cache and evicts the least recently used item if necessary.
164
+ * @param {string} cacheKey - The key of the item to cache.
165
+ * @param {any} value - The value to cache.
166
+ */
167
+ cacheSet(cacheKey, value) {
168
+ if (this.cache.size >= this.maxCacheSize) {
169
+ // Evict the least recently used item (first item in Map)
170
+ const firstKey = this.cache.keys().next().value;
171
+ this.cache.delete(firstKey);
172
+ }
173
+ this.cache.set(cacheKey, value);
174
+ }
175
+ }
176
+ exports.default = CachedKeyDeriver;
177
+ //# sourceMappingURL=CachedKeyDeriver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CachedKeyDeriver.js","sourceRoot":"","sources":["../../../../src/wallet/CachedKeyDeriver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,174 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const index_js_1 = require("../primitives/index.js");
4
+ /**
5
+ * Class responsible for deriving various types of keys using a root private key.
6
+ * It supports deriving public and private keys, symmetric keys, and revealing key linkages.
7
+ */
8
+ class KeyDeriver {
9
+ /**
10
+ * Initializes the KeyDeriver instance with a root private key.
11
+ * @param {PrivateKey | 'anyone'} rootKey - The root private key or the string 'anyone'.
12
+ */
13
+ constructor(rootKey) {
14
+ if (rootKey === 'anyone') {
15
+ this.rootKey = new index_js_1.PrivateKey(1);
16
+ }
17
+ else {
18
+ this.rootKey = rootKey;
19
+ }
20
+ }
21
+ /**
22
+ * Derives a public key based on protocol ID, key ID, and counterparty.
23
+ * @param {[0 | 1 | 2, string]} protocolID - The protocol ID including a security level and protocol name.
24
+ * @param {string} keyID - The key identifier.
25
+ * @param {PublicKey | string | 'self' | 'anyone'} counterparty - The counterparty's public key or a predefined value ('self' or 'anyone').
26
+ * @param {boolean} [forSelf=false] - Whether deriving for self.
27
+ * @returns {PublicKey} - The derived public key.
28
+ */
29
+ derivePublicKey(protocolID, keyID, counterparty, forSelf = false) {
30
+ counterparty = this.normalizeCounterparty(counterparty);
31
+ if (forSelf) {
32
+ return this.rootKey.deriveChild(counterparty, this.computeInvoiceNumber(protocolID, keyID)).toPublicKey();
33
+ }
34
+ else {
35
+ return counterparty.deriveChild(this.rootKey, this.computeInvoiceNumber(protocolID, keyID));
36
+ }
37
+ }
38
+ /**
39
+ * Derives a private key based on protocol ID, key ID, and counterparty.
40
+ * @param {[0 | 1 | 2, string]} protocolID - The protocol ID including a security level and protocol name.
41
+ * @param {string} keyID - The key identifier.
42
+ * @param {PublicKey | string | 'self' | 'anyone'} counterparty - The counterparty's public key or a predefined value ('self' or 'anyone').
43
+ * @returns {PrivateKey} - The derived private key.
44
+ */
45
+ derivePrivateKey(protocolID, keyID, counterparty) {
46
+ counterparty = this.normalizeCounterparty(counterparty);
47
+ return this.rootKey.deriveChild(counterparty, this.computeInvoiceNumber(protocolID, keyID));
48
+ }
49
+ /**
50
+ * Derives a symmetric key based on protocol ID, key ID, and counterparty.
51
+ * Note: Symmetric keys should not be derivable by everyone due to security risks.
52
+ * @param {[0 | 1 | 2, string]} protocolID - The protocol ID including a security level and protocol name.
53
+ * @param {string} keyID - The key identifier.
54
+ * @param {PublicKey | string | 'self' | 'anyone'} counterparty - The counterparty's public key or a predefined value ('self' or 'anyone').
55
+ * @returns {SymmetricKey} - The derived symmetric key.
56
+ * @throws {Error} - Throws an error if attempting to derive a symmetric key for 'anyone'.
57
+ */
58
+ deriveSymmetricKey(protocolID, keyID, counterparty) {
59
+ if (counterparty === 'anyone') {
60
+ throw new Error('Symmetric keys (such as encryption keys or HMAC keys) should not be derivable by everyone, because messages would be decryptable by anyone who knows the identity public key of the user, and HMACs would be similarly forgeable.');
61
+ }
62
+ counterparty = this.normalizeCounterparty(counterparty);
63
+ const derivedPublicKey = this.derivePublicKey(protocolID, keyID, counterparty);
64
+ const derivedPrivateKey = this.derivePrivateKey(protocolID, keyID, counterparty);
65
+ return new index_js_1.SymmetricKey(derivedPrivateKey.deriveSharedSecret(derivedPublicKey).x.toArray());
66
+ }
67
+ /**
68
+ * Reveals the shared secret between the root key and the counterparty.
69
+ * Note: This should not be used for 'self'.
70
+ * @param {PublicKey | string | 'self' | 'anyone'} counterparty - The counterparty's public key or a predefined value ('self' or 'anyone').
71
+ * @returns {number[]} - The shared secret as a number array.
72
+ * @throws {Error} - Throws an error if attempting to reveal a shared secret for 'self'.
73
+ */
74
+ revealCounterpartySecret(counterparty) {
75
+ if (counterparty === 'self') {
76
+ throw new Error('Counterparty secrets cannot be revealed for counterparty=self.');
77
+ }
78
+ counterparty = this.normalizeCounterparty(counterparty);
79
+ // Double-check to ensure not revealing the secret for 'self'
80
+ const self = this.rootKey.toPublicKey();
81
+ const keyDerivedBySelf = this.rootKey.deriveChild(self, 'test').toHex();
82
+ const keyDerivedByCounterparty = this.rootKey.deriveChild(counterparty, 'test').toHex();
83
+ if (keyDerivedBySelf === keyDerivedByCounterparty) {
84
+ throw new Error('Counterparty secrets cannot be revealed for counterparty=self.');
85
+ }
86
+ return this.rootKey.deriveSharedSecret(counterparty).encode(true);
87
+ }
88
+ /**
89
+ * Reveals the specific key association for a given protocol ID, key ID, and counterparty.
90
+ * @param {PublicKey | string | 'self' | 'anyone'} counterparty - The counterparty's public key or a predefined value ('self' or 'anyone').
91
+ * @param {[0 | 1 | 2, string]} protocolID - The protocol ID including a security level and protocol name.
92
+ * @param {string} keyID - The key identifier.
93
+ * @returns {number[]} - The specific key association as a number array.
94
+ */
95
+ revealSpecificSecret(counterparty, protocolID, keyID) {
96
+ counterparty = this.normalizeCounterparty(counterparty);
97
+ const sharedSecret = this.rootKey.deriveSharedSecret(counterparty);
98
+ const invoiceNumberBin = index_js_1.Utils.toArray(this.computeInvoiceNumber(protocolID, keyID), 'utf8');
99
+ return index_js_1.Hash.sha256hmac(sharedSecret.encode(true), invoiceNumberBin);
100
+ }
101
+ /**
102
+ * Normalizes the counterparty to a public key.
103
+ * @param {PublicKey | string | 'self' | 'anyone'} counterparty - The counterparty's public key or a predefined value ('self' or 'anyone').
104
+ * @returns {PublicKey} - The normalized counterparty public key.
105
+ * @throws {Error} - Throws an error if the counterparty is invalid.
106
+ */
107
+ normalizeCounterparty(counterparty) {
108
+ if (!counterparty) {
109
+ throw new Error('counterparty must be self, anyone or a public key!');
110
+ }
111
+ else if (counterparty === 'self') {
112
+ return this.rootKey.toPublicKey();
113
+ }
114
+ else if (counterparty === 'anyone') {
115
+ return new index_js_1.PrivateKey(1).toPublicKey();
116
+ }
117
+ else if (typeof counterparty === 'string') {
118
+ return index_js_1.PublicKey.fromString(counterparty);
119
+ }
120
+ else {
121
+ return counterparty;
122
+ }
123
+ }
124
+ /**
125
+ * Computes the invoice number based on the protocol ID and key ID.
126
+ * @param {[0 | 1 | 2, string]} protocolID - The protocol ID including a security level and protocol name.
127
+ * @param {string} keyID - The key identifier.
128
+ * @returns {string} - The computed invoice number.
129
+ * @throws {Error} - Throws an error if protocol ID or key ID are invalid.
130
+ */
131
+ computeInvoiceNumber(protocolID, keyID) {
132
+ const securityLevel = protocolID[0];
133
+ if (!Number.isInteger(securityLevel) || securityLevel < 0 || securityLevel > 2) {
134
+ throw new Error('Protocol security level must be 0, 1, or 2');
135
+ }
136
+ const protocolName = protocolID[1].toLowerCase().trim();
137
+ if (keyID.length > 800) {
138
+ throw new Error('Key IDs must be 800 characters or less');
139
+ }
140
+ if (keyID.length < 1) {
141
+ throw new Error('Key IDs must be 1 character or more');
142
+ }
143
+ if (protocolName.length > 400) {
144
+ // Specific linkage revelation is the only protocol ID that can contain another protocol ID.
145
+ // Therefore, we allow it to be long enough to encapsulate the target protocol
146
+ if (protocolName.startsWith('specific linkage revelation ')) {
147
+ // The format is: 'specific linkage revelation x YYYYY'
148
+ // Where: x is the security level and YYYYY is the target protocol
149
+ // Thus, the max acceptable length is 30 + 400 = 430 bytes
150
+ if (protocolName.length > 430) {
151
+ throw new Error('Specific linkage revelation protocol names must be 430 characters or less');
152
+ }
153
+ }
154
+ else {
155
+ throw new Error('Protocol names must be 400 characters or less');
156
+ }
157
+ }
158
+ if (protocolName.length < 5) {
159
+ throw new Error('Protocol names must be 5 characters or more');
160
+ }
161
+ if (protocolName.includes(' ')) {
162
+ throw new Error('Protocol names cannot contain multiple consecutive spaces (" ")');
163
+ }
164
+ if (!/^[a-z0-9 ]+$/g.test(protocolName)) {
165
+ throw new Error('Protocol names can only contain letters, numbers and spaces');
166
+ }
167
+ if (protocolName.endsWith(' protocol')) {
168
+ throw new Error('No need to end your protocol name with " protocol"');
169
+ }
170
+ return `${securityLevel}-${protocolName}-${keyID}`;
171
+ }
172
+ }
173
+ exports.default = KeyDeriver;
174
+ //# sourceMappingURL=KeyDeriver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KeyDeriver.js","sourceRoot":"","sources":["../../../../src/wallet/KeyDeriver.ts"],"names":[],"mappings":"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"}