@aztec/bb.js 0.7.9 → 0.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -10
- package/dest/browser/barretenberg_wasm/barretenberg_wasm_main/factory/node/index.d.ts.map +1 -1
- package/dest/browser/barretenberg_wasm/barretenberg_wasm_thread/factory/node/index.d.ts.map +1 -1
- package/dest/browser/barretenberg_wasm/fetch_code/node/index.d.ts.map +1 -1
- package/dest/browser/crs/node/ignition_files_crs.d.ts.map +1 -1
- package/dest/browser/index.js +1 -1
- package/dest/node/barretenberg_wasm/barretenberg-threads.wasm +0 -0
- package/dest/node/barretenberg_wasm/barretenberg_wasm_main/factory/node/index.d.ts.map +1 -1
- package/dest/node/barretenberg_wasm/barretenberg_wasm_main/factory/node/index.js +12 -2
- package/dest/node/barretenberg_wasm/barretenberg_wasm_thread/factory/node/index.d.ts.map +1 -1
- package/dest/node/barretenberg_wasm/barretenberg_wasm_thread/factory/node/index.js +12 -2
- package/dest/node/barretenberg_wasm/fetch_code/browser/index.js +3 -3
- package/dest/node/barretenberg_wasm/fetch_code/node/index.d.ts.map +1 -1
- package/dest/node/barretenberg_wasm/fetch_code/node/index.js +12 -2
- package/dest/node/bindgen/index.js +3 -3
- package/dest/node/bindgen/typescript.js +1 -1
- package/dest/node/crs/node/ignition_files_crs.d.ts.map +1 -1
- package/dest/node/crs/node/ignition_files_crs.js +12 -2
- package/dest/node/info.d.ts +9 -0
- package/dest/node/info.d.ts.map +1 -0
- package/dest/node/info.js +24 -0
- package/dest/node/main.d.ts.map +1 -1
- package/dest/node/main.js +9 -3
- package/dest/node-cjs/async_map/index.d.ts +10 -0
- package/dest/node-cjs/async_map/index.d.ts.map +1 -0
- package/dest/node-cjs/async_map/index.js +20 -0
- package/dest/node-cjs/barretenberg/index.d.ts +20 -0
- package/dest/node-cjs/barretenberg/index.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg/index.js +43 -0
- package/dest/node-cjs/barretenberg_api/blake2s.test.d.ts +2 -0
- package/dest/node-cjs/barretenberg_api/blake2s.test.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg_api/blake2s.test.js +32 -0
- package/dest/node-cjs/barretenberg_api/common.test.d.ts +2 -0
- package/dest/node-cjs/barretenberg_api/common.test.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg_api/common.test.js +20 -0
- package/dest/node-cjs/barretenberg_api/index.d.ts +53 -0
- package/dest/node-cjs/barretenberg_api/index.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg_api/index.js +195 -0
- package/dest/node-cjs/barretenberg_api/pedersen.test.d.ts +2 -0
- package/dest/node-cjs/barretenberg_api/pedersen.test.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg_api/pedersen.test.js +71 -0
- package/dest/node-cjs/barretenberg_api/schnorr.test.d.ts +2 -0
- package/dest/node-cjs/barretenberg_api/schnorr.test.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg_api/schnorr.test.js +116 -0
- package/dest/node-cjs/barretenberg_binder/heap_allocator.d.ts +22 -0
- package/dest/node-cjs/barretenberg_binder/heap_allocator.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg_binder/heap_allocator.js +63 -0
- package/dest/node-cjs/barretenberg_binder/index.d.ts +26 -0
- package/dest/node-cjs/barretenberg_binder/index.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg_binder/index.js +57 -0
- package/dest/{node → node-cjs/barretenberg_wasm}/barretenberg-threads.wasm +0 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_base/index.d.ts +40 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_base/index.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_base/index.js +128 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/factory/browser/index.d.ts +2 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/factory/browser/index.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/factory/browser/index.js +15 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/factory/browser/main.worker.d.ts +3 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/factory/browser/main.worker.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/factory/browser/main.worker.js +15 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/factory/node/index.d.ts +4 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/factory/node/index.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/factory/node/index.js +22 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/factory/node/main.worker.d.ts +2 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/factory/node/main.worker.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/factory/node/main.worker.js +11 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/index.d.ts +37 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/index.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_main/index.js +87 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/index.d.ts +2 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/index.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/index.js +15 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/thread.worker.d.ts +3 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/thread.worker.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_thread/factory/browser/thread.worker.js +15 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_thread/factory/node/index.d.ts +4 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_thread/factory/node/index.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_thread/factory/node/index.js +22 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_thread/factory/node/thread.worker.d.ts +2 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_thread/factory/node/thread.worker.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_thread/factory/node/thread.worker.js +11 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_thread/index.d.ts +28 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_thread/index.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg_wasm/barretenberg_wasm_thread/index.js +44 -0
- package/dest/node-cjs/barretenberg_wasm/fetch_code/browser/index.d.ts +2 -0
- package/dest/node-cjs/barretenberg_wasm/fetch_code/browser/index.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg_wasm/fetch_code/browser/index.js +14 -0
- package/dest/node-cjs/barretenberg_wasm/fetch_code/index.d.ts +2 -0
- package/dest/node-cjs/barretenberg_wasm/fetch_code/index.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg_wasm/fetch_code/index.js +5 -0
- package/dest/node-cjs/barretenberg_wasm/fetch_code/node/index.d.ts +3 -0
- package/dest/node-cjs/barretenberg_wasm/fetch_code/node/index.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg_wasm/fetch_code/node/index.js +23 -0
- package/dest/node-cjs/barretenberg_wasm/helpers/browser/index.d.ts +6 -0
- package/dest/node-cjs/barretenberg_wasm/helpers/browser/index.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg_wasm/helpers/browser/index.js +26 -0
- package/dest/node-cjs/barretenberg_wasm/helpers/index.d.ts +2 -0
- package/dest/node-cjs/barretenberg_wasm/helpers/index.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg_wasm/helpers/index.js +5 -0
- package/dest/node-cjs/barretenberg_wasm/helpers/node/index.d.ts +19 -0
- package/dest/node-cjs/barretenberg_wasm/helpers/node/index.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg_wasm/helpers/node/index.js +45 -0
- package/dest/node-cjs/barretenberg_wasm/helpers/node/node_endpoint.d.ts +8 -0
- package/dest/node-cjs/barretenberg_wasm/helpers/node/node_endpoint.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg_wasm/helpers/node/node_endpoint.js +32 -0
- package/dest/node-cjs/barretenberg_wasm/index.d.ts +14 -0
- package/dest/node-cjs/barretenberg_wasm/index.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg_wasm/index.js +24 -0
- package/dest/node-cjs/barretenberg_wasm/index.test.d.ts +2 -0
- package/dest/node-cjs/barretenberg_wasm/index.test.d.ts.map +1 -0
- package/dest/node-cjs/barretenberg_wasm/index.test.js +40 -0
- package/dest/node-cjs/bigint-array/index.d.ts +3 -0
- package/dest/node-cjs/bigint-array/index.d.ts.map +1 -0
- package/dest/node-cjs/bigint-array/index.js +26 -0
- package/dest/node-cjs/bindgen/function_declaration.d.ts +11 -0
- package/dest/node-cjs/bindgen/function_declaration.d.ts.map +1 -0
- package/dest/node-cjs/bindgen/function_declaration.js +3 -0
- package/dest/node-cjs/bindgen/index.d.ts +2 -0
- package/dest/node-cjs/bindgen/index.d.ts.map +1 -0
- package/dest/node-cjs/bindgen/index.js +17 -0
- package/dest/node-cjs/bindgen/mappings.d.ts +4 -0
- package/dest/node-cjs/bindgen/mappings.d.ts.map +1 -0
- package/dest/node-cjs/bindgen/mappings.js +68 -0
- package/dest/node-cjs/bindgen/rust.d.ts +2 -0
- package/dest/node-cjs/bindgen/rust.d.ts.map +1 -0
- package/dest/node-cjs/bindgen/rust.js +48 -0
- package/dest/node-cjs/bindgen/to_camel_case.d.ts +2 -0
- package/dest/node-cjs/bindgen/to_camel_case.d.ts.map +1 -0
- package/dest/node-cjs/bindgen/to_camel_case.js +15 -0
- package/dest/node-cjs/bindgen/typescript.d.ts +2 -0
- package/dest/node-cjs/bindgen/typescript.d.ts.map +1 -0
- package/dest/node-cjs/bindgen/typescript.js +52 -0
- package/dest/node-cjs/crs/browser/cached_net_crs.d.ts +25 -0
- package/dest/node-cjs/crs/browser/cached_net_crs.d.ts.map +1 -0
- package/dest/node-cjs/crs/browser/cached_net_crs.js +58 -0
- package/dest/node-cjs/crs/browser/index.d.ts +2 -0
- package/dest/node-cjs/crs/browser/index.d.ts.map +1 -0
- package/dest/node-cjs/crs/browser/index.js +6 -0
- package/dest/node-cjs/crs/index.d.ts +2 -0
- package/dest/node-cjs/crs/index.d.ts.map +1 -0
- package/dest/node-cjs/crs/index.js +6 -0
- package/dest/node-cjs/crs/net_crs.d.ts +36 -0
- package/dest/node-cjs/crs/net_crs.d.ts.map +1 -0
- package/dest/node-cjs/crs/net_crs.js +63 -0
- package/dest/node-cjs/crs/node/ignition_files_crs.d.ts +37 -0
- package/dest/node-cjs/crs/node/ignition_files_crs.d.ts.map +1 -0
- package/dest/node-cjs/crs/node/ignition_files_crs.js +65 -0
- package/dest/node-cjs/crs/node/index.d.ts +21 -0
- package/dest/node-cjs/crs/node/index.d.ts.map +1 -0
- package/dest/node-cjs/crs/node/index.js +59 -0
- package/dest/node-cjs/examples/simple.rawtest.d.ts +2 -0
- package/dest/node-cjs/examples/simple.rawtest.d.ts.map +1 -0
- package/dest/node-cjs/examples/simple.rawtest.js +32 -0
- package/dest/node-cjs/examples/simple.test.d.ts +2 -0
- package/dest/node-cjs/examples/simple.test.d.ts.map +1 -0
- package/dest/node-cjs/examples/simple.test.js +24 -0
- package/dest/node-cjs/index.d.ts +4 -0
- package/dest/node-cjs/index.d.ts.map +1 -0
- package/dest/node-cjs/index.js +10 -0
- package/dest/node-cjs/info.d.ts +9 -0
- package/dest/node-cjs/info.d.ts.map +1 -0
- package/dest/node-cjs/info.js +27 -0
- package/dest/node-cjs/main.d.ts +11 -0
- package/dest/node-cjs/main.d.ts.map +1 -0
- package/dest/node-cjs/main.js +332 -0
- package/dest/node-cjs/package.json +3 -0
- package/dest/node-cjs/random/browser/index.d.ts +2 -0
- package/dest/node-cjs/random/browser/index.d.ts.map +1 -0
- package/dest/node-cjs/random/browser/index.js +35 -0
- package/dest/node-cjs/random/index.d.ts +2 -0
- package/dest/node-cjs/random/index.d.ts.map +1 -0
- package/dest/node-cjs/random/index.js +5 -0
- package/dest/node-cjs/random/node/index.d.ts +2 -0
- package/dest/node-cjs/random/node/index.d.ts.map +1 -0
- package/dest/node-cjs/random/node/index.js +9 -0
- package/dest/node-cjs/serialize/buffer_reader.d.ts +28 -0
- package/dest/node-cjs/serialize/buffer_reader.d.ts.map +1 -0
- package/dest/node-cjs/serialize/buffer_reader.js +70 -0
- package/dest/node-cjs/serialize/index.d.ts +4 -0
- package/dest/node-cjs/serialize/index.d.ts.map +1 -0
- package/dest/node-cjs/serialize/index.js +7 -0
- package/dest/node-cjs/serialize/output_type.d.ts +11 -0
- package/dest/node-cjs/serialize/output_type.d.ts.map +1 -0
- package/dest/node-cjs/serialize/output_type.js +52 -0
- package/dest/node-cjs/serialize/serialize.d.ts +53 -0
- package/dest/node-cjs/serialize/serialize.d.ts.map +1 -0
- package/dest/node-cjs/serialize/serialize.js +161 -0
- package/dest/node-cjs/types/fields.d.ts +33 -0
- package/dest/node-cjs/types/fields.d.ts.map +1 -0
- package/dest/node-cjs/types/fields.js +89 -0
- package/dest/node-cjs/types/fixed_size_buffer.d.ts +26 -0
- package/dest/node-cjs/types/fixed_size_buffer.d.ts.map +1 -0
- package/dest/node-cjs/types/fixed_size_buffer.js +57 -0
- package/dest/node-cjs/types/index.d.ts +6 -0
- package/dest/node-cjs/types/index.d.ts.map +1 -0
- package/dest/node-cjs/types/index.js +9 -0
- package/dest/node-cjs/types/point.d.ts +17 -0
- package/dest/node-cjs/types/point.d.ts.map +1 -0
- package/dest/node-cjs/types/point.js +35 -0
- package/dest/node-cjs/types/ptr.d.ts +13 -0
- package/dest/node-cjs/types/ptr.d.ts.map +1 -0
- package/dest/node-cjs/types/ptr.js +23 -0
- package/dest/node-cjs/types/raw_buffer.d.ts +3 -0
- package/dest/node-cjs/types/raw_buffer.d.ts.map +1 -0
- package/dest/node-cjs/types/raw_buffer.js +9 -0
- package/package.json +9 -8
- package/src/barretenberg_wasm/barretenberg_wasm_main/factory/node/index.ts +11 -1
- package/src/barretenberg_wasm/barretenberg_wasm_thread/factory/node/index.ts +11 -1
- package/src/barretenberg_wasm/fetch_code/browser/index.ts +2 -2
- package/src/barretenberg_wasm/fetch_code/node/index.ts +11 -1
- package/src/bindgen/index.ts +2 -2
- package/src/bindgen/typescript.ts +1 -1
- package/src/crs/node/ignition_files_crs.ts +11 -1
- package/src/info.ts +23 -0
- package/src/main.ts +10 -2
- package/cjs-entry/index.cjs +0 -10
- package/cjs-entry/index.d.ts +0 -1
- package/dest/node/info.json +0 -22
- package/src/info.json +0 -22
|
@@ -0,0 +1,332 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.vkAsFields = exports.proofAsFields = exports.writeVk = exports.contract = exports.verify = exports.acvmInfo = exports.gateCount = exports.prove = exports.proveAndVerify = void 0;
|
|
5
|
+
const tslib_1 = require("tslib");
|
|
6
|
+
const index_js_1 = require("./index.js");
|
|
7
|
+
const debug_1 = tslib_1.__importDefault(require("debug"));
|
|
8
|
+
const fs_1 = require("fs");
|
|
9
|
+
const zlib_1 = require("zlib");
|
|
10
|
+
const commander_1 = require("commander");
|
|
11
|
+
const info_js_1 = require("./info.js");
|
|
12
|
+
debug_1.default.log = console.error.bind(console);
|
|
13
|
+
const debug = (0, debug_1.default)('bb.js');
|
|
14
|
+
// Maximum we support in node and the browser is 2^19.
|
|
15
|
+
// This is because both node and browser use barretenberg.wasm.
|
|
16
|
+
//
|
|
17
|
+
// This is not a restriction in the bb binary and one should be
|
|
18
|
+
// aware of this discrepancy, when creating proofs in bb versus
|
|
19
|
+
// creating the same proofs in the node CLI.
|
|
20
|
+
const MAX_CIRCUIT_SIZE = 2 ** 19;
|
|
21
|
+
function getBytecode(bytecodePath) {
|
|
22
|
+
const encodedCircuit = (0, fs_1.readFileSync)(bytecodePath);
|
|
23
|
+
const decompressed = (0, zlib_1.gunzipSync)(encodedCircuit);
|
|
24
|
+
return decompressed;
|
|
25
|
+
}
|
|
26
|
+
async function getGates(bytecodePath, api) {
|
|
27
|
+
const { total } = await computeCircuitSize(bytecodePath, api);
|
|
28
|
+
return total;
|
|
29
|
+
}
|
|
30
|
+
function getWitness(witnessPath) {
|
|
31
|
+
const data = (0, fs_1.readFileSync)(witnessPath);
|
|
32
|
+
const decompressed = (0, zlib_1.gunzipSync)(data);
|
|
33
|
+
return decompressed;
|
|
34
|
+
}
|
|
35
|
+
async function computeCircuitSize(bytecodePath, api) {
|
|
36
|
+
debug(`computing circuit size...`);
|
|
37
|
+
const bytecode = getBytecode(bytecodePath);
|
|
38
|
+
const [exact, total, subgroup] = await api.acirGetCircuitSizes(bytecode);
|
|
39
|
+
return { exact, total, subgroup };
|
|
40
|
+
}
|
|
41
|
+
async function init(bytecodePath, crsPath) {
|
|
42
|
+
const api = await index_js_1.Barretenberg.new();
|
|
43
|
+
const circuitSize = await getGates(bytecodePath, api);
|
|
44
|
+
const subgroupSize = Math.pow(2, Math.ceil(Math.log2(circuitSize)));
|
|
45
|
+
if (subgroupSize > MAX_CIRCUIT_SIZE) {
|
|
46
|
+
throw new Error(`Circuit size of ${subgroupSize} exceeds max supported of ${MAX_CIRCUIT_SIZE}`);
|
|
47
|
+
}
|
|
48
|
+
debug(`circuit size: ${circuitSize}`);
|
|
49
|
+
debug(`subgroup size: ${subgroupSize}`);
|
|
50
|
+
debug('loading crs...');
|
|
51
|
+
// Plus 1 needed! (Move +1 into Crs?)
|
|
52
|
+
const crs = await index_js_1.Crs.new(subgroupSize + 1, crsPath);
|
|
53
|
+
// Important to init slab allocator as first thing, to ensure maximum memory efficiency.
|
|
54
|
+
await api.commonInitSlabAllocator(subgroupSize);
|
|
55
|
+
// Load CRS into wasm global CRS state.
|
|
56
|
+
// TODO: Make RawBuffer be default behavior, and have a specific Vector type for when wanting length prefixed.
|
|
57
|
+
await api.srsInitSrs(new index_js_1.RawBuffer(crs.getG1Data()), crs.numPoints, new index_js_1.RawBuffer(crs.getG2Data()));
|
|
58
|
+
const acirComposer = await api.acirNewAcirComposer(subgroupSize);
|
|
59
|
+
return { api, acirComposer, circuitSize: subgroupSize };
|
|
60
|
+
}
|
|
61
|
+
async function initLite() {
|
|
62
|
+
const api = await index_js_1.Barretenberg.new(1);
|
|
63
|
+
// Plus 1 needed! (Move +1 into Crs?)
|
|
64
|
+
const crs = await index_js_1.Crs.new(1);
|
|
65
|
+
// Load CRS into wasm global CRS state.
|
|
66
|
+
await api.srsInitSrs(new index_js_1.RawBuffer(crs.getG1Data()), crs.numPoints, new index_js_1.RawBuffer(crs.getG2Data()));
|
|
67
|
+
const acirComposer = await api.acirNewAcirComposer(0);
|
|
68
|
+
return { api, acirComposer };
|
|
69
|
+
}
|
|
70
|
+
async function proveAndVerify(bytecodePath, witnessPath, crsPath, isRecursive) {
|
|
71
|
+
const { api, acirComposer } = await init(bytecodePath, crsPath);
|
|
72
|
+
try {
|
|
73
|
+
debug(`creating proof...`);
|
|
74
|
+
const bytecode = getBytecode(bytecodePath);
|
|
75
|
+
const witness = getWitness(witnessPath);
|
|
76
|
+
const proof = await api.acirCreateProof(acirComposer, bytecode, witness, isRecursive);
|
|
77
|
+
debug(`verifying...`);
|
|
78
|
+
const verified = await api.acirVerifyProof(acirComposer, proof, isRecursive);
|
|
79
|
+
debug(`verified: ${verified}`);
|
|
80
|
+
return verified;
|
|
81
|
+
}
|
|
82
|
+
finally {
|
|
83
|
+
await api.destroy();
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
exports.proveAndVerify = proveAndVerify;
|
|
87
|
+
async function prove(bytecodePath, witnessPath, crsPath, isRecursive, outputPath) {
|
|
88
|
+
const { api, acirComposer } = await init(bytecodePath, crsPath);
|
|
89
|
+
try {
|
|
90
|
+
debug(`creating proof...`);
|
|
91
|
+
const bytecode = getBytecode(bytecodePath);
|
|
92
|
+
const witness = getWitness(witnessPath);
|
|
93
|
+
const proof = await api.acirCreateProof(acirComposer, bytecode, witness, isRecursive);
|
|
94
|
+
debug(`done.`);
|
|
95
|
+
if (outputPath === '-') {
|
|
96
|
+
process.stdout.write(proof);
|
|
97
|
+
debug(`proof written to stdout`);
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
(0, fs_1.writeFileSync)(outputPath, proof);
|
|
101
|
+
debug(`proof written to: ${outputPath}`);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
finally {
|
|
105
|
+
await api.destroy();
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
exports.prove = prove;
|
|
109
|
+
async function gateCount(bytecodePath) {
|
|
110
|
+
const api = await index_js_1.Barretenberg.new(1);
|
|
111
|
+
try {
|
|
112
|
+
const numberOfGates = await getGates(bytecodePath, api);
|
|
113
|
+
// Create an 8-byte buffer and write the number into it.
|
|
114
|
+
// Writing number directly to stdout will result in a variable sized
|
|
115
|
+
// input depending on the size.
|
|
116
|
+
const buffer = Buffer.alloc(8);
|
|
117
|
+
buffer.writeBigInt64LE(BigInt(numberOfGates));
|
|
118
|
+
process.stdout.write(buffer);
|
|
119
|
+
}
|
|
120
|
+
finally {
|
|
121
|
+
await api.destroy();
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
exports.gateCount = gateCount;
|
|
125
|
+
function acvmInfo(outputPath) {
|
|
126
|
+
const stringifiedJson = JSON.stringify(info_js_1.acvmInfoJson, null, 2);
|
|
127
|
+
if (outputPath === '-') {
|
|
128
|
+
process.stdout.write(stringifiedJson);
|
|
129
|
+
debug(`info written to stdout`);
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
(0, fs_1.writeFileSync)(outputPath, stringifiedJson);
|
|
133
|
+
debug(`info written to: ${outputPath}`);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
exports.acvmInfo = acvmInfo;
|
|
137
|
+
async function verify(proofPath, isRecursive, vkPath) {
|
|
138
|
+
const { api, acirComposer } = await initLite();
|
|
139
|
+
try {
|
|
140
|
+
await api.acirLoadVerificationKey(acirComposer, new index_js_1.RawBuffer((0, fs_1.readFileSync)(vkPath)));
|
|
141
|
+
const verified = await api.acirVerifyProof(acirComposer, (0, fs_1.readFileSync)(proofPath), isRecursive);
|
|
142
|
+
debug(`verified: ${verified}`);
|
|
143
|
+
return verified;
|
|
144
|
+
}
|
|
145
|
+
finally {
|
|
146
|
+
await api.destroy();
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
exports.verify = verify;
|
|
150
|
+
async function contract(outputPath, vkPath) {
|
|
151
|
+
const { api, acirComposer } = await initLite();
|
|
152
|
+
try {
|
|
153
|
+
await api.acirLoadVerificationKey(acirComposer, new index_js_1.RawBuffer((0, fs_1.readFileSync)(vkPath)));
|
|
154
|
+
const contract = await api.acirGetSolidityVerifier(acirComposer);
|
|
155
|
+
if (outputPath === '-') {
|
|
156
|
+
process.stdout.write(contract);
|
|
157
|
+
debug(`contract written to stdout`);
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
(0, fs_1.writeFileSync)(outputPath, contract);
|
|
161
|
+
debug(`contract written to: ${outputPath}`);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
finally {
|
|
165
|
+
await api.destroy();
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
exports.contract = contract;
|
|
169
|
+
async function writeVk(bytecodePath, crsPath, outputPath) {
|
|
170
|
+
const { api, acirComposer } = await init(bytecodePath, crsPath);
|
|
171
|
+
try {
|
|
172
|
+
debug('initing proving key...');
|
|
173
|
+
const bytecode = getBytecode(bytecodePath);
|
|
174
|
+
await api.acirInitProvingKey(acirComposer, bytecode);
|
|
175
|
+
debug('initing verification key...');
|
|
176
|
+
const vk = await api.acirGetVerificationKey(acirComposer);
|
|
177
|
+
if (outputPath === '-') {
|
|
178
|
+
process.stdout.write(vk);
|
|
179
|
+
debug(`vk written to stdout`);
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
(0, fs_1.writeFileSync)(outputPath, vk);
|
|
183
|
+
debug(`vk written to: ${outputPath}`);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
finally {
|
|
187
|
+
await api.destroy();
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
exports.writeVk = writeVk;
|
|
191
|
+
async function proofAsFields(proofPath, vkPath, outputPath) {
|
|
192
|
+
const { api, acirComposer } = await initLite();
|
|
193
|
+
try {
|
|
194
|
+
debug('serializing proof byte array into field elements');
|
|
195
|
+
const numPublicInputs = (0, fs_1.readFileSync)(vkPath).readUint32BE(8);
|
|
196
|
+
const proofAsFields = await api.acirSerializeProofIntoFields(acirComposer, (0, fs_1.readFileSync)(proofPath), numPublicInputs);
|
|
197
|
+
const jsonProofAsFields = JSON.stringify(proofAsFields.map(f => f.toString()));
|
|
198
|
+
if (outputPath === '-') {
|
|
199
|
+
process.stdout.write(jsonProofAsFields);
|
|
200
|
+
debug(`proofAsFields written to stdout`);
|
|
201
|
+
}
|
|
202
|
+
else {
|
|
203
|
+
(0, fs_1.writeFileSync)(outputPath, jsonProofAsFields);
|
|
204
|
+
debug(`proofAsFields written to: ${outputPath}`);
|
|
205
|
+
}
|
|
206
|
+
debug('done.');
|
|
207
|
+
}
|
|
208
|
+
finally {
|
|
209
|
+
await api.destroy();
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
exports.proofAsFields = proofAsFields;
|
|
213
|
+
async function vkAsFields(vkPath, vkeyOutputPath) {
|
|
214
|
+
const { api, acirComposer } = await initLite();
|
|
215
|
+
try {
|
|
216
|
+
debug('serializing vk byte array into field elements');
|
|
217
|
+
await api.acirLoadVerificationKey(acirComposer, new index_js_1.RawBuffer((0, fs_1.readFileSync)(vkPath)));
|
|
218
|
+
const [vkAsFields, vkHash] = await api.acirSerializeVerificationKeyIntoFields(acirComposer);
|
|
219
|
+
const output = [vkHash, ...vkAsFields].map(f => f.toString());
|
|
220
|
+
const jsonVKAsFields = JSON.stringify(output);
|
|
221
|
+
if (vkeyOutputPath === '-') {
|
|
222
|
+
process.stdout.write(jsonVKAsFields);
|
|
223
|
+
debug(`vkAsFields written to stdout`);
|
|
224
|
+
}
|
|
225
|
+
else {
|
|
226
|
+
(0, fs_1.writeFileSync)(vkeyOutputPath, jsonVKAsFields);
|
|
227
|
+
debug(`vkAsFields written to: ${vkeyOutputPath}`);
|
|
228
|
+
}
|
|
229
|
+
debug('done.');
|
|
230
|
+
}
|
|
231
|
+
finally {
|
|
232
|
+
await api.destroy();
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
exports.vkAsFields = vkAsFields;
|
|
236
|
+
const program = new commander_1.Command();
|
|
237
|
+
program.option('-v, --verbose', 'enable verbose logging', false);
|
|
238
|
+
program.option('-c, --crs-path <path>', 'set crs path', './crs');
|
|
239
|
+
function handleGlobalOptions() {
|
|
240
|
+
if (program.opts().verbose) {
|
|
241
|
+
debug_1.default.enable('bb.js*');
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
program
|
|
245
|
+
.command('prove_and_verify')
|
|
246
|
+
.description('Generate a proof and verify it. Process exits with success or failure code.')
|
|
247
|
+
.option('-b, --bytecode-path <path>', 'Specify the bytecode path', './target/acir.gz')
|
|
248
|
+
.option('-w, --witness-path <path>', 'Specify the witness path', './target/witness.gz')
|
|
249
|
+
.option('-r, --recursive', 'prove and verify using recursive prover and verifier', false)
|
|
250
|
+
.action(async ({ bytecodePath, witnessPath, recursive, crsPath }) => {
|
|
251
|
+
handleGlobalOptions();
|
|
252
|
+
const result = await proveAndVerify(bytecodePath, witnessPath, crsPath, recursive);
|
|
253
|
+
process.exit(result ? 0 : 1);
|
|
254
|
+
});
|
|
255
|
+
program
|
|
256
|
+
.command('prove')
|
|
257
|
+
.description('Generate a proof and write it to a file.')
|
|
258
|
+
.option('-b, --bytecode-path <path>', 'Specify the bytecode path', './target/acir.gz')
|
|
259
|
+
.option('-w, --witness-path <path>', 'Specify the witness path', './target/witness.gz')
|
|
260
|
+
.option('-r, --recursive', 'prove using recursive prover', false)
|
|
261
|
+
.option('-o, --output-path <path>', 'Specify the proof output path', './proofs/proof')
|
|
262
|
+
.action(async ({ bytecodePath, witnessPath, recursive, outputPath, crsPath }) => {
|
|
263
|
+
handleGlobalOptions();
|
|
264
|
+
await prove(bytecodePath, witnessPath, crsPath, recursive, outputPath);
|
|
265
|
+
});
|
|
266
|
+
program
|
|
267
|
+
.command('gates')
|
|
268
|
+
.description('Print gate count to standard output.')
|
|
269
|
+
.option('-b, --bytecode-path <path>', 'Specify the bytecode path', './target/acir.gz')
|
|
270
|
+
.action(async ({ bytecodePath: bytecodePath }) => {
|
|
271
|
+
handleGlobalOptions();
|
|
272
|
+
await gateCount(bytecodePath);
|
|
273
|
+
});
|
|
274
|
+
program
|
|
275
|
+
.command('verify')
|
|
276
|
+
.description('Verify a proof. Process exists with success or failure code.')
|
|
277
|
+
.requiredOption('-p, --proof-path <path>', 'Specify the path to the proof')
|
|
278
|
+
.option('-r, --recursive', 'prove using recursive prover', false)
|
|
279
|
+
.requiredOption('-k, --vk <path>', 'path to a verification key. avoids recomputation.')
|
|
280
|
+
.action(async ({ proofPath, recursive, vk }) => {
|
|
281
|
+
handleGlobalOptions();
|
|
282
|
+
const result = await verify(proofPath, recursive, vk);
|
|
283
|
+
process.exit(result ? 0 : 1);
|
|
284
|
+
});
|
|
285
|
+
program
|
|
286
|
+
.command('contract')
|
|
287
|
+
.description('Output solidity verification key contract.')
|
|
288
|
+
.option('-b, --bytecode-path <path>', 'Specify the bytecode path', './target/acir.gz')
|
|
289
|
+
.option('-o, --output-path <path>', 'Specify the path to write the contract', './target/contract.sol')
|
|
290
|
+
.requiredOption('-k, --vk-path <path>', 'Path to a verification key. avoids recomputation.')
|
|
291
|
+
.action(async ({ outputPath, vkPath }) => {
|
|
292
|
+
handleGlobalOptions();
|
|
293
|
+
await contract(outputPath, vkPath);
|
|
294
|
+
});
|
|
295
|
+
program
|
|
296
|
+
.command('write_vk')
|
|
297
|
+
.description('Output verification key.')
|
|
298
|
+
.option('-b, --bytecode-path <path>', 'Specify the bytecode path', './target/acir.gz')
|
|
299
|
+
.requiredOption('-o, --output-path <path>', 'Specify the path to write the key')
|
|
300
|
+
.action(async ({ bytecodePath, outputPath, crsPath }) => {
|
|
301
|
+
handleGlobalOptions();
|
|
302
|
+
await writeVk(bytecodePath, crsPath, outputPath);
|
|
303
|
+
});
|
|
304
|
+
program
|
|
305
|
+
.command('proof_as_fields')
|
|
306
|
+
.description('Return the proof as fields elements')
|
|
307
|
+
.requiredOption('-p, --proof-path <path>', 'Specify the proof path')
|
|
308
|
+
.requiredOption('-k, --vk-path <path>', 'Path to verification key.')
|
|
309
|
+
.requiredOption('-o, --output-path <path>', 'Specify the JSON path to write the proof fields')
|
|
310
|
+
.action(async ({ proofPath, vkPath, outputPath }) => {
|
|
311
|
+
handleGlobalOptions();
|
|
312
|
+
await proofAsFields(proofPath, vkPath, outputPath);
|
|
313
|
+
});
|
|
314
|
+
program
|
|
315
|
+
.command('vk_as_fields')
|
|
316
|
+
.description('Return the verification key represented as fields elements. Also return the verification key hash.')
|
|
317
|
+
.requiredOption('-k, --vk-path <path>', 'Path to verification key.')
|
|
318
|
+
.requiredOption('-o, --output-path <path>', 'Specify the JSON path to write the verification key fields and key hash')
|
|
319
|
+
.action(async ({ vkPath, outputPath }) => {
|
|
320
|
+
handleGlobalOptions();
|
|
321
|
+
await vkAsFields(vkPath, outputPath);
|
|
322
|
+
});
|
|
323
|
+
program
|
|
324
|
+
.command('info')
|
|
325
|
+
.description('Return ACVM related metadata about the backend')
|
|
326
|
+
.requiredOption('-o, --output-path <path>', 'Specify the path to write the JSON information to')
|
|
327
|
+
.action(({ outputPath }) => {
|
|
328
|
+
handleGlobalOptions();
|
|
329
|
+
acvmInfo(outputPath);
|
|
330
|
+
});
|
|
331
|
+
program.name('bb.js').parse(process.argv);
|
|
332
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYWluLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQ0EseUNBQTBEO0FBQzFELDBEQUFnQztBQUNoQywyQkFBaUQ7QUFDakQsK0JBQWtDO0FBQ2xDLHlDQUFvQztBQUNwQyx1Q0FBeUM7QUFDekMsZUFBVyxDQUFDLEdBQUcsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM5QyxNQUFNLEtBQUssR0FBRyxJQUFBLGVBQVcsRUFBQyxPQUFPLENBQUMsQ0FBQztBQUVuQyxzREFBc0Q7QUFDdEQsK0RBQStEO0FBQy9ELEVBQUU7QUFDRiwrREFBK0Q7QUFDL0QsK0RBQStEO0FBQy9ELDRDQUE0QztBQUM1QyxNQUFNLGdCQUFnQixHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7QUFFakMsU0FBUyxXQUFXLENBQUMsWUFBb0I7SUFDdkMsTUFBTSxjQUFjLEdBQUcsSUFBQSxpQkFBWSxFQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ2xELE1BQU0sWUFBWSxHQUFHLElBQUEsaUJBQVUsRUFBQyxjQUFjLENBQUMsQ0FBQztJQUNoRCxPQUFPLFlBQVksQ0FBQztBQUN0QixDQUFDO0FBRUQsS0FBSyxVQUFVLFFBQVEsQ0FBQyxZQUFvQixFQUFFLEdBQWlCO0lBQzdELE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLGtCQUFrQixDQUFDLFlBQVksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM5RCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FBQyxXQUFtQjtJQUNyQyxNQUFNLElBQUksR0FBRyxJQUFBLGlCQUFZLEVBQUMsV0FBVyxDQUFDLENBQUM7SUFDdkMsTUFBTSxZQUFZLEdBQUcsSUFBQSxpQkFBVSxFQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RDLE9BQU8sWUFBWSxDQUFDO0FBQ3RCLENBQUM7QUFFRCxL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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/random/browser/index.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,QAAS,MAAM,eA+BtC,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.randomBytes = void 0;
|
|
4
|
+
const randomBytes = (len) => {
|
|
5
|
+
const getWebCrypto = () => {
|
|
6
|
+
if (typeof window !== 'undefined' && window.crypto)
|
|
7
|
+
return window.crypto;
|
|
8
|
+
if (typeof self !== 'undefined' && self.crypto)
|
|
9
|
+
return self.crypto;
|
|
10
|
+
return undefined;
|
|
11
|
+
};
|
|
12
|
+
const crypto = getWebCrypto();
|
|
13
|
+
if (!crypto) {
|
|
14
|
+
throw new Error('randomBytes UnsupportedEnvironment');
|
|
15
|
+
}
|
|
16
|
+
const buf = new Uint8Array(len);
|
|
17
|
+
// limit of Crypto.getRandomValues()
|
|
18
|
+
// https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues
|
|
19
|
+
const MAX_BYTES = 65536;
|
|
20
|
+
if (len > MAX_BYTES) {
|
|
21
|
+
// this is the max bytes crypto.getRandomValues
|
|
22
|
+
// can do at once see https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
|
|
23
|
+
for (let generated = 0; generated < len; generated += MAX_BYTES) {
|
|
24
|
+
// buffer.slice automatically checks if the end is past the end of
|
|
25
|
+
// the buffer so we don't have to here
|
|
26
|
+
crypto.getRandomValues(buf.subarray(generated, generated + MAX_BYTES));
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
crypto.getRandomValues(buf);
|
|
31
|
+
}
|
|
32
|
+
return buf;
|
|
33
|
+
};
|
|
34
|
+
exports.randomBytes = randomBytes;
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcmFuZG9tL2Jyb3dzZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQU8sTUFBTSxXQUFXLEdBQUcsQ0FBQyxHQUFXLEVBQUUsRUFBRTtJQUN6QyxNQUFNLFlBQVksR0FBRyxHQUFHLEVBQUU7UUFDeEIsSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLElBQUksTUFBTSxDQUFDLE1BQU07WUFBRSxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDekUsSUFBSSxPQUFPLElBQUksS0FBSyxXQUFXLElBQUksSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDbkUsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQyxDQUFDO0lBRUYsTUFBTSxNQUFNLEdBQUcsWUFBWSxFQUFFLENBQUM7SUFDOUIsSUFBSSxDQUFDLE1BQU0sRUFBRTtRQUNYLE1BQU0sSUFBSSxLQUFLLENBQUMsb0NBQW9DLENBQUMsQ0FBQztLQUN2RDtJQUVELE1BQU0sR0FBRyxHQUFHLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRWhDLG9DQUFvQztJQUNwQywwRUFBMEU7SUFDMUUsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBRXhCLElBQUksR0FBRyxHQUFHLFNBQVMsRUFBRTtRQUNuQiwrQ0FBK0M7UUFDL0Msb0dBQW9HO1FBQ3BHLEtBQUssSUFBSSxTQUFTLEdBQUcsQ0FBQyxFQUFFLFNBQVMsR0FBRyxHQUFHLEVBQUUsU0FBUyxJQUFJLFNBQVMsRUFBRTtZQUMvRCxrRUFBa0U7WUFDbEUsc0NBQXNDO1lBQ3RDLE1BQU0sQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsU0FBUyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUM7U0FDeEU7S0FDRjtTQUFNO1FBQ0wsTUFBTSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUM3QjtJQUVELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyxDQUFDO0FBL0JXLFFBQUEsV0FBVyxlQStCdEIifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/random/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
tslib_1.__exportStar(require("./node/index.js"), exports);
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcmFuZG9tL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDBEQUFnQyJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/random/node/index.ts"],"names":[],"mappings":"AAEA,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,cAEtC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.randomBytes = void 0;
|
|
4
|
+
const crypto_1 = require("crypto");
|
|
5
|
+
function randomBytes(len) {
|
|
6
|
+
return new Uint8Array((0, crypto_1.randomBytes)(len));
|
|
7
|
+
}
|
|
8
|
+
exports.randomBytes = randomBytes;
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcmFuZG9tL25vZGUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQTBEO0FBRTFELFNBQWdCLFdBQVcsQ0FBQyxHQUFXO0lBQ3JDLE9BQU8sSUFBSSxVQUFVLENBQUMsSUFBQSxvQkFBaUIsRUFBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2hELENBQUM7QUFGRCxrQ0FFQyJ9
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export declare class BufferReader {
|
|
2
|
+
private buffer;
|
|
3
|
+
private index;
|
|
4
|
+
constructor(buffer: Uint8Array, offset?: number);
|
|
5
|
+
static asReader(bufferOrReader: Uint8Array | BufferReader): BufferReader;
|
|
6
|
+
readNumber(): number;
|
|
7
|
+
readBoolean(): boolean;
|
|
8
|
+
readBytes(n: number): Uint8Array;
|
|
9
|
+
readNumberVector(): number[];
|
|
10
|
+
readVector<T>(itemDeserializer: {
|
|
11
|
+
fromBuffer: (reader: BufferReader) => T;
|
|
12
|
+
}): T[];
|
|
13
|
+
readArray<T>(size: number, itemDeserializer: {
|
|
14
|
+
fromBuffer: (reader: BufferReader) => T;
|
|
15
|
+
}): T[];
|
|
16
|
+
readObject<T>(deserializer: {
|
|
17
|
+
fromBuffer: (reader: BufferReader) => T;
|
|
18
|
+
}): T;
|
|
19
|
+
peekBytes(n?: number): Uint8Array;
|
|
20
|
+
readString(): string;
|
|
21
|
+
readBuffer(): Uint8Array;
|
|
22
|
+
readMap<T>(deserializer: {
|
|
23
|
+
fromBuffer: (reader: BufferReader) => T;
|
|
24
|
+
}): {
|
|
25
|
+
[key: string]: T;
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=buffer_reader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buffer_reader.d.ts","sourceRoot":"","sources":["../../../src/serialize/buffer_reader.ts"],"names":[],"mappings":"AAAA,qBAAa,YAAY;IAEX,OAAO,CAAC,MAAM;IAD1B,OAAO,CAAC,KAAK,CAAS;gBACF,MAAM,EAAE,UAAU,EAAE,MAAM,SAAI;WAIpC,QAAQ,CAAC,cAAc,EAAE,UAAU,GAAG,YAAY;IAIzD,UAAU,IAAI,MAAM;IAMpB,WAAW,IAAI,OAAO;IAKtB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,UAAU;IAKhC,gBAAgB,IAAI,MAAM,EAAE;IAM5B,UAAU,CAAC,CAAC,EAAE,gBAAgB,EAAE;QAAE,UAAU,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,CAAC,CAAA;KAAE,GAAG,CAAC,EAAE;IASjF,SAAS,CAAC,CAAC,EAChB,IAAI,EAAE,MAAM,EACZ,gBAAgB,EAAE;QAChB,UAAU,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,CAAC,CAAC;KACzC,GACA,CAAC,EAAE;IAQC,UAAU,CAAC,CAAC,EAAE,YAAY,EAAE;QAAE,UAAU,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,CAAC,CAAA;KAAE,GAAG,CAAC;IAI3E,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM;IAIpB,UAAU,IAAI,MAAM;IAIpB,UAAU,IAAI,UAAU;IAKxB,OAAO,CAAC,CAAC,EAAE,YAAY,EAAE;QAAE,UAAU,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,CAAC,CAAA;KAAE,GAAG;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,CAAA;KAAE;CAUnG"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BufferReader = void 0;
|
|
4
|
+
class BufferReader {
|
|
5
|
+
constructor(buffer, offset = 0) {
|
|
6
|
+
this.buffer = buffer;
|
|
7
|
+
this.index = offset;
|
|
8
|
+
}
|
|
9
|
+
static asReader(bufferOrReader) {
|
|
10
|
+
return bufferOrReader instanceof BufferReader ? bufferOrReader : new BufferReader(bufferOrReader);
|
|
11
|
+
}
|
|
12
|
+
readNumber() {
|
|
13
|
+
const dataView = new DataView(this.buffer.buffer, this.buffer.byteOffset + this.index, 4);
|
|
14
|
+
this.index += 4;
|
|
15
|
+
return dataView.getUint32(0, false);
|
|
16
|
+
}
|
|
17
|
+
readBoolean() {
|
|
18
|
+
this.index += 1;
|
|
19
|
+
return Boolean(this.buffer.at(this.index - 1));
|
|
20
|
+
}
|
|
21
|
+
readBytes(n) {
|
|
22
|
+
this.index += n;
|
|
23
|
+
return this.buffer.slice(this.index - n, this.index);
|
|
24
|
+
}
|
|
25
|
+
readNumberVector() {
|
|
26
|
+
return this.readVector({
|
|
27
|
+
fromBuffer: (reader) => reader.readNumber(),
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
readVector(itemDeserializer) {
|
|
31
|
+
const size = this.readNumber();
|
|
32
|
+
const result = new Array(size);
|
|
33
|
+
for (let i = 0; i < size; i++) {
|
|
34
|
+
result[i] = itemDeserializer.fromBuffer(this);
|
|
35
|
+
}
|
|
36
|
+
return result;
|
|
37
|
+
}
|
|
38
|
+
readArray(size, itemDeserializer) {
|
|
39
|
+
const result = new Array(size);
|
|
40
|
+
for (let i = 0; i < size; i++) {
|
|
41
|
+
result[i] = itemDeserializer.fromBuffer(this);
|
|
42
|
+
}
|
|
43
|
+
return result;
|
|
44
|
+
}
|
|
45
|
+
readObject(deserializer) {
|
|
46
|
+
return deserializer.fromBuffer(this);
|
|
47
|
+
}
|
|
48
|
+
peekBytes(n) {
|
|
49
|
+
return this.buffer.subarray(this.index, n ? this.index + n : undefined);
|
|
50
|
+
}
|
|
51
|
+
readString() {
|
|
52
|
+
return new TextDecoder().decode(this.readBuffer());
|
|
53
|
+
}
|
|
54
|
+
readBuffer() {
|
|
55
|
+
const size = this.readNumber();
|
|
56
|
+
return this.readBytes(size);
|
|
57
|
+
}
|
|
58
|
+
readMap(deserializer) {
|
|
59
|
+
const numEntries = this.readNumber();
|
|
60
|
+
const map = {};
|
|
61
|
+
for (let i = 0; i < numEntries; i++) {
|
|
62
|
+
const key = this.readString();
|
|
63
|
+
const value = this.readObject(deserializer);
|
|
64
|
+
map[key] = value;
|
|
65
|
+
}
|
|
66
|
+
return map;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
exports.BufferReader = BufferReader;
|
|
70
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVmZmVyX3JlYWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJpYWxpemUvYnVmZmVyX3JlYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxNQUFhLFlBQVk7SUFFdkIsWUFBb0IsTUFBa0IsRUFBRSxNQUFNLEdBQUcsQ0FBQztRQUE5QixXQUFNLEdBQU4sTUFBTSxDQUFZO1FBQ3BDLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0lBQ3RCLENBQUM7SUFFTSxNQUFNLENBQUMsUUFBUSxDQUFDLGNBQXlDO1FBQzlELE9BQU8sY0FBYyxZQUFZLFlBQVksQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNwRyxDQUFDO0lBRU0sVUFBVTtRQUNmLE1BQU0sUUFBUSxHQUFHLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDMUYsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7UUFDaEIsT0FBTyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRU0sV0FBVztRQUNoQixJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztRQUNoQixPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVNLFNBQVMsQ0FBQyxDQUFTO1FBQ3hCLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssR0FB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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/serialize/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
tslib_1.__exportStar(require("./buffer_reader.js"), exports);
|
|
5
|
+
tslib_1.__exportStar(require("./output_type.js"), exports);
|
|
6
|
+
tslib_1.__exportStar(require("./serialize.js"), exports);
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VyaWFsaXplL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZEQUFtQztBQUNuQywyREFBaUM7QUFDakMseURBQStCIn0=
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { BufferReader } from './buffer_reader.js';
|
|
2
|
+
export interface OutputType<T = any> {
|
|
3
|
+
SIZE_IN_BYTES?: number;
|
|
4
|
+
fromBuffer: (b: Uint8Array | BufferReader) => T;
|
|
5
|
+
}
|
|
6
|
+
export declare function BoolDeserializer(): OutputType;
|
|
7
|
+
export declare function NumberDeserializer(): OutputType;
|
|
8
|
+
export declare function VectorDeserializer<T>(t: OutputType<T>): OutputType;
|
|
9
|
+
export declare function BufferDeserializer(): OutputType;
|
|
10
|
+
export declare function StringDeserializer(): OutputType;
|
|
11
|
+
//# sourceMappingURL=output_type.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output_type.d.ts","sourceRoot":"","sources":["../../../src/serialize/output_type.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,WAAW,UAAU,CAAC,CAAC,GAAG,GAAG;IACjC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,CAAC,CAAC,EAAE,UAAU,GAAG,YAAY,KAAK,CAAC,CAAC;CACjD;AAED,wBAAgB,gBAAgB,IAAI,UAAU,CAQ7C;AAED,wBAAgB,kBAAkB,IAAI,UAAU,CAQ/C;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAOlE;AAED,wBAAgB,kBAAkB,IAAI,UAAU,CAO/C;AAED,wBAAgB,kBAAkB,IAAI,UAAU,CAO/C"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.StringDeserializer = exports.BufferDeserializer = exports.VectorDeserializer = exports.NumberDeserializer = exports.BoolDeserializer = void 0;
|
|
4
|
+
const buffer_reader_js_1 = require("./buffer_reader.js");
|
|
5
|
+
function BoolDeserializer() {
|
|
6
|
+
return {
|
|
7
|
+
SIZE_IN_BYTES: 1,
|
|
8
|
+
fromBuffer: (buf) => {
|
|
9
|
+
const reader = buffer_reader_js_1.BufferReader.asReader(buf);
|
|
10
|
+
return reader.readBoolean();
|
|
11
|
+
},
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
exports.BoolDeserializer = BoolDeserializer;
|
|
15
|
+
function NumberDeserializer() {
|
|
16
|
+
return {
|
|
17
|
+
SIZE_IN_BYTES: 4,
|
|
18
|
+
fromBuffer: (buf) => {
|
|
19
|
+
const reader = buffer_reader_js_1.BufferReader.asReader(buf);
|
|
20
|
+
return reader.readNumber();
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
exports.NumberDeserializer = NumberDeserializer;
|
|
25
|
+
function VectorDeserializer(t) {
|
|
26
|
+
return {
|
|
27
|
+
fromBuffer: (buf) => {
|
|
28
|
+
const reader = buffer_reader_js_1.BufferReader.asReader(buf);
|
|
29
|
+
return reader.readVector(t);
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
exports.VectorDeserializer = VectorDeserializer;
|
|
34
|
+
function BufferDeserializer() {
|
|
35
|
+
return {
|
|
36
|
+
fromBuffer: (buf) => {
|
|
37
|
+
const reader = buffer_reader_js_1.BufferReader.asReader(buf);
|
|
38
|
+
return reader.readBuffer();
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
exports.BufferDeserializer = BufferDeserializer;
|
|
43
|
+
function StringDeserializer() {
|
|
44
|
+
return {
|
|
45
|
+
fromBuffer: (buf) => {
|
|
46
|
+
const reader = buffer_reader_js_1.BufferReader.asReader(buf);
|
|
47
|
+
return reader.readString();
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
exports.StringDeserializer = StringDeserializer;
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0cHV0X3R5cGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VyaWFsaXplL291dHB1dF90eXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlEQUFrRDtBQU9sRCxTQUFnQixnQkFBZ0I7SUFDOUIsT0FBTztRQUNMLGFBQWEsRUFBRSxDQUFDO1FBQ2hCLFVBQVUsRUFBRSxDQUFDLEdBQThCLEVBQUUsRUFBRTtZQUM3QyxNQUFNLE1BQU0sR0FBRywrQkFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxQyxPQUFPLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM5QixDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFSRCw0Q0FRQztBQUVELFNBQWdCLGtCQUFrQjtJQUNoQyxPQUFPO1FBQ0wsYUFBYSxFQUFFLENBQUM7UUFDaEIsVUFBVSxFQUFFLENBQUMsR0FBOEIsRUFBRSxFQUFFO1lBQzdDLE1BQU0sTUFBTSxHQUFHLCtCQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzFDLE9BQU8sTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzdCLENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQztBQVJELGdEQVFDO0FBRUQsU0FBZ0Isa0JBQWtCLENBQUksQ0FBZ0I7SUFDcEQsT0FBTztRQUNMLFVBQVUsRUFBRSxDQUFDLEdBQThCLEVBQUUsRUFBRTtZQUM3QyxNQUFNLE1BQU0sR0FBRywrQkFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxQyxPQUFPLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUIsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDO0FBUEQsZ0RBT0M7QUFFRCxTQUFnQixrQkFBa0I7SUFDaEMsT0FBTztRQUNMLFVBQVUsRUFBRSxDQUFDLEdBQThCLEVBQUUsRUFBRTtZQUM3QyxNQUFNLE1BQU0sR0FBRywrQkFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxQyxPQUFPLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUM3QixDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFQRCxnREFPQztBQUVELFNBQWdCLGtCQUFrQjtJQUNoQyxPQUFPO1FBQ0wsVUFBVSxFQUFFLENBQUMsR0FBOEIsRUFBRSxFQUFFO1lBQzdDLE1BQU0sTUFBTSxHQUFHLCtCQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzFDLE9BQU8sTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzdCLENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQztBQVBELGdEQU9DIn0=
|