@noble/post-quantum 0.1.0 → 0.2.1

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 (49) hide show
  1. package/README.md +158 -180
  2. package/_crystals.d.ts +0 -1
  3. package/_crystals.d.ts.map +1 -1
  4. package/_crystals.js +1 -31
  5. package/_crystals.js.map +1 -1
  6. package/esm/_crystals.d.ts +33 -0
  7. package/esm/_crystals.d.ts.map +1 -0
  8. package/esm/_crystals.js +0 -30
  9. package/esm/_crystals.js.map +1 -1
  10. package/esm/index.d.ts +2 -0
  11. package/esm/index.d.ts.map +1 -0
  12. package/esm/ml-dsa.d.ts +44 -0
  13. package/esm/ml-dsa.d.ts.map +1 -0
  14. package/esm/ml-dsa.js +67 -88
  15. package/esm/ml-dsa.js.map +1 -1
  16. package/esm/ml-kem.d.ts +55 -0
  17. package/esm/ml-kem.d.ts.map +1 -0
  18. package/esm/ml-kem.js +26 -83
  19. package/esm/ml-kem.js.map +1 -1
  20. package/esm/slh-dsa.d.ts +46 -0
  21. package/esm/slh-dsa.d.ts.map +1 -0
  22. package/esm/slh-dsa.js +27 -111
  23. package/esm/slh-dsa.js.map +1 -1
  24. package/esm/utils.d.ts +38 -0
  25. package/esm/utils.d.ts.map +1 -0
  26. package/esm/utils.js +2 -1
  27. package/esm/utils.js.map +1 -1
  28. package/ml-dsa.d.ts +27 -20
  29. package/ml-dsa.d.ts.map +1 -1
  30. package/ml-dsa.js +66 -87
  31. package/ml-dsa.js.map +1 -1
  32. package/ml-kem.d.ts +1 -80
  33. package/ml-kem.d.ts.map +1 -1
  34. package/ml-kem.js +26 -83
  35. package/ml-kem.js.map +1 -1
  36. package/package.json +14 -22
  37. package/slh-dsa.d.ts +0 -24
  38. package/slh-dsa.d.ts.map +1 -1
  39. package/slh-dsa.js +27 -111
  40. package/slh-dsa.js.map +1 -1
  41. package/src/_crystals.ts +0 -33
  42. package/src/ml-dsa.ts +75 -92
  43. package/src/ml-kem.ts +28 -87
  44. package/src/slh-dsa.ts +27 -121
  45. package/src/utils.ts +2 -1
  46. package/utils.d.ts +2 -2
  47. package/utils.d.ts.map +1 -1
  48. package/utils.js +7 -6
  49. package/utils.js.map +1 -1
package/src/slh-dsa.ts CHANGED
@@ -2,7 +2,7 @@
2
2
  import { HMAC } from '@noble/hashes/hmac';
3
3
  import { sha256, sha512 } from '@noble/hashes/sha2';
4
4
  import { shake256 } from '@noble/hashes/sha3';
