@digitaldefiance/node-ecies-lib 4.8.2 → 4.10.7

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 (253) hide show
  1. package/README.md +195 -13
  2. package/package.json +10 -5
  3. package/src/constants.d.ts.map +1 -1
  4. package/src/constants.js +31 -25
  5. package/src/constants.js.map +1 -1
  6. package/src/interfaces/index.d.ts +1 -2
  7. package/src/interfaces/index.d.ts.map +1 -1
  8. package/src/interfaces/index.js +6 -3
  9. package/src/interfaces/index.js.map +1 -1
  10. package/src/interfaces/member.d.ts +30 -12
  11. package/src/interfaces/member.d.ts.map +1 -1
  12. package/src/interfaces/platform-buffer.d.ts +9 -0
  13. package/src/interfaces/platform-buffer.d.ts.map +1 -0
  14. package/src/interfaces/platform-buffer.js +3 -0
  15. package/src/interfaces/platform-buffer.js.map +1 -0
  16. package/src/interfaces/platform-id.d.ts +2 -2
  17. package/src/interfaces/platform-id.d.ts.map +1 -1
  18. package/src/lib/id-providers/buffer-provider.d.ts +54 -0
  19. package/src/lib/id-providers/buffer-provider.d.ts.map +1 -0
  20. package/src/lib/id-providers/buffer-provider.js +93 -0
  21. package/src/lib/id-providers/buffer-provider.js.map +1 -0
  22. package/src/lib/index.d.ts +1 -0
  23. package/src/lib/index.d.ts.map +1 -1
  24. package/src/lib/index.js +1 -0
  25. package/src/lib/index.js.map +1 -1
  26. package/src/lib/voting/audit.d.ts +39 -48
  27. package/src/lib/voting/audit.d.ts.map +1 -1
  28. package/src/lib/voting/audit.js +103 -111
  29. package/src/lib/voting/audit.js.map +1 -1
  30. package/src/lib/voting/bulletin-board.d.ts +47 -81
  31. package/src/lib/voting/bulletin-board.d.ts.map +1 -1
  32. package/src/lib/voting/bulletin-board.js +95 -231
  33. package/src/lib/voting/bulletin-board.js.map +1 -1
  34. package/src/lib/voting/encoder.d.ts +7 -16
  35. package/src/lib/voting/encoder.d.ts.map +1 -1
  36. package/src/lib/voting/encoder.js +11 -107
  37. package/src/lib/voting/encoder.js.map +1 -1
  38. package/src/lib/voting/enumerations/index.d.ts +6 -0
  39. package/src/lib/voting/enumerations/index.d.ts.map +1 -0
  40. package/src/lib/voting/enumerations/index.js +14 -0
  41. package/src/lib/voting/enumerations/index.js.map +1 -0
  42. package/src/lib/voting/event-logger.d.ts +13 -74
  43. package/src/lib/voting/event-logger.d.ts.map +1 -1
  44. package/src/lib/voting/event-logger.js +19 -140
  45. package/src/lib/voting/event-logger.js.map +1 -1
  46. package/src/lib/voting/examples.d.ts +112 -0
  47. package/src/lib/voting/examples.d.ts.map +1 -0
  48. package/src/lib/voting/examples.js +386 -0
  49. package/src/lib/voting/examples.js.map +1 -0
  50. package/src/lib/voting/factory.d.ts +38 -9
  51. package/src/lib/voting/factory.d.ts.map +1 -1
  52. package/src/lib/voting/factory.js +42 -8
  53. package/src/lib/voting/factory.js.map +1 -1
  54. package/src/lib/voting/hierarchical-aggregator.d.ts +44 -0
  55. package/src/lib/voting/hierarchical-aggregator.d.ts.map +1 -0
  56. package/src/lib/voting/hierarchical-aggregator.js +56 -0
  57. package/src/lib/voting/hierarchical-aggregator.js.map +1 -0
  58. package/src/lib/voting/index.d.ts +43 -7
  59. package/src/lib/voting/index.d.ts.map +1 -1
  60. package/src/lib/voting/index.js +53 -10
  61. package/src/lib/voting/index.js.map +1 -1
  62. package/src/lib/voting/interfaces/aggregated-tally.d.ts +10 -0
  63. package/src/lib/voting/interfaces/aggregated-tally.d.ts.map +1 -0
  64. package/src/lib/voting/interfaces/aggregated-tally.js +3 -0
  65. package/src/lib/voting/interfaces/aggregated-tally.js.map +1 -0
  66. package/src/lib/voting/interfaces/audit-entry.d.ts +10 -0
  67. package/src/lib/voting/interfaces/audit-entry.d.ts.map +1 -0
  68. package/src/lib/voting/interfaces/audit-entry.js +3 -0
  69. package/src/lib/voting/interfaces/audit-entry.js.map +1 -0
  70. package/src/lib/voting/interfaces/audit-log.d.ts +10 -0
  71. package/src/lib/voting/interfaces/audit-log.d.ts.map +1 -0
  72. package/src/lib/voting/interfaces/audit-log.js +3 -0
  73. package/src/lib/voting/interfaces/audit-log.js.map +1 -0
  74. package/src/lib/voting/interfaces/bulletin-board-entry.d.ts +10 -0
  75. package/src/lib/voting/interfaces/bulletin-board-entry.d.ts.map +1 -0
  76. package/src/lib/voting/interfaces/bulletin-board-entry.js +3 -0
  77. package/src/lib/voting/interfaces/bulletin-board-entry.js.map +1 -0
  78. package/src/lib/voting/interfaces/bulletin-board.d.ts +10 -0
  79. package/src/lib/voting/interfaces/bulletin-board.d.ts.map +1 -0
  80. package/src/lib/voting/interfaces/bulletin-board.js +3 -0
  81. package/src/lib/voting/interfaces/bulletin-board.js.map +1 -0
  82. package/src/lib/voting/interfaces/checkpoint-manager-extended.d.ts +10 -0
  83. package/src/lib/voting/interfaces/checkpoint-manager-extended.d.ts.map +1 -0
  84. package/src/lib/voting/interfaces/checkpoint-manager-extended.js +3 -0
  85. package/src/lib/voting/interfaces/checkpoint-manager-extended.js.map +1 -0
  86. package/src/lib/voting/interfaces/checkpoint-manager.d.ts +9 -0
  87. package/src/lib/voting/interfaces/checkpoint-manager.d.ts.map +1 -0
  88. package/src/lib/voting/interfaces/checkpoint-manager.js +3 -0
  89. package/src/lib/voting/interfaces/checkpoint-manager.js.map +1 -0
  90. package/src/lib/voting/interfaces/checkpoint-metadata.d.ts +8 -0
  91. package/src/lib/voting/interfaces/checkpoint-metadata.d.ts.map +1 -0
  92. package/src/lib/voting/interfaces/checkpoint-metadata.js +3 -0
  93. package/src/lib/voting/interfaces/checkpoint-metadata.js.map +1 -0
  94. package/src/lib/voting/interfaces/ecies-service-with-voting.d.ts +8 -0
  95. package/src/lib/voting/interfaces/ecies-service-with-voting.d.ts.map +1 -0
  96. package/src/lib/voting/interfaces/ecies-service-with-voting.js +3 -0
  97. package/src/lib/voting/interfaces/ecies-service-with-voting.js.map +1 -0
  98. package/src/lib/voting/interfaces/encrypted-vote.d.ts +10 -0
  99. package/src/lib/voting/interfaces/encrypted-vote.d.ts.map +1 -0
  100. package/src/lib/voting/interfaces/encrypted-vote.js +3 -0
  101. package/src/lib/voting/interfaces/encrypted-vote.js.map +1 -0
  102. package/src/lib/voting/interfaces/event-log-entry.d.ts +10 -0
  103. package/src/lib/voting/interfaces/event-log-entry.d.ts.map +1 -0
  104. package/src/lib/voting/interfaces/event-log-entry.js +3 -0
  105. package/src/lib/voting/interfaces/event-log-entry.js.map +1 -0
  106. package/src/lib/voting/interfaces/event-logger.d.ts +10 -0
  107. package/src/lib/voting/interfaces/event-logger.d.ts.map +1 -0
  108. package/src/lib/voting/interfaces/event-logger.js +3 -0
  109. package/src/lib/voting/interfaces/event-logger.js.map +1 -0
  110. package/src/lib/voting/interfaces/index.d.ts +37 -0
  111. package/src/lib/voting/interfaces/index.d.ts.map +1 -0
  112. package/src/lib/voting/interfaces/index.js +9 -0
  113. package/src/lib/voting/interfaces/index.js.map +1 -0
  114. package/src/lib/voting/interfaces/jurisdiction-config.d.ts +10 -0
  115. package/src/lib/voting/interfaces/jurisdiction-config.d.ts.map +1 -0
  116. package/src/lib/voting/interfaces/jurisdiction-config.js +3 -0
  117. package/src/lib/voting/interfaces/jurisdiction-config.js.map +1 -0
  118. package/src/lib/voting/interfaces/plaintext-vote.d.ts +10 -0
  119. package/src/lib/voting/interfaces/plaintext-vote.d.ts.map +1 -0
  120. package/src/lib/voting/interfaces/plaintext-vote.js +3 -0
  121. package/src/lib/voting/interfaces/plaintext-vote.js.map +1 -0
  122. package/src/lib/voting/interfaces/poll-configuration.d.ts +8 -0
  123. package/src/lib/voting/interfaces/poll-configuration.d.ts.map +1 -0
  124. package/src/lib/voting/interfaces/poll-configuration.js +3 -0
  125. package/src/lib/voting/interfaces/poll-configuration.js.map +1 -0
  126. package/src/lib/voting/interfaces/poll-results.d.ts +8 -0
  127. package/src/lib/voting/interfaces/poll-results.d.ts.map +1 -0
  128. package/src/lib/voting/interfaces/poll-results.js +3 -0
  129. package/src/lib/voting/interfaces/poll-results.js.map +1 -0
  130. package/src/lib/voting/interfaces/poll-tallier.d.ts +10 -0
  131. package/src/lib/voting/interfaces/poll-tallier.d.ts.map +1 -0
  132. package/src/lib/voting/interfaces/poll-tallier.js +3 -0
  133. package/src/lib/voting/interfaces/poll-tallier.js.map +1 -0
  134. package/src/lib/voting/interfaces/poll.d.ts +10 -0
  135. package/src/lib/voting/interfaces/poll.d.ts.map +1 -0
  136. package/src/lib/voting/interfaces/poll.js +3 -0
  137. package/src/lib/voting/interfaces/poll.js.map +1 -0
  138. package/src/lib/voting/interfaces/round-result.d.ts +8 -0
  139. package/src/lib/voting/interfaces/round-result.d.ts.map +1 -0
  140. package/src/lib/voting/interfaces/round-result.js +3 -0
  141. package/src/lib/voting/interfaces/round-result.js.map +1 -0
  142. package/src/lib/voting/interfaces/state-snapshot.d.ts +15 -0
  143. package/src/lib/voting/interfaces/state-snapshot.d.ts.map +1 -0
  144. package/src/lib/voting/interfaces/state-snapshot.js +3 -0
  145. package/src/lib/voting/interfaces/state-snapshot.js.map +1 -0
  146. package/src/lib/voting/interfaces/supermajority-config.d.ts +8 -0
  147. package/src/lib/voting/interfaces/supermajority-config.d.ts.map +1 -0
  148. package/src/lib/voting/interfaces/supermajority-config.js +3 -0
  149. package/src/lib/voting/interfaces/supermajority-config.js.map +1 -0
  150. package/src/lib/voting/interfaces/tally-proof.d.ts +10 -0
  151. package/src/lib/voting/interfaces/tally-proof.d.ts.map +1 -0
  152. package/src/lib/voting/interfaces/tally-proof.js +3 -0
  153. package/src/lib/voting/interfaces/tally-proof.js.map +1 -0
  154. package/src/lib/voting/interfaces/vote-encoder.d.ts +10 -0
  155. package/src/lib/voting/interfaces/vote-encoder.d.ts.map +1 -0
  156. package/src/lib/voting/interfaces/vote-encoder.js +3 -0
  157. package/src/lib/voting/interfaces/vote-encoder.js.map +1 -0
  158. package/src/lib/voting/interfaces/vote-logger-extended.d.ts +10 -0
  159. package/src/lib/voting/interfaces/vote-logger-extended.d.ts.map +1 -0
  160. package/src/lib/voting/interfaces/vote-logger-extended.js +3 -0
  161. package/src/lib/voting/interfaces/vote-logger-extended.js.map +1 -0
  162. package/src/lib/voting/interfaces/vote-logger.d.ts +9 -0
  163. package/src/lib/voting/interfaces/vote-logger.d.ts.map +1 -0
  164. package/src/lib/voting/interfaces/vote-logger.js +3 -0
  165. package/src/lib/voting/interfaces/vote-logger.js.map +1 -0
  166. package/src/lib/voting/interfaces/voting-consts.d.ts +9 -0
  167. package/src/lib/voting/interfaces/voting-consts.d.ts.map +1 -0
  168. package/src/lib/voting/interfaces/voting-consts.js +3 -0
  169. package/src/lib/voting/interfaces/voting-consts.js.map +1 -0
  170. package/src/lib/voting/interfaces/voting-key-derivation-options.d.ts +7 -0
  171. package/src/lib/voting/interfaces/voting-key-derivation-options.d.ts.map +1 -0
  172. package/src/lib/voting/interfaces/voting-key-derivation-options.js +3 -0
  173. package/src/lib/voting/interfaces/voting-key-derivation-options.js.map +1 -0
  174. package/src/lib/voting/interfaces/voting-poll-results.d.ts +7 -0
  175. package/src/lib/voting/interfaces/voting-poll-results.d.ts.map +1 -0
  176. package/src/lib/voting/interfaces/voting-poll-results.js +3 -0
  177. package/src/lib/voting/interfaces/voting-poll-results.js.map +1 -0
  178. package/src/lib/voting/interfaces/voting-receipt.d.ts +10 -0
  179. package/src/lib/voting/interfaces/voting-receipt.d.ts.map +1 -0
  180. package/src/lib/voting/interfaces/voting-receipt.js +3 -0
  181. package/src/lib/voting/interfaces/voting-receipt.js.map +1 -0
  182. package/src/lib/voting/interfaces/voting-security-validator.d.ts +8 -0
  183. package/src/lib/voting/interfaces/voting-security-validator.d.ts.map +1 -0
  184. package/src/lib/voting/interfaces/voting-security-validator.js +3 -0
  185. package/src/lib/voting/interfaces/voting-security-validator.js.map +1 -0
  186. package/src/lib/voting/node-persistent-state.d.ts +40 -0
  187. package/src/lib/voting/node-persistent-state.d.ts.map +1 -0
  188. package/src/lib/voting/node-persistent-state.js +222 -0
  189. package/src/lib/voting/node-persistent-state.js.map +1 -0
  190. package/src/lib/voting/persistent-state.d.ts +44 -0
  191. package/src/lib/voting/persistent-state.d.ts.map +1 -0
  192. package/src/lib/voting/persistent-state.js +106 -0
  193. package/src/lib/voting/persistent-state.js.map +1 -0
  194. package/src/lib/voting/poll-core.d.ts +14 -29
  195. package/src/lib/voting/poll-core.d.ts.map +1 -1
  196. package/src/lib/voting/poll-core.js +13 -176
  197. package/src/lib/voting/poll-core.js.map +1 -1
  198. package/src/lib/voting/poll.js +3 -3
  199. package/src/lib/voting/poll.js.map +1 -1
  200. package/src/lib/voting/security.d.ts +9 -15
  201. package/src/lib/voting/security.d.ts.map +1 -1
  202. package/src/lib/voting/security.js +12 -44
  203. package/src/lib/voting/security.js.map +1 -1
  204. package/src/lib/voting/tallier.d.ts +11 -20
  205. package/src/lib/voting/tallier.d.ts.map +1 -1
  206. package/src/lib/voting/tallier.js +17 -366
  207. package/src/lib/voting/tallier.js.map +1 -1
  208. package/src/lib/voting/test-voter-pool.d.ts +16 -0
  209. package/src/lib/voting/test-voter-pool.d.ts.map +1 -0
  210. package/src/lib/voting/test-voter-pool.js +69 -0
  211. package/src/lib/voting/test-voter-pool.js.map +1 -0
  212. package/src/lib/voting/us-election-example.d.ts +2 -0
  213. package/src/lib/voting/us-election-example.d.ts.map +1 -0
  214. package/src/lib/voting/us-election-example.js +170 -0
  215. package/src/lib/voting/us-election-example.js.map +1 -0
  216. package/src/member.d.ts +4 -1
  217. package/src/member.d.ts.map +1 -1
  218. package/src/member.js +40 -16
  219. package/src/member.js.map +1 -1
  220. package/src/secure-buffer.d.ts +1 -2
  221. package/src/secure-buffer.d.ts.map +1 -1
  222. package/src/secure-buffer.js +3 -9
  223. package/src/secure-buffer.js.map +1 -1
  224. package/src/services/ecies/crypto-core.d.ts.map +1 -1
  225. package/src/services/ecies/crypto-core.js +24 -0
  226. package/src/services/ecies/crypto-core.js.map +1 -1
  227. package/src/services/ecies/multi-recipient.d.ts +9 -1
  228. package/src/services/ecies/multi-recipient.d.ts.map +1 -1
  229. package/src/services/ecies/multi-recipient.js +153 -21
  230. package/src/services/ecies/multi-recipient.js.map +1 -1
  231. package/src/services/ecies/service.d.ts +56 -15
  232. package/src/services/ecies/service.d.ts.map +1 -1
  233. package/src/services/ecies/service.js +196 -39
  234. package/src/services/ecies/service.js.map +1 -1
  235. package/src/services/ecies/single-recipient.d.ts.map +1 -1
  236. package/src/services/ecies/single-recipient.js +4 -2
  237. package/src/services/ecies/single-recipient.js.map +1 -1
  238. package/src/services/encryption-stream.d.ts +1 -1
  239. package/src/services/encryption-stream.d.ts.map +1 -1
  240. package/src/services/encryption-stream.js +4 -8
  241. package/src/services/encryption-stream.js.map +1 -1
  242. package/src/services/multi-recipient-processor.d.ts +5 -2
  243. package/src/services/multi-recipient-processor.d.ts.map +1 -1
  244. package/src/services/multi-recipient-processor.js +29 -14
  245. package/src/services/multi-recipient-processor.js.map +1 -1
  246. package/src/test-mocks/mock-backend-member.d.ts +22 -3
  247. package/src/test-mocks/mock-backend-member.d.ts.map +1 -1
  248. package/src/test-mocks/mock-backend-member.js +71 -0
  249. package/src/test-mocks/mock-backend-member.js.map +1 -1
  250. package/src/lib/voting/types.d.ts +0 -67
  251. package/src/lib/voting/types.d.ts.map +0 -1
  252. package/src/lib/voting/types.js +0 -29
  253. package/src/lib/voting/types.js.map +0 -1
