@aztec/bb.js 0.0.1-alpha.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/README.md +3 -0
- package/dest/async_map/index.d.ts +10 -0
- package/dest/async_map/index.d.ts.map +1 -0
- package/dest/async_map/index.js +16 -0
- package/dest/barretenberg-threads.wasm +0 -0
- package/dest/barretenberg.wasm +0 -0
- package/dest/barretenberg_api/blake2s.test.d.ts +2 -0
- package/dest/barretenberg_api/blake2s.test.d.ts.map +1 -0
- package/dest/barretenberg_api/blake2s.test.js +30 -0
- package/dest/barretenberg_api/common.test.d.ts +2 -0
- package/dest/barretenberg_api/common.test.d.ts.map +1 -0
- package/dest/barretenberg_api/common.test.js +18 -0
- package/dest/barretenberg_api/index.d.ts +101 -0
- package/dest/barretenberg_api/index.d.ts.map +1 -0
- package/dest/barretenberg_api/index.js +371 -0
- package/dest/barretenberg_api/pedersen.test.d.ts +2 -0
- package/dest/barretenberg_api/pedersen.test.d.ts.map +1 -0
- package/dest/barretenberg_api/pedersen.test.js +69 -0
- package/dest/barretenberg_api/schnorr.test.d.ts +2 -0
- package/dest/barretenberg_api/schnorr.test.d.ts.map +1 -0
- package/dest/barretenberg_api/schnorr.test.js +113 -0
- package/dest/barretenberg_binder/heap_allocator.d.ts +22 -0
- package/dest/barretenberg_binder/heap_allocator.d.ts.map +1 -0
- package/dest/barretenberg_binder/heap_allocator.js +59 -0
- package/dest/barretenberg_binder/heap_allocator_sync.d.ts +22 -0
- package/dest/barretenberg_binder/heap_allocator_sync.d.ts.map +1 -0
- package/dest/barretenberg_binder/heap_allocator_sync.js +58 -0
- package/dest/barretenberg_binder/index.d.ts +32 -0
- package/dest/barretenberg_binder/index.d.ts.map +1 -0
- package/dest/barretenberg_binder/index.js +73 -0
- package/dest/barretenberg_wasm/barretenberg_wasm.d.ts +49 -0
- package/dest/barretenberg_wasm/barretenberg_wasm.d.ts.map +1 -0
- package/dest/barretenberg_wasm/barretenberg_wasm.js +190 -0
- package/dest/barretenberg_wasm/barretenberg_wasm.test.d.ts +2 -0
- package/dest/barretenberg_wasm/barretenberg_wasm.test.d.ts.map +1 -0
- package/dest/barretenberg_wasm/barretenberg_wasm.test.js +43 -0
- package/dest/barretenberg_wasm/browser/index.d.ts +8 -0
- package/dest/barretenberg_wasm/browser/index.d.ts.map +1 -0
- package/dest/barretenberg_wasm/browser/index.js +26 -0
- package/dest/barretenberg_wasm/browser/worker.d.ts +2 -0
- package/dest/barretenberg_wasm/browser/worker.d.ts.map +1 -0
- package/dest/barretenberg_wasm/browser/worker.js +11 -0
- package/dest/barretenberg_wasm/index.d.ts +2 -0
- package/dest/barretenberg_wasm/index.d.ts.map +1 -0
- package/dest/barretenberg_wasm/index.js +2 -0
- package/dest/barretenberg_wasm/node/index.d.ts +17 -0
- package/dest/barretenberg_wasm/node/index.d.ts.map +1 -0
- package/dest/barretenberg_wasm/node/index.js +40 -0
- package/dest/barretenberg_wasm/node/node_endpoint.d.ts +8 -0
- package/dest/barretenberg_wasm/node/node_endpoint.d.ts.map +1 -0
- package/dest/barretenberg_wasm/node/node_endpoint.js +28 -0
- package/dest/barretenberg_wasm/node/worker.d.ts +2 -0
- package/dest/barretenberg_wasm/node/worker.d.ts.map +1 -0
- package/dest/barretenberg_wasm/node/worker.js +9 -0
- package/dest/barretenberg_wasm.js +2 -0
- package/dest/barretenberg_wasm.js.LICENSE.txt +5 -0
- package/dest/bigint-array/index.d.ts +3 -0
- package/dest/bigint-array/index.d.ts.map +1 -0
- package/dest/bigint-array/index.js +21 -0
- package/dest/bindgen/function_declaration.d.ts +11 -0
- package/dest/bindgen/function_declaration.d.ts.map +1 -0
- package/dest/bindgen/function_declaration.js +2 -0
- package/dest/bindgen/index.d.ts +2 -0
- package/dest/bindgen/index.d.ts.map +1 -0
- package/dest/bindgen/index.js +15 -0
- package/dest/bindgen/mappings.d.ts +4 -0
- package/dest/bindgen/mappings.d.ts.map +1 -0
- package/dest/bindgen/mappings.js +63 -0
- package/dest/bindgen/rust.d.ts +2 -0
- package/dest/bindgen/rust.d.ts.map +1 -0
- package/dest/bindgen/rust.js +43 -0
- package/dest/bindgen/to_camel_case.d.ts +2 -0
- package/dest/bindgen/to_camel_case.d.ts.map +1 -0
- package/dest/bindgen/to_camel_case.js +11 -0
- package/dest/bindgen/typescript.d.ts +2 -0
- package/dest/bindgen/typescript.d.ts.map +1 -0
- package/dest/bindgen/typescript.js +80 -0
- package/dest/crs/browser/cached_net_crs.d.ts +25 -0
- package/dest/crs/browser/cached_net_crs.d.ts.map +1 -0
- package/dest/crs/browser/cached_net_crs.js +54 -0
- package/dest/crs/browser/index.d.ts +2 -0
- package/dest/crs/browser/index.d.ts.map +1 -0
- package/dest/crs/browser/index.js +2 -0
- package/dest/crs/index.d.ts +2 -0
- package/dest/crs/index.d.ts.map +1 -0
- package/dest/crs/index.js +2 -0
- package/dest/crs/net_crs.d.ts +36 -0
- package/dest/crs/net_crs.d.ts.map +1 -0
- package/dest/crs/net_crs.js +59 -0
- package/dest/crs/node/file_crs.d.ts +37 -0
- package/dest/crs/node/file_crs.d.ts.map +1 -0
- package/dest/crs/node/file_crs.js +51 -0
- package/dest/crs/node/index.d.ts +31 -0
- package/dest/crs/node/index.d.ts.map +1 -0
- package/dest/crs/node/index.js +41 -0
- package/dest/examples/simple.rawtest.d.ts +2 -0
- package/dest/examples/simple.rawtest.d.ts.map +1 -0
- package/dest/examples/simple.rawtest.js +24 -0
- package/dest/examples/simple.test.d.ts +2 -0
- package/dest/examples/simple.test.d.ts.map +1 -0
- package/dest/examples/simple.test.js +22 -0
- package/dest/factory/index.d.ts +21 -0
- package/dest/factory/index.d.ts.map +1 -0
- package/dest/factory/index.js +34 -0
- package/dest/index.d.ts +4 -0
- package/dest/index.d.ts.map +1 -0
- package/dest/index.html +1 -0
- package/dest/index.js +4 -0
- package/dest/main-dev.d.ts +3 -0
- package/dest/main-dev.d.ts.map +1 -0
- package/dest/main-dev.js +3 -0
- package/dest/main.d.ts +10 -0
- package/dest/main.d.ts.map +1 -0
- package/dest/main.js +288 -0
- package/dest/random/browser/index.d.ts +2 -0
- package/dest/random/browser/index.d.ts.map +1 -0
- package/dest/random/browser/index.js +31 -0
- package/dest/random/index.d.ts +2 -0
- package/dest/random/index.d.ts.map +1 -0
- package/dest/random/index.js +2 -0
- package/dest/random/node/index.d.ts +2 -0
- package/dest/random/node/index.d.ts.map +1 -0
- package/dest/random/node/index.js +5 -0
- package/dest/serialize/buffer_reader.d.ts +28 -0
- package/dest/serialize/buffer_reader.d.ts.map +1 -0
- package/dest/serialize/buffer_reader.js +66 -0
- package/dest/serialize/index.d.ts +4 -0
- package/dest/serialize/index.d.ts.map +1 -0
- package/dest/serialize/index.js +4 -0
- package/dest/serialize/output_type.d.ts +11 -0
- package/dest/serialize/output_type.d.ts.map +1 -0
- package/dest/serialize/output_type.js +44 -0
- package/dest/serialize/serialize.d.ts +53 -0
- package/dest/serialize/serialize.d.ts.map +1 -0
- package/dest/serialize/serialize.js +139 -0
- package/dest/simple_test.js +2 -0
- package/dest/simple_test.js.LICENSE.txt +14 -0
- package/dest/types/fields.d.ts +33 -0
- package/dest/types/fields.d.ts.map +1 -0
- package/dest/types/fields.js +86 -0
- package/dest/types/fixed_size_buffer.d.ts +26 -0
- package/dest/types/fixed_size_buffer.d.ts.map +1 -0
- package/dest/types/fixed_size_buffer.js +54 -0
- package/dest/types/index.d.ts +6 -0
- package/dest/types/index.d.ts.map +1 -0
- package/dest/types/index.js +6 -0
- package/dest/types/point.d.ts +17 -0
- package/dest/types/point.d.ts.map +1 -0
- package/dest/types/point.js +32 -0
- package/dest/types/ptr.d.ts +13 -0
- package/dest/types/ptr.d.ts.map +1 -0
- package/dest/types/ptr.js +20 -0
- package/dest/types/raw_buffer.d.ts +3 -0
- package/dest/types/raw_buffer.d.ts.map +1 -0
- package/dest/types/raw_buffer.js +5 -0
- package/package.json +79 -0
- package/src/async_map/index.ts +15 -0
- package/src/barretenberg_api/blake2s.test.ts +39 -0
- package/src/barretenberg_api/common.test.ts +21 -0
- package/src/barretenberg_api/index.ts +461 -0
- package/src/barretenberg_api/pedersen.test.ts +84 -0
- package/src/barretenberg_api/schnorr.test.ts +169 -0
- package/src/barretenberg_binder/heap_allocator.ts +62 -0
- package/src/barretenberg_binder/heap_allocator_sync.ts +61 -0
- package/src/barretenberg_binder/index.ts +76 -0
- package/src/barretenberg_wasm/barretenberg_wasm.test.ts +52 -0
- package/src/barretenberg_wasm/barretenberg_wasm.ts +222 -0
- package/src/barretenberg_wasm/browser/index.ts +32 -0
- package/src/barretenberg_wasm/browser/worker.ts +13 -0
- package/src/barretenberg_wasm/index.ts +1 -0
- package/src/barretenberg_wasm/node/index.ts +46 -0
- package/src/barretenberg_wasm/node/node_endpoint.ts +28 -0
- package/src/barretenberg_wasm/node/worker.ts +10 -0
- package/src/bigint-array/index.ts +21 -0
- package/src/bindgen/function_declaration.ts +11 -0
- package/src/bindgen/index.ts +17 -0
- package/src/bindgen/mappings.ts +66 -0
- package/src/bindgen/rust.ts +52 -0
- package/src/bindgen/to_camel_case.ts +10 -0
- package/src/bindgen/typescript.ts +91 -0
- package/src/crs/browser/cached_net_crs.ts +60 -0
- package/src/crs/browser/index.ts +1 -0
- package/src/crs/index.ts +1 -0
- package/src/crs/net_crs.ts +69 -0
- package/src/crs/node/file_crs.ts +60 -0
- package/src/crs/node/index.ts +48 -0
- package/src/examples/simple.rawtest.ts +32 -0
- package/src/examples/simple.test.ts +27 -0
- package/src/factory/index.ts +36 -0
- package/src/index.html +9 -0
- package/src/index.ts +3 -0
- package/src/main-dev.ts +2 -0
- package/src/main.ts +329 -0
- package/src/random/browser/index.ts +32 -0
- package/src/random/index.ts +1 -0
- package/src/random/node/index.ts +5 -0
- package/src/serialize/buffer_reader.ts +82 -0
- package/src/serialize/index.ts +3 -0
- package/src/serialize/output_type.ts +53 -0
- package/src/serialize/serialize.ts +157 -0
- package/src/types/fields.ts +98 -0
- package/src/types/fixed_size_buffer.ts +59 -0
- package/src/types/index.ts +5 -0
- package/src/types/point.ts +35 -0
- package/src/types/ptr.ts +20 -0
- package/src/types/raw_buffer.ts +3 -0
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import { RawBuffer } from '../types/raw_buffer.js';
|
|
2
|
+
|
|
3
|
+
// For serializing bool.
|
|
4
|
+
export function boolToBuffer(b: boolean) {
|
|
5
|
+
const buf = new Uint8Array(1);
|
|
6
|
+
buf[0] = b ? 1 : 0;
|
|
7
|
+
return buf;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
// For serializing numbers to 32 bit little-endian form.
|
|
11
|
+
export function numToUInt32LE(n: number, bufferSize = 4) {
|
|
12
|
+
const buf = new Uint8Array(bufferSize);
|
|
13
|
+
new DataView(buf.buffer).setUint32(buf.byteLength - 4, n, true);
|
|
14
|
+
return buf;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
// For serializing numbers to 32 bit big-endian form.
|
|
18
|
+
export function numToUInt32BE(n: number, bufferSize = 4) {
|
|
19
|
+
const buf = new Uint8Array(bufferSize);
|
|
20
|
+
new DataView(buf.buffer).setUint32(buf.byteLength - 4, n, false);
|
|
21
|
+
return buf;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// For serializing signed numbers to 32 bit big-endian form.
|
|
25
|
+
export function numToInt32BE(n: number, bufferSize = 4) {
|
|
26
|
+
const buf = new Uint8Array(bufferSize);
|
|
27
|
+
new DataView(buf.buffer).setInt32(buf.byteLength - 4, n, false);
|
|
28
|
+
return buf;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// For serializing numbers to 8 bit form.
|
|
32
|
+
export function numToUInt8(n: number) {
|
|
33
|
+
const buf = new Uint8Array(1);
|
|
34
|
+
buf[0] = n;
|
|
35
|
+
return buf;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export function concatenateUint8Arrays(arrayOfUint8Arrays: Uint8Array[]) {
|
|
39
|
+
const totalLength = arrayOfUint8Arrays.reduce((prev, curr) => prev + curr.length, 0);
|
|
40
|
+
const result = new Uint8Array(totalLength);
|
|
41
|
+
let length = 0;
|
|
42
|
+
for (const array of arrayOfUint8Arrays) {
|
|
43
|
+
result.set(array, length);
|
|
44
|
+
length += array.length;
|
|
45
|
+
}
|
|
46
|
+
return result;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export function uint8ArrayToHexString(uint8Array: Uint8Array) {
|
|
50
|
+
return uint8Array.reduce((accumulator, byte) => accumulator + byte.toString(16).padStart(2, '0'), '');
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// For serializing a buffer as a vector.
|
|
54
|
+
export function serializeBufferToVector(buf: Uint8Array) {
|
|
55
|
+
return concatenateUint8Arrays([numToInt32BE(buf.length), buf]);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export function serializeBigInt(n: bigint, width = 32) {
|
|
59
|
+
const buf = new Uint8Array(width);
|
|
60
|
+
for (let i = 0; i < width; i++) {
|
|
61
|
+
buf[width - i - 1] = Number((n >> BigInt(i * 8)) & 0xffn);
|
|
62
|
+
}
|
|
63
|
+
return buf;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export function deserializeBigInt(buf: Uint8Array, offset = 0, width = 32) {
|
|
67
|
+
let result = 0n;
|
|
68
|
+
for (let i = 0; i < width; i++) {
|
|
69
|
+
result = (result << BigInt(8)) | BigInt(buf[offset + i]);
|
|
70
|
+
}
|
|
71
|
+
return { elem: result, adv: width };
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export function serializeDate(date: Date) {
|
|
75
|
+
return serializeBigInt(BigInt(date.getTime()), 8);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export function deserializeBufferFromVector(vector: Uint8Array, offset = 0) {
|
|
79
|
+
const length = new DataView(vector.buffer, vector.byteOffset + offset, 4).getUint32(0, false);
|
|
80
|
+
const adv = 4 + length;
|
|
81
|
+
const elem = vector.slice(offset + 4, offset + adv);
|
|
82
|
+
return { elem, adv };
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export function deserializeBool(buf: Uint8Array, offset = 0) {
|
|
86
|
+
const adv = 1;
|
|
87
|
+
const elem = buf[offset] !== 0;
|
|
88
|
+
return { elem, adv };
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
export function deserializeUInt32(buf: Uint8Array, offset = 0) {
|
|
92
|
+
const adv = 4;
|
|
93
|
+
const elem = new DataView(buf.buffer, buf.byteOffset + offset, adv).getUint32(0, false);
|
|
94
|
+
return { elem, adv };
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
export function deserializeInt32(buf: Uint8Array, offset = 0) {
|
|
98
|
+
const adv = 4;
|
|
99
|
+
const elem = new DataView(buf.buffer, buf.byteOffset + offset, adv).getInt32(0, false);
|
|
100
|
+
return { elem, adv };
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
export function deserializeField(buf: Uint8Array, offset = 0) {
|
|
104
|
+
const adv = 32;
|
|
105
|
+
const elem = buf.slice(offset, offset + adv);
|
|
106
|
+
return { elem, adv };
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// For serializing an array of fixed length elements.
|
|
110
|
+
export function serializeBufferArrayToVector(arr: Uint8Array[]) {
|
|
111
|
+
return concatenateUint8Arrays([numToUInt32BE(arr.length), ...arr.flat()]);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
export function deserializeArrayFromVector<T>(
|
|
115
|
+
deserialize: (buf: Uint8Array, offset: number) => { elem: T; adv: number },
|
|
116
|
+
vector: Uint8Array,
|
|
117
|
+
offset = 0,
|
|
118
|
+
) {
|
|
119
|
+
let pos = offset;
|
|
120
|
+
const size = new DataView(vector.buffer, vector.byteOffset + pos, 4).getUint32(0, false);
|
|
121
|
+
pos += 4;
|
|
122
|
+
const arr = new Array<T>(size);
|
|
123
|
+
for (let i = 0; i < size; ++i) {
|
|
124
|
+
const { elem, adv } = deserialize(vector, pos);
|
|
125
|
+
pos += adv;
|
|
126
|
+
arr[i] = elem;
|
|
127
|
+
}
|
|
128
|
+
return { elem: arr, adv: pos - offset };
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/** A type that can be written to a buffer. */
|
|
132
|
+
export type Bufferable = boolean | Uint8Array | number | string | { toBuffer: () => Uint8Array } | Bufferable[];
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Serializes a list of objects contiguously for calling into wasm.
|
|
136
|
+
* @param objs - Objects to serialize.
|
|
137
|
+
* @returns A buffer list with the concatenation of all fields.
|
|
138
|
+
*/
|
|
139
|
+
export function serializeBufferable(obj: Bufferable): Uint8Array {
|
|
140
|
+
if (Array.isArray(obj)) {
|
|
141
|
+
return serializeBufferArrayToVector(obj.map(serializeBufferable));
|
|
142
|
+
} else if (obj instanceof RawBuffer) {
|
|
143
|
+
return obj;
|
|
144
|
+
} else if (obj instanceof Uint8Array) {
|
|
145
|
+
return serializeBufferToVector(obj);
|
|
146
|
+
} else if (typeof obj === 'boolean') {
|
|
147
|
+
return boolToBuffer(obj);
|
|
148
|
+
} else if (typeof obj === 'number') {
|
|
149
|
+
return numToUInt32BE(obj);
|
|
150
|
+
} else if (typeof obj === 'bigint') {
|
|
151
|
+
return serializeBigInt(obj);
|
|
152
|
+
} else if (typeof obj === 'string') {
|
|
153
|
+
return serializeBufferToVector(new TextEncoder().encode(obj));
|
|
154
|
+
} else {
|
|
155
|
+
return obj.toBuffer();
|
|
156
|
+
}
|
|
157
|
+
}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { randomBytes } from '../random/index.js';
|
|
2
|
+
import { toBigIntBE, toBufferBE } from '../bigint-array/index.js';
|
|
3
|
+
import { BufferReader, uint8ArrayToHexString } from '../serialize/index.js';
|
|
4
|
+
|
|
5
|
+
export class Fr {
|
|
6
|
+
static ZERO = new Fr(0n);
|
|
7
|
+
static MODULUS = 0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001n;
|
|
8
|
+
static MAX_VALUE = this.MODULUS - 1n;
|
|
9
|
+
static SIZE_IN_BYTES = 32;
|
|
10
|
+
|
|
11
|
+
constructor(public readonly value: bigint) {
|
|
12
|
+
if (value > Fr.MAX_VALUE) {
|
|
13
|
+
throw new Error(`Fr out of range ${value}.`);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
static random() {
|
|
18
|
+
const r = toBigIntBE(randomBytes(64)) % Fr.MODULUS;
|
|
19
|
+
return new this(r);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
static fromBuffer(buffer: Uint8Array | BufferReader) {
|
|
23
|
+
const reader = BufferReader.asReader(buffer);
|
|
24
|
+
return new this(toBigIntBE(reader.readBytes(this.SIZE_IN_BYTES)));
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
static fromBufferReduce(buffer: Uint8Array | BufferReader) {
|
|
28
|
+
const reader = BufferReader.asReader(buffer);
|
|
29
|
+
return new this(toBigIntBE(reader.readBytes(this.SIZE_IN_BYTES)) % Fr.MODULUS);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
static fromString(str: string) {
|
|
33
|
+
return this.fromBuffer(Buffer.from(str.replace(/^0x/i, ''), 'hex'));
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
toBuffer() {
|
|
37
|
+
return toBufferBE(this.value, Fr.SIZE_IN_BYTES);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
toString() {
|
|
41
|
+
return '0x' + uint8ArrayToHexString(this.toBuffer());
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
equals(rhs: Fr) {
|
|
45
|
+
return this.value === rhs.value;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
isZero() {
|
|
49
|
+
return this.value === 0n;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export class Fq {
|
|
54
|
+
static MODULUS = 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47n;
|
|
55
|
+
static MAX_VALUE = this.MODULUS - 1n;
|
|
56
|
+
static SIZE_IN_BYTES = 32;
|
|
57
|
+
|
|
58
|
+
constructor(public readonly value: bigint) {
|
|
59
|
+
if (value > Fq.MAX_VALUE) {
|
|
60
|
+
throw new Error(`Fq out of range ${value}.`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
static random() {
|
|
65
|
+
const r = toBigIntBE(randomBytes(64)) % Fq.MODULUS;
|
|
66
|
+
return new this(r);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
static fromBuffer(buffer: Uint8Array | BufferReader) {
|
|
70
|
+
const reader = BufferReader.asReader(buffer);
|
|
71
|
+
return new this(toBigIntBE(reader.readBytes(this.SIZE_IN_BYTES)));
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
static fromBufferReduce(buffer: Uint8Array | BufferReader) {
|
|
75
|
+
const reader = BufferReader.asReader(buffer);
|
|
76
|
+
return new this(toBigIntBE(reader.readBytes(this.SIZE_IN_BYTES)) % Fr.MODULUS);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
static fromString(str: string) {
|
|
80
|
+
return this.fromBuffer(Buffer.from(str.replace(/^0x/i, ''), 'hex'));
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
toBuffer() {
|
|
84
|
+
return toBufferBE(this.value, Fq.SIZE_IN_BYTES);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
toString() {
|
|
88
|
+
return '0x' + this.value.toString(16);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
equals(rhs: Fq) {
|
|
92
|
+
return this.value === rhs.value;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
isZero() {
|
|
96
|
+
return this.value === 0n;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { randomBytes } from '../random/index.js';
|
|
2
|
+
import { BufferReader } from '../serialize/index.js';
|
|
3
|
+
|
|
4
|
+
export class Buffer32 {
|
|
5
|
+
static SIZE_IN_BYTES = 32;
|
|
6
|
+
|
|
7
|
+
constructor(public readonly buffer: Uint8Array) {}
|
|
8
|
+
|
|
9
|
+
static fromBuffer(buffer: Uint8Array | BufferReader) {
|
|
10
|
+
const reader = BufferReader.asReader(buffer);
|
|
11
|
+
return new Buffer32(reader.readBytes(this.SIZE_IN_BYTES));
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
static random() {
|
|
15
|
+
return new Buffer32(randomBytes(this.SIZE_IN_BYTES));
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
toBuffer() {
|
|
19
|
+
return this.buffer;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export class Buffer64 {
|
|
24
|
+
static SIZE_IN_BYTES = 64;
|
|
25
|
+
|
|
26
|
+
constructor(public readonly buffer: Uint8Array) {}
|
|
27
|
+
|
|
28
|
+
static fromBuffer(buffer: Uint8Array | BufferReader) {
|
|
29
|
+
const reader = BufferReader.asReader(buffer);
|
|
30
|
+
return new Buffer64(reader.readBytes(this.SIZE_IN_BYTES));
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
static random() {
|
|
34
|
+
return new Buffer64(randomBytes(this.SIZE_IN_BYTES));
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
toBuffer() {
|
|
38
|
+
return this.buffer;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export class Buffer128 {
|
|
43
|
+
static SIZE_IN_BYTES = 128;
|
|
44
|
+
|
|
45
|
+
constructor(public readonly buffer: Uint8Array) {}
|
|
46
|
+
|
|
47
|
+
static fromBuffer(buffer: Uint8Array | BufferReader) {
|
|
48
|
+
const reader = BufferReader.asReader(buffer);
|
|
49
|
+
return new Buffer128(reader.readBytes(this.SIZE_IN_BYTES));
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
static random() {
|
|
53
|
+
return new Buffer128(randomBytes(this.SIZE_IN_BYTES));
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
toBuffer() {
|
|
57
|
+
return this.buffer;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { Fr } from './index.js';
|
|
2
|
+
import { BufferReader } from '../serialize/buffer_reader.js';
|
|
3
|
+
|
|
4
|
+
export class Point {
|
|
5
|
+
static SIZE_IN_BYTES = 64;
|
|
6
|
+
static EMPTY = new Point(Fr.ZERO, Fr.ZERO);
|
|
7
|
+
|
|
8
|
+
constructor(public readonly x: Fr, public readonly y: Fr) {}
|
|
9
|
+
|
|
10
|
+
static random() {
|
|
11
|
+
// TODO: This is not a point on the curve!
|
|
12
|
+
return new Point(Fr.random(), Fr.random());
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
static fromBuffer(buffer: Uint8Array | BufferReader) {
|
|
16
|
+
const reader = BufferReader.asReader(buffer);
|
|
17
|
+
return new this(Fr.fromBuffer(reader), Fr.fromBuffer(reader));
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
static fromString(address: string) {
|
|
21
|
+
return Point.fromBuffer(Buffer.from(address.replace(/^0x/i, ''), 'hex'));
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
toBuffer() {
|
|
25
|
+
return Buffer.concat([this.x.toBuffer(), this.y.toBuffer()]);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
toString() {
|
|
29
|
+
return '0x' + this.toBuffer().toString('hex');
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
equals(rhs: Point) {
|
|
33
|
+
return this.x.equals(rhs.x) && this.y.equals(rhs.y);
|
|
34
|
+
}
|
|
35
|
+
}
|
package/src/types/ptr.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { BufferReader } from '../serialize/index.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Holds an opaque pointer into WASM memory.
|
|
5
|
+
* Currently only 4 bytes, but could grow to 8 bytes with wasm64.
|
|
6
|
+
*/
|
|
7
|
+
export class Ptr {
|
|
8
|
+
static SIZE_IN_BYTES = 4;
|
|
9
|
+
|
|
10
|
+
constructor(public readonly value: Uint8Array) {}
|
|
11
|
+
|
|
12
|
+
static fromBuffer(buffer: Uint8Array | BufferReader) {
|
|
13
|
+
const reader = BufferReader.asReader(buffer);
|
|
14
|
+
return new this(reader.readBytes(this.SIZE_IN_BYTES));
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
toBuffer() {
|
|
18
|
+
return this.value;
|
|
19
|
+
}
|
|
20
|
+
}
|