5
- import { bytesToHex, hexToBytes, createView, concatBytes, u32 } from '@noble/hashes/utils';
5
+ import { bytesToHex, hexToBytes, createView, concatBytes } from '@noble/hashes/utils';
6
6
  import {
7
7
  Signer,
8
8
  cleanBytes,
@@ -19,11 +19,6 @@ Hash-based digital signature algorithm. See [official site](https://sphincs.org)
19
19
  We implement spec v3.1 with latest FIPS-205 changes.
20
20
  It's compatible with the latest version in the [official repo](https://github.com/sphincs/sphincsplus).
21
21
 
22
- Three versions are provided:
23
-
24
- 1. SHAKE256-based
25
- 2. SHA2-based
26
- 3. SLH-DSA aka [FIPS-205](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.205.ipd.pdf)
27
22
  */
28
23
 
29
24
  /*
@@ -102,8 +97,7 @@ export type GetContext = (
102
97
 
103
98
  function hexToNumber(hex: string): bigint {
104
99
  if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);
105
- // Big Endian
106
- return BigInt(hex === '' ? '0' : `0x${hex}`);
100
+ return BigInt(hex === '' ? '0' : '0x' + hex); // Big Endian
107
101
  }
108
102
 
109
103
  // BE: Big Endian, LE: Little Endian
@@ -115,32 +109,20 @@ function numberToBytesBE(n: number | bigint, len: number): Uint8Array {
115
109
  return hexToBytes(n.toString(16).padStart(len * 2, '0'));
116
110
  }
117
111
 
118
- // Same as bitsCoder.decode, but bits are BE instead of LE (so we cannot re-use it).
119
- // NOTE: difference happens only if d < 8.
120
- const base_2bBE = (N: number, d: number) => {
121
- const mask = getMask(d);
122
- return (bytes: Uint8Array) => {
123
- const r = new Uint32Array(N);
124
- for (let i = 0, buf = 0, bufLen = 0, pos = 0; i < bytes.length; i++) {
125
- buf |= bytes[i] << bufLen;
126
- bufLen += 8;
127
- for (; bufLen >= d; bufLen -= d) r[pos++] = (buf >>> (bufLen - d)) & mask;
128
- buf &= getMask(bufLen);
129
- }
130
- return r;
131
- };
132
- };
133
112
  // Same as bitsCoder.decode, but maybe spec will change and unify with base2bBE.
134
- const base_2bLE = (N: number, d: number) => {
135
- const mask = getMask(d);
113
+ const base2b = (outLen: number, b: number) => {
114
+ const mask = getMask(b);
136
115
  return (bytes: Uint8Array) => {
137
- const r = new Uint32Array(N);
138
- for (let i = 0, buf = 0, bufLen = 0, pos = 0; i < bytes.length; i++) {
139
- buf |= bytes[i] << bufLen;
140
- bufLen += 8;
141
- for (; bufLen >= d; bufLen -= d, buf >>= d) r[pos++] = buf & mask;
116
+ const baseB = new Uint32Array(outLen);
117
+ for (let out = 0, pos = 0, bits = 0, total = 0; out < outLen; out++) {
118
+ while (bits < b) {
119
+ total = (total << 8) | bytes[pos++];
120
+ bits += 8;
121
+ }
122
+ bits -= b;
123
+ baseB[out] = (total >>> bits) & mask;
142
124
  }
143
- return r;
125
+ return baseB;
144
126
  };
145
127
  };
146
128
 
@@ -220,9 +202,9 @@ function gen(opts: SphincsOpts, hashOpts: SphincsHashOpts): SphincsSigner {
220
202
  return addr;
221
203
  };
222
204
 
223
- const chainCoder = base_2bBE(WOTS_LEN2, WOTS_LOGW);
205
+ const chainCoder = base2b(WOTS_LEN2, WOTS_LOGW);
224
206
  const chainLengths = (msg: Uint8Array) => {
225
- const W1 = base_2bBE(WOTS_LEN1, WOTS_LOGW)(msg);
207
+ const W1 = base2b(WOTS_LEN1, WOTS_LOGW)(msg);
226
208
  let csum = 0;
227
209
  for (let i = 0; i < W1.length; i++) csum += W - 1 - W1[i]; // ▷ Compute checksum
228
210
  csum <<= (8 - ((WOTS_LEN2 * WOTS_LOGW) % 8)) % 8; // csum ← csum ≪ ((8 − ((len2 · lg(w)) mod 8)) mod 8
@@ -234,9 +216,7 @@ function gen(opts: SphincsOpts, hashOpts: SphincsHashOpts): SphincsSigner {
234
216
  lengths.set(W2, W1.length);
235
217
  return lengths;
236
218
  };
237
- // Hm, why BE vs LE?
238
- const msgCoder = base_2bLE(K, A);
239
- const messageToIndices = (msg: Uint8Array) => msgCoder(msg);
219
+ const messageToIndices = base2b(K, A);
240
220
 
241
221
  const TREE_BITS = TREE_HEIGHT * (D - 1);
242
222
  const LEAF_BITS = TREE_HEIGHT;
@@ -542,15 +522,12 @@ function gen(opts: SphincsOpts, hashOpts: SphincsHashOpts): SphincsSigner {
542
522
  }
543
523
 
544
524
  const genShake =
545
- (robust: boolean): GetContext =>
546
- (opts: SphincsOpts) =>
547
- (pubSeed: Uint8Array, skSeed?: Uint8Array) => {
548
- const ADDR_BYTES = 32;
525
+ (): GetContext => (opts: SphincsOpts) => (pubSeed: Uint8Array, skSeed?: Uint8Array) => {
549
526
  const { N } = opts;
550
527
  const stats = { prf: 0, thash: 0, hmsg: 0, gen_message_random: 0 };
551
528
  const h0 = shake256.create({}).update(pubSeed);
552
529
  const h0tmp = h0.clone();
553
- const thash_simple = (blocks: number, input: Uint8Array, addr: ADRS) => {
530
+ const thash = (blocks: number, input: Uint8Array, addr: ADRS) => {
554
531
  stats.thash++;
555
532
  return h0
556
533
  ._cloneInto(h0tmp)
@@ -558,24 +535,12 @@ const genShake =
558
535
  .update(input.subarray(0, blocks * N))
559
536
  .xof(N);
560
537
  };
561
- const thash_robust = (blocks: number, input: Uint8Array, addr: ADRS) => {
562
- stats.thash++;
563
- const buf = new Uint8Array(ADDR_BYTES + (blocks + 1) * N);
564
- buf.subarray(0, N).set(pubSeed);
565
- buf.subarray(N, N + ADDR_BYTES).set(addr);
566
- shake256
567
- .create({})
568
- .update(buf.subarray(0, N + ADDR_BYTES))
569
- .xofInto(buf.subarray(N + ADDR_BYTES));
570
- for (let i = 0; i < blocks * N; i++) buf[N + ADDR_BYTES + i] ^= input[i];
571
- return shake256.create({}).update(buf).xof(N);
572
- };
573
- const thash = robust ? thash_robust : thash_simple;
574
538
  return {
575
539
  PRFaddr: (addr: ADRS) => {
576
540
  if (!skSeed) throw new Error('no sk seed');
577
541
  stats.prf++;
578
- return h0._cloneInto(h0tmp).update(addr).update(skSeed).xof(N);
542
+ const res = h0._cloneInto(h0tmp).update(addr).update(skSeed).xof(N);
543
+ return res;
579
544
  },
580
545
  PRFmsg: (skPRF: Uint8Array, random: Uint8Array, msg: Uint8Array) => {
581
546
  stats.gen_message_random++;
@@ -595,21 +560,7 @@ const genShake =
595
560
  };
596
561
  };
597
562
 
598
- const SHAKE_SIMPLE = { getContext: genShake(false) };
599
- const SHAKE_ROBUST = { getContext: genShake(true) };
600
-
601
- export const sphincs_shake_128f_simple = /* @__PURE__ */ gen(PARAMS['128f'], SHAKE_SIMPLE);
602
- export const sphincs_shake_128f_robust = /* @__PURE__ */ gen(PARAMS['128f'], SHAKE_ROBUST);
603
- export const sphincs_shake_128s_simple = /* @__PURE__ */ gen(PARAMS['128s'], SHAKE_SIMPLE);
604
- export const sphincs_shake_128s_robust = /* @__PURE__ */ gen(PARAMS['128s'], SHAKE_ROBUST);
605
- export const sphincs_shake_192f_simple = /* @__PURE__ */ gen(PARAMS['192f'], SHAKE_SIMPLE);
606
- export const sphincs_shake_192f_robust = /* @__PURE__ */ gen(PARAMS['192f'], SHAKE_ROBUST);
607
- export const sphincs_shake_192s_simple = /* @__PURE__ */ gen(PARAMS['192s'], SHAKE_SIMPLE);
608
- export const sphincs_shake_192s_robust = /* @__PURE__ */ gen(PARAMS['192s'], SHAKE_ROBUST);
609
- export const sphincs_shake_256f_simple = /* @__PURE__ */ gen(PARAMS['256f'], SHAKE_SIMPLE);
610
- export const sphincs_shake_256f_robust = /* @__PURE__ */ gen(PARAMS['256f'], SHAKE_ROBUST);
611
- export const sphincs_shake_256s_simple = /* @__PURE__ */ gen(PARAMS['256s'], SHAKE_SIMPLE);
612
- export const sphincs_shake_256s_robust = /* @__PURE__ */ gen(PARAMS['256s'], SHAKE_ROBUST);
563
+ const SHAKE_SIMPLE = { getContext: genShake() };
613
564
 
614
565
  // Only simple mode in SLH-DSA
615
566
  export const slh_dsa_shake_128f = /* @__PURE__ */ gen(PARAMS['128f'], SHAKE_SIMPLE);
@@ -621,7 +572,7 @@ export const slh_dsa_shake_256s = /* @__PURE__ */ gen(PARAMS['256s'], SHAKE_SIMP
621
572
 
622
573
  type ShaType = typeof sha256 | typeof sha512;
623
574
  const genSha =
624
- (h0: ShaType, h1: ShaType, robust: boolean): GetContext =>
575
+ (h0: ShaType, h1: ShaType): GetContext =>
625
576
  (opts) =>
626
577
  (pub_seed, sk_seed?) => {
627
578
  const { N } = opts;
@@ -660,7 +611,7 @@ const genSha =
660
611
  return out.subarray(0, length);
661
612
  }
662
613
 
663
- const thash_simple =
614
+ const thash =
664
615
  (_: ShaType, h: typeof h0ps, hTmp: typeof h0ps) =>
665
616
  (blocks: number, input: Uint8Array, addr: ADRS) => {
666
617
  stats.thash++;
@@ -671,40 +622,17 @@ const genSha =
671
622
  .digest();
672
623
  return d.subarray(0, N);
673
624
  };
674
-
675
- const thash_robust =
676
- (sha: ShaType, h: typeof h0ps, _: typeof h0ps) =>
677
- (blocks: number, input: Uint8Array, addr: ADRS) => {
678
- stats.thash++;
679
- stats.mgf1++;
680
- // inlined mgf1
681
- const addr8 = addr;
682
- const hh = sha.create().update(pub_seed).update(addr8);
683
- let bitmask = new Uint8Array(Math.ceil((blocks * N) / sha.outputLen) * sha.outputLen);
684
- for (let counter = 0, o = bitmask; o.length; counter++) {
685
- counterV.setUint32(0, counter, false);
686
- hh.clone().update(counterB).digestInto(o);
687
- o = o.subarray(sha.outputLen);
688
- }
689
- bitmask = bitmask.subarray(0, blocks * N);
690
- const ou32 = u32(input);
691
- const bm32 = u32(bitmask);
692
- for (let i = 0; i < bm32.length; i++) bm32[i] ^= ou32[i];
693
- const d = h.clone().update(addr8).update(bitmask).digest();
694
- return d.subarray(0, N);
695
- };
696
-
697
- const thash = robust ? thash_robust : thash_simple;
698
625
  return {
699
626
  PRFaddr: (addr: ADRS) => {
700
627
  if (!sk_seed) throw new Error('No sk seed');
701
628
  stats.prf++;
702
- return h0ps
629
+ const res = h0ps
703
630
  ._cloneInto(h0tmp as any)
704
631
  .update(addr)
705
632
  .update(sk_seed)
706
633
  .digest()
707
634
  .subarray(0, N);
635
+ return res;
708
636
  },
709
637
  PRFmsg: (skPRF: Uint8Array, random: Uint8Array, msg: Uint8Array) => {
710
638
  stats.gen_message_random++;
@@ -733,34 +661,12 @@ const genSha =
733
661
 
734
662
  const SHA256_SIMPLE = {
735
663
  isCompressed: true,
736
- getContext: genSha(sha256, sha256, false),
737
- };
738
- const SHA256_ROBUST = {
739
- isCompressed: true,
740
- getContext: genSha(sha256, sha256, true),
664
+ getContext: genSha(sha256, sha256),
741
665
  };
742
666
  const SHA512_SIMPLE = {
743
667
  isCompressed: true,
744
- getContext: genSha(sha256, sha512, false),
668
+ getContext: genSha(sha256, sha512),
745
669
  };
746
- const SHA512_ROBUST = {
747
- isCompressed: true,
748
- getContext: genSha(sha256, sha512, true),
749
- };
750
-
751
- export const sphincs_sha2_128f_simple = /* @__PURE__ */ gen(PARAMS['128f'], SHA256_SIMPLE);
752
- export const sphincs_sha2_128f_robust = /* @__PURE__ */ gen(PARAMS['128f'], SHA256_ROBUST);
753
- export const sphincs_sha2_128s_simple = /* @__PURE__ */ gen(PARAMS['128s'], SHA256_SIMPLE);
754
- export const sphincs_sha2_128s_robust = /* @__PURE__ */ gen(PARAMS['128s'], SHA256_ROBUST);
755
-
756
- export const sphincs_sha2_192f_simple = /* @__PURE__ */ gen(PARAMS['192f'], SHA512_SIMPLE);
757
- export const sphincs_sha2_192f_robust = /* @__PURE__ */ gen(PARAMS['192f'], SHA512_ROBUST);
758
- export const sphincs_sha2_192s_simple = /* @__PURE__ */ gen(PARAMS['192s'], SHA512_SIMPLE);
759
- export const sphincs_sha2_192s_robust = /* @__PURE__ */ gen(PARAMS['192s'], SHA512_ROBUST);
760
- export const sphincs_sha2_256f_simple = /* @__PURE__ */ gen(PARAMS['256f'], SHA512_SIMPLE);
761
- export const sphincs_sha2_256f_robust = /* @__PURE__ */ gen(PARAMS['256f'], SHA512_ROBUST);
762
- export const sphincs_sha2_256s_simple = /* @__PURE__ */ gen(PARAMS['256s'], SHA512_SIMPLE);
763
- export const sphincs_sha2_256s_robust = /* @__PURE__ */ gen(PARAMS['256s'], SHA512_ROBUST);
764
670
 
765
671
  // Only simple mode in SLH-DSA
766
672
  export const slh_dsa_sha2_128f = /* @__PURE__ */ gen(PARAMS['128f'], SHA256_SIMPLE);
package/src/utils.ts CHANGED
@@ -1,9 +1,10 @@
1
1
  /*! noble-post-quantum - MIT License (c) 2024 Paul Miller (paulmillr.com) */
2
2
  import { bytes as abytes } from '@noble/hashes/_assert';
3
- import { TypedArray, randomBytes as randb } from '@noble/hashes/utils';
3
+ import { TypedArray, randomBytes as randb, concatBytes } from '@noble/hashes/utils';
4
4
 
5
5
  export const ensureBytes = abytes;
6
6
  export const randomBytes = randb;
7
+ export { concatBytes };
7
8
 
8
9
  // Compares 2 u8a-s in kinda constant time
9
10
  export function equalBytes(a: Uint8Array, b: Uint8Array) {
package/utils.d.ts CHANGED
@@ -1,8 +1,9 @@
1
1
  /*! noble-post-quantum - MIT License (c) 2024 Paul Miller (paulmillr.com) */
2
2
  import { bytes as abytes } from '@noble/hashes/_assert';
3
- import { TypedArray, randomBytes as randb } from '@noble/hashes/utils';
3
+ import { TypedArray, randomBytes as randb, concatBytes } from '@noble/hashes/utils';
4
4
  export declare const ensureBytes: typeof abytes;
5
5
  export declare const randomBytes: typeof randb;
6
+ export { concatBytes };
6
7
  export declare function equalBytes(a: Uint8Array, b: Uint8Array): boolean;
7
8
  export type Signer = {
8
9
  signRandBytes: number;
@@ -34,5 +35,4 @@ export declare function splitCoder<T extends (number | BytesCoderLen<any>)[]>(..
34
35
  export declare function vecCoder<T>(c: BytesCoderLen<T>, vecLen: number): BytesCoderLen<T[]>;
35
36
  export declare function cleanBytes(...list: (TypedArray | TypedArray[])[]): void;
36
37
  export declare function getMask(bits: number): number;
37
- export {};
38
38
  //# sourceMappingURL=utils.d.ts.map
package/utils.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["src/utils.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,OAAO,EAAE,KAAK,IAAI,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,WAAW,IAAI,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAEvE,eAAO,MAAM,WAAW,eAAS,CAAC;AAClC,eAAO,MAAM,WAAW,cAAQ,CAAC;AAGjC,wBAAgB,UAAU,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,WAKtD;AAED,MAAM,MAAM,MAAM,GAAG;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK;QAC5B,SAAS,EAAE,UAAU,CAAC;QACtB,SAAS,EAAE,UAAU,CAAC;KACvB,CAAC;IACF,IAAI,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,UAAU,KAAK,UAAU,CAAC;IAClF,MAAM,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,KAAK,OAAO,CAAC;CAC9E,CAAC;AAEF,MAAM,WAAW,KAAK,CAAC,CAAC,EAAE,CAAC;IACzB,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC;IACnB,MAAM,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;CAClB;AAED,MAAM,WAAW,UAAU,CAAC,CAAC,CAAE,SAAQ,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC;IACzD,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,UAAU,CAAC;IAChC,MAAM,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,CAAC,CAAC;CAClC;AAED,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAGpE,KAAK,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAC5D,KAAK,QAAQ,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI;KACxD,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CACjE,CAAC;AACF,wBAAgB,UAAU,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,EAAE,EAClE,GAAG,OAAO,EAAE,CAAC,GACZ,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CA8BhD;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC,CAAC,EAAE,CAAC,CAwBnF;AAGD,wBAAgB,UAAU,CAAC,GAAG,IAAI,EAAE,CAAC,UAAU,GAAG,UAAU,EAAE,CAAC,EAAE,QAKhE;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,UAEnC"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["src/utils.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,OAAO,EAAE,KAAK,IAAI,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,WAAW,IAAI,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEpF,eAAO,MAAM,WAAW,eAAS,CAAC;AAClC,eAAO,MAAM,WAAW,cAAQ,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,CAAC;AAGvB,wBAAgB,UAAU,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,WAKtD;AAED,MAAM,MAAM,MAAM,GAAG;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK;QAC5B,SAAS,EAAE,UAAU,CAAC;QACtB,SAAS,EAAE,UAAU,CAAC;KACvB,CAAC;IACF,IAAI,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,UAAU,KAAK,UAAU,CAAC;IAClF,MAAM,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,KAAK,OAAO,CAAC;CAC9E,CAAC;AAEF,MAAM,WAAW,KAAK,CAAC,CAAC,EAAE,CAAC;IACzB,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC;IACnB,MAAM,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;CAClB;AAED,MAAM,WAAW,UAAU,CAAC,CAAC,CAAE,SAAQ,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC;IACzD,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,UAAU,CAAC;IAChC,MAAM,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,CAAC,CAAC;CAClC;AAED,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAGpE,KAAK,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAC5D,KAAK,QAAQ,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI;KACxD,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CACjE,CAAC;AACF,wBAAgB,UAAU,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,EAAE,EAClE,GAAG,OAAO,EAAE,CAAC,GACZ,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CA8BhD;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC,CAAC,EAAE,CAAC,CAwBnF;AAGD,wBAAgB,UAAU,CAAC,GAAG,IAAI,EAAE,CAAC,UAAU,GAAG,UAAU,EAAE,CAAC,EAAE,QAKhE;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,UAEnC"}
package/utils.js CHANGED
@@ -1,9 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getMask = exports.cleanBytes = exports.vecCoder = exports.splitCoder = exports.equalBytes = exports.randomBytes = exports.ensureBytes = void 0;
3
+ exports.concatBytes = exports.randomBytes = exports.ensureBytes = void 0;
4
+ exports.equalBytes = equalBytes;
5
+ exports.splitCoder = splitCoder;
6
+ exports.vecCoder = vecCoder;
7
+ exports.cleanBytes = cleanBytes;
8
+ exports.getMask = getMask;
4
9
  /*! noble-post-quantum - MIT License (c) 2024 Paul Miller (paulmillr.com) */
5
10
  const _assert_1 = require("@noble/hashes/_assert");
6
11
  const utils_1 = require("@noble/hashes/utils");
12
+ Object.defineProperty(exports, "concatBytes", { enumerable: true, get: function () { return utils_1.concatBytes; } });
7
13
  exports.ensureBytes = _assert_1.bytes;
8
14
  exports.randomBytes = utils_1.randomBytes;
9
15
  // Compares 2 u8a-s in kinda constant time
@@ -15,7 +21,6 @@ function equalBytes(a, b) {
15
21
  diff |= a[i] ^ b[i];
16
22
  return diff === 0;
17
23
  }
18
- exports.equalBytes = equalBytes;
19
24
  function splitCoder(...lengths) {
20
25
  const getLength = (c) => (typeof c === 'number' ? c : c.bytesLen);
21
26
  const bytesLen = lengths.reduce((sum, a) => sum + getLength(a), 0);
@@ -48,7 +53,6 @@ function splitCoder(...lengths) {
48
53
  },
49
54
  };
50
55
  }
51
- exports.splitCoder = splitCoder;
52
56
  // nano-packed.array (fixed size)
53
57
  function vecCoder(c, vecLen) {
54
58
  const bytesLen = vecLen * c.bytesLen;
@@ -75,7 +79,6 @@ function vecCoder(c, vecLen) {
75
79
  },
76
80
  };
77
81
  }
78
- exports.vecCoder = vecCoder;
79
82
  // cleanBytes(new Uint8Array(), [new Uint16Array(), new Uint32Array()])
80
83
  function cleanBytes(...list) {
81
84
  for (const t of list) {
@@ -86,9 +89,7 @@ function cleanBytes(...list) {
86
89
  t.fill(0);
87
90
  }
88
91
  }
89
- exports.cleanBytes = cleanBytes;
90
92
  function getMask(bits) {
91
93
  return (1 << bits) - 1; // 4 -> 0b1111
92
94
  }
93
- exports.getMask = getMask;
94
95
  //# sourceMappingURL=utils.js.map
package/utils.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["src/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["src/utils.ts"],"names":[],"mappings":"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"}