@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,188 @@
1
+ import { SecureStorageErrorType } from './enumerations/secure-storage-error-type';
2
+ import { DisposedError } from './errors/disposed';
3
+ import { SecureStorageError } from './errors/secure-storage';
4
+ import { GuidV4 } from './guid';
5
+ import { XorService } from './services/xor';
6
+ import { uint8ArrayToHex } from './utils';
7
+ /**
8
+ * A secure string buffer is a buffer whose intent is to prevent the raw password from being stored in memory.
9
+ */
10
+ export class SecureString {
11
+ _disposed = false;
12
+ _isNull;
13
+ _id;
14
+ _length;
15
+ _obfuscatedValue;
16
+ _key;
17
+ _obfuscatedChecksum;
18
+ _disposedAt;
19
+ constructor(data) {
20
+ this._id = GuidV4.new();
21
+ // only treat null/undefined as null, empty strings/arrays are valid empty data
22
+ if (data === null || data === undefined) {
23
+ this._isNull = true;
24
+ this._length = 0;
25
+ this._obfuscatedValue = new Uint8Array(0);
26
+ this._key = new Uint8Array(0);
27
+ this._obfuscatedChecksum = new Uint8Array(0);
28
+ return;
29
+ }
30
+ this._isNull = false;
31
+ this._key = this.idUint8Array;
32
+ const dataAsUint8Array = typeof data === 'string'
33
+ ? new TextEncoder().encode(data)
34
+ : data;
35
+ // Store the byte length, not the character length
36
+ this._length = dataAsUint8Array.length;
37
+ this._obfuscatedValue = this.obfuscateData(dataAsUint8Array);
38
+ this._obfuscatedChecksum =
39
+ this.createSimpleObfuscatedChecksum(dataAsUint8Array);
40
+ }
41
+ assertNotDisposed() {
42
+ if (!this._disposed)
43
+ return;
44
+ const e = new DisposedError();
45
+ try {
46
+ e.disposedAt = this._disposedAt;
47
+ }
48
+ catch {
49
+ // ignore if Error object is sealed/frozen
50
+ }
51
+ throw e;
52
+ }
53
+ dispose() {
54
+ const err = new DisposedError();
55
+ if (typeof Error.captureStackTrace === 'function') {
56
+ Error.captureStackTrace(err, this.dispose);
57
+ }
58
+ this._disposedAt = err.stack ?? 'stack unavailable';
59
+ this._obfuscatedValue.fill(0);
60
+ this._key.fill(0);
61
+ this._obfuscatedChecksum.fill(0);
62
+ this._disposed = true;
63
+ }
64
+ get disposedAtStack() {
65
+ return this._disposedAt;
66
+ }
67
+ get id() {
68
+ this.assertNotDisposed();
69
+ return this._id.asFullHexGuid;
70
+ }
71
+ get idUint8Array() {
72
+ this.assertNotDisposed();
73
+ return this._id.asRawGuidUint8Array;
74
+ }
75
+ get originalLength() {
76
+ this.assertNotDisposed();
77
+ return this._length;
78
+ }
79
+ get valueAsUint8Array() {
80
+ this.assertNotDisposed();
81
+ if (this._isNull) {
82
+ return new Uint8Array(0);
83
+ }
84
+ try {
85
+ const deobfuscatedResult = this.deobfuscateData(this._obfuscatedValue);
86
+ if (deobfuscatedResult.length !== this._length) {
87
+ throw new SecureStorageError(SecureStorageErrorType.DecryptedValueLengthMismatch);
88
+ }
89
+ // Validate checksum
90
+ const expectedChecksum = this.createSimpleChecksum(deobfuscatedResult);
91
+ const storedChecksum = new TextDecoder().decode(this.deobfuscateData(this._obfuscatedChecksum));
92
+ if (expectedChecksum !== storedChecksum) {
93
+ throw new SecureStorageError(SecureStorageErrorType.DecryptedValueChecksumMismatch);
94
+ }
95
+ return deobfuscatedResult;
96
+ }
97
+ catch (error) {
98
+ // If it's already a SecureStorageError, re-throw it
99
+ if (error instanceof SecureStorageError) {
100
+ throw error;
101
+ }
102
+ // Convert any other error to SecureStorageError
103
+ throw new SecureStorageError(SecureStorageErrorType.DecryptedValueChecksumMismatch);
104
+ }
105
+ }
106
+ get value() {
107
+ this.assertNotDisposed();
108
+ if (this._isNull) {
109
+ return null;
110
+ }
111
+ return new TextDecoder().decode(this.valueAsUint8Array);
112
+ }
113
+ get notNullValue() {
114
+ this.assertNotDisposed();
115
+ if (this._isNull) {
116
+ throw new SecureStorageError(SecureStorageErrorType.ValueIsNull);
117
+ }
118
+ return new TextDecoder().decode(this.valueAsUint8Array);
119
+ }
120
+ get valueAsHexString() {
121
+ this.assertNotDisposed();
122
+ return uint8ArrayToHex(this.valueAsUint8Array);
123
+ }
124
+ get valueAsBase64String() {
125
+ this.assertNotDisposed();
126
+ return btoa(String.fromCharCode(...this.valueAsUint8Array));
127
+ }
128
+ get hasValue() {
129
+ this.assertNotDisposed();
130
+ return !this._isNull && this._length > 0;
131
+ }
132
+ get checksum() {
133
+ this.assertNotDisposed();
134
+ const deobfuscatedChecksum = new TextDecoder().decode(this.deobfuscateData(this._obfuscatedChecksum));
135
+ return deobfuscatedChecksum;
136
+ }
137
+ get length() {
138
+ this.assertNotDisposed();
139
+ return this._length;
140
+ }
141
+ async generateChecksum(data) {
142
+ const dataBytes = typeof data === 'string' ? new TextEncoder().encode(data) : data;
143
+ const hashArray = await crypto.subtle.digest('SHA-256', new Uint8Array(dataBytes));
144
+ return uint8ArrayToHex(new Uint8Array(hashArray));
145
+ }
146
+ createSimpleChecksum(data) {
147
+ let hash = 0;
148
+ for (let i = 0; i < data.length; i++) {
149
+ hash = ((hash << 5) - hash + data[i]) & 0xffffffff;
150
+ }
151
+ return hash.toString(16);
152
+ }
153
+ createSimpleObfuscatedChecksum(data) {
154
+ const dataBytes = typeof data === 'string' ? new TextEncoder().encode(data) : data;
155
+ const checksum = this.createSimpleChecksum(dataBytes);
156
+ return this.obfuscateData(new TextEncoder().encode(checksum));
157
+ }
158
+ async createObfuscatedChecksum(data) {
159
+ const checksum = await this.generateChecksum(data);
160
+ const result = this.obfuscateData(new TextEncoder().encode(checksum));
161
+ return result;
162
+ }
163
+ async validateChecksum(data, checksum) {
164
+ const generatedChecksum = await this.generateChecksum(data);
165
+ return generatedChecksum === checksum;
166
+ }
167
+ timingSafeEqual(a, b) {
168
+ if (a.length !== b.length) {
169
+ return false;
170
+ }
171
+ let result = 0;
172
+ for (let i = 0; i < a.length; i++) {
173
+ result |= a[i] ^ b[i];
174
+ }
175
+ return result === 0;
176
+ }
177
+ async validateObfuscatedChecksum(data) {
178
+ const deobfuscatedChecksum = new TextDecoder().decode(this.deobfuscateData(this._obfuscatedChecksum));
179
+ return this.validateChecksum(data, deobfuscatedChecksum);
180
+ }
181
+ obfuscateData(data) {
182
+ return XorService.xor(data, this._key);
183
+ }
184
+ deobfuscateData(data) {
185
+ return XorService.xor(data, this._key);
186
+ }
187
+ }
188
+ //# sourceMappingURL=secure-string.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secure-string.js","sourceRoot":"","sources":["../src/secure-string.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ export declare abstract class AESGCMService {
2
+ static readonly ALGORITHM_NAME = "AES-GCM";
3
+ /**
4
+ * Encrypt data using AES-GCM
5
+ * @param data Data to encrypt
6
+ * @param key Key to use for encryption (must be 16, 24 or 32 bytes for AES)
7
+ * @returns Encrypted data
8
+ */
9
+ static encrypt(data: Uint8Array, key: Uint8Array, authTag?: boolean): Promise<{
10
+ encrypted: Uint8Array;
11
+ iv: Uint8Array;
12
+ tag?: Uint8Array;
13
+ }>;
14
+ /**
15
+ * Combine encrypted data and auth tag into a single Uint8Array
16
+ * @param encryptedData The encrypted data
17
+ * @param authTag The authentication tag
18
+ * @returns The combined Uint8Array
19
+ */
20
+ static combineEncryptedDataAndTag(encryptedData: Uint8Array, authTag: Uint8Array): Uint8Array;
21
+ /**
22
+ * Combine IV and encrypted data (with optional auth tag) into a single Uint8Array
23
+ * @param iv The initialization vector
24
+ * @param encryptedDataWithTag The encrypted data with auth tag already appended (if applicable)
25
+ * @returns The combined Uint8Array
26
+ */
27
+ static combineIvAndEncryptedData(iv: Uint8Array, encryptedDataWithTag: Uint8Array): Uint8Array;
28
+ /**
29
+ * Combine IV, encrypted data and auth tag into a single Uint8Array
30
+ * @param iv The initialization vector
31
+ * @param encryptedData The encrypted data
32
+ * @param authTag The authentication tag
33
+ * @returns The combined Uint8Array
34
+ */
35
+ static combineIvTagAndEncryptedData(iv: Uint8Array, encryptedData: Uint8Array, authTag: Uint8Array): Uint8Array;
36
+ /**
37
+ * Split combined encrypted data back into its components
38
+ * @param combinedData The combined data containing IV, encrypted data, and optionally auth tag
39
+ * @param hasAuthTag Whether the combined data includes an authentication tag
40
+ * @returns Object containing the split components
41
+ */
42
+ static splitEncryptedData(combinedData: Uint8Array, hasAuthTag?: boolean): {
43
+ iv: Uint8Array;
44
+ encryptedDataWithTag: Uint8Array;
45
+ };
46
+ /**
47
+ * Decrypt data using AES-GCM
48
+ * @param iv The initialization vector
49
+ * @param encryptedData Data to decrypt (with auth tag appended if authTag is true)
50
+ * @param key Key to use for decryption (must be 16, 24 or 32 bytes for AES)
51
+ * @param authTag Whether the encrypted data includes an authentication tag
52
+ * @returns Decrypted data
53
+ */
54
+ static decrypt(iv: Uint8Array, encryptedData: Uint8Array, key: Uint8Array, authTag?: boolean): Promise<Uint8Array>;
55
+ }
56
+ //# sourceMappingURL=aes-gcm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aes-gcm.d.ts","sourceRoot":"","sources":["../../src/services/aes-gcm.ts"],"names":[],"mappings":"AAEA,8BAAsB,aAAa;IACjC,gBAAuB,cAAc,aAAa;IAClD;;;;;OAKG;WACiB,OAAO,CACzB,IAAI,EAAE,UAAU,EAChB,GAAG,EAAE,UAAU,EACf,OAAO,GAAE,OAAe,GACvB,OAAO,CAAC;QAAE,SAAS,EAAE,UAAU,CAAC;QAAC,EAAE,EAAE,UAAU,CAAC;QAAC,GAAG,CAAC,EAAE,UAAU,CAAA;KAAE,CAAC;IA+BvE;;;;;OAKG;WACW,0BAA0B,CACtC,aAAa,EAAE,UAAU,EACzB,OAAO,EAAE,UAAU,GAClB,UAAU;IAOb;;;;;OAKG;WACW,yBAAyB,CACrC,EAAE,EAAE,UAAU,EACd,oBAAoB,EAAE,UAAU,GAC/B,UAAU;IAOb;;;;;;OAMG;WACW,4BAA4B,CACxC,EAAE,EAAE,UAAU,EACd,aAAa,EAAE,UAAU,EACzB,OAAO,EAAE,UAAU,GAClB,UAAU;IAQb;;;;;OAKG;WACW,kBAAkB,CAC9B,YAAY,EAAE,UAAU,EACxB,UAAU,GAAE,OAAc,GACzB;QAAE,EAAE,EAAE,UAAU,CAAC;QAAC,oBAAoB,EAAE,UAAU,CAAA;KAAE;IAgBvD;;;;;;;OAOG;WACiB,OAAO,CACzB,EAAE,EAAE,UAAU,EACd,aAAa,EAAE,UAAU,EACzB,GAAG,EAAE,UAAU,EACf,OAAO,GAAE,OAAe,GACvB,OAAO,CAAC,UAAU,CAAC;CAgCvB"}
@@ -0,0 +1,101 @@
1
+ import { ECIES } from '../constants';
2
+ export class AESGCMService {
3
+ static ALGORITHM_NAME = 'AES-GCM';
4
+ /**
5
+ * Encrypt data using AES-GCM
6
+ * @param data Data to encrypt
7
+ * @param key Key to use for encryption (must be 16, 24 or 32 bytes for AES)
8
+ * @returns Encrypted data
9
+ */
10
+ static async encrypt(data, key, authTag = false) {
11
+ const cryptoKey = await crypto.subtle.importKey('raw', new Uint8Array(key), { name: AESGCMService.ALGORITHM_NAME }, false, ['encrypt']);
12
+ const iv = crypto.getRandomValues(new Uint8Array(ECIES.IV_SIZE));
13
+ const encryptedResult = await crypto.subtle.encrypt({
14
+ name: AESGCMService.ALGORITHM_NAME,
15
+ iv,
16
+ ...(authTag && { tagLength: ECIES.AUTH_TAG_SIZE * 8 }),
17
+ }, cryptoKey, new Uint8Array(data));
18
+ const encryptedArray = new Uint8Array(encryptedResult);
19
+ if (!authTag) {
20
+ return { encrypted: encryptedArray, iv };
21
+ }
22
+ const authTagLengthBytes = ECIES.AUTH_TAG_SIZE;
23
+ const encryptedBytes = encryptedArray.slice(0, -authTagLengthBytes); // Remove auth tag
24
+ const authTagBytes = encryptedArray.slice(-authTagLengthBytes); // Last 16 bytes are auth tag
25
+ return { encrypted: encryptedBytes, iv, tag: authTagBytes };
26
+ }
27
+ /**
28
+ * Combine encrypted data and auth tag into a single Uint8Array
29
+ * @param encryptedData The encrypted data
30
+ * @param authTag The authentication tag
31
+ * @returns The combined Uint8Array
32
+ */
33
+ static combineEncryptedDataAndTag(encryptedData, authTag) {
34
+ const combined = new Uint8Array(encryptedData.length + authTag.length);
35
+ combined.set(encryptedData);
36
+ combined.set(authTag, encryptedData.length);
37
+ return combined;
38
+ }
39
+ /**
40
+ * Combine IV and encrypted data (with optional auth tag) into a single Uint8Array
41
+ * @param iv The initialization vector
42
+ * @param encryptedDataWithTag The encrypted data with auth tag already appended (if applicable)
43
+ * @returns The combined Uint8Array
44
+ */
45
+ static combineIvAndEncryptedData(iv, encryptedDataWithTag) {
46
+ const combined = new Uint8Array(iv.length + encryptedDataWithTag.length);
47
+ combined.set(iv);
48
+ combined.set(encryptedDataWithTag, iv.length);
49
+ return combined;
50
+ }
51
+ /**
52
+ * Combine IV, encrypted data and auth tag into a single Uint8Array
53
+ * @param iv The initialization vector
54
+ * @param encryptedData The encrypted data
55
+ * @param authTag The authentication tag
56
+ * @returns The combined Uint8Array
57
+ */
58
+ static combineIvTagAndEncryptedData(iv, encryptedData, authTag) {
59
+ const encryptedWithTag = AESGCMService.combineEncryptedDataAndTag(encryptedData, authTag);
60
+ return AESGCMService.combineIvAndEncryptedData(iv, encryptedWithTag);
61
+ }
62
+ /**
63
+ * Split combined encrypted data back into its components
64
+ * @param combinedData The combined data containing IV, encrypted data, and optionally auth tag
65
+ * @param hasAuthTag Whether the combined data includes an authentication tag
66
+ * @returns Object containing the split components
67
+ */
68
+ static splitEncryptedData(combinedData, hasAuthTag = true) {
69
+ const ivLength = ECIES.IV_SIZE;
70
+ const tagLength = hasAuthTag ? ECIES.AUTH_TAG_SIZE : 0;
71
+ if (combinedData.length < ivLength + tagLength) {
72
+ throw new Error('Combined data is too short to contain required components');
73
+ }
74
+ const iv = combinedData.slice(0, ivLength);
75
+ const encryptedDataWithTag = combinedData.slice(ivLength);
76
+ return { iv, encryptedDataWithTag };
77
+ }
78
+ /**
79
+ * Decrypt data using AES-GCM
80
+ * @param iv The initialization vector
81
+ * @param encryptedData Data to decrypt (with auth tag appended if authTag is true)
82
+ * @param key Key to use for decryption (must be 16, 24 or 32 bytes for AES)
83
+ * @param authTag Whether the encrypted data includes an authentication tag
84
+ * @returns Decrypted data
85
+ */
86
+ static async decrypt(iv, encryptedData, key, authTag = false) {
87
+ const cryptoKey = await crypto.subtle.importKey('raw', new Uint8Array(key), { name: AESGCMService.ALGORITHM_NAME }, false, ['decrypt']);
88
+ if (!authTag) {
89
+ const decrypted = await crypto.subtle.decrypt({ name: AESGCMService.ALGORITHM_NAME, iv: new Uint8Array(iv) }, cryptoKey, new Uint8Array(encryptedData));
90
+ return new Uint8Array(decrypted);
91
+ }
92
+ // Decrypt with auth tag (already appended to encryptedData)
93
+ const decryptedResult = await crypto.subtle.decrypt({
94
+ name: AESGCMService.ALGORITHM_NAME,
95
+ iv: new Uint8Array(iv),
96
+ tagLength: ECIES.AUTH_TAG_SIZE * 8,
97
+ }, cryptoKey, new Uint8Array(encryptedData));
98
+ return new Uint8Array(decryptedResult);
99
+ }
100
+ }
101
+ //# sourceMappingURL=aes-gcm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aes-gcm.js","sourceRoot":"","sources":["../../src/services/aes-gcm.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ import { IECIESConfig } from '../../interfaces/ecies-config';
2
+ import { SecureString } from '../../secure-string';
3
+ import { ISimpleKeyPair, IWalletSeed } from './interfaces';
4
+ /**
5
+ * Browser-compatible crypto core for ECIES operations
6
+ * Uses @scure libraries for browser compatibility
7
+ */
8
+ export declare class EciesCryptoCore {
9
+ private readonly _config;
10
+ constructor(config: IECIESConfig);
11
+ /**
12
+ * Get secp256k1 instance, using dynamic import as fallback if needed
13
+ */
14
+ private getSecp256k1Async;
15
+ get config(): IECIESConfig;
16
+ /**
17
+ * Validates and normalizes a public key for ECIES operations
18
+ */
19
+ normalizePublicKey(publicKey: Uint8Array): Uint8Array;
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 a simple key pair from a seed
30
+ */
31
+ seedToSimpleKeyPair(seed: Uint8Array): ISimpleKeyPair;
32
+ /**
33
+ * Create a simple key pair from a mnemonic
34
+ */
35
+ mnemonicToSimpleKeyPair(mnemonic: SecureString): ISimpleKeyPair;
36
+ /**
37
+ * Generate a random private key
38
+ */
39
+ generatePrivateKey(): Uint8Array;
40
+ /**
41
+ * Get public key from private key
42
+ */
43
+ getPublicKey(privateKey: Uint8Array): Uint8Array;
44
+ /**
45
+ * Generate ephemeral key pair for ECIES
46
+ */
47
+ generateEphemeralKeyPair(): Promise<ISimpleKeyPair>;
48
+ /**
49
+ * Compute ECDH shared secret
50
+ */
51
+ computeSharedSecret(privateKey: Uint8Array, publicKey: Uint8Array): Uint8Array;
52
+ }
53
+ //# sourceMappingURL=crypto-core.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto-core.d.ts","sourceRoot":"","sources":["../../../src/services/ecies/crypto-core.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAiB3D;;;GAGG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;gBAE3B,MAAM,EAAE,YAAY;IAIhC;;OAEG;YACW,iBAAiB;IAU/B,IAAW,MAAM,IAAI,YAAY,CAEhC;IAED;;OAEG;IACI,kBAAkB,CAAC,SAAS,EAAE,UAAU,GAAG,UAAU;IA0B5D;;OAEG;IACI,mBAAmB,IAAI,YAAY;IAM1C;;OAEG;IACI,yBAAyB,CAAC,QAAQ,EAAE,YAAY,GAAG,WAAW;IAuBrE;;OAEG;IACI,mBAAmB,CAAC,IAAI,EAAE,UAAU,GAAG,cAAc;IAuB5D;;OAEG;IACI,uBAAuB,CAAC,QAAQ,EAAE,YAAY,GAAG,cAAc;IAKtE;;OAEG;IACI,kBAAkB,IAAI,UAAU;IASvC;;OAEG;IACI,YAAY,CAAC,UAAU,EAAE,UAAU,GAAG,UAAU;IAWvD;;OAEG;IACU,wBAAwB,IAAI,OAAO,CAAC,cAAc,CAAC;IAMhE;;OAEG;IACI,mBAAmB,CACxB,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,UAAU,GACpB,UAAU;CAcd"}
@@ -0,0 +1,158 @@
1
+ import { Wallet } from '@ethereumjs/wallet';
2
+ import { HDKey } from '@scure/bip32';
3
+ import { generateMnemonic, mnemonicToSeedSync, validateMnemonic, } from '@scure/bip39';
4
+ import { wordlist } from '@scure/bip39/wordlists/english';
5
+ import { ECIES } from '../../constants';
6
+ import { SecureString } from '../../secure-string';
7
+ // Use a synchronous approach to import secp256k1
8
+ let secp256k1;
9
+ try {
10
+ secp256k1 = require('@noble/curves/secp256k1.js').secp256k1;
11
+ }
12
+ catch (error) {
13
+ // Fallback for test environment or different module resolution
14
+ try {
15
+ secp256k1 = require('@noble/curves/secp256k1').secp256k1;
16
+ }
17
+ catch (fallbackError) {
18
+ console.warn('Failed to import secp256k1, will use dynamic import fallback');
19
+ }
20
+ }
21
+ /**
22
+ * Browser-compatible crypto core for ECIES operations
23
+ * Uses @scure libraries for browser compatibility
24
+ */
25
+ export class EciesCryptoCore {
26
+ _config;
27
+ constructor(config) {
28
+ this._config = config;
29
+ }
30
+ /**
31
+ * Get secp256k1 instance, using dynamic import as fallback if needed
32
+ */
33
+ async getSecp256k1Async() {
34
+ if (secp256k1) {
35
+ return secp256k1;
36
+ }
37
+ const { secp256k1: dynamicSecp256k1 } = await import('@noble/curves/secp256k1.js');
38
+ return dynamicSecp256k1;
39
+ }
40
+ get config() {
41
+ return this._config;
42
+ }
43
+ /**
44
+ * Validates and normalizes a public key for ECIES operations
45
+ */
46
+ normalizePublicKey(publicKey) {
47
+ if (!publicKey) {
48
+ throw new Error('Received null or undefined public key');
49
+ }
50
+ const keyLength = publicKey.length;
51
+ // Already in correct format (65 bytes with 0x04 prefix)
52
+ if (keyLength === ECIES.PUBLIC_KEY_LENGTH &&
53
+ publicKey[0] === ECIES.PUBLIC_KEY_MAGIC) {
54
+ return publicKey;
55
+ }
56
+ // Raw key without prefix (64 bytes) - add the 0x04 prefix
57
+ if (keyLength === ECIES.RAW_PUBLIC_KEY_LENGTH) {
58
+ const result = new Uint8Array(ECIES.PUBLIC_KEY_LENGTH);
59
+ result[0] = ECIES.PUBLIC_KEY_MAGIC;
60
+ result.set(publicKey, 1);
61
+ return result;
62
+ }
63
+ throw new Error(`Invalid public key format or length: ${keyLength}`);
64
+ }
65
+ /**
66
+ * Generate a new mnemonic
67
+ */
68
+ generateNewMnemonic() {
69
+ return new SecureString(generateMnemonic(wordlist, this._config.mnemonicStrength));
70
+ }
71
+ /**
72
+ * Generate wallet and seed from mnemonic
73
+ */
74
+ walletAndSeedFromMnemonic(mnemonic) {
75
+ if (!mnemonic || !validateMnemonic(mnemonic.value ?? '', wordlist)) {
76
+ throw new Error('Invalid mnemonic');
77
+ }
78
+ const seed = mnemonicToSeedSync(mnemonic.value ?? '');
79
+ const hdKey = HDKey.fromMasterSeed(seed);
80
+ const derivedKey = hdKey.derive(this._config.primaryKeyDerivationPath);
81
+ if (!derivedKey.privateKey) {
82
+ throw new Error('Failed to derive private key');
83
+ }
84
+ const privateKey = derivedKey.privateKey;
85
+ const wallet = new Wallet(privateKey);
86
+ return {
87
+ wallet,
88
+ seed,
89
+ };
90
+ }
91
+ /**
92
+ * Create a simple key pair from a seed
93
+ */
94
+ seedToSimpleKeyPair(seed) {
95
+ if (!secp256k1) {
96
+ throw new Error('secp256k1 not available - this method requires synchronous access');
97
+ }
98
+ const hdKey = HDKey.fromMasterSeed(seed);
99
+ const derivedKey = hdKey.derive(this._config.primaryKeyDerivationPath);
100
+ if (!derivedKey.privateKey) {
101
+ throw new Error('Failed to derive private key');
102
+ }
103
+ const privateKey = derivedKey.privateKey;
104
+ const publicKey = secp256k1.getPublicKey(privateKey, false); // uncompressed with 0x04 prefix
105
+ return {
106
+ privateKey,
107
+ publicKey,
108
+ };
109
+ }
110
+ /**
111
+ * Create a simple key pair from a mnemonic
112
+ */
113
+ mnemonicToSimpleKeyPair(mnemonic) {
114
+ const { seed } = this.walletAndSeedFromMnemonic(mnemonic);
115
+ return this.seedToSimpleKeyPair(seed);
116
+ }
117
+ /**
118
+ * Generate a random private key
119
+ */
120
+ generatePrivateKey() {
121
+ if (!secp256k1) {
122
+ throw new Error('secp256k1 not available - this method requires synchronous access');
123
+ }
124
+ return secp256k1.utils.randomSecretKey();
125
+ }
126
+ /**
127
+ * Get public key from private key
128
+ */
129
+ getPublicKey(privateKey) {
130
+ if (!secp256k1) {
131
+ throw new Error('secp256k1 not available - this method requires synchronous access');
132
+ }
133
+ const publicKeyPoint = secp256k1.getPublicKey(privateKey, false); // uncompressed
134
+ // publicKeyPoint already includes the 0x04 prefix, so return as-is
135
+ return publicKeyPoint;
136
+ }
137
+ /**
138
+ * Generate ephemeral key pair for ECIES
139
+ */
140
+ async generateEphemeralKeyPair() {
141
+ const privateKey = this.generatePrivateKey();
142
+ const publicKey = this.getPublicKey(privateKey);
143
+ return { privateKey, publicKey };
144
+ }
145
+ /**
146
+ * Compute ECDH shared secret
147
+ */
148
+ computeSharedSecret(privateKey, publicKey) {
149
+ // Normalize the public key to ensure it has the correct format
150
+ const normalizedPublicKey = this.normalizePublicKey(publicKey);
151
+ // Use uncompressed shared secret to match Node.js ECDH behavior
152
+ // Node.js ECDH.computeSecret() returns the x-coordinate of the shared point
153
+ const sharedSecret = secp256k1.getSharedSecret(privateKey, normalizedPublicKey, false);
154
+ // Return only the x-coordinate (first 32 bytes after the 0x04 prefix)
155
+ return sharedSecret.slice(1, 33);
156
+ }
157
+ }
158
+ //# sourceMappingURL=crypto-core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto-core.js","sourceRoot":"","sources":["../../../src/services/ecies/crypto-core.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Example usage of the browser-compatible ECIES service
3
+ * This file demonstrates how to use the web-based ECIES implementation
4
+ */
5
+ /**
6
+ * Example: Basic encryption and decryption
7
+ */
8
+ export declare function basicEncryptionExample(): Promise<void>;
9
+ /**
10
+ * Example: Simple mode encryption (without CRC)
11
+ */
12
+ export declare function simpleEncryptionExample(): Promise<void>;
13
+ /**
14
+ * Example: Digital signature
15
+ */
16
+ export declare function signatureExample(): Promise<void>;
17
+ /**
18
+ * Example: Wallet derivation from mnemonic
19
+ */
20
+ export declare function walletDerivationExample(): Promise<void>;
21
+ /**
22
+ * Run all examples
23
+ */
24
+ export declare function runAllExamples(): Promise<void>;
25
+ //# sourceMappingURL=example.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"example.d.ts","sourceRoot":"","sources":["../../../src/services/ecies/example.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAYH;;GAEG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC,CAsC5D;AAED;;GAEG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC,CAsC7D;AAED;;GAEG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CA+BtD;AAED;;GAEG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC,CA6B7D;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAUpD"}