@blockcast/mmt-container 0.1.0-main.149f78a4adae

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 (678) hide show
  1. package/README.md +432 -0
  2. package/dist/.build-stamp +0 -0
  3. package/dist/__tests__/test-utils.d.ts +71 -0
  4. package/dist/__tests__/test-utils.d.ts.map +1 -0
  5. package/dist/align.d.ts +148 -0
  6. package/dist/align.d.ts.map +1 -0
  7. package/dist/align.js +88 -0
  8. package/dist/align.js.map +7 -0
  9. package/dist/audio-init-parser.d.ts +66 -0
  10. package/dist/audio-init-parser.d.ts.map +1 -0
  11. package/dist/audio-init-parser.js +118 -0
  12. package/dist/audio-init-parser.js.map +7 -0
  13. package/dist/audio-ring-buffer.d.ts +50 -0
  14. package/dist/audio-ring-buffer.d.ts.map +1 -0
  15. package/dist/audio-ring-buffer.js +93 -0
  16. package/dist/audio-ring-buffer.js.map +7 -0
  17. package/dist/authored-timing.d.ts +32 -0
  18. package/dist/authored-timing.d.ts.map +1 -0
  19. package/dist/authored-timing.js +32 -0
  20. package/dist/authored-timing.js.map +7 -0
  21. package/dist/browser-runtime.js +17109 -0
  22. package/dist/browser-runtime.js.map +7 -0
  23. package/dist/carp-catalog.d.ts +318 -0
  24. package/dist/carp-catalog.d.ts.map +1 -0
  25. package/dist/carp-catalog.js +549 -0
  26. package/dist/carp-catalog.js.map +7 -0
  27. package/dist/catalog-fec-params.d.ts +82 -0
  28. package/dist/catalog-fec-params.d.ts.map +1 -0
  29. package/dist/catalog-fec-params.js +66 -0
  30. package/dist/catalog-fec-params.js.map +7 -0
  31. package/dist/catalog-network-source.d.ts +19 -0
  32. package/dist/catalog-network-source.d.ts.map +1 -0
  33. package/dist/catalog-network-source.js +22 -0
  34. package/dist/catalog-network-source.js.map +7 -0
  35. package/dist/catalog-validator.d.ts +18 -0
  36. package/dist/catalog-validator.d.ts.map +1 -0
  37. package/dist/catalog-validator.js +7747 -0
  38. package/dist/catalog-validator.js.map +7 -0
  39. package/dist/cmaf-block-assembler.d.ts +168 -0
  40. package/dist/cmaf-block-assembler.d.ts.map +1 -0
  41. package/dist/cmaf-block-assembler.js +1755 -0
  42. package/dist/cmaf-block-assembler.js.map +7 -0
  43. package/dist/cmaf-group-batcher.d.ts +38 -0
  44. package/dist/cmaf-group-batcher.d.ts.map +1 -0
  45. package/dist/cmaf-group-batcher.js +195 -0
  46. package/dist/cmaf-group-batcher.js.map +7 -0
  47. package/dist/cmcd-producer.d.ts +104 -0
  48. package/dist/cmcd-producer.d.ts.map +1 -0
  49. package/dist/cmcd-producer.js +207 -0
  50. package/dist/cmcd-producer.js.map +7 -0
  51. package/dist/codec-utils.d.ts +235 -0
  52. package/dist/codec-utils.d.ts.map +1 -0
  53. package/dist/codec-utils.js +1225 -0
  54. package/dist/codec-utils.js.map +7 -0
  55. package/dist/fec-codec.d.ts +32 -0
  56. package/dist/fec-codec.d.ts.map +1 -0
  57. package/dist/fec-codec.js +47 -0
  58. package/dist/fec-codec.js.map +7 -0
  59. package/dist/fec-manager.d.ts +266 -0
  60. package/dist/fec-manager.d.ts.map +1 -0
  61. package/dist/fec-manager.js +1447 -0
  62. package/dist/fec-manager.js.map +7 -0
  63. package/dist/fec-starvation-detector.d.ts +59 -0
  64. package/dist/fec-starvation-detector.d.ts.map +1 -0
  65. package/dist/fec-starvation-detector.js +75 -0
  66. package/dist/fec-starvation-detector.js.map +7 -0
  67. package/dist/fec-worker-setup.d.ts +76 -0
  68. package/dist/fec-worker-setup.d.ts.map +1 -0
  69. package/dist/fec-worker-setup.js +603 -0
  70. package/dist/fec-worker-setup.js.map +7 -0
  71. package/dist/fmp4-completion.d.ts +30 -0
  72. package/dist/fmp4-completion.d.ts.map +1 -0
  73. package/dist/fmp4-completion.js +21 -0
  74. package/dist/fmp4-completion.js.map +7 -0
  75. package/dist/fmp4-reader.d.ts +37 -0
  76. package/dist/fmp4-reader.d.ts.map +1 -0
  77. package/dist/fmp4-reader.js +100 -0
  78. package/dist/fmp4-reader.js.map +7 -0
  79. package/dist/index.d.ts +47 -0
  80. package/dist/index.d.ts.map +1 -0
  81. package/dist/index.js +330 -0
  82. package/dist/index.js.map +7 -0
  83. package/dist/iso-bmff-timing.d.ts +47 -0
  84. package/dist/iso-bmff-timing.d.ts.map +1 -0
  85. package/dist/iso-bmff-timing.js +526 -0
  86. package/dist/iso-bmff-timing.js.map +7 -0
  87. package/dist/loc.d.ts +68 -0
  88. package/dist/loc.d.ts.map +1 -0
  89. package/dist/loc.js +143 -0
  90. package/dist/loc.js.map +7 -0
  91. package/dist/manifest-auth-plan.d.ts +30 -0
  92. package/dist/manifest-auth-plan.d.ts.map +1 -0
  93. package/dist/manifest-auth-plan.js +1267 -0
  94. package/dist/manifest-auth-plan.js.map +7 -0
  95. package/dist/media-router.d.ts +338 -0
  96. package/dist/media-router.d.ts.map +1 -0
  97. package/dist/media-router.js +802 -0
  98. package/dist/media-router.js.map +7 -0
  99. package/dist/mfu-reassembler.d.ts +264 -0
  100. package/dist/mfu-reassembler.d.ts.map +1 -0
  101. package/dist/mfu-reassembler.js +2668 -0
  102. package/dist/mfu-reassembler.js.map +7 -0
  103. package/dist/mfu-reassembly-policy.d.ts +24 -0
  104. package/dist/mfu-reassembly-policy.d.ts.map +1 -0
  105. package/dist/mfu-reassembly-policy.js +99 -0
  106. package/dist/mfu-reassembly-policy.js.map +7 -0
  107. package/dist/mmtp-container-parser.d.ts +304 -0
  108. package/dist/mmtp-container-parser.d.ts.map +1 -0
  109. package/dist/mmtp-container-parser.js +5378 -0
  110. package/dist/mmtp-container-parser.js.map +7 -0
  111. package/dist/mmtp-container-parser.no-modules.js +7853 -0
  112. package/dist/mmtp-container-parser.no-modules.js.map +7 -0
  113. package/dist/mmtp-decode-pipeline.d.ts +96 -0
  114. package/dist/mmtp-decode-pipeline.d.ts.map +1 -0
  115. package/dist/mmtp-decode-pipeline.js +5589 -0
  116. package/dist/mmtp-decode-pipeline.js.map +7 -0
  117. package/dist/mmtp-router.d.ts +383 -0
  118. package/dist/mmtp-router.d.ts.map +1 -0
  119. package/dist/mmtp-router.js +8384 -0
  120. package/dist/mmtp-router.js.map +7 -0
  121. package/dist/mmtp-to-cmaf.d.ts +166 -0
  122. package/dist/mmtp-to-cmaf.d.ts.map +1 -0
  123. package/dist/mmtp-to-cmaf.js +781 -0
  124. package/dist/mmtp-to-cmaf.js.map +7 -0
  125. package/dist/multicast-auth-catalog.d.ts +115 -0
  126. package/dist/multicast-auth-catalog.d.ts.map +1 -0
  127. package/dist/multicast-auth-catalog.js +202 -0
  128. package/dist/multicast-auth-catalog.js.map +7 -0
  129. package/dist/multicast-input.d.ts +107 -0
  130. package/dist/multicast-input.d.ts.map +1 -0
  131. package/dist/multicast-input.js +256 -0
  132. package/dist/multicast-input.js.map +7 -0
  133. package/dist/multicast-manager.d.ts +330 -0
  134. package/dist/multicast-manager.d.ts.map +1 -0
  135. package/dist/multicast-manager.js +11032 -0
  136. package/dist/multicast-manager.js.map +7 -0
  137. package/dist/multicast-transport.d.ts +62 -0
  138. package/dist/multicast-transport.d.ts.map +1 -0
  139. package/dist/multicast-transport.js +338 -0
  140. package/dist/multicast-transport.js.map +7 -0
  141. package/dist/multicast-unwrap.d.ts +57 -0
  142. package/dist/multicast-unwrap.d.ts.map +1 -0
  143. package/dist/multicast-unwrap.js +384 -0
  144. package/dist/multicast-unwrap.js.map +7 -0
  145. package/dist/no-modules.d.ts +9 -0
  146. package/dist/no-modules.d.ts.map +1 -0
  147. package/dist/no-modules.js +7819 -0
  148. package/dist/no-modules.js.map +7 -0
  149. package/dist/phase14-catalog-override.d.ts +126 -0
  150. package/dist/phase14-catalog-override.d.ts.map +1 -0
  151. package/dist/phase14-catalog-override.js +155 -0
  152. package/dist/phase14-catalog-override.js.map +7 -0
  153. package/dist/repair-fetch.d.ts +58 -0
  154. package/dist/repair-fetch.d.ts.map +1 -0
  155. package/dist/repair-fetch.js +117 -0
  156. package/dist/repair-fetch.js.map +7 -0
  157. package/dist/sample-combiner.d.ts +182 -0
  158. package/dist/sample-combiner.d.ts.map +1 -0
  159. package/dist/sample-combiner.js +571 -0
  160. package/dist/sample-combiner.js.map +7 -0
  161. package/dist/signaling.d.ts +29 -0
  162. package/dist/signaling.d.ts.map +1 -0
  163. package/dist/signaling.js +232 -0
  164. package/dist/signaling.js.map +7 -0
  165. package/dist/source-auth.d.ts +2 -0
  166. package/dist/source-auth.d.ts.map +1 -0
  167. package/dist/source-auth.js +1220 -0
  168. package/dist/source-auth.js.map +7 -0
  169. package/dist/switching-set-alignment.d.ts +61 -0
  170. package/dist/switching-set-alignment.d.ts.map +1 -0
  171. package/dist/switching-set-alignment.js +85 -0
  172. package/dist/switching-set-alignment.js.map +7 -0
  173. package/dist/timestamp-codec.d.ts +34 -0
  174. package/dist/timestamp-codec.d.ts.map +1 -0
  175. package/dist/timestamp-codec.js +456 -0
  176. package/dist/timestamp-codec.js.map +7 -0
  177. package/dist/track-pipeline-setup.d.ts +72 -0
  178. package/dist/track-pipeline-setup.d.ts.map +1 -0
  179. package/dist/track-pipeline-setup.js +306 -0
  180. package/dist/track-pipeline-setup.js.map +7 -0
  181. package/dist/track-pipeline.d.ts +121 -0
  182. package/dist/track-pipeline.d.ts.map +1 -0
  183. package/dist/track-pipeline.js +229 -0
  184. package/dist/track-pipeline.js.map +7 -0
  185. package/dist/track-session.d.ts +269 -0
  186. package/dist/track-session.d.ts.map +1 -0
  187. package/dist/track-session.js +597 -0
  188. package/dist/track-session.js.map +7 -0
  189. package/dist/transport-pool.d.ts +69 -0
  190. package/dist/transport-pool.d.ts.map +1 -0
  191. package/dist/transport-pool.js +88 -0
  192. package/dist/transport-pool.js.map +7 -0
  193. package/dist/wasm-mfu-reassembler.d.ts +81 -0
  194. package/dist/wasm-mfu-reassembler.d.ts.map +1 -0
  195. package/dist/wasm-mfu-reassembler.js +1915 -0
  196. package/dist/wasm-mfu-reassembler.js.map +7 -0
  197. package/dist/wasm-mmtp-container-parser.d.ts +10 -0
  198. package/dist/wasm-mmtp-container-parser.d.ts.map +1 -0
  199. package/dist/wasm-mmtp-container-parser.js +5635 -0
  200. package/dist/wasm-mmtp-container-parser.js.map +7 -0
  201. package/node_modules/@blockcast/fec-worker/README.md +213 -0
  202. package/node_modules/@blockcast/fec-worker/dist/.build-stamp +0 -0
  203. package/node_modules/@blockcast/fec-worker/dist/fec-worker-client.d.ts +80 -0
  204. package/node_modules/@blockcast/fec-worker/dist/fec-worker-client.d.ts.map +1 -0
  205. package/node_modules/@blockcast/fec-worker/dist/fec-worker-client.js +270 -0
  206. package/node_modules/@blockcast/fec-worker/dist/fec-worker-client.js.map +1 -0
  207. package/node_modules/@blockcast/fec-worker/dist/fec-worker-types.d.ts +252 -0
  208. package/node_modules/@blockcast/fec-worker/dist/fec-worker-types.d.ts.map +1 -0
  209. package/node_modules/@blockcast/fec-worker/dist/fec-worker-types.js +11 -0
  210. package/node_modules/@blockcast/fec-worker/dist/fec-worker-types.js.map +1 -0
  211. package/node_modules/@blockcast/fec-worker/dist/fec-worker.d.ts +14 -0
  212. package/node_modules/@blockcast/fec-worker/dist/fec-worker.d.ts.map +1 -0
  213. package/node_modules/@blockcast/fec-worker/dist/fec-worker.js +565 -0
  214. package/node_modules/@blockcast/fec-worker/dist/fec-worker.js.map +7 -0
  215. package/node_modules/@blockcast/fec-worker/dist/index.d.ts +10 -0
  216. package/node_modules/@blockcast/fec-worker/dist/index.d.ts.map +1 -0
  217. package/node_modules/@blockcast/fec-worker/dist/index.js +8 -0
  218. package/node_modules/@blockcast/fec-worker/dist/index.js.map +1 -0
  219. package/node_modules/@blockcast/fec-worker/dist/shred-fec-worker.d.ts +20 -0
  220. package/node_modules/@blockcast/fec-worker/dist/shred-fec-worker.d.ts.map +1 -0
  221. package/node_modules/@blockcast/fec-worker/dist/shred-fec-worker.js +349 -0
  222. package/node_modules/@blockcast/fec-worker/dist/shred-fec-worker.js.map +7 -0
  223. package/node_modules/@blockcast/fec-worker/dist/shred-worker-client.d.ts +104 -0
  224. package/node_modules/@blockcast/fec-worker/dist/shred-worker-client.d.ts.map +1 -0
  225. package/node_modules/@blockcast/fec-worker/dist/shred-worker-client.js +181 -0
  226. package/node_modules/@blockcast/fec-worker/dist/shred-worker-client.js.map +1 -0
  227. package/node_modules/@blockcast/fec-worker/dist/shred-worker-types.d.ts +179 -0
  228. package/node_modules/@blockcast/fec-worker/dist/shred-worker-types.d.ts.map +1 -0
  229. package/node_modules/@blockcast/fec-worker/dist/shred-worker-types.js +47 -0
  230. package/node_modules/@blockcast/fec-worker/dist/shred-worker-types.js.map +1 -0
  231. package/node_modules/@blockcast/fec-worker/dist/transfer.d.ts +9 -0
  232. package/node_modules/@blockcast/fec-worker/dist/transfer.d.ts.map +1 -0
  233. package/node_modules/@blockcast/fec-worker/dist/transfer.js +13 -0
  234. package/node_modules/@blockcast/fec-worker/dist/transfer.js.map +1 -0
  235. package/node_modules/@blockcast/fec-worker/package.json +59 -0
  236. package/node_modules/@blockcast/fec-worker/src/fec-worker-client.ts +309 -0
  237. package/node_modules/@blockcast/fec-worker/src/fec-worker-types.ts +268 -0
  238. package/node_modules/@blockcast/fec-worker/src/fec-worker.ts +1048 -0
  239. package/node_modules/@blockcast/fec-worker/src/index.ts +32 -0
  240. package/node_modules/@blockcast/fec-worker/src/shred-fec-worker.ts +558 -0
  241. package/node_modules/@blockcast/fec-worker/src/shred-worker-client.ts +222 -0
  242. package/node_modules/@blockcast/fec-worker/src/shred-worker-types.ts +194 -0
  243. package/node_modules/@blockcast/fec-worker/src/transfer.ts +12 -0
  244. package/node_modules/@blockcast/mmt-alta-parse/README.md +181 -0
  245. package/node_modules/@blockcast/mmt-alta-parse/dist/.build-stamp +0 -0
  246. package/node_modules/@blockcast/mmt-alta-parse/dist/index.d.ts +57 -0
  247. package/node_modules/@blockcast/mmt-alta-parse/dist/index.d.ts.map +1 -0
  248. package/node_modules/@blockcast/mmt-alta-parse/dist/index.js +115 -0
  249. package/node_modules/@blockcast/mmt-alta-parse/dist/index.js.map +1 -0
  250. package/node_modules/@blockcast/mmt-alta-parse/package.json +50 -0
  251. package/node_modules/@blockcast/mmt-alta-parse/src/index.ts +136 -0
  252. package/node_modules/@blockcast/mmt-base/README.md +120 -0
  253. package/node_modules/@blockcast/mmt-base/dist/.build-stamp +0 -0
  254. package/node_modules/@blockcast/mmt-base/dist/index.d.ts +2 -0
  255. package/node_modules/@blockcast/mmt-base/dist/index.d.ts.map +1 -0
  256. package/node_modules/@blockcast/mmt-base/dist/index.js +2 -0
  257. package/node_modules/@blockcast/mmt-base/dist/index.js.map +1 -0
  258. package/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts +275 -0
  259. package/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts.map +1 -0
  260. package/node_modules/@blockcast/mmt-base/dist/mmtp.js +644 -0
  261. package/node_modules/@blockcast/mmt-base/dist/mmtp.js.map +1 -0
  262. package/node_modules/@blockcast/mmt-base/package.json +49 -0
  263. package/node_modules/@blockcast/mmt-base/src/index.ts +1 -0
  264. package/node_modules/@blockcast/mmt-base/src/mmtp.ts +898 -0
  265. package/node_modules/@blockcast/mmt-fec/README.md +270 -0
  266. package/node_modules/@blockcast/mmt-fec/dist/.build-stamp +0 -0
  267. package/node_modules/@blockcast/mmt-fec/dist/block-manager.d.ts +80 -0
  268. package/node_modules/@blockcast/mmt-fec/dist/block-manager.d.ts.map +1 -0
  269. package/node_modules/@blockcast/mmt-fec/dist/block-manager.js +294 -0
  270. package/node_modules/@blockcast/mmt-fec/dist/block-manager.js.map +1 -0
  271. package/node_modules/@blockcast/mmt-fec/dist/block-processor.d.ts +72 -0
  272. package/node_modules/@blockcast/mmt-fec/dist/block-processor.d.ts.map +1 -0
  273. package/node_modules/@blockcast/mmt-fec/dist/block-processor.js +192 -0
  274. package/node_modules/@blockcast/mmt-fec/dist/block-processor.js.map +1 -0
  275. package/node_modules/@blockcast/mmt-fec/dist/cmaf-recovery.d.ts +46 -0
  276. package/node_modules/@blockcast/mmt-fec/dist/cmaf-recovery.d.ts.map +1 -0
  277. package/node_modules/@blockcast/mmt-fec/dist/cmaf-recovery.js +96 -0
  278. package/node_modules/@blockcast/mmt-fec/dist/cmaf-recovery.js.map +1 -0
  279. package/node_modules/@blockcast/mmt-fec/dist/cmaf-symbols.d.ts +33 -0
  280. package/node_modules/@blockcast/mmt-fec/dist/cmaf-symbols.d.ts.map +1 -0
  281. package/node_modules/@blockcast/mmt-fec/dist/cmaf-symbols.js +57 -0
  282. package/node_modules/@blockcast/mmt-fec/dist/cmaf-symbols.js.map +1 -0
  283. package/node_modules/@blockcast/mmt-fec/dist/fec-block-mapper.d.ts +185 -0
  284. package/node_modules/@blockcast/mmt-fec/dist/fec-block-mapper.d.ts.map +1 -0
  285. package/node_modules/@blockcast/mmt-fec/dist/fec-block-mapper.js +273 -0
  286. package/node_modules/@blockcast/mmt-fec/dist/fec-block-mapper.js.map +1 -0
  287. package/node_modules/@blockcast/mmt-fec/dist/index.d.ts +22 -0
  288. package/node_modules/@blockcast/mmt-fec/dist/index.d.ts.map +1 -0
  289. package/node_modules/@blockcast/mmt-fec/dist/index.js +22 -0
  290. package/node_modules/@blockcast/mmt-fec/dist/index.js.map +1 -0
  291. package/node_modules/@blockcast/mmt-fec/dist/loc-symbols.d.ts +20 -0
  292. package/node_modules/@blockcast/mmt-fec/dist/loc-symbols.d.ts.map +1 -0
  293. package/node_modules/@blockcast/mmt-fec/dist/loc-symbols.js +28 -0
  294. package/node_modules/@blockcast/mmt-fec/dist/loc-symbols.js.map +1 -0
  295. package/node_modules/@blockcast/mmt-fec/dist/oti.d.ts +174 -0
  296. package/node_modules/@blockcast/mmt-fec/dist/oti.d.ts.map +1 -0
  297. package/node_modules/@blockcast/mmt-fec/dist/oti.js +256 -0
  298. package/node_modules/@blockcast/mmt-fec/dist/oti.js.map +1 -0
  299. package/node_modules/@blockcast/mmt-fec/dist/reorder-buffer.d.ts +41 -0
  300. package/node_modules/@blockcast/mmt-fec/dist/reorder-buffer.d.ts.map +1 -0
  301. package/node_modules/@blockcast/mmt-fec/dist/reorder-buffer.js +81 -0
  302. package/node_modules/@blockcast/mmt-fec/dist/reorder-buffer.js.map +1 -0
  303. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/README.md +181 -0
  304. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/.build-stamp +0 -0
  305. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/index.d.ts +57 -0
  306. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/index.d.ts.map +1 -0
  307. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/index.js +115 -0
  308. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/dist/index.js.map +1 -0
  309. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/package.json +50 -0
  310. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-alta-parse/src/index.ts +136 -0
  311. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/README.md +120 -0
  312. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/.build-stamp +0 -0
  313. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.d.ts +2 -0
  314. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.d.ts.map +1 -0
  315. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.js +2 -0
  316. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/index.js.map +1 -0
  317. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts +275 -0
  318. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/mmtp.d.ts.map +1 -0
  319. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/mmtp.js +644 -0
  320. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/dist/mmtp.js.map +1 -0
  321. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/package.json +49 -0
  322. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/index.ts +1 -0
  323. package/node_modules/@blockcast/mmt-fec/node_modules/@blockcast/mmt-base/src/mmtp.ts +898 -0
  324. package/node_modules/@blockcast/mmt-fec/package.json +79 -0
  325. package/node_modules/@blockcast/mmt-fec/src/block-manager.ts +369 -0
  326. package/node_modules/@blockcast/mmt-fec/src/block-processor.ts +277 -0
  327. package/node_modules/@blockcast/mmt-fec/src/cmaf-recovery.ts +127 -0
  328. package/node_modules/@blockcast/mmt-fec/src/cmaf-symbols.ts +68 -0
  329. package/node_modules/@blockcast/mmt-fec/src/fec-block-mapper.ts +332 -0
  330. package/node_modules/@blockcast/mmt-fec/src/index.ts +77 -0
  331. package/node_modules/@blockcast/mmt-fec/src/loc-symbols.ts +34 -0
  332. package/node_modules/@blockcast/mmt-fec/src/oti.ts +319 -0
  333. package/node_modules/@blockcast/mmt-fec/src/reorder-buffer.ts +101 -0
  334. package/node_modules/@blockcast/mmt-manifest-verify/dist/.build-stamp +0 -0
  335. package/node_modules/@blockcast/mmt-manifest-verify/dist/admission.d.ts +28 -0
  336. package/node_modules/@blockcast/mmt-manifest-verify/dist/admission.d.ts.map +1 -0
  337. package/node_modules/@blockcast/mmt-manifest-verify/dist/admission.js +128 -0
  338. package/node_modules/@blockcast/mmt-manifest-verify/dist/admission.js.map +1 -0
  339. package/node_modules/@blockcast/mmt-manifest-verify/dist/index.d.ts +4 -0
  340. package/node_modules/@blockcast/mmt-manifest-verify/dist/index.d.ts.map +1 -0
  341. package/node_modules/@blockcast/mmt-manifest-verify/dist/index.js +4 -0
  342. package/node_modules/@blockcast/mmt-manifest-verify/dist/index.js.map +1 -0
  343. package/node_modules/@blockcast/mmt-manifest-verify/dist/source-auth.d.ts +37 -0
  344. package/node_modules/@blockcast/mmt-manifest-verify/dist/source-auth.d.ts.map +1 -0
  345. package/node_modules/@blockcast/mmt-manifest-verify/dist/source-auth.js +179 -0
  346. package/node_modules/@blockcast/mmt-manifest-verify/dist/source-auth.js.map +1 -0
  347. package/node_modules/@blockcast/mmt-manifest-verify/dist/verifier.d.ts +90 -0
  348. package/node_modules/@blockcast/mmt-manifest-verify/dist/verifier.d.ts.map +1 -0
  349. package/node_modules/@blockcast/mmt-manifest-verify/dist/verifier.js +462 -0
  350. package/node_modules/@blockcast/mmt-manifest-verify/dist/verifier.js.map +1 -0
  351. package/node_modules/@blockcast/mmt-manifest-verify/package.json +45 -0
  352. package/node_modules/@blockcast/mmt-manifest-verify/src/admission.ts +171 -0
  353. package/node_modules/@blockcast/mmt-manifest-verify/src/index.ts +3 -0
  354. package/node_modules/@blockcast/mmt-manifest-verify/src/source-auth.ts +230 -0
  355. package/node_modules/@blockcast/mmt-manifest-verify/src/verifier.ts +636 -0
  356. package/node_modules/@noble/hashes/LICENSE +21 -0
  357. package/node_modules/@noble/hashes/README.md +521 -0
  358. package/node_modules/@noble/hashes/_assert.d.ts +17 -0
  359. package/node_modules/@noble/hashes/_assert.d.ts.map +1 -0
  360. package/node_modules/@noble/hashes/_assert.js +18 -0
  361. package/node_modules/@noble/hashes/_assert.js.map +1 -0
  362. package/node_modules/@noble/hashes/_blake.d.ts +14 -0
  363. package/node_modules/@noble/hashes/_blake.d.ts.map +1 -0
  364. package/node_modules/@noble/hashes/_blake.js +50 -0
  365. package/node_modules/@noble/hashes/_blake.js.map +1 -0
  366. package/node_modules/@noble/hashes/_md.d.ts +51 -0
  367. package/node_modules/@noble/hashes/_md.d.ts.map +1 -0
  368. package/node_modules/@noble/hashes/_md.js +162 -0
  369. package/node_modules/@noble/hashes/_md.js.map +1 -0
  370. package/node_modules/@noble/hashes/_u64.d.ts +55 -0
  371. package/node_modules/@noble/hashes/_u64.d.ts.map +1 -0
  372. package/node_modules/@noble/hashes/_u64.js +90 -0
  373. package/node_modules/@noble/hashes/_u64.js.map +1 -0
  374. package/node_modules/@noble/hashes/argon2.d.ts +32 -0
  375. package/node_modules/@noble/hashes/argon2.d.ts.map +1 -0
  376. package/node_modules/@noble/hashes/argon2.js +401 -0
  377. package/node_modules/@noble/hashes/argon2.js.map +1 -0
  378. package/node_modules/@noble/hashes/blake1.d.ts +106 -0
  379. package/node_modules/@noble/hashes/blake1.d.ts.map +1 -0
  380. package/node_modules/@noble/hashes/blake1.js +459 -0
  381. package/node_modules/@noble/hashes/blake1.js.map +1 -0
  382. package/node_modules/@noble/hashes/blake2.d.ts +116 -0
  383. package/node_modules/@noble/hashes/blake2.d.ts.map +1 -0
  384. package/node_modules/@noble/hashes/blake2.js +420 -0
  385. package/node_modules/@noble/hashes/blake2.js.map +1 -0
  386. package/node_modules/@noble/hashes/blake2b.d.ts +11 -0
  387. package/node_modules/@noble/hashes/blake2b.d.ts.map +1 -0
  388. package/node_modules/@noble/hashes/blake2b.js +14 -0
  389. package/node_modules/@noble/hashes/blake2b.js.map +1 -0
  390. package/node_modules/@noble/hashes/blake2s.d.ts +20 -0
  391. package/node_modules/@noble/hashes/blake2s.d.ts.map +1 -0
  392. package/node_modules/@noble/hashes/blake2s.js +24 -0
  393. package/node_modules/@noble/hashes/blake2s.js.map +1 -0
  394. package/node_modules/@noble/hashes/blake3.d.ts +54 -0
  395. package/node_modules/@noble/hashes/blake3.d.ts.map +1 -0
  396. package/node_modules/@noble/hashes/blake3.js +255 -0
  397. package/node_modules/@noble/hashes/blake3.js.map +1 -0
  398. package/node_modules/@noble/hashes/crypto.d.ts +2 -0
  399. package/node_modules/@noble/hashes/crypto.d.ts.map +1 -0
  400. package/node_modules/@noble/hashes/crypto.js +5 -0
  401. package/node_modules/@noble/hashes/crypto.js.map +1 -0
  402. package/node_modules/@noble/hashes/cryptoNode.d.ts +2 -0
  403. package/node_modules/@noble/hashes/cryptoNode.d.ts.map +1 -0
  404. package/node_modules/@noble/hashes/cryptoNode.js +18 -0
  405. package/node_modules/@noble/hashes/cryptoNode.js.map +1 -0
  406. package/node_modules/@noble/hashes/eskdf.d.ts +47 -0
  407. package/node_modules/@noble/hashes/eskdf.d.ts.map +1 -0
  408. package/node_modules/@noble/hashes/eskdf.js +166 -0
  409. package/node_modules/@noble/hashes/eskdf.js.map +1 -0
  410. package/node_modules/@noble/hashes/esm/_assert.d.ts +17 -0
  411. package/node_modules/@noble/hashes/esm/_assert.d.ts.map +1 -0
  412. package/node_modules/@noble/hashes/esm/_assert.js +15 -0
  413. package/node_modules/@noble/hashes/esm/_assert.js.map +1 -0
  414. package/node_modules/@noble/hashes/esm/_blake.d.ts +14 -0
  415. package/node_modules/@noble/hashes/esm/_blake.d.ts.map +1 -0
  416. package/node_modules/@noble/hashes/esm/_blake.js +45 -0
  417. package/node_modules/@noble/hashes/esm/_blake.js.map +1 -0
  418. package/node_modules/@noble/hashes/esm/_md.d.ts +51 -0
  419. package/node_modules/@noble/hashes/esm/_md.d.ts.map +1 -0
  420. package/node_modules/@noble/hashes/esm/_md.js +155 -0
  421. package/node_modules/@noble/hashes/esm/_md.js.map +1 -0
  422. package/node_modules/@noble/hashes/esm/_u64.d.ts +55 -0
  423. package/node_modules/@noble/hashes/esm/_u64.d.ts.map +1 -0
  424. package/node_modules/@noble/hashes/esm/_u64.js +67 -0
  425. package/node_modules/@noble/hashes/esm/_u64.js.map +1 -0
  426. package/node_modules/@noble/hashes/esm/argon2.d.ts +32 -0
  427. package/node_modules/@noble/hashes/esm/argon2.d.ts.map +1 -0
  428. package/node_modules/@noble/hashes/esm/argon2.js +392 -0
  429. package/node_modules/@noble/hashes/esm/argon2.js.map +1 -0
  430. package/node_modules/@noble/hashes/esm/blake1.d.ts +106 -0
  431. package/node_modules/@noble/hashes/esm/blake1.d.ts.map +1 -0
  432. package/node_modules/@noble/hashes/esm/blake1.js +452 -0
  433. package/node_modules/@noble/hashes/esm/blake1.js.map +1 -0
  434. package/node_modules/@noble/hashes/esm/blake2.d.ts +116 -0
  435. package/node_modules/@noble/hashes/esm/blake2.d.ts.map +1 -0
  436. package/node_modules/@noble/hashes/esm/blake2.js +413 -0
  437. package/node_modules/@noble/hashes/esm/blake2.js.map +1 -0
  438. package/node_modules/@noble/hashes/esm/blake2b.d.ts +11 -0
  439. package/node_modules/@noble/hashes/esm/blake2b.d.ts.map +1 -0
  440. package/node_modules/@noble/hashes/esm/blake2b.js +11 -0
  441. package/node_modules/@noble/hashes/esm/blake2b.js.map +1 -0
  442. package/node_modules/@noble/hashes/esm/blake2s.d.ts +20 -0
  443. package/node_modules/@noble/hashes/esm/blake2s.d.ts.map +1 -0
  444. package/node_modules/@noble/hashes/esm/blake2s.js +21 -0
  445. package/node_modules/@noble/hashes/esm/blake2s.js.map +1 -0
  446. package/node_modules/@noble/hashes/esm/blake3.d.ts +54 -0
  447. package/node_modules/@noble/hashes/esm/blake3.d.ts.map +1 -0
  448. package/node_modules/@noble/hashes/esm/blake3.js +251 -0
  449. package/node_modules/@noble/hashes/esm/blake3.js.map +1 -0
  450. package/node_modules/@noble/hashes/esm/crypto.d.ts +2 -0
  451. package/node_modules/@noble/hashes/esm/crypto.d.ts.map +1 -0
  452. package/node_modules/@noble/hashes/esm/crypto.js +2 -0
  453. package/node_modules/@noble/hashes/esm/crypto.js.map +1 -0
  454. package/node_modules/@noble/hashes/esm/cryptoNode.d.ts +2 -0
  455. package/node_modules/@noble/hashes/esm/cryptoNode.d.ts.map +1 -0
  456. package/node_modules/@noble/hashes/esm/cryptoNode.js +15 -0
  457. package/node_modules/@noble/hashes/esm/cryptoNode.js.map +1 -0
  458. package/node_modules/@noble/hashes/esm/eskdf.d.ts +47 -0
  459. package/node_modules/@noble/hashes/esm/eskdf.d.ts.map +1 -0
  460. package/node_modules/@noble/hashes/esm/eskdf.js +160 -0
  461. package/node_modules/@noble/hashes/esm/eskdf.js.map +1 -0
  462. package/node_modules/@noble/hashes/esm/hkdf.d.ts +36 -0
  463. package/node_modules/@noble/hashes/esm/hkdf.d.ts.map +1 -0
  464. package/node_modules/@noble/hashes/esm/hkdf.js +82 -0
  465. package/node_modules/@noble/hashes/esm/hkdf.js.map +1 -0
  466. package/node_modules/@noble/hashes/esm/hmac.d.ts +35 -0
  467. package/node_modules/@noble/hashes/esm/hmac.d.ts.map +1 -0
  468. package/node_modules/@noble/hashes/esm/hmac.js +86 -0
  469. package/node_modules/@noble/hashes/esm/hmac.js.map +1 -0
  470. package/node_modules/@noble/hashes/esm/index.d.ts +2 -0
  471. package/node_modules/@noble/hashes/esm/index.d.ts.map +1 -0
  472. package/node_modules/@noble/hashes/esm/index.js +33 -0
  473. package/node_modules/@noble/hashes/esm/index.js.map +1 -0
  474. package/node_modules/@noble/hashes/esm/legacy.d.ts +71 -0
  475. package/node_modules/@noble/hashes/esm/legacy.d.ts.map +1 -0
  476. package/node_modules/@noble/hashes/esm/legacy.js +281 -0
  477. package/node_modules/@noble/hashes/esm/legacy.js.map +1 -0
  478. package/node_modules/@noble/hashes/esm/package.json +10 -0
  479. package/node_modules/@noble/hashes/esm/pbkdf2.d.ts +23 -0
  480. package/node_modules/@noble/hashes/esm/pbkdf2.d.ts.map +1 -0
  481. package/node_modules/@noble/hashes/esm/pbkdf2.js +97 -0
  482. package/node_modules/@noble/hashes/esm/pbkdf2.js.map +1 -0
  483. package/node_modules/@noble/hashes/esm/ripemd160.d.ts +13 -0
  484. package/node_modules/@noble/hashes/esm/ripemd160.d.ts.map +1 -0
  485. package/node_modules/@noble/hashes/esm/ripemd160.js +13 -0
  486. package/node_modules/@noble/hashes/esm/ripemd160.js.map +1 -0
  487. package/node_modules/@noble/hashes/esm/scrypt.d.ts +34 -0
  488. package/node_modules/@noble/hashes/esm/scrypt.d.ts.map +1 -0
  489. package/node_modules/@noble/hashes/esm/scrypt.js +228 -0
  490. package/node_modules/@noble/hashes/esm/scrypt.js.map +1 -0
  491. package/node_modules/@noble/hashes/esm/sha1.d.ts +11 -0
  492. package/node_modules/@noble/hashes/esm/sha1.d.ts.map +1 -0
  493. package/node_modules/@noble/hashes/esm/sha1.js +11 -0
  494. package/node_modules/@noble/hashes/esm/sha1.js.map +1 -0
  495. package/node_modules/@noble/hashes/esm/sha2.d.ts +159 -0
  496. package/node_modules/@noble/hashes/esm/sha2.d.ts.map +1 -0
  497. package/node_modules/@noble/hashes/esm/sha2.js +375 -0
  498. package/node_modules/@noble/hashes/esm/sha2.js.map +1 -0
  499. package/node_modules/@noble/hashes/esm/sha256.d.ts +20 -0
  500. package/node_modules/@noble/hashes/esm/sha256.d.ts.map +1 -0
  501. package/node_modules/@noble/hashes/esm/sha256.js +20 -0
  502. package/node_modules/@noble/hashes/esm/sha256.js.map +1 -0
  503. package/node_modules/@noble/hashes/esm/sha3-addons.d.ts +142 -0
  504. package/node_modules/@noble/hashes/esm/sha3-addons.d.ts.map +1 -0
  505. package/node_modules/@noble/hashes/esm/sha3-addons.js +393 -0
  506. package/node_modules/@noble/hashes/esm/sha3-addons.js.map +1 -0
  507. package/node_modules/@noble/hashes/esm/sha3.d.ts +53 -0
  508. package/node_modules/@noble/hashes/esm/sha3.d.ts.map +1 -0
  509. package/node_modules/@noble/hashes/esm/sha3.js +234 -0
  510. package/node_modules/@noble/hashes/esm/sha3.js.map +1 -0
  511. package/node_modules/@noble/hashes/esm/sha512.d.ts +26 -0
  512. package/node_modules/@noble/hashes/esm/sha512.d.ts.map +1 -0
  513. package/node_modules/@noble/hashes/esm/sha512.js +26 -0
  514. package/node_modules/@noble/hashes/esm/sha512.js.map +1 -0
  515. package/node_modules/@noble/hashes/esm/utils.d.ts +161 -0
  516. package/node_modules/@noble/hashes/esm/utils.d.ts.map +1 -0
  517. package/node_modules/@noble/hashes/esm/utils.js +281 -0
  518. package/node_modules/@noble/hashes/esm/utils.js.map +1 -0
  519. package/node_modules/@noble/hashes/hkdf.d.ts +36 -0
  520. package/node_modules/@noble/hashes/hkdf.d.ts.map +1 -0
  521. package/node_modules/@noble/hashes/hkdf.js +88 -0
  522. package/node_modules/@noble/hashes/hkdf.js.map +1 -0
  523. package/node_modules/@noble/hashes/hmac.d.ts +35 -0
  524. package/node_modules/@noble/hashes/hmac.d.ts.map +1 -0
  525. package/node_modules/@noble/hashes/hmac.js +91 -0
  526. package/node_modules/@noble/hashes/hmac.js.map +1 -0
  527. package/node_modules/@noble/hashes/index.d.ts +1 -0
  528. package/node_modules/@noble/hashes/index.d.ts.map +1 -0
  529. package/node_modules/@noble/hashes/index.js +33 -0
  530. package/node_modules/@noble/hashes/index.js.map +1 -0
  531. package/node_modules/@noble/hashes/legacy.d.ts +71 -0
  532. package/node_modules/@noble/hashes/legacy.d.ts.map +1 -0
  533. package/node_modules/@noble/hashes/legacy.js +287 -0
  534. package/node_modules/@noble/hashes/legacy.js.map +1 -0
  535. package/node_modules/@noble/hashes/package.json +266 -0
  536. package/node_modules/@noble/hashes/pbkdf2.d.ts +23 -0
  537. package/node_modules/@noble/hashes/pbkdf2.d.ts.map +1 -0
  538. package/node_modules/@noble/hashes/pbkdf2.js +101 -0
  539. package/node_modules/@noble/hashes/pbkdf2.js.map +1 -0
  540. package/node_modules/@noble/hashes/ripemd160.d.ts +13 -0
  541. package/node_modules/@noble/hashes/ripemd160.d.ts.map +1 -0
  542. package/node_modules/@noble/hashes/ripemd160.js +16 -0
  543. package/node_modules/@noble/hashes/ripemd160.js.map +1 -0
  544. package/node_modules/@noble/hashes/scrypt.d.ts +34 -0
  545. package/node_modules/@noble/hashes/scrypt.d.ts.map +1 -0
  546. package/node_modules/@noble/hashes/scrypt.js +232 -0
  547. package/node_modules/@noble/hashes/scrypt.js.map +1 -0
  548. package/node_modules/@noble/hashes/sha1.d.ts +11 -0
  549. package/node_modules/@noble/hashes/sha1.d.ts.map +1 -0
  550. package/node_modules/@noble/hashes/sha1.js +14 -0
  551. package/node_modules/@noble/hashes/sha1.js.map +1 -0
  552. package/node_modules/@noble/hashes/sha2.d.ts +159 -0
  553. package/node_modules/@noble/hashes/sha2.d.ts.map +1 -0
  554. package/node_modules/@noble/hashes/sha2.js +384 -0
  555. package/node_modules/@noble/hashes/sha2.js.map +1 -0
  556. package/node_modules/@noble/hashes/sha256.d.ts +20 -0
  557. package/node_modules/@noble/hashes/sha256.d.ts.map +1 -0
  558. package/node_modules/@noble/hashes/sha256.js +23 -0
  559. package/node_modules/@noble/hashes/sha256.js.map +1 -0
  560. package/node_modules/@noble/hashes/sha3-addons.d.ts +142 -0
  561. package/node_modules/@noble/hashes/sha3-addons.d.ts.map +1 -0
  562. package/node_modules/@noble/hashes/sha3-addons.js +402 -0
  563. package/node_modules/@noble/hashes/sha3-addons.js.map +1 -0
  564. package/node_modules/@noble/hashes/sha3.d.ts +53 -0
  565. package/node_modules/@noble/hashes/sha3.d.ts.map +1 -0
  566. package/node_modules/@noble/hashes/sha3.js +239 -0
  567. package/node_modules/@noble/hashes/sha3.js.map +1 -0
  568. package/node_modules/@noble/hashes/sha512.d.ts +26 -0
  569. package/node_modules/@noble/hashes/sha512.d.ts.map +1 -0
  570. package/node_modules/@noble/hashes/sha512.js +29 -0
  571. package/node_modules/@noble/hashes/sha512.js.map +1 -0
  572. package/node_modules/@noble/hashes/src/_assert.ts +22 -0
  573. package/node_modules/@noble/hashes/src/_blake.ts +50 -0
  574. package/node_modules/@noble/hashes/src/_md.ts +176 -0
  575. package/node_modules/@noble/hashes/src/_u64.ts +91 -0
  576. package/node_modules/@noble/hashes/src/argon2.ts +497 -0
  577. package/node_modules/@noble/hashes/src/blake1.ts +534 -0
  578. package/node_modules/@noble/hashes/src/blake2.ts +486 -0
  579. package/node_modules/@noble/hashes/src/blake2b.ts +10 -0
  580. package/node_modules/@noble/hashes/src/blake2s.ts +20 -0
  581. package/node_modules/@noble/hashes/src/blake3.ts +272 -0
  582. package/node_modules/@noble/hashes/src/crypto.ts +9 -0
  583. package/node_modules/@noble/hashes/src/cryptoNode.ts +15 -0
  584. package/node_modules/@noble/hashes/src/eskdf.ts +187 -0
  585. package/node_modules/@noble/hashes/src/hkdf.ts +88 -0
  586. package/node_modules/@noble/hashes/src/hmac.ts +94 -0
  587. package/node_modules/@noble/hashes/src/index.ts +31 -0
  588. package/node_modules/@noble/hashes/src/legacy.ts +293 -0
  589. package/node_modules/@noble/hashes/src/pbkdf2.ts +122 -0
  590. package/node_modules/@noble/hashes/src/ripemd160.ts +12 -0
  591. package/node_modules/@noble/hashes/src/scrypt.ts +257 -0
  592. package/node_modules/@noble/hashes/src/sha1.ts +10 -0
  593. package/node_modules/@noble/hashes/src/sha2.ts +402 -0
  594. package/node_modules/@noble/hashes/src/sha256.ts +24 -0
  595. package/node_modules/@noble/hashes/src/sha3-addons.ts +499 -0
  596. package/node_modules/@noble/hashes/src/sha3.ts +258 -0
  597. package/node_modules/@noble/hashes/src/sha512.ts +34 -0
  598. package/node_modules/@noble/hashes/src/utils.ts +395 -0
  599. package/node_modules/@noble/hashes/utils.d.ts +161 -0
  600. package/node_modules/@noble/hashes/utils.d.ts.map +1 -0
  601. package/node_modules/@noble/hashes/utils.js +313 -0
  602. package/node_modules/@noble/hashes/utils.js.map +1 -0
  603. package/package.json +203 -0
  604. package/schemas/catalog.schema.json +283 -0
  605. package/src/align.ts +235 -0
  606. package/src/audio-init-parser.ts +189 -0
  607. package/src/audio-ring-buffer.ts +120 -0
  608. package/src/authored-timing.ts +63 -0
  609. package/src/carp-catalog.ts +776 -0
  610. package/src/catalog-fec-params.ts +167 -0
  611. package/src/catalog-network-source.ts +49 -0
  612. package/src/catalog-validator.ts +34 -0
  613. package/src/cmaf-block-assembler.ts +1058 -0
  614. package/src/cmaf-group-batcher.ts +104 -0
  615. package/src/cmcd-producer.ts +329 -0
  616. package/src/codec-utils.ts +1539 -0
  617. package/src/fec-codec.ts +61 -0
  618. package/src/fec-manager.ts +1939 -0
  619. package/src/fec-starvation-detector.ts +128 -0
  620. package/src/fec-worker-setup.ts +177 -0
  621. package/src/fmp4-completion.ts +47 -0
  622. package/src/fmp4-reader.ts +112 -0
  623. package/src/index.ts +443 -0
  624. package/src/iso-bmff-timing.ts +688 -0
  625. package/src/loc.ts +181 -0
  626. package/src/manifest-auth-plan.ts +107 -0
  627. package/src/media-router.ts +1185 -0
  628. package/src/mfu-reassembler.ts +2842 -0
  629. package/src/mfu-reassembly-policy.ts +134 -0
  630. package/src/mmtp-container-parser.ts +1498 -0
  631. package/src/mmtp-decode-pipeline.ts +315 -0
  632. package/src/mmtp-router.ts +3027 -0
  633. package/src/mmtp-to-cmaf.ts +956 -0
  634. package/src/multicast-auth-catalog.ts +340 -0
  635. package/src/multicast-input.ts +439 -0
  636. package/src/multicast-manager.ts +1503 -0
  637. package/src/multicast-transport.ts +320 -0
  638. package/src/multicast-unwrap.ts +132 -0
  639. package/src/no-modules.ts +20 -0
  640. package/src/phase14-catalog-override.ts +336 -0
  641. package/src/repair-fetch.ts +217 -0
  642. package/src/sample-combiner.ts +846 -0
  643. package/src/signaling.ts +78 -0
  644. package/src/source-auth.ts +1 -0
  645. package/src/switching-set-alignment.ts +109 -0
  646. package/src/timestamp-codec.ts +265 -0
  647. package/src/track-pipeline-setup.ts +189 -0
  648. package/src/track-pipeline.ts +332 -0
  649. package/src/track-session.ts +778 -0
  650. package/src/transport-pool.ts +128 -0
  651. package/src/wasm-mfu-reassembler.ts +372 -0
  652. package/src/wasm-mmtp-container-parser.ts +23 -0
  653. package/test-vectors/align.json +199 -0
  654. package/test-vectors/catalog/README.md +25 -0
  655. package/test-vectors/catalog/negative/legacy-selection-params.json +15 -0
  656. package/test-vectors/catalog/negative/missing-mmtp-fields.json +12 -0
  657. package/test-vectors/catalog/negative/multicast-auth-padded-key.json +37 -0
  658. package/test-vectors/catalog/negative/multicast-auth-reused-track-format.json +53 -0
  659. package/test-vectors/catalog/negative/multicast-auth-trailing-pad-bits.json +37 -0
  660. package/test-vectors/catalog/negative/multicast-endpoint-missing-protocol-and-source.json +24 -0
  661. package/test-vectors/catalog/negative/network-source-object.json +25 -0
  662. package/test-vectors/catalog/negative/raptorq-unaligned-symbol.json +26 -0
  663. package/test-vectors/catalog/negative/repair-track-legacy-shape.json +18 -0
  664. package/test-vectors/catalog/negative/track-role-empty.json +16 -0
  665. package/test-vectors/catalog/negative/track-role-non-string.json +16 -0
  666. package/test-vectors/catalog/positive/fec-multicast.json +51 -0
  667. package/test-vectors/catalog/positive/flat-av.json +30 -0
  668. package/test-vectors/catalog/positive/multicast-auth-rotation.json +55 -0
  669. package/test-vectors/catalog/positive/ticks-and-mixed-timescales.json +39 -0
  670. package/test-vectors/catalog/positive/track-role.json +49 -0
  671. package/test-vectors/catalog/releases/moqcast-native-v16-v1/catalog.json +65 -0
  672. package/test-vectors/catalog/releases/moqcast-native-v16-v1.archive.sha256 +1 -0
  673. package/test-vectors/catalog-multicast-auth-v1.json +26 -0
  674. package/test-vectors/catalog-validation.json +148 -0
  675. package/test-vectors/catalog-validator-public-api.mjs +25 -0
  676. package/test-vectors/generate-source-auth-fixture.mjs +114 -0
  677. package/test-vectors/source-auth-v1.json +61 -0
  678. package/test-vectors/subsample-placement-v1.json +230 -0
