@digitaldefiance/ecies-lib 1.0.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 (267) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +237 -0
  3. package/dist/backup-code-string.d.ts +26 -0
  4. package/dist/backup-code-string.d.ts.map +1 -0
  5. package/dist/backup-code-string.js +69 -0
  6. package/dist/backup-code-string.js.map +1 -0
  7. package/dist/constants.d.ts +22 -0
  8. package/dist/constants.d.ts.map +1 -0
  9. package/dist/constants.js +177 -0
  10. package/dist/constants.js.map +1 -0
  11. package/dist/email-string.d.ts +42 -0
  12. package/dist/email-string.d.ts.map +1 -0
  13. package/dist/email-string.js +67 -0
  14. package/dist/email-string.js.map +1 -0
  15. package/dist/enumerations/ecies-encryption-type.d.ts +15 -0
  16. package/dist/enumerations/ecies-encryption-type.d.ts.map +1 -0
  17. package/dist/enumerations/ecies-encryption-type.js +63 -0
  18. package/dist/enumerations/ecies-encryption-type.js.map +1 -0
  19. package/dist/enumerations/ecies-error-type.d.ts +32 -0
  20. package/dist/enumerations/ecies-error-type.d.ts.map +1 -0
  21. package/dist/enumerations/ecies-error-type.js +33 -0
  22. package/dist/enumerations/ecies-error-type.js.map +1 -0
  23. package/dist/enumerations/guid-brand-type.d.ts +27 -0
  24. package/dist/enumerations/guid-brand-type.d.ts.map +1 -0
  25. package/dist/enumerations/guid-brand-type.js +28 -0
  26. package/dist/enumerations/guid-brand-type.js.map +1 -0
  27. package/dist/enumerations/guid-error-type.d.ts +7 -0
  28. package/dist/enumerations/guid-error-type.d.ts.map +1 -0
  29. package/dist/enumerations/guid-error-type.js +8 -0
  30. package/dist/enumerations/guid-error-type.js.map +1 -0
  31. package/dist/enumerations/index.d.ts +13 -0
  32. package/dist/enumerations/index.d.ts.map +1 -0
  33. package/dist/enumerations/index.js +13 -0
  34. package/dist/enumerations/index.js.map +1 -0
  35. package/dist/enumerations/invalid-email-type.d.ts +6 -0
  36. package/dist/enumerations/invalid-email-type.d.ts.map +1 -0
  37. package/dist/enumerations/invalid-email-type.js +7 -0
  38. package/dist/enumerations/invalid-email-type.js.map +1 -0
  39. package/dist/enumerations/length-encoding-type.d.ts +7 -0
  40. package/dist/enumerations/length-encoding-type.d.ts.map +1 -0
  41. package/dist/enumerations/length-encoding-type.js +8 -0
  42. package/dist/enumerations/length-encoding-type.js.map +1 -0
  43. package/dist/enumerations/length-error-type.d.ts +6 -0
  44. package/dist/enumerations/length-error-type.d.ts.map +1 -0
  45. package/dist/enumerations/length-error-type.js +7 -0
  46. package/dist/enumerations/length-error-type.js.map +1 -0
  47. package/dist/enumerations/member-error-type.d.ts +87 -0
  48. package/dist/enumerations/member-error-type.d.ts.map +1 -0
  49. package/dist/enumerations/member-error-type.js +88 -0
  50. package/dist/enumerations/member-error-type.js.map +1 -0
  51. package/dist/enumerations/member-type.d.ts +16 -0
  52. package/dist/enumerations/member-type.d.ts.map +1 -0
  53. package/dist/enumerations/member-type.js +17 -0
  54. package/dist/enumerations/member-type.js.map +1 -0
  55. package/dist/enumerations/pbkdf2-error-type.d.ts +5 -0
  56. package/dist/enumerations/pbkdf2-error-type.d.ts.map +1 -0
  57. package/dist/enumerations/pbkdf2-error-type.js +6 -0
  58. package/dist/enumerations/pbkdf2-error-type.js.map +1 -0
  59. package/dist/enumerations/pbkdf2-profile.d.ts +5 -0
  60. package/dist/enumerations/pbkdf2-profile.d.ts.map +1 -0
  61. package/dist/enumerations/pbkdf2-profile.js +6 -0
  62. package/dist/enumerations/pbkdf2-profile.js.map +1 -0
  63. package/dist/enumerations/secure-storage-error-type.d.ts +6 -0
  64. package/dist/enumerations/secure-storage-error-type.d.ts.map +1 -0
  65. package/dist/enumerations/secure-storage-error-type.js +7 -0
  66. package/dist/enumerations/secure-storage-error-type.js.map +1 -0
  67. package/dist/errors/disposed.d.ts +4 -0
  68. package/dist/errors/disposed.d.ts.map +1 -0
  69. package/dist/errors/disposed.js +8 -0
  70. package/dist/errors/disposed.js.map +1 -0
  71. package/dist/errors/ecies.d.ts +6 -0
  72. package/dist/errors/ecies.d.ts.map +1 -0
  73. package/dist/errors/ecies.js +8 -0
  74. package/dist/errors/ecies.js.map +1 -0
  75. package/dist/errors/guid.d.ts +14 -0
  76. package/dist/errors/guid.d.ts.map +1 -0
  77. package/dist/errors/guid.js +19 -0
  78. package/dist/errors/guid.js.map +1 -0
  79. package/dist/errors/index.d.ts +9 -0
  80. package/dist/errors/index.d.ts.map +1 -0
  81. package/dist/errors/index.js +9 -0
  82. package/dist/errors/index.js.map +1 -0
  83. package/dist/errors/invalid-backup-code.d.ts +4 -0
  84. package/dist/errors/invalid-backup-code.d.ts.map +1 -0
  85. package/dist/errors/invalid-backup-code.js +7 -0
  86. package/dist/errors/invalid-backup-code.js.map +1 -0
  87. package/dist/errors/invalid-email.d.ts +6 -0
  88. package/dist/errors/invalid-email.d.ts.map +1 -0
  89. package/dist/errors/invalid-email.js +9 -0
  90. package/dist/errors/invalid-email.js.map +1 -0
  91. package/dist/errors/length.d.ts +6 -0
  92. package/dist/errors/length.d.ts.map +1 -0
  93. package/dist/errors/length.js +9 -0
  94. package/dist/errors/length.js.map +1 -0
  95. package/dist/errors/member.d.ts +6 -0
  96. package/dist/errors/member.d.ts.map +1 -0
  97. package/dist/errors/member.js +8 -0
  98. package/dist/errors/member.js.map +1 -0
  99. package/dist/errors/pbkdf2.d.ts +6 -0
  100. package/dist/errors/pbkdf2.d.ts.map +1 -0
  101. package/dist/errors/pbkdf2.js +8 -0
  102. package/dist/errors/pbkdf2.js.map +1 -0
  103. package/dist/errors/secure-storage.d.ts +6 -0
  104. package/dist/errors/secure-storage.d.ts.map +1 -0
  105. package/dist/errors/secure-storage.js +8 -0
  106. package/dist/errors/secure-storage.js.map +1 -0
  107. package/dist/errors/typed.d.ts +5 -0
  108. package/dist/errors/typed.d.ts.map +1 -0
  109. package/dist/errors/typed.js +11 -0
  110. package/dist/errors/typed.js.map +1 -0
  111. package/dist/guid.d.ts +153 -0
  112. package/dist/guid.d.ts.map +1 -0
  113. package/dist/guid.js +604 -0
  114. package/dist/guid.js.map +1 -0
  115. package/dist/index.d.ts +13 -0
  116. package/dist/index.d.ts.map +1 -0
  117. package/dist/index.js +13 -0
  118. package/dist/index.js.map +1 -0
  119. package/dist/interfaces/backup-code-consts.d.ts +16 -0
  120. package/dist/interfaces/backup-code-consts.d.ts.map +1 -0
  121. package/dist/interfaces/backup-code-consts.js +2 -0
  122. package/dist/interfaces/backup-code-consts.js.map +1 -0
  123. package/dist/interfaces/backup-code.d.ts +7 -0
  124. package/dist/interfaces/backup-code.d.ts.map +1 -0
  125. package/dist/interfaces/backup-code.js +2 -0
  126. package/dist/interfaces/backup-code.js.map +1 -0
  127. package/dist/interfaces/constants.d.ts +45 -0
  128. package/dist/interfaces/constants.d.ts.map +1 -0
  129. package/dist/interfaces/constants.js +2 -0
  130. package/dist/interfaces/constants.js.map +1 -0
  131. package/dist/interfaces/ecies-config.d.ts +9 -0
  132. package/dist/interfaces/ecies-config.d.ts.map +1 -0
  133. package/dist/interfaces/ecies-config.js +2 -0
  134. package/dist/interfaces/ecies-config.js.map +1 -0
  135. package/dist/interfaces/ecies-consts.d.ts +58 -0
  136. package/dist/interfaces/ecies-consts.d.ts.map +1 -0
  137. package/dist/interfaces/ecies-consts.js +2 -0
  138. package/dist/interfaces/ecies-consts.js.map +1 -0
  139. package/dist/interfaces/ecies-file-service.d.ts +7 -0
  140. package/dist/interfaces/ecies-file-service.d.ts.map +1 -0
  141. package/dist/interfaces/ecies-file-service.js +2 -0
  142. package/dist/interfaces/ecies-file-service.js.map +1 -0
  143. package/dist/interfaces/guid.d.ts +45 -0
  144. package/dist/interfaces/guid.d.ts.map +1 -0
  145. package/dist/interfaces/guid.js +2 -0
  146. package/dist/interfaces/guid.js.map +1 -0
  147. package/dist/interfaces/index.d.ts +14 -0
  148. package/dist/interfaces/index.d.ts.map +1 -0
  149. package/dist/interfaces/index.js +14 -0
  150. package/dist/interfaces/index.js.map +1 -0
  151. package/dist/interfaces/member-operational.d.ts +39 -0
  152. package/dist/interfaces/member-operational.d.ts.map +1 -0
  153. package/dist/interfaces/member-operational.js +2 -0
  154. package/dist/interfaces/member-operational.js.map +1 -0
  155. package/dist/interfaces/member-storage.d.ts +21 -0
  156. package/dist/interfaces/member-storage.d.ts.map +1 -0
  157. package/dist/interfaces/member-storage.js +2 -0
  158. package/dist/interfaces/member-storage.js.map +1 -0
  159. package/dist/interfaces/member-with-mnemonic.d.ts +7 -0
  160. package/dist/interfaces/member-with-mnemonic.d.ts.map +1 -0
  161. package/dist/interfaces/member-with-mnemonic.js +2 -0
  162. package/dist/interfaces/member-with-mnemonic.js.map +1 -0
  163. package/dist/interfaces/pbkdf2-config.d.ts +7 -0
  164. package/dist/interfaces/pbkdf2-config.d.ts.map +1 -0
  165. package/dist/interfaces/pbkdf2-config.js +2 -0
  166. package/dist/interfaces/pbkdf2-config.js.map +1 -0
  167. package/dist/interfaces/pbkdf2-consts.d.ts +9 -0
  168. package/dist/interfaces/pbkdf2-consts.d.ts.map +1 -0
  169. package/dist/interfaces/pbkdf2-consts.js +2 -0
  170. package/dist/interfaces/pbkdf2-consts.js.map +1 -0
  171. package/dist/interfaces/pbkdf2-result.d.ts +6 -0
  172. package/dist/interfaces/pbkdf2-result.d.ts.map +1 -0
  173. package/dist/interfaces/pbkdf2-result.js +2 -0
  174. package/dist/interfaces/pbkdf2-result.js.map +1 -0
  175. package/dist/member.d.ts +68 -0
  176. package/dist/member.d.ts.map +1 -0
  177. package/dist/member.js +256 -0
  178. package/dist/member.js.map +1 -0
  179. package/dist/pbkdf2-profiles.d.ts +6 -0
  180. package/dist/pbkdf2-profiles.d.ts.map +1 -0
  181. package/dist/pbkdf2-profiles.js +2 -0
  182. package/dist/pbkdf2-profiles.js.map +1 -0
  183. package/dist/secure-buffer.d.ts +38 -0
  184. package/dist/secure-buffer.d.ts.map +1 -0
  185. package/dist/secure-buffer.js +161 -0
  186. package/dist/secure-buffer.js.map +1 -0
  187. package/dist/secure-string.d.ts +39 -0
  188. package/dist/secure-string.d.ts.map +1 -0
  189. package/dist/secure-string.js +188 -0
  190. package/dist/secure-string.js.map +1 -0
  191. package/dist/services/aes-gcm.d.ts +56 -0
  192. package/dist/services/aes-gcm.d.ts.map +1 -0
  193. package/dist/services/aes-gcm.js +101 -0
  194. package/dist/services/aes-gcm.js.map +1 -0
  195. package/dist/services/ecies/crypto-core.d.ts +53 -0
  196. package/dist/services/ecies/crypto-core.d.ts.map +1 -0
  197. package/dist/services/ecies/crypto-core.js +158 -0
  198. package/dist/services/ecies/crypto-core.js.map +1 -0
  199. package/dist/services/ecies/example.d.ts +25 -0
  200. package/dist/services/ecies/example.d.ts.map +1 -0
  201. package/dist/services/ecies/example.js +121 -0
  202. package/dist/services/ecies/example.js.map +1 -0
  203. package/dist/services/ecies/file.d.ts +18 -0
  204. package/dist/services/ecies/file.d.ts.map +1 -0
  205. package/dist/services/ecies/file.js +106 -0
  206. package/dist/services/ecies/file.js.map +1 -0
  207. package/dist/services/ecies/index.d.ts +38 -0
  208. package/dist/services/ecies/index.d.ts.map +1 -0
  209. package/dist/services/ecies/index.js +39 -0
  210. package/dist/services/ecies/index.js.map +1 -0
  211. package/dist/services/ecies/integration.d.ts +59 -0
  212. package/dist/services/ecies/integration.d.ts.map +1 -0
  213. package/dist/services/ecies/integration.js +163 -0
  214. package/dist/services/ecies/integration.js.map +1 -0
  215. package/dist/services/ecies/interfaces.d.ts +51 -0
  216. package/dist/services/ecies/interfaces.d.ts.map +1 -0
  217. package/dist/services/ecies/interfaces.js +5 -0
  218. package/dist/services/ecies/interfaces.js.map +1 -0
  219. package/dist/services/ecies/manual-test.d.ts +29 -0
  220. package/dist/services/ecies/manual-test.d.ts.map +1 -0
  221. package/dist/services/ecies/manual-test.js +163 -0
  222. package/dist/services/ecies/manual-test.js.map +1 -0
  223. package/dist/services/ecies/multi-recipient.d.ts +49 -0
  224. package/dist/services/ecies/multi-recipient.d.ts.map +1 -0
  225. package/dist/services/ecies/multi-recipient.js +222 -0
  226. package/dist/services/ecies/multi-recipient.js.map +1 -0
  227. package/dist/services/ecies/service.d.ts +100 -0
  228. package/dist/services/ecies/service.d.ts.map +1 -0
  229. package/dist/services/ecies/service.js +186 -0
  230. package/dist/services/ecies/service.js.map +1 -0
  231. package/dist/services/ecies/signature.d.ts +27 -0
  232. package/dist/services/ecies/signature.d.ts.map +1 -0
  233. package/dist/services/ecies/signature.js +72 -0
  234. package/dist/services/ecies/signature.js.map +1 -0
  235. package/dist/services/ecies/single-recipient.d.ts +43 -0
  236. package/dist/services/ecies/single-recipient.d.ts.map +1 -0
  237. package/dist/services/ecies/single-recipient.js +196 -0
  238. package/dist/services/ecies/single-recipient.js.map +1 -0
  239. package/dist/services/index.d.ts +5 -0
  240. package/dist/services/index.d.ts.map +1 -0
  241. package/dist/services/index.js +5 -0
  242. package/dist/services/index.js.map +1 -0
  243. package/dist/services/password-login.d.ts +41 -0
  244. package/dist/services/password-login.d.ts.map +1 -0
  245. package/dist/services/password-login.js +96 -0
  246. package/dist/services/password-login.js.map +1 -0
  247. package/dist/services/pbkdf2.d.ts +49 -0
  248. package/dist/services/pbkdf2.d.ts.map +1 -0
  249. package/dist/services/pbkdf2.js +97 -0
  250. package/dist/services/pbkdf2.js.map +1 -0
  251. package/dist/services/xor.d.ts +37 -0
  252. package/dist/services/xor.d.ts.map +1 -0
  253. package/dist/services/xor.js +63 -0
  254. package/dist/services/xor.js.map +1 -0
  255. package/dist/types.d.ts +29 -0
  256. package/dist/types.d.ts.map +1 -0
  257. package/dist/types.js +2 -0
  258. package/dist/types.js.map +1 -0
  259. package/dist/utils.d.ts +62 -0
  260. package/dist/utils.d.ts.map +1 -0
  261. package/dist/utils.js +244 -0
  262. package/dist/utils.js.map +1 -0
  263. package/dist/xor.d.ts +37 -0
  264. package/dist/xor.d.ts.map +1 -0
  265. package/dist/xor.js +63 -0
  266. package/dist/xor.js.map +1 -0
  267. package/package.json +60 -0
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Browser-compatible ECIES interfaces
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=interfaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../../src/services/ecies/interfaces.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Simple integration tests for the browser ECIES service
3
+ * These tests can be run in the browser console to verify functionality
4
+ */
5
+ /**
6
+ * Test basic encryption/decryption roundtrip
7
+ */
8
+ export declare function testBasicEncryption(): Promise<boolean>;
9
+ /**
10
+ * Test simple mode encryption
11
+ */
12
+ export declare function testSimpleEncryption(): Promise<boolean>;
13
+ /**
14
+ * Test signature operations
15
+ */
16
+ export declare function testSignatures(): Promise<boolean>;
17
+ /**
18
+ * Test mnemonic validation
19
+ */
20
+ export declare function testMnemonicValidation(): Promise<boolean>;
21
+ /**
22
+ * Test cross-party encryption (Alice encrypts for Bob)
23
+ */
24
+ export declare function testCrossPartyEncryption(): Promise<boolean>;
25
+ /**
26
+ * Run all tests
27
+ */
28
+ export declare function runAllTests(): Promise<void>;
29
+ //# sourceMappingURL=manual-test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manual-test.d.ts","sourceRoot":"","sources":["../../../src/services/ecies/manual-test.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH;;GAEG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,OAAO,CAAC,CAuB5D;AAED;;GAEG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC,CAuB7D;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,CAmBvD;AAED;;GAEG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,OAAO,CAAC,CA6B/D;AAED;;GAEG;AACH,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,OAAO,CAAC,CA4CjE;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAuCjD"}
@@ -0,0 +1,163 @@
1
+ /**
2
+ * Simple integration tests for the browser ECIES service
3
+ * These tests can be run in the browser console to verify functionality
4
+ */
5
+ import { SecureString } from '../../secure-string';
6
+ import { stringToUint8Array, uint8ArrayToHex, uint8ArrayToString, } from '../../utils';
7
+ import { ECIESService } from './service';
8
+ /**
9
+ * Test basic encryption/decryption roundtrip
10
+ */
11
+ export async function testBasicEncryption() {
12
+ try {
13
+ const ecies = new ECIESService();
14
+ const mnemonic = ecies.generateNewMnemonic();
15
+ const { privateKey, publicKey } = ecies.mnemonicToSimpleKeyPair(mnemonic);
16
+ const message = stringToUint8Array('Test message');
17
+ const encrypted = await ecies.encryptSimpleOrSingle(false, publicKey, message);
18
+ const decrypted = await ecies.decryptSimpleOrSingleWithHeader(false, privateKey, encrypted);
19
+ return uint8ArrayToString(message) === uint8ArrayToString(decrypted);
20
+ }
21
+ catch (error) {
22
+ console.error('Basic encryption test failed:', error);
23
+ return false;
24
+ }
25
+ }
26
+ /**
27
+ * Test simple mode encryption
28
+ */
29
+ export async function testSimpleEncryption() {
30
+ try {
31
+ const ecies = new ECIESService();
32
+ const mnemonic = ecies.generateNewMnemonic();
33
+ const { privateKey, publicKey } = ecies.mnemonicToSimpleKeyPair(mnemonic);
34
+ const message = stringToUint8Array('Simple test message');
35
+ const encrypted = await ecies.encryptSimpleOrSingle(true, publicKey, message);
36
+ const decrypted = await ecies.decryptSimpleOrSingleWithHeader(true, privateKey, encrypted);
37
+ return uint8ArrayToString(message) === uint8ArrayToString(decrypted);
38
+ }
39
+ catch (error) {
40
+ console.error('Simple encryption test failed:', error);
41
+ return false;
42
+ }
43
+ }
44
+ /**
45
+ * Test signature operations
46
+ */
47
+ export async function testSignatures() {
48
+ try {
49
+ const ecies = new ECIESService();
50
+ const mnemonic = ecies.generateNewMnemonic();
51
+ const { privateKey, publicKey } = ecies.mnemonicToSimpleKeyPair(mnemonic);
52
+ const message = stringToUint8Array('Message to sign');
53
+ const signature = ecies.signMessage(privateKey, message);
54
+ const isValid = ecies.verifyMessage(publicKey, message, signature);
55
+ // Test with wrong message
56
+ const wrongMessage = stringToUint8Array('Wrong message');
57
+ const isInvalid = ecies.verifyMessage(publicKey, wrongMessage, signature);
58
+ return isValid && !isInvalid;
59
+ }
60
+ catch (error) {
61
+ console.error('Signature test failed:', error);
62
+ return false;
63
+ }
64
+ }
65
+ /**
66
+ * Test mnemonic validation
67
+ */
68
+ export async function testMnemonicValidation() {
69
+ try {
70
+ const ecies = new ECIESService();
71
+ // Test valid mnemonic
72
+ const validMnemonic = new SecureString('abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about');
73
+ const { wallet: wallet1 } = ecies.walletAndSeedFromMnemonic(validMnemonic);
74
+ const { wallet: wallet2 } = ecies.walletAndSeedFromMnemonic(validMnemonic);
75
+ // Should produce same keys
76
+ const sameKeys = uint8ArrayToHex(wallet1.getPrivateKey()) ===
77
+ uint8ArrayToHex(wallet2.getPrivateKey());
78
+ // Test invalid mnemonic
79
+ try {
80
+ ecies.walletAndSeedFromMnemonic(new SecureString('invalid mnemonic phrase'));
81
+ return false; // Should have thrown
82
+ }
83
+ catch {
84
+ return sameKeys; // Expected to throw
85
+ }
86
+ }
87
+ catch (error) {
88
+ console.error('Mnemonic validation test failed:', error);
89
+ return false;
90
+ }
91
+ }
92
+ /**
93
+ * Test cross-party encryption (Alice encrypts for Bob)
94
+ */
95
+ export async function testCrossPartyEncryption() {
96
+ try {
97
+ const ecies = new ECIESService();
98
+ // Alice generates her keys
99
+ const aliceMnemonic = ecies.generateNewMnemonic();
100
+ const aliceKeys = ecies.mnemonicToSimpleKeyPair(aliceMnemonic);
101
+ // Bob generates his keys
102
+ const bobMnemonic = ecies.generateNewMnemonic();
103
+ const bobKeys = ecies.mnemonicToSimpleKeyPair(bobMnemonic);
104
+ // Alice encrypts a message for Bob
105
+ const message = stringToUint8Array('Secret message from Alice to Bob');
106
+ const encrypted = await ecies.encryptSimpleOrSingle(false, bobKeys.publicKey, message);
107
+ // Bob decrypts the message
108
+ const decrypted = await ecies.decryptSimpleOrSingleWithHeader(false, bobKeys.privateKey, encrypted);
109
+ // Alice should not be able to decrypt (wrong private key)
110
+ try {
111
+ await ecies.decryptSimpleOrSingleWithHeader(false, aliceKeys.privateKey, encrypted);
112
+ return false; // Should have failed
113
+ }
114
+ catch {
115
+ // Expected to fail
116
+ }
117
+ return uint8ArrayToString(message) === uint8ArrayToString(decrypted);
118
+ }
119
+ catch (error) {
120
+ console.error('Cross-party encryption test failed:', error);
121
+ return false;
122
+ }
123
+ }
124
+ /**
125
+ * Run all tests
126
+ */
127
+ export async function runAllTests() {
128
+ console.log('Running browser ECIES service tests...\n');
129
+ const tests = [
130
+ { name: 'Basic Encryption', test: testBasicEncryption },
131
+ { name: 'Simple Encryption', test: testSimpleEncryption },
132
+ { name: 'Digital Signatures', test: testSignatures },
133
+ { name: 'Mnemonic Validation', test: testMnemonicValidation },
134
+ { name: 'Cross-Party Encryption', test: testCrossPartyEncryption },
135
+ ];
136
+ let passed = 0;
137
+ let failed = 0;
138
+ for (const { name, test } of tests) {
139
+ try {
140
+ const result = await test();
141
+ if (result) {
142
+ console.log(`✅ ${name}: PASSED`);
143
+ passed++;
144
+ }
145
+ else {
146
+ console.log(`❌ ${name}: FAILED`);
147
+ failed++;
148
+ }
149
+ }
150
+ catch (error) {
151
+ console.log(`❌ ${name}: ERROR - ${error}`);
152
+ failed++;
153
+ }
154
+ }
155
+ console.log(`\nTest Results: ${passed} passed, ${failed} failed`);
156
+ if (failed === 0) {
157
+ console.log('🎉 All tests passed! The browser ECIES service is working correctly.');
158
+ }
159
+ else {
160
+ console.log('⚠️ Some tests failed. Please check the implementation.');
161
+ }
162
+ }
163
+ //# sourceMappingURL=manual-test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manual-test.js","sourceRoot":"","sources":["../../../src/services/ecies/manual-test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import { IECIESConfig } from '../../interfaces/ecies-config';
2
+ import { IMultiEncryptedMessage, IMultiEncryptedParsedHeader, IMultiRecipient } from './interfaces';
3
+ /**
4
+ * Browser-compatible multi-recipient ECIES encryption/decryption
5
+ */
6
+ export declare class EciesMultiRecipient {
7
+ private readonly cryptoCore;
8
+ constructor(config: IECIESConfig);
9
+ /**
10
+ * Get the header size for multi-recipient encryption
11
+ */
12
+ getHeaderSize(recipientCount: number): number;
13
+ /**
14
+ * Encrypt a message symmetric key with a public key
15
+ * @param receiverPublicKey The public key of the receiver
16
+ * @param messageSymmetricKey The message to encrypt
17
+ * @returns The encrypted message
18
+ */
19
+ encryptKey(receiverPublicKey: Uint8Array, messageSymmetricKey: Uint8Array): Promise<Uint8Array>;
20
+ /**
21
+ * Decrypts symmetric key encrypted with ECIES
22
+ * @param privateKey The private key to decrypt the data
23
+ * @param encryptedKey The data to decrypt
24
+ * @returns The decrypted data buffer
25
+ */
26
+ decryptKey(privateKey: Uint8Array, encryptedKey: Uint8Array): Promise<Uint8Array>;
27
+ /**
28
+ * Encrypt a message for multiple recipients
29
+ */
30
+ encryptMultiple(recipients: IMultiRecipient[], message: Uint8Array, preamble?: Uint8Array): Promise<IMultiEncryptedMessage>;
31
+ /**
32
+ * Decrypt a multi-recipient message for a specific recipient
33
+ */
34
+ decryptMultipleForRecipient(encryptedData: IMultiEncryptedMessage, recipientId: Uint8Array, privateKey: Uint8Array): Promise<Uint8Array>;
35
+ /**
36
+ * Build header for multi-recipient message
37
+ */
38
+ buildHeader(data: IMultiEncryptedMessage): Uint8Array;
39
+ /**
40
+ * Parse multi-recipient header
41
+ */
42
+ parseHeader(data: Uint8Array): IMultiEncryptedParsedHeader;
43
+ /**
44
+ * Parse complete multi-recipient message
45
+ */
46
+ parseMessage(data: Uint8Array): IMultiEncryptedMessage;
47
+ private arraysEqual;
48
+ }
49
+ //# sourceMappingURL=multi-recipient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multi-recipient.d.ts","sourceRoot":"","sources":["../../../src/services/ecies/multi-recipient.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAI7D,OAAO,EACL,sBAAsB,EACtB,2BAA2B,EAC3B,eAAe,EAChB,MAAM,cAAc,CAAC;AAEtB;;GAEG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAkB;gBAEjC,MAAM,EAAE,YAAY;IAIhC;;OAEG;IACI,aAAa,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM;IASpD;;;;;OAKG;IACU,UAAU,CACrB,iBAAiB,EAAE,UAAU,EAC7B,mBAAmB,EAAE,UAAU,GAC9B,OAAO,CAAC,UAAU,CAAC;IA6BtB;;;;;OAKG;IACU,UAAU,CACrB,UAAU,EAAE,UAAU,EACtB,YAAY,EAAE,UAAU,GACvB,OAAO,CAAC,UAAU,CAAC;IAgDtB;;OAEG;IACU,eAAe,CAC1B,UAAU,EAAE,eAAe,EAAE,EAC7B,OAAO,EAAE,UAAU,EACnB,QAAQ,GAAE,UAA8B,GACvC,OAAO,CAAC,sBAAsB,CAAC;IA0DlC;;OAEG;IACU,2BAA2B,CACtC,aAAa,EAAE,sBAAsB,EACrC,WAAW,EAAE,UAAU,EACvB,UAAU,EAAE,UAAU,GACrB,OAAO,CAAC,UAAU,CAAC;IAsDtB;;OAEG;IACI,WAAW,CAAC,IAAI,EAAE,sBAAsB,GAAG,UAAU;IAuC5D;;OAEG;IACI,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,2BAA2B;IAoDjE;;OAEG;IACI,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,sBAAsB;IAU7D,OAAO,CAAC,WAAW;CAOpB"}
@@ -0,0 +1,222 @@
1
+ import { ECIES } from '../../constants';
2
+ import { concatUint8Arrays } from '../../utils';
3
+ import { AESGCMService } from '../aes-gcm';
4
+ import { EciesCryptoCore } from './crypto-core';
5
+ /**
6
+ * Browser-compatible multi-recipient ECIES encryption/decryption
7
+ */
8
+ export class EciesMultiRecipient {
9
+ cryptoCore;
10
+ constructor(config) {
11
+ this.cryptoCore = new EciesCryptoCore(config);
12
+ }
13
+ /**
14
+ * Get the header size for multi-recipient encryption
15
+ */
16
+ getHeaderSize(recipientCount) {
17
+ return (ECIES.MULTIPLE.DATA_LENGTH_SIZE +
18
+ ECIES.MULTIPLE.RECIPIENT_COUNT_SIZE +
19
+ recipientCount * ECIES.MULTIPLE.RECIPIENT_ID_SIZE +
20
+ recipientCount * ECIES.MULTIPLE.ENCRYPTED_KEY_SIZE);
21
+ }
22
+ /**
23
+ * Encrypt a message symmetric key with a public key
24
+ * @param receiverPublicKey The public key of the receiver
25
+ * @param messageSymmetricKey The message to encrypt
26
+ * @returns The encrypted message
27
+ */
28
+ async encryptKey(receiverPublicKey, messageSymmetricKey) {
29
+ const ephemeralKeyPair = await this.cryptoCore.generateEphemeralKeyPair();
30
+ const sharedSecret = await this.cryptoCore.computeSharedSecret(ephemeralKeyPair.privateKey, receiverPublicKey);
31
+ const symKey = sharedSecret.slice(0, ECIES.SYMMETRIC.KEY_SIZE);
32
+ const encryptResult = await AESGCMService.encrypt(messageSymmetricKey, symKey, true);
33
+ const { encrypted, iv } = encryptResult;
34
+ const authTag = encryptResult.tag;
35
+ if (!authTag) {
36
+ throw new Error('Authentication tag is required for key encryption');
37
+ }
38
+ return concatUint8Arrays(new Uint8Array(ephemeralKeyPair.publicKey), iv, authTag, encrypted);
39
+ }
40
+ /**
41
+ * Decrypts symmetric key encrypted with ECIES
42
+ * @param privateKey The private key to decrypt the data
43
+ * @param encryptedKey The data to decrypt
44
+ * @returns The decrypted data buffer
45
+ */
46
+ async decryptKey(privateKey, encryptedKey) {
47
+ if (encryptedKey.length !== ECIES.MULTIPLE.ENCRYPTED_KEY_SIZE) {
48
+ throw new Error(`Invalid encrypted key length: expected ${ECIES.MULTIPLE.ENCRYPTED_KEY_SIZE}, got ${encryptedKey.length}`);
49
+ }
50
+ const ephemeralPublicKey = encryptedKey.slice(0, ECIES.PUBLIC_KEY_LENGTH);
51
+ const iv = encryptedKey.slice(ECIES.PUBLIC_KEY_LENGTH, ECIES.PUBLIC_KEY_LENGTH + ECIES.IV_SIZE);
52
+ const authTag = encryptedKey.slice(ECIES.PUBLIC_KEY_LENGTH + ECIES.IV_SIZE, ECIES.PUBLIC_KEY_LENGTH + ECIES.IV_SIZE + ECIES.AUTH_TAG_SIZE);
53
+ const encrypted = encryptedKey.slice(ECIES.PUBLIC_KEY_LENGTH + ECIES.IV_SIZE + ECIES.AUTH_TAG_SIZE);
54
+ const sharedSecret = await this.cryptoCore.computeSharedSecret(privateKey, ephemeralPublicKey);
55
+ const symKey = sharedSecret.slice(0, ECIES.SYMMETRIC.KEY_SIZE);
56
+ const encryptedWithTag = AESGCMService.combineEncryptedDataAndTag(encrypted, authTag);
57
+ try {
58
+ const decrypted = await AESGCMService.decrypt(iv, encryptedWithTag, symKey, true);
59
+ if (decrypted.length !== ECIES.SYMMETRIC.KEY_SIZE) {
60
+ throw new Error('Invalid data length');
61
+ }
62
+ return decrypted;
63
+ }
64
+ catch (error) {
65
+ console.error('Failed to decrypt key:', error);
66
+ throw new Error('Failed to decrypt key');
67
+ }
68
+ }
69
+ /**
70
+ * Encrypt a message for multiple recipients
71
+ */
72
+ async encryptMultiple(recipients, message, preamble = new Uint8Array(0)) {
73
+ if (recipients.length > ECIES.MULTIPLE.MAX_RECIPIENTS) {
74
+ throw new Error(`Too many recipients: ${recipients.length}`);
75
+ }
76
+ if (message.length > ECIES.MAX_RAW_DATA_SIZE) {
77
+ throw new Error(`Message too large: ${message.length}`);
78
+ }
79
+ // Generate symmetric key
80
+ const symmetricKey = crypto.getRandomValues(new Uint8Array(ECIES.SYMMETRIC.KEY_SIZE));
81
+ // Encrypt message with symmetric key
82
+ const encryptResult = await AESGCMService.encrypt(message, symmetricKey, true);
83
+ const { encrypted, iv } = encryptResult;
84
+ const authTag = encryptResult.tag;
85
+ if (!authTag) {
86
+ throw new Error('Authentication tag is required for multi-recipient ECIES encryption');
87
+ }
88
+ // Create stored message: preamble + iv + authTag + encrypted
89
+ const storedMessage = concatUint8Arrays(preamble, iv, authTag, encrypted);
90
+ // Encrypt symmetric key for each recipient
91
+ const recipientIds = [];
92
+ const recipientKeys = [];
93
+ for (const recipient of recipients) {
94
+ const encryptedKey = await this.encryptKey(recipient.publicKey, symmetricKey);
95
+ recipientIds.push(recipient.id);
96
+ recipientKeys.push(encryptedKey);
97
+ }
98
+ const headerSize = this.getHeaderSize(recipients.length);
99
+ return {
100
+ dataLength: message.length,
101
+ recipientCount: recipients.length,
102
+ recipientIds,
103
+ recipientKeys,
104
+ encryptedMessage: storedMessage,
105
+ headerSize,
106
+ };
107
+ }
108
+ /**
109
+ * Decrypt a multi-recipient message for a specific recipient
110
+ */
111
+ async decryptMultipleForRecipient(encryptedData, recipientId, privateKey) {
112
+ // Find recipient's encrypted key
113
+ const recipientIndex = encryptedData.recipientIds.findIndex((id) => this.arraysEqual(id, recipientId));
114
+ if (recipientIndex === -1) {
115
+ throw new Error('Recipient not found');
116
+ }
117
+ const encryptedKey = encryptedData.recipientKeys[recipientIndex];
118
+ // Decrypt the symmetric key
119
+ const symmetricKey = await this.decryptKey(privateKey, encryptedKey);
120
+ // Extract components from encrypted message
121
+ let offset = 0;
122
+ const iv = encryptedData.encryptedMessage.slice(offset, offset + ECIES.IV_SIZE);
123
+ offset += ECIES.IV_SIZE;
124
+ const authTag = encryptedData.encryptedMessage.slice(offset, offset + ECIES.AUTH_TAG_SIZE);
125
+ offset += ECIES.AUTH_TAG_SIZE;
126
+ const encrypted = encryptedData.encryptedMessage.slice(offset);
127
+ // AES-GCM provides authentication via auth tag (no separate CRC needed)
128
+ // Decrypt with symmetric key
129
+ const encryptedWithTag = AESGCMService.combineEncryptedDataAndTag(encrypted, authTag);
130
+ const decrypted = await AESGCMService.decrypt(iv, encryptedWithTag, symmetricKey, true);
131
+ // Verify length
132
+ if (decrypted.length !== encryptedData.dataLength) {
133
+ throw new Error('Decrypted data length mismatch');
134
+ }
135
+ return decrypted;
136
+ }
137
+ /**
138
+ * Build header for multi-recipient message
139
+ */
140
+ buildHeader(data) {
141
+ if (data.recipientIds.length !== data.recipientKeys.length) {
142
+ throw new Error('Recipient count mismatch');
143
+ }
144
+ if (data.dataLength < 0 || data.dataLength > ECIES.MAX_RAW_DATA_SIZE) {
145
+ throw new Error('Invalid data length');
146
+ }
147
+ // Data length (8 bytes)
148
+ const dataLengthUint8Array = new Uint8Array(8);
149
+ new DataView(dataLengthUint8Array.buffer).setBigUint64(0, BigInt(data.dataLength), false);
150
+ // Recipient count (2 bytes)
151
+ const recipientCountUint8Array = new Uint8Array(2);
152
+ new DataView(recipientCountUint8Array.buffer).setUint16(0, data.recipientIds.length, false);
153
+ // Recipient IDs
154
+ const recipientIdsUint8Array = concatUint8Arrays(...data.recipientIds);
155
+ // Encrypted keys
156
+ const encryptedKeysUint8Array = concatUint8Arrays(...data.recipientKeys);
157
+ return concatUint8Arrays(dataLengthUint8Array, recipientCountUint8Array, recipientIdsUint8Array, encryptedKeysUint8Array);
158
+ }
159
+ /**
160
+ * Parse multi-recipient header
161
+ */
162
+ parseHeader(data) {
163
+ if (data.length < 10) {
164
+ // minimum: 8 + 2
165
+ throw new Error('Data too short for multi-recipient header');
166
+ }
167
+ let offset = 0;
168
+ const view = new DataView(data.buffer, data.byteOffset);
169
+ // Read data length
170
+ const dataLength = Number(view.getBigUint64(offset, false));
171
+ offset += 8;
172
+ if (dataLength <= 0 || dataLength > ECIES.MAX_RAW_DATA_SIZE) {
173
+ throw new Error('Invalid data length');
174
+ }
175
+ // Read recipient count
176
+ const recipientCount = view.getUint16(offset, false);
177
+ offset += 2;
178
+ if (recipientCount <= 0 || recipientCount > ECIES.MULTIPLE.MAX_RECIPIENTS) {
179
+ throw new Error('Invalid recipient count');
180
+ }
181
+ // Read recipient IDs
182
+ const recipientIds = [];
183
+ for (let i = 0; i < recipientCount; i++) {
184
+ recipientIds.push(data.slice(offset, offset + ECIES.MULTIPLE.RECIPIENT_ID_SIZE));
185
+ offset += ECIES.MULTIPLE.RECIPIENT_ID_SIZE;
186
+ }
187
+ // Read encrypted keys
188
+ const recipientKeys = [];
189
+ for (let i = 0; i < recipientCount; i++) {
190
+ recipientKeys.push(data.slice(offset, offset + ECIES.MULTIPLE.ENCRYPTED_KEY_SIZE));
191
+ offset += ECIES.MULTIPLE.ENCRYPTED_KEY_SIZE;
192
+ }
193
+ return {
194
+ dataLength,
195
+ recipientCount,
196
+ recipientIds,
197
+ recipientKeys,
198
+ headerSize: offset,
199
+ };
200
+ }
201
+ /**
202
+ * Parse complete multi-recipient message
203
+ */
204
+ parseMessage(data) {
205
+ const header = this.parseHeader(data);
206
+ const encryptedMessage = data.slice(header.headerSize);
207
+ return {
208
+ ...header,
209
+ encryptedMessage,
210
+ };
211
+ }
212
+ arraysEqual(a, b) {
213
+ if (a.length !== b.length)
214
+ return false;
215
+ for (let i = 0; i < a.length; i++) {
216
+ if (a[i] !== b[i])
217
+ return false;
218
+ }
219
+ return true;
220
+ }
221
+ }
222
+ //# sourceMappingURL=multi-recipient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multi-recipient.js","sourceRoot":"","sources":["../../../src/services/ecies/multi-recipient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,100 @@
1
+ import { EciesEncryptionType, EciesEncryptionTypeEnum } from '../../enumerations/ecies-encryption-type';
2
+ import { IECIESConfig } from '../../interfaces/ecies-config';
3
+ import { SecureString } from '../../secure-string';
4
+ import { SignatureString, SignatureUint8Array } from '../../types';
5
+ import { EciesCryptoCore } from './crypto-core';
6
+ import { ISimpleKeyPair, IWalletSeed } from './interfaces';
7
+ /**
8
+ * Browser-compatible ECIES service that mirrors the server-side functionality
9
+ * Uses Web Crypto API and @scure/@noble libraries for browser compatibility
10
+ */
11
+ export declare class ECIESService {
12
+ private readonly _config;
13
+ private readonly cryptoCore;
14
+ private readonly signature;
15
+ private readonly singleRecipient;
16
+ constructor(config?: Partial<IECIESConfig>);
17
+ get core(): EciesCryptoCore;
18
+ get config(): IECIESConfig;
19
+ get curveName(): string;
20
+ /**
21
+ * Generate a new mnemonic
22
+ */
23
+ generateNewMnemonic(): SecureString;
24
+ /**
25
+ * Generate wallet and seed from mnemonic
26
+ */
27
+ walletAndSeedFromMnemonic(mnemonic: SecureString): IWalletSeed;
28
+ /**
29
+ * Create simple key pair from seed
30
+ */
31
+ seedToSimpleKeyPair(seed: Uint8Array): ISimpleKeyPair;
32
+ /**
33
+ * Create simple key pair from mnemonic
34
+ */
35
+ mnemonicToSimpleKeyPair(mnemonic: SecureString): ISimpleKeyPair;
36
+ /**
37
+ * Get public key from private key
38
+ */
39
+ getPublicKey(privateKey: Uint8Array): Uint8Array;
40
+ /**
41
+ * Encrypt for single recipient (simple or single mode)
42
+ */
43
+ encryptSimpleOrSingle(encryptSimple: boolean, receiverPublicKey: Uint8Array, message: Uint8Array, preamble?: Uint8Array): Promise<Uint8Array>;
44
+ /**
45
+ * Parse single encrypted header
46
+ */
47
+ parseSingleEncryptedHeader(encryptionType: EciesEncryptionTypeEnum, data: Uint8Array, preambleSize?: number, options?: {
48
+ dataLength?: number;
49
+ }): import("./interfaces").ISingleEncryptedParsedHeader;
50
+ /**
51
+ * Decrypt with header
52
+ */
53
+ decryptSimpleOrSingleWithHeader(decryptSimple: boolean, privateKey: Uint8Array, encryptedData: Uint8Array, preambleSize?: number, options?: {
54
+ dataLength?: number;
55
+ }): Promise<Uint8Array>;
56
+ /**
57
+ * Extended decrypt with header
58
+ */
59
+ decryptSimpleOrSingleWithHeaderEx(encryptionType: EciesEncryptionTypeEnum, privateKey: Uint8Array, encryptedData: Uint8Array, preambleSize?: number, options?: {
60
+ dataLength?: number;
61
+ }): Promise<import("./interfaces").IDecryptionResult>;
62
+ /**
63
+ * Decrypt with individual components
64
+ */
65
+ decryptSingleWithComponents(privateKey: Uint8Array, ephemeralPublicKey: Uint8Array, iv: Uint8Array, authTag: Uint8Array, encrypted: Uint8Array): Promise<{
66
+ decrypted: Uint8Array;
67
+ ciphertextLength?: number;
68
+ }>;
69
+ /**
70
+ * Sign a message
71
+ */
72
+ signMessage(privateKey: Uint8Array, data: Uint8Array): SignatureUint8Array;
73
+ /**
74
+ * Verify a message signature
75
+ */
76
+ verifyMessage(publicKey: Uint8Array, data: Uint8Array, signature: SignatureUint8Array): boolean;
77
+ /**
78
+ * Convert signature string to buffer
79
+ */
80
+ signatureStringToSignatureUint8Array(signatureString: SignatureString): SignatureUint8Array;
81
+ /**
82
+ * Convert signature buffer to string
83
+ */
84
+ signatureUint8ArrayToSignatureString(signatureArray: SignatureUint8Array): string;
85
+ /**
86
+ * Compute encrypted length from data length
87
+ */
88
+ computeEncryptedLengthFromDataLength(dataLength: number, encryptionMode: EciesEncryptionType, recipientCount?: number): number;
89
+ /**
90
+ * Compute decrypted length from encrypted data length
91
+ */
92
+ computeDecryptedLengthFromEncryptedDataLength(encryptedDataLength: number, padding?: number): number;
93
+ /**
94
+ * Generic encrypt method
95
+ */
96
+ encrypt(encryptionType: EciesEncryptionTypeEnum, recipients: Array<{
97
+ publicKey: Uint8Array;
98
+ }>, message: Uint8Array, preamble?: Uint8Array): Promise<Uint8Array>;
99
+ }
100
+ //# sourceMappingURL=service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../src/services/ecies/service.ts"],"names":[],"mappings":"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"}