@brightchain/brightchain-lib 0.8.1 → 0.10.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 (499) hide show
  1. package/brightchain-lib/BLOCK_COVERAGE_AUDIT.md +169 -0
  2. package/package.json +2 -2
  3. package/src/browser.d.ts +1 -4
  4. package/src/browser.d.ts.map +1 -1
  5. package/src/browser.js +6 -9
  6. package/src/browser.js.map +1 -1
  7. package/src/lib/blockMetadata.d.ts +10 -9
  8. package/src/lib/blockMetadata.d.ts.map +1 -1
  9. package/src/lib/blockMetadata.js +20 -36
  10. package/src/lib/blockMetadata.js.map +1 -1
  11. package/src/lib/blocks/base.d.ts +23 -0
  12. package/src/lib/blocks/base.d.ts.map +1 -1
  13. package/src/lib/blocks/base.js +33 -15
  14. package/src/lib/blocks/base.js.map +1 -1
  15. package/src/lib/blocks/cbl.d.ts +34 -1
  16. package/src/lib/blocks/cbl.d.ts.map +1 -1
  17. package/src/lib/blocks/cbl.js +36 -3
  18. package/src/lib/blocks/cbl.js.map +1 -1
  19. package/src/lib/blocks/cblBase.d.ts +45 -1
  20. package/src/lib/blocks/cblBase.d.ts.map +1 -1
  21. package/src/lib/blocks/cblBase.js +106 -52
  22. package/src/lib/blocks/cblBase.js.map +1 -1
  23. package/src/lib/blocks/encrypted.d.ts +34 -5
  24. package/src/lib/blocks/encrypted.d.ts.map +1 -1
  25. package/src/lib/blocks/encrypted.js +129 -24
  26. package/src/lib/blocks/encrypted.js.map +1 -1
  27. package/src/lib/blocks/encryptedBlockFactory.js +2 -2
  28. package/src/lib/blocks/encryptedBlockFactory.js.map +1 -1
  29. package/src/lib/blocks/ephemeral.d.ts +35 -9
  30. package/src/lib/blocks/ephemeral.d.ts.map +1 -1
  31. package/src/lib/blocks/ephemeral.js +71 -42
  32. package/src/lib/blocks/ephemeral.js.map +1 -1
  33. package/src/lib/blocks/extendedCbl.d.ts +1 -1
  34. package/src/lib/blocks/extendedCbl.d.ts.map +1 -1
  35. package/src/lib/blocks/extendedCbl.js +7 -7
  36. package/src/lib/blocks/extendedCbl.js.map +1 -1
  37. package/src/lib/blocks/handle.js +2 -2
  38. package/src/lib/blocks/handle.js.map +1 -1
  39. package/src/lib/blocks/handleTuple.js +2 -2
  40. package/src/lib/blocks/handleTuple.js.map +1 -1
  41. package/src/lib/blocks/random.d.ts +2 -1
  42. package/src/lib/blocks/random.d.ts.map +1 -1
  43. package/src/lib/blocks/random.js +7 -4
  44. package/src/lib/blocks/random.js.map +1 -1
  45. package/src/lib/blocks/rawData.d.ts +3 -1
  46. package/src/lib/blocks/rawData.d.ts.map +1 -1
  47. package/src/lib/blocks/rawData.js +31 -6
  48. package/src/lib/blocks/rawData.js.map +1 -1
  49. package/src/lib/blocks/whitened.d.ts +2 -1
  50. package/src/lib/blocks/whitened.d.ts.map +1 -1
  51. package/src/lib/blocks/whitened.js +7 -5
  52. package/src/lib/blocks/whitened.js.map +1 -1
  53. package/src/lib/config/constants.d.ts +2 -0
  54. package/src/lib/config/constants.d.ts.map +1 -0
  55. package/src/lib/config/constants.js +5 -0
  56. package/src/lib/config/constants.js.map +1 -0
  57. package/src/lib/constants.d.ts +37 -0
  58. package/src/lib/constants.d.ts.map +1 -1
  59. package/src/lib/constants.js +40 -1
  60. package/src/lib/constants.js.map +1 -1
  61. package/src/lib/cpus/index.d.ts +2 -3
  62. package/src/lib/cpus/index.d.ts.map +1 -1
  63. package/src/lib/cpus/index.js +5 -0
  64. package/src/lib/cpus/index.js.map +1 -1
  65. package/src/lib/cpus/instructionFactory.d.ts +56 -0
  66. package/src/lib/cpus/instructionFactory.d.ts.map +1 -0
  67. package/src/lib/cpus/instructionFactory.js +190 -0
  68. package/src/lib/cpus/instructionFactory.js.map +1 -0
  69. package/src/lib/cpus/instructionTables.d.ts +14 -12
  70. package/src/lib/cpus/instructionTables.d.ts.map +1 -1
  71. package/src/lib/cpus/instructionTables.js +17 -147
  72. package/src/lib/cpus/instructionTables.js.map +1 -1
  73. package/src/lib/cpus/riscvCpu.d.ts +51 -0
  74. package/src/lib/cpus/riscvCpu.d.ts.map +1 -0
  75. package/src/lib/cpus/riscvCpu.js +131 -0
  76. package/src/lib/cpus/riscvCpu.js.map +1 -0
  77. package/src/lib/documents/base/document.d.ts +1 -1
  78. package/src/lib/documents/base/document.d.ts.map +1 -1
  79. package/src/lib/documents/member/index.d.ts +2 -0
  80. package/src/lib/documents/member/index.d.ts.map +1 -1
  81. package/src/lib/documents/member/index.js +2 -0
  82. package/src/lib/documents/member/index.js.map +1 -1
  83. package/src/lib/documents/member/memberDocument.d.ts +4 -3
  84. package/src/lib/documents/member/memberDocument.d.ts.map +1 -1
  85. package/src/lib/documents/member/memberDocument.js +11 -8
  86. package/src/lib/documents/member/memberDocument.js.map +1 -1
  87. package/src/lib/documents/member/memberHydration.d.ts.map +1 -1
  88. package/src/lib/documents/member/memberHydration.js +7 -21
  89. package/src/lib/documents/member/memberHydration.js.map +1 -1
  90. package/src/lib/documents/member/memberOperational.d.ts.map +1 -1
  91. package/src/lib/documents/member/memberOperational.js +2 -2
  92. package/src/lib/documents/member/memberOperational.js.map +1 -1
  93. package/src/lib/documents/member/memberProfileDocument.d.ts +138 -0
  94. package/src/lib/documents/member/memberProfileDocument.d.ts.map +1 -0
  95. package/src/lib/documents/member/memberProfileDocument.js +326 -0
  96. package/src/lib/documents/member/memberProfileDocument.js.map +1 -0
  97. package/src/lib/documents/member/memberProfileHydration.d.ts +12 -0
  98. package/src/lib/documents/member/memberProfileHydration.d.ts.map +1 -0
  99. package/src/lib/documents/member/memberProfileHydration.js +143 -0
  100. package/src/lib/documents/member/memberProfileHydration.js.map +1 -0
  101. package/src/lib/documents/network/networkDocument.d.ts.map +1 -1
  102. package/src/lib/documents/network/networkDocument.js +4 -3
  103. package/src/lib/documents/network/networkDocument.js.map +1 -1
  104. package/src/lib/documents/quorumDocument.d.ts +3 -14
  105. package/src/lib/documents/quorumDocument.d.ts.map +1 -1
  106. package/src/lib/documents/quorumDocument.js +4 -2
  107. package/src/lib/documents/quorumDocument.js.map +1 -1
  108. package/src/lib/encryptedBlockMetadata.d.ts +13 -5
  109. package/src/lib/encryptedBlockMetadata.d.ts.map +1 -1
  110. package/src/lib/encryptedBlockMetadata.js +31 -23
  111. package/src/lib/encryptedBlockMetadata.js.map +1 -1
  112. package/src/lib/enumerations/blockSize.d.ts +2 -2
  113. package/src/lib/enumerations/blockSize.d.ts.map +1 -1
  114. package/src/lib/enumerations/blockSize.js +15 -15
  115. package/src/lib/enumerations/blockSize.js.map +1 -1
  116. package/src/lib/enumerations/{stringNames.d.ts → brightChainStrings.d.ts} +4 -3
  117. package/src/lib/enumerations/brightChainStrings.d.ts.map +1 -0
  118. package/src/lib/enumerations/brightChainStrings.js +437 -0
  119. package/src/lib/enumerations/brightChainStrings.js.map +1 -0
  120. package/src/lib/enumerations/cblErrorType.d.ts +1 -0
  121. package/src/lib/enumerations/cblErrorType.d.ts.map +1 -1
  122. package/src/lib/enumerations/cblErrorType.js +1 -0
  123. package/src/lib/enumerations/cblErrorType.js.map +1 -1
  124. package/src/lib/enumerations/index.d.ts +1 -1
  125. package/src/lib/enumerations/index.d.ts.map +1 -1
  126. package/src/lib/enumerations/index.js +1 -1
  127. package/src/lib/enumerations/index.js.map +1 -1
  128. package/src/lib/enumerations/votingDerivationErrorType.d.ts +2 -2
  129. package/src/lib/enumerations/votingDerivationErrorType.d.ts.map +1 -1
  130. package/src/lib/enumerations/votingDerivationErrorType.js +11 -11
  131. package/src/lib/enumerations/votingDerivationErrorType.js.map +1 -1
  132. package/src/lib/ephemeralBlockMetadata.d.ts +13 -8
  133. package/src/lib/ephemeralBlockMetadata.d.ts.map +1 -1
  134. package/src/lib/ephemeralBlockMetadata.js +27 -19
  135. package/src/lib/ephemeralBlockMetadata.js.map +1 -1
  136. package/src/lib/errors/block/blockAccess.d.ts +2 -2
  137. package/src/lib/errors/block/blockAccess.d.ts.map +1 -1
  138. package/src/lib/errors/block/blockAccess.js +8 -8
  139. package/src/lib/errors/block/blockAccess.js.map +1 -1
  140. package/src/lib/errors/block/blockCapacity.d.ts +2 -2
  141. package/src/lib/errors/block/blockCapacity.d.ts.map +1 -1
  142. package/src/lib/errors/block/blockCapacity.js +8 -8
  143. package/src/lib/errors/block/blockCapacity.js.map +1 -1
  144. package/src/lib/errors/block/blockError.d.ts +2 -2
  145. package/src/lib/errors/block/blockError.d.ts.map +1 -1
  146. package/src/lib/errors/block/blockError.js +16 -16
  147. package/src/lib/errors/block/blockError.js.map +1 -1
  148. package/src/lib/errors/block/blockMetadata.d.ts +2 -2
  149. package/src/lib/errors/block/blockMetadata.d.ts.map +1 -1
  150. package/src/lib/errors/block/blockMetadata.js +8 -8
  151. package/src/lib/errors/block/blockMetadata.js.map +1 -1
  152. package/src/lib/errors/block/blockValidation.d.ts +2 -2
  153. package/src/lib/errors/block/blockValidation.d.ts.map +1 -1
  154. package/src/lib/errors/block/blockValidation.js +36 -36
  155. package/src/lib/errors/block/blockValidation.js.map +1 -1
  156. package/src/lib/errors/block/cannotDecrypt.d.ts.map +1 -1
  157. package/src/lib/errors/block/cannotDecrypt.js +2 -2
  158. package/src/lib/errors/block/cannotDecrypt.js.map +1 -1
  159. package/src/lib/errors/block/cannotEncrypt.d.ts.map +1 -1
  160. package/src/lib/errors/block/cannotEncrypt.js +2 -2
  161. package/src/lib/errors/block/cannotEncrypt.js.map +1 -1
  162. package/src/lib/errors/blockServiceError.d.ts +2 -2
  163. package/src/lib/errors/blockServiceError.d.ts.map +1 -1
  164. package/src/lib/errors/blockServiceError.js +15 -15
  165. package/src/lib/errors/blockServiceError.js.map +1 -1
  166. package/src/lib/errors/bufferError.d.ts.map +1 -1
  167. package/src/lib/errors/bufferError.js +2 -2
  168. package/src/lib/errors/bufferError.js.map +1 -1
  169. package/src/lib/errors/cblError.d.ts +2 -2
  170. package/src/lib/errors/cblError.d.ts.map +1 -1
  171. package/src/lib/errors/cblError.js +37 -36
  172. package/src/lib/errors/cblError.js.map +1 -1
  173. package/src/lib/errors/checksumMismatch.js +2 -2
  174. package/src/lib/errors/checksumMismatch.js.map +1 -1
  175. package/src/lib/errors/disposed.js +2 -2
  176. package/src/lib/errors/disposed.js.map +1 -1
  177. package/src/lib/errors/document.d.ts +2 -2
  178. package/src/lib/errors/document.d.ts.map +1 -1
  179. package/src/lib/errors/document.js +5 -5
  180. package/src/lib/errors/document.js.map +1 -1
  181. package/src/lib/errors/eciesError.d.ts +2 -2
  182. package/src/lib/errors/eciesError.d.ts.map +1 -1
  183. package/src/lib/errors/eciesError.js +20 -20
  184. package/src/lib/errors/eciesError.js.map +1 -1
  185. package/src/lib/errors/extendedCblError.d.ts +2 -2
  186. package/src/lib/errors/extendedCblError.d.ts.map +1 -1
  187. package/src/lib/errors/extendedCblError.js +25 -25
  188. package/src/lib/errors/extendedCblError.js.map +1 -1
  189. package/src/lib/errors/failedToHydrate.js +2 -2
  190. package/src/lib/errors/failedToHydrate.js.map +1 -1
  191. package/src/lib/errors/failedToSerialize.js +2 -2
  192. package/src/lib/errors/failedToSerialize.js.map +1 -1
  193. package/src/lib/errors/fecError.d.ts +2 -2
  194. package/src/lib/errors/fecError.d.ts.map +1 -1
  195. package/src/lib/errors/fecError.js +19 -19
  196. package/src/lib/errors/fecError.js.map +1 -1
  197. package/src/lib/errors/handleTupleError.d.ts +2 -2
  198. package/src/lib/errors/handleTupleError.d.ts.map +1 -1
  199. package/src/lib/errors/handleTupleError.js +5 -5
  200. package/src/lib/errors/handleTupleError.js.map +1 -1
  201. package/src/lib/errors/index.d.ts +0 -6
  202. package/src/lib/errors/index.d.ts.map +1 -1
  203. package/src/lib/errors/index.js +0 -9
  204. package/src/lib/errors/index.js.map +1 -1
  205. package/src/lib/errors/invalidBlockSize.js +2 -2
  206. package/src/lib/errors/invalidBlockSize.js.map +1 -1
  207. package/src/lib/errors/invalidBlockSizeLength.js +2 -2
  208. package/src/lib/errors/invalidBlockSizeLength.js.map +1 -1
  209. package/src/lib/errors/invalidCredentials.js +2 -2
  210. package/src/lib/errors/invalidCredentials.js.map +1 -1
  211. package/src/lib/errors/invalidIDFormat.js +2 -2
  212. package/src/lib/errors/invalidIDFormat.js.map +1 -1
  213. package/src/lib/errors/invalidSessionID.js +2 -2
  214. package/src/lib/errors/invalidSessionID.js.map +1 -1
  215. package/src/lib/errors/invalidTupleCount.js +2 -2
  216. package/src/lib/errors/invalidTupleCount.js.map +1 -1
  217. package/src/lib/errors/isolatedKeyError.d.ts +2 -2
  218. package/src/lib/errors/isolatedKeyError.d.ts.map +1 -1
  219. package/src/lib/errors/isolatedKeyError.js +7 -7
  220. package/src/lib/errors/isolatedKeyError.js.map +1 -1
  221. package/src/lib/errors/memberError.d.ts +2 -2
  222. package/src/lib/errors/memberError.d.ts.map +1 -1
  223. package/src/lib/errors/memberError.js +27 -27
  224. package/src/lib/errors/memberError.js.map +1 -1
  225. package/src/lib/errors/memoryTupleError.d.ts +2 -2
  226. package/src/lib/errors/memoryTupleError.d.ts.map +1 -1
  227. package/src/lib/errors/memoryTupleError.js +7 -7
  228. package/src/lib/errors/memoryTupleError.js.map +1 -1
  229. package/src/lib/errors/metadataMismatch.js +2 -2
  230. package/src/lib/errors/metadataMismatch.js.map +1 -1
  231. package/src/lib/errors/multiEncryptedError.d.ts +2 -2
  232. package/src/lib/errors/multiEncryptedError.d.ts.map +1 -1
  233. package/src/lib/errors/multiEncryptedError.js +11 -11
  234. package/src/lib/errors/multiEncryptedError.js.map +1 -1
  235. package/src/lib/errors/notImplemented.js +2 -2
  236. package/src/lib/errors/notImplemented.js.map +1 -1
  237. package/src/lib/errors/quorumError.d.ts +2 -2
  238. package/src/lib/errors/quorumError.d.ts.map +1 -1
  239. package/src/lib/errors/quorumError.js +8 -8
  240. package/src/lib/errors/quorumError.js.map +1 -1
  241. package/src/lib/errors/sealingError.d.ts +2 -2
  242. package/src/lib/errors/sealingError.d.ts.map +1 -1
  243. package/src/lib/errors/sealingError.js +9 -9
  244. package/src/lib/errors/sealingError.js.map +1 -1
  245. package/src/lib/errors/secureStorage.d.ts +2 -2
  246. package/src/lib/errors/secureStorage.d.ts.map +1 -1
  247. package/src/lib/errors/secureStorage.js +4 -4
  248. package/src/lib/errors/secureStorage.js.map +1 -1
  249. package/src/lib/errors/storeError.d.ts +2 -2
  250. package/src/lib/errors/storeError.d.ts.map +1 -1
  251. package/src/lib/errors/storeError.js +20 -20
  252. package/src/lib/errors/storeError.js.map +1 -1
  253. package/src/lib/errors/streamError.d.ts +2 -2
  254. package/src/lib/errors/streamError.d.ts.map +1 -1
  255. package/src/lib/errors/streamError.js +8 -8
  256. package/src/lib/errors/streamError.js.map +1 -1
  257. package/src/lib/errors/symmetricError.d.ts +2 -2
  258. package/src/lib/errors/symmetricError.d.ts.map +1 -1
  259. package/src/lib/errors/symmetricError.js +3 -3
  260. package/src/lib/errors/symmetricError.js.map +1 -1
  261. package/src/lib/errors/systemKeyringError.d.ts +2 -2
  262. package/src/lib/errors/systemKeyringError.d.ts.map +1 -1
  263. package/src/lib/errors/systemKeyringError.js +4 -4
  264. package/src/lib/errors/systemKeyringError.js.map +1 -1
  265. package/src/lib/errors/tupleError.d.ts +2 -2
  266. package/src/lib/errors/tupleError.d.ts.map +1 -1
  267. package/src/lib/errors/tupleError.js +13 -13
  268. package/src/lib/errors/tupleError.js.map +1 -1
  269. package/src/lib/errors/typedError.d.ts +2 -2
  270. package/src/lib/errors/typedError.d.ts.map +1 -1
  271. package/src/lib/errors/typedWithReasonError.d.ts +3 -3
  272. package/src/lib/errors/typedWithReasonError.d.ts.map +1 -1
  273. package/src/lib/errors/typedWithReasonError.js.map +1 -1
  274. package/src/lib/errors/userNotFound.js +2 -2
  275. package/src/lib/errors/userNotFound.js.map +1 -1
  276. package/src/lib/errors/whitenedError.d.ts +2 -2
  277. package/src/lib/errors/whitenedError.d.ts.map +1 -1
  278. package/src/lib/errors/whitenedError.js +5 -5
  279. package/src/lib/errors/whitenedError.js.map +1 -1
  280. package/src/lib/factories/blockFactory.d.ts +23 -0
  281. package/src/lib/factories/blockFactory.d.ts.map +1 -0
  282. package/src/lib/factories/blockFactory.js +43 -0
  283. package/src/lib/factories/blockFactory.js.map +1 -0
  284. package/src/lib/i18n/index.d.ts +2 -2
  285. package/src/lib/i18n/index.d.ts.map +1 -1
  286. package/src/lib/i18n/index.js +2 -2
  287. package/src/lib/i18n/index.js.map +1 -1
  288. package/src/lib/index.d.ts +9 -0
  289. package/src/lib/index.d.ts.map +1 -1
  290. package/src/lib/index.js +12 -0
  291. package/src/lib/index.js.map +1 -1
  292. package/src/lib/init.d.ts +10 -0
  293. package/src/lib/init.d.ts.map +1 -1
  294. package/src/lib/init.js +24 -4
  295. package/src/lib/init.js.map +1 -1
  296. package/src/lib/interfaces/blockCapacity.d.ts +8 -0
  297. package/src/lib/interfaces/blockCapacity.d.ts.map +1 -1
  298. package/src/lib/interfaces/blocks/encrypted.d.ts +1 -1
  299. package/src/lib/interfaces/blocks/encrypted.d.ts.map +1 -1
  300. package/src/lib/interfaces/blocks/ephemeral.d.ts +4 -7
  301. package/src/lib/interfaces/blocks/ephemeral.d.ts.map +1 -1
  302. package/src/lib/interfaces/blocks/headers/index.d.ts +1 -0
  303. package/src/lib/interfaces/blocks/headers/index.d.ts.map +1 -1
  304. package/src/lib/interfaces/blocks/headers/superCblHeader.d.ts +63 -0
  305. package/src/lib/interfaces/blocks/headers/superCblHeader.d.ts.map +1 -0
  306. package/src/lib/interfaces/{storage/superCbl.js → blocks/headers/superCblHeader.js} +1 -1
  307. package/src/lib/interfaces/blocks/headers/superCblHeader.js.map +1 -0
  308. package/src/lib/interfaces/blocks/metadata/index.d.ts +0 -1
  309. package/src/lib/interfaces/blocks/metadata/index.d.ts.map +1 -1
  310. package/src/lib/interfaces/constants.d.ts +29 -0
  311. package/src/lib/interfaces/constants.d.ts.map +1 -1
  312. package/src/lib/interfaces/document/quorumDocument.d.ts +15 -0
  313. package/src/lib/interfaces/document/quorumDocument.d.ts.map +1 -0
  314. package/src/lib/interfaces/document/quorumDocument.js +3 -0
  315. package/src/lib/interfaces/document/quorumDocument.js.map +1 -0
  316. package/src/lib/interfaces/member/memberData.d.ts +2 -0
  317. package/src/lib/interfaces/member/memberData.d.ts.map +1 -1
  318. package/src/lib/interfaces/member/profileStorage.d.ts +77 -0
  319. package/src/lib/interfaces/member/profileStorage.d.ts.map +1 -0
  320. package/src/lib/interfaces/member/profileStorage.js +3 -0
  321. package/src/lib/interfaces/member/profileStorage.js.map +1 -0
  322. package/src/lib/interfaces/serviceProvider.interface.d.ts +11 -8
  323. package/src/lib/interfaces/serviceProvider.interface.d.ts.map +1 -1
  324. package/src/lib/interfaces/services/cblServices.d.ts +148 -0
  325. package/src/lib/interfaces/services/cblServices.d.ts.map +1 -0
  326. package/src/lib/interfaces/services/cblServices.js +11 -0
  327. package/src/lib/interfaces/services/cblServices.js.map +1 -0
  328. package/src/lib/interfaces/services/ephemeralBlockServices.d.ts +15 -0
  329. package/src/lib/interfaces/services/ephemeralBlockServices.d.ts.map +1 -0
  330. package/src/lib/interfaces/services/ephemeralBlockServices.js +3 -0
  331. package/src/lib/interfaces/services/ephemeralBlockServices.js.map +1 -0
  332. package/src/lib/interfaces/services/index.d.ts +1 -0
  333. package/src/lib/interfaces/services/index.d.ts.map +1 -1
  334. package/src/lib/interfaces/storage/index.d.ts +0 -1
  335. package/src/lib/interfaces/storage/index.d.ts.map +1 -1
  336. package/src/lib/logging/blockLogger.d.ts +218 -0
  337. package/src/lib/logging/blockLogger.d.ts.map +1 -0
  338. package/src/lib/logging/blockLogger.js +341 -0
  339. package/src/lib/logging/blockLogger.js.map +1 -0
  340. package/src/lib/logging/index.d.ts +24 -0
  341. package/src/lib/logging/index.d.ts.map +1 -0
  342. package/src/lib/logging/index.js +27 -0
  343. package/src/lib/logging/index.js.map +1 -0
  344. package/src/lib/logging/structuredLogger.d.ts +42 -0
  345. package/src/lib/logging/structuredLogger.d.ts.map +1 -0
  346. package/src/lib/logging/structuredLogger.js +93 -0
  347. package/src/lib/logging/structuredLogger.js.map +1 -0
  348. package/src/lib/primeTupleGeneratorStream.d.ts.map +1 -1
  349. package/src/lib/primeTupleGeneratorStream.js +4 -2
  350. package/src/lib/primeTupleGeneratorStream.js.map +1 -1
  351. package/src/lib/quorum.d.ts.map +1 -1
  352. package/src/lib/quorum.js +7 -5
  353. package/src/lib/quorum.js.map +1 -1
  354. package/src/lib/quorumDataRecord.d.ts +1 -1
  355. package/src/lib/quorumDataRecord.d.ts.map +1 -1
  356. package/src/lib/quorumDataRecord.js +5 -4
  357. package/src/lib/quorumDataRecord.js.map +1 -1
  358. package/src/lib/schemas/network/networkDocumentSchema.d.ts.map +1 -1
  359. package/src/lib/schemas/network/networkDocumentSchema.js +9 -8
  360. package/src/lib/schemas/network/networkDocumentSchema.js.map +1 -1
  361. package/src/lib/schemas/quorumDocument.d.ts +1 -1
  362. package/src/lib/schemas/quorumDocument.d.ts.map +1 -1
  363. package/src/lib/schemas/quorumDocument.js +6 -4
  364. package/src/lib/schemas/quorumDocument.js.map +1 -1
  365. package/src/lib/security/dosProtection.d.ts +13 -0
  366. package/src/lib/security/dosProtection.d.ts.map +1 -0
  367. package/src/lib/security/dosProtection.js +29 -0
  368. package/src/lib/security/dosProtection.js.map +1 -0
  369. package/src/lib/security/dosProtectionValidator.d.ts +27 -0
  370. package/src/lib/security/dosProtectionValidator.d.ts.map +1 -0
  371. package/src/lib/security/dosProtectionValidator.js +60 -0
  372. package/src/lib/security/dosProtectionValidator.js.map +1 -0
  373. package/src/lib/security/index.d.ts +12 -0
  374. package/src/lib/security/index.d.ts.map +1 -0
  375. package/src/lib/security/index.js +15 -0
  376. package/src/lib/security/index.js.map +1 -0
  377. package/src/lib/security/rateLimitTypes.d.ts +20 -0
  378. package/src/lib/security/rateLimitTypes.d.ts.map +1 -0
  379. package/src/lib/security/rateLimitTypes.js +15 -0
  380. package/src/lib/security/rateLimitTypes.js.map +1 -0
  381. package/src/lib/security/rateLimiter.d.ts +29 -0
  382. package/src/lib/security/rateLimiter.d.ts.map +1 -0
  383. package/src/lib/security/rateLimiter.js +107 -0
  384. package/src/lib/security/rateLimiter.js.map +1 -0
  385. package/src/lib/security/securityAuditLogger.d.ts +59 -0
  386. package/src/lib/security/securityAuditLogger.d.ts.map +1 -0
  387. package/src/lib/security/securityAuditLogger.js +120 -0
  388. package/src/lib/security/securityAuditLogger.js.map +1 -0
  389. package/src/lib/security/securityEvent.d.ts +45 -0
  390. package/src/lib/security/securityEvent.d.ts.map +1 -0
  391. package/src/lib/security/securityEvent.js +44 -0
  392. package/src/lib/security/securityEvent.js.map +1 -0
  393. package/src/lib/services/blockCapacity.service.d.ts.map +1 -1
  394. package/src/lib/services/blockCapacity.service.js +14 -5
  395. package/src/lib/services/blockCapacity.service.js.map +1 -1
  396. package/src/lib/services/blockFormatService.d.ts +41 -0
  397. package/src/lib/services/blockFormatService.d.ts.map +1 -0
  398. package/src/lib/services/blockFormatService.js +252 -0
  399. package/src/lib/services/blockFormatService.js.map +1 -0
  400. package/src/lib/services/blockService.d.ts +6 -0
  401. package/src/lib/services/blockService.d.ts.map +1 -1
  402. package/src/lib/services/blockService.js +130 -28
  403. package/src/lib/services/blockService.js.map +1 -1
  404. package/src/lib/services/cblService.d.ts +162 -3
  405. package/src/lib/services/cblService.d.ts.map +1 -1
  406. package/src/lib/services/cblService.js +502 -21
  407. package/src/lib/services/cblService.js.map +1 -1
  408. package/src/lib/services/globalServiceProvider.d.ts +4 -0
  409. package/src/lib/services/globalServiceProvider.d.ts.map +1 -0
  410. package/src/lib/services/globalServiceProvider.js +26 -0
  411. package/src/lib/services/globalServiceProvider.js.map +1 -0
  412. package/src/lib/services/index.d.ts +0 -2
  413. package/src/lib/services/index.d.ts.map +1 -1
  414. package/src/lib/services/index.js +0 -2
  415. package/src/lib/services/index.js.map +1 -1
  416. package/src/lib/services/member/memberCblService.d.ts.map +1 -1
  417. package/src/lib/services/member/memberCblService.js +11 -8
  418. package/src/lib/services/member/memberCblService.js.map +1 -1
  419. package/src/lib/services/memberStore.d.ts +8 -0
  420. package/src/lib/services/memberStore.d.ts.map +1 -1
  421. package/src/lib/services/memberStore.js +105 -76
  422. package/src/lib/services/memberStore.js.map +1 -1
  423. package/src/lib/services/sealing.service.d.ts +1 -1
  424. package/src/lib/services/sealing.service.d.ts.map +1 -1
  425. package/src/lib/services/sealing.service.js +4 -13
  426. package/src/lib/services/sealing.service.js.map +1 -1
  427. package/src/lib/services/service.provider.d.ts +2 -0
  428. package/src/lib/services/service.provider.d.ts.map +1 -1
  429. package/src/lib/services/service.provider.js +7 -12
  430. package/src/lib/services/service.provider.js.map +1 -1
  431. package/src/lib/services/serviceLocator.d.ts.map +1 -1
  432. package/src/lib/services/serviceLocator.js +2 -0
  433. package/src/lib/services/serviceLocator.js.map +1 -1
  434. package/src/lib/services/tuple.service.js +4 -4
  435. package/src/lib/services/tuple.service.js.map +1 -1
  436. package/src/lib/sharedTypes.d.ts +1 -22
  437. package/src/lib/sharedTypes.d.ts.map +1 -1
  438. package/src/lib/sharedTypes.js.map +1 -1
  439. package/src/lib/strings/englishUs.d.ts.map +1 -1
  440. package/src/lib/strings/englishUs.js +392 -392
  441. package/src/lib/strings/englishUs.js.map +1 -1
  442. package/src/lib/test/service.initializer.helper.d.ts +2 -1
  443. package/src/lib/test/service.initializer.helper.d.ts.map +1 -1
  444. package/src/lib/test/service.initializer.helper.js +11 -15
  445. package/src/lib/test/service.initializer.helper.js.map +1 -1
  446. package/src/lib/types/schema.d.ts +38 -0
  447. package/src/lib/types/schema.d.ts.map +1 -0
  448. package/src/lib/types/schema.js +7 -0
  449. package/src/lib/types/schema.js.map +1 -0
  450. package/src/lib/utils/constantTime.d.ts +27 -0
  451. package/src/lib/utils/constantTime.d.ts.map +1 -0
  452. package/src/lib/utils/constantTime.js +67 -0
  453. package/src/lib/utils/constantTime.js.map +1 -0
  454. package/src/lib/utils/constantTimeXor.d.ts +76 -0
  455. package/src/lib/utils/constantTimeXor.d.ts.map +1 -0
  456. package/src/lib/utils/constantTimeXor.js +122 -0
  457. package/src/lib/utils/constantTimeXor.js.map +1 -0
  458. package/src/lib/utils/dateUtils.d.ts +67 -0
  459. package/src/lib/utils/dateUtils.d.ts.map +1 -0
  460. package/src/lib/utils/dateUtils.js +136 -0
  461. package/src/lib/utils/dateUtils.js.map +1 -0
  462. package/src/lib/utils/index.d.ts +57 -0
  463. package/src/lib/utils/index.d.ts.map +1 -1
  464. package/src/lib/utils/index.js +69 -0
  465. package/src/lib/utils/index.js.map +1 -1
  466. package/src/lib/utils/typeGuards.d.ts +102 -0
  467. package/src/lib/utils/typeGuards.d.ts.map +1 -0
  468. package/src/lib/utils/typeGuards.js +244 -0
  469. package/src/lib/utils/typeGuards.js.map +1 -0
  470. package/src/lib/cpus/instructions.d.ts +0 -35
  471. package/src/lib/cpus/instructions.d.ts.map +0 -1
  472. package/src/lib/cpus/instructions.js +0 -285
  473. package/src/lib/cpus/instructions.js.map +0 -1
  474. package/src/lib/cpus/mach-o.d.ts +0 -7
  475. package/src/lib/cpus/mach-o.d.ts.map +0 -1
  476. package/src/lib/cpus/mach-o.js +0 -99
  477. package/src/lib/cpus/mach-o.js.map +0 -1
  478. package/src/lib/cpus/x86Cpu.d.ts +0 -21
  479. package/src/lib/cpus/x86Cpu.d.ts.map +0 -1
  480. package/src/lib/cpus/x86Cpu.js +0 -89
  481. package/src/lib/cpus/x86Cpu.js.map +0 -1
  482. package/src/lib/enumerations/stringNames.d.ts.map +0 -1
  483. package/src/lib/enumerations/stringNames.js +0 -436
  484. package/src/lib/enumerations/stringNames.js.map +0 -1
  485. package/src/lib/errors/superCbl.d.ts +0 -24
  486. package/src/lib/errors/superCbl.d.ts.map +0 -1
  487. package/src/lib/errors/superCbl.js +0 -43
  488. package/src/lib/errors/superCbl.js.map +0 -1
  489. package/src/lib/interfaces/storage/superCbl.d.ts +0 -102
  490. package/src/lib/interfaces/storage/superCbl.d.ts.map +0 -1
  491. package/src/lib/interfaces/storage/superCbl.js.map +0 -1
  492. package/src/lib/services/jsonCblCapacity.service.d.ts +0 -80
  493. package/src/lib/services/jsonCblCapacity.service.d.ts.map +0 -1
  494. package/src/lib/services/jsonCblCapacity.service.js +0 -147
  495. package/src/lib/services/jsonCblCapacity.service.js.map +0 -1
  496. package/src/lib/services/superCbl.service.d.ts +0 -68
  497. package/src/lib/services/superCbl.service.d.ts.map +0 -1
  498. package/src/lib/services/superCbl.service.js +0 -213
  499. package/src/lib/services/superCbl.service.js.map +0 -1
