@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.
- package/brightchain-lib/BLOCK_COVERAGE_AUDIT.md +169 -0
- package/package.json +2 -2
- package/src/browser.d.ts +1 -4
- package/src/browser.d.ts.map +1 -1
- package/src/browser.js +6 -9
- package/src/browser.js.map +1 -1
- package/src/lib/blockMetadata.d.ts +10 -9
- package/src/lib/blockMetadata.d.ts.map +1 -1
- package/src/lib/blockMetadata.js +20 -36
- package/src/lib/blockMetadata.js.map +1 -1
- package/src/lib/blocks/base.d.ts +23 -0
- package/src/lib/blocks/base.d.ts.map +1 -1
- package/src/lib/blocks/base.js +33 -15
- package/src/lib/blocks/base.js.map +1 -1
- package/src/lib/blocks/cbl.d.ts +34 -1
- package/src/lib/blocks/cbl.d.ts.map +1 -1
- package/src/lib/blocks/cbl.js +36 -3
- package/src/lib/blocks/cbl.js.map +1 -1
- package/src/lib/blocks/cblBase.d.ts +45 -1
- package/src/lib/blocks/cblBase.d.ts.map +1 -1
- package/src/lib/blocks/cblBase.js +106 -52
- package/src/lib/blocks/cblBase.js.map +1 -1
- package/src/lib/blocks/encrypted.d.ts +34 -5
- package/src/lib/blocks/encrypted.d.ts.map +1 -1
- package/src/lib/blocks/encrypted.js +129 -24
- package/src/lib/blocks/encrypted.js.map +1 -1
- package/src/lib/blocks/encryptedBlockFactory.js +2 -2
- package/src/lib/blocks/encryptedBlockFactory.js.map +1 -1
- package/src/lib/blocks/ephemeral.d.ts +35 -9
- package/src/lib/blocks/ephemeral.d.ts.map +1 -1
- package/src/lib/blocks/ephemeral.js +71 -42
- package/src/lib/blocks/ephemeral.js.map +1 -1
- package/src/lib/blocks/extendedCbl.d.ts +1 -1
- package/src/lib/blocks/extendedCbl.d.ts.map +1 -1
- package/src/lib/blocks/extendedCbl.js +7 -7
- package/src/lib/blocks/extendedCbl.js.map +1 -1
- package/src/lib/blocks/handle.js +2 -2
- package/src/lib/blocks/handle.js.map +1 -1
- package/src/lib/blocks/handleTuple.js +2 -2
- package/src/lib/blocks/handleTuple.js.map +1 -1
- package/src/lib/blocks/random.d.ts +2 -1
- package/src/lib/blocks/random.d.ts.map +1 -1
- package/src/lib/blocks/random.js +7 -4
- package/src/lib/blocks/random.js.map +1 -1
- package/src/lib/blocks/rawData.d.ts +3 -1
- package/src/lib/blocks/rawData.d.ts.map +1 -1
- package/src/lib/blocks/rawData.js +31 -6
- package/src/lib/blocks/rawData.js.map +1 -1
- package/src/lib/blocks/whitened.d.ts +2 -1
- package/src/lib/blocks/whitened.d.ts.map +1 -1
- package/src/lib/blocks/whitened.js +7 -5
- package/src/lib/blocks/whitened.js.map +1 -1
- package/src/lib/config/constants.d.ts +2 -0
- package/src/lib/config/constants.d.ts.map +1 -0
- package/src/lib/config/constants.js +5 -0
- package/src/lib/config/constants.js.map +1 -0
- package/src/lib/constants.d.ts +37 -0
- package/src/lib/constants.d.ts.map +1 -1
- package/src/lib/constants.js +40 -1
- package/src/lib/constants.js.map +1 -1
- package/src/lib/cpus/index.d.ts +2 -3
- package/src/lib/cpus/index.d.ts.map +1 -1
- package/src/lib/cpus/index.js +5 -0
- package/src/lib/cpus/index.js.map +1 -1
- package/src/lib/cpus/instructionFactory.d.ts +56 -0
- package/src/lib/cpus/instructionFactory.d.ts.map +1 -0
- package/src/lib/cpus/instructionFactory.js +190 -0
- package/src/lib/cpus/instructionFactory.js.map +1 -0
- package/src/lib/cpus/instructionTables.d.ts +14 -12
- package/src/lib/cpus/instructionTables.d.ts.map +1 -1
- package/src/lib/cpus/instructionTables.js +17 -147
- package/src/lib/cpus/instructionTables.js.map +1 -1
- package/src/lib/cpus/riscvCpu.d.ts +51 -0
- package/src/lib/cpus/riscvCpu.d.ts.map +1 -0
- package/src/lib/cpus/riscvCpu.js +131 -0
- package/src/lib/cpus/riscvCpu.js.map +1 -0
- package/src/lib/documents/base/document.d.ts +1 -1
- package/src/lib/documents/base/document.d.ts.map +1 -1
- package/src/lib/documents/member/index.d.ts +2 -0
- package/src/lib/documents/member/index.d.ts.map +1 -1
- package/src/lib/documents/member/index.js +2 -0
- package/src/lib/documents/member/index.js.map +1 -1
- package/src/lib/documents/member/memberDocument.d.ts +4 -3
- package/src/lib/documents/member/memberDocument.d.ts.map +1 -1
- package/src/lib/documents/member/memberDocument.js +11 -8
- package/src/lib/documents/member/memberDocument.js.map +1 -1
- package/src/lib/documents/member/memberHydration.d.ts.map +1 -1
- package/src/lib/documents/member/memberHydration.js +7 -21
- package/src/lib/documents/member/memberHydration.js.map +1 -1
- package/src/lib/documents/member/memberOperational.d.ts.map +1 -1
- package/src/lib/documents/member/memberOperational.js +2 -2
- package/src/lib/documents/member/memberOperational.js.map +1 -1
- package/src/lib/documents/member/memberProfileDocument.d.ts +138 -0
- package/src/lib/documents/member/memberProfileDocument.d.ts.map +1 -0
- package/src/lib/documents/member/memberProfileDocument.js +326 -0
- package/src/lib/documents/member/memberProfileDocument.js.map +1 -0
- package/src/lib/documents/member/memberProfileHydration.d.ts +12 -0
- package/src/lib/documents/member/memberProfileHydration.d.ts.map +1 -0
- package/src/lib/documents/member/memberProfileHydration.js +143 -0
- package/src/lib/documents/member/memberProfileHydration.js.map +1 -0
- package/src/lib/documents/network/networkDocument.d.ts.map +1 -1
- package/src/lib/documents/network/networkDocument.js +4 -3
- package/src/lib/documents/network/networkDocument.js.map +1 -1
- package/src/lib/documents/quorumDocument.d.ts +3 -14
- package/src/lib/documents/quorumDocument.d.ts.map +1 -1
- package/src/lib/documents/quorumDocument.js +4 -2
- package/src/lib/documents/quorumDocument.js.map +1 -1
- package/src/lib/encryptedBlockMetadata.d.ts +13 -5
- package/src/lib/encryptedBlockMetadata.d.ts.map +1 -1
- package/src/lib/encryptedBlockMetadata.js +31 -23
- package/src/lib/encryptedBlockMetadata.js.map +1 -1
- package/src/lib/enumerations/blockSize.d.ts +2 -2
- package/src/lib/enumerations/blockSize.d.ts.map +1 -1
- package/src/lib/enumerations/blockSize.js +15 -15
- package/src/lib/enumerations/blockSize.js.map +1 -1
- package/src/lib/enumerations/{stringNames.d.ts → brightChainStrings.d.ts} +4 -3
- package/src/lib/enumerations/brightChainStrings.d.ts.map +1 -0
- package/src/lib/enumerations/brightChainStrings.js +437 -0
- package/src/lib/enumerations/brightChainStrings.js.map +1 -0
- package/src/lib/enumerations/cblErrorType.d.ts +1 -0
- package/src/lib/enumerations/cblErrorType.d.ts.map +1 -1
- package/src/lib/enumerations/cblErrorType.js +1 -0
- package/src/lib/enumerations/cblErrorType.js.map +1 -1
- package/src/lib/enumerations/index.d.ts +1 -1
- package/src/lib/enumerations/index.d.ts.map +1 -1
- package/src/lib/enumerations/index.js +1 -1
- package/src/lib/enumerations/index.js.map +1 -1
- package/src/lib/enumerations/votingDerivationErrorType.d.ts +2 -2
- package/src/lib/enumerations/votingDerivationErrorType.d.ts.map +1 -1
- package/src/lib/enumerations/votingDerivationErrorType.js +11 -11
- package/src/lib/enumerations/votingDerivationErrorType.js.map +1 -1
- package/src/lib/ephemeralBlockMetadata.d.ts +13 -8
- package/src/lib/ephemeralBlockMetadata.d.ts.map +1 -1
- package/src/lib/ephemeralBlockMetadata.js +27 -19
- package/src/lib/ephemeralBlockMetadata.js.map +1 -1
- package/src/lib/errors/block/blockAccess.d.ts +2 -2
- package/src/lib/errors/block/blockAccess.d.ts.map +1 -1
- package/src/lib/errors/block/blockAccess.js +8 -8
- package/src/lib/errors/block/blockAccess.js.map +1 -1
- package/src/lib/errors/block/blockCapacity.d.ts +2 -2
- package/src/lib/errors/block/blockCapacity.d.ts.map +1 -1
- package/src/lib/errors/block/blockCapacity.js +8 -8
- package/src/lib/errors/block/blockCapacity.js.map +1 -1
- package/src/lib/errors/block/blockError.d.ts +2 -2
- package/src/lib/errors/block/blockError.d.ts.map +1 -1
- package/src/lib/errors/block/blockError.js +16 -16
- package/src/lib/errors/block/blockError.js.map +1 -1
- package/src/lib/errors/block/blockMetadata.d.ts +2 -2
- package/src/lib/errors/block/blockMetadata.d.ts.map +1 -1
- package/src/lib/errors/block/blockMetadata.js +8 -8
- package/src/lib/errors/block/blockMetadata.js.map +1 -1
- package/src/lib/errors/block/blockValidation.d.ts +2 -2
- package/src/lib/errors/block/blockValidation.d.ts.map +1 -1
- package/src/lib/errors/block/blockValidation.js +36 -36
- package/src/lib/errors/block/blockValidation.js.map +1 -1
- package/src/lib/errors/block/cannotDecrypt.d.ts.map +1 -1
- package/src/lib/errors/block/cannotDecrypt.js +2 -2
- package/src/lib/errors/block/cannotDecrypt.js.map +1 -1
- package/src/lib/errors/block/cannotEncrypt.d.ts.map +1 -1
- package/src/lib/errors/block/cannotEncrypt.js +2 -2
- package/src/lib/errors/block/cannotEncrypt.js.map +1 -1
- package/src/lib/errors/blockServiceError.d.ts +2 -2
- package/src/lib/errors/blockServiceError.d.ts.map +1 -1
- package/src/lib/errors/blockServiceError.js +15 -15
- package/src/lib/errors/blockServiceError.js.map +1 -1
- package/src/lib/errors/bufferError.d.ts.map +1 -1
- package/src/lib/errors/bufferError.js +2 -2
- package/src/lib/errors/bufferError.js.map +1 -1
- package/src/lib/errors/cblError.d.ts +2 -2
- package/src/lib/errors/cblError.d.ts.map +1 -1
- package/src/lib/errors/cblError.js +37 -36
- package/src/lib/errors/cblError.js.map +1 -1
- package/src/lib/errors/checksumMismatch.js +2 -2
- package/src/lib/errors/checksumMismatch.js.map +1 -1
- package/src/lib/errors/disposed.js +2 -2
- package/src/lib/errors/disposed.js.map +1 -1
- package/src/lib/errors/document.d.ts +2 -2
- package/src/lib/errors/document.d.ts.map +1 -1
- package/src/lib/errors/document.js +5 -5
- package/src/lib/errors/document.js.map +1 -1
- package/src/lib/errors/eciesError.d.ts +2 -2
- package/src/lib/errors/eciesError.d.ts.map +1 -1
- package/src/lib/errors/eciesError.js +20 -20
- package/src/lib/errors/eciesError.js.map +1 -1
- package/src/lib/errors/extendedCblError.d.ts +2 -2
- package/src/lib/errors/extendedCblError.d.ts.map +1 -1
- package/src/lib/errors/extendedCblError.js +25 -25
- package/src/lib/errors/extendedCblError.js.map +1 -1
- package/src/lib/errors/failedToHydrate.js +2 -2
- package/src/lib/errors/failedToHydrate.js.map +1 -1
- package/src/lib/errors/failedToSerialize.js +2 -2
- package/src/lib/errors/failedToSerialize.js.map +1 -1
- package/src/lib/errors/fecError.d.ts +2 -2
- package/src/lib/errors/fecError.d.ts.map +1 -1
- package/src/lib/errors/fecError.js +19 -19
- package/src/lib/errors/fecError.js.map +1 -1
- package/src/lib/errors/handleTupleError.d.ts +2 -2
- package/src/lib/errors/handleTupleError.d.ts.map +1 -1
- package/src/lib/errors/handleTupleError.js +5 -5
- package/src/lib/errors/handleTupleError.js.map +1 -1
- package/src/lib/errors/index.d.ts +0 -6
- package/src/lib/errors/index.d.ts.map +1 -1
- package/src/lib/errors/index.js +0 -9
- package/src/lib/errors/index.js.map +1 -1
- package/src/lib/errors/invalidBlockSize.js +2 -2
- package/src/lib/errors/invalidBlockSize.js.map +1 -1
- package/src/lib/errors/invalidBlockSizeLength.js +2 -2
- package/src/lib/errors/invalidBlockSizeLength.js.map +1 -1
- package/src/lib/errors/invalidCredentials.js +2 -2
- package/src/lib/errors/invalidCredentials.js.map +1 -1
- package/src/lib/errors/invalidIDFormat.js +2 -2
- package/src/lib/errors/invalidIDFormat.js.map +1 -1
- package/src/lib/errors/invalidSessionID.js +2 -2
- package/src/lib/errors/invalidSessionID.js.map +1 -1
- package/src/lib/errors/invalidTupleCount.js +2 -2
- package/src/lib/errors/invalidTupleCount.js.map +1 -1
- package/src/lib/errors/isolatedKeyError.d.ts +2 -2
- package/src/lib/errors/isolatedKeyError.d.ts.map +1 -1
- package/src/lib/errors/isolatedKeyError.js +7 -7
- package/src/lib/errors/isolatedKeyError.js.map +1 -1
- package/src/lib/errors/memberError.d.ts +2 -2
- package/src/lib/errors/memberError.d.ts.map +1 -1
- package/src/lib/errors/memberError.js +27 -27
- package/src/lib/errors/memberError.js.map +1 -1
- package/src/lib/errors/memoryTupleError.d.ts +2 -2
- package/src/lib/errors/memoryTupleError.d.ts.map +1 -1
- package/src/lib/errors/memoryTupleError.js +7 -7
- package/src/lib/errors/memoryTupleError.js.map +1 -1
- package/src/lib/errors/metadataMismatch.js +2 -2
- package/src/lib/errors/metadataMismatch.js.map +1 -1
- package/src/lib/errors/multiEncryptedError.d.ts +2 -2
- package/src/lib/errors/multiEncryptedError.d.ts.map +1 -1
- package/src/lib/errors/multiEncryptedError.js +11 -11
- package/src/lib/errors/multiEncryptedError.js.map +1 -1
- package/src/lib/errors/notImplemented.js +2 -2
- package/src/lib/errors/notImplemented.js.map +1 -1
- package/src/lib/errors/quorumError.d.ts +2 -2
- package/src/lib/errors/quorumError.d.ts.map +1 -1
- package/src/lib/errors/quorumError.js +8 -8
- package/src/lib/errors/quorumError.js.map +1 -1
- package/src/lib/errors/sealingError.d.ts +2 -2
- package/src/lib/errors/sealingError.d.ts.map +1 -1
- package/src/lib/errors/sealingError.js +9 -9
- package/src/lib/errors/sealingError.js.map +1 -1
- package/src/lib/errors/secureStorage.d.ts +2 -2
- package/src/lib/errors/secureStorage.d.ts.map +1 -1
- package/src/lib/errors/secureStorage.js +4 -4
- package/src/lib/errors/secureStorage.js.map +1 -1
- package/src/lib/errors/storeError.d.ts +2 -2
- package/src/lib/errors/storeError.d.ts.map +1 -1
- package/src/lib/errors/storeError.js +20 -20
- package/src/lib/errors/storeError.js.map +1 -1
- package/src/lib/errors/streamError.d.ts +2 -2
- package/src/lib/errors/streamError.d.ts.map +1 -1
- package/src/lib/errors/streamError.js +8 -8
- package/src/lib/errors/streamError.js.map +1 -1
- package/src/lib/errors/symmetricError.d.ts +2 -2
- package/src/lib/errors/symmetricError.d.ts.map +1 -1
- package/src/lib/errors/symmetricError.js +3 -3
- package/src/lib/errors/symmetricError.js.map +1 -1
- package/src/lib/errors/systemKeyringError.d.ts +2 -2
- package/src/lib/errors/systemKeyringError.d.ts.map +1 -1
- package/src/lib/errors/systemKeyringError.js +4 -4
- package/src/lib/errors/systemKeyringError.js.map +1 -1
- package/src/lib/errors/tupleError.d.ts +2 -2
- package/src/lib/errors/tupleError.d.ts.map +1 -1
- package/src/lib/errors/tupleError.js +13 -13
- package/src/lib/errors/tupleError.js.map +1 -1
- package/src/lib/errors/typedError.d.ts +2 -2
- package/src/lib/errors/typedError.d.ts.map +1 -1
- package/src/lib/errors/typedWithReasonError.d.ts +3 -3
- package/src/lib/errors/typedWithReasonError.d.ts.map +1 -1
- package/src/lib/errors/typedWithReasonError.js.map +1 -1
- package/src/lib/errors/userNotFound.js +2 -2
- package/src/lib/errors/userNotFound.js.map +1 -1
- package/src/lib/errors/whitenedError.d.ts +2 -2
- package/src/lib/errors/whitenedError.d.ts.map +1 -1
- package/src/lib/errors/whitenedError.js +5 -5
- package/src/lib/errors/whitenedError.js.map +1 -1
- package/src/lib/factories/blockFactory.d.ts +23 -0
- package/src/lib/factories/blockFactory.d.ts.map +1 -0
- package/src/lib/factories/blockFactory.js +43 -0
- package/src/lib/factories/blockFactory.js.map +1 -0
- package/src/lib/i18n/index.d.ts +2 -2
- package/src/lib/i18n/index.d.ts.map +1 -1
- package/src/lib/i18n/index.js +2 -2
- package/src/lib/i18n/index.js.map +1 -1
- package/src/lib/index.d.ts +9 -0
- package/src/lib/index.d.ts.map +1 -1
- package/src/lib/index.js +12 -0
- package/src/lib/index.js.map +1 -1
- package/src/lib/init.d.ts +10 -0
- package/src/lib/init.d.ts.map +1 -1
- package/src/lib/init.js +24 -4
- package/src/lib/init.js.map +1 -1
- package/src/lib/interfaces/blockCapacity.d.ts +8 -0
- package/src/lib/interfaces/blockCapacity.d.ts.map +1 -1
- package/src/lib/interfaces/blocks/encrypted.d.ts +1 -1
- package/src/lib/interfaces/blocks/encrypted.d.ts.map +1 -1
- package/src/lib/interfaces/blocks/ephemeral.d.ts +4 -7
- package/src/lib/interfaces/blocks/ephemeral.d.ts.map +1 -1
- package/src/lib/interfaces/blocks/headers/index.d.ts +1 -0
- package/src/lib/interfaces/blocks/headers/index.d.ts.map +1 -1
- package/src/lib/interfaces/blocks/headers/superCblHeader.d.ts +63 -0
- package/src/lib/interfaces/blocks/headers/superCblHeader.d.ts.map +1 -0
- package/src/lib/interfaces/{storage/superCbl.js → blocks/headers/superCblHeader.js} +1 -1
- package/src/lib/interfaces/blocks/headers/superCblHeader.js.map +1 -0
- package/src/lib/interfaces/blocks/metadata/index.d.ts +0 -1
- package/src/lib/interfaces/blocks/metadata/index.d.ts.map +1 -1
- package/src/lib/interfaces/constants.d.ts +29 -0
- package/src/lib/interfaces/constants.d.ts.map +1 -1
- package/src/lib/interfaces/document/quorumDocument.d.ts +15 -0
- package/src/lib/interfaces/document/quorumDocument.d.ts.map +1 -0
- package/src/lib/interfaces/document/quorumDocument.js +3 -0
- package/src/lib/interfaces/document/quorumDocument.js.map +1 -0
- package/src/lib/interfaces/member/memberData.d.ts +2 -0
- package/src/lib/interfaces/member/memberData.d.ts.map +1 -1
- package/src/lib/interfaces/member/profileStorage.d.ts +77 -0
- package/src/lib/interfaces/member/profileStorage.d.ts.map +1 -0
- package/src/lib/interfaces/member/profileStorage.js +3 -0
- package/src/lib/interfaces/member/profileStorage.js.map +1 -0
- package/src/lib/interfaces/serviceProvider.interface.d.ts +11 -8
- package/src/lib/interfaces/serviceProvider.interface.d.ts.map +1 -1
- package/src/lib/interfaces/services/cblServices.d.ts +148 -0
- package/src/lib/interfaces/services/cblServices.d.ts.map +1 -0
- package/src/lib/interfaces/services/cblServices.js +11 -0
- package/src/lib/interfaces/services/cblServices.js.map +1 -0
- package/src/lib/interfaces/services/ephemeralBlockServices.d.ts +15 -0
- package/src/lib/interfaces/services/ephemeralBlockServices.d.ts.map +1 -0
- package/src/lib/interfaces/services/ephemeralBlockServices.js +3 -0
- package/src/lib/interfaces/services/ephemeralBlockServices.js.map +1 -0
- package/src/lib/interfaces/services/index.d.ts +1 -0
- package/src/lib/interfaces/services/index.d.ts.map +1 -1
- package/src/lib/interfaces/storage/index.d.ts +0 -1
- package/src/lib/interfaces/storage/index.d.ts.map +1 -1
- package/src/lib/logging/blockLogger.d.ts +218 -0
- package/src/lib/logging/blockLogger.d.ts.map +1 -0
- package/src/lib/logging/blockLogger.js +341 -0
- package/src/lib/logging/blockLogger.js.map +1 -0
- package/src/lib/logging/index.d.ts +24 -0
- package/src/lib/logging/index.d.ts.map +1 -0
- package/src/lib/logging/index.js +27 -0
- package/src/lib/logging/index.js.map +1 -0
- package/src/lib/logging/structuredLogger.d.ts +42 -0
- package/src/lib/logging/structuredLogger.d.ts.map +1 -0
- package/src/lib/logging/structuredLogger.js +93 -0
- package/src/lib/logging/structuredLogger.js.map +1 -0
- package/src/lib/primeTupleGeneratorStream.d.ts.map +1 -1
- package/src/lib/primeTupleGeneratorStream.js +4 -2
- package/src/lib/primeTupleGeneratorStream.js.map +1 -1
- package/src/lib/quorum.d.ts.map +1 -1
- package/src/lib/quorum.js +7 -5
- package/src/lib/quorum.js.map +1 -1
- package/src/lib/quorumDataRecord.d.ts +1 -1
- package/src/lib/quorumDataRecord.d.ts.map +1 -1
- package/src/lib/quorumDataRecord.js +5 -4
- package/src/lib/quorumDataRecord.js.map +1 -1
- package/src/lib/schemas/network/networkDocumentSchema.d.ts.map +1 -1
- package/src/lib/schemas/network/networkDocumentSchema.js +9 -8
- package/src/lib/schemas/network/networkDocumentSchema.js.map +1 -1
- package/src/lib/schemas/quorumDocument.d.ts +1 -1
- package/src/lib/schemas/quorumDocument.d.ts.map +1 -1
- package/src/lib/schemas/quorumDocument.js +6 -4
- package/src/lib/schemas/quorumDocument.js.map +1 -1
- package/src/lib/security/dosProtection.d.ts +13 -0
- package/src/lib/security/dosProtection.d.ts.map +1 -0
- package/src/lib/security/dosProtection.js +29 -0
- package/src/lib/security/dosProtection.js.map +1 -0
- package/src/lib/security/dosProtectionValidator.d.ts +27 -0
- package/src/lib/security/dosProtectionValidator.d.ts.map +1 -0
- package/src/lib/security/dosProtectionValidator.js +60 -0
- package/src/lib/security/dosProtectionValidator.js.map +1 -0
- package/src/lib/security/index.d.ts +12 -0
- package/src/lib/security/index.d.ts.map +1 -0
- package/src/lib/security/index.js +15 -0
- package/src/lib/security/index.js.map +1 -0
- package/src/lib/security/rateLimitTypes.d.ts +20 -0
- package/src/lib/security/rateLimitTypes.d.ts.map +1 -0
- package/src/lib/security/rateLimitTypes.js +15 -0
- package/src/lib/security/rateLimitTypes.js.map +1 -0
- package/src/lib/security/rateLimiter.d.ts +29 -0
- package/src/lib/security/rateLimiter.d.ts.map +1 -0
- package/src/lib/security/rateLimiter.js +107 -0
- package/src/lib/security/rateLimiter.js.map +1 -0
- package/src/lib/security/securityAuditLogger.d.ts +59 -0
- package/src/lib/security/securityAuditLogger.d.ts.map +1 -0
- package/src/lib/security/securityAuditLogger.js +120 -0
- package/src/lib/security/securityAuditLogger.js.map +1 -0
- package/src/lib/security/securityEvent.d.ts +45 -0
- package/src/lib/security/securityEvent.d.ts.map +1 -0
- package/src/lib/security/securityEvent.js +44 -0
- package/src/lib/security/securityEvent.js.map +1 -0
- package/src/lib/services/blockCapacity.service.d.ts.map +1 -1
- package/src/lib/services/blockCapacity.service.js +14 -5
- package/src/lib/services/blockCapacity.service.js.map +1 -1
- package/src/lib/services/blockFormatService.d.ts +41 -0
- package/src/lib/services/blockFormatService.d.ts.map +1 -0
- package/src/lib/services/blockFormatService.js +252 -0
- package/src/lib/services/blockFormatService.js.map +1 -0
- package/src/lib/services/blockService.d.ts +6 -0
- package/src/lib/services/blockService.d.ts.map +1 -1
- package/src/lib/services/blockService.js +130 -28
- package/src/lib/services/blockService.js.map +1 -1
- package/src/lib/services/cblService.d.ts +162 -3
- package/src/lib/services/cblService.d.ts.map +1 -1
- package/src/lib/services/cblService.js +502 -21
- package/src/lib/services/cblService.js.map +1 -1
- package/src/lib/services/globalServiceProvider.d.ts +4 -0
- package/src/lib/services/globalServiceProvider.d.ts.map +1 -0
- package/src/lib/services/globalServiceProvider.js +26 -0
- package/src/lib/services/globalServiceProvider.js.map +1 -0
- package/src/lib/services/index.d.ts +0 -2
- package/src/lib/services/index.d.ts.map +1 -1
- package/src/lib/services/index.js +0 -2
- package/src/lib/services/index.js.map +1 -1
- package/src/lib/services/member/memberCblService.d.ts.map +1 -1
- package/src/lib/services/member/memberCblService.js +11 -8
- package/src/lib/services/member/memberCblService.js.map +1 -1
- package/src/lib/services/memberStore.d.ts +8 -0
- package/src/lib/services/memberStore.d.ts.map +1 -1
- package/src/lib/services/memberStore.js +105 -76
- package/src/lib/services/memberStore.js.map +1 -1
- package/src/lib/services/sealing.service.d.ts +1 -1
- package/src/lib/services/sealing.service.d.ts.map +1 -1
- package/src/lib/services/sealing.service.js +4 -13
- package/src/lib/services/sealing.service.js.map +1 -1
- package/src/lib/services/service.provider.d.ts +2 -0
- package/src/lib/services/service.provider.d.ts.map +1 -1
- package/src/lib/services/service.provider.js +7 -12
- package/src/lib/services/service.provider.js.map +1 -1
- package/src/lib/services/serviceLocator.d.ts.map +1 -1
- package/src/lib/services/serviceLocator.js +2 -0
- package/src/lib/services/serviceLocator.js.map +1 -1
- package/src/lib/services/tuple.service.js +4 -4
- package/src/lib/services/tuple.service.js.map +1 -1
- package/src/lib/sharedTypes.d.ts +1 -22
- package/src/lib/sharedTypes.d.ts.map +1 -1
- package/src/lib/sharedTypes.js.map +1 -1
- package/src/lib/strings/englishUs.d.ts.map +1 -1
- package/src/lib/strings/englishUs.js +392 -392
- package/src/lib/strings/englishUs.js.map +1 -1
- package/src/lib/test/service.initializer.helper.d.ts +2 -1
- package/src/lib/test/service.initializer.helper.d.ts.map +1 -1
- package/src/lib/test/service.initializer.helper.js +11 -15
- package/src/lib/test/service.initializer.helper.js.map +1 -1
- package/src/lib/types/schema.d.ts +38 -0
- package/src/lib/types/schema.d.ts.map +1 -0
- package/src/lib/types/schema.js +7 -0
- package/src/lib/types/schema.js.map +1 -0
- package/src/lib/utils/constantTime.d.ts +27 -0
- package/src/lib/utils/constantTime.d.ts.map +1 -0
- package/src/lib/utils/constantTime.js +67 -0
- package/src/lib/utils/constantTime.js.map +1 -0
- package/src/lib/utils/constantTimeXor.d.ts +76 -0
- package/src/lib/utils/constantTimeXor.d.ts.map +1 -0
- package/src/lib/utils/constantTimeXor.js +122 -0
- package/src/lib/utils/constantTimeXor.js.map +1 -0
- package/src/lib/utils/dateUtils.d.ts +67 -0
- package/src/lib/utils/dateUtils.d.ts.map +1 -0
- package/src/lib/utils/dateUtils.js +136 -0
- package/src/lib/utils/dateUtils.js.map +1 -0
- package/src/lib/utils/index.d.ts +57 -0
- package/src/lib/utils/index.d.ts.map +1 -1
- package/src/lib/utils/index.js +69 -0
- package/src/lib/utils/index.js.map +1 -1
- package/src/lib/utils/typeGuards.d.ts +102 -0
- package/src/lib/utils/typeGuards.d.ts.map +1 -0
- package/src/lib/utils/typeGuards.js +244 -0
- package/src/lib/utils/typeGuards.js.map +1 -0
- package/src/lib/cpus/instructions.d.ts +0 -35
- package/src/lib/cpus/instructions.d.ts.map +0 -1
- package/src/lib/cpus/instructions.js +0 -285
- package/src/lib/cpus/instructions.js.map +0 -1
- package/src/lib/cpus/mach-o.d.ts +0 -7
- package/src/lib/cpus/mach-o.d.ts.map +0 -1
- package/src/lib/cpus/mach-o.js +0 -99
- package/src/lib/cpus/mach-o.js.map +0 -1
- package/src/lib/cpus/x86Cpu.d.ts +0 -21
- package/src/lib/cpus/x86Cpu.d.ts.map +0 -1
- package/src/lib/cpus/x86Cpu.js +0 -89
- package/src/lib/cpus/x86Cpu.js.map +0 -1
- package/src/lib/enumerations/stringNames.d.ts.map +0 -1
- package/src/lib/enumerations/stringNames.js +0 -436
- package/src/lib/enumerations/stringNames.js.map +0 -1
- package/src/lib/errors/superCbl.d.ts +0 -24
- package/src/lib/errors/superCbl.d.ts.map +0 -1
- package/src/lib/errors/superCbl.js +0 -43
- package/src/lib/errors/superCbl.js.map +0 -1
- package/src/lib/interfaces/storage/superCbl.d.ts +0 -102
- package/src/lib/interfaces/storage/superCbl.d.ts.map +0 -1
- package/src/lib/interfaces/storage/superCbl.js.map +0 -1
- package/src/lib/services/jsonCblCapacity.service.d.ts +0 -80
- package/src/lib/services/jsonCblCapacity.service.d.ts.map +0 -1
- package/src/lib/services/jsonCblCapacity.service.js +0 -147
- package/src/lib/services/jsonCblCapacity.service.js.map +0 -1
- package/src/lib/services/superCbl.service.d.ts +0 -68
- package/src/lib/services/superCbl.service.d.ts.map +0 -1
- package/src/lib/services/superCbl.service.js +0 -213
- 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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
770
|
-
|
|
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
|
-
//
|
|
827
|
-
|
|
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
|
-
|
|
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
|
|
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
|