@waku/rln 0.0.8-4f8118e → 0.0.8-b5f0cbb

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/src/epoch.ts ADDED
@@ -0,0 +1,21 @@
1
+ const DefaultEpochUnitSeconds = 10; // the rln-relay epoch length in seconds
2
+
3
+ export function dateToEpoch(
4
+ timestamp: Date,
5
+ epochUnitSeconds: number = DefaultEpochUnitSeconds
6
+ ): number {
7
+ const time = timestamp.getTime();
8
+ return Math.floor(time / 1000 / epochUnitSeconds);
9
+ }
10
+
11
+ export function epochIntToBytes(epoch: number): Uint8Array {
12
+ const bytes = new Uint8Array(32);
13
+ const db = new DataView(bytes.buffer);
14
+ db.setUint32(0, epoch, true);
15
+ return bytes;
16
+ }
17
+
18
+ export function epochBytesToInt(bytes: Uint8Array): number {
19
+ const dv = new DataView(bytes.buffer);
20
+ return dv.getUint32(0, true);
21
+ }
package/src/index.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import { RLNDecoder, RLNEncoder } from "./codec.js";
1
2
  import type { Proof, RLNInstance } from "./rln.js";
2
3
  import { MembershipKey } from "./rln.js";
3
4
 
@@ -10,4 +11,4 @@ export async function create(): Promise<RLNInstance> {
10
11
  return await rlnModule.create();
11
12
  }
12
13
 
13
- export { RLNInstance, MembershipKey, Proof };
14
+ export { RLNInstance, MembershipKey, Proof, RLNEncoder, RLNDecoder };
package/src/message.ts ADDED
@@ -0,0 +1,37 @@
1
+ import { Message, RateLimitProof } from "js-waku/lib/interfaces";
2
+
3
+ import { epochBytesToInt } from "./epoch.js";
4
+ import { RLNInstance } from "./rln.js";
5
+
6
+ export class RlnMessage<T extends Message> implements Message {
7
+ constructor(
8
+ public rlnInstance: RLNInstance,
9
+ public msg: T,
10
+ public rateLimitProof?: RateLimitProof
11
+ ) {}
12
+
13
+ public verify(): boolean | undefined {
14
+ return this.rateLimitProof
15
+ ? this.rlnInstance.verifyProof(this.rateLimitProof)
16
+ : undefined;
17
+ }
18
+
19
+ get payload(): Uint8Array | undefined {
20
+ return this.msg.payload;
21
+ }
22
+
23
+ get contentTopic(): string | undefined {
24
+ return this.msg.contentTopic;
25
+ }
26
+
27
+ get timestamp(): Date | undefined {
28
+ return this.msg.timestamp;
29
+ }
30
+
31
+ get epoch(): number | undefined {
32
+ const bytes = this.msg.rateLimitProof?.epoch;
33
+ if (!bytes) return;
34
+
35
+ return epochBytesToInt(bytes);
36
+ }
37
+ }
package/src/rln.ts CHANGED
@@ -1,6 +1,8 @@
1
1
  import init, * as zerokitRLN from "@waku/zerokit-rln-wasm";
2
2
  import { RateLimitProof } from "js-waku/lib/interfaces";
3
3
 
4
+ import { writeUIntLE } from "./byte_utils.js";
5
+ import { dateToEpoch, epochIntToBytes } from "./epoch.js";
4
6
  import verificationKey from "./resources/verification_key.js";
5
7
  import * as wc from "./witness_calculator.js";
6
8
  import { WitnessCalculator } from "./witness_calculator.js";
@@ -67,56 +69,6 @@ export class MembershipKey {
67
69
  }
68
70
  }
69
71
 