@@ -13,7 +13,8 @@ const cblError_1 = require("../errors/cblError");
13
13
  const extendedCblError_1 = require("../errors/extendedCblError");
14
14
  const checksum_1 = require("../types/checksum");
15
15
  const validator_1 = require("../utils/validator");
16
- const blockCapacity_service_1 = require("./blockCapacity.service");
16
+ const blockFormatService_1 = require("./blockFormatService");
17
+ const globalServiceProvider_1 = require("./globalServiceProvider");
17
18
  /**
18
19
  * Service for creating and verifying CBL blocks.
19
20
  *
@@ -40,8 +41,7 @@ class CBLService {
40
41
  constructor(checksumService, eciesService, enhancedProvider) {
41
42
  this.checksumService = checksumService;
42
43
  this.eciesService = eciesService;
43
- // Use the enhanced provider which should now use the same global configuration
44
- this.enhancedProvider = enhancedProvider ?? (0, ecies_lib_1.getEnhancedIdProvider)();
44
+ this.enhancedProvider = enhancedProvider;
45
45
  }
46
46
  /** Create safe buffers for common operations */
47
47
  createArrays() {
@@ -62,18 +62,24 @@ class CBLService {
62
62
  get creatorLength() {
63
63
  return this.enhancedProvider.byteLength;
64
64
  }
65
+ /**
66
+ * Offset of the creator ID field in the header (after structured prefix)
67
+ */
68
+ get creatorIdOffset() {
69
+ return CBLService.StructuredPrefixSize;
70
+ }
65
71
  /**
66
72
  * Offset of the date field in the header (instance method for dynamic provider support)
67
73
  */
68
74
  get dateCreatedOffset() {
69
- return this.creatorLength;
75
+ return this.creatorIdOffset + this.creatorLength;
70
76
  }
71
77
  /**
72
78
  * Offset of the date field in the header (static for backward compatibility)
73
79
  * @deprecated Use instance method dateCreatedOffset instead
74
80
  */
75
81
  static get DateCreatedOffset() {
76
- return CBLService.CreatorIdLength;
82
+ return CBLService.StructuredPrefixSize + CBLService.CreatorIdLength;
77
83
  }
78
84
  /**
79
85
  * Offset of the address count field in the header (instance method)
@@ -180,12 +186,72 @@ class CBLService {
180
186
  static get FileNameLengthOffset() {
181
187
  return CBLService.BaseHeaderCreatorSignatureOffset;
182
188
  }
189
+ /**
190
+ * Offset of the sub-CBL count field in SuperCBL header (after date)
191
+ */
192
+ get superCblSubCblCountOffset() {
193
+ return this.dateCreatedOffset + CBLService.DateSize;
194
+ }
195
+ /**
196
+ * Offset of the total block count field in SuperCBL header
197
+ */
198
+ get superCblTotalBlockCountOffset() {
199
+ return this.superCblSubCblCountOffset + CBLService.SuperCblSubCblCountSize;
200
+ }
201
+ /**
202
+ * Offset of the depth field in SuperCBL header
203
+ */
204
+ get superCblDepthOffset() {
205
+ return (this.superCblTotalBlockCountOffset +
206
+ CBLService.SuperCblTotalBlockCountSize);
207
+ }
208
+ /**
209
+ * Offset of the original data length field in SuperCBL header
210
+ */
211
+ get superCblOriginalDataLengthOffset() {
212
+ return this.superCblDepthOffset + CBLService.SuperCblDepthSize;
213
+ }
214
+ /**
215
+ * Offset of the original checksum field in SuperCBL header
216
+ */
217
+ get superCblOriginalChecksumOffset() {
218
+ return this.superCblOriginalDataLengthOffset + CBLService.DataLengthSize;
219
+ }
220
+ /**
221
+ * Offset of the creator signature field in SuperCBL header
222
+ */
223
+ get superCblCreatorSignatureOffset() {
224
+ return this.superCblOriginalChecksumOffset + CBLService.DataChecksumSize;
225
+ }
226
+ /**
227
+ * Length of the SuperCBL header (without address data)
228
+ */
229
+ get superCblHeaderSize() {
230
+ return (this.superCblCreatorSignatureOffset + CBLService.CreatorSignatureSize);
231
+ }
232
+ /**
233
+ * Get SuperCBL header offsets
234
+ */
235
+ get superCblHeaderOffsets() {
236
+ return {
237
+ StructuredPrefix: 0,
238
+ CreatorId: this.creatorIdOffset,
239
+ DateCreated: this.dateCreatedOffset,
240
+ SubCblCount: this.superCblSubCblCountOffset,
241
+ TotalBlockCount: this.superCblTotalBlockCountOffset,
242
+ Depth: this.superCblDepthOffset,
243
+ OriginalDataLength: this.superCblOriginalDataLengthOffset,
244
+ OriginalDataChecksum: this.superCblOriginalChecksumOffset,
245
+ CreatorSignature: this.superCblCreatorSignatureOffset,
246
+ };
247
+ }
183
248
  /**
184
249
  * Instance offsets for dynamic provider support
185
250
  */
186
251
  get headerOffsets() {
187
252
  return {
188
- CreatorId: 0,
253
+ StructuredPrefix: 0,
254
+ CreatorId: this.creatorIdOffset,
189
255
  DateCreated: this.dateCreatedOffset,
190
256
  CblAddressCount: this.cblAddressCountOffset,
191
257
  TupleSize: this.tupleSizeOffset,
@@ -202,7 +268,8 @@ class CBLService {
202
268
  */
203
269
  static get HeaderOffsets() {
204
270
  return {
205
- CreatorId: 0,
271
+ StructuredPrefix: 0,
272
+ CreatorId: CBLService.StructuredPrefixSize,
206
273
  DateCreated: CBLService.DateCreatedOffset,
207
274
  CblAddressCount: CBLService.CblAddressCountOffset,
208
275
  TupleSize: CBLService.TupleSizeOffset,
@@ -219,6 +286,11 @@ class CBLService {
219
286
  * @returns True if the data is encrypted, false otherwise
220
287
  */
221
288
  isEncrypted(data) {
289
+ // Check for structured block prefix first
290
+ if (data[0] === constants_1.BLOCK_HEADER.MAGIC_PREFIX) {
291
+ return false; // Structured blocks are not encrypted
292
+ }
293
+ // Check for ECIES magic byte
222
294
  return data[0] === ecies_lib_1.ECIES.PUBLIC_KEY_MAGIC;
223
295
  }
224
296
  /**
@@ -514,7 +586,7 @@ class CBLService {
514
586
  if (this.isEncrypted(data)) {
515
587
  throw new cblError_1.CblError(cblErrorType_1.CblErrorType.CblEncrypted);
516
588
  }
517
- if (!creator || !creator.privateKey) {
589
+ if (!creator || !creator.publicKey) {
518
590
  return false;
519
591
  }
520
592
  // Check if the creator ID in the header matches the provided creator
@@ -523,7 +595,8 @@ class CBLService {
523
595
  return false;
524
596
  }
525
597
  const headerLength = this.getHeaderLength(data);
526
- const headerWithoutSignature = data.subarray(0, headerLength - CBLService.CreatorSignatureSize);
598
+ // Skip the 4-byte structured prefix when getting header for signature validation
599
+ const headerWithoutPrefixAndSignature = data.subarray(CBLService.StructuredPrefixSize, headerLength - CBLService.CreatorSignatureSize);
527
600
  // Get the block size from the parameter or calculate it from the data length
528
601
  const blockSizeBuffer = new Uint8Array(constants_1.default['UINT32_SIZE']);
529
602
  (0, bufferUtils_1.writeUInt32BE)(blockSize ?? (0, blockSize_1.lengthToBlockSize)(data.length), blockSizeBuffer);
@@ -532,7 +605,7 @@ class CBLService {
532
605
  this.getCblAddressCount(data) * ecies_lib_1.CHECKSUM.SHA3_BUFFER_LENGTH);
533
606
  // Combine arrays for signing
534
607
  const toSign = (0, bufferUtils_1.concatenateUint8Arrays)([
535
- headerWithoutSignature,
608
+ headerWithoutPrefixAndSignature,
536
609
  blockSizeBuffer,
537
610
  addressList,
538
611
  ]);
@@ -724,7 +797,7 @@ class CBLService {
724
797
  * @throws {EnhancedValidationError} If block size or encryption type is invalid
725
798
  * @throws {CblError} If CBL-specific validation fails
726
799
  *
727
- * @see Requirements 5.1, 5.2, 5.3, 12.1, 12.2, 12.7
800
+ * @see Requirements 5.1, 5.2, 5.3, 12.1, 12.2, 12.7, 9.1, 9.2, 9.4, 9.5, 10.1, 10.2, 12.4
728
801
  */
729
802
  makeCblHeader(creator, dateCreated, cblAddressCount, fileDataLength, addressList, blockSize, encryptionType, extendedCBL, tupleSize = constants_1.TUPLE.SIZE) {
730
803
  // Validate inputs using Validator
@@ -749,6 +822,10 @@ class CBLService {
749
822
  this.calculateCBLAddressCapacity(blockSize, encryptionType)) {
750
823
  throw new cblError_1.CblError(cblErrorType_1.CblErrorType.AddressCountExceedsCapacity);
751
824
  }
825
+ // Determine structured block type
826
+ const structuredBlockType = extendedCBL
827
+ ? constants_1.StructuredBlockType.ExtendedCBL
828
+ : constants_1.StructuredBlockType.CBL;
752
829
  // Create buffers for header fields
753
830
  const buffers = this.createArrays();
754
831
  const timestamp = dateCreated.getTime();
@@ -766,14 +843,15 @@ class CBLService {
766
843
  // Calculate a checksum for the original data (empty for now, will be filled in later)
767
844
  const dataChecksum = new Uint8Array(constants_1.default['CHECKSUM'].SHA3_BUFFER_LENGTH);
768
845
  buffers.dataChecksum.set(dataChecksum);
769
- // Use the provider to convert creator ID to bytes
770
- const creatorIdBytes = this.enhancedProvider.toBytes(creator.id);
846
+ // Use the member's idBytes directly - it's already in the correct format
847
+ // The Member class stores both the native ID type and the raw bytes
848
+ const creatorIdBytes = creator.idBytes;
771
849
  // Validate that the provider returns the expected length
772
850
  if (creatorIdBytes.length !== this.creatorLength) {
773
851
  throw new cblError_1.CblError(cblErrorType_1.CblErrorType.InvalidStructure, `Creator ID provider returned ${creatorIdBytes.length} bytes, expected ${this.creatorLength}`);
774
852
  }
775
853
  const creatorId = creatorIdBytes;
776
- // Create base header
854
+ // Create base header (without structured prefix yet)
777
855
  const baseHeaderSize = creatorId.length +
778
856
  buffers.dateCreated.length +
779
857
  buffers.addressCount.length +
@@ -801,7 +879,7 @@ class CBLService {
801
879
  const extendedHeaderData = extendedCBL
802
880
  ? this.makeExtendedHeader(extendedCBL.fileName, extendedCBL.mimeType)
803
881
  : new Uint8Array(0);
804
- // Calculate checksum
882
+ // Calculate checksum for signing
805
883
  const toSignSize = baseHeader.length +
806
884
  extendedHeaderData.length +
807
885
  buffers.blockSize.length +
@@ -823,9 +901,29 @@ class CBLService {
823
901
  if (signatureBytes.length !== ecies_lib_1.ECIES.SIGNATURE_SIZE) {
824
902
  throw new cblError_1.CblError(cblErrorType_1.CblErrorType.InvalidSignature, `Signature length mismatch: got ${signatureBytes.length}, expected ${ecies_lib_1.ECIES.SIGNATURE_SIZE}`);
825
903
  }
826
- // Construct final header
827
- const headerData = new Uint8Array(baseHeader.length + extendedHeaderData.length + signatureBytes.length);
904
+ // Compute CRC8 over header content (after CRC8 field, before signature)
905
+ // This includes: baseHeader + extendedHeaderData (but not signature)
906
+ const crcDataSize = baseHeader.length + extendedHeaderData.length;
907
+ const crcData = new Uint8Array(crcDataSize);
908
+ crcData.set(baseHeader, 0);
909
+ crcData.set(extendedHeaderData, baseHeader.length);
910
+ const crcService = new ecies_lib_1.CrcService();
911
+ const crc8Buffer = crcService.crc8(crcData);
912
+ const crc8 = crc8Buffer[0];
913
+ // Create structured prefix: [MagicPrefix(1)][BlockType(1)][Version(1)][CRC8(1)]
914
+ const structuredPrefix = new Uint8Array(4);
915
+ structuredPrefix[0] = constants_1.BLOCK_HEADER.MAGIC_PREFIX;
916
+ structuredPrefix[1] = structuredBlockType;
917
+ structuredPrefix[2] = constants_1.BLOCK_HEADER.VERSION;
918
+ structuredPrefix[3] = crc8;
919
+ // Construct final header with structured prefix
920
+ const headerData = new Uint8Array(structuredPrefix.length +
921
+ baseHeader.length +
922
+ extendedHeaderData.length +
923
+ signatureBytes.length);
828
924
  let headerOffset = 0;
925
+ headerData.set(structuredPrefix, headerOffset);
926
+ headerOffset += structuredPrefix.length;
829
927
  headerData.set(baseHeader, headerOffset);
830
928
  headerOffset += baseHeader.length;
831
929
  headerData.set(extendedHeaderData, headerOffset);
@@ -840,9 +938,21 @@ class CBLService {
840
938
  * @returns The parsed header
841
939
  */
842
940
  parseBaseHeader(data, creatorForValidation) {
843
- if (this.isEncrypted(data)) {
941
+ // First, detect and validate the block format
942
+ const formatResult = (0, blockFormatService_1.detectBlockFormat)(data);
943
+ if (formatResult.isEncrypted) {
844
944
  throw new cblError_1.CblError(cblErrorType_1.CblErrorType.CblEncrypted);
845
945
  }
946
+ if (!formatResult.isValid) {
947
+ if (formatResult.error?.includes('encrypted')) {
948
+ throw new cblError_1.CblError(cblErrorType_1.CblErrorType.CblEncrypted);
949
+ }
950
+ if (formatResult.error?.includes('raw data')) {
951
+ throw new cblError_1.CblError(cblErrorType_1.CblErrorType.InvalidStructure, 'Data appears to be raw data without structured header');
952
+ }
953
+ throw new cblError_1.CblError(cblErrorType_1.CblErrorType.InvalidStructure, formatResult.error || 'Invalid block format');
954
+ }
955
+ // Validate signature if creator provided
846
956
  if (creatorForValidation &&
847
957
  !this.validateSignature(data, creatorForValidation)) {
848
958
  throw new cblError_1.CblError(cblErrorType_1.CblErrorType.InvalidSignature);
@@ -897,7 +1007,10 @@ class CBLService {
897
1007
  * @param mimeType The mime type
898
1008
  * @returns number of addresses that can fit in the block
899
1009
  */
900
- calculateCBLAddressCapacity(blockSize, encryptedBlockType, cbl) {
1010
+ calculateCBLAddressCapacity(blockSize, encryptedBlockType, cbl, blockCapacityCalculator) {
1011
+ // Use provided calculator or fall back to global service provider
1012
+ const calculator = blockCapacityCalculator ??
1013
+ (0, globalServiceProvider_1.getGlobalServiceProvider)().blockCapacityCalculator;
901
1014
  let blockType;
902
1015
  if (cbl) {
903
1016
  blockType =
@@ -911,8 +1024,7 @@ class CBLService {
911
1024
  ? blockType_1.default.EncryptedConstituentBlockListBlock
912
1025
  : blockType_1.default.ConstituentBlockList;
913
1026
  }
914
- const blockCapacityCalculator = new blockCapacity_service_1.BlockCapacityCalculator(this, this.eciesService);
915
- const result = blockCapacityCalculator.calculateCapacity({
1027
+ const result = calculator.calculateCapacity({
916
1028
  blockSize,
917
1029
  blockType,
918
1030
  encryptionType: encryptedBlockType,
@@ -932,8 +1044,362 @@ class CBLService {
932
1044
  // Ensure enough space for at least four addresses
933
1045
  return addressCapacity < 4 ? 0 : Math.max(0, tupleAlignedCapacity);
934
1046
  }
1047
+ // ============================================================================
1048
+ // SuperCBL Methods
1049
+ // ============================================================================
1050
+ /**
1051
+ * Check if the data is a SuperCBL
1052
+ * @param data The data to check
1053
+ * @returns True if the data is a SuperCBL, false otherwise
1054
+ */
1055
+ isSuperCbl(data) {
1056
+ if (data.length < CBLService.StructuredPrefixSize) {
1057
+ return false;
1058
+ }
1059
+ return (data[0] === constants_1.BLOCK_HEADER.MAGIC_PREFIX &&
1060
+ data[1] === constants_1.StructuredBlockType.SuperCBL);
1061
+ }
1062
+ /**
1063
+ * Get the sub-CBL count from a SuperCBL header
1064
+ * @param header The SuperCBL header data
1065
+ * @returns The number of sub-CBL references
1066
+ */
1067
+ getSuperCblSubCblCount(header) {
1068
+ if (this.isEncrypted(header)) {
1069
+ throw new cblError_1.CblError(cblErrorType_1.CblErrorType.CblEncrypted);
1070
+ }
1071
+ if (!this.isSuperCbl(header)) {
1072
+ throw new cblError_1.CblError(cblErrorType_1.CblErrorType.InvalidStructure, 'Not a SuperCBL');
1073
+ }
1074
+ const view = new DataView(header.buffer, header.byteOffset, header.byteLength);
1075
+ return view.getUint32(this.superCblHeaderOffsets.SubCblCount, false);
1076
+ }
1077
+ /**
1078
+ * Get the total block count from a SuperCBL header
1079
+ * @param header The SuperCBL header data
1080
+ * @returns The total number of blocks across all sub-CBLs
1081
+ */
1082
+ getSuperCblTotalBlockCount(header) {
1083
+ if (this.isEncrypted(header)) {
1084
+ throw new cblError_1.CblError(cblErrorType_1.CblErrorType.CblEncrypted);
1085
+ }
1086
+ if (!this.isSuperCbl(header)) {
1087
+ throw new cblError_1.CblError(cblErrorType_1.CblErrorType.InvalidStructure, 'Not a SuperCBL');
1088
+ }
1089
+ const view = new DataView(header.buffer, header.byteOffset, header.byteLength);
1090
+ return view.getUint32(this.superCblHeaderOffsets.TotalBlockCount, false);
1091
+ }
1092
+ /**
1093
+ * Get the depth from a SuperCBL header
1094
+ * @param header The SuperCBL header data
1095
+ * @returns The hierarchy depth
1096
+ */
1097
+ getSuperCblDepth(header) {
1098
+ if (this.isEncrypted(header)) {
1099
+ throw new cblError_1.CblError(cblErrorType_1.CblErrorType.CblEncrypted);
1100
+ }
1101
+ if (!this.isSuperCbl(header)) {
1102
+ throw new cblError_1.CblError(cblErrorType_1.CblErrorType.InvalidStructure, 'Not a SuperCBL');
1103
+ }
1104
+ const view = new DataView(header.buffer, header.byteOffset, header.byteLength);
1105
+ return view.getUint16(this.superCblHeaderOffsets.Depth, false);
1106
+ }
1107
+ /**
1108
+ * Get the original data length from a SuperCBL header
1109
+ * @param header The SuperCBL header data
1110
+ * @returns The original file size
1111
+ */
1112
+ getSuperCblOriginalDataLength(header) {
1113
+ if (this.isEncrypted(header)) {
1114
+ throw new cblError_1.CblError(cblErrorType_1.CblErrorType.CblEncrypted);
1115
+ }
1116
+ if (!this.isSuperCbl(header)) {
1117
+ throw new cblError_1.CblError(cblErrorType_1.CblErrorType.InvalidStructure, 'Not a SuperCBL');
1118
+ }
1119
+ const view = new DataView(header.buffer, header.byteOffset, header.byteLength);
1120
+ const bigIntValue = view.getBigUint64(this.superCblHeaderOffsets.OriginalDataLength, false);
1121
+ return Number(bigIntValue);
1122
+ }
1123
+ /**
1124
+ * Get the original data checksum from a SuperCBL header
1125
+ * @param header The SuperCBL header data
1126
+ * @returns The SHA3-512 checksum of the original data
1127
+ */
1128
+ getSuperCblOriginalDataChecksum(header) {
1129
+ if (this.isEncrypted(header)) {
1130
+ throw new cblError_1.CblError(cblErrorType_1.CblErrorType.CblEncrypted);
1131
+ }
1132
+ if (!this.isSuperCbl(header)) {
1133
+ throw new cblError_1.CblError(cblErrorType_1.CblErrorType.InvalidStructure, 'Not a SuperCBL');
1134
+ }
1135
+ const checksumData = header.subarray(this.superCblHeaderOffsets.OriginalDataChecksum, this.superCblHeaderOffsets.OriginalDataChecksum +
1136
+ CBLService.DataChecksumSize);
1137
+ return checksum_1.Checksum.fromUint8Array(checksumData);
1138
+ }
1139
+ /**
1140
+ * Get the creator signature from a SuperCBL header
1141
+ * @param header The SuperCBL header data
1142
+ * @returns The ECDSA signature
1143
+ */
1144
+ getSuperCblSignature(header) {
1145
+ if (this.isEncrypted(header)) {
1146
+ throw new cblError_1.CblError(cblErrorType_1.CblErrorType.CblEncrypted);
1147
+ }
1148
+ if (!this.isSuperCbl(header)) {
1149
+ throw new cblError_1.CblError(cblErrorType_1.CblErrorType.InvalidStructure, 'Not a SuperCBL');
1150
+ }
1151
+ return header.subarray(this.superCblHeaderOffsets.CreatorSignature, this.superCblHeaderOffsets.CreatorSignature +
1152
+ CBLService.CreatorSignatureSize);
1153
+ }
1154
+ /**
1155
+ * Get the sub-CBL checksums from a SuperCBL
1156
+ * @param data The SuperCBL data (header + address data)
1157
+ * @returns Array of sub-CBL checksums
1158
+ */
1159
+ getSuperCblSubCblChecksums(data) {
1160
+ if (this.isEncrypted(data)) {
1161
+ throw new cblError_1.CblError(cblErrorType_1.CblErrorType.CblEncrypted);
1162
+ }
1163
+ if (!this.isSuperCbl(data)) {
1164
+ throw new cblError_1.CblError(cblErrorType_1.CblErrorType.InvalidStructure, 'Not a SuperCBL');
1165
+ }
1166
+ const subCblCount = this.getSuperCblSubCblCount(data);
1167
+ const addressDataStart = this.superCblHeaderSize;
1168
+ const checksums = new Array(subCblCount);
1169
+ for (let i = 0; i < subCblCount; i++) {
1170
+ const offset = addressDataStart + i * ecies_lib_1.CHECKSUM.SHA3_BUFFER_LENGTH;
1171
+ const checksumData = data.subarray(offset, offset + ecies_lib_1.CHECKSUM.SHA3_BUFFER_LENGTH);
1172
+ checksums[i] = checksum_1.Checksum.fromUint8Array(checksumData);
1173
+ }
1174
+ return checksums;
1175
+ }
1176
+ /**
1177
+ * Create a SuperCBL header.
1178
+ *
1179
+ * @param creator - The member creating the SuperCBL
1180
+ * @param dateCreated - The creation date
1181
+ * @param subCblCount - Number of sub-CBL references
1182
+ * @param totalBlockCount - Total blocks across all sub-CBLs
1183
+ * @param depth - Hierarchy depth
1184
+ * @param originalDataLength - Original file size
1185
+ * @param originalDataChecksum - SHA3-512 checksum of original data
1186
+ * @param subCblChecksums - Array of sub-CBL checksums
1187
+ * @param blockSize - The block size
1188
+ * @returns Object containing headerData and signature
1189
+ * @throws {CblError} If validation fails
1190
+ *
1191
+ * @see Requirements 11.1, 11.2, 11.3, 11.4, 11.5
1192
+ */
1193
+ makeSuperCblHeader(creator, dateCreated, subCblCount, totalBlockCount, depth, originalDataLength, originalDataChecksum, subCblChecksums, blockSize) {
1194
+ // Validate inputs
1195
+ validator_1.Validator.validateRequired(creator, 'creator', 'makeSuperCblHeader');
1196
+ validator_1.Validator.validateRequired(dateCreated, 'dateCreated', 'makeSuperCblHeader');
1197
+ validator_1.Validator.validateRequired(originalDataChecksum, 'originalDataChecksum', 'makeSuperCblHeader');
1198
+ validator_1.Validator.validateRequired(subCblChecksums, 'subCblChecksums', 'makeSuperCblHeader');
1199
+ validator_1.Validator.validateBlockSize(blockSize, 'makeSuperCblHeader');
1200
+ if (subCblCount !== subCblChecksums.length) {
1201
+ throw new cblError_1.CblError(cblErrorType_1.CblErrorType.InvalidStructure, `SubCblCount (${subCblCount}) does not match subCblChecksums length (${subCblChecksums.length})`);
1202
+ }
1203
+ if (depth < 1 || depth > 65535) {
1204
+ throw new cblError_1.CblError(cblErrorType_1.CblErrorType.InvalidStructure, `Depth must be between 1 and 65535, got ${depth}`);
1205
+ }
1206
+ // Create buffers for header fields
1207
+ const dateBuffer = new Uint8Array(CBLService.DateSize);
1208
+ const subCblCountBuffer = new Uint8Array(CBLService.SuperCblSubCblCountSize);
1209
+ const totalBlockCountBuffer = new Uint8Array(CBLService.SuperCblTotalBlockCountSize);
1210
+ const depthBuffer = new Uint8Array(CBLService.SuperCblDepthSize);
1211
+ const dataLengthBuffer = new Uint8Array(CBLService.DataLengthSize);
1212
+ const blockSizeBuffer = new Uint8Array(constants_1.default['UINT32_SIZE']);
1213
+ const timestamp = dateCreated.getTime();
1214
+ // Write timestamp using DataView
1215
+ const dateView = new DataView(dateBuffer.buffer);
1216
+ dateView.setUint32(0, Math.floor(timestamp / 0x100000000), false);
1217
+ dateView.setUint32(constants_1.default['UINT32_SIZE'], timestamp % 0x100000000, false);
1218
+ // Write sub-CBL count
1219
+ const subCblCountView = new DataView(subCblCountBuffer.buffer);
1220
+ subCblCountView.setUint32(0, subCblCount, false);
1221
+ // Write total block count
1222
+ const totalBlockCountView = new DataView(totalBlockCountBuffer.buffer);
1223
+ totalBlockCountView.setUint32(0, totalBlockCount, false);
1224
+ // Write depth
1225
+ const depthView = new DataView(depthBuffer.buffer);
1226
+ depthView.setUint16(0, depth, false);
1227
+ // Write original data length
1228
+ const dataLengthView = new DataView(dataLengthBuffer.buffer);
1229
+ dataLengthView.setBigUint64(0, BigInt(originalDataLength), false);
1230
+ // Write block size
1231
+ (0, bufferUtils_1.writeUInt32BE)(blockSize, blockSizeBuffer);
1232
+ // Get creator ID bytes
1233
+ const creatorIdBytes = creator.idBytes;
1234
+ if (creatorIdBytes.length !== this.creatorLength) {
1235
+ throw new cblError_1.CblError(cblErrorType_1.CblErrorType.InvalidStructure, `Creator ID provider returned ${creatorIdBytes.length} bytes, expected ${this.creatorLength}`);
1236
+ }
1237
+ // Create address list from sub-CBL checksums
1238
+ const addressList = new Uint8Array(subCblCount * ecies_lib_1.CHECKSUM.SHA3_BUFFER_LENGTH);
1239
+ for (let i = 0; i < subCblCount; i++) {
1240
+ addressList.set(subCblChecksums[i].toUint8Array(), i * ecies_lib_1.CHECKSUM.SHA3_BUFFER_LENGTH);
1241
+ }
1242
+ // Create base header (without structured prefix)
1243
+ const baseHeaderSize = creatorIdBytes.length +
1244
+ dateBuffer.length +
1245
+ subCblCountBuffer.length +
1246
+ totalBlockCountBuffer.length +
1247
+ depthBuffer.length +
1248
+ dataLengthBuffer.length +
1249
+ CBLService.DataChecksumSize;
1250
+ const baseHeader = new Uint8Array(baseHeaderSize);
1251
+ let offset = 0;
1252
+ // Copy base header fields
1253
+ baseHeader.set(creatorIdBytes, offset);
1254
+ offset += creatorIdBytes.length;
1255
+ baseHeader.set(dateBuffer, offset);
1256
+ offset += dateBuffer.length;
1257
+ baseHeader.set(subCblCountBuffer, offset);
1258
+ offset += subCblCountBuffer.length;
1259
+ baseHeader.set(totalBlockCountBuffer, offset);
1260
+ offset += totalBlockCountBuffer.length;
1261
+ baseHeader.set(depthBuffer, offset);
1262
+ offset += depthBuffer.length;
1263
+ baseHeader.set(dataLengthBuffer, offset);
1264
+ offset += dataLengthBuffer.length;
1265
+ baseHeader.set(originalDataChecksum.toUint8Array(), offset);
1266
+ // Calculate checksum for signing
1267
+ const toSignSize = baseHeader.length + blockSizeBuffer.length + addressList.length;
1268
+ const toSign = new Uint8Array(toSignSize);
1269
+ let signOffset = 0;
1270
+ toSign.set(baseHeader, signOffset);
1271
+ signOffset += baseHeader.length;
1272
+ toSign.set(blockSizeBuffer, signOffset);
1273
+ signOffset += blockSizeBuffer.length;
1274
+ toSign.set(addressList, signOffset);
1275
+ const checksum = this.checksumService.calculateChecksum(toSign);
1276
+ const signatureBytes = (creator instanceof ecies_lib_1.Member && creator.privateKey
1277
+ ? new Uint8Array(this.eciesService.signMessage(creator.privateKey.value, checksum.toUint8Array()))
1278
+ : new Uint8Array(ecies_lib_1.ECIES.SIGNATURE_SIZE));
1279
+ // Validate signature length
1280
+ if (signatureBytes.length !== ecies_lib_1.ECIES.SIGNATURE_SIZE) {
1281
+ throw new cblError_1.CblError(cblErrorType_1.CblErrorType.InvalidSignature, `Signature length mismatch: got ${signatureBytes.length}, expected ${ecies_lib_1.ECIES.SIGNATURE_SIZE}`);
1282
+ }
1283
+ // Compute CRC8 over header content (after CRC8 field, before signature)
1284
+ const crcService = new ecies_lib_1.CrcService();
1285
+ const crc8Buffer = crcService.crc8(baseHeader);
1286
+ const crc8 = crc8Buffer[0];
1287
+ // Create structured prefix: [MagicPrefix(1)][BlockType(1)][Version(1)][CRC8(1)]
1288
+ const structuredPrefix = new Uint8Array(4);
1289
+ structuredPrefix[0] = constants_1.BLOCK_HEADER.MAGIC_PREFIX;
1290
+ structuredPrefix[1] = constants_1.StructuredBlockType.SuperCBL;
1291
+ structuredPrefix[2] = constants_1.BLOCK_HEADER.VERSION;
1292
+ structuredPrefix[3] = crc8;
1293
+ // Construct final header with structured prefix
1294
+ const headerData = new Uint8Array(structuredPrefix.length + baseHeader.length + signatureBytes.length);
1295
+ let headerOffset = 0;
1296
+ headerData.set(structuredPrefix, headerOffset);
1297
+ headerOffset += structuredPrefix.length;
1298
+ headerData.set(baseHeader, headerOffset);
1299
+ headerOffset += baseHeader.length;
1300
+ headerData.set(signatureBytes, headerOffset);
1301
+ return { headerData, signature: signatureBytes };
1302
+ }
1303
+ /**
1304
+ * Validate the signature of a SuperCBL.
1305
+ *
1306
+ * @param data - The SuperCBL data (header + address data)
1307
+ * @param creator - The creator of the SuperCBL
1308
+ * @param blockSize - The block size (optional, defaults to calculated from data length)
1309
+ * @returns True if the signature is valid, false otherwise
1310
+ * @throws {CblError} If the data is encrypted or not a SuperCBL
1311
+ *
1312
+ * @see Requirements 11.4, 11.6
1313
+ */
1314
+ validateSuperCblSignature(data, creator, blockSize) {
1315
+ if (this.isEncrypted(data)) {
1316
+ throw new cblError_1.CblError(cblErrorType_1.CblErrorType.CblEncrypted);
1317
+ }
1318
+ if (!this.isSuperCbl(data)) {
1319
+ throw new cblError_1.CblError(cblErrorType_1.CblErrorType.InvalidStructure, 'Not a SuperCBL');
1320
+ }
1321
+ if (!creator || !creator.publicKey) {
1322
+ return false;
1323
+ }
1324
+ // Check if the creator ID in the header matches the provided creator
1325
+ const headerCreatorId = this.getCreatorId(data);
1326
+ if (!this.enhancedProvider.equals(headerCreatorId, creator.id)) {
1327
+ return false;
1328
+ }
1329
+ // Get header without prefix and signature for verification
1330
+ const headerWithoutPrefixAndSignature = data.subarray(CBLService.StructuredPrefixSize, this.superCblHeaderSize - CBLService.CreatorSignatureSize);
1331
+ // Get the block size from the parameter or calculate it from the data length
1332
+ const blockSizeBuffer = new Uint8Array(constants_1.default['UINT32_SIZE']);
1333
+ (0, bufferUtils_1.writeUInt32BE)(blockSize ?? (0, blockSize_1.lengthToBlockSize)(data.length), blockSizeBuffer);
1334
+ // Get address list (sub-CBL checksums)
1335
+ const subCblCount = this.getSuperCblSubCblCount(data);
1336
+ const addressList = data.subarray(this.superCblHeaderSize, this.superCblHeaderSize + subCblCount * ecies_lib_1.CHECKSUM.SHA3_BUFFER_LENGTH);
1337
+ // Combine arrays for signing
1338
+ const toSign = (0, bufferUtils_1.concatenateUint8Arrays)([
1339
+ headerWithoutPrefixAndSignature,
1340
+ blockSizeBuffer,
1341
+ addressList,
1342
+ ]);
1343
+ const checksum = this.checksumService.calculateChecksum(toSign);
1344
+ const signature = this.getSuperCblSignature(data);
1345
+ return this.eciesService.verifyMessage(creator.publicKey, checksum.toUint8Array(), signature);
1346
+ }
1347
+ /**
1348
+ * Parse a SuperCBL header from data.
1349
+ *
1350
+ * @param data - The SuperCBL data (header + address data)
1351
+ * @param creatorForValidation - Optional creator to validate signature against
1352
+ * @param blockSize - Optional block size for signature validation (required if validating signature)
1353
+ * @returns The parsed SuperCBL header
1354
+ * @throws {CblError} If the data is encrypted, not a SuperCBL, or validation fails
1355
+ *
1356
+ * @see Requirements 11.1, 11.2
1357
+ */
1358
+ parseSuperCblHeader(data, creatorForValidation, blockSize) {
1359
+ // First, detect and validate the block format
1360
+ const formatResult = (0, blockFormatService_1.detectBlockFormat)(data);
1361
+ if (formatResult.isEncrypted) {
1362
+ throw new cblError_1.CblError(cblErrorType_1.CblErrorType.CblEncrypted);
1363
+ }
1364
+ if (!formatResult.isValid) {
1365
+ if (formatResult.error?.includes('encrypted')) {
1366
+ throw new cblError_1.CblError(cblErrorType_1.CblErrorType.CblEncrypted);
1367
+ }
1368
+ if (formatResult.error?.includes('raw data')) {
1369
+ throw new cblError_1.CblError(cblErrorType_1.CblErrorType.InvalidStructure, 'Data appears to be raw data without structured header');
1370
+ }
1371
+ throw new cblError_1.CblError(cblErrorType_1.CblErrorType.InvalidStructure, formatResult.error || 'Invalid block format');
1372
+ }
1373
+ // Validate that this is a SuperCBL
1374
+ if (!this.isSuperCbl(data)) {
1375
+ throw new cblError_1.CblError(cblErrorType_1.CblErrorType.InvalidStructure, `Expected SuperCBL (block type 0x03), got block type 0x${data[1].toString(16).padStart(2, '0')}`);
1376
+ }
1377
+ // Validate signature if creator provided
1378
+ if (creatorForValidation &&
1379
+ !this.validateSuperCblSignature(data, creatorForValidation, blockSize)) {
1380
+ throw new cblError_1.CblError(cblErrorType_1.CblErrorType.InvalidSignature);
1381
+ }
1382
+ // Extract sub-CBL checksums
1383
+ const subCblCount = this.getSuperCblSubCblCount(data);
1384
+ const subCblChecksums = this.getSuperCblSubCblChecksums(data);
1385
+ return {
1386
+ creatorId: this.getCreatorId(data),
1387
+ dateCreated: this.getDateCreated(data),
1388
+ subCblCount,
1389
+ totalBlockCount: this.getSuperCblTotalBlockCount(data),
1390
+ depth: this.getSuperCblDepth(data),
1391
+ originalDataLength: this.getSuperCblOriginalDataLength(data),
1392
+ originalDataChecksum: this.getSuperCblOriginalDataChecksum(data),
1393
+ creatorSignature: this.getSuperCblSignature(data),
1394
+ subCblChecksums,
1395
+ };
1396
+ }
935
1397
  }
936
1398
  exports.CBLService = CBLService;
1399
+ /**
1400
+ * Length of the structured block header prefix (magic, type, version, CRC8)
1401
+ */
1402
+ CBLService.StructuredPrefixSize = 4;
937
1403
  /**
938
1404
  * Length of the date field in the header
939
1405
  * Date consists of two 32-bit unsigned integers (high/low)
@@ -976,4 +1442,19 @@ CBLService.FileNameLengthSize = constants_1.default['UINT16_SIZE'];
976
1442
  * Length of the mime type length field in the header
977
1443
  */
978
1444
  CBLService.MimeTypeLengthSize = constants_1.default['UINT8_SIZE'];
1445
+ // ============================================================================
1446
+ // SuperCBL Header Constants
1447
+ // ============================================================================
1448
+ /**
1449
+ * Length of the sub-CBL count field in SuperCBL header
1450
+ */
1451
+ CBLService.SuperCblSubCblCountSize = constants_1.default['UINT32_SIZE'];
1452
+ /**
1453
+ * Length of the total block count field in SuperCBL header
1454
+ */
1455
+ CBLService.SuperCblTotalBlockCountSize = constants_1.default['UINT32_SIZE'];
1456
+ /**
1457
+ * Length of the depth field in SuperCBL header
1458
+ */
1459
+ CBLService.SuperCblDepthSize = constants_1.default['UINT16_SIZE'];
979
1460
  //# sourceMappingURL=cblService.js.map