@waku/rln 0.1.6-b0a2e39.0 → 0.1.6-b133417.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 (84) hide show
  1. package/bundle/_virtual/utils.js +2 -2
  2. package/bundle/_virtual/utils2.js +2 -2
  3. package/bundle/index.js +1 -1
  4. package/bundle/node_modules/@chainsafe/bls-keystore/node_modules/@noble/hashes/_sha2.js +1 -1
  5. package/bundle/node_modules/@chainsafe/bls-keystore/node_modules/@noble/hashes/hmac.js +1 -1
  6. package/bundle/node_modules/@chainsafe/bls-keystore/node_modules/@noble/hashes/pbkdf2.js +1 -1
  7. package/bundle/node_modules/@chainsafe/bls-keystore/node_modules/@noble/hashes/scrypt.js +1 -1
  8. package/bundle/node_modules/@chainsafe/bls-keystore/node_modules/@noble/hashes/sha256.js +1 -1
  9. package/bundle/node_modules/@chainsafe/bls-keystore/node_modules/@noble/hashes/sha512.js +1 -1
  10. package/bundle/node_modules/@chainsafe/bls-keystore/node_modules/@noble/hashes/utils.js +1 -1
  11. package/bundle/node_modules/@chainsafe/bls-keystore/node_modules/ethereum-cryptography/random.js +1 -1
  12. package/bundle/node_modules/@chainsafe/bls-keystore/node_modules/ethereum-cryptography/utils.js +2 -2
  13. package/bundle/packages/core/dist/lib/connection_manager/connection_manager.js +0 -1
  14. package/bundle/packages/core/dist/lib/connection_manager/keep_alive_manager.js +0 -1
  15. package/bundle/packages/core/dist/lib/filter/filter.js +0 -2
  16. package/bundle/packages/core/dist/lib/light_push/light_push.js +9 -12
  17. package/bundle/packages/core/dist/lib/message/version_0.js +0 -1
  18. package/bundle/packages/core/dist/lib/metadata/metadata.js +0 -2
  19. package/bundle/packages/core/dist/lib/store/store.js +0 -2
  20. package/bundle/packages/interfaces/dist/protocols.js +0 -10
  21. package/bundle/packages/proto/dist/generated/light_push.js +3 -3
  22. package/bundle/packages/rln/dist/codec.js +0 -1
  23. package/bundle/packages/rln/dist/contract/constants.js +7 -1
  24. package/bundle/packages/rln/dist/contract/rln_base_contract.js +5 -3
  25. package/bundle/packages/rln/dist/contract/rln_contract.js +2 -3
  26. package/bundle/packages/rln/dist/credentials_manager.js +24 -17
  27. package/bundle/packages/rln/dist/identity.js +8 -6
  28. package/bundle/packages/rln/dist/keystore/keystore.js +22 -12
  29. package/bundle/packages/rln/dist/message.js +0 -2
  30. package/bundle/packages/rln/dist/proof.js +2 -2
  31. package/bundle/packages/rln/dist/rln.js +0 -2
  32. package/bundle/packages/rln/dist/utils/bytes.js +103 -58
  33. package/bundle/packages/rln/dist/utils/epoch.js +0 -1
  34. package/bundle/packages/rln/dist/utils/hash.js +3 -3
  35. package/bundle/packages/rln/dist/zerokit.js +17 -17
  36. package/bundle/packages/utils/dist/common/sharding/index.js +0 -1
  37. package/dist/.tsbuildinfo +1 -1
  38. package/dist/contract/constants.d.ts +6 -0
  39. package/dist/contract/constants.js +6 -0
  40. package/dist/contract/constants.js.map +1 -1
  41. package/dist/contract/rln_base_contract.js +5 -2
  42. package/dist/contract/rln_base_contract.js.map +1 -1
  43. package/dist/contract/rln_contract.js +2 -2
  44. package/dist/contract/rln_contract.js.map +1 -1
  45. package/dist/credentials_manager.d.ts +4 -0
  46. package/dist/credentials_manager.js +25 -16
  47. package/dist/credentials_manager.js.map +1 -1
  48. package/dist/identity.d.ts +5 -2
  49. package/dist/identity.js +8 -5
  50. package/dist/identity.js.map +1 -1
  51. package/dist/keystore/keystore.js +22 -11
  52. package/dist/keystore/keystore.js.map +1 -1
  53. package/dist/proof.js +2 -2
  54. package/dist/proof.js.map +1 -1
  55. package/dist/utils/bytes.d.ts +42 -20
  56. package/dist/utils/bytes.js +102 -57
  57. package/dist/utils/bytes.js.map +1 -1
  58. package/dist/utils/hash.js +5 -5
  59. package/dist/utils/hash.js.map +1 -1
  60. package/dist/utils/index.d.ts +1 -1
  61. package/dist/utils/index.js +1 -1
  62. package/dist/utils/index.js.map +1 -1
  63. package/dist/zerokit.js +17 -17
  64. package/dist/zerokit.js.map +1 -1
  65. package/package.json +1 -1
  66. package/src/contract/constants.ts +9 -0
  67. package/src/contract/rln_base_contract.ts +5 -3
  68. package/src/contract/rln_contract.ts +5 -2
  69. package/src/credentials_manager.ts +46 -24
  70. package/src/identity.ts +11 -7
  71. package/src/keystore/keystore.ts +41 -23
  72. package/src/proof.ts +2 -2
  73. package/src/utils/bytes.ts +118 -72
  74. package/src/utils/hash.ts +15 -5
  75. package/src/utils/index.ts +1 -6
  76. package/src/zerokit.ts +30 -22
  77. package/bundle/packages/core/dist/lib/light_push/light_push_v3.js +0 -30
  78. package/bundle/packages/core/dist/lib/light_push/utils.js +0 -18
  79. package/bundle/packages/interfaces/dist/light_push_v3.js +0 -29
  80. package/bundle/packages/proto/dist/generated/light_push_v3.js +0 -348
  81. package/dist/contract/test-utils.d.ts +0 -39
  82. package/dist/contract/test-utils.js +0 -118
  83. package/dist/contract/test-utils.js.map +0 -1
  84. package/src/contract/test-utils.ts +0 -179
