@bsv/sdk 1.9.24 → 1.9.29

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 (59) hide show
  1. package/dist/cjs/package.json +1 -1
  2. package/dist/cjs/src/primitives/AESGCM.js +160 -76
  3. package/dist/cjs/src/primitives/AESGCM.js.map +1 -1
  4. package/dist/cjs/src/primitives/Point.js +41 -18
  5. package/dist/cjs/src/primitives/Point.js.map +1 -1
  6. package/dist/cjs/src/primitives/SymmetricKey.js +20 -19
  7. package/dist/cjs/src/primitives/SymmetricKey.js.map +1 -1
  8. package/dist/cjs/src/primitives/hex.js +1 -3
  9. package/dist/cjs/src/primitives/hex.js.map +1 -1
  10. package/dist/cjs/src/primitives/utils.js +10 -0
  11. package/dist/cjs/src/primitives/utils.js.map +1 -1
  12. package/dist/cjs/src/totp/totp.js +3 -1
  13. package/dist/cjs/src/totp/totp.js.map +1 -1
  14. package/dist/cjs/src/wallet/ProtoWallet.js +4 -2
  15. package/dist/cjs/src/wallet/ProtoWallet.js.map +1 -1
  16. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  17. package/dist/esm/src/primitives/AESGCM.js +158 -75
  18. package/dist/esm/src/primitives/AESGCM.js.map +1 -1
  19. package/dist/esm/src/primitives/Point.js +41 -18
  20. package/dist/esm/src/primitives/Point.js.map +1 -1
  21. package/dist/esm/src/primitives/SymmetricKey.js +20 -19
  22. package/dist/esm/src/primitives/SymmetricKey.js.map +1 -1
  23. package/dist/esm/src/primitives/hex.js +1 -3
  24. package/dist/esm/src/primitives/hex.js.map +1 -1
  25. package/dist/esm/src/primitives/utils.js +9 -0
  26. package/dist/esm/src/primitives/utils.js.map +1 -1
  27. package/dist/esm/src/totp/totp.js +3 -1
  28. package/dist/esm/src/totp/totp.js.map +1 -1
  29. package/dist/esm/src/wallet/ProtoWallet.js +4 -2
  30. package/dist/esm/src/wallet/ProtoWallet.js.map +1 -1
  31. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  32. package/dist/types/src/primitives/AESGCM.d.ts +59 -9
  33. package/dist/types/src/primitives/AESGCM.d.ts.map +1 -1
  34. package/dist/types/src/primitives/Point.d.ts +1 -0
  35. package/dist/types/src/primitives/Point.d.ts.map +1 -1
  36. package/dist/types/src/primitives/SymmetricKey.d.ts.map +1 -1
  37. package/dist/types/src/primitives/hex.d.ts.map +1 -1
  38. package/dist/types/src/primitives/utils.d.ts +1 -0
  39. package/dist/types/src/primitives/utils.d.ts.map +1 -1
  40. package/dist/types/src/totp/totp.d.ts.map +1 -1
  41. package/dist/types/src/wallet/ProtoWallet.d.ts.map +1 -1
  42. package/dist/types/tsconfig.types.tsbuildinfo +1 -1
  43. package/dist/umd/bundle.js +3 -3
  44. package/dist/umd/bundle.js.map +1 -1
  45. package/docs/reference/primitives.md +206 -60
  46. package/package.json +1 -1
  47. package/src/primitives/AESGCM.ts +225 -103
  48. package/src/primitives/Point.ts +67 -20
  49. package/src/primitives/SymmetricKey.ts +28 -20
  50. package/src/primitives/__tests/AESGCM.test.ts +254 -354
  51. package/src/primitives/__tests/ECDSA.test.ts +27 -0
  52. package/src/primitives/__tests/Point.test.ts +52 -0
  53. package/src/primitives/__tests/utils.test.ts +24 -1
  54. package/src/primitives/hex.ts +1 -3
  55. package/src/primitives/utils.ts +10 -0
  56. package/src/totp/__tests/totp.test.ts +21 -0
  57. package/src/totp/totp.ts +9 -1
  58. package/src/wallet/ProtoWallet.ts +8 -3
  59. package/src/wallet/__tests/ProtoWallet.test.ts +55 -34
