@brightchain/brightchain-lib 0.8.0 → 0.8.1

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@brightchain/brightchain-lib",
3
- "version": "0.8.0",
3
+ "version": "0.8.1",
4
4
  "description": "BrightChain core library - browser-compatible blockchain storage",
5
5
  "main": "src/index.js",
6
6
  "types": "src/index.d.ts",
@@ -1 +1 @@
1
- {"version":3,"file":"encryptedBlockFactory.d.ts","sourceRoot":"","sources":["../../../../../brightchain-lib/src/lib/blocks/encryptedBlockFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,MAAM,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAEvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAE9D,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAMtD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAI7C,qBAAa,qBAAqB;IAChC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAwB;IAC5D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAyB;IAEhE,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAWzB;WAEO,iBAAiB,CAC7B,IAAI,EAAE,SAAS,EACf,WAAW,EAAE,KAAK,GAAG,SAAS,UAAU,GAAG,UAAU,EACnD,IAAI,EAAE,SAAS,EACf,QAAQ,EAAE,aAAa,EACvB,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,sBAAsB,CAAC,GAAG,CAAC,EACrC,gBAAgB,EAAE,MAAM,CAAC,GAAG,CAAC,EAC7B,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,OAAO,KAChB,cAAc,GAClB,IAAI;WAIa,WAAW,CAAC,GAAG,SAAS,UAAU,GAAG,UAAU,EACjE,IAAI,EAAE,SAAS,EACf,QAAQ,EAAE,aAAa,EACvB,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,EACpB,WAAW,CAAC,EAAE,IAAI,EAClB,sBAAsB,CAAC,EAAE,MAAM,EAC/B,OAAO,UAAO,EACd,UAAU,UAAO,GAChB,OAAO,CAAC,cAAc,CAAC;CA6I3B"}
1
+ {"version":3,"file":"encryptedBlockFactory.d.ts","sourceRoot":"","sources":["../../../../../brightchain-lib/src/lib/blocks/encryptedBlockFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,MAAM,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAEvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAE9D,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAOtD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAI7C,qBAAa,qBAAqB;IAChC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAwB;IAC5D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAyB;IAEhE,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAWzB;WAEO,iBAAiB,CAC7B,IAAI,EAAE,SAAS,EACf,WAAW,EAAE,KAAK,GAAG,SAAS,UAAU,GAAG,UAAU,EACnD,IAAI,EAAE,SAAS,EACf,QAAQ,EAAE,aAAa,EACvB,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,sBAAsB,CAAC,GAAG,CAAC,EACrC,gBAAgB,EAAE,MAAM,CAAC,GAAG,CAAC,EAC7B,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,OAAO,KAChB,cAAc,GAClB,IAAI;WAIa,WAAW,CAAC,GAAG,SAAS,UAAU,GAAG,UAAU,EACjE,IAAI,EAAE,SAAS,EACf,QAAQ,EAAE,aAAa,EACvB,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,EACpB,WAAW,CAAC,EAAE,IAAI,EAClB,sBAAsB,CAAC,EAAE,MAAM,EAC/B,OAAO,UAAO,EACd,UAAU,UAAO,GAChB,OAAO,CAAC,cAAc,CAAC;CA+J3B"}
@@ -11,6 +11,7 @@ const ephemeralBlockMetadata_1 = require("../ephemeralBlockMetadata");
11
11
  const block_1 = require("../errors/block");
12
12
  const checksumMismatch_1 = require("../errors/checksumMismatch");
13
13
  const checksum_service_1 = require("../services/checksum.service");
14
+ const service_provider_1 = require("../services/service.provider");
14
15
  const browserConfig_1 = require("../browserConfig");
15
16
  class EncryptedBlockFactory {
16
17
  static registerBlockType(type, constructor) {
@@ -22,13 +23,17 @@ class EncryptedBlockFactory {
22
23
  if (!Constructor) {
23
24
  throw new block_1.BlockValidationError(blockValidationErrorType_1.BlockValidationErrorType.InvalidBlockType, type);
24
25
  }
25
- // Calculate the actual data length and metadata
26
- const payloadLength = blockSize - ecies_lib_1.ECIES.WITH_LENGTH.FIXED_OVERHEAD_SIZE;
26
+ // Get ID provider to calculate header size
27
+ const idProvider = service_provider_1.ServiceProvider.getInstance().idProvider;
28
+ // Calculate the actual payload capacity
29
+ // Header = 1 byte (encryption type) + idSize + ECIES.WITH_LENGTH.FIXED_OVERHEAD_SIZE
30
+ const headerSize = 1 + idProvider.byteLength + ecies_lib_1.ECIES.WITH_LENGTH.FIXED_OVERHEAD_SIZE;
31
+ const payloadLength = blockSize - headerSize;
27
32
  // Validate data length
28
33
  if (data.length < 1) {
29
34
  throw new block_1.BlockValidationError(blockValidationErrorType_1.BlockValidationErrorType.DataLengthTooShort);
30
35
  }
31
- // Total data length must not exceed block size
36
+ // Total data length must not exceed available payload capacity
32
37
  if (data.length > payloadLength) {
33
38
  throw new block_1.BlockValidationError(blockValidationErrorType_1.BlockValidationErrorType.DataLengthExceedsCapacity);
34
39
  }
@@ -49,24 +54,31 @@ class EncryptedBlockFactory {
49
54
  const finalChecksum = checksum ?? computedChecksum;
50
55
  // Create metadata with correct length
51
56
  const updatedMetadata = new ephemeralBlockMetadata_1.EphemeralBlockMetadata(blockSize, type, blockDataType_1.BlockDataType.EncryptedData, lengthBeforeEncryption ?? data.length, creator, dateCreated);
52
- // If data is already encrypted (starts with 0x04), use it directly
53
- if (data[0] === ecies_lib_1.ECIES.PUBLIC_KEY_MAGIC) {
54
- // Create a properly sized buffer
55
- const finalData = new Uint8Array(blockSize);
56
- finalData.set(data);
57
- return new Constructor(type, blockDataType_1.BlockDataType.EncryptedData, finalData, finalChecksum, encryptedBlockMetadata_1.EncryptedBlockMetadata.fromEphemeralBlockMetadata(updatedMetadata, blockEncryptionType_1.BlockEncryptionType.SingleRecipient, 1), creator, canRead, canPersist);
58
- }
59
57
  // Create final data buffer with proper size
60
58
  const finalData = new Uint8Array(blockSize);
61
- // Generate encryption headers
59
+ // If data is already encrypted (starts with BlockEncryptionType), use it directly
60
+ if (data[0] === blockEncryptionType_1.BlockEncryptionType.SingleRecipient ||
61
+ data[0] === blockEncryptionType_1.BlockEncryptionType.MultiRecipient) {
62
+ finalData.set(data);
63
+ return new Constructor(type, blockDataType_1.BlockDataType.EncryptedData, finalData, finalChecksum, encryptedBlockMetadata_1.EncryptedBlockMetadata.fromEphemeralBlockMetadata(updatedMetadata, data[0], 1), creator, canRead, canPersist);
64
+ }
65
+ // Generate encryption headers for unencrypted data
66
+ let offset = 0;
67
+ // Set encryption type byte
68
+ finalData[offset] = blockEncryptionType_1.BlockEncryptionType.SingleRecipient;
69
+ offset += 1;
70
+ // Set recipient ID
71
+ const recipientId = new Uint8Array(creator.idBytes);
72
+ finalData.set(recipientId.subarray(0, idProvider.byteLength), offset);
73
+ offset += idProvider.byteLength;
74
+ // Generate ECIES WITH_LENGTH header components
62
75
  const ephemeralPublicKey = new Uint8Array(ecies_lib_1.ECIES.PUBLIC_KEY_LENGTH);
63
76
  const keyData = (0, browserCrypto_1.randomBytes)(ecies_lib_1.ECIES.PUBLIC_KEY_LENGTH - 1);
64
- ephemeralPublicKey[0] = ecies_lib_1.ECIES.PUBLIC_KEY_MAGIC; // Set ECIES public key prefix
65
- ephemeralPublicKey.set(keyData, 1); // Copy after prefix
77
+ ephemeralPublicKey[0] = ecies_lib_1.ECIES.PUBLIC_KEY_MAGIC;
78
+ ephemeralPublicKey.set(keyData, 1);
66
79
  const iv = (0, browserCrypto_1.randomBytes)(ecies_lib_1.ECIES.IV_SIZE);
67
80
  const authTag = (0, browserCrypto_1.randomBytes)(ecies_lib_1.ECIES.AUTH_TAG_SIZE);
68
- // Copy headers to final buffer
69
- let offset = 0;
81
+ // Copy ECIES headers to final buffer
70
82
  finalData.set(ephemeralPublicKey, offset);
71
83
  offset += ecies_lib_1.ECIES.PUBLIC_KEY_LENGTH;
72
84
  finalData.set(iv, offset);
@@ -83,7 +95,8 @@ class EncryptedBlockFactory {
83
95
  throw new block_1.BlockValidationError(blockValidationErrorType_1.BlockValidationErrorType.DataBufferIsTruncated);
84
96
  }
85
97
  // Verify the ephemeral public key is valid
86
- const ephemeralKeyCheck = finalDataCopy.subarray(0, ecies_lib_1.ECIES.PUBLIC_KEY_LENGTH);
98
+ const ephemeralKeyOffset = 1 + idProvider.byteLength;
99
+ const ephemeralKeyCheck = finalDataCopy.subarray(ephemeralKeyOffset, ephemeralKeyOffset + ecies_lib_1.ECIES.PUBLIC_KEY_LENGTH);
87
100
  if (ephemeralKeyCheck[0] !== ecies_lib_1.ECIES.PUBLIC_KEY_MAGIC) {
88
101
  throw new block_1.BlockValidationError(blockValidationErrorType_1.BlockValidationErrorType.InvalidEphemeralPublicKeyLength);
89
102
  }
@@ -1 +1 @@
1
- {"version":3,"file":"encryptedBlockFactory.js","sourceRoot":"","sources":["../../../../../brightchain-lib/src/lib/blocks/encryptedBlockFactory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"encryptedBlockFactory.js","sourceRoot":"","sources":["../../../../../brightchain-lib/src/lib/blocks/encryptedBlockFactory.ts"],"names":[],"mappings":"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"}