@waku/rln 0.1.6-f7778a9.0 → 0.1.6-f7c290d.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.
- package/bundle/_virtual/utils.js +2 -2
- package/bundle/_virtual/utils2.js +2 -2
- package/bundle/node_modules/@chainsafe/bls-keystore/node_modules/@noble/hashes/_sha2.js +1 -1
- package/bundle/node_modules/@chainsafe/bls-keystore/node_modules/@noble/hashes/hmac.js +1 -1
- package/bundle/node_modules/@chainsafe/bls-keystore/node_modules/@noble/hashes/pbkdf2.js +1 -1
- package/bundle/node_modules/@chainsafe/bls-keystore/node_modules/@noble/hashes/scrypt.js +1 -1
- package/bundle/node_modules/@chainsafe/bls-keystore/node_modules/@noble/hashes/sha256.js +1 -1
- package/bundle/node_modules/@chainsafe/bls-keystore/node_modules/@noble/hashes/sha512.js +1 -1
- package/bundle/node_modules/@chainsafe/bls-keystore/node_modules/@noble/hashes/utils.js +1 -1
- package/bundle/node_modules/@chainsafe/bls-keystore/node_modules/ethereum-cryptography/random.js +1 -1
- package/bundle/node_modules/@chainsafe/bls-keystore/node_modules/ethereum-cryptography/utils.js +2 -2
- package/bundle/packages/rln/dist/contract/rln_base_contract.js +8 -12
- package/bundle/packages/rln/dist/contract/rln_contract.js +2 -2
- package/bundle/packages/rln/dist/credentials_manager.js +21 -18
- package/bundle/packages/rln/dist/identity.js +8 -6
- package/bundle/packages/rln/dist/keystore/keystore.js +21 -10
- package/bundle/packages/rln/dist/proof.js +2 -2
- package/bundle/packages/rln/dist/utils/bytes.js +103 -58
- package/bundle/packages/rln/dist/utils/hash.js +3 -3
- package/bundle/packages/rln/dist/zerokit.js +17 -17
- package/dist/.tsbuildinfo +1 -1
- package/dist/contract/rln_base_contract.d.ts +0 -5
- package/dist/contract/rln_base_contract.js +8 -12
- package/dist/contract/rln_base_contract.js.map +1 -1
- package/dist/contract/rln_contract.js +2 -2
- package/dist/contract/rln_contract.js.map +1 -1
- package/dist/credentials_manager.d.ts +4 -0
- package/dist/credentials_manager.js +22 -18
- package/dist/credentials_manager.js.map +1 -1
- package/dist/identity.d.ts +5 -2
- package/dist/identity.js +8 -5
- package/dist/identity.js.map +1 -1
- package/dist/keystore/keystore.js +21 -10
- package/dist/keystore/keystore.js.map +1 -1
- package/dist/proof.js +2 -2
- package/dist/proof.js.map +1 -1
- package/dist/utils/bytes.d.ts +42 -20
- package/dist/utils/bytes.js +102 -57
- package/dist/utils/bytes.js.map +1 -1
- package/dist/utils/hash.js +5 -5
- package/dist/utils/hash.js.map +1 -1
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.js +1 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/zerokit.js +17 -17
- package/dist/zerokit.js.map +1 -1
- package/package.json +1 -1
- package/src/contract/rln_base_contract.ts +8 -20
- package/src/contract/rln_contract.ts +5 -2
- package/src/credentials_manager.ts +36 -27
- package/src/identity.ts +11 -7
- package/src/keystore/keystore.ts +38 -22
- package/src/proof.ts +2 -2
- package/src/utils/bytes.ts +118 -72
- package/src/utils/hash.ts +15 -5
- package/src/utils/index.ts +1 -6
- package/src/zerokit.ts +30 -22
- package/dist/contract/test-utils.d.ts +0 -39
- package/dist/contract/test-utils.js +0 -118
- package/dist/contract/test-utils.js.map +0 -1
- package/src/contract/test-utils.ts +0 -179
package/dist/utils/bytes.js
CHANGED
@@ -1,64 +1,109 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
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
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
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
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
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
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
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
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
}
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
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
|
package/dist/utils/bytes.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"bytes.js","sourceRoot":"","sources":["../../src/utils/bytes.ts"],"names":[],"mappings":"AAAA
|
1
|
+
{"version":3,"file":"bytes.js","sourceRoot":"","sources":["../../src/utils/bytes.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/hash.js
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
import * as zerokitRLN from "@waku/zerokit-rln-wasm";
|
2
|
-
import {
|
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
|
package/dist/utils/hash.js.map
CHANGED
@@ -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,
|
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"}
|
package/dist/utils/index.d.ts
CHANGED
@@ -1,4 +1,4 @@
|
|
1
1
|
export { extractMetaMaskSigner } from "./metamask.js";
|
2
|
-
export {
|
2
|
+
export { BytesUtils } from "./bytes.js";
|
3
3
|
export { sha256, poseidonHash } from "./hash.js";
|
4
4
|
export { dateToEpoch, epochIntToBytes, epochBytesToInt } from "./epoch.js";
|
package/dist/utils/index.js
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
export { extractMetaMaskSigner } from "./metamask.js";
|
2
|
-
export {
|
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
|
package/dist/utils/index.js.map
CHANGED
@@ -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,
|
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 {
|
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
|
package/dist/zerokit.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"zerokit.js","sourceRoot":"","sources":["../src/zerokit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,UAAU,MAAM,wBAAwB,CAAC;AAErD,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAChF,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEjD,OAAO,
|
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-
|
1
|
+
{"name":"@waku/rln","version":"0.1.6-f7c290d.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-f7c290d.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-f7c290d.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-f7c290d.0","@waku/utils":"0.0.24-f7c290d.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"}}
|
@@ -3,13 +3,10 @@ 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
|
-
import {
|
9
|
-
DEFAULT_Q,
|
10
|
-
DEFAULT_RATE_LIMIT,
|
11
|
-
RATE_LIMIT_PARAMS
|
12
|
-
} from "./constants.js";
|
9
|
+
import { DEFAULT_RATE_LIMIT, RATE_LIMIT_PARAMS } from "./constants.js";
|
13
10
|
import {
|
14
11
|
CustomQueryOptions,
|
15
12
|
FetchMembersOptions,
|
@@ -29,12 +26,6 @@ export class RLNBaseContract {
|
|
29
26
|
private minRateLimit?: number;
|
30
27
|
private maxRateLimit?: number;
|
31
28
|
|
32
|
-
/**
|
33
|
-
* Default Q value for the RLN contract.
|
34
|
-
* @see https://github.com/waku-org/waku-rlnv2-contract/blob/b7e9a9b1bc69256a2a3076c1f099b50ce84e7eff/src/WakuRlnV2.sol#L25
|
35
|
-
*/
|
36
|
-
public idCommitmentBigIntLimit = DEFAULT_Q;
|
37
|
-
|
38
29
|
protected _members: Map<number, Member> = new Map();
|
39
30
|
private _membersFilter: ethers.EventFilter;
|
40
31
|
private _membershipErasedFilter: ethers.EventFilter;
|
@@ -87,16 +78,12 @@ export class RLNBaseContract {
|
|
87
78
|
options: RLNContractInitOptions
|
88
79
|
): Promise<RLNBaseContract> {
|
89
80
|
const instance = new RLNBaseContract(options);
|
90
|
-
const [min, max
|
81
|
+
const [min, max] = await Promise.all([
|
91
82
|
instance.contract.minMembershipRateLimit(),
|
92
|
-
instance.contract.maxMembershipRateLimit()
|
93
|
-
instance.contract.Q()
|
83
|
+
instance.contract.maxMembershipRateLimit()
|
94
84
|
]);
|
95
85
|
instance.minRateLimit = ethers.BigNumber.from(min).toNumber();
|
96
86
|
instance.maxRateLimit = ethers.BigNumber.from(max).toNumber();
|
97
|
-
instance.idCommitmentBigIntLimit = BigInt(
|
98
|
-
idCommitmentBigIntLimit.toString()
|
99
|
-
);
|
100
87
|
|
101
88
|
instance.validateRateLimit(instance.rateLimit);
|
102
89
|
return instance;
|
@@ -504,7 +491,6 @@ export class RLNBaseContract {
|
|
504
491
|
log.error(`Error in withdraw: ${(error as Error).message}`);
|
505
492
|
}
|
506
493
|
}
|
507
|
-
|
508
494
|
public async registerWithIdentity(
|
509
495
|
identity: IdentityCredential
|
510
496
|
): Promise<DecryptedCredentials | undefined> {
|
@@ -543,7 +529,9 @@ export class RLNBaseContract {
|
|
543
529
|
identity.IDCommitmentBigInt,
|
544
530
|
this.rateLimit,
|
545
531
|
[],
|
546
|
-
{
|
532
|
+
{
|
533
|
+
gasLimit
|
534
|
+
}
|
547
535
|
);
|
548
536
|
|
549
537
|
const txRegisterReceipt = await txRegisterResponse.wait();
|
@@ -640,7 +628,7 @@ export class RLNBaseContract {
|
|
640
628
|
permit.v,
|
641
629
|
permit.r,
|
642
630
|
permit.s,
|
643
|
-
identity.
|
631
|
+
BytesUtils.buildBigIntFromUint8ArrayBE(identity.IDCommitment),
|
644
632
|
this.rateLimit,
|
645
633
|
idCommitmentsToErase.map((id) => ethers.BigNumber.from(id))
|
646
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 {
|
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(
|
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/
|
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
|
-
|
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");
|
@@ -261,35 +259,46 @@ export class RLNCredentialsManager {
|
|
261
259
|
|
262
260
|
// Generate deterministic values using HMAC-SHA256
|
263
261
|
// We use different context strings for each component to ensure they're different
|
264
|
-
const
|
265
|
-
const
|
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
|
-
const combinedBytes = new Uint8Array([...
|
268
|
-
const
|
269
|
+
const combinedBytes = new Uint8Array([...idTrapdoorBE, ...idNullifierBE]);
|
270
|
+
const idSecretHashBE = sha256(combinedBytes);
|
269
271
|
|
270
|
-
const
|
272
|
+
const idCommitmentRawBE = sha256(idSecretHashBE);
|
273
|
+
const idCommitmentBE = this.reduceIdCommitment(idCommitmentRawBE);
|
271
274
|
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
275
|
+
log.info(
|
276
|
+
"Successfully generated identity credential, storing in Big Endian format"
|
277
|
+
);
|
278
|
+
return new IdentityCredential(
|
279
|
+
idTrapdoorBE,
|
280
|
+
idNullifierBE,
|
281
|
+
idSecretHashBE,
|
282
|
+
idCommitmentBE
|
283
|
+
);
|
284
|
+
}
|
276
285
|
|
277
|
-
|
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);
|
278
294
|
|
279
|
-
if (
|
295
|
+
if (nBE >= limit) {
|
280
296
|
log.warn(
|
281
|
-
`ID commitment is greater than Q, reducing it by Q
|
297
|
+
`ID commitment is greater than Q, reducing it by Q: ${nBE} % ${limit}`
|
282
298
|
);
|
283
|
-
|
299
|
+
return BytesUtils.bigIntToUint8Array32BE(nBE % limit);
|
284
300
|
}
|
285
301
|
|
286
|
-
|
287
|
-
return new IdentityCredential(
|
288
|
-
idTrapdoor,
|
289
|
-
idNullifier,
|
290
|
-
idSecretHash,
|
291
|
-
idCommitment,
|
292
|
-
idCommitmentBigInt
|
293
|
-
);
|
302
|
+
return bytesBE;
|
294
303
|
}
|
295
304
|
}
|
package/src/identity.ts
CHANGED
@@ -1,13 +1,19 @@
|
|
1
|
-
import {
|
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
|
-
|
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
|
}
|