@@ -168,28 +168,62 @@ export const getBytes = function (numericValue) {
168
168
  numericValue & 0x000000FF
169
169
  ];
170
170
  };
171
+ export const getBytes64 = function (numericValue) {
172
+ if (numericValue < 0 || numericValue > Number.MAX_SAFE_INTEGER) {
173
+ throw new Error('getBytes64: value out of range');
174
+ }
175
+ const hi = Math.floor(numericValue / 0x100000000);
176
+ const lo = numericValue >>> 0;
177
+ return [
178
+ (hi >>> 24) & 0xFF,
179
+ (hi >>> 16) & 0xFF,
180
+ (hi >>> 8) & 0xFF,
181
+ hi & 0xFF,
182
+ (lo >>> 24) & 0xFF,
183
+ (lo >>> 16) & 0xFF,
184
+ (lo >>> 8) & 0xFF,
185
+ lo & 0xFF
186
+ ];
187
+ };
171
188
  const createZeroBlock = function (length) {
172
- return new Array(length).fill(0);
189
+ // Uint8Array is already zero-filled
190
+ return new Uint8Array(length);
191
+ };
192
+ // R = 0xe1 || 15 zero bytes
193
+ const R = (() => {
194
+ const r = new Uint8Array(16);
195
+ r[0] = 0xe1;
196
+ return r;
197
+ })();
198
+ const concatBytes = (...arrays) => {
199
+ let total = 0;
200
+ for (const a of arrays)
201
+ total += a.length;
202
+ const out = new Uint8Array(total);
203
+ let offset = 0;
204
+ for (const a of arrays) {
205
+ out.set(a, offset);
206
+ offset += a.length;
207
+ }
208
+ return out;
173
209
  };
174
- const R = [0xe1].concat(createZeroBlock(15));
175
210
  export const exclusiveOR = function (block0, block1) {
176
211
  const len = block0.length;
177
- const result = new Array(len);
212
+ const result = new Uint8Array(len);
178
213
  for (let i = 0; i < len; i++) {
179
- result[i] = block0[i] ^ block1[i];
214
+ result[i] = block0[i] ^ (block1[i] ?? 0);
180
215
  }
181
216
  return result;
182
217
  };
183
218
  const xorInto = function (target, block) {
184
219
  for (let i = 0; i < target.length; i++) {
185
- target[i] ^= block[i];
220
+ target[i] ^= block[i] ?? 0;
186
221
  }
187
222
  };