@@ -1,4 +1,4 @@
1
+ import type { PlatformID as BasePlatformID } from '@digitaldefiance/ecies-lib';
1
2
  import { Types } from '@digitaldefiance/mongoose-types';
2
- import { ObjectId } from 'bson';
3
- export type PlatformID = Uint8Array | Buffer | ObjectId | Types.ObjectId | string;
3
+ export type PlatformID = BasePlatformID | Buffer | Types.ObjectId;
4
4
  //# sourceMappingURL=platform-id.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"platform-id.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-ecies-lib/src/interfaces/platform-id.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAEhC,MAAM,MAAM,UAAU,GAClB,UAAU,GACV,MAAM,GACN,QAAQ,GACR,KAAK,CAAC,QAAQ,GACd,MAAM,CAAC"}
1
+ {"version":3,"file":"platform-id.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-ecies-lib/src/interfaces/platform-id.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,IAAI,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC/E,OAAO,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAC;AAExD,MAAM,MAAM,UAAU,GAAG,cAAc,GAAG,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC"}
@@ -0,0 +1,54 @@
1
+ import { BaseIdProvider } from '@digitaldefiance/ecies-lib';
2
+ /**
3
+ * Buffer ID provider that accepts any fixed byte length.
4
+ *
5
+ * Use this when you need a non-standard ID size or custom validation logic with Node.js Buffers.
6
+ * For standard formats, prefer ObjectIdProvider, GuidV4Provider, or UuidProvider.
7
+ *
8
+ * Example:
9
+ * ```typescript
10
+ * // 20-byte SHA-1 hash as recipient ID
11
+ * const provider = new BufferIdProvider(20, 'SHA1Hash');
12
+ * ```
13
+ */
14
+ export declare class BufferIdProvider extends BaseIdProvider<Buffer> {
15
+ readonly byteLength: number;
16
+ readonly name: string;
17
+ constructor(byteLength: number, name?: string);
18
+ /**
19
+ * Generate a new random ID of the specified byte length.
20
+ */
21
+ generate(): Buffer;
22
+ /**
23
+ * Validate an ID buffer.
24
+ * Only checks length - override this method for custom validation.
25
+ */
26
+ validate(id: Buffer): boolean;
27
+ /**
28
+ * Serialize to hexadecimal string.
29
+ */
30
+ serialize(id: Buffer): string;
31
+ /**
32
+ * Deserialize a hexadecimal string to buffer.
33
+ */
34
+ deserialize(str: string): Buffer;
35
+ /**
36
+ * Create a defensive copy of an ID.
37
+ */
38
+ clone(id: Buffer): Buffer;
39
+ /**
40
+ * Convert Buffer to the provider's native representation.
41
+ * For BufferIdProvider, the native type is Buffer, so this is a pass-through.
42
+ */
43
+ fromBytes(bytes: Buffer): Buffer;
44
+ /**
45
+ * Convert the provider's native representation to Buffer.
46
+ * For BufferIdProvider, the native type is Buffer, so this is a pass-through.
47
+ */
48
+ toBytes(id: Buffer): Buffer;
49
+ /**
50
+ * Compare two IDs for equality.
51
+ */
52
+ equals(a: Buffer, b: Buffer): boolean;
53
+ }
54
+ //# sourceMappingURL=buffer-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buffer-provider.d.ts","sourceRoot":"","sources":["../../../../../../packages/digitaldefiance-node-ecies-lib/src/lib/id-providers/buffer-provider.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,cAAc,EACf,MAAM,4BAA4B,CAAC;AAEpC;;;;;;;;;;;GAWG;AACH,qBAAa,gBAAiB,SAAQ,cAAc,CAAC,MAAM,CAAC;IAC1D,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAEV,UAAU,EAAE,MAAM,EAAE,IAAI,SAAW;IAgB/C;;OAEG;IACH,QAAQ,IAAI,MAAM;IAIlB;;;OAGG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAI7B;;OAEG;IACH,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM;IAK7B;;OAEG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAsBhC;;OAEG;IACH,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM;IAIzB;;;OAGG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAIhC;;;OAGG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM;IAI3B;;OAEG;IACH,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO;CAGtC"}
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BufferIdProvider = void 0;
4
+ const crypto_1 = require("crypto");
5
+ const ecies_lib_1 = require("@digitaldefiance/ecies-lib");
6
+ /**
7
+ * Buffer ID provider that accepts any fixed byte length.
8
+ *
9
+ * Use this when you need a non-standard ID size or custom validation logic with Node.js Buffers.
10
+ * For standard formats, prefer ObjectIdProvider, GuidV4Provider, or UuidProvider.
11
+ *
12
+ * Example:
13
+ * ```typescript
14
+ * // 20-byte SHA-1 hash as recipient ID
15
+ * const provider = new BufferIdProvider(20, 'SHA1Hash');
16
+ * ```
17
+ */
18
+ class BufferIdProvider extends ecies_lib_1.BaseIdProvider {
19
+ byteLength;
20
+ name;
21
+ constructor(byteLength, name = 'Buffer') {
22
+ super();
23
+ if (!Number.isInteger(byteLength) || byteLength < 1 || byteLength > 255) {
24
+ throw new ecies_lib_1.IdProviderError(ecies_lib_1.IdProviderErrorType.InvalidByteLengthParameter, undefined, undefined, { value: byteLength });
25
+ }
26
+ this.byteLength = byteLength;
27
+ this.name = name;
28
+ }
29
+ /**
30
+ * Generate a new random ID of the specified byte length.
31
+ */
32
+ generate() {
33
+ return (0, crypto_1.randomBytes)(this.byteLength);
34
+ }
35
+ /**
36
+ * Validate an ID buffer.
37
+ * Only checks length - override this method for custom validation.
38
+ */
39
+ validate(id) {
40
+ return id.length === this.byteLength;
41
+ }
42
+ /**
43
+ * Serialize to hexadecimal string.
44
+ */
45
+ serialize(id) {
46
+ this.validateLength(id, `${this.name}.serialize`);
47
+ return id.toString('hex');
48
+ }
49
+ /**
50
+ * Deserialize a hexadecimal string to buffer.
51
+ */
52
+ deserialize(str) {
53
+ if (typeof str !== 'string') {
54
+ throw new ecies_lib_1.IdProviderError(ecies_lib_1.IdProviderErrorType.InputMustBeString);
55
+ }
56
+ const expectedLength = this.byteLength * 2;
57
+ if (str.length !== expectedLength) {
58
+ throw new ecies_lib_1.IdProviderError(ecies_lib_1.IdProviderErrorType.InvalidStringLength, undefined, undefined, { expected: expectedLength, actual: str.length });
59
+ }
60
+ if (!/^[0-9a-fA-F]+$/.test(str)) {
61
+ throw new ecies_lib_1.IdProviderError(ecies_lib_1.IdProviderErrorType.InvalidCharacters);
62
+ }
63
+ return Buffer.from(str, 'hex');
64
+ }
65
+ /**
66
+ * Create a defensive copy of an ID.
67
+ */
68
+ clone(id) {
69
+ return Buffer.from(id);
70
+ }
71
+ /**
72
+ * Convert Buffer to the provider's native representation.
73
+ * For BufferIdProvider, the native type is Buffer, so this is a pass-through.
74
+ */
75
+ fromBytes(bytes) {
76
+ return bytes;
77
+ }
78
+ /**
79
+ * Convert the provider's native representation to Buffer.
80
+ * For BufferIdProvider, the native type is Buffer, so this is a pass-through.
81
+ */
82
+ toBytes(id) {
83
+ return id;
84
+ }
85
+ /**
86
+ * Compare two IDs for equality.
87
+ */
88
+ equals(a, b) {
89
+ return a.equals(b);
90
+ }
91
+ }
92
+ exports.BufferIdProvider = BufferIdProvider;
93
+ //# sourceMappingURL=buffer-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buffer-provider.js","sourceRoot":"","sources":["../../../../../../packages/digitaldefiance-node-ecies-lib/src/lib/id-providers/buffer-provider.ts"],"names":[],"mappings":";;;AAAA,mCAAqC;AAErC,0DAIoC;AAEpC;;;;;;;;;;;GAWG;AACH,MAAa,gBAAiB,SAAQ,0BAAsB;IACjD,UAAU,CAAS;IACnB,IAAI,CAAS;IAEtB,YAAY,UAAkB,EAAE,IAAI,GAAG,QAAQ;QAC7C,KAAK,EAAE,CAAC;QAER,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,UAAU,GAAG,CAAC,IAAI,UAAU,GAAG,GAAG,EAAE,CAAC;YACxE,MAAM,IAAI,2BAAe,CACvB,+BAAmB,CAAC,0BAA0B,EAC9C,SAAS,EACT,SAAS,EACT,EAAE,KAAK,EAAE,UAAU,EAAE,CACtB,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,OAAO,IAAA,oBAAW,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACtC,CAAC;IAED;;;OAGG;IACH,QAAQ,CAAC,EAAU;QACjB,OAAO,EAAE,CAAC,MAAM,KAAK,IAAI,CAAC,UAAU,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,EAAU;QAClB,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,IAAI,YAAY,CAAC,CAAC;QAClD,OAAO,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,GAAW;QACrB,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC5B,MAAM,IAAI,2BAAe,CAAC,+BAAmB,CAAC,iBAAiB,CAAC,CAAC;QACnE,CAAC;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;QAC3C,IAAI,GAAG,CAAC,MAAM,KAAK,cAAc,EAAE,CAAC;YAClC,MAAM,IAAI,2BAAe,CACvB,+BAAmB,CAAC,mBAAmB,EACvC,SAAS,EACT,SAAS,EACT,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CACjD,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,2BAAe,CAAC,+BAAmB,CAAC,iBAAiB,CAAC,CAAC;QACnE,CAAC;QAED,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,EAAU;QACd,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzB,CAAC;IAED;;;OAGG;IACH,SAAS,CAAC,KAAa;QACrB,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;OAGG;IACH,OAAO,CAAC,EAAU;QAChB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,CAAS,EAAE,CAAS;QACzB,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACrB,CAAC;CACF;AAjGD,4CAiGC"}
@@ -1,4 +1,5 @@
1
1
  export * from './crypto-container';