@@ -1,64 +1,109 @@
1
- /**
2
- * Concatenate Uint8Arrays
3
- * @param input
4
- * @returns concatenation of all Uint8Array received as input
5
- */
6
- export function concatenate(...input) {
7
- let totalLength = 0;
8
- for (const arr of input) {
9
- totalLength += arr.length;
1
+ export class BytesUtils {
2
+ /**
3
+ * Switches endianness of a byte array
4
+ */
5
+ static switchEndianness(bytes) {
6
+ return new Uint8Array(bytes.reverse());
10
7
  }
11
- const result = new Uint8Array(totalLength);
12
- let offset = 0;
13
- for (const arr of input) {
14
- result.set(arr, offset);
15
- offset += arr.length;
8
+ /**
9
+ * Builds a BigInt from a big-endian Uint8Array
10
+ * @param bytes The big-endian bytes to convert
11
+ * @returns The resulting BigInt in big-endian format
12
+ */
13
+ static buildBigIntFromUint8ArrayBE(bytes) {
14
+ let result = 0n;
15
+ for (let i = 0; i < bytes.length; i++) {
16
+ result = (result << 8n) + BigInt(bytes[i]);
17
+ }
18
+ return result;
16
19
  }
17
- return result;
18
- }
19
- // Adapted from https://github.com/feross/buffer
20
- function checkInt(buf, value, offset, ext, max, min) {
21
- if (value > max || value < min)
22
- throw new RangeError('"value" argument is out of bounds');
23
- if (offset + ext > buf.length)
24
- throw new RangeError("Index out of range");
25
- }
26
- export function writeUIntLE(buf, value, offset, byteLength, noAssert) {
27
- value = +value;
28
- offset = offset >>> 0;
29
- byteLength = byteLength >>> 0;
30
- if (!noAssert) {
31
- const maxBytes = Math.pow(2, 8 * byteLength) - 1;
32
- checkInt(buf, value, offset, byteLength, maxBytes, 0);
20
+ /**
21
+ * Switches endianness of a bigint value
22
+ * @param value The bigint value to switch endianness for
23
+ * @returns The bigint value with reversed endianness
24
+ */
25
+ static switchEndiannessBigInt(value) {
26
+ // Convert bigint to byte array
27
+ const bytes = [];
28
+ let tempValue = value;
29
+ while (tempValue > 0n) {
30
+ bytes.push(Number(tempValue & 0xffn));
31
+ tempValue >>= 8n;
32
+ }
33
+ // Reverse bytes and convert back to bigint
34
+ return bytes
35
+ .reverse()
36
+ .reduce((acc, byte) => (acc << 8n) + BigInt(byte), 0n);
33
37
  }
34
- let mul = 1;
35
- let i = 0;
36
- buf[offset] = value & 0xff;
37
- while (++i < byteLength && (mul *= 0x100)) {
38
- buf[offset + i] = (value / mul) & 0xff;
38
+ /**
39
+ * Converts a big-endian bigint to a 32-byte big-endian Uint8Array
40
+ * @param value The big-endian bigint to convert
41
+ * @returns A 32-byte big-endian Uint8Array
42
+ */
43
+ static bigIntToUint8Array32BE(value) {
44
+ const bytes = new Uint8Array(32);
45
+ for (let i = 31; i >= 0; i--) {
46
+ bytes[i] = Number(value & 0xffn);
47
+ value >>= 8n;
48
+ }
49
+ return bytes;
39
50
  }
40
- return buf;
41
- }
42
- /**
43
- * Transforms Uint8Array into BigInt
44
- * @param array: Uint8Array
45
- * @returns BigInt
46
- */
47
- export function buildBigIntFromUint8Array(array, byteOffset = 0) {
48
- const dataView = new DataView(array.buffer);
49
- return dataView.getBigUint64(byteOffset, true);
50
- }
51
- /**
52
- * Fills with zeros to set length
53
- * @param array little endian Uint8Array
54
- * @param length amount to pad
55
- * @returns little endian Uint8Array padded with zeros to set length
56
- */
57
- export function zeroPadLE(array, length) {
58
- const result = new Uint8Array(length);
59
- for (let i = 0; i < length; i++) {
60
- result[i] = array[i] || 0;
51
+ /**
52
+ * Writes an unsigned integer to a buffer in little-endian format
53
+ */
54
+ static writeUIntLE(buf, value, offset, byteLength, noAssert) {
55
+ value = +value;
56
+ offset = offset >>> 0;
57
+ byteLength = byteLength >>> 0;
58
+ if (!noAssert) {
59
+ const maxBytes = Math.pow(2, 8 * byteLength) - 1;
60
+ BytesUtils.checkInt(buf, value, offset, byteLength, maxBytes, 0);
61
+ }
62
+ let mul = 1;
63
+ let i = 0;
64
+ buf[offset] = value & 0xff;
65
+ while (++i < byteLength && (mul *= 0x100)) {
66
+ buf[offset + i] = (value / mul) & 0xff;
67
+ }
68
+ return buf;
69
+ }
70
+ /**
71
+ * Fills with zeros to set length
72
+ * @param array little endian Uint8Array
73
+ * @param length amount to pad
74
+ * @returns little endian Uint8Array padded with zeros to set length
75
+ */
76
+ static zeroPadLE(array, length) {
77
+ const result = new Uint8Array(length);
78
+ for (let i = 0; i < length; i++) {
79
+ result[i] = array[i] || 0;
80
+ }
81
+ return result;
82
+ }
83
+ // Adapted from https://github.com/feross/buffer
84
+ static checkInt(buf, value, offset, ext, max, min) {
85
+ if (value > max || value < min)
86
+ throw new RangeError('"value" argument is out of bounds');
87
+ if (offset + ext > buf.length)
88
+ throw new RangeError("Index out of range");
89
+ }
90
+ /**
91
+ * Concatenate Uint8Arrays
92
+ * @param input
93
+ * @returns concatenation of all Uint8Array received as input
94
+ */
95
+ static concatenate(...input) {
96
+ let totalLength = 0;
97
+ for (const arr of input) {
98
+ totalLength += arr.length;
99
+ }
100
+ const result = new Uint8Array(totalLength);
101
+ let offset = 0;
102
+ for (const arr of input) {
103
+ result.set(arr, offset);
104
+ offset += arr.length;
105
+ }
106
+ return result;
61
107
  }
62
- return result;
63
108
  }
64
109
  //# sourceMappingURL=bytes.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"bytes.js","sourceRoot":"","sources":["../../src/utils/bytes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,GAAG,KAAmB;IAChD,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,WAAW,IAAI,GAAG,CAAC,MAAM,CAAC;IAC5B,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC;IAC3C,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACxB,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC;IACvB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,gDAAgD;AAChD,SAAS,QAAQ,CACf,GAAe,EACf,KAAa,EACb,MAAc,EACd,GAAW,EACX,GAAW,EACX,GAAW;IAEX,IAAI,KAAK,GAAG,GAAG,IAAI,KAAK,GAAG,GAAG;QAC5B,MAAM,IAAI,UAAU,CAAC,mCAAmC,CAAC,CAAC;IAC5D,IAAI,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,MAAM;QAAE,MAAM,IAAI,UAAU,CAAC,oBAAoB,CAAC,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,WAAW,CACzB,GAAe,EACf,KAAa,EACb,MAAc,EACd,UAAkB,EAClB,QAAkB;IAElB,KAAK,GAAG,CAAC,KAAK,CAAC;IACf,MAAM,GAAG,MAAM,KAAK,CAAC,CAAC;IACtB,UAAU,GAAG,UAAU,KAAK,CAAC,CAAC;IAC9B,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;QACjD,QAAQ,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,GAAG,CAAC,MAAM,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE,CAAC,GAAG,UAAU,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,EAAE,CAAC;QAC1C,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC;IACzC,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CACvC,KAAiB,EACjB,aAAqB,CAAC;IAEtB,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5C,OAAO,QAAQ,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;AACjD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,KAAiB,EAAE,MAAc;IACzD,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;IACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAChC,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"bytes.js","sourceRoot":"","sources":["../../src/utils/bytes.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,13 @@
1
1
  import * as zerokitRLN from "@waku/zerokit-rln-wasm";
2
- import { concatenate, writeUIntLE } from "./bytes.js";
2
+ import { BytesUtils } from "./bytes.js";
3
3
  export function poseidonHash(...input) {
4
- const inputLen = writeUIntLE(new Uint8Array(8), input.length, 0, 8);
5
- const lenPrefixedData = concatenate(inputLen, ...input);
4
+ const inputLen = BytesUtils.writeUIntLE(new Uint8Array(8), input.length, 0, 8);
5
+ const lenPrefixedData = BytesUtils.concatenate(inputLen, ...input);
6
6
  return zerokitRLN.poseidonHash(lenPrefixedData);
7
7
  }
8
8
  export function sha256(input) {
9
- const inputLen = writeUIntLE(new Uint8Array(8), input.length, 0, 8);
10
- const lenPrefixedData = concatenate(inputLen, input);
9
+ const inputLen = BytesUtils.writeUIntLE(new Uint8Array(8), input.length, 0, 8);
10
+ const lenPrefixedData = BytesUtils.concatenate(inputLen, input);
11
11
  return zerokitRLN.hash(lenPrefixedData);
12
12
  }
13
13
  //# sourceMappingURL=hash.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hash.js","sourceRoot":"","sources":["../../src/utils/hash.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,wBAAwB,CAAC;AAErD,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEtD,MAAM,UAAU,YAAY,CAAC,GAAG,KAAwB;IACtD,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACpE,MAAM,eAAe,GAAG,WAAW,CAAC,QAAQ,EAAE,GAAG,KAAK,CAAC,CAAC;IACxD,OAAO,UAAU,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,KAAiB;IACtC,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACpE,MAAM,eAAe,GAAG,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACrD,OAAO,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AAC1C,CAAC"}
1
+ {"version":3,"file":"hash.js","sourceRoot":"","sources":["../../src/utils/hash.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,wBAAwB,CAAC;AAErD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,MAAM,UAAU,YAAY,CAAC,GAAG,KAAwB;IACtD,MAAM,QAAQ,GAAG,UAAU,CAAC,WAAW,CACrC,IAAI,UAAU,CAAC,CAAC,CAAC,EACjB,KAAK,CAAC,MAAM,EACZ,CAAC,EACD,CAAC,CACF,CAAC;IACF,MAAM,eAAe,GAAG,UAAU,CAAC,WAAW,CAAC,QAAQ,EAAE,GAAG,KAAK,CAAC,CAAC;IACnE,OAAO,UAAU,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,KAAiB;IACtC,MAAM,QAAQ,GAAG,UAAU,CAAC,WAAW,CACrC,IAAI,UAAU,CAAC,CAAC,CAAC,EACjB,KAAK,CAAC,MAAM,EACZ,CAAC,EACD,CAAC,CACF,CAAC;IACF,MAAM,eAAe,GAAG,UAAU,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAChE,OAAO,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AAC1C,CAAC"}
@@ -1,4 +1,4 @@
1
1
  export { extractMetaMaskSigner } from "./metamask.js";
2
- export { concatenate, writeUIntLE, buildBigIntFromUint8Array, zeroPadLE } from "./bytes.js";
2
+ export { BytesUtils } from "./bytes.js";
3
3
  export { sha256, poseidonHash } from "./hash.js";
4
4
  export { dateToEpoch, epochIntToBytes, epochBytesToInt } from "./epoch.js";
@@ -1,5 +1,5 @@
1
1
  export { extractMetaMaskSigner } from "./metamask.js";
2
- export { concatenate, writeUIntLE, buildBigIntFromUint8Array, zeroPadLE } from "./bytes.js";
2
+ export { BytesUtils } from "./bytes.js";
3
3
  export { sha256, poseidonHash } from "./hash.js";
4
4
  export { dateToEpoch, epochIntToBytes, epochBytesToInt } from "./epoch.js";
5
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EACL,WAAW,EACX,WAAW,EACX,yBAAyB,EACzB,SAAS,EACV,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC"}
package/dist/zerokit.js CHANGED
@@ -2,7 +2,7 @@ import * as zerokitRLN from "@waku/zerokit-rln-wasm";
2
2
  import { DEFAULT_RATE_LIMIT, RATE_LIMIT_PARAMS } from "./contract/constants.js";
3
3
  import { IdentityCredential } from "./identity.js";
4
4
  import { Proof, proofToBytes } from "./proof.js";
5
- import { concatenate, dateToEpoch, epochIntToBytes, writeUIntLE } from "./utils/index.js";
5
+ import { BytesUtils, dateToEpoch, epochIntToBytes } from "./utils/index.js";
6
6
  export class Zerokit {
7
7
  zkRLN;
8
8
  witnessCalculator;
@@ -38,8 +38,8 @@ export class Zerokit {
38
38
  insertMembers(index, ...idCommitments) {
39
39
  // serializes a seq of IDCommitments to a byte seq
40
40
  // the order of serialization is |id_commitment_len<8>|id_commitment<var>|
41
- const idCommitmentLen = writeUIntLE(new Uint8Array(8), idCommitments.length, 0, 8);
42
- const idCommitmentBytes = concatenate(idCommitmentLen, ...idCommitments);
41
+ const idCommitmentLen = BytesUtils.writeUIntLE(new Uint8Array(8), idCommitments.length, 0, 8);
42
+ const idCommitmentBytes = BytesUtils.concatenate(idCommitmentLen, ...idCommitments);
43
43
  zerokitRLN.setLeavesFrom(this.zkRLN, index, idCommitmentBytes);
44
44
  }
45
45
  deleteMember(index) {
@@ -50,11 +50,11 @@ export class Zerokit {
50
50
  }
51
51
  serializeMessage(uint8Msg, memIndex, epoch, idKey, rateLimit) {
52
52
  // calculate message length
53
- const msgLen = writeUIntLE(new Uint8Array(8), uint8Msg.length, 0, 8);
54
- const memIndexBytes = writeUIntLE(new Uint8Array(8), memIndex, 0, 8);
55
- const rateLimitBytes = writeUIntLE(new Uint8Array(8), rateLimit ?? this.rateLimit, 0, 8);
53
+ const msgLen = BytesUtils.writeUIntLE(new Uint8Array(8), uint8Msg.length, 0, 8);
54
+ const memIndexBytes = BytesUtils.writeUIntLE(new Uint8Array(8), memIndex, 0, 8);
55
+ const rateLimitBytes = BytesUtils.writeUIntLE(new Uint8Array(8), rateLimit ?? this.rateLimit, 0, 8);
56
56
  // [ id_key<32> | id_index<8> | epoch<32> | signal_len<8> | signal<var> | rate_limit<8> ]
57
- return concatenate(idKey, memIndexBytes, epoch, msgLen, uint8Msg, rateLimitBytes);
57
+ return BytesUtils.concatenate(idKey, memIndexBytes, epoch, msgLen, uint8Msg, rateLimitBytes);
58
58
  }
59
59
  async generateRLNProof(msg, index, epoch, idSecretHash, rateLimit) {
60
60
  if (epoch === undefined) {
@@ -90,9 +90,9 @@ export class Zerokit {
90
90
  pBytes = proofToBytes(proof);
91
91
  }
92
92
  // calculate message length
93
- const msgLen = writeUIntLE(new Uint8Array(8), msg.length, 0, 8);
94
- const rateLimitBytes = writeUIntLE(new Uint8Array(8), rateLimit ?? this.rateLimit, 0, 8);
95
- return zerokitRLN.verifyRLNProof(this.zkRLN, concatenate(pBytes, msgLen, msg, rateLimitBytes));
93
+ const msgLen = BytesUtils.writeUIntLE(new Uint8Array(8), msg.length, 0, 8);
94
+ const rateLimitBytes = BytesUtils.writeUIntLE(new Uint8Array(8), rateLimit ?? this.rateLimit, 0, 8);
95
+ return zerokitRLN.verifyRLNProof(this.zkRLN, BytesUtils.concatenate(pBytes, msgLen, msg, rateLimitBytes));
96
96
  }
97
97
  verifyWithRoots(proof, msg, roots, rateLimit) {
98
98
  let pBytes;
@@ -103,10 +103,10 @@ export class Zerokit {
103
103
  pBytes = proofToBytes(proof);
104
104
  }
105
105
  // calculate message length
106
- const msgLen = writeUIntLE(new Uint8Array(8), msg.length, 0, 8);
107
- const rateLimitBytes = writeUIntLE(new Uint8Array(8), rateLimit ?? this.rateLimit, 0, 8);
108
- const rootsBytes = concatenate(...roots);
109
- return zerokitRLN.verifyWithRoots(this.zkRLN, concatenate(pBytes, msgLen, msg, rateLimitBytes), rootsBytes);
106
+ const msgLen = BytesUtils.writeUIntLE(new Uint8Array(8), msg.length, 0, 8);
107
+ const rateLimitBytes = BytesUtils.writeUIntLE(new Uint8Array(8), rateLimit ?? this.rateLimit, 0, 8);
108
+ const rootsBytes = BytesUtils.concatenate(...roots);
109
+ return zerokitRLN.verifyWithRoots(this.zkRLN, BytesUtils.concatenate(pBytes, msgLen, msg, rateLimitBytes), rootsBytes);
110
110
  }
111
111
  verifyWithNoRoot(proof, msg, rateLimit) {
112
112
  let pBytes;
@@ -117,9 +117,9 @@ export class Zerokit {
117
117
  pBytes = proofToBytes(proof);
118
118
  }
119
119
  // calculate message length
120
- const msgLen = writeUIntLE(new Uint8Array(8), msg.length, 0, 8);
121
- const rateLimitBytes = writeUIntLE(new Uint8Array(8), rateLimit ?? this.rateLimit, 0, 8);
122
- return zerokitRLN.verifyWithRoots(this.zkRLN, concatenate(pBytes, msgLen, msg, rateLimitBytes), new Uint8Array());
120
+ const msgLen = BytesUtils.writeUIntLE(new Uint8Array(8), msg.length, 0, 8);
121
+ const rateLimitBytes = BytesUtils.writeUIntLE(new Uint8Array(8), rateLimit ?? this.rateLimit, 0, 8);
122
+ return zerokitRLN.verifyWithRoots(this.zkRLN, BytesUtils.concatenate(pBytes, msgLen, msg, rateLimitBytes), new Uint8Array());
123
123
  }
124
124
  }
125
125
  //# sourceMappingURL=zerokit.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"zerokit.js","sourceRoot":"","sources":["../src/zerokit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"zerokit.js","sourceRoot":"","sources":["../src/zerokit.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1 +1 @@
1
- {"name":"@waku/rln","version":"0.1.6-b0a2e39.0","description":"RLN (Rate Limiting Nullifier) implementation for Waku","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"type":"module","homepage":"https://github.com/waku-org/js-waku/tree/master/packages/rln#readme","repository":{"type":"git","url":"https://github.com/waku-org/js-waku.git"},"bugs":{"url":"https://github.com/waku-org/js-waku/issues"},"license":"MIT OR Apache-2.0","keywords":["waku","rln","rate-limiting","privacy","web3"],"scripts":{"build":"run-s build:**","build:copy":"mkdir -p dist/resources && cp -r src/resources/* dist/resources/","build:esm":"tsc","build:bundle":"rollup --config rollup.config.js","fix":"run-s fix:*","fix:lint":"eslint src *.js --fix","check":"run-s check:*","check:tsc":"tsc -p tsconfig.dev.json","check:lint":"eslint \"src/!(resources)/**/*.{ts,js}\" *.js","check:spelling":"cspell \"{README.md,src/**/*.ts}\"","test":"NODE_ENV=test run-s test:*","test:browser":"karma start karma.conf.cjs","watch:build":"tsc -p tsconfig.json -w","watch:test":"mocha --watch","prepublish":"npm run build","reset-hard":"git clean -dfx -e .idea && git reset --hard && npm i && npm run build"},"engines":{"node":">=20"},"devDependencies":{"@rollup/plugin-commonjs":"^25.0.7","@rollup/plugin-json":"^6.0.0","@rollup/plugin-node-resolve":"^15.2.3","@types/chai":"^5.0.1","@types/chai-spies":"^1.0.6","@waku/interfaces":"0.0.31-b0a2e39.0","@types/deep-equal-in-any-order":"^1.0.4","@types/lodash":"^4.17.15","@types/sinon":"^17.0.3","@waku/build-utils":"^1.0.0","@waku/message-encryption":"0.0.34-b0a2e39.0","deep-equal-in-any-order":"^2.0.6","fast-check":"^3.23.2","rollup-plugin-copy":"^3.5.0"},"files":["dist","bundle","src/**/*.ts","!**/*.spec.*","!**/*.json","CHANGELOG.md","LICENSE","README.md"],"dependencies":{"@chainsafe/bls-keystore":"3.0.0","@waku/core":"0.0.36-b0a2e39.0","@waku/utils":"0.0.24-b0a2e39.0","@noble/hashes":"^1.2.0","@waku/zerokit-rln-wasm":"^0.0.13","ethereum-cryptography":"^3.1.0","ethers":"^5.7.2","lodash":"^4.17.21","uuid":"^11.0.5","chai":"^5.1.2","chai-as-promised":"^8.0.1","chai-spies":"^1.1.0","chai-subset":"^1.6.0","sinon":"^19.0.2"}}
1
+ {"name":"@waku/rln","version":"0.1.6-b133417.0","description":"RLN (Rate Limiting Nullifier) implementation for Waku","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"type":"module","homepage":"https://github.com/waku-org/js-waku/tree/master/packages/rln#readme","repository":{"type":"git","url":"https://github.com/waku-org/js-waku.git"},"bugs":{"url":"https://github.com/waku-org/js-waku/issues"},"license":"MIT OR Apache-2.0","keywords":["waku","rln","rate-limiting","privacy","web3"],"scripts":{"build":"run-s build:**","build:copy":"mkdir -p dist/resources && cp -r src/resources/* dist/resources/","build:esm":"tsc","build:bundle":"rollup --config rollup.config.js","fix":"run-s fix:*","fix:lint":"eslint src *.js --fix","check":"run-s check:*","check:tsc":"tsc -p tsconfig.dev.json","check:lint":"eslint \"src/!(resources)/**/*.{ts,js}\" *.js","check:spelling":"cspell \"{README.md,src/**/*.ts}\"","test":"NODE_ENV=test run-s test:*","test:browser":"karma start karma.conf.cjs","watch:build":"tsc -p tsconfig.json -w","watch:test":"mocha --watch","prepublish":"npm run build","reset-hard":"git clean -dfx -e .idea && git reset --hard && npm i && npm run build"},"engines":{"node":">=20"},"devDependencies":{"@rollup/plugin-commonjs":"^25.0.7","@rollup/plugin-json":"^6.0.0","@rollup/plugin-node-resolve":"^15.2.3","@types/chai":"^5.0.1","@types/chai-spies":"^1.0.6","@waku/interfaces":"0.0.31-b133417.0","@types/deep-equal-in-any-order":"^1.0.4","@types/lodash":"^4.17.15","@types/sinon":"^17.0.3","@waku/build-utils":"^1.0.0","@waku/message-encryption":"0.0.34-b133417.0","deep-equal-in-any-order":"^2.0.6","fast-check":"^3.23.2","rollup-plugin-copy":"^3.5.0"},"files":["dist","bundle","src/**/*.ts","!**/*.spec.*","!**/*.json","CHANGELOG.md","LICENSE","README.md"],"dependencies":{"@chainsafe/bls-keystore":"3.0.0","@waku/core":"0.0.36-b133417.0","@waku/utils":"0.0.24-b133417.0","@noble/hashes":"^1.2.0","@waku/zerokit-rln-wasm":"^0.0.13","ethereum-cryptography":"^3.1.0","ethers":"^5.7.2","lodash":"^4.17.21","uuid":"^11.0.5","chai":"^5.1.2","chai-as-promised":"^8.0.1","chai-spies":"^1.1.0","chai-subset":"^1.6.0","sinon":"^19.0.2"}}
@@ -25,4 +25,13 @@ export const RATE_LIMIT_PARAMS = {
25
25
  EPOCH_LENGTH: 600 // Epoch length in seconds (10 minutes)
26
26
  } as const;
27
27
 
28
+ /**
29
+ * Default Q value for the RLN contract
30
+ * This is the upper bound for the ID commitment
31
+ * @see https://github.com/waku-org/specs/blob/master/standards/core/rln-contract.md#implementation-suggestions
32
+ */
33
+ export const DEFAULT_Q = BigInt(
34
+ "21888242871839275222246405745257275088548364400416034343698204186575808495617"
35
+ );
36
+
28
37
  export const DEFAULT_RATE_LIMIT = RATE_LIMIT_PARAMS.MAX_RATE;
@@ -3,6 +3,7 @@ import { ethers } from "ethers";
3
3
 
4
4
  import { IdentityCredential } from "../identity.js";
5
5
  import { DecryptedCredentials } from "../keystore/types.js";
6
+ import { BytesUtils } from "../utils/bytes.js";
6
7
 
7
8
  import { RLN_ABI } from "./abi.js";
8
9
  import { DEFAULT_RATE_LIMIT, RATE_LIMIT_PARAMS } from "./constants.js";
@@ -490,7 +491,6 @@ export class RLNBaseContract {
490
491
  log.error(`Error in withdraw: ${(error as Error).message}`);
491
492
  }
492
493
  }
493
-
494
494
  public async registerWithIdentity(
495
495
  identity: IdentityCredential
496
496
  ): Promise<DecryptedCredentials | undefined> {
@@ -529,7 +529,9 @@ export class RLNBaseContract {
529
529
  identity.IDCommitmentBigInt,
530
530
  this.rateLimit,
531
531
  [],
532
- { gasLimit }
532
+ {
533
+ gasLimit
534
+ }
533
535
  );
534
536
 
535
537
  const txRegisterReceipt = await txRegisterResponse.wait();
@@ -626,7 +628,7 @@ export class RLNBaseContract {
626
628
  permit.v,
627
629
  permit.r,
628
630
  permit.s,
629
- identity.IDCommitmentBigInt,
631
+ BytesUtils.buildBigIntFromUint8ArrayBE(identity.IDCommitment),
630
632
  this.rateLimit,
631
633
  idCommitmentsToErase.map((id) => ethers.BigNumber.from(id))
632
634
  );
@@ -4,7 +4,7 @@ import { ethers } from "ethers";
4
4
 
5
5
  import type { RLNInstance } from "../rln.js";
6
6
  import { MerkleRootTracker } from "../root_tracker.js";
7
- import { zeroPadLE } from "../utils/bytes.js";
7
+ import { BytesUtils } from "../utils/bytes.js";
8
8
 
9
9
  import { RLNBaseContract } from "./rln_base_contract.js";
10
10
  import { RLNContractInitOptions } from "./types.js";
@@ -110,7 +110,10 @@ export class RLNContract extends RLNBaseContract {
110
110
  index = ethers.BigNumber.from(index);
111
111
  }
112
112
 
113
- const idCommitment = zeroPadLE(hexToBytes(_idCommitment), 32);
113
+ const idCommitment = BytesUtils.zeroPadLE(
114
+ hexToBytes(_idCommitment),
115
+ 32
116
+ );
114
117
  rlnInstance.zerokit.insertMember(idCommitment);
115
118
 
116
119
  const numericIndex = index.toNumber();
@@ -1,9 +1,9 @@
1
1
  import { hmac } from "@noble/hashes/hmac";
2
- import { sha256 } from "@noble/hashes/sha256";
2
+ import { sha256 } from "@noble/hashes/sha2";
3
3
  import { Logger } from "@waku/utils";
4
4
  import { ethers } from "ethers";
5
5
 
6
- import { LINEA_CONTRACT } from "./contract/constants.js";
6
+ import { DEFAULT_Q, LINEA_CONTRACT } from "./contract/constants.js";
7
7
  import { RLNBaseContract } from "./contract/rln_base_contract.js";
8
8
  import { IdentityCredential } from "./identity.js";
9
9
  import { Keystore } from "./keystore/index.js";
@@ -13,10 +13,8 @@ import type {
13
13
  } from "./keystore/index.js";
14
14
  import { KeystoreEntity, Password } from "./keystore/types.js";
15
15
  import { RegisterMembershipOptions, StartRLNOptions } from "./types.js";
16
- import {
17
- buildBigIntFromUint8Array,
18
- extractMetaMaskSigner
19
- } from "./utils/index.js";
16
+ import { BytesUtils } from "./utils/bytes.js";
17
+ import { extractMetaMaskSigner } from "./utils/index.js";
20
18
  import { Zerokit } from "./zerokit.js";
21
19
 
22
20
  const log = new Logger("waku:credentials");
@@ -116,7 +114,9 @@ export class RLNCredentialsManager {
116
114
  );
117
115
  } else {
118
116
  log.info("Using local implementation to generate identity");
119
- identity = this.generateSeededIdentityCredential(options.signature);
117
+ identity = await this.generateSeededIdentityCredential(
118
+ options.signature
119
+ );
120
120
  }
121
121
  }
122
122
 
@@ -249,7 +249,9 @@ export class RLNCredentialsManager {
249
249
  * @param seed A string seed to generate the identity from
250
250
  * @returns IdentityCredential
251
251
  */
252
- private generateSeededIdentityCredential(seed: string): IdentityCredential {
252
+ private async generateSeededIdentityCredential(
253
+ seed: string
254
+ ): Promise<IdentityCredential> {
253
255
  log.info("Generating seeded identity credential");
254
256
  // Convert the seed to bytes
255
257
  const encoder = new TextEncoder();
@@ -257,26 +259,46 @@ export class RLNCredentialsManager {
257
259
 
258
260
  // Generate deterministic values using HMAC-SHA256
259
261
  // We use different context strings for each component to ensure they're different
260
- const idTrapdoor = hmac(sha256, seedBytes, encoder.encode("IDTrapdoor"));
261
- const idNullifier = hmac(sha256, seedBytes, encoder.encode("IDNullifier"));
262
-
263
- // Generate IDSecretHash as a hash of IDTrapdoor and IDNullifier
264
- const combinedBytes = new Uint8Array([...idTrapdoor, ...idNullifier]);
265
- const idSecretHash = sha256(combinedBytes);
262
+ const idTrapdoorBE = hmac(sha256, seedBytes, encoder.encode("IDTrapdoor"));
263
+ const idNullifierBE = hmac(
264
+ sha256,
265
+ seedBytes,
266
+ encoder.encode("IDNullifier")
267
+ );
266
268
 
267
- // Generate IDCommitment as a hash of IDSecretHash
268
- const idCommitment = sha256(idSecretHash);
269
+ const combinedBytes = new Uint8Array([...idTrapdoorBE, ...idNullifierBE]);
270
+ const idSecretHashBE = sha256(combinedBytes);
269
271
 
270
- // Convert IDCommitment to BigInt
271
- const idCommitmentBigInt = buildBigIntFromUint8Array(idCommitment);
272
+ const idCommitmentRawBE = sha256(idSecretHashBE);
273
+ const idCommitmentBE = this.reduceIdCommitment(idCommitmentRawBE);
272
274
 
273
- log.info("Successfully generated identity credential");
275
+ log.info(
276
+ "Successfully generated identity credential, storing in Big Endian format"
277
+ );
274
278
  return new IdentityCredential(
275
- idTrapdoor,
276
- idNullifier,
277
- idSecretHash,
278
- idCommitment,
279
- idCommitmentBigInt
279
+ idTrapdoorBE,
280
+ idNullifierBE,
281
+ idSecretHashBE,
282
+ idCommitmentBE
280
283
  );
281
284
  }
285
+
286
+ /**
287
+ * Helper: take 32-byte BE, reduce mod Q, return 32-byte BE
288
+ */
289
+ private reduceIdCommitment(
290
+ bytesBE: Uint8Array,
291
+ limit: bigint = DEFAULT_Q
292
+ ): Uint8Array {
293
+ const nBE = BytesUtils.buildBigIntFromUint8ArrayBE(bytesBE);
294
+
295
+ if (nBE >= limit) {
296
+ log.warn(
297
+ `ID commitment is greater than Q, reducing it by Q: ${nBE} % ${limit}`
298
+ );
299
+ return BytesUtils.bigIntToUint8Array32BE(nBE % limit);
300
+ }
301
+
302
+ return bytesBE;
303
+ }
282
304
  }
package/src/identity.ts CHANGED
@@ -1,13 +1,19 @@
1
- import { buildBigIntFromUint8Array } from "./utils/index.js";
1
+ import { BytesUtils } from "./utils/bytes.js";
2
2
 
3
3
  export class IdentityCredential {
4
+ public IDCommitmentBigInt: bigint;
5
+ /**
6
+ * All variables are in little-endian format
7
+ */
4
8
  public constructor(
5
9
  public readonly IDTrapdoor: Uint8Array,
6
10
  public readonly IDNullifier: Uint8Array,
7
11
  public readonly IDSecretHash: Uint8Array,
8
- public readonly IDCommitment: Uint8Array,
9
- public readonly IDCommitmentBigInt: bigint
10
- ) {}
12
+ public readonly IDCommitment: Uint8Array
13
+ ) {
14
+ this.IDCommitmentBigInt =
15
+ BytesUtils.buildBigIntFromUint8ArrayBE(IDCommitment);
16
+ }
11
17
 
12
18
  public static fromBytes(memKeys: Uint8Array): IdentityCredential {
13
19
  if (memKeys.length < 128) {
@@ -18,14 +24,12 @@ export class IdentityCredential {
18
24
  const idNullifier = memKeys.subarray(32, 64);
19
25
  const idSecretHash = memKeys.subarray(64, 96);
20
26
  const idCommitment = memKeys.subarray(96, 128);
21
- const idCommitmentBigInt = buildBigIntFromUint8Array(idCommitment, 32);
22
27
 
23
28
  return new IdentityCredential(
24
29
  idTrapdoor,
25
30
  idNullifier,
26
31
  idSecretHash,
27
- idCommitment,
28
- idCommitmentBigInt
32
+ idCommitment
29
33
  );
30
34
  }
31
35
  }