@brightchain/brightchain-api-lib 0.14.0 → 0.15.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 (242) hide show
  1. package/package.json +5 -5
  2. package/src/index.d.ts +3 -0
  3. package/src/index.d.ts.map +1 -1
  4. package/src/index.js +5 -0
  5. package/src/index.js.map +1 -1
  6. package/src/lib/application.d.ts +1 -0
  7. package/src/lib/application.d.ts.map +1 -1
  8. package/src/lib/application.js +23 -0
  9. package/src/lib/application.js.map +1 -1
  10. package/src/lib/auth/aclEnforcedAvailability.d.ts +57 -0
  11. package/src/lib/auth/aclEnforcedAvailability.d.ts.map +1 -0
  12. package/src/lib/auth/aclEnforcedAvailability.js +87 -0
  13. package/src/lib/auth/aclEnforcedAvailability.js.map +1 -0
  14. package/src/lib/auth/aclEnforcedBlockStore.d.ts +66 -0
  15. package/src/lib/auth/aclEnforcedBlockStore.d.ts.map +1 -0
  16. package/src/lib/auth/aclEnforcedBlockStore.js +83 -0
  17. package/src/lib/auth/aclEnforcedBlockStore.js.map +1 -0
  18. package/src/lib/auth/ecdsaNodeAuthenticator.d.ts +46 -0
  19. package/src/lib/auth/ecdsaNodeAuthenticator.d.ts.map +1 -0
  20. package/src/lib/auth/ecdsaNodeAuthenticator.js +110 -0
  21. package/src/lib/auth/ecdsaNodeAuthenticator.js.map +1 -0
  22. package/src/lib/auth/index.d.ts +7 -0
  23. package/src/lib/auth/index.d.ts.map +1 -0
  24. package/src/lib/auth/index.js +13 -0
  25. package/src/lib/auth/index.js.map +1 -0
  26. package/src/lib/auth/poolAclBootstrap.d.ts +36 -0
  27. package/src/lib/auth/poolAclBootstrap.d.ts.map +1 -0
  28. package/src/lib/auth/poolAclBootstrap.js +64 -0
  29. package/src/lib/auth/poolAclBootstrap.js.map +1 -0
  30. package/src/lib/auth/poolAclStore.d.ts +77 -0
  31. package/src/lib/auth/poolAclStore.d.ts.map +1 -0
  32. package/src/lib/auth/poolAclStore.js +189 -0
  33. package/src/lib/auth/poolAclStore.js.map +1 -0
  34. package/src/lib/auth/poolAclUpdater.d.ts +79 -0
  35. package/src/lib/auth/poolAclUpdater.d.ts.map +1 -0
  36. package/src/lib/auth/poolAclUpdater.js +144 -0
  37. package/src/lib/auth/poolAclUpdater.js.map +1 -0
  38. package/src/lib/availability/availabilityService.d.ts +2 -2
  39. package/src/lib/availability/availabilityService.d.ts.map +1 -1
  40. package/src/lib/availability/availabilityService.js +12 -5
  41. package/src/lib/availability/availabilityService.js.map +1 -1
  42. package/src/lib/availability/blockRegistry.d.ts +45 -3
  43. package/src/lib/availability/blockRegistry.d.ts.map +1 -1
  44. package/src/lib/availability/blockRegistry.js +123 -5
  45. package/src/lib/availability/blockRegistry.js.map +1 -1
  46. package/src/lib/availability/discoveryProtocol.d.ts +30 -1
  47. package/src/lib/availability/discoveryProtocol.d.ts.map +1 -1
  48. package/src/lib/availability/discoveryProtocol.js +76 -0
  49. package/src/lib/availability/discoveryProtocol.js.map +1 -1
  50. package/src/lib/availability/gossipService.d.ts +45 -6
  51. package/src/lib/availability/gossipService.d.ts.map +1 -1
  52. package/src/lib/availability/gossipService.js +177 -5
  53. package/src/lib/availability/gossipService.js.map +1 -1
  54. package/src/lib/availability/reconciliationService.d.ts +88 -1
  55. package/src/lib/availability/reconciliationService.d.ts.map +1 -1
  56. package/src/lib/availability/reconciliationService.js +246 -48
  57. package/src/lib/availability/reconciliationService.js.map +1 -1
  58. package/src/lib/blockFetch/blockFetcher.d.ts +100 -0
  59. package/src/lib/blockFetch/blockFetcher.d.ts.map +1 -0
  60. package/src/lib/blockFetch/blockFetcher.js +279 -0
  61. package/src/lib/blockFetch/blockFetcher.js.map +1 -0
  62. package/src/lib/blockFetch/fetchQueue.d.ts +88 -0
  63. package/src/lib/blockFetch/fetchQueue.d.ts.map +1 -0
  64. package/src/lib/blockFetch/fetchQueue.js +204 -0
  65. package/src/lib/blockFetch/fetchQueue.js.map +1 -0
  66. package/src/lib/blockFetch/httpBlockFetchTransport.d.ts +65 -0
  67. package/src/lib/blockFetch/httpBlockFetchTransport.d.ts.map +1 -0
  68. package/src/lib/blockFetch/httpBlockFetchTransport.js +104 -0
  69. package/src/lib/blockFetch/httpBlockFetchTransport.js.map +1 -0
  70. package/src/lib/blockFetch/index.d.ts +10 -0
  71. package/src/lib/blockFetch/index.d.ts.map +1 -0
  72. package/src/lib/blockFetch/index.js +13 -0
  73. package/src/lib/blockFetch/index.js.map +1 -0
  74. package/src/lib/controllers/api/brightpass.d.ts +72 -0
  75. package/src/lib/controllers/api/brightpass.d.ts.map +1 -0
  76. package/src/lib/controllers/api/brightpass.js +577 -0
  77. package/src/lib/controllers/api/brightpass.js.map +1 -0
  78. package/src/lib/controllers/api/channels.d.ts +122 -0
  79. package/src/lib/controllers/api/channels.d.ts.map +1 -0
  80. package/src/lib/controllers/api/channels.js +701 -0
  81. package/src/lib/controllers/api/channels.js.map +1 -0
  82. package/src/lib/controllers/api/conversations.d.ts +89 -0
  83. package/src/lib/controllers/api/conversations.d.ts.map +1 -0
  84. package/src/lib/controllers/api/conversations.js +259 -0
  85. package/src/lib/controllers/api/conversations.js.map +1 -0
  86. package/src/lib/controllers/api/emails.d.ts +122 -0
  87. package/src/lib/controllers/api/emails.d.ts.map +1 -0
  88. package/src/lib/controllers/api/emails.js +494 -0
  89. package/src/lib/controllers/api/emails.js.map +1 -0
  90. package/src/lib/controllers/api/explodingMessages.d.ts +79 -0
  91. package/src/lib/controllers/api/explodingMessages.d.ts.map +1 -0
  92. package/src/lib/controllers/api/explodingMessages.js +378 -0
  93. package/src/lib/controllers/api/explodingMessages.js.map +1 -0
  94. package/src/lib/controllers/api/groups.d.ts +94 -0
  95. package/src/lib/controllers/api/groups.d.ts.map +1 -0
  96. package/src/lib/controllers/api/groups.js +484 -0
  97. package/src/lib/controllers/api/groups.js.map +1 -0
  98. package/src/lib/controllers/api/index.d.ts +6 -0
  99. package/src/lib/controllers/api/index.d.ts.map +1 -1
  100. package/src/lib/controllers/api/index.js +6 -0
  101. package/src/lib/controllers/api/index.js.map +1 -1
  102. package/src/lib/controllers/api/messages.d.ts.map +1 -1
  103. package/src/lib/controllers/api/messages.js +2 -1
  104. package/src/lib/controllers/api/messages.js.map +1 -1
  105. package/src/lib/controllers/api/sync.d.ts +38 -2
  106. package/src/lib/controllers/api/sync.d.ts.map +1 -1
  107. package/src/lib/controllers/api/sync.js +89 -0
  108. package/src/lib/controllers/api/sync.js.map +1 -1
  109. package/src/lib/controllers/crypto/gitController.d.ts +70 -0
  110. package/src/lib/controllers/crypto/gitController.d.ts.map +1 -0
  111. package/src/lib/controllers/crypto/gitController.js +306 -0
  112. package/src/lib/controllers/crypto/gitController.js.map +1 -0
  113. package/src/lib/controllers/crypto/index.d.ts +3 -0
  114. package/src/lib/controllers/crypto/index.d.ts.map +1 -0
  115. package/src/lib/controllers/crypto/index.js +6 -0
  116. package/src/lib/controllers/crypto/index.js.map +1 -0
  117. package/src/lib/controllers/crypto/walletController.d.ts +64 -0
  118. package/src/lib/controllers/crypto/walletController.d.ts.map +1 -0
  119. package/src/lib/controllers/crypto/walletController.js +260 -0
  120. package/src/lib/controllers/crypto/walletController.js.map +1 -0
  121. package/src/lib/controllers/identity/deviceController.d.ts +96 -0
  122. package/src/lib/controllers/identity/deviceController.d.ts.map +1 -0
  123. package/src/lib/controllers/identity/deviceController.js +355 -0
  124. package/src/lib/controllers/identity/deviceController.js.map +1 -0
  125. package/src/lib/controllers/identity/directoryController.d.ts +75 -0
  126. package/src/lib/controllers/identity/directoryController.d.ts.map +1 -0
  127. package/src/lib/controllers/identity/directoryController.js +288 -0
  128. package/src/lib/controllers/identity/directoryController.js.map +1 -0
  129. package/src/lib/controllers/identity/identityProofController.d.ts +94 -0
  130. package/src/lib/controllers/identity/identityProofController.d.ts.map +1 -0
  131. package/src/lib/controllers/identity/identityProofController.js +454 -0
  132. package/src/lib/controllers/identity/identityProofController.js.map +1 -0
  133. package/src/lib/controllers/identity/index.d.ts +4 -0
  134. package/src/lib/controllers/identity/index.d.ts.map +1 -0
  135. package/src/lib/controllers/identity/index.js +7 -0
  136. package/src/lib/controllers/identity/index.js.map +1 -0
  137. package/src/lib/controllers/index.d.ts +2 -0
  138. package/src/lib/controllers/index.d.ts.map +1 -1
  139. package/src/lib/controllers/index.js +2 -0
  140. package/src/lib/controllers/index.js.map +1 -1
  141. package/src/lib/encryption/encryptedMetadataService.d.ts +87 -0
  142. package/src/lib/encryption/encryptedMetadataService.d.ts.map +1 -0
  143. package/src/lib/encryption/encryptedMetadataService.js +224 -0
  144. package/src/lib/encryption/encryptedMetadataService.js.map +1 -0
  145. package/src/lib/encryption/encryptionAwareReplication.d.ts +76 -0
  146. package/src/lib/encryption/encryptionAwareReplication.d.ts.map +1 -0
  147. package/src/lib/encryption/encryptionAwareReplication.js +116 -0
  148. package/src/lib/encryption/encryptionAwareReplication.js.map +1 -0
  149. package/src/lib/encryption/errors.d.ts +49 -0
  150. package/src/lib/encryption/errors.d.ts.map +1 -0
  151. package/src/lib/encryption/errors.js +80 -0
  152. package/src/lib/encryption/errors.js.map +1 -0
  153. package/src/lib/encryption/index.d.ts +6 -0
  154. package/src/lib/encryption/index.d.ts.map +1 -0
  155. package/src/lib/encryption/index.js +9 -0
  156. package/src/lib/encryption/index.js.map +1 -0
  157. package/src/lib/encryption/poolEncryptionService.d.ts +94 -0
  158. package/src/lib/encryption/poolEncryptionService.d.ts.map +1 -0
  159. package/src/lib/encryption/poolEncryptionService.js +252 -0
  160. package/src/lib/encryption/poolEncryptionService.js.map +1 -0
  161. package/src/lib/encryption/poolKeyManager.d.ts +82 -0
  162. package/src/lib/encryption/poolKeyManager.d.ts.map +1 -0
  163. package/src/lib/encryption/poolKeyManager.js +156 -0
  164. package/src/lib/encryption/poolKeyManager.js.map +1 -0
  165. package/src/lib/environment.d.ts +3 -0
  166. package/src/lib/environment.d.ts.map +1 -1
  167. package/src/lib/environment.js +5 -0
  168. package/src/lib/environment.js.map +1 -1
  169. package/src/lib/interfaces/environment.d.ts +7 -1
  170. package/src/lib/interfaces/environment.d.ts.map +1 -1
  171. package/src/lib/interfaces/index.d.ts +0 -1
  172. package/src/lib/interfaces/index.d.ts.map +1 -1
  173. package/src/lib/interfaces/requests/getBlockDataRequest.d.ts +12 -0
  174. package/src/lib/interfaces/requests/getBlockDataRequest.d.ts.map +1 -0
  175. package/src/lib/interfaces/{blockStore.js → requests/getBlockDataRequest.js} +1 -1
  176. package/src/lib/interfaces/requests/getBlockDataRequest.js.map +1 -0
  177. package/src/lib/interfaces/requests/index.d.ts +1 -0
  178. package/src/lib/interfaces/requests/index.d.ts.map +1 -1
  179. package/src/lib/routers/api.d.ts +54 -1
  180. package/src/lib/routers/api.d.ts.map +1 -1
  181. package/src/lib/routers/api.js +77 -0
  182. package/src/lib/routers/api.js.map +1 -1
  183. package/src/lib/services/blockStore.d.ts +5 -2
  184. package/src/lib/services/blockStore.d.ts.map +1 -1
  185. package/src/lib/services/blockStore.js +4 -0
  186. package/src/lib/services/blockStore.js.map +1 -1
  187. package/src/lib/services/brightpass/auditLogger.d.ts +77 -0
  188. package/src/lib/services/brightpass/auditLogger.d.ts.map +1 -0
  189. package/src/lib/services/brightpass/auditLogger.js +184 -0
  190. package/src/lib/services/brightpass/auditLogger.js.map +1 -0
  191. package/src/lib/services/brightpass/vaultEncryption.d.ts +82 -0
  192. package/src/lib/services/brightpass/vaultEncryption.d.ts.map +1 -0
  193. package/src/lib/services/brightpass/vaultEncryption.js +144 -0
  194. package/src/lib/services/brightpass/vaultEncryption.js.map +1 -0
  195. package/src/lib/services/brightpass.d.ts +294 -0
  196. package/src/lib/services/brightpass.d.ts.map +1 -0
  197. package/src/lib/services/brightpass.js +1260 -0
  198. package/src/lib/services/brightpass.js.map +1 -0
  199. package/src/lib/services/eventNotificationSystem.d.ts +69 -3
  200. package/src/lib/services/eventNotificationSystem.d.ts.map +1 -1
  201. package/src/lib/services/eventNotificationSystem.js +200 -0
  202. package/src/lib/services/eventNotificationSystem.js.map +1 -1
  203. package/src/lib/services/expirationScheduler.d.ts +90 -0
  204. package/src/lib/services/expirationScheduler.d.ts.map +1 -0
  205. package/src/lib/services/expirationScheduler.js +131 -0
  206. package/src/lib/services/expirationScheduler.js.map +1 -0
  207. package/src/lib/services/fecUsageExample.d.ts +2 -2
  208. package/src/lib/services/index.d.ts +2 -0
  209. package/src/lib/services/index.d.ts.map +1 -1
  210. package/src/lib/services/index.js +2 -0
  211. package/src/lib/services/index.js.map +1 -1
  212. package/src/lib/services/paginationService.d.ts +18 -0
  213. package/src/lib/services/paginationService.d.ts.map +1 -0
  214. package/src/lib/services/paginationService.js +32 -0
  215. package/src/lib/services/paginationService.js.map +1 -0
  216. package/src/lib/services/presenceService.d.ts +76 -0
  217. package/src/lib/services/presenceService.d.ts.map +1 -0
  218. package/src/lib/services/presenceService.js +143 -0
  219. package/src/lib/services/presenceService.js.map +1 -0
  220. package/src/lib/services/wireConversationPromotion.d.ts +23 -0
  221. package/src/lib/services/wireConversationPromotion.d.ts.map +1 -0
  222. package/src/lib/services/wireConversationPromotion.js +26 -0
  223. package/src/lib/services/wireConversationPromotion.js.map +1 -0
  224. package/src/lib/stores/availabilityAwareBlockStore.d.ts +115 -10
  225. package/src/lib/stores/availabilityAwareBlockStore.d.ts.map +1 -1
  226. package/src/lib/stores/availabilityAwareBlockStore.js +267 -23
  227. package/src/lib/stores/availabilityAwareBlockStore.js.map +1 -1
  228. package/src/lib/stores/diskBlockAsyncStore.d.ts +81 -2
  229. package/src/lib/stores/diskBlockAsyncStore.d.ts.map +1 -1
  230. package/src/lib/stores/diskBlockAsyncStore.js +297 -10
  231. package/src/lib/stores/diskBlockAsyncStore.js.map +1 -1
  232. package/src/lib/utils/communicationValidation.d.ts +44 -0
  233. package/src/lib/utils/communicationValidation.d.ts.map +1 -0
  234. package/src/lib/utils/communicationValidation.js +291 -0
  235. package/src/lib/utils/communicationValidation.js.map +1 -0
  236. package/src/lib/utils/emailValidation.d.ts +19 -0
  237. package/src/lib/utils/emailValidation.d.ts.map +1 -0
  238. package/src/lib/utils/emailValidation.js +232 -0
  239. package/src/lib/utils/emailValidation.js.map +1 -0
  240. package/src/lib/interfaces/blockStore.d.ts +0 -7
  241. package/src/lib/interfaces/blockStore.d.ts.map +0 -1
  242. package/src/lib/interfaces/blockStore.js.map +0 -1