@@ -0,0 +1,272 @@
1
+ /**
2
+ * Blake3 fast hash is Blake2 with reduced security (round count). Can also be used as MAC & KDF.
3
+ *
4
+ * It is advertised as "the fastest cryptographic hash". However, it isn't true in JS.
5
+ * Why is this so slow? While it should be 6x faster than blake2b, perf diff is only 20%:
6
+ *
7
+ * * There is only 30% reduction in number of rounds from blake2s
8
+ * * Speed-up comes from tree structure, which is parallelized using SIMD & threading.
9
+ * These features are not present in JS, so we only get overhead from trees.
10
+ * * Parallelization only happens on 1024-byte chunks: there is no benefit for small inputs.
11
+ * * It is still possible to make it faster using: a) loop unrolling b) web workers c) wasm
12
+ * @module
13
+ */
14
+ import { SHA256_IV } from './_md.ts';
15
+ import { fromBig } from './_u64.ts';
16
+ import { BLAKE2, compress } from './blake2.ts';
17
+ // prettier-ignore
18
+ import {
19
+ abytes, aexists, anumber, aoutput,
20
+ clean, createXOFer, swap32IfBE, toBytes, u32, u8,
21
+ type CHashXO, type HashXOF, type Input
22
+ } from './utils.ts';
23
+
24
+ // Flag bitset
25
+ const B3_Flags = {
26
+ CHUNK_START: 0b1,
27
+ CHUNK_END: 0b10,
28
+ PARENT: 0b100,
29
+ ROOT: 0b1000,
30
+ KEYED_HASH: 0b10000,
31
+ DERIVE_KEY_CONTEXT: 0b100000,
32
+ DERIVE_KEY_MATERIAL: 0b1000000,
33
+ } as const;
34
+
35
+ const B3_IV = SHA256_IV.slice();
36
+
37
+ const B3_SIGMA: Uint8Array = /* @__PURE__ */ (() => {
38
+ const Id = Array.from({ length: 16 }, (_, i) => i);
39
+ const permute = (arr: number[]) =>
40
+ [2, 6, 3, 10, 7, 0, 4, 13, 1, 11, 12, 5, 9, 14, 15, 8].map((i) => arr[i]);
41
+ const res: number[] = [];
42
+ for (let i = 0, v = Id; i < 7; i++, v = permute(v)) res.push(...v);
43
+ return Uint8Array.from(res);
44
+ })();
45
+
46
+ /**
47
+ * Ensure to use EITHER `key` OR `context`, not both.
48
+ *
49
+ * * `key`: 32-byte MAC key.
50
+ * * `context`: string for KDF. Should be hardcoded, globally unique, and application - specific.
51
+ * A good default format for the context string is "[application] [commit timestamp] [purpose]".
52
+ */
53
+ export type Blake3Opts = { dkLen?: number; key?: Input; context?: Input };
54
+
55
+ /** Blake3 hash. Can be used as MAC and KDF. */
56
+ export class BLAKE3 extends BLAKE2<BLAKE3> implements HashXOF<BLAKE3> {
57
+ private chunkPos = 0; // Position of current block in chunk
58
+ private chunksDone = 0; // How many chunks we already have
59
+ private flags = 0 | 0;
60
+ private IV: Uint32Array;
61
+ private state: Uint32Array;
62
+ private stack: Uint32Array[] = [];
63
+ // Output
64
+ private posOut = 0;
65
+ private bufferOut32 = new Uint32Array(16);
66
+ private bufferOut: Uint8Array;
67
+ private chunkOut = 0; // index of output chunk
68
+ private enableXOF = true;
69
+
70
+ constructor(opts: Blake3Opts = {}, flags = 0) {
71
+ super(64, opts.dkLen === undefined ? 32 : opts.dkLen);
72
+ const { key, context } = opts;
73
+ const hasContext = context !== undefined;
74
+ if (key !== undefined) {
75
+ if (hasContext) throw new Error('Only "key" or "context" can be specified at same time');
76
+ const k = toBytes(key).slice();
77
+ abytes(k, 32);
78
+ this.IV = u32(k);
79
+ swap32IfBE(this.IV);
80
+ this.flags = flags | B3_Flags.KEYED_HASH;
81
+ } else if (hasContext) {
82
+ const ctx = toBytes(context);
83
+ const contextKey = new BLAKE3({ dkLen: 32 }, B3_Flags.DERIVE_KEY_CONTEXT)
84
+ .update(ctx)
85
+ .digest();
86
+ this.IV = u32(contextKey);
87
+ swap32IfBE(this.IV);
88
+ this.flags = flags | B3_Flags.DERIVE_KEY_MATERIAL;
89
+ } else {
90
+ this.IV = B3_IV.slice();
91
+ this.flags = flags;
92
+ }
93
+ this.state = this.IV.slice();
94
+ this.bufferOut = u8(this.bufferOut32);
95
+ }
96
+ // Unused
97
+ protected get(): [] {
98
+ return [];
99
+ }
100
+ protected set(): void {}
101
+ private b2Compress(counter: number, flags: number, buf: Uint32Array, bufPos: number = 0) {
102
+ const { state: s, pos } = this;
103
+ const { h, l } = fromBig(BigInt(counter), true);
104
+ // prettier-ignore
105
+ const { v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15 } =
106
+ compress(
107
+ B3_SIGMA, bufPos, buf, 7,
108
+ s[0], s[1], s[2], s[3], s[4], s[5], s[6], s[7],
109
+ B3_IV[0], B3_IV[1], B3_IV[2], B3_IV[3], h, l, pos, flags
110
+ );
111
+ s[0] = v0 ^ v8;
112
+ s[1] = v1 ^ v9;
113
+ s[2] = v2 ^ v10;
114
+ s[3] = v3 ^ v11;
115
+ s[4] = v4 ^ v12;
116
+ s[5] = v5 ^ v13;
117
+ s[6] = v6 ^ v14;
118
+ s[7] = v7 ^ v15;
119
+ }
120
+ protected compress(buf: Uint32Array, bufPos: number = 0, isLast: boolean = false): void {
121
+ // Compress last block
122
+ let flags = this.flags;
123
+ if (!this.chunkPos) flags |= B3_Flags.CHUNK_START;
124
+ if (this.chunkPos === 15 || isLast) flags |= B3_Flags.CHUNK_END;
125
+ if (!isLast) this.pos = this.blockLen;
126
+ this.b2Compress(this.chunksDone, flags, buf, bufPos);
127
+ this.chunkPos += 1;
128
+ // If current block is last in chunk (16 blocks), then compress chunks
129
+ if (this.chunkPos === 16 || isLast) {
130
+ let chunk = this.state;
131
+ this.state = this.IV.slice();
132
+ // If not the last one, compress only when there are trailing zeros in chunk counter
133
+ // chunks used as binary tree where current stack is path. Zero means current leaf is finished and can be compressed.
134
+ // 1 (001) - leaf not finished (just push current chunk to stack)
135
+ // 2 (010) - leaf finished at depth=1 (merge with last elm on stack and push back)
136
+ // 3 (011) - last leaf not finished
137
+ // 4 (100) - leafs finished at depth=1 and depth=2
138
+ for (let last, chunks = this.chunksDone + 1; isLast || !(chunks & 1); chunks >>= 1) {
139
+ if (!(last = this.stack.pop())) break;
140
+ this.buffer32.set(last, 0);
141
+ this.buffer32.set(chunk, 8);
142
+ this.pos = this.blockLen;
143
+ this.b2Compress(0, this.flags | B3_Flags.PARENT, this.buffer32, 0);
144
+ chunk = this.state;
145
+ this.state = this.IV.slice();
146
+ }
147
+ this.chunksDone++;
148
+ this.chunkPos = 0;
149
+ this.stack.push(chunk);
150
+ }
151
+ this.pos = 0;
152
+ }
153
+ _cloneInto(to?: BLAKE3): BLAKE3 {
154
+ to = super._cloneInto(to) as BLAKE3;
155
+ const { IV, flags, state, chunkPos, posOut, chunkOut, stack, chunksDone } = this;
156
+ to.state.set(state.slice());
157
+ to.stack = stack.map((i) => Uint32Array.from(i));
158
+ to.IV.set(IV);
159
+ to.flags = flags;
160
+ to.chunkPos = chunkPos;
161
+ to.chunksDone = chunksDone;
162
+ to.posOut = posOut;
163
+ to.chunkOut = chunkOut;
164
+ to.enableXOF = this.enableXOF;
165
+ to.bufferOut32.set(this.bufferOut32);
166
+ return to;
167
+ }
168
+ destroy(): void {
169
+ this.destroyed = true;
170
+ clean(this.state, this.buffer32, this.IV, this.bufferOut32);
171
+ clean(...this.stack);
172
+ }
173
+ // Same as b2Compress, but doesn't modify state and returns 16 u32 array (instead of 8)
174
+ private b2CompressOut() {
175
+ const { state: s, pos, flags, buffer32, bufferOut32: out32 } = this;
176
+ const { h, l } = fromBig(BigInt(this.chunkOut++));
177
+ swap32IfBE(buffer32);
178
+ // prettier-ignore
179
+ const { v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15 } =
180
+ compress(
181
+ B3_SIGMA, 0, buffer32, 7,
182
+ s[0], s[1], s[2], s[3], s[4], s[5], s[6], s[7],
183
+ B3_IV[0], B3_IV[1], B3_IV[2], B3_IV[3], l, h, pos, flags
184
+ );
185
+ out32[0] = v0 ^ v8;
186
+ out32[1] = v1 ^ v9;
187
+ out32[2] = v2 ^ v10;
188
+ out32[3] = v3 ^ v11;
189
+ out32[4] = v4 ^ v12;
190
+ out32[5] = v5 ^ v13;
191
+ out32[6] = v6 ^ v14;
192
+ out32[7] = v7 ^ v15;
193
+ out32[8] = s[0] ^ v8;
194
+ out32[9] = s[1] ^ v9;
195
+ out32[10] = s[2] ^ v10;
196
+ out32[11] = s[3] ^ v11;
197
+ out32[12] = s[4] ^ v12;
198
+ out32[13] = s[5] ^ v13;
199
+ out32[14] = s[6] ^ v14;
200
+ out32[15] = s[7] ^ v15;
201
+ swap32IfBE(buffer32);
202
+ swap32IfBE(out32);
203
+ this.posOut = 0;
204
+ }
205
+ protected finish(): void {
206
+ if (this.finished) return;
207
+ this.finished = true;
208
+ // Padding
209
+ clean(this.buffer.subarray(this.pos));
210
+ // Process last chunk
211
+ let flags = this.flags | B3_Flags.ROOT;
212
+ if (this.stack.length) {
213
+ flags |= B3_Flags.PARENT;
214
+ swap32IfBE(this.buffer32);
215
+ this.compress(this.buffer32, 0, true);
216
+ swap32IfBE(this.buffer32);
217
+ this.chunksDone = 0;
218
+ this.pos = this.blockLen;
219
+ } else {
220
+ flags |= (!this.chunkPos ? B3_Flags.CHUNK_START : 0) | B3_Flags.CHUNK_END;
221
+ }
222
+ this.flags = flags;
223
+ this.b2CompressOut();
224
+ }
225
+ private writeInto(out: Uint8Array) {
226
+ aexists(this, false);
227
+ abytes(out);
228
+ this.finish();
229
+ const { blockLen, bufferOut } = this;
230
+ for (let pos = 0, len = out.length; pos < len; ) {
231
+ if (this.posOut >= blockLen) this.b2CompressOut();
232
+ const take = Math.min(blockLen - this.posOut, len - pos);
233
+ out.set(bufferOut.subarray(this.posOut, this.posOut + take), pos);
234
+ this.posOut += take;
235
+ pos += take;
236
+ }
237
+ return out;
238
+ }
239
+ xofInto(out: Uint8Array): Uint8Array {
240
+ if (!this.enableXOF) throw new Error('XOF is not possible after digest call');
241
+ return this.writeInto(out);
242
+ }
243
+ xof(bytes: number): Uint8Array {
244
+ anumber(bytes);
245
+ return this.xofInto(new Uint8Array(bytes));
246
+ }
247
+ digestInto(out: Uint8Array): Uint8Array {
248
+ aoutput(out, this);
249
+ if (this.finished) throw new Error('digest() was already called');
250
+ this.enableXOF = false;
251
+ this.writeInto(out);
252
+ this.destroy();
253
+ return out;
254
+ }
255
+ digest(): Uint8Array {
256
+ return this.digestInto(new Uint8Array(this.outputLen));
257
+ }
258
+ }
259
+
260
+ /**
261
+ * BLAKE3 hash function. Can be used as MAC and KDF.
262
+ * @param msg - message that would be hashed
263
+ * @param opts - `dkLen` for output length, `key` for MAC mode, `context` for KDF mode
264
+ * @example
265
+ * const data = new Uint8Array(32);
266
+ * const hash = blake3(data);
267
+ * const mac = blake3(data, { key: new Uint8Array(32) });
268
+ * const kdf = blake3(data, { context: 'application name' });
269
+ */
270
+ export const blake3: CHashXO = /* @__PURE__ */ createXOFer<BLAKE3, Blake3Opts>(
271
+ (opts) => new BLAKE3(opts)
272
+ );
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Internal webcrypto alias.
3
+ * We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.
4
+ * See utils.ts for details.
5
+ * @module
6
+ */
7
+ declare const globalThis: Record<string, any> | undefined;
8
+ export const crypto: any =
9
+ typeof globalThis === 'object' && 'crypto' in globalThis ? globalThis.crypto : undefined;
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Internal webcrypto alias.
3
+ * We prefer WebCrypto aka globalThis.crypto, which exists in node.js 16+.
4
+ * Falls back to Node.js built-in crypto for Node.js <=v14.
5
+ * See utils.ts for details.
6
+ * @module
7
+ */
8
+ // @ts-ignore
9
+ import * as nc from 'node:crypto';
10
+ export const crypto: any =
11
+ nc && typeof nc === 'object' && 'webcrypto' in nc
12
+ ? (nc.webcrypto as any)
13
+ : nc && typeof nc === 'object' && 'randomBytes' in nc
14
+ ? nc
15
+ : undefined;
@@ -0,0 +1,187 @@
1
+ /**
2
+ * Experimental KDF for AES.
3
+ */
4
+ import { hkdf } from './hkdf.ts';
5
+ import { pbkdf2 as _pbkdf2 } from './pbkdf2.ts';
6
+ import { scrypt as _scrypt } from './scrypt.ts';
7
+ import { sha256 } from './sha256.ts';
8
+ import { abytes, bytesToHex, clean, createView, hexToBytes, kdfInputToBytes } from './utils.ts';
9
+
10
+ // A tiny KDF for various applications like AES key-gen.
11
+ // Uses HKDF in a non-standard way, so it's not "KDF-secure", only "PRF-secure".
12
+ // Which is good enough: assume sha2-256 retained preimage resistance.
13
+
14
+ const SCRYPT_FACTOR = 2 ** 19;
15
+ const PBKDF2_FACTOR = 2 ** 17;
16
+
17
+ // Scrypt KDF
18
+ export function scrypt(password: string, salt: string): Uint8Array {
19
+ return _scrypt(password, salt, { N: SCRYPT_FACTOR, r: 8, p: 1, dkLen: 32 });
20
+ }
21
+
22
+ // PBKDF2-HMAC-SHA256
23
+ export function pbkdf2(password: string, salt: string): Uint8Array {
24
+ return _pbkdf2(sha256, password, salt, { c: PBKDF2_FACTOR, dkLen: 32 });
25
+ }
26
+
27
+ // Combines two 32-byte byte arrays
28
+ function xor32(a: Uint8Array, b: Uint8Array): Uint8Array {
29
+ abytes(a, 32);
30
+ abytes(b, 32);
31
+ const arr = new Uint8Array(32);
32
+ for (let i = 0; i < 32; i++) {
33
+ arr[i] = a[i] ^ b[i];
34
+ }
35
+ return arr;
36
+ }
37
+
38
+ function strHasLength(str: string, min: number, max: number): boolean {
39
+ return typeof str === 'string' && str.length >= min && str.length <= max;
40
+ }
41
+
42
+ /**
43
+ * Derives main seed. Takes a lot of time. Prefer `eskdf` method instead.
44
+ */
45
+ export function deriveMainSeed(username: string, password: string): Uint8Array {
46
+ if (!strHasLength(username, 8, 255)) throw new Error('invalid username');
47
+ if (!strHasLength(password, 8, 255)) throw new Error('invalid password');
48
+ // Declared like this to throw off minifiers which auto-convert .fromCharCode(1) to actual string.
49
+ // String with non-ascii may be problematic in some envs
50
+ const codes = { _1: 1, _2: 2 };
51
+ const sep = { s: String.fromCharCode(codes._1), p: String.fromCharCode(codes._2) };
52
+ const scr = scrypt(password + sep.s, username + sep.s);
53
+ const pbk = pbkdf2(password + sep.p, username + sep.p);
54
+ const res = xor32(scr, pbk);
55
+ clean(scr, pbk);
56
+ return res;
57
+ }
58
+
59
+ type AccountID = number | string;
60
+
61
+ /**
62
+ * Converts protocol & accountId pair to HKDF salt & info params.
63
+ */
64
+ function getSaltInfo(protocol: string, accountId: AccountID = 0) {
65
+ // Note that length here also repeats two lines below
66
+ // We do an additional length check here to reduce the scope of DoS attacks
67
+ if (!(strHasLength(protocol, 3, 15) && /^[a-z0-9]{3,15}$/.test(protocol))) {
68
+ throw new Error('invalid protocol');
69
+ }
70
+
71
+ // Allow string account ids for some protocols
72
+ const allowsStr = /^password\d{0,3}|ssh|tor|file$/.test(protocol);
73
+ let salt: Uint8Array; // Extract salt. Default is undefined.
74
+ if (typeof accountId === 'string') {
75
+ if (!allowsStr) throw new Error('accountId must be a number');
76
+ if (!strHasLength(accountId, 1, 255))
77
+ throw new Error('accountId must be string of length 1..255');
78
+ salt = kdfInputToBytes(accountId);
79
+ } else if (Number.isSafeInteger(accountId)) {
80
+ if (accountId < 0 || accountId > Math.pow(2, 32) - 1) throw new Error('invalid accountId');
81
+ // Convert to Big Endian Uint32
82
+ salt = new Uint8Array(4);
83
+ createView(salt).setUint32(0, accountId, false);
84
+ } else {
85
+ throw new Error('accountId must be a number' + (allowsStr ? ' or string' : ''));
86
+ }
87
+ const info = kdfInputToBytes(protocol);
88
+ return { salt, info };
89
+ }
90
+
91
+ type OptsLength = { keyLength: number };
92
+ type OptsMod = { modulus: bigint };
93
+ type KeyOpts = undefined | OptsLength | OptsMod;
94
+
95
+ function countBytes(num: bigint): number {
96
+ if (typeof num !== 'bigint' || num <= BigInt(128)) throw new Error('invalid number');
97
+ return Math.ceil(num.toString(2).length / 8);
98
+ }
99
+
100
+ /**
101
+ * Parses keyLength and modulus options to extract length of result key.
102
+ * If modulus is used, adds 64 bits to it as per FIPS 186 B.4.1 to combat modulo bias.
103
+ */
104
+ function getKeyLength(options: KeyOpts): number {
105
+ if (!options || typeof options !== 'object') return 32;
106
+ const hasLen = 'keyLength' in options;
107
+ const hasMod = 'modulus' in options;
108
+ if (hasLen && hasMod) throw new Error('cannot combine keyLength and modulus options');
109
+ if (!hasLen && !hasMod) throw new Error('must have either keyLength or modulus option');
110
+ // FIPS 186 B.4.1 requires at least 64 more bits
111
+ const l = hasMod ? countBytes(options.modulus) + 8 : options.keyLength;
112
+ if (!(typeof l === 'number' && l >= 16 && l <= 8192)) throw new Error('invalid keyLength');
113
+ return l;
114
+ }
115
+
116
+ /**
117
+ * Converts key to bigint and divides it by modulus. Big Endian.
118
+ * Implements FIPS 186 B.4.1, which removes 0 and modulo bias from output.
119
+ */
120
+ function modReduceKey(key: Uint8Array, modulus: bigint): Uint8Array {
121
+ const _1 = BigInt(1);
122
+ const num = BigInt('0x' + bytesToHex(key)); // check for ui8a, then bytesToNumber()
123
+ const res = (num % (modulus - _1)) + _1; // Remove 0 from output
124
+ if (res < _1) throw new Error('expected positive number'); // Guard against bad values
125
+ const len = key.length - 8; // FIPS requires 64 more bits = 8 bytes
126
+ const hex = res.toString(16).padStart(len * 2, '0'); // numberToHex()
127
+ const bytes = hexToBytes(hex);
128
+ if (bytes.length !== len) throw new Error('invalid length of result key');
129
+ return bytes;
130
+ }
131
+
132
+ // We are not using classes because constructor cannot be async
133
+ export interface ESKDF {
134
+ /**
135
+ * Derives a child key. Child key will not be associated with any
136
+ * other child key because of properties of underlying KDF.
137
+ *
138
+ * @param protocol - 3-15 character protocol name
139
+ * @param accountId - numeric identifier of account
140
+ * @param options - `keyLength: 64` or `modulus: 41920438n`
141
+ * @example deriveChildKey('aes', 0)
142
+ */
143
+ deriveChildKey: (protocol: string, accountId: AccountID, options?: KeyOpts) => Uint8Array;
144
+ /**
145
+ * Deletes the main seed from eskdf instance
146
+ */
147
+ expire: () => void;
148
+ /**
149
+ * Account fingerprint
150
+ */
151
+ fingerprint: string;
152
+ }
153
+
154
+ /**
155
+ * ESKDF
156
+ * @param username - username, email, or identifier, min: 8 characters, should have enough entropy
157
+ * @param password - password, min: 8 characters, should have enough entropy
158
+ * @example
159
+ * const kdf = await eskdf('example-university', 'beginning-new-example');
160
+ * const key = kdf.deriveChildKey('aes', 0);
161
+ * console.log(kdf.fingerprint);
162
+ * kdf.expire();
163
+ */
164
+ export async function eskdf(username: string, password: string): Promise<ESKDF> {
165
+ // We are using closure + object instead of class because
166
+ // we want to make `seed` non-accessible for any external function.
167
+ let seed: Uint8Array | undefined = deriveMainSeed(username, password);
168
+
169
+ function deriveCK(protocol: string, accountId: AccountID = 0, options?: KeyOpts): Uint8Array {
170
+ abytes(seed, 32);
171
+ const { salt, info } = getSaltInfo(protocol, accountId); // validate protocol & accountId
172
+ const keyLength = getKeyLength(options); // validate options
173
+ const key = hkdf(sha256, seed!, salt, info, keyLength);
174
+ // Modulus has already been validated
175
+ return options && 'modulus' in options ? modReduceKey(key, options.modulus) : key;
176
+ }
177
+ function expire() {
178
+ if (seed) seed.fill(1);
179
+ seed = undefined;
180
+ }
181
+ // prettier-ignore
182
+ const fingerprint = Array.from(deriveCK('fingerprint', 0))
183
+ .slice(0, 6)
184
+ .map((char) => char.toString(16).padStart(2, '0').toUpperCase())
185
+ .join(':');
186
+ return Object.freeze({ deriveChildKey: deriveCK, expire, fingerprint });
187
+ }
@@ -0,0 +1,88 @@
1
+ /**
2
+ * HKDF (RFC 5869): extract + expand in one step.
3
+ * See https://soatok.blog/2021/11/17/understanding-hkdf/.
4
+ * @module
5
+ */
6
+ import { hmac } from './hmac.ts';
7
+ import { ahash, anumber, type CHash, clean, type Input, toBytes } from './utils.ts';
8
+
9
+ /**
10
+ * HKDF-extract from spec. Less important part. `HKDF-Extract(IKM, salt) -> PRK`
11
+ * Arguments position differs from spec (IKM is first one, since it is not optional)
12
+ * @param hash - hash function that would be used (e.g. sha256)
13
+ * @param ikm - input keying material, the initial key
14
+ * @param salt - optional salt value (a non-secret random value)
15
+ */
16
+ export function extract(hash: CHash, ikm: Input, salt?: Input): Uint8Array {
17
+ ahash(hash);
18
+ // NOTE: some libraries treat zero-length array as 'not provided';
19
+ // we don't, since we have undefined as 'not provided'
20
+ // https://github.com/RustCrypto/KDFs/issues/15
21
+ if (salt === undefined) salt = new Uint8Array(hash.outputLen);
22
+ return hmac(hash, toBytes(salt), toBytes(ikm));
23
+ }
24
+
25
+ const HKDF_COUNTER = /* @__PURE__ */ Uint8Array.from([0]);
26
+ const EMPTY_BUFFER = /* @__PURE__ */ Uint8Array.of();
27
+
28
+ /**
29
+ * HKDF-expand from the spec. The most important part. `HKDF-Expand(PRK, info, L) -> OKM`
30
+ * @param hash - hash function that would be used (e.g. sha256)
31
+ * @param prk - a pseudorandom key of at least HashLen octets (usually, the output from the extract step)
32
+ * @param info - optional context and application specific information (can be a zero-length string)
33
+ * @param length - length of output keying material in bytes
34
+ */
35
+ export function expand(hash: CHash, prk: Input, info?: Input, length: number = 32): Uint8Array {
36
+ ahash(hash);
37
+ anumber(length);
38
+ const olen = hash.outputLen;
39
+ if (length > 255 * olen) throw new Error('Length should be <= 255*HashLen');
40
+ const blocks = Math.ceil(length / olen);
41
+ if (info === undefined) info = EMPTY_BUFFER;
42
+ // first L(ength) octets of T
43
+ const okm = new Uint8Array(blocks * olen);
44
+ // Re-use HMAC instance between blocks
45
+ const HMAC = hmac.create(hash, prk);
46
+ const HMACTmp = HMAC._cloneInto();
47
+ const T = new Uint8Array(HMAC.outputLen);
48
+ for (let counter = 0; counter < blocks; counter++) {
49
+ HKDF_COUNTER[0] = counter + 1;
50
+ // T(0) = empty string (zero length)
51
+ // T(N) = HMAC-Hash(PRK, T(N-1) | info | N)
52
+ HMACTmp.update(counter === 0 ? EMPTY_BUFFER : T)
53
+ .update(info)
54
+ .update(HKDF_COUNTER)
55
+ .digestInto(T);
56
+ okm.set(T, olen * counter);
57
+ HMAC._cloneInto(HMACTmp);
58
+ }
59
+ HMAC.destroy();
60
+ HMACTmp.destroy();
61
+ clean(T, HKDF_COUNTER);
62
+ return okm.slice(0, length);
63
+ }
64
+
65
+ /**
66
+ * HKDF (RFC 5869): derive keys from an initial input.
67
+ * Combines hkdf_extract + hkdf_expand in one step
68
+ * @param hash - hash function that would be used (e.g. sha256)
69
+ * @param ikm - input keying material, the initial key
70
+ * @param salt - optional salt value (a non-secret random value)
71
+ * @param info - optional context and application specific information (can be a zero-length string)
72
+ * @param length - length of output keying material in bytes
73
+ * @example
74
+ * import { hkdf } from '@noble/hashes/hkdf';
75
+ * import { sha256 } from '@noble/hashes/sha2';
76
+ * import { randomBytes } from '@noble/hashes/utils';
77
+ * const inputKey = randomBytes(32);
78
+ * const salt = randomBytes(32);
79
+ * const info = 'application-key';
80
+ * const hk1 = hkdf(sha256, inputKey, salt, info, 32);
81
+ */
82
+ export const hkdf = (
83
+ hash: CHash,
84
+ ikm: Input,
85
+ salt: Input | undefined,
86
+ info: Input | undefined,
87
+ length: number
88
+ ): Uint8Array => expand(hash, extract(hash, ikm, salt), info, length);
@@ -0,0 +1,94 @@
1
+ /**
2
+ * HMAC: RFC2104 message authentication code.
3
+ * @module
4
+ */
5
+ import { abytes, aexists, ahash, clean, Hash, toBytes, type CHash, type Input } from './utils.ts';
6
+
7
+ export class HMAC<T extends Hash<T>> extends Hash<HMAC<T>> {
8
+ oHash: T;
9
+ iHash: T;
10
+ blockLen: number;
11
+ outputLen: number;
12
+ private finished = false;
13
+ private destroyed = false;
14
+
15
+ constructor(hash: CHash, _key: Input) {
16
+ super();
17
+ ahash(hash);
18
+ const key = toBytes(_key);
19
+ this.iHash = hash.create() as T;
20
+ if (typeof this.iHash.update !== 'function')
21
+ throw new Error('Expected instance of class which extends utils.Hash');
22
+ this.blockLen = this.iHash.blockLen;
23
+ this.outputLen = this.iHash.outputLen;
24
+ const blockLen = this.blockLen;
25
+ const pad = new Uint8Array(blockLen);
26
+ // blockLen can be bigger than outputLen
27
+ pad.set(key.length > blockLen ? hash.create().update(key).digest() : key);
28
+ for (let i = 0; i < pad.length; i++) pad[i] ^= 0x36;
29
+ this.iHash.update(pad);
30
+ // By doing update (processing of first block) of outer hash here we can re-use it between multiple calls via clone
31
+ this.oHash = hash.create() as T;
32
+ // Undo internal XOR && apply outer XOR
33
+ for (let i = 0; i < pad.length; i++) pad[i] ^= 0x36 ^ 0x5c;
34
+ this.oHash.update(pad);
35
+ clean(pad);
36
+ }
37
+ update(buf: Input): this {
38
+ aexists(this);
39
+ this.iHash.update(buf);
40
+ return this;
41
+ }
42
+ digestInto(out: Uint8Array): void {
43
+ aexists(this);
44
+ abytes(out, this.outputLen);
45
+ this.finished = true;
46
+ this.iHash.digestInto(out);
47
+ this.oHash.update(out);
48
+ this.oHash.digestInto(out);
49
+ this.destroy();
50
+ }
51
+ digest(): Uint8Array {
52
+ const out = new Uint8Array(this.oHash.outputLen);
53
+ this.digestInto(out);
54
+ return out;
55
+ }
56
+ _cloneInto(to?: HMAC<T>): HMAC<T> {
57
+ // Create new instance without calling constructor since key already in state and we don't know it.
58
+ to ||= Object.create(Object.getPrototypeOf(this), {});
59
+ const { oHash, iHash, finished, destroyed, blockLen, outputLen } = this;
60
+ to = to as this;
61
+ to.finished = finished;
62
+ to.destroyed = destroyed;
63
+ to.blockLen = blockLen;
64
+ to.outputLen = outputLen;
65
+ to.oHash = oHash._cloneInto(to.oHash);
66
+ to.iHash = iHash._cloneInto(to.iHash);
67
+ return to;
68
+ }
69
+ clone(): HMAC<T> {
70
+ return this._cloneInto();
71
+ }
72
+ destroy(): void {
73
+ this.destroyed = true;
74
+ this.oHash.destroy();
75
+ this.iHash.destroy();
76
+ }
77
+ }
78
+
79
+ /**
80
+ * HMAC: RFC2104 message authentication code.
81
+ * @param hash - function that would be used e.g. sha256
82
+ * @param key - message key
83
+ * @param message - message data
84
+ * @example
85
+ * import { hmac } from '@noble/hashes/hmac';
86
+ * import { sha256 } from '@noble/hashes/sha2';
87
+ * const mac1 = hmac(sha256, 'key', 'message');
88
+ */
89
+ export const hmac: {
90
+ (hash: CHash, key: Input, message: Input): Uint8Array;
91
+ create(hash: CHash, key: Input): HMAC<any>;
92
+ } = (hash: CHash, key: Input, message: Input): Uint8Array =>
93
+ new HMAC<any>(hash, key).update(message).digest();
94
+ hmac.create = (hash: CHash, key: Input) => new HMAC<any>(hash, key);