2
+ export * from './id-providers/buffer-provider';
2
3
  export * from './invariant-validator';
3
4
  export * from './invariants';
4
5
  export * from './voting';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-ecies-lib/src/lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-ecies-lib/src/lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,uBAAuB,CAAC;AACtC,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC"}
package/src/lib/index.js CHANGED
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
4
  tslib_1.__exportStar(require("./crypto-container"), exports);
5
+ tslib_1.__exportStar(require("./id-providers/buffer-provider"), exports);
5
6
  tslib_1.__exportStar(require("./invariant-validator"), exports);
6
7
  tslib_1.__exportStar(require("./invariants"), exports);
7
8
  tslib_1.__exportStar(require("./voting"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-ecies-lib/src/lib/index.ts"],"names":[],"mappings":";;;AAAA,6DAAmC;AACnC,gEAAsC;AACtC,uDAA6B;AAC7B,mDAAyB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-ecies-lib/src/lib/index.ts"],"names":[],"mappings":";;;AAAA,6DAAmC;AACnC,yEAA+C;AAC/C,gEAAsC;AACtC,uDAA6B;AAC7B,mDAAyB"}
@@ -1,55 +1,46 @@
1
+ /**
2
+ * Immutable Audit Log for Government-Grade Voting
3
+ * Node.js optimized - extends ecies-lib ImmutableAuditLog with Buffer support
4
+ */
5
+ import { ImmutableAuditLog as BaseImmutableAuditLog } from '@digitaldefiance/ecies-lib';
1
6
  import type { PlatformID } from '../../interfaces';
2
7
  import type { IMember } from '../../interfaces/member';
3
- export declare enum AuditEventType {
4
- PollCreated = "poll_created",
5
- VoteCast = "vote_cast",
6
- PollClosed = "poll_closed"
7
- }
8
- export interface AuditEntry<TID extends PlatformID = Buffer> {
9
- /** Sequence number (monotonically increasing) */
10
- readonly sequence: number;
11
- /** Event type */
12
- readonly eventType: AuditEventType;
13
- /** Microsecond-precision timestamp */
14
- readonly timestamp: number;
15
- /** Poll identifier */
16
- readonly pollId: TID;
17
- /** Hash of voter ID (for vote events) */
18
- readonly voterIdHash?: Buffer;
19
- /** Authority/creator ID (for creation/closure events) */
20
- readonly authorityId?: TID;
21
- /** Hash of previous entry (chain integrity) */
22
- readonly previousHash: Buffer;
23
- /** Hash of this entry's data */
24
- readonly entryHash: Buffer;
25
- /** Digital signature from authority */
26
- readonly signature: Buffer;
27
- /** Additional event metadata */
28
- readonly metadata?: Record<string, unknown>;
29
- }
30
- export interface AuditLog<TID extends PlatformID = Buffer> {
31
- getEntries(): readonly AuditEntry<TID>[];
32
- getEntriesForPoll(pollId: TID): readonly AuditEntry<TID>[];
33
- verifyChain(): boolean;
34
- verifyEntry(entry: AuditEntry<TID>): boolean;
35
- }
36
- export declare class ImmutableAuditLog<TID extends PlatformID = Buffer> implements AuditLog<TID> {
37
- private readonly entries;
38
- private readonly authority;
39
- private sequence;
8
+ import type { AuditEntry } from './interfaces';
9
+ export type { AuditEntry, AuditLog } from './interfaces';
10
+ /**
11
+ * Node.js ImmutableAuditLog that extends ecies-lib ImmutableAuditLog
12
+ * Keeps the generic TID parameter for flexibility, defaulting to Buffer
13
+ *
14
+ * The base class handles all the logic, we override methods to convert
15
+ * Uint8Array to Buffer for Node.js compatibility.
16
+ */
17
+ export declare class ImmutableAuditLog<TID extends PlatformID = Buffer> extends BaseImmutableAuditLog<TID> {
40
18
  constructor(authority: IMember<TID>);
19
+ /**
20
+ * Record poll creation event
21
+ * Overrides base method to convert Uint8Array to Buffer
22
+ */
41
23
  recordPollCreated(pollId: TID, metadata?: Record<string, unknown>): AuditEntry<TID>;
42
- recordVoteCast(pollId: TID, voterIdHash: Buffer, metadata?: Record<string, unknown>): AuditEntry<TID>;
24
+ /**
25
+ * Record vote cast event
26
+ * Overrides base method to convert Uint8Array to Buffer
27
+ * Note: voterIdHash is Uint8Array for compatibility with base class
28
+ */
29
+ recordVoteCast(pollId: TID, voterIdHash: Uint8Array, metadata?: Record<string, unknown>): AuditEntry<TID>;
30
+ /**
31
+ * Record poll closed event
32
+ * Overrides base method to convert Uint8Array to Buffer
33
+ */
43
34
  recordPollClosed(pollId: TID, metadata?: Record<string, unknown>): AuditEntry<TID>;
44
- getEntries(): readonly AuditEntry<TID>[];
45
- getEntriesForPoll(pollId: TID): readonly AuditEntry<TID>[];
46
- verifyChain(): boolean;
47
- verifyEntry(entry: AuditEntry<TID>): boolean;
48
- private appendEntry;
49
- private computeEntryHash;
50
- private serializeEntryForHashing;
51
- private serializeEntryForSigning;
52
- private getMicrosecondTimestamp;
53
- private encodeNumber;
35
+ /**
36
+ * Get all audit entries
37
+ * Overrides base method to convert Uint8Array to Buffer
38
+ */
39
+ getEntries(): ReadonlyArray<AuditEntry<TID>>;
40
+ /**
41
+ * Get entries for a specific poll
42
+ * Overrides base method to convert Uint8Array to Buffer
43
+ */
44
+ getEntriesForPoll(pollId: TID): ReadonlyArray<AuditEntry<TID>>;
54
45
  }
55
46
  //# sourceMappingURL=audit.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../../../../../packages/digitaldefiance-node-ecies-lib/src/lib/voting/audit.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAGvD,oBAAY,cAAc;IACxB,WAAW,iBAAiB;IAC5B,QAAQ,cAAc;IACtB,UAAU,gBAAgB;CAC3B;AAED,MAAM,WAAW,UAAU,CAAC,GAAG,SAAS,UAAU,GAAG,MAAM;IACzD,iDAAiD;IACjD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,iBAAiB;IACjB,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC;IACnC,sCAAsC;IACtC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,sBAAsB;IACtB,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC;IACrB,yCAAyC;IACzC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,yDAAyD;IACzD,QAAQ,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC;IAC3B,+CAA+C;IAC/C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,gCAAgC;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,uCAAuC;IACvC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,gCAAgC;IAChC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC7C;AAED,MAAM,WAAW,QAAQ,CAAC,GAAG,SAAS,UAAU,GAAG,MAAM;IACvD,UAAU,IAAI,SAAS,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;IACzC,iBAAiB,CAAC,MAAM,EAAE,GAAG,GAAG,SAAS,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;IAC3D,WAAW,IAAI,OAAO,CAAC;IACvB,WAAW,CAAC,KAAK,EAAE,UAAU,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;CAC9C;AAED,qBAAa,iBAAiB,CAC5B,GAAG,SAAS,UAAU,GAAG,MAAM,CAC/B,YAAW,QAAQ,CAAC,GAAG,CAAC;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;IACjD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;IACzC,OAAO,CAAC,QAAQ,CAAK;gBAET,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC;IAInC,iBAAiB,CACf,MAAM,EAAE,GAAG,EACX,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,UAAU,CAAC,GAAG,CAAC;IASlB,cAAc,CACZ,MAAM,EAAE,GAAG,EACX,WAAW,EAAE,MAAM,EACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,UAAU,CAAC,GAAG,CAAC;IASlB,gBAAgB,CACd,MAAM,EAAE,GAAG,EACX,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,UAAU,CAAC,GAAG,CAAC;IASlB,UAAU,IAAI,SAAS,UAAU,CAAC,GAAG,CAAC,EAAE;IAIxC,iBAAiB,CAAC,MAAM,EAAE,GAAG,GAAG,SAAS,UAAU,CAAC,GAAG,CAAC,EAAE;IAS1D,WAAW,IAAI,OAAO;IAetB,WAAW,CAAC,KAAK,EAAE,UAAU,CAAC,GAAG,CAAC,GAAG,OAAO;IAQ5C,OAAO,CAAC,WAAW;IAwBnB,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,wBAAwB;IAiBhC,OAAO,CAAC,wBAAwB;IAShC,OAAO,CAAC,uBAAuB;IAO/B,OAAO,CAAC,YAAY;CAKrB"}
1
+ {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../../../../../packages/digitaldefiance-node-ecies-lib/src/lib/voting/audit.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EACL,iBAAiB,IAAI,qBAAqB,EAE3C,MAAM,4BAA4B,CAAC;AAEpC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG/C,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAiCzD;;;;;;GAMG;AACH,qBAAa,iBAAiB,CAC5B,GAAG,SAAS,UAAU,GAAG,MAAM,CAC/B,SAAQ,qBAAqB,CAAC,GAAG,CAAC;gBACtB,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC;IA0DnC;;;OAGG;IACH,iBAAiB,CACf,MAAM,EAAE,GAAG,EACX,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,UAAU,CAAC,GAAG,CAAC;IAKlB;;;;OAIG;IACH,cAAc,CACZ,MAAM,EAAE,GAAG,EACX,WAAW,EAAE,UAAU,EACvB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,UAAU,CAAC,GAAG,CAAC;IAKlB;;;OAGG;IACH,gBAAgB,CACd,MAAM,EAAE,GAAG,EACX,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,UAAU,CAAC,GAAG,CAAC;IAKlB;;;OAGG;IACH,UAAU,IAAI,aAAa,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAK5C;;;OAGG;IACH,iBAAiB,CAAC,MAAM,EAAE,GAAG,GAAG,aAAa,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;CAI/D"}
@@ -1,130 +1,122 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ImmutableAuditLog = exports.AuditEventType = void 0;
3
+ exports.ImmutableAuditLog = void 0;
4
4
  /**
5
5
  * Immutable Audit Log for Government-Grade Voting
6
- * Node.js optimized with native crypto
6
+ * Node.js optimized - extends ecies-lib ImmutableAuditLog with Buffer support
7
7
  */
8
- const crypto_1 = require("crypto");
9
- var AuditEventType;
10
- (function (AuditEventType) {
11
- AuditEventType["PollCreated"] = "poll_created";
12
- AuditEventType["VoteCast"] = "vote_cast";
13
- AuditEventType["PollClosed"] = "poll_closed";
14
- })(AuditEventType || (exports.AuditEventType = AuditEventType = {}));
15
- class ImmutableAuditLog {
16
- entries = [];
17
- authority;
18
- sequence = 0;
8
+ const ecies_lib_1 = require("@digitaldefiance/ecies-lib");
9
+ /**
10
+ * Converts Uint8Array fields in an audit entry to Buffer
11
+ */
12
+ function convertAuditEntryToBuffer(entry) {
13
+ return {
14
+ ...entry,
15
+ previousHash: entry.previousHash instanceof Uint8Array &&
16
+ !(entry.previousHash instanceof Buffer)
17
+ ? Buffer.from(entry.previousHash)
18
+ : entry.previousHash,
19
+ entryHash: entry.entryHash instanceof Uint8Array &&
20
+ !(entry.entryHash instanceof Buffer)
21
+ ? Buffer.from(entry.entryHash)
22
+ : entry.entryHash,
23
+ signature: entry.signature instanceof Uint8Array &&
24
+ !(entry.signature instanceof Buffer)
25
+ ? Buffer.from(entry.signature)
26
+ : entry.signature,
27
+ voterIdHash: entry.voterIdHash instanceof Uint8Array &&
28
+ !(entry.voterIdHash instanceof Buffer)
29
+ ? Buffer.from(entry.voterIdHash)
30
+ : entry.voterIdHash,
31
+ };
32
+ }
33
+ /**
34
+ * Node.js ImmutableAuditLog that extends ecies-lib ImmutableAuditLog
35
+ * Keeps the generic TID parameter for flexibility, defaulting to Buffer
36
+ *
37
+ * The base class handles all the logic, we override methods to convert
38
+ * Uint8Array to Buffer for Node.js compatibility.
39
+ */
40
+ class ImmutableAuditLog extends ecies_lib_1.ImmutableAuditLog {
19
41
  constructor(authority) {
20
- this.authority = authority;
42
+ // Create an adapter that bridges the Buffer-based Member with Uint8Array-based ecies-lib
43
+ const authorityAdapter = {
44
+ ...authority,
45
+ // Convert the sign method from Buffer-based to Uint8Array-based
46
+ sign: (data) => {
47
+ const bufferData = Buffer.isBuffer(data) ? data : Buffer.from(data);
48
+ const signature = authority.sign(bufferData);
49
+ return signature instanceof Uint8Array
50
+ ? signature
51
+ : new Uint8Array(signature);
52
+ },
53
+ // Convert the verify method from Buffer-based to Uint8Array-based
54
+ verify: (signature, data) => {
55
+ const bufferSignature = Buffer.isBuffer(signature)
56
+ ? signature
57
+ : Buffer.from(signature);
58
+ const bufferData = Buffer.isBuffer(data) ? data : Buffer.from(data);
59
+ // Type assertion is safe here as we know SignatureBuffer extends Buffer
60
+ return authority.verify(bufferSignature, bufferData);
61
+ },
62
+ // Ensure publicKey is Uint8Array
63
+ publicKey: authority.publicKey instanceof Uint8Array
64
+ ? authority.publicKey
65
+ : new Uint8Array(authority.publicKey),
66
+ // Ensure idBytes is Uint8Array
67
+ idBytes: authority.idBytes instanceof Uint8Array
68
+ ? authority.idBytes
69
+ : new Uint8Array(authority.idBytes),
70
+ // Type assertions are safe here as the methods won't be used in audit log context
71
+ // and the underlying implementations are compatible
72
+ encryptDataStream: authority.encryptDataStream,
73
+ decryptDataStream: authority.decryptDataStream,
74
+ // Cast the encrypt/decrypt methods to handle the sync/async differences
75
+ encryptData: authority.encryptData,
76
+ decryptData: authority.decryptData,
77
+ };
78
+ super(authorityAdapter);
21
79
  }
80
+ /**
81
+ * Record poll creation event
82
+ * Overrides base method to convert Uint8Array to Buffer
83
+ */
22
84
  recordPollCreated(pollId, metadata) {
23
- return this.appendEntry({
24
- eventType: AuditEventType.PollCreated,
25
- pollId,
26
- authorityId: this.authority.id,
27
- metadata,
28
- });
85
+ const entry = super.recordPollCreated(pollId, metadata);
86
+ return convertAuditEntryToBuffer(entry);
29
87
  }
88
+ /**
89
+ * Record vote cast event
90
+ * Overrides base method to convert Uint8Array to Buffer
91
+ * Note: voterIdHash is Uint8Array for compatibility with base class
92
+ */
30
93
  recordVoteCast(pollId, voterIdHash, metadata) {
31
- return this.appendEntry({
32
- eventType: AuditEventType.VoteCast,
33
- pollId,
34
- voterIdHash,
35
- metadata,
36
- });
94
+ const entry = super.recordVoteCast(pollId, voterIdHash, metadata);
95
+ return convertAuditEntryToBuffer(entry);
37
96
  }
97
+ /**
98
+ * Record poll closed event
99
+ * Overrides base method to convert Uint8Array to Buffer
100
+ */
38
101
  recordPollClosed(pollId, metadata) {
39
- return this.appendEntry({
40
- eventType: AuditEventType.PollClosed,
41
- pollId,
42
- authorityId: this.authority.id,
43
- metadata,
44
- });
102
+ const entry = super.recordPollClosed(pollId, metadata);
103
+ return convertAuditEntryToBuffer(entry);
45
104
  }
105
+ /**
106
+ * Get all audit entries
107
+ * Overrides base method to convert Uint8Array to Buffer
108
+ */
46
109
  getEntries() {
47
- return Object.freeze([...this.entries]);
110
+ const entries = super.getEntries();
111
+ return entries.map((entry) => convertAuditEntryToBuffer(entry));
48
112
  }
113
+ /**
114
+ * Get entries for a specific poll
115
+ * Overrides base method to convert Uint8Array to Buffer
116
+ */
49
117
  getEntriesForPoll(pollId) {
50
- const pollIdStr = Buffer.from(pollId).toString('hex');
51
- return Object.freeze(this.entries.filter((e) => Buffer.from(e.pollId).toString('hex') === pollIdStr));
52
- }
53
- verifyChain() {
54
- if (this.entries.length === 0)
55
- return true;
56
- for (let i = 0; i < this.entries.length; i++) {
57
- const entry = this.entries[i];
58
- const computedHash = this.computeEntryHash(entry);
59
- if (!computedHash.equals(entry.entryHash))
60
- return false;
61
- if (!this.verifyEntry(entry))
62
- return false;
63
- if (i > 0) {
64
- const prevEntry = this.entries[i - 1];
65
- if (!entry.previousHash.equals(prevEntry.entryHash))
66
- return false;
67
- }
68
- }
69
- return true;
70
- }
71
- verifyEntry(entry) {
72
- const data = this.serializeEntryForSigning(entry);
73
- return this.authority.verify(entry.signature, data);
74
- }
75
- appendEntry(partial) {
76
- const previousHash = this.entries.length > 0
77
- ? this.entries[this.entries.length - 1].entryHash
78
- : Buffer.alloc(32);
79
- const entry = {
80
- sequence: this.sequence++,
81
- timestamp: this.getMicrosecondTimestamp(),
82
- previousHash,
83
- ...partial,
84
- };
85
- const entryHash = this.computeEntryHash(entry);
86
- const data = this.serializeEntryForSigning({ ...entry, entryHash });
87
- const signature = this.authority.sign(data);
88
- const finalEntry = { ...entry, entryHash, signature };
89
- this.entries.push(finalEntry);
90
- return finalEntry;
91
- }
92
- computeEntryHash(entry) {
93
- const data = this.serializeEntryForHashing(entry);
94
- return (0, crypto_1.createHash)('sha256').update(data).digest();
95
- }
96
- serializeEntryForHashing(entry) {
97
- const parts = [
98
- this.encodeNumber(entry.sequence),
99
- Buffer.from(entry.eventType, 'utf8'),
100
- this.encodeNumber(entry.timestamp),
101
- Buffer.from(entry.pollId),
102
- entry.previousHash,
103
- ];
104
- if (entry.voterIdHash)
105
- parts.push(entry.voterIdHash);
106
- if (entry.authorityId)
107
- parts.push(Buffer.from(entry.authorityId));
108
- if (entry.metadata)
109
- parts.push(Buffer.from(JSON.stringify(entry.metadata), 'utf8'));
110
- return Buffer.concat(parts);
111
- }
112
- serializeEntryForSigning(entry) {
113
- return Buffer.concat([
114
- this.serializeEntryForHashing(entry),
115
- entry.entryHash,
116
- ]);
117
- }
118
- getMicrosecondTimestamp() {
119
- // Get milliseconds since epoch and convert to microseconds
120
- // performance.now() is relative to process start, not epoch, so we only use Date.now()
121
- const now = Date.now();
122
- return now * 1000;
123
- }
124
- encodeNumber(n) {
125
- const buf = Buffer.alloc(8);
126
- buf.writeBigUInt64BE(BigInt(n));
127
- return buf;
118
+ const entries = super.getEntriesForPoll(pollId);
119
+ return entries.map((entry) => convertAuditEntryToBuffer(entry));
128
120
  }
129
121
  }
130
122
  exports.ImmutableAuditLog = ImmutableAuditLog;
@@ -1 +1 @@
1
- {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../../../../../packages/digitaldefiance-node-ecies-lib/src/lib/voting/audit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../../../../../packages/digitaldefiance-node-ecies-lib/src/lib/voting/audit.ts"],"names":[],"mappings":"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"}