70
- // Adapted from https://github.com/feross/buffer
71
-
72
- function checkInt(
73
- buf: Uint8Array,
74
- value: number,
75
- offset: number,
76
- ext: number,
77
- max: number,
78
- min: number
79
- ): void {
80
- if (value > max || value < min)
81
- throw new RangeError('"value" argument is out of bounds');
82
- if (offset + ext > buf.length) throw new RangeError("Index out of range");
83
- }
84
-
85
- const writeUIntLE = function writeUIntLE(
86
- buf: Uint8Array,
87
- value: number,
88
- offset: number,
89
- byteLength: number,
90
- noAssert?: boolean
91
- ): Uint8Array {
92
- value = +value;
93
- offset = offset >>> 0;
94
- byteLength = byteLength >>> 0;
95
- if (!noAssert) {
96
- const maxBytes = Math.pow(2, 8 * byteLength) - 1;
97
- checkInt(buf, value, offset, byteLength, maxBytes, 0);
98
- }
99
-
100
- let mul = 1;
101
- let i = 0;
102
- buf[offset] = value & 0xff;
103
- while (++i < byteLength && (mul *= 0x100)) {
104
- buf[offset + i] = (value / mul) & 0xff;
105
- }
106
-
107
- return buf;
108
- };
109
-
110
- const DefaultEpochUnitSeconds = 10; // the rln-relay epoch length in seconds
111
-
112
- export function toEpoch(
113
- timestamp: Date,
114
- epochUnitSeconds: number = DefaultEpochUnitSeconds
115
- ): Uint8Array {
116
- const unix = Math.floor(timestamp.getTime() / 1000 / epochUnitSeconds);
117
- return writeUIntLE(new Uint8Array(32), unix, 0, 8);
118
- }
119
-
120
72
  const proofOffset = 128;
121
73
  const rootOffset = proofOffset + 32;
122
74
  const epochOffset = rootOffset + 32;
@@ -200,9 +152,9 @@ export class RLNInstance {
200
152
  idKey: Uint8Array
201
153
  ): Promise<RateLimitProof> {
202
154
  if (epoch == undefined) {
203
- epoch = toEpoch(new Date());
155
+ epoch = epochIntToBytes(dateToEpoch(new Date()));
204
156
  } else if (epoch instanceof Date) {
205
- epoch = toEpoch(epoch);
157
+ epoch = epochIntToBytes(dateToEpoch(epoch));
206
158
  }
207
159
 
208
160
  if (epoch.length != 32) throw "invalid epoch";
@@ -1 +0,0 @@
1
- {"version":3,"file":"encoder.js","sourceRoot":"","sources":["../src/encoder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAU/C,MAAM,GAAG,GAAG,KAAK,CAAC,0BAA0B,CAAC,CAAC;AAE9C,MAAM,OAAO,UAAU;IAIrB,YACU,OAAgB,EAChB,WAAwB,EACxB,KAAa,EACrB,aAA4B;QAHpB,YAAO,GAAP,OAAO,CAAS;QAChB,gBAAW,GAAX,WAAW,CAAa;QACxB,UAAK,GAAL,KAAK,CAAQ;QAGrB,IAAI,KAAK,GAAG,CAAC;YAAE,MAAM,0BAA0B,CAAC;QAChD,IAAI,CAAC,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC;QACjC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAgB;QAC3B,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QACrD,IAAI,CAAC,YAAY;YAAE,OAAO;QAC1B,OAAO,aAAa,CAAC,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IACxD,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAAgB;QAChC,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC7D,IAAI,CAAC,YAAY;YAAE,OAAO;QAE1B,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;QAEpC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAChC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,aAAa,CAChD,MAAM,EACN,IAAI,CAAC,KAAK,EACV,OAAO,CAAC,SAAS,EACjB,IAAI,CAAC,KAAK,CACX,CAAC;QACF,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QAEnC,YAAY,CAAC,cAAc,GAAG,KAAK,CAAC;QAEpC,OAAO,YAAY,CAAC;IACtB,CAAC;CACF;AAED,MAAM,OAAO,UAAU;IAGrB,YAAoB,OAAyB;QAAzB,YAAO,GAAP,OAAO,CAAkB;QAC3C,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAC3C,CAAC;IAED,WAAW,CAAC,KAAiB;QAC3B,MAAM,YAAY,GAAG,aAAa,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7D,GAAG,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAC;QACrC,OAAO,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAmB;QAC9B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,GAAG,EAAE;YACP,GAAG,CAAC,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC;SAC3C;QACD,OAAO,GAAG,CAAC;IACb,CAAC;CACF;AAED,SAAS,WAAW,CAAC,GAAY;IAC/B,MAAM,iBAAiB,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;IACpE,OAAO,IAAI,UAAU,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,GAAG,iBAAiB,CAAC,CAAC,CAAC;AACxE,CAAC"}