@@ -0,0 +1,184 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AuditLogger = void 0;
4
+ const brightchain_lib_1 = require("@brightchain/brightchain-lib");
5
+ const ecies_lib_1 = require("@digitaldefiance/ecies-lib");
6
+ /**
7
+ * AuditLogger - Stores audit log entries as encrypted blocks
8
+ *
9
+ * Supports two modes:
10
+ * 1. In-memory mode (default): Entries stored in memory array for testing/development
11
+ * 2. Block store mode: Entries persisted as encrypted blocks in BrightChain's block store
12
+ *
13
+ * Entries are append-only and retrieved in reverse chronological order.
14
+ *
15
+ * Requirements: 4.1, 4.2, 4.3, 4.4
16
+ */
17
+ class AuditLogger {
18
+ /**
19
+ * Create an AuditLogger instance.
20
+ *
21
+ * @param blockStore - Optional block store for encrypted persistence (Req 4.1)
22
+ * @param systemMember - Optional system member with public key for encryption (Req 4.3)
23
+ * @param batchSize - Number of entries to batch before creating a block (default: 10)
24
+ * @param blockSize - Block size for audit log blocks (default: BlockSize.Small)
25
+ */
26
+ constructor(blockStore, systemMember, batchSize = 10, blockSize = brightchain_lib_1.BlockSize.Small) {
27
+ this.entries = [];
28
+ this.headBlockId = null;
29
+ this.cachedBlockEntries = null;
30
+ this.pendingEntries = [];
31
+ this.persistedEntryCount = 0;
32
+ this.blockStore = blockStore;
33
+ this.systemMember = systemMember;
34
+ this.batchSize = batchSize;
35
+ this.blockSize = blockSize;
36
+ this.blockService = new brightchain_lib_1.BlockService();
37
+ }
38
+ /**
39
+ * Check if this logger is using encrypted block storage.
40
+ * Requires both a block store and a system member with public key.
41
+ */
42
+ get isUsingBlockStore() {
43
+ return this.blockStore !== undefined && this.systemMember !== undefined;
44
+ }
45
+ /**
46
+ * Log an audit entry.
47
+ *
48
+ * In block store mode, entries are batched and periodically persisted as encrypted blocks.
49
+ * In memory mode, entries are simply appended to the in-memory array.
50
+ *
51
+ * Requirements: 4.1, 4.2
52
+ */
53
+ async log(entry) {
54
+ const logEntry = {
55
+ ...entry,
56
+ timestamp: new Date(),
57
+ };
58
+ if (this.isUsingBlockStore) {
59
+ this.pendingEntries.push(logEntry);
60
+ if (this.pendingEntries.length >= this.batchSize) {
61
+ await this.flushToBlockStore();
62
+ }
63
+ }
64
+ else {
65
+ this.entries.push(logEntry);
66
+ }
67
+ }
68
+ /**
69
+ * Flush pending entries to the block store as an encrypted block.
70
+ * Uses EncryptedBlock for encryption with the system member's public key.
71
+ * Requirements: 4.2, 4.3, 4.4
72
+ */
73
+ async flushToBlockStore() {
74
+ if (!this.isUsingBlockStore || this.pendingEntries.length === 0) {
75
+ return;
76
+ }
77
+ const block = {
78
+ entries: [...this.pendingEntries],
79
+ previousBlockId: this.headBlockId,
80
+ createdAt: new Date().toISOString(),
81
+ };
82
+ const serialized = JSON.stringify(block);
83
+ const dataBuffer = new TextEncoder().encode(serialized);
84
+ const paddedData = new Uint8Array(this.blockSize);
85
+ paddedData.set(dataBuffer);
86
+ const checksumService = (0, brightchain_lib_1.getGlobalServiceProvider)().checksumService;
87
+ const checksum = checksumService.calculateChecksum(paddedData);
88
+ const ephemeralBlock = await brightchain_lib_1.EphemeralBlock.from(brightchain_lib_1.BlockType.EphemeralOwnedDataBlock, brightchain_lib_1.BlockDataType.EphemeralStructuredData, this.blockSize, paddedData, checksum, this.systemMember, new Date(), dataBuffer.length);
89
+ const encryptedBlock = await this.blockService.encrypt(brightchain_lib_1.BlockType.EncryptedOwnedDataBlock, ephemeralBlock, this.systemMember);
90
+ // Store the encrypted block - the block store uses the block's checksum as the key
91
+ await this.blockStore.put(encryptedBlock.idChecksum, encryptedBlock.data);
92
+ // Store the block's checksum as the head block ID (hex string)
93
+ this.headBlockId = encryptedBlock.idChecksum.toHex();
94
+ this.persistedEntryCount += this.pendingEntries.length;
95
+ this.pendingEntries = [];
96
+ this.cachedBlockEntries = null;
97
+ }
98
+ /**
99
+ * Get audit log entries in reverse chronological order.
100
+ * Requirements: 4.1
101
+ */
102
+ async getEntries(limit) {
103
+ let allEntries;
104
+ if (this.isUsingBlockStore) {
105
+ if (this.cachedBlockEntries === null) {
106
+ this.cachedBlockEntries = await this.loadEntriesFromBlockStore();
107
+ }
108
+ allEntries = [...this.pendingEntries, ...this.cachedBlockEntries];
109
+ }
110
+ else {
111
+ allEntries = [...this.entries];
112
+ }
113
+ const sorted = allEntries.sort((a, b) => b.timestamp.getTime() - a.timestamp.getTime());
114
+ return limit ? sorted.slice(0, limit) : sorted;
115
+ }
116
+ /**
117
+ * Get the total entry count.
118
+ */
119
+ getCount() {
120
+ if (this.isUsingBlockStore) {
121
+ return this.pendingEntries.length + this.persistedEntryCount;
122
+ }
123
+ return this.entries.length;
124
+ }
125
+ /**
126
+ * Load all entries from the block store by traversing the block chain.
127
+ * Decrypts each block using the system member's private key.
128
+ */
129
+ async loadEntriesFromBlockStore() {
130
+ if (!this.blockStore || !this.headBlockId || !this.systemMember) {
131
+ return [];
132
+ }
133
+ if (!this.systemMember.hasPrivateKey || !this.systemMember.privateKey) {
134
+ return [];
135
+ }
136
+ const allEntries = [];
137
+ let currentBlockId = this.headBlockId;
138
+ while (currentBlockId) {
139
+ try {
140
+ const hasBlock = await this.blockStore.has(currentBlockId);
141
+ if (!hasBlock) {
142
+ break;
143
+ }
144
+ const blockHandle = this.blockStore.get(currentBlockId);
145
+ const encryptedData = blockHandle.fullData;
146
+ // Extract the ECIES data directly from the encrypted block
147
+ // The header structure is: [EncType(1)][RecipientID(idSize)][ECIES header + ciphertext]
148
+ const idProvider = (0, brightchain_lib_1.getGlobalServiceProvider)().idProvider;
149
+ const eciesDataOffset = ecies_lib_1.UINT8_SIZE + idProvider.byteLength;
150
+ const eciesData = encryptedData.subarray(eciesDataOffset);
151
+ // Decrypt directly using the ECIES service
152
+ const eciesService = (0, brightchain_lib_1.getGlobalServiceProvider)().eciesService;
153
+ const decryptedData = await eciesService.decryptWithLengthAndHeader(this.systemMember.privateKey.idUint8Array, eciesData);
154
+ const jsonString = new TextDecoder().decode(decryptedData);
155
+ const parsedBlock = JSON.parse(jsonString);
156
+ const entries = parsedBlock.entries.map((e) => ({
157
+ ...e,
158
+ timestamp: new Date(e.timestamp),
159
+ }));
160
+ allEntries.push(...entries);
161
+ currentBlockId = parsedBlock.previousBlockId;
162
+ }
163
+ catch {
164
+ break;
165
+ }
166
+ }
167
+ return allEntries;
168
+ }
169
+ /**
170
+ * Set the head block ID (for restoring state from a persisted vault).
171
+ */
172
+ setHeadBlockId(blockId) {
173
+ this.headBlockId = blockId;
174
+ this.cachedBlockEntries = null;
175
+ }
176
+ /**
177
+ * Get the head block ID (for persisting vault state).
178
+ */
179
+ getHeadBlockId() {
180
+ return this.headBlockId;
181
+ }
182
+ }
183
+ exports.AuditLogger = AuditLogger;
184
+ //# sourceMappingURL=auditLogger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auditLogger.js","sourceRoot":"","sources":["../../../../../../brightchain-api-lib/src/lib/services/brightpass/auditLogger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * VaultEncryption - Symmetric AES-256-GCM encryption for vault data.
3
+ *
4
+ * This module provides authenticated encryption for vault entries using
5
+ * AES-256-GCM, the industry standard for password managers. The vault key
6
+ * is derived from the vault's BIP39 seed + master password using HKDF.
7
+ *
8
+ * Security Model (Hybrid Approach - same as 1Password/Bitwarden):
9
+ * - Vault entries: Encrypted with symmetric AES-256-GCM (fast, efficient)
10
+ * - Vault key sharing: Wrapped with ECIES when sharing with other members
11
+ * - Master password: Never stored, used only for key derivation
12
+ *
13
+ * Format: [IV (12 bytes)][Auth Tag (16 bytes)][Ciphertext]
14
+ *
15
+ * Requirements: 2.2, 2.3, 2.4, 3.2
16
+ */
17
+ /**
18
+ * VaultEncryption provides AES-256-GCM authenticated encryption for vault data.
19
+ *
20
+ * This is the production implementation used for encrypting vault entries.
21
+ * It uses:
22
+ * - AES-256-GCM: Authenticated encryption with associated data
23
+ * - 12-byte IV: Randomly generated for each encryption
24
+ * - 16-byte Auth Tag: Provides integrity verification
25
+ *
26
+ * The vault key must be 32 bytes (256 bits), derived from the vault's
27
+ * BIP39 seed and master password using HKDF-SHA256.
28
+ */
29
+ export declare class VaultEncryption {
30
+ /** AES-256-GCM algorithm identifier */
31
+ private static readonly ALGORITHM;
32
+ /** IV length in bytes (96 bits as recommended by NIST SP 800-38D) */
33
+ private static readonly IV_LENGTH;
34
+ /** Authentication tag length in bytes (128 bits for maximum security) */
35
+ private static readonly AUTH_TAG_LENGTH;
36
+ /** Required vault key length in bytes (256 bits for AES-256) */
37
+ private static readonly KEY_LENGTH;
38
+ /**
39
+ * Encrypt data using AES-256-GCM.
40
+ *
41
+ * @param vaultKey - 32-byte vault key derived from BIP39 seed + master password
42
+ * @param plaintext - Data to encrypt
43
+ * @returns Encrypted data in format: [IV][Auth Tag][Ciphertext]
44
+ * @throws Error if vault key is not 32 bytes
45
+ */
46
+ static encrypt(vaultKey: Uint8Array, plaintext: Uint8Array): Uint8Array;
47
+ /**
48
+ * Decrypt data using AES-256-GCM.
49
+ *
50
+ * @param vaultKey - 32-byte vault key derived from BIP39 seed + master password
51
+ * @param ciphertext - Encrypted data in format: [IV][Auth Tag][Ciphertext]
52
+ * @returns Decrypted plaintext
53
+ * @throws Error if vault key is not 32 bytes
54
+ * @throws Error if ciphertext is too short
55
+ * @throws Error if authentication fails (data tampered)
56
+ */
57
+ static decrypt(vaultKey: Uint8Array, ciphertext: Uint8Array): Uint8Array;
58
+ /**
59
+ * Encrypt a string and return base64-encoded ciphertext.
60
+ *
61
+ * @param vaultKey - 32-byte vault key
62
+ * @param plaintext - String to encrypt
63
+ * @returns Base64-encoded encrypted data
64
+ */
65
+ static encryptString(vaultKey: Uint8Array, plaintext: string): string;
66
+ /**
67
+ * Decrypt a base64-encoded ciphertext and return the original string.
68
+ *
69
+ * @param vaultKey - 32-byte vault key
70
+ * @param ciphertext - Base64-encoded encrypted data
71
+ * @returns Decrypted string
72
+ */
73
+ static decryptString(vaultKey: Uint8Array, ciphertext: string): string;
74
+ /**
75
+ * Get the overhead size added by encryption.
76
+ * This is useful for capacity calculations.
77
+ *
78
+ * @returns Number of bytes added to plaintext (IV + Auth Tag = 28 bytes)
79
+ */
80
+ static getOverheadSize(): number;
81
+ }
82
+ //# sourceMappingURL=vaultEncryption.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vaultEncryption.d.ts","sourceRoot":"","sources":["../../../../../../brightchain-api-lib/src/lib/services/brightpass/vaultEncryption.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH;;;;;;;;;;;GAWG;AACH,qBAAa,eAAe;IAC1B,uCAAuC;IACvC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAA0B;IAE3D,qEAAqE;IACrE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAM;IAEvC,yEAAyE;IACzE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAM;IAE7C,gEAAgE;IAChE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAM;IAExC;;;;;;;OAOG;WACW,OAAO,CACnB,QAAQ,EAAE,UAAU,EACpB,SAAS,EAAE,UAAU,GACpB,UAAU;IA0Cb;;;;;;;;;OASG;WACW,OAAO,CACnB,QAAQ,EAAE,UAAU,EACpB,UAAU,EAAE,UAAU,GACrB,UAAU;IA4Cb;;;;;;OAMG;WACW,aAAa,CAAC,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM;IAS5E;;;;;;OAMG;WACW,aAAa,CACzB,QAAQ,EAAE,UAAU,EACpB,UAAU,EAAE,MAAM,GACjB,MAAM;IAOT;;;;;OAKG;WACW,eAAe,IAAI,MAAM;CAGxC"}
@@ -0,0 +1,144 @@
1
+ "use strict";
2
+ /**
3
+ * VaultEncryption - Symmetric AES-256-GCM encryption for vault data.
4
+ *
5
+ * This module provides authenticated encryption for vault entries using
6
+ * AES-256-GCM, the industry standard for password managers. The vault key
7
+ * is derived from the vault's BIP39 seed + master password using HKDF.
8
+ *
9
+ * Security Model (Hybrid Approach - same as 1Password/Bitwarden):
10
+ * - Vault entries: Encrypted with symmetric AES-256-GCM (fast, efficient)
11
+ * - Vault key sharing: Wrapped with ECIES when sharing with other members
12
+ * - Master password: Never stored, used only for key derivation
13
+ *
14
+ * Format: [IV (12 bytes)][Auth Tag (16 bytes)][Ciphertext]
15
+ *
16
+ * Requirements: 2.2, 2.3, 2.4, 3.2
17
+ */
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.VaultEncryption = void 0;
20
+ const tslib_1 = require("tslib");
21
+ const crypto = tslib_1.__importStar(require("crypto"));
22
+ /**
23
+ * VaultEncryption provides AES-256-GCM authenticated encryption for vault data.
24
+ *
25
+ * This is the production implementation used for encrypting vault entries.
26
+ * It uses:
27
+ * - AES-256-GCM: Authenticated encryption with associated data
28
+ * - 12-byte IV: Randomly generated for each encryption
29
+ * - 16-byte Auth Tag: Provides integrity verification
30
+ *
31
+ * The vault key must be 32 bytes (256 bits), derived from the vault's
32
+ * BIP39 seed and master password using HKDF-SHA256.
33
+ */
34
+ class VaultEncryption {
35
+ /**
36
+ * Encrypt data using AES-256-GCM.
37
+ *
38
+ * @param vaultKey - 32-byte vault key derived from BIP39 seed + master password
39
+ * @param plaintext - Data to encrypt
40
+ * @returns Encrypted data in format: [IV][Auth Tag][Ciphertext]
41
+ * @throws Error if vault key is not 32 bytes
42
+ */
43
+ static encrypt(vaultKey, plaintext) {
44
+ if (vaultKey.length !== VaultEncryption.KEY_LENGTH) {
45
+ throw new Error(`Vault key must be ${VaultEncryption.KEY_LENGTH} bytes for AES-256, got ${vaultKey.length}`);
46
+ }
47
+ // Generate cryptographically secure random IV
48
+ const iv = crypto.randomBytes(VaultEncryption.IV_LENGTH);
49
+ // Create cipher with AES-256-GCM
50
+ const cipher = crypto.createCipheriv(VaultEncryption.ALGORITHM, Buffer.from(vaultKey), iv);
51
+ // Encrypt the plaintext
52
+ const encrypted = Buffer.concat([
53
+ cipher.update(Buffer.from(plaintext)),
54
+ cipher.final(),
55
+ ]);
56
+ // Get the authentication tag
57
+ const authTag = cipher.getAuthTag();
58
+ // Combine: [IV (12)][Auth Tag (16)][Ciphertext]
59
+ const result = new Uint8Array(VaultEncryption.IV_LENGTH +
60
+ VaultEncryption.AUTH_TAG_LENGTH +
61
+ encrypted.length);
62
+ result.set(iv, 0);
63
+ result.set(authTag, VaultEncryption.IV_LENGTH);
64
+ result.set(encrypted, VaultEncryption.IV_LENGTH + VaultEncryption.AUTH_TAG_LENGTH);
65
+ return result;
66
+ }
67
+ /**
68
+ * Decrypt data using AES-256-GCM.
69
+ *
70
+ * @param vaultKey - 32-byte vault key derived from BIP39 seed + master password
71
+ * @param ciphertext - Encrypted data in format: [IV][Auth Tag][Ciphertext]
72
+ * @returns Decrypted plaintext
73
+ * @throws Error if vault key is not 32 bytes
74
+ * @throws Error if ciphertext is too short
75
+ * @throws Error if authentication fails (data tampered)
76
+ */
77
+ static decrypt(vaultKey, ciphertext) {
78
+ if (vaultKey.length !== VaultEncryption.KEY_LENGTH) {
79
+ throw new Error(`Vault key must be ${VaultEncryption.KEY_LENGTH} bytes for AES-256, got ${vaultKey.length}`);
80
+ }
81
+ const minLength = VaultEncryption.IV_LENGTH + VaultEncryption.AUTH_TAG_LENGTH;
82
+ if (ciphertext.length < minLength) {
83
+ throw new Error(`Ciphertext too short: expected at least ${minLength} bytes, got ${ciphertext.length}`);
84
+ }
85
+ // Extract components: [IV (12)][Auth Tag (16)][Ciphertext]
86
+ const iv = ciphertext.slice(0, VaultEncryption.IV_LENGTH);
87
+ const authTag = ciphertext.slice(VaultEncryption.IV_LENGTH, VaultEncryption.IV_LENGTH + VaultEncryption.AUTH_TAG_LENGTH);
88
+ const encrypted = ciphertext.slice(VaultEncryption.IV_LENGTH + VaultEncryption.AUTH_TAG_LENGTH);
89
+ // Create decipher with AES-256-GCM
90
+ const decipher = crypto.createDecipheriv(VaultEncryption.ALGORITHM, Buffer.from(vaultKey), Buffer.from(iv));
91
+ // Set the authentication tag for verification
92
+ decipher.setAuthTag(Buffer.from(authTag));
93
+ // Decrypt and verify authentication
94
+ const decrypted = Buffer.concat([
95
+ decipher.update(Buffer.from(encrypted)),
96
+ decipher.final(), // Throws if auth tag verification fails
97
+ ]);
98
+ return new Uint8Array(decrypted);
99
+ }
100
+ /**
101
+ * Encrypt a string and return base64-encoded ciphertext.
102
+ *
103
+ * @param vaultKey - 32-byte vault key
104
+ * @param plaintext - String to encrypt
105
+ * @returns Base64-encoded encrypted data
106
+ */
107
+ static encryptString(vaultKey, plaintext) {
108
+ const encoder = new TextEncoder();
109
+ const encrypted = VaultEncryption.encrypt(vaultKey, encoder.encode(plaintext));
110
+ return Buffer.from(encrypted).toString('base64');
111
+ }
112
+ /**
113
+ * Decrypt a base64-encoded ciphertext and return the original string.
114
+ *
115
+ * @param vaultKey - 32-byte vault key
116
+ * @param ciphertext - Base64-encoded encrypted data
117
+ * @returns Decrypted string
118
+ */
119
+ static decryptString(vaultKey, ciphertext) {
120
+ const encrypted = new Uint8Array(Buffer.from(ciphertext, 'base64'));
121
+ const decrypted = VaultEncryption.decrypt(vaultKey, encrypted);
122
+ const decoder = new TextDecoder();
123
+ return decoder.decode(decrypted);
124
+ }
125
+ /**
126
+ * Get the overhead size added by encryption.
127
+ * This is useful for capacity calculations.
128
+ *
129
+ * @returns Number of bytes added to plaintext (IV + Auth Tag = 28 bytes)
130
+ */
131
+ static getOverheadSize() {
132
+ return VaultEncryption.IV_LENGTH + VaultEncryption.AUTH_TAG_LENGTH;
133
+ }
134
+ }
135
+ exports.VaultEncryption = VaultEncryption;
136
+ /** AES-256-GCM algorithm identifier */
137
+ VaultEncryption.ALGORITHM = 'aes-256-gcm';
138
+ /** IV length in bytes (96 bits as recommended by NIST SP 800-38D) */
139
+ VaultEncryption.IV_LENGTH = 12;
140
+ /** Authentication tag length in bytes (128 bits for maximum security) */
141
+ VaultEncryption.AUTH_TAG_LENGTH = 16;
142
+ /** Required vault key length in bytes (256 bits for AES-256) */
143
+ VaultEncryption.KEY_LENGTH = 32;
144
+ //# sourceMappingURL=vaultEncryption.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vaultEncryption.js","sourceRoot":"","sources":["../../../../../../brightchain-api-lib/src/lib/services/brightpass/vaultEncryption.ts"],"names":[],"mappings":"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"}