188
223
  export const rightShift = function (block) {
189
- let i;
190
224
  let carry = 0;
191
225
  let oldCarry = 0;
192
- for (i = 0; i < block.length; i++) {
226
+ for (let i = 0; i < block.length; i++) {
193
227
  oldCarry = carry;
194
228
  carry = block[i] & 0x01;
195
229
  block[i] = block[i] >> 1;
@@ -219,14 +253,10 @@ export const multiply = function (block0, block1) {
219
253
  return z;
220
254
  };
221
255
  export const incrementLeastSignificantThirtyTwoBits = function (block) {
222
- let i;
223
256
  const result = block.slice();
224
- for (i = 15; i !== 11; i--) {
225
- result[i] = result[i] + 1;
226
- if (result[i] === 256) {
227
- result[i] = 0;
228
- }
229
- else {
257
+ for (let i = 15; i > 11; i--) {
258
+ result[i] = (result[i] + 1) & 0xff; // wrap explicitly
259
+ if (result[i] !== 0) {
230
260
  break;
231
261
  }
232
262
  }
@@ -234,8 +264,9 @@ export const incrementLeastSignificantThirtyTwoBits = function (block) {
234
264
  };
235
265
  export function ghash(input, hashSubKey) {
236
266
  let result = createZeroBlock(16);
267
+ const block = new Uint8Array(16);
237
268
  for (let i = 0; i < input.length; i += 16) {
238
- const block = result.slice();
269
+ block.set(result);
239
270
  for (let j = 0; j < 16; j++) {
240
271
  block[j] ^= input[i + j] ?? 0;
241
272
  }
@@ -245,9 +276,9 @@ export function ghash(input, hashSubKey) {
245
276
  }
246
277
  function gctr(input, initialCounterBlock, key) {
247
278
  if (input.length === 0)
248
- return [];
249
- const output = new Array(input.length);
250
- let counterBlock = initialCounterBlock;
279
+ return new Uint8Array(0);
280
+ const output = new Uint8Array(input.length);
281
+ let counterBlock = initialCounterBlock.slice();
251
282
  let pos = 0;
252
283
  const n = Math.ceil(input.length / 16);
253
284
  for (let i = 0; i < n; i++) {
@@ -263,52 +294,114 @@ function gctr(input, initialCounterBlock, key) {
263
294
  }
264
295
  return output;
265
296
  }
266
- export function AESGCM(plainText, additionalAuthenticatedData, initializationVector, key) {
297
+ function buildAuthInput(cipherText) {
298
+ const aadLenBits = 0;
299
+ const ctLenBits = cipherText.length * 8;
300
+ let padLen;
301
+ if (cipherText.length === 0) {
302
+ padLen = 16;
303
+ }
304
+ else if (cipherText.length % 16 === 0) {
305
+ padLen = 0;
306
+ }
307
+ else {
308
+ padLen = 16 - (cipherText.length % 16);
309
+ }
310
+ const total = 16 +
311
+ cipherText.length +
312
+ padLen +
313
+ 16;
314
+ const out = new Uint8Array(total);
315
+ let offset = 0;
316
+ offset += 16;
317
+ out.set(cipherText, offset);
318
+ offset += cipherText.length;
319
+ offset += padLen;
320
+ const aadLen = getBytes64(aadLenBits);
321
+ out.set(aadLen, offset);
322
+ offset += 8;
323
+ const ctLen = getBytes64(ctLenBits);
324
+ out.set(ctLen, offset);
325
+ return out;
326
+ }
327
+ /**
328
+ * SECURITY NOTE – NON-STANDARD AES-GCM PADDING
329
+ *
330
+ * This implementation intentionally deviates from NIST SP 800-38D’s AES-GCM
331
+ * specification in how the GHASH input is formed when the additional
332
+ * authenticated data (AAD) or ciphertext length is zero.
333
+ *
334
+ * In the standard, AAD and ciphertext are each padded with the minimum number
335
+ * of zero bytes required to reach a multiple of 16 bytes; when the length is
336
+ * already a multiple of 16 (including the case length = 0), no padding block
337
+ * is added. In this implementation, when AAD.length === 0 or ciphertext.length
338
+ * === 0, an extra 16-byte block of zeros is appended before the length fields
339
+ * are processed. The same formatting logic is used symmetrically in both
340
+ * AESGCM (encryption) and AESGCMDecrypt (decryption).
341
+ *
342
+ * As a result:
343
+ * - Authentication tags produced here are NOT compatible with tags produced
344
+ * by standards-compliant AES-GCM implementations in the cases where AAD
345
+ * or ciphertext are empty.
346
+ * - Ciphertexts generated by this code must be decrypted by this exact
347
+ * implementation (or one that reproduces the same GHASH formatting), and
348
+ * must not be mixed with ciphertexts produced by a strictly standard
349
+ * AES-GCM library.
350
+ *
351
+ * Cryptographic impact: this change alters only the encoding of the message
352
+ * that is input to GHASH; it does not change the block cipher, key derivation,
353
+ * IV handling, or the basic “encrypt-then-MAC over (AAD, ciphertext, lengths)”
354
+ * structure of AES-GCM. Under the usual assumptions that AES is a secure block
355
+ * cipher and GHASH with a secret subkey is a secure polynomial MAC, this
356
+ * variant continues to provide confidentiality and integrity for data encrypted
357
+ * and decrypted consistently with this implementation. We are not aware of any
358
+ * attack that exploits the presence of this extra zero block when AAD or
359
+ * ciphertext are empty.
360
+ *
361
+ * However, this padding behavior is non-compliant with NIST SP 800-38D and has
362
+ * not been analyzed as extensively as standard AES-GCM. Code that requires
363
+ * strict standards compliance or interoperability with external AES-GCM
364
+ * implementations SHOULD NOT use this module as-is. Any future migration to a
365
+ * fully compliant AES-GCM encoding will require a compatibility strategy, as
366
+ * existing ciphertexts produced by this implementation will otherwise become
367
+ * undecryptable.
368
+ *
369
+ * This non-standard padding behavior is retained intentionally for backward
370
+ * compatibility: existing ciphertexts in production were generated with this
371
+ * encoding, and changing it would render previously encrypted data
372
+ * undecryptable by newer versions of the library.
373
+ */
374
+ export function AESGCM(plainText, initializationVector, key) {
267
375
  if (initializationVector.length === 0) {
268
376
  throw new Error('Initialization vector must not be empty');
269
377
  }
270
378
  if (key.length === 0) {
271
379
  throw new Error('Key must not be empty');
272
380
  }
381
+ const hashSubKey = new Uint8Array(AES(createZeroBlock(16), key));
273
382
  let preCounterBlock;
274
- let plainTag;
275
- const hashSubKey = AES(createZeroBlock(16), key);
276
- preCounterBlock = [...initializationVector];
277
383
  if (initializationVector.length === 12) {
278
- preCounterBlock = preCounterBlock.concat(createZeroBlock(3)).concat([0x01]);
384
+ preCounterBlock = concatBytes(initializationVector, createZeroBlock(3), new Uint8Array([0x01]));
279
385
  }
280
386
  else {
281
- if (initializationVector.length % 16 !== 0) {
282
- preCounterBlock = preCounterBlock.concat(createZeroBlock(16 - (initializationVector.length % 16)));
387
+ let ivPadded = initializationVector;
388
+ if (ivPadded.length % 16 !== 0) {
389
+ ivPadded = concatBytes(ivPadded, createZeroBlock(16 - (ivPadded.length % 16)));
283
390
  }
284
- preCounterBlock = preCounterBlock.concat(createZeroBlock(8));
285
- preCounterBlock = ghash(preCounterBlock.concat(createZeroBlock(4))
286
- .concat(getBytes(initializationVector.length * 8)), hashSubKey);
391
+ const lenBlock = getBytes64(initializationVector.length * 8);
392
+ const s = concatBytes(ivPadded, createZeroBlock(8), new Uint8Array(lenBlock));
393
+ preCounterBlock = ghash(s, hashSubKey);
287
394
  }
288
395
  const cipherText = gctr(plainText, incrementLeastSignificantThirtyTwoBits(preCounterBlock), key);
289
- plainTag = additionalAuthenticatedData.slice();
290
- if (additionalAuthenticatedData.length === 0) {
291
- plainTag = plainTag.concat(createZeroBlock(16));
292
- }
293
- else if (additionalAuthenticatedData.length % 16 !== 0) {
294
- plainTag = plainTag.concat(createZeroBlock(16 - (additionalAuthenticatedData.length % 16)));
295
- }
296
- plainTag = plainTag.concat(cipherText);
297
- if (cipherText.length === 0) {
298
- plainTag = plainTag.concat(createZeroBlock(16));
299
- }
300
- else if (cipherText.length % 16 !== 0) {
301
- plainTag = plainTag.concat(createZeroBlock(16 - (cipherText.length % 16)));
302
- }
303
- plainTag = plainTag.concat(createZeroBlock(4))
304
- .concat(getBytes(additionalAuthenticatedData.length * 8))
305
- .concat(createZeroBlock(4)).concat(getBytes(cipherText.length * 8));
396
+ const authInput = buildAuthInput(cipherText);
397
+ const s = ghash(authInput, hashSubKey);
398
+ const authenticationTag = gctr(s, preCounterBlock, key);
306
399
  return {
307
400
  result: cipherText,
308
- authenticationTag: gctr(ghash(plainTag, hashSubKey), preCounterBlock, key)
401
+ authenticationTag
309
402
  };
310
403
  }
311
- export function AESGCMDecrypt(cipherText, additionalAuthenticatedData, initializationVector, authenticationTag, key) {
404
+ export function AESGCMDecrypt(cipherText, initializationVector, authenticationTag, key) {
312
405
  if (cipherText.length === 0) {
313
406
  throw new Error('Cipher text must not be empty');
314
407
  }
@@ -318,44 +411,34 @@ export function AESGCMDecrypt(cipherText, additionalAuthenticatedData, initializ
318
411
  if (key.length === 0) {
319
412
  throw new Error('Key must not be empty');
320
413
  }
321
- let preCounterBlock;
322
- let compareTag;
323
414
  // Generate the hash subkey
324
- const hashSubKey = AES(createZeroBlock(16), key);
325
- preCounterBlock = [...initializationVector];
415
+ const hashSubKey = new Uint8Array(AES(createZeroBlock(16), key));
416
+ let preCounterBlock;
326
417
  if (initializationVector.length === 12) {
327
- preCounterBlock = preCounterBlock.concat(createZeroBlock(3)).concat([0x01]);
418
+ preCounterBlock = concatBytes(initializationVector, createZeroBlock(3), new Uint8Array([0x01]));
328
419
  }
329
420
  else {
330
- if (initializationVector.length % 16 !== 0) {
331
- preCounterBlock = preCounterBlock.concat(createZeroBlock(16 - (initializationVector.length % 16)));
421
+ let ivPadded = initializationVector;
422
+ if (ivPadded.length % 16 !== 0) {
423
+ ivPadded = concatBytes(ivPadded, createZeroBlock(16 - (ivPadded.length % 16)));
332
424
  }
333
- preCounterBlock = preCounterBlock.concat(createZeroBlock(8));
334
- preCounterBlock = ghash(preCounterBlock.concat(createZeroBlock(4)).concat(getBytes(initializationVector.length * 8)), hashSubKey);
425
+ const lenBlock = getBytes64(initializationVector.length * 8);
426
+ const s = concatBytes(ivPadded, createZeroBlock(8), new Uint8Array(lenBlock));
427
+ preCounterBlock = ghash(s, hashSubKey);
335
428
  }
336
429
  // Decrypt to obtain the plain text
337
430
  const plainText = gctr(cipherText, incrementLeastSignificantThirtyTwoBits(preCounterBlock), key);
338
- compareTag = additionalAuthenticatedData.slice();
339
- if (additionalAuthenticatedData.length === 0) {
340
- compareTag = compareTag.concat(createZeroBlock(16));
431
+ const authInput = buildAuthInput(cipherText);
432
+ const s = ghash(authInput, hashSubKey);
433
+ const calculatedTag = gctr(s, preCounterBlock, key);
434
+ if (calculatedTag.length !== authenticationTag.length) {
435
+ return null;
341
436
  }
342
- else if (additionalAuthenticatedData.length % 16 !== 0) {
343
- compareTag = compareTag.concat(createZeroBlock(16 - (additionalAuthenticatedData.length % 16)));
437
+ let diff = 0;
438
+ for (let i = 0; i < calculatedTag.length; i++) {
439
+ diff |= calculatedTag[i] ^ authenticationTag[i];
344
440
  }
345
- compareTag = compareTag.concat(cipherText);
346
- if (cipherText.length === 0) {
347
- compareTag = compareTag.concat(createZeroBlock(16));
348
- }
349
- else if (cipherText.length % 16 !== 0) {
350
- compareTag = compareTag.concat(createZeroBlock(16 - (cipherText.length % 16)));
351
- }
352
- compareTag = compareTag.concat(createZeroBlock(4))
353
- .concat(getBytes(additionalAuthenticatedData.length * 8))
354
- .concat(createZeroBlock(4)).concat(getBytes(cipherText.length * 8));
355
- // Generate the authentication tag
356
- const calculatedTag = gctr(ghash(compareTag, hashSubKey), preCounterBlock, key);
357
- // If the calculated tag does not match the provided tag, return null - the decryption failed.
358
- if (calculatedTag.join() !== authenticationTag.join()) {
441
+ if (diff !== 0) {
359
442
  return null;
360
443
  }
361
444
  return plainText;
@@ -1 +1 @@
1
- {"version":3,"file":"AESGCM.js","sourceRoot":"","sources":["../../../../src/primitives/AESGCM.ts"],"names":[],"mappings":"AACA,cAAc;AACd,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC;IAC1B,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,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"}
1
+ {"version":3,"file":"AESGCM.js","sourceRoot":"","sources":["../../../../src/primitives/AESGCM.ts"],"names":[],"mappings":"AACA,cAAc;AACd,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC;IAC1B,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAC9F,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,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"}
@@ -45,21 +45,24 @@ export const biModInv = (a) => {
45
45
  };
46
46
  export const biModSqr = (a) => biModMul(a, a);
47
47
  export const biModPow = (base, exp) => {
48
- let result = BI_ONE;
48
+ let result = 1n;
49
49
  base = biMod(base);
50
- let e = exp;
51
- while (e > BI_ZERO) {
52
- if ((e & BI_ONE) === BI_ONE)
50
+ while (exp > 0n) {
51
+ if ((exp & 1n) !== 0n) {
53
52
  result = biModMul(result, base);
53
+ }
54
54
  base = biModMul(base, base);
55
- e >>= BI_ONE;
55
+ exp >>= 1n;
56
56
  }
57
57
  return result;
58
58
  };
59
59
  export const P_PLUS1_DIV4 = (P_BIGINT + 1n) >> 2n;
60
60
  export const biModSqrt = (a) => {
61
61
  const r = biModPow(a, P_PLUS1_DIV4);
62
- return biModMul(r, r) === biMod(a) ? r : null;
62
+ if (biModMul(r, r) !== biMod(a)) {
63
+ return null;
64
+ }
65
+ return r;
63
66
  };
64
67
  const toBigInt = (x) => {
65
68
  if (BigNumber.isBN(x))
@@ -207,6 +210,12 @@ export default class Point extends BasePoint {
207
210
  x;
208
211
  y;
209
212
  inf;
213
+ static _assertOnCurve(p) {
214
+ if (!p.validate()) {
215
+ throw new Error('Invalid point');
216
+ }
217
+ return p;
218
+ }
210
219
  /**
211
220
  * Creates a point object from a given Array. These numbers can represent coordinates in hex format, or points
212
221
  * in multiple established formats.
@@ -225,7 +234,6 @@ export default class Point extends BasePoint {
225
234
  */
226
235
  static fromDER(bytes) {
227
236
  const len = 32;
228
- // uncompressed, hybrid-odd, hybrid-even
229
237
  if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&
230
238
  bytes.length - 1 === 2 * len) {
231
239
  if (bytes[0] === 0x06) {
@@ -239,11 +247,11 @@ export default class Point extends BasePoint {
239
247
  }
240
248
  }
241
249
  const res = new Point(bytes.slice(1, 1 + len), bytes.slice(1 + len, 1 + 2 * len));
242
- return res;
250
+ return Point._assertOnCurve(res);
243
251
  }
244
252
  else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&
245
253
  bytes.length - 1 === len) {
246
- return Point.fromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);
254
+ return Point._assertOnCurve(Point.fromX(bytes.slice(1, 1 + len), bytes[0] === 0x03));
247
255
  }
248
256
  throw new Error('Unknown point format');
249
257
  }
@@ -266,7 +274,7 @@ export default class Point extends BasePoint {
266
274
  */
267
275
  static fromString(str) {
268
276
  const bytes = toArray(str, 'hex');
269
- return Point.fromDER(bytes);
277
+ return Point._assertOnCurve(Point.fromDER(bytes));
270
278
  }
271
279
  /**
272
280
  * Generates a point from an x coordinate and a boolean indicating whether the corresponding
@@ -288,15 +296,16 @@ export default class Point extends BasePoint {
288
296
  xBigInt = biMod(xBigInt);
289
297
  const y2 = biModAdd(biModMul(biModSqr(xBigInt), xBigInt), 7n);
290
298
  const y = biModSqrt(y2);
291
- if (y === null)
299
+ if (y === null) {
292
300
  throw new Error('Invalid point');
301
+ }
293
302
  let yBig = y;
294
303
  if ((yBig & BI_ONE) !== (odd ? BI_ONE : BI_ZERO)) {
295
304
  yBig = biModSub(P_BIGINT, yBig);
296
305
  }
297
306
  const xBN = new BigNumber(xBigInt.toString(16), 16);
298
307
  const yBN = new BigNumber(yBig.toString(16), 16);
299
- return new Point(xBN, yBN);
308
+ return Point._assertOnCurve(new Point(xBN, yBN));
300
309
  }
301
310
  /**
302
311
  * Generates a point from a serialized JSON object. The function accounts for different options in the JSON object,
@@ -317,14 +326,16 @@ export default class Point extends BasePoint {
317
326
  if (typeof obj === 'string') {
318
327
  obj = JSON.parse(obj);
319
328
  }
320
- const res = new Point(obj[0], obj[1], isRed);
321
- if (typeof obj[2] !== 'object') {
329
+ let res = new Point(obj[0], obj[1], isRed);
330
+ res = Point._assertOnCurve(res);
331
+ if (typeof obj[2] !== 'object' || obj[2] === null) {
322
332
  return res;
323
333
  }
324
- const obj2point = (obj) => {
325
- return new Point(obj[0], obj[1], isRed);
326
- };
327
334
  const pre = obj[2];
335
+ const obj2point = (p) => {
336
+ const pt = new Point(p[0], p[1], isRed);
337
+ return Point._assertOnCurve(pt);
338
+ };
328
339
  res.precomputed = {
329
340
  beta: null,
330
341
  doubles: typeof pre.doubles === 'object' && pre.doubles !== null
@@ -395,7 +406,19 @@ export default class Point extends BasePoint {
395
406
  * const isValid = aPoint.validate();
396
407
  */
397
408
  validate() {
398
- return this.curve.validate(this);
409
+ if (this.inf || this.x == null || this.y == null)
410
+ return false;
411
+ try {
412
+ const xBig = BigInt('0x' + this.x.fromRed().toString(16));
413
+ const yBig = BigInt('0x' + this.y.fromRed().toString(16));
414
+ // compute y² and x³ + 7 using bigint-secure field ops
415
+ const lhs = biModMul(yBig, yBig);
416
+ const rhs = biModAdd(biModMul(biModMul(xBig, xBig), xBig), 7n);
417
+ return lhs === rhs;
418
+ }
419
+ catch {
420
+ return false;
421
+ }
399
422
  }
400
423
  /**
401
424
  * Encodes the coordinates of a point into an array or a hexadecimal string.