From 1cb664b341808ac3933cab92dd81f11c75f4386a Mon Sep 17 00:00:00 2001
From: Hendrik Eeckhaut
Date: Fri, 30 May 2025 10:22:11 +0200
Subject: [PATCH] Alpha.11 (#109)
Co-authored-by: yuroitaki <25913766+yuroitaki@users.noreply.github.com>
---
.github/workflows/ci.yaml | 2 +-
.github/workflows/playwright.yml | 2 +-
.vscode/settings.json | 4 +-
demo/interactive-demo/prover-rs/Cargo.toml | 7 ++--
demo/interactive-demo/prover-rs/src/main.rs | 44 +++++++++++---------
demo/interactive-demo/prover-ts/src/app.tsx | 2 +-
demo/interactive-demo/verifier-rs/Cargo.toml | 6 +--
demo/interactive-demo/verifier-rs/README.md | 2 +-
demo/interactive-demo/verifier-rs/src/lib.rs | 42 +++++++++++++------
demo/react-ts-webpack/README.md | 2 +-
demo/react-ts-webpack/src/app.tsx | 10 ++---
demo/web-to-web-p2p/src/app.tsx | 8 ++--
package-lock.json | 12 +++---
package.json | 8 ++--
playwright-test/full-integration.spec.ts | 2 +-
playwright-test/simple-verify.spec.ts | 5 ++-
quickstart.md | 6 +--
src/lib.ts | 26 ++++++++++--
src/types.ts | 2 +-
test/e2e/full-integration.spec.ts | 3 +-
test/e2e/simple-verify.spec.ts | 2 +-
21 files changed, 120 insertions(+), 77 deletions(-)
diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml
index 611049c..717bbd3 100644
--- a/.github/workflows/ci.yaml
+++ b/.github/workflows/ci.yaml
@@ -13,7 +13,7 @@ jobs:
RELEASE_MODE: 'dry-run' # dry-run by default, will be set to 'publish' for release builds
services:
notary-server:
- image: ghcr.io/tlsnotary/tlsn/notary-server:v0.1.0-alpha.10
+ image: ghcr.io/tlsnotary/tlsn/notary-server:v0.1.0-alpha.11
env:
NOTARY_SERVER__TLS__ENABLED: false
ports:
diff --git a/.github/workflows/playwright.yml b/.github/workflows/playwright.yml
index 24353ee..151c24a 100644
--- a/.github/workflows/playwright.yml
+++ b/.github/workflows/playwright.yml
@@ -8,7 +8,7 @@ jobs:
runs-on: ubuntu-latest
services:
notary-server:
- image: ghcr.io/tlsnotary/tlsn/notary-server:v0.1.0-alpha.10
+ image: ghcr.io/tlsnotary/tlsn/notary-server:v0.1.0-alpha.11
env:
NOTARY_SERVER__TLS__ENABLED: false
ports:
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 581e977..6ecd8b4 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -1,6 +1,6 @@
{
"rust-analyzer.linkedProjects": [
- "interactive-demo/verifier-rs/Cargo.toml",
- "interactive-demo/prover-rs/Cargo.toml"
+ "demo/interactive-demo/verifier-rs/Cargo.toml",
+ "demo/interactive-demo/prover-rs/Cargo.toml"
],
}
\ No newline at end of file
diff --git a/demo/interactive-demo/prover-rs/Cargo.toml b/demo/interactive-demo/prover-rs/Cargo.toml
index 9371b97..5395e30 100644
--- a/demo/interactive-demo/prover-rs/Cargo.toml
+++ b/demo/interactive-demo/prover-rs/Cargo.toml
@@ -25,7 +25,8 @@ tracing-subscriber = { version ="0.3.18", features = ["env-filter"] }
uuid = { version = "1.4.1", features = ["v4", "fast-rng"] }
ws_stream_tungstenite = { version = "0.13", features = ["tokio_io"] }
-tlsn-core = { git = "https://github.com/tlsnotary/tlsn.git", tag = "v0.1.0-alpha.10", package = "tlsn-core" }
-tlsn-prover = { git = "https://github.com/tlsnotary/tlsn.git", tag = "v0.1.0-alpha.10", package = "tlsn-prover" }
-tlsn-common = { git = "https://github.com/tlsnotary/tlsn.git", tag = "v0.1.0-alpha.10", package = "tlsn-common" }
+tlsn-core = { git = "https://github.com/tlsnotary/tlsn.git", tag = "v0.1.0-alpha.11", package = "tlsn-core" }
+tlsn-prover = { git = "https://github.com/tlsnotary/tlsn.git", tag = "v0.1.0-alpha.11", package = "tlsn-prover" }
+tlsn-common = { git = "https://github.com/tlsnotary/tlsn.git", tag = "v0.1.0-alpha.11", package = "tlsn-common" }
spansy = {git = "https://github.com/tlsnotary/tlsn-utils", package = "spansy", branch = "dev"}
+rangeset = "0.2.0"
diff --git a/demo/interactive-demo/prover-rs/src/main.rs b/demo/interactive-demo/prover-rs/src/main.rs
index 0a39a30..d926ea1 100644
--- a/demo/interactive-demo/prover-rs/src/main.rs
+++ b/demo/interactive-demo/prover-rs/src/main.rs
@@ -2,14 +2,15 @@ use async_tungstenite::{tokio::connect_async_with_config, tungstenite::protocol:
use http_body_util::Empty;
use hyper::{body::Bytes, Request, StatusCode, Uri};
use hyper_util::rt::TokioIo;
+use rangeset::RangeSet;
use spansy::{
http::parse_response,
json::{self},
Spanned,
};
use tlsn_common::config::ProtocolConfig;
-use tlsn_core::transcript::Idx;
-use tlsn_prover::{state::Prove, Prover, ProverConfig};
+use tlsn_core::ProveConfig;
+use tlsn_prover::{Prover, ProverConfig};
use tokio::io::{AsyncRead, AsyncWrite};
use tokio_util::compat::{FuturesAsyncReadCompatExt, TokioAsyncReadCompatExt};
use tracing::{debug, info};
@@ -27,7 +28,7 @@ const MAX_RECV_DATA: usize = 1 << 14;
const SECRET: &str = "TLSNotary's private key 🤡";
/// Make sure the following url's domain is the same as SERVER_DOMAIN on the verifier side
-const SERVER_URL: &str = "https://raw.githubusercontent.com/tlsnotary/tlsn/refs/tags/v0.1.0-alpha.10/crates/server-fixture/server/src/data/1kb.json";
+const SERVER_URL: &str = "https://raw.githubusercontent.com/tlsnotary/tlsn/refs/tags/v0.1.0-alpha.11/crates/server-fixture/server/src/data/1kb.json";
#[tokio::main]
async fn main() {
@@ -42,7 +43,7 @@ async fn main() {
async fn run_prover(verifier_host: &str, verifier_port: u16, server_uri: &str) {
info!("Sending websocket request...");
let request = http::Request::builder()
- .uri(format!("ws://{}:{}/verify", verifier_host, verifier_port,))
+ .uri(format!("ws://{verifier_host}:{verifier_port}/verify",))
.header("Host", verifier_host)
.header("Sec-WebSocket-Key", uuid::Uuid::new_v4().to_string())
.header("Sec-WebSocket-Version", "13")
@@ -129,22 +130,27 @@ async fn prover(verifier_soc
assert!(response.status() == StatusCode::OK);
// Create proof for the Verifier.
- let mut prover = prover_task.await.unwrap().unwrap().start_prove();
+ let mut prover = prover_task.await.unwrap().unwrap();
- let idx_sent = redact_and_reveal_sent_data(&mut prover);
- let idx_recv = redact_and_reveal_received_data(&mut prover);
+ let mut builder: tlsn_core::ProveConfigBuilder<'_> = ProveConfig::builder(prover.transcript());
- // Reveal parts of the transcript
- prover.prove_transcript(idx_sent, idx_recv).await.unwrap();
+ // Reveal the DNS name.
+ builder.server_identity();
- // Finalize.
- prover.finalize().await.unwrap()
+ let sent_rangeset = redact_and_reveal_sent_data(prover.transcript().sent());
+ let _ = builder.reveal_sent(&sent_rangeset);
+
+ let recv_rangeset = redact_and_reveal_received_data(prover.transcript().received());
+ let _ = builder.reveal_recv(&recv_rangeset);
+
+ let config = builder.build().unwrap();
+
+ prover.prove(&config).await.unwrap();
+ prover.close().await.unwrap();
}
/// Redacts and reveals received data to the verifier.
-fn redact_and_reveal_received_data(prover: &mut Prover) -> Idx {
- let recv_transcript = prover.transcript().received();
-
+fn redact_and_reveal_received_data(recv_transcript: &[u8]) -> RangeSet {
// Get the some information from the received data.
let received_string = String::from_utf8(recv_transcript.to_vec()).unwrap();
debug!("Received data: {}", received_string);
@@ -164,12 +170,11 @@ fn redact_and_reveal_received_data(prover: &mut Prover) -> Idx {
let street_start = street.span().indices().min().unwrap() - 11; // 11 is the length of "street: "
let street_end = street.span().indices().max().unwrap() + 1; // include `"`
- Idx::new([name_start..name_end + 1, street_start..street_end + 1])
+ [name_start..name_end + 1, street_start..street_end + 1].into()
}
/// Redacts and reveals sent data to the verifier.
-fn redact_and_reveal_sent_data(prover: &mut Prover) -> Idx {
- let sent_transcript = prover.transcript().sent();
+fn redact_and_reveal_sent_data(sent_transcript: &[u8]) -> RangeSet {
let sent_transcript_len = sent_transcript.len();
let sent_string: String = String::from_utf8(sent_transcript.to_vec()).unwrap();
@@ -178,8 +183,9 @@ fn redact_and_reveal_sent_data(prover: &mut Prover) -> Idx {
debug!("Send data: {}", sent_string);
// Reveal everything except for the SECRET.
- Idx::new([
+ [
0..secret_start,
secret_start + SECRET.len()..sent_transcript_len,
- ])
+ ]
+ .into()
}
diff --git a/demo/interactive-demo/prover-ts/src/app.tsx b/demo/interactive-demo/prover-ts/src/app.tsx
index 329d3bd..07c7b96 100644
--- a/demo/interactive-demo/prover-ts/src/app.tsx
+++ b/demo/interactive-demo/prover-ts/src/app.tsx
@@ -17,7 +17,7 @@ const root = createRoot(container!);
root.render();
-const serverUrl = 'https://raw.githubusercontent.com/tlsnotary/tlsn/refs/tags/v0.1.0-alpha.10/crates/server-fixture/server/src/data/1kb.json';
+const serverUrl = 'https://raw.githubusercontent.com/tlsnotary/tlsn/refs/tags/v0.1.0-alpha.11/crates/server-fixture/server/src/data/1kb.json';
// const websocketProxyUrl = `wss://notary.pse.dev/proxy`;
const websocketProxyUrl = 'ws://localhost:55688';
const verifierProxyUrl = 'ws://localhost:9816/verify';
diff --git a/demo/interactive-demo/verifier-rs/Cargo.toml b/demo/interactive-demo/verifier-rs/Cargo.toml
index c4786b8..fdb9a5c 100644
--- a/demo/interactive-demo/verifier-rs/Cargo.toml
+++ b/demo/interactive-demo/verifier-rs/Cargo.toml
@@ -32,7 +32,7 @@ tracing = "0.1.40"
tracing-subscriber = { version ="0.3.18", features = ["env-filter"] }
ws_stream_tungstenite = { version = "0.13", features = ["tokio_io"] }
-tlsn-core = { git = "https://github.com/tlsnotary/tlsn.git", tag = "v0.1.0-alpha.10", package = "tlsn-core" }
-tlsn-verifier = { git = "https://github.com/tlsnotary/tlsn.git", tag = "v0.1.0-alpha.10", package = "tlsn-verifier" }
-tlsn-common = { git = "https://github.com/tlsnotary/tlsn.git", tag = "v0.1.0-alpha.10", package = "tlsn-common" }
+tlsn-core = { git = "https://github.com/tlsnotary/tlsn.git", tag = "v0.1.0-alpha.11", package = "tlsn-core" }
+tlsn-verifier = { git = "https://github.com/tlsnotary/tlsn.git", tag = "v0.1.0-alpha.11", package = "tlsn-verifier" }
+tlsn-common = { git = "https://github.com/tlsnotary/tlsn.git", tag = "v0.1.0-alpha.11", package = "tlsn-common" }
tower-util = "0.3.1"
diff --git a/demo/interactive-demo/verifier-rs/README.md b/demo/interactive-demo/verifier-rs/README.md
index d21efac..2f5e6b4 100644
--- a/demo/interactive-demo/verifier-rs/README.md
+++ b/demo/interactive-demo/verifier-rs/README.md
@@ -3,7 +3,7 @@
An implementation of the interactive verifier server in Rust.
## Running the server
-1. Configure this server setting via the global variables defined in [main.rs](./src/main.rs) — please ensure that the hardcoded `SERVER_DOMAIN` and `VERIFICATION_SESSION_ID` have the same values on the prover side.
+1. Configure this server setting via the global variables defined in [main.rs](./src/main.rs) — please ensure that the hardcoded `SERVER_DOMAIN` has the same value on the prover side.
2. Start the server by running the following in a terminal at the root of this crate.
```bash
cargo run --release
diff --git a/demo/interactive-demo/verifier-rs/src/lib.rs b/demo/interactive-demo/verifier-rs/src/lib.rs
index e1f60c0..d3e0485 100644
--- a/demo/interactive-demo/verifier-rs/src/lib.rs
+++ b/demo/interactive-demo/verifier-rs/src/lib.rs
@@ -13,7 +13,8 @@ use std::{
sync::Arc,
};
use tlsn_common::config::ProtocolConfigValidator;
-use tlsn_verifier::{SessionInfo, Verifier, VerifierConfig};
+use tlsn_core::{VerifierOutput, VerifyConfig};
+use tlsn_verifier::{Verifier, VerifierConfig};
use tokio::{
io::{AsyncRead, AsyncWrite},
@@ -105,10 +106,10 @@ async fn handle_socket(socket: WebSocket, verifier_globals: VerifierGlobals) {
let stream = WsStream::new(socket.into_inner());
match verifier(stream, &verifier_globals.server_domain).await {
- Ok((sent, received, _session_info)) => {
+ Ok((sent, received)) => {
info!("Successfully verified {}", &verifier_globals.server_domain);
info!("Verified sent data:\n{}", sent,);
- println!("Verified received data:\n{}", received,);
+ println!("Verified received data:\n{received}",);
}
Err(err) => {
error!("Failed verification using websocket: {err}");
@@ -119,7 +120,7 @@ async fn handle_socket(socket: WebSocket, verifier_globals: VerifierGlobals) {
async fn verifier(
socket: T,
server_domain: &str,
-) -> Result<(String, String, SessionInfo), eyre::ErrReport> {
+) -> Result<(String, String), eyre::ErrReport> {
debug!("Starting verification...");
// Setup Verifier.
@@ -135,15 +136,24 @@ async fn verifier(
.unwrap();
let verifier = Verifier::new(verifier_config);
- // Verify MPC-TLS and wait for (redacted) data.
+ // Receive authenticated data.
debug!("Starting MPC-TLS verification...");
- // Verify MPC-TLS and wait for (redacted) data.
- let (mut partial_transcript, session_info) = verifier.verify(socket.compat()).await.unwrap();
- partial_transcript.set_unauthed(0);
+
+ let verify_config = VerifyConfig::default();
+ let VerifierOutput {
+ server_name,
+ transcript,
+ ..
+ } = verifier
+ .verify(socket.compat(), &verify_config)
+ .await
+ .unwrap();
+
+ let transcript = transcript.expect("prover should have revealed transcript data");
// Check sent data: check host.
debug!("Starting sent data verification...");
- let sent = partial_transcript.sent_unsafe().to_vec();
+ let sent = transcript.sent_unsafe().to_vec();
let sent_data = String::from_utf8(sent.clone()).expect("Verifier expected sent data");
sent_data
.find(server_domain)
@@ -151,22 +161,28 @@ async fn verifier(
// Check received data: check json and version number.
debug!("Starting received data verification...");
- let received = partial_transcript.received_unsafe().to_vec();
+ let received = transcript.received_unsafe().to_vec();
let response = String::from_utf8(received.clone()).expect("Verifier expected received data");
debug!("Received data: {:?}", response);
response
.find("123 Elm Street")
.ok_or_else(|| eyre!("Verification failed: missing data in received data"))?;
+
// Check Session info: server name.
- if session_info.server_name.as_str() != server_domain {
- return Err(eyre!("Verification failed: server name mismatches"));
+ if let Some(server_name) = server_name {
+ if server_name.as_str() != server_domain {
+ return Err(eyre!("Verification failed: server name mismatches"));
+ }
+ } else {
+ // TODO: https://github.com/tlsnotary/tlsn-js/issues/110
+ // return Err(eyre!("Verification failed: server name is missing"));
}
let sent_string = bytes_to_redacted_string(&sent)?;
let received_string = bytes_to_redacted_string(&received)?;
- Ok((sent_string, received_string, session_info))
+ Ok((sent_string, received_string))
}
/// Render redacted bytes as `🙈`.
diff --git a/demo/react-ts-webpack/README.md b/demo/react-ts-webpack/README.md
index b1616db..20f8328 100644
--- a/demo/react-ts-webpack/README.md
+++ b/demo/react-ts-webpack/README.md
@@ -51,7 +51,7 @@ If you want to use the hosted PSE notary and proxy:
1. Open `app.tsx` in your editor.
2. Replace the notary URL:
```ts
- notaryUrl: 'https://notary.pse.dev/v0.1.0-alpha.10',
+ notaryUrl: 'https://notary.pse.dev/v0.1.0-alpha.11',
```
This uses the [PSE](https://pse.dev) notary server to notarize the API request. You can use a different or [local notary](#run-a-local-notary-server); a local server will be faster due to the high bandwidth and low network latency.
3. Replace the websocket proxy URL:
diff --git a/demo/react-ts-webpack/src/app.tsx b/demo/react-ts-webpack/src/app.tsx
index 3abfdab..ccb0f89 100644
--- a/demo/react-ts-webpack/src/app.tsx
+++ b/demo/react-ts-webpack/src/app.tsx
@@ -26,13 +26,13 @@ root.render();
const local = true; // Toggle between local and remote notary
const notaryUrl = local
? 'http://localhost:7047'
- : 'https://notary.pse.dev/v0.1.0-alpha.10';
+ : 'https://notary.pse.dev/v0.1.0-alpha.11';
const websocketProxyUrl = local
? 'ws://localhost:55688'
: 'wss://notary.pse.dev/proxy?token=raw.githubusercontent.com';
const loggingLevel = 'Info'; // https://github.com/tlsnotary/tlsn/blob/main/crates/wasm/src/log.rs#L8
-const serverUrl = 'https://raw.githubusercontent.com/tlsnotary/tlsn/refs/tags/v0.1.0-alpha.10/crates/server-fixture/server/src/data/1kb.json';
+const serverUrl = 'https://raw.githubusercontent.com/tlsnotary/tlsn/refs/tags/v0.1.0-alpha.11/crates/server-fixture/server/src/data/1kb.json';
const serverDns = 'raw.githubusercontent.com';
function App(): ReactElement {
@@ -170,8 +170,8 @@ function App(): ReactElement {
const notaryKey = await notary.publicKey('hex');
const verifierOutput = await proof.verify();
const transcript = new Transcript({
- sent: verifierOutput.transcript.sent,
- recv: verifierOutput.transcript.recv,
+ sent: verifierOutput.transcript?.sent || [],
+ recv: verifierOutput.transcript?.recv || [],
});
const vk = await proof.verifyingKey();
setResult({
@@ -201,7 +201,7 @@ function App(): ReactElement {
More info
diff --git a/demo/web-to-web-p2p/src/app.tsx b/demo/web-to-web-p2p/src/app.tsx
index a265dd4..f5ea0d1 100644
--- a/demo/web-to-web-p2p/src/app.tsx
+++ b/demo/web-to-web-p2p/src/app.tsx
@@ -29,7 +29,7 @@ let verifierLogs: string[] = [];
const p2pProxyUrl = 'ws://localhost:3001';
const serverDns = 'raw.githubusercontent.com';
const webSocketProxy = `wss://notary.pse.dev/proxy?token=${serverDns}`;
-const requestUrl = `https://raw.githubusercontent.com/tlsnotary/tlsn/refs/tags/v0.1.0-alpha.10/crates/server-fixture/server/src/data/1kb.json`;
+const requestUrl = `https://raw.githubusercontent.com/tlsnotary/tlsn/refs/tags/v0.1.0-alpha.11/crates/server-fixture/server/src/data/1kb.json`;
function App(): ReactElement {
const [ready, setReady] = useState(false);
@@ -207,8 +207,8 @@ function App(): ReactElement {
addVerifierLog('Verification completed');
const t = new Transcript({
- sent: result.transcript.sent,
- recv: result.transcript.recv,
+ sent: result.transcript?.sent || [],
+ recv: result.transcript?.recv || [],
});
addVerifierLog('Verified data:');
@@ -225,7 +225,7 @@ function App(): ReactElement {
This demo showcases peer-to-peer communication between a web prover
and a web verifier using TLSNotary. The prover fetches data from{' '}
= 16.20.2"
},
"dependencies": {
- "tlsn-wasm": "0.1.0-alpha.10"
+ "tlsn-wasm": "0.1.0-alpha.11"
}
}
\ No newline at end of file
diff --git a/playwright-test/full-integration.spec.ts b/playwright-test/full-integration.spec.ts
index efd9908..3a032e8 100644
--- a/playwright-test/full-integration.spec.ts
+++ b/playwright-test/full-integration.spec.ts
@@ -13,7 +13,7 @@ test('full-integration', async ({ page }) => {
const json = await page.getByTestId('full-integration').innerText();
const { sent, recv, server_name, version, meta } = JSON.parse(json);
- expect(version).toBe('0.1.0-alpha.10');
+ expect(version).toBe('0.1.0-alpha.11');
expect(new URL(meta.notaryUrl!).protocol === 'http:');
expect(server_name).toBe('raw.githubusercontent.com');
diff --git a/playwright-test/simple-verify.spec.ts b/playwright-test/simple-verify.spec.ts
index f9343c4..6509b3b 100644
--- a/playwright-test/simple-verify.spec.ts
+++ b/playwright-test/simple-verify.spec.ts
@@ -14,7 +14,8 @@ test('simple verify', async ({ page }) => {
const { sent, recv } = JSON.parse(json);
expect(sent).toContain('host: raw.githubusercontent.com');
- expect(recv).toContain('"name": "John Doe"');
+ expect(recv).toContain('*******************');
expect(recv).toContain('"city": "Anytown"');
- expect(recv).toContain('"id": **********,');
+ expect(recv).toContain('"id": 1234567890');
+ expect(recv).toContain('"postalCode": "12345"');
});
diff --git a/quickstart.md b/quickstart.md
index e6c791a..8af53d9 100644
--- a/quickstart.md
+++ b/quickstart.md
@@ -36,10 +36,10 @@ For this demo, we also need to run a local notary server.
* Or, compile and run the notary server natively:
```sh
# Clone the TLSNotary repository:
- git clone https://github.com/tlsnotary/tlsn.git --branch "v0.1.0-alpha.10"
+ git clone https://github.com/tlsnotary/tlsn.git --branch "v0.1.0-alpha.11"
cd tlsn/crates/notary/server/
- # Run the ntoary server
- cargo run --release -- --tls-enabled false
+ # Run the notary server
+ cargo run --release
```
The notary server will now be running in the background waiting for connections.
diff --git a/src/lib.ts b/src/lib.ts
index 3d4faef..1108c7d 100644
--- a/src/lib.ts
+++ b/src/lib.ts
@@ -10,6 +10,7 @@ import initWasm, {
Prover as WasmProver,
type ProverConfig,
type Method,
+ NetworkSetting,
VerifierConfig,
VerifierOutput,
VerifyingKey,
@@ -19,7 +20,7 @@ import initWasm, {
PartialTranscript,
} from 'tlsn-wasm';
import { arrayToHex, expect, headerToMap, hexToArray } from './utils';
-import { PresentationJSON } from './types';
+import { PresentationJSON, } from './types';
import { Buffer } from 'buffer';
import { Transcript, subtractRanges, mapStringToRange } from './transcript';
@@ -79,6 +80,9 @@ export class Prover {
maxSentData?: number;
maxRecvData?: number;
maxRecvDataOnline?: number;
+ maxSentRecords?: number,
+ maxRecvRecords?: number,
+ network?: NetworkSetting
deferDecryptionFromStart?: boolean;
commit?: Commit;
}): Promise {
@@ -90,6 +94,9 @@ export class Prover {
maxSentData = 1024,
maxRecvData = 1024,
maxRecvDataOnline,
+ maxSentRecords,
+ maxRecvRecords,
+ network = 'Bandwidth',
deferDecryptionFromStart,
notaryUrl,
websocketProxyUrl,
@@ -103,6 +110,9 @@ export class Prover {
max_recv_data: maxRecvData,
max_recv_data_online: maxRecvDataOnline,
defer_decryption_from_start: deferDecryptionFromStart,
+ max_sent_records: maxSentRecords,
+ max_recv_records: maxRecvRecords,
+ network: network,
});
await prover.setup(await notary.sessionUrl(maxSentData, maxRecvData));
@@ -128,7 +138,7 @@ export class Prover {
const presentation = build_presentation(attestation, secrets, commit);
return {
- version: '0.1.0-alpha.10',
+ version: '0.1.0-alpha.11',
data: arrayToHex(presentation.serialize()),
meta: {
notaryUrl: notary.normalizeUrl(),
@@ -143,6 +153,9 @@ export class Prover {
maxRecvData?: number;
maxRecvDataOnline?: number;
deferDecryptionFromStart?: boolean;
+ max_sent_records?: number,
+ max_recv_records?: number,
+ network?: NetworkSetting
}) {
this.#config = {
server_name: config.serverDns,
@@ -150,6 +163,9 @@ export class Prover {
max_sent_data: config.maxSentData || 1024,
max_recv_data_online: config.maxRecvDataOnline,
defer_decryption_from_start: config.deferDecryptionFromStart,
+ max_sent_records: config.max_sent_records,
+ max_recv_records: config.max_recv_records,
+ network: config.network || 'Bandwidth',
};
this.#prover = new WasmProver(this.#config);
}
@@ -263,10 +279,12 @@ export class Verifier {
#config: VerifierConfig;
#verifier: WasmVerifier;
- constructor(config: { maxSentData?: number; maxRecvData?: number }) {
+ constructor(config: { maxSentData?: number; maxRecvData?: number; maxSentRecords?: number; maxRecvRecords?: number }) {
this.#config = {
max_recv_data: config.maxRecvData || 1024,
max_sent_data: config.maxSentData || 1024,
+ max_sent_records: config.maxSentRecords,
+ max_recv_records: config.maxRecvRecords,
};
this.#verifier = new WasmVerifier(this.#config);
}
@@ -331,7 +349,7 @@ export class Presentation {
async json(): Promise {
return {
- version: '0.1.0-alpha.10',
+ version: '0.1.0-alpha.11',
data: await this.serialize(),
meta: {
notaryUrl: this.#notaryUrl
diff --git a/src/types.ts b/src/types.ts
index 961ca55..d91dd89 100644
--- a/src/types.ts
+++ b/src/types.ts
@@ -4,7 +4,7 @@ export type CommitData = {
};
export type PresentationJSON = {
- version: '0.1.0-alpha.7' | '0.1.0-alpha.8' | '0.1.0-alpha.9' | '0.1.0-alpha.10';
+ version: '0.1.0-alpha.7' | '0.1.0-alpha.8' | '0.1.0-alpha.9' | '0.1.0-alpha.10' | '0.1.0-alpha.11';
data: string;
meta: {
notaryUrl?: string;
diff --git a/test/e2e/full-integration.spec.ts b/test/e2e/full-integration.spec.ts
index 5d75e9b..c1b4f66 100644
--- a/test/e2e/full-integration.spec.ts
+++ b/test/e2e/full-integration.spec.ts
@@ -23,7 +23,8 @@ const { init, Prover, Presentation }: any = Comlink.wrap(
console.time('prove');
const prover = (await new Prover({
serverDns: 'raw.githubusercontent.com',
- maxRecvData: 1700
+ maxRecvData: 1700,
+ network: "Bandwidth",
})) as _Prover;
const notary = NotaryServer.from('http://127.0.0.1:7047');
await prover.setup(await notary.sessionUrl());
diff --git a/test/e2e/simple-verify.spec.ts b/test/e2e/simple-verify.spec.ts
index 561d435..b608bef 100644
--- a/test/e2e/simple-verify.spec.ts
+++ b/test/e2e/simple-verify.spec.ts
@@ -13,7 +13,7 @@ const { init, Presentation }: any = Comlink.wrap(
await init({ loggingLevel: 'Debug' });
console.time('verify');
- const proofHex = `014000000000000000a1b7246d762c83b74830780ce6534adfd7aad9d984daeeb80577926e0b85b7ee0a0f48a1516aa5745cafa937ac6d31ae144fb2ea3acbb5132a4ac14ad90db2a190a03bbad11b3926836683ef942c591100000000022000000000000000dc1058c7334f0b4c410dab7b1b8027ef2af70458aeded9a6d5423fb6b0195a7a00000000012100000000000000037b48f19c139b6888fb5e383a4d72c2335186fd5858e7ae743ab4bf8e071b06e7010000001f9907680000000000000000170300001706000002000000000000004100000000000000045c3cc3619ab0170d7724db9d91ab426bba56e877ebb4d4d35f3a7e9d3fdf24a78d223141c3e12c2891763a8edefb75d261f04e765ad7a7fbd4391d1601986e05030000000220000000000000007ec0ee620736f65de47f4f2281cf02356f205c7751e9c2f195a62f4a370f5256010400000002200000000000000054aacb0178628f6c954d52f699d902ea25d4369843214bf1b72e02e043838949f0909206c8070957acf789290076b958d52a916df15b61251abf808abb286c4ce92f651b09f73d781624fcfe98fd503c0000000000000000000000000000000002050000000000000000000000000000000119000000000000007261772e67697468756275736572636f6e74656e742e636f6d03000000000000008906000000000000308206853082056da0030201020211009077344147316ef99599767aeafdf1b9300d06092a864886f70d01010b050030818f310b3009060355040613024742311b30190603550408131247726561746572204d616e636865737465723110300e0603550407130753616c666f726431183016060355040a130f5365637469676f204c696d69746564313730350603550403132e5365637469676f2052534120446f6d61696e2056616c69646174696f6e2053656375726520536572766572204341301e170d3235303330373030303030305a170d3236303330373233353935395a30163114301206035504030c0b2a2e6769746875622e696f30820122300d06092a864886f70d01010105000382010f003082010a0282010100c4a40b1255662582a767d76628c5ab6f87f2e015859bae7c1107a64b884982bb7ed4d1692f6b4655a16ea55c95def98aa2b097df37a373bfa01fc520a5e9a68fdaf9b64d4d6744975c02d38ef4f68b4de84aa8f00b3927f91d68d13620f86ecfc90e69135f0013e2b7554729721d5fe51c814c4bc4e3e1d4838ffa3a90086055739c9df293c6be6e8d62fc7069d8c6ed3f3b2c4a54fc98f2d8efa4844ed29dc2021d63dd4c913889775c742890ccd863ca33ba4d4dcf3534c4b0e96073b318383c56d1f81098f36fec62ef22332fc0758714cfbda18760c65e7572a73cd5fcb2e027f5403f99be99dd25547e4a206fdc76e0eb6a39682d0e0b28992d3b8566c10203010001a38203523082034e301f0603551d230418301680148d8c5ec454ad8ae177e99bf99b05e1b8018d61e1301d0603551d0e0416041412f07ed0316fe4af35b589fb42d9edb70b93cd04300e0603551d0f0101ff0404030205a0300c0603551d130101ff04023000301d0603551d250416301406082b0601050507030106082b0601050507030230490603551d20044230403034060b2b06010401b231010202073025302306082b06010505070201161768747470733a2f2f7365637469676f2e636f6d2f4350533008060667810c01020130818406082b0601050507010104783076304f06082b060105050730028643687474703a2f2f6372742e7365637469676f2e636f6d2f5365637469676f525341446f6d61696e56616c69646174696f6e53656375726553657276657243412e637274302306082b060105050730018617687474703a2f2f6f6373702e7365637469676f2e636f6d3082017e060a2b06010401d6790204020482016e0482016a0168007600969764bf555897adf743876837084277e9f03ad5f6a4f3366e46a43f0fcaa9c6000001956decac750000040300473045022100f98220b00a9bd9ca9056517824fd844485421f7457741ec38c83dce8287968ae022078ea52857b1793247dc210726767ed9e5447c9d8b4f03638bbd873798215c2ee0077001986d4c728aa6ffeba036f782a4d0191aace2d72310faece5d70412d254cc7d4000001956decac0e00000403004830460221008ebc806d7947b178ffbf87fb0965c9cc3517494baf0399111f776887858f5107022100be9e88c2aa10a7fd9ba96e7239d0ed53dc548a050bbf2ce677ddf029ccb25685007500cb38f715897c84a1445f5bc1ddfbc96ef29a59cd470a690585b0cb14c31458e7000001956decac37000004030046304402204bdf0bd43d96f27cd5ded210d11e14256c70c5bec8fd34fa7bd972d2703442c002205a65eecfd6035426cf5566f19b62868345b9b3bf02289a54669e0d08b39c7142307b0603551d1104743072820b2a2e6769746875622e696f820c2a2e6769746875622e636f6d82172a2e67697468756275736572636f6e74656e742e636f6d820a6769746875622e636f6d82096769746875622e696f821567697468756275736572636f6e74656e742e636f6d820e7777772e6769746875622e636f6d300d06092a864886f70d01010b05000382010100792c8d3542a6d5bd0ad6c15eefbb2767030e6291cff100914c8e36ea233a72a82377767f90d00e4ab3bbf8128fa076f183b76b8118164b6fc2adca9d702ef4acd23357a1961b4097196f8e3194817beec7b0e39c11f8d08b4a884ef6de8a5e5956e6d961317513d27249bf083c2c873d94dd29773375adbf4c4fb9926b835b4c20be7c46aad2e4fa45940208944502e9dafec5542bc0b35c61755582f66c4525ff61baf36e82cc81686e0d240f71a783187732ecdc516479a5a47cfefceb74ebb56ec631aa9bdbde28d19931476ba12fa8731009057bf76753420a8c2fa596b337129c71083b8b363077a1cbef458cc425855347bbd2ec3d299aad786ed255c4170600000000000030820613308203fba00302010202107d5b5126b476ba11db74160bbc530da7300d06092a864886f70d01010c0500308188310b3009060355040613025553311330110603550408130a4e6577204a6572736579311430120603550407130b4a65727365792043697479311e301c060355040a131554686520555345525452555354204e6574776f726b312e302c06035504031325555345525472757374205253412043657274696669636174696f6e20417574686f72697479301e170d3138313130323030303030305a170d3330313233313233353935395a30818f310b3009060355040613024742311b30190603550408131247726561746572204d616e636865737465723110300e0603550407130753616c666f726431183016060355040a130f5365637469676f204c696d69746564313730350603550403132e5365637469676f2052534120446f6d61696e2056616c69646174696f6e205365637572652053657276657220434130820122300d06092a864886f70d01010105000382010f003082010a0282010100d67333d6d73c20d000d21745b8d63e07a23fc741ee3230c9b06cfdf49fcb12980f2d3f8d4d010c820f177f622ee9b84879fb16834eadd7322593b707bfb9503fa94cc3402ae939ffd981ca1f163241da8026b9237a87201ee3ff209a3c95446f8775069040b4329316091008233ed2dd870f6f5d51146a0a69c54f017269cfd3934c6d04a0a31b827eb19ab9edc59ec537789f9a0834fb562e58c4090e06645bbc37dcf19f2868a856b092a35c9fbb8898081b241dab3085aeafb02e9e7a9dc1c0421ce202f0eae04ad2ef900eb4c14016f06f85424a64f7a430a0febf2ea3275a8e8b58b8adc319178463ed6f56fd83cb6034c474bee69ddbe1e4e5ca0c5f150203010001a382016e3082016a301f0603551d230418301680145379bf5aaa2b4acf5480e1d89bc09df2b20366cb301d0603551d0e041604148d8c5ec454ad8ae177e99bf99b05e1b8018d61e1300e0603551d0f0101ff04040302018630120603551d130101ff040830060101ff020100301d0603551d250416301406082b0601050507030106082b06010505070302301b0603551d200414301230060604551d20003008060667810c01020130500603551d1f044930473045a043a041863f687474703a2f2f63726c2e7573657274727573742e636f6d2f55534552547275737452534143657274696669636174696f6e417574686f726974792e63726c307606082b06010505070101046a3068303f06082b060105050730028633687474703a2f2f6372742e7573657274727573742e636f6d2f555345525472757374525341416464547275737443412e637274302506082b060105050730018619687474703a2f2f6f6373702e7573657274727573742e636f6d300d06092a864886f70d01010c0500038202010032bf61bd0e48c34fc7ba474df89c781901dc131d806ffcc370b4529a31339a5752fb319e6ba4ef54aa898d401768f811107cd2cab1f15586c7eeb3369186f63951bf46bf0fa0bab4f77e49c42a36179ee468397aaf944e566fb27b3bbf0a86bdcdc5771c03b838b1a21f5f7edb8adc4648b6680acfb2b5b4e234e467a93866095ed2b8fc9d283a174027c2724e29fd213c7ccf13fb962cc53144fd13edd59ba96968777ceee1ffa4f93638085339a284349c19f3be0eacd52437eb23a878d0d3e7ef924764623922efc6f711be2285c6664424268e10328dc893ae079e833e2fd9f9f5468e63bec1e6b4dca6cd21a8860a95d92e85261afdfcb1b657426d95d133f6391406824138f58f58dc805ba4d57d9578fda79bfffdc5a869ab26e7a7a405875ba9b7b8a3200b97a94585ddb38be589378e290dfc0617f638400e42e41206fb7bf3c6116862dfe398f413d8154f8bb169d91060bc642aea31b7e4b5a33a149b26e30b7bfd028eb699c138975936f6a874a286b65eebc664eacfa0a3f96e9eba2d11b6869808582dc9ac2564f25e75b438c1ae7f5a4683ea51cab6f19911356ba56a7bc600b0e7f8be64b2adc8c2f1ace351eaa493e079c8e18140c90a5be1123cc1602ae397c08942ca94cf46981269bb98d0c2d30d724b476ee593c43228638743e4b0323e0ad34bbf239b1429412b9a041f932df1c739483cad5a127f85050000000000003082058130820469a00302010202103972443af922b751d7d36c10dd313595300d06092a864886f70d01010c0500307b310b3009060355040613024742311b301906035504080c1247726561746572204d616e636865737465723110300e06035504070c0753616c666f7264311a3018060355040a0c11436f6d6f646f204341204c696d697465643121301f06035504030c18414141204365727469666963617465205365727669636573301e170d3139303331323030303030305a170d3238313233313233353935395a308188310b3009060355040613025553311330110603550408130a4e6577204a6572736579311430120603550407130b4a65727365792043697479311e301c060355040a131554686520555345525452555354204e6574776f726b312e302c06035504031325555345525472757374205253412043657274696669636174696f6e20417574686f7269747930820222300d06092a864886f70d01010105000382020f003082020a028202010080126517360ec3db08b3d0ac570d76edcd27d34cad508361e2aa204d092d6409dcce899fcc3da9ecf6cfc1dcf1d3b1d67b3728112b47da39c6bc3a19b45fa6bd7d9da36342b676f2a93b2b91f8e26fd0ec162090093ee2e874c918b491d46264db7fa306f188186a90223cbcfe13f087147bf6e41f8ed4e451c61167460851cb8614543fbc33fe7e6c9cff169d18bd518e35a6a766c87267db2166b1d49b7803c0503ae8ccf0dcbc9e4cfeaf0596351f575ab7ffcef93db72cb6f654ddc8e7123a4dae4c8ab75c9ab4b7203dca7f2234ae7e3b68660144e7014e46539b3360f794be5337907343f332c353efdbaafe744e69c76b8c6093dec4c70cdfe132aecc933b517895678bee3d56fe0cd0690f1b0ff325266b336df76e47fa7343e57e0ea566b1297c3284635589c40dc19354301913acd37d37a7eb5d3a6c355cdb41d712daa9490bdfd8808a0993628eb566cf2588cd84b8b13fa4390fd9029eeb124c957cf36b05a95e1683ccb867e2e8139dcc5b82d34cb3ed5bffdee573ac233b2d00bf3555740949d849581a7f9236e651920ef3267d1c4d17bcc9ec4326d0bf415f40a94444f499e757879e501f5754a83efd74632fb1506509e658422e431a4cb4f0254759fa041e93d426464a5081b2debe78b7fc6715e1c957841e0f63d6e962bad65f552eea5cc62808042539b80e2ba9f24c971c073f0d52f5edef2f820f0203010001a381f23081ef301f0603551d23041830168014a0110a233e96f107ece2af29ef82a57fd030a4b4301d0603551d0e041604145379bf5aaa2b4acf5480e1d89bc09df2b20366cb300e0603551d0f0101ff040403020186300f0603551d130101ff040530030101ff30110603551d20040a300830060604551d200030430603551d1f043c303a3038a036a0348632687474703a2f2f63726c2e636f6d6f646f63612e636f6d2f414141436572746966696361746553657276696365732e63726c303406082b0601050507010104283026302406082b060105050730018618687474703a2f2f6f6373702e636f6d6f646f63612e636f6d300d06092a864886f70d01010c05000382010100188751dc74213d9c8ae027b733d02eccecf0e6cb5e11de226f9b758e9e72fee4d6feaa1f9c962def034a7eaef48d6f723c433bc03febb8df5caaa9c6aef2fcd8eea37b43f686367c14e0cdf4f73ffedeb8b48af09196fefd43647efdccd201a17d7df81919c9422b13bf588bbaa4a266047688914e0c8914cea24dc932b3bae8141abc71f15bf0410b98000a220310e50cb1f9cd923719ed3bf1e43ab6f945132675afbbaaef3f7b773bd2c402913d1900d3175c39db3f7b180d45cd9385962f5ddf59164f3f51bdd545183fed4a8ee80661742316b50d50732744477f105d892a6b853114c4e8a96a4c80bc6a78cfb87f8e7672990c9dfed7910816a1a35f95080000000001000000000000a0f1fccbba723beefffe59543cf22a7d6f13dc308a54f9202d9179ff70ab434845ba5ab6e6d4c34b06980ce2b6d16e31ea4e474a8f255159d43d3b290e3a587c86fcba6fa6e0a7744662f5bf804645b78b866847d3799e9d193bb45b78edfec92c372cacacf52d24d3e95aa85dc82eeb6aa445f55c2d47992cdb75be66dc6d0a8bf98f24cc603a6399ea9337a27cd3a27e1fbb2cfa579e47ddeeae98a1f83d05c05986cca05dfedfde68b373575c8fcd929f6a6b0e92bd0a669ae91a160d585d910b89712ef493a003945620900780755272aa53aa6227a38cb1d3e8ec1421f175686fea6219dbda10aba3497107becb82d06a89b523795419c79c2ba418e9e400000000c1e3ace6c59d24e98485afd84e4124aa1f806f2e77a90651066fc8a1b54ef7eb6807991f3ffbb1b847b25f10df23de837871c66fca10460b444f574e47524401000000004100000000000000045c3cc3619ab0170d7724db9d91ab426bba56e877ebb4d4d35f3a7e9d3fdf24a78d223141c3e12c2891763a8edefb75d261f04e765ad7a7fbd4391d1601986e052142b2804e28bfad32f7f2b290aad5230101020f0000000000000000000000000000000f00000000000000080000000000000000000000010000000000000048020000000000004a0200000000000002000000000000000d0af196181554c44c563e056ed8a1d15c6403000000000000000000000001000000000000004d010000000000004f0100000000000002000000000000000d0ab1c1b3b3fe3e7122ff66db94f2306a4c0400000000000000000000000100000000000000cc02000000000000ce0200000000000002000000000000000d0a703b5f3b8645f6e384901c06a3f6cddd0200000000000000000000000100000000000000180100000000000035010000000000001d000000000000000d0a6163636570742d656e636f64696e673a206964656e746974790d0a86d96c79e411a2194887870acdba01db05000000000000000000000001000000000000009401000000000000960100000000000002000000000000000d0a988dce537b415ac1c669ccb3140bb0cb000000000000000000000000010000000000000017020000000000002c0200000000000015000000000000000d0a636f6e6e656374696f6e3a20636c6f73650d0abcc04b11b84822ac2be9dbb40ce08a710c000000000000000000000001000000000000006701000000000000690100000000000002000000000000000d0a49a7df1bfcdccb7198686245c032104e06000000000000000000000001000000000000001303000000000000170300000000000004000000000000000d0a0d0a8212644ad876213540dffe23eb843a390900000000000000000000000100000000000000e202000000000000e40200000000000002000000000000000d0a7cb4c2806ab12241e0ff3682a1588e5e0700000000000000010000000100000000000000d005000000000000170600000000000047000000000000002c0a20202020226c617374557064617465644174223a2022323032332d30312d31325431363a34323a31305a222c0a202020202276657273696f6e223a20312e320a20207d0a7dce5d50f60b72b8ed3b04bc144015d5210a00000000000000000000000100000000000000ff02000000000000010300000000000002000000000000000d0af28efff84e7e5aac1804cdf61eae3e0c0b00000000000000010000000100000000000000000000000000000086030000000000008603000000000000485454502f312e3120323030204f4b0d0a436f6e6e656374696f6e3a20636c6f73650d0a436f6e74656e742d4c656e6774683a203636370d0a43616368652d436f6e74726f6c3a206d61782d6167653d3330300d0a436f6e74656e742d53656375726974792d506f6c6963793a2064656661756c742d73726320276e6f6e65273b207374796c652d7372632027756e736166652d696e6c696e65273b2073616e64626f780d0a436f6e74656e742d547970653a20746578742f706c61696e3b20636861727365743d7574662d380d0a455461673a202262343238336233653662326561376530363739613230333464363362646132363039633165663433353931346638343231633366666530636636383261363839220d0a5374726963742d5472616e73706f72742d53656375726974793a206d61782d6167653d33313533363030300d0a582d436f6e74656e742d547970652d4f7074696f6e733a206e6f736e6966660d0a582d4672616d652d4f7074696f6e733a2064656e790d0a582d5853532d50726f74656374696f6e3a20313b206d6f64653d626c6f636b0d0a582d4769744875622d526571756573742d49643a20453842453a3231433141393a3938453230463a4144323533453a36383037393743420d0a4163636570742d52616e6765733a2062797465730d0a446174653a205475652c2032322041707220323032352031333a32363a353620474d540d0a5669613a20312e31207661726e6973680d0a582d5365727665642d42793a2063616368652d616d7332313035302d414d530d0a582d43616368653a204849540d0a582d43616368652d486974733a20300d0a582d54696d65723a2053313734353332383431372e3538313631342c5653302c56453135320d0a566172793a20417574686f72697a6174696f6e2c4163636570742d456e636f64696e672c4f726967696e0d0a4163636573732d436f6e74726f6c2d416c6c6f772d4f726967696e3a202a0d0a43726f73732d4f726967696e2d5265736f757263652d506f6c6963793a2063726f73732d6f726967696e0d0a582d466173746c792d526571756573742d49443a20356233646636353533333938343766613037656364623930386539356362343966383238613666330d0a457870697265733a205475652c2032322041707220323032352031333a33313a353620474d540d0a536f757263652d4167653a20300d0a0d0a7b0a2020226964223a209e0713e5584472033f4b46dc22adde6401000000000000000100000001000000000000009003000000000000ba050000000000002a020000000000002c0a202022696e666f726d6174696f6e223a207b0a20202020226e616d65223a20224a6f686e20446f65222c0a202020202261646472657373223a207b0a20202020202022737472656574223a202231323320456c6d20537472656574222c0a2020202020202263697479223a2022416e79746f776e222c0a202020202020227374617465223a20225859222c0a20202020202022706f7374616c436f6465223a20223132333435220a202020207d2c0a20202020226661766f72697465436f6c6f7273223a205b0a20202020202022626c7565222c0a20202020202022726564222c0a20202020202022677265656e222c0a2020202020202279656c6c6f77220a202020205d2c0a20202020226465736372697074696f6e223a20224a6f686e206973206120736f66747761726520656e67696e6565722e20486520656e6a6f79732068696b696e672c20706c6179696e6720766964656f2067616d65732c20616e642072656164696e6720626f6f6b732e20486973206661766f7269746520626f6f6b20697320274d6f6279204469636b272e222c0a2020202022656475636174696f6e223a207b0a20202020202022646567726565223a202242616368656c6f72277320696e20436f6d707574657220536369656e6365222c0a202020202020227363686f6f6c223a2022416e79746f776e20556e6976657273697479220a202020207d0a20207d2c0a2020226d657461223a207b0a2020202022637265617465644174223a20798b160cac038f70bcef687b89d565a20d000000000000000000000001000000000000005e02000000000000810200000000000023000000000000000d0a686f73743a207261772e67697468756275736572636f6e74656e742e636f6d0d0acf70b35b8c20d8180e1eba0493b82af00e000000000000000000000001000000000000000000000000000000890000000000000089000000000000004745542068747470733a2f2f7261772e67697468756275736572636f6e74656e742e636f6d2f746c736e6f746172792f746c736e2f726566732f68656164732f6d61696e2f6372617465732f7365727665722d666978747572652f7365727665722f7372632f646174612f70726f7465637465645f646174612e6a736f6e20485454502f312e310d0ad7038194fab5e523f14bec72f44f13100000000000000000`;
+ const proofHex = `014000000000000000b0098ca39b2c80085ef677b67b38fdacf6e1572d83d360d5cfd3fd46d16a89ab479b6a52346ea530cd763f51e6320a8efeedf6af9a91cac94755a6eb96287adae4d60fcf1cadd5fd17bf8b5dcbb10fde00000000022000000000000000199653c5bbc0519d06dada67718d1a0514e0cf23a0dcf286523ab11b826e4d3800000000012100000000000000030da85d8da9b3436500e52d60f2c15c7605ed9f05953d02294a5ba0b5b9281a9a0100000096b536680000000000000000f4000000130600000200000000000000410000000000000004f885ed8a8d7fd6fd3a18176f8bcaa3831ab2b4c6d5373ce0023aac7bf41d4dc4b0e62f6eb925fd14567cf2e8a3615015e7ea63e8ed24db2bd350a3b45cafa6ea03000000022000000000000000d755aeded66861fc534828213198e2483ef90e09166f71c318d38a02a9a9cda500000000000000000100000000000000040000000000000002200000000000000092687333a61907987e3458bc6c67aabba4abbe3cf0d105e9d943830758e5f61121ba07327eccfc647e610d08926b7781b58c54d336cd820460b622915df2f3d7bd51bf6e25c5a19f68de0536337714ca02050000000000000000000000000000000119000000000000007261772e67697468756275736572636f6e74656e742e636f6d03000000000000008906000000000000308206853082056da0030201020211009077344147316ef99599767aeafdf1b9300d06092a864886f70d01010b050030818f310b3009060355040613024742311b30190603550408131247726561746572204d616e636865737465723110300e0603550407130753616c666f726431183016060355040a130f5365637469676f204c696d69746564313730350603550403132e5365637469676f2052534120446f6d61696e2056616c69646174696f6e2053656375726520536572766572204341301e170d3235303330373030303030305a170d3236303330373233353935395a30163114301206035504030c0b2a2e6769746875622e696f30820122300d06092a864886f70d01010105000382010f003082010a0282010100c4a40b1255662582a767d76628c5ab6f87f2e015859bae7c1107a64b884982bb7ed4d1692f6b4655a16ea55c95def98aa2b097df37a373bfa01fc520a5e9a68fdaf9b64d4d6744975c02d38ef4f68b4de84aa8f00b3927f91d68d13620f86ecfc90e69135f0013e2b7554729721d5fe51c814c4bc4e3e1d4838ffa3a90086055739c9df293c6be6e8d62fc7069d8c6ed3f3b2c4a54fc98f2d8efa4844ed29dc2021d63dd4c913889775c742890ccd863ca33ba4d4dcf3534c4b0e96073b318383c56d1f81098f36fec62ef22332fc0758714cfbda18760c65e7572a73cd5fcb2e027f5403f99be99dd25547e4a206fdc76e0eb6a39682d0e0b28992d3b8566c10203010001a38203523082034e301f0603551d230418301680148d8c5ec454ad8ae177e99bf99b05e1b8018d61e1301d0603551d0e0416041412f07ed0316fe4af35b589fb42d9edb70b93cd04300e0603551d0f0101ff0404030205a0300c0603551d130101ff04023000301d0603551d250416301406082b0601050507030106082b0601050507030230490603551d20044230403034060b2b06010401b231010202073025302306082b06010505070201161768747470733a2f2f7365637469676f2e636f6d2f4350533008060667810c01020130818406082b0601050507010104783076304f06082b060105050730028643687474703a2f2f6372742e7365637469676f2e636f6d2f5365637469676f525341446f6d61696e56616c69646174696f6e53656375726553657276657243412e637274302306082b060105050730018617687474703a2f2f6f6373702e7365637469676f2e636f6d3082017e060a2b06010401d6790204020482016e0482016a0168007600969764bf555897adf743876837084277e9f03ad5f6a4f3366e46a43f0fcaa9c6000001956decac750000040300473045022100f98220b00a9bd9ca9056517824fd844485421f7457741ec38c83dce8287968ae022078ea52857b1793247dc210726767ed9e5447c9d8b4f03638bbd873798215c2ee0077001986d4c728aa6ffeba036f782a4d0191aace2d72310faece5d70412d254cc7d4000001956decac0e00000403004830460221008ebc806d7947b178ffbf87fb0965c9cc3517494baf0399111f776887858f5107022100be9e88c2aa10a7fd9ba96e7239d0ed53dc548a050bbf2ce677ddf029ccb25685007500cb38f715897c84a1445f5bc1ddfbc96ef29a59cd470a690585b0cb14c31458e7000001956decac37000004030046304402204bdf0bd43d96f27cd5ded210d11e14256c70c5bec8fd34fa7bd972d2703442c002205a65eecfd6035426cf5566f19b62868345b9b3bf02289a54669e0d08b39c7142307b0603551d1104743072820b2a2e6769746875622e696f820c2a2e6769746875622e636f6d82172a2e67697468756275736572636f6e74656e742e636f6d820a6769746875622e636f6d82096769746875622e696f821567697468756275736572636f6e74656e742e636f6d820e7777772e6769746875622e636f6d300d06092a864886f70d01010b05000382010100792c8d3542a6d5bd0ad6c15eefbb2767030e6291cff100914c8e36ea233a72a82377767f90d00e4ab3bbf8128fa076f183b76b8118164b6fc2adca9d702ef4acd23357a1961b4097196f8e3194817beec7b0e39c11f8d08b4a884ef6de8a5e5956e6d961317513d27249bf083c2c873d94dd29773375adbf4c4fb9926b835b4c20be7c46aad2e4fa45940208944502e9dafec5542bc0b35c61755582f66c4525ff61baf36e82cc81686e0d240f71a783187732ecdc516479a5a47cfefceb74ebb56ec631aa9bdbde28d19931476ba12fa8731009057bf76753420a8c2fa596b337129c71083b8b363077a1cbef458cc425855347bbd2ec3d299aad786ed255c4170600000000000030820613308203fba00302010202107d5b5126b476ba11db74160bbc530da7300d06092a864886f70d01010c0500308188310b3009060355040613025553311330110603550408130a4e6577204a6572736579311430120603550407130b4a65727365792043697479311e301c060355040a131554686520555345525452555354204e6574776f726b312e302c06035504031325555345525472757374205253412043657274696669636174696f6e20417574686f72697479301e170d3138313130323030303030305a170d3330313233313233353935395a30818f310b3009060355040613024742311b30190603550408131247726561746572204d616e636865737465723110300e0603550407130753616c666f726431183016060355040a130f5365637469676f204c696d69746564313730350603550403132e5365637469676f2052534120446f6d61696e2056616c69646174696f6e205365637572652053657276657220434130820122300d06092a864886f70d01010105000382010f003082010a0282010100d67333d6d73c20d000d21745b8d63e07a23fc741ee3230c9b06cfdf49fcb12980f2d3f8d4d010c820f177f622ee9b84879fb16834eadd7322593b707bfb9503fa94cc3402ae939ffd981ca1f163241da8026b9237a87201ee3ff209a3c95446f8775069040b4329316091008233ed2dd870f6f5d51146a0a69c54f017269cfd3934c6d04a0a31b827eb19ab9edc59ec537789f9a0834fb562e58c4090e06645bbc37dcf19f2868a856b092a35c9fbb8898081b241dab3085aeafb02e9e7a9dc1c0421ce202f0eae04ad2ef900eb4c14016f06f85424a64f7a430a0febf2ea3275a8e8b58b8adc319178463ed6f56fd83cb6034c474bee69ddbe1e4e5ca0c5f150203010001a382016e3082016a301f0603551d230418301680145379bf5aaa2b4acf5480e1d89bc09df2b20366cb301d0603551d0e041604148d8c5ec454ad8ae177e99bf99b05e1b8018d61e1300e0603551d0f0101ff04040302018630120603551d130101ff040830060101ff020100301d0603551d250416301406082b0601050507030106082b06010505070302301b0603551d200414301230060604551d20003008060667810c01020130500603551d1f044930473045a043a041863f687474703a2f2f63726c2e7573657274727573742e636f6d2f55534552547275737452534143657274696669636174696f6e417574686f726974792e63726c307606082b06010505070101046a3068303f06082b060105050730028633687474703a2f2f6372742e7573657274727573742e636f6d2f555345525472757374525341416464547275737443412e637274302506082b060105050730018619687474703a2f2f6f6373702e7573657274727573742e636f6d300d06092a864886f70d01010c0500038202010032bf61bd0e48c34fc7ba474df89c781901dc131d806ffcc370b4529a31339a5752fb319e6ba4ef54aa898d401768f811107cd2cab1f15586c7eeb3369186f63951bf46bf0fa0bab4f77e49c42a36179ee468397aaf944e566fb27b3bbf0a86bdcdc5771c03b838b1a21f5f7edb8adc4648b6680acfb2b5b4e234e467a93866095ed2b8fc9d283a174027c2724e29fd213c7ccf13fb962cc53144fd13edd59ba96968777ceee1ffa4f93638085339a284349c19f3be0eacd52437eb23a878d0d3e7ef924764623922efc6f711be2285c6664424268e10328dc893ae079e833e2fd9f9f5468e63bec1e6b4dca6cd21a8860a95d92e85261afdfcb1b657426d95d133f6391406824138f58f58dc805ba4d57d9578fda79bfffdc5a869ab26e7a7a405875ba9b7b8a3200b97a94585ddb38be589378e290dfc0617f638400e42e41206fb7bf3c6116862dfe398f413d8154f8bb169d91060bc642aea31b7e4b5a33a149b26e30b7bfd028eb699c138975936f6a874a286b65eebc664eacfa0a3f96e9eba2d11b6869808582dc9ac2564f25e75b438c1ae7f5a4683ea51cab6f19911356ba56a7bc600b0e7f8be64b2adc8c2f1ace351eaa493e079c8e18140c90a5be1123cc1602ae397c08942ca94cf46981269bb98d0c2d30d724b476ee593c43228638743e4b0323e0ad34bbf239b1429412b9a041f932df1c739483cad5a127f85050000000000003082058130820469a00302010202103972443af922b751d7d36c10dd313595300d06092a864886f70d01010c0500307b310b3009060355040613024742311b301906035504080c1247726561746572204d616e636865737465723110300e06035504070c0753616c666f7264311a3018060355040a0c11436f6d6f646f204341204c696d697465643121301f06035504030c18414141204365727469666963617465205365727669636573301e170d3139303331323030303030305a170d3238313233313233353935395a308188310b3009060355040613025553311330110603550408130a4e6577204a6572736579311430120603550407130b4a65727365792043697479311e301c060355040a131554686520555345525452555354204e6574776f726b312e302c06035504031325555345525472757374205253412043657274696669636174696f6e20417574686f7269747930820222300d06092a864886f70d01010105000382020f003082020a028202010080126517360ec3db08b3d0ac570d76edcd27d34cad508361e2aa204d092d6409dcce899fcc3da9ecf6cfc1dcf1d3b1d67b3728112b47da39c6bc3a19b45fa6bd7d9da36342b676f2a93b2b91f8e26fd0ec162090093ee2e874c918b491d46264db7fa306f188186a90223cbcfe13f087147bf6e41f8ed4e451c61167460851cb8614543fbc33fe7e6c9cff169d18bd518e35a6a766c87267db2166b1d49b7803c0503ae8ccf0dcbc9e4cfeaf0596351f575ab7ffcef93db72cb6f654ddc8e7123a4dae4c8ab75c9ab4b7203dca7f2234ae7e3b68660144e7014e46539b3360f794be5337907343f332c353efdbaafe744e69c76b8c6093dec4c70cdfe132aecc933b517895678bee3d56fe0cd0690f1b0ff325266b336df76e47fa7343e57e0ea566b1297c3284635589c40dc19354301913acd37d37a7eb5d3a6c355cdb41d712daa9490bdfd8808a0993628eb566cf2588cd84b8b13fa4390fd9029eeb124c957cf36b05a95e1683ccb867e2e8139dcc5b82d34cb3ed5bffdee573ac233b2d00bf3555740949d849581a7f9236e651920ef3267d1c4d17bcc9ec4326d0bf415f40a94444f499e757879e501f5754a83efd74632fb1506509e658422e431a4cb4f0254759fa041e93d426464a5081b2debe78b7fc6715e1c957841e0f63d6e962bad65f552eea5cc62808042539b80e2ba9f24c971c073f0d52f5edef2f820f0203010001a381f23081ef301f0603551d23041830168014a0110a233e96f107ece2af29ef82a57fd030a4b4301d0603551d0e041604145379bf5aaa2b4acf5480e1d89bc09df2b20366cb300e0603551d0f0101ff040403020186300f0603551d130101ff040530030101ff30110603551d20040a300830060604551d200030430603551d1f043c303a3038a036a0348632687474703a2f2f63726c2e636f6d6f646f63612e636f6d2f414141436572746966696361746553657276696365732e63726c303406082b0601050507010104283026302406082b060105050730018618687474703a2f2f6f6373702e636f6d6f646f63612e636f6d300d06092a864886f70d01010c05000382010100188751dc74213d9c8ae027b733d02eccecf0e6cb5e11de226f9b758e9e72fee4d6feaa1f9c962def034a7eaef48d6f723c433bc03febb8df5caaa9c6aef2fcd8eea37b43f686367c14e0cdf4f73ffedeb8b48af09196fefd43647efdccd201a17d7df81919c9422b13bf588bbaa4a266047688914e0c8914cea24dc932b3bae8141abc71f15bf0410b98000a220310e50cb1f9cd923719ed3bf1e43ab6f945132675afbbaaef3f7b773bd2c402913d1900d3175c39db3f7b180d45cd9385962f5ddf59164f3f51bdd545183fed4a8ee80661742316b50d50732744477f105d892a6b853114c4e8a96a4c80bc6a78cfb87f8e7672990c9dfed7910816a1a35f95080000000001000000000000807075ac0db7f9f53b63fe8b0234b52ffe013c384d8c3b4519b8f226e6730beab8e5aa9d42113e89e34d44b958f55c9a2f22a82cc957e85cd9894c6d234db194d41c08542c34fd39220111c85c5ca1e2e4a707a3d67ac2f0561a3fa211925cbe7aff3f75af0f58884a04570d52d9378b70b6007c47f58a7759f02929040da024156ac40698910ed02a756c125f6368f698919cc6b0edb796ee589962e597869ad7f6715b04cfb82b76de71a13ef5297cdeb86416b31bb884b4de3f09da7c7f98311557745efd3910a33bd395262526539a88783678823a4daabf2d709f71f02fc520cce39e14d07fa7d64f02b88e4449c7811288e04189d9f58a69e7fc9146f1000000001625cce068c27f9c28ecfc10acb4f6fa495799456ff44f6539a52f1725f2cc306836b596128b669333c0dcd38fa7ff41b6db10cabeb3e1dc444f574e4752440100000000410000000000000004f885ed8a8d7fd6fd3a18176f8bcaa3831ab2b4c6d5373ce0023aac7bf41d4dc4b0e62f6eb925fd14567cf2e8a3615015e7ea63e8ed24db2bd350a3b45cafa6eaad0b5d443a99a9eb8688bc13a2fe18a601e1000000000000004745542068747470733a2f2f7261772e67697468756275736572636f6e74656e742e636f6d2f746c736e6f746172792f746c736e2f726566732f68656164732f6d61696e2f6372617465732f7365727665722d666978747572652f7365727665722f7372632f646174612f70726f7465637465645f646174612e6a736f6e20485454502f312e310d0a636f6e6e656374696f6e3a20636c6f73650d0a686f73743a207261772e67697468756275736572636f6e74656e742e636f6d0d0a0d0a636f6e74656e742d747970653a206170706c69636174696f6e2f6a736f6e0d0a0d0aa501000000000000485454502f312e3120323030204f4b0d0a43616368652d436f6e74726f6c3a206d61782d6167653d3330300d0a436f6e74656e742d53656375726974792d506f6c6963793a2064656661756c742d73726320276e6f6e65273b207374796c652d7372632027756e736166652d696e6c696e65273b2073616e64626f780d0a436f6e74656e742d547970653a20746578742f706c61696e3b20636861727365743d7574662d380d0a455461673a202262343238336233653662326561376530363739613230333464363362646132363039633165663433353931346638343231633366666530636636383261363839220d0a5374726963742d5472616e73706f72742d53656375726974793a206d61782d6167653d3331353336303030582d436f6e74656e742d547970652d4f7074696f6e733a206e6f736e696666582d4672616d652d4f7074696f6e733a2064656e79582d5853532d50726f74656374696f6e3a20313b206d6f64653d626c6f636b226964223a20313233343536373839302263697479223a2022416e79746f776e2222706f7374616c436f6465223a202231323334352202000000000000000000000000000000bd00000000000000d000000000000000f400000000000000080000000000000000000000000000001100000000000000390000000000000044010000000000004601000000000000650100000000000067010000000000007c010000000000007e010000000000009d010000000000007c030000000000008c03000000000000f203000000000000030400000000000020040000000000003504000000000000f400000000000000130600000000000001020e0000000000000000000000000000000e000000000000000b00000000000000010000000100000000000000200400000000000035040000000000009efd5f7c72134a54d5bb3c54b2825c7a02000000000000000100000001000000000000007e010000000000009d0100000000000055242b5ed15958771b7abd26cd6fa3b7000000000000000001000000010000000000000039000000000000005500000000000000e708104c63bcc9f67c7c5e620b3f06af06000000000000000100000001000000000000000000000000000000110000000000000057c0914e57810ee2abd8684617a2f1660a00000000000000010000000100000000000000f203000000000000030400000000000070a61f16f45c8111734c2bb1908471a903000000000000000100000001000000000000001901000000000000440100000000000031d11918b068c91dad429ecfd1eeccbc0d00000000000000010000000100000000000000cf0000000000000019010000000000005ab9ebf19270ae59d70bb2c8dca4080b04000000000000000100000001000000000000005500000000000000a6000000000000008e841a1946e87bb5e2e87b3ecaf71ae60700000000000000010000000100000000000000460100000000000065010000000000007a458714efc9803403cb56fe30a5e1340500000000000000000000000100000000000000d000000000000000f400000000000000a150b03efbdd2302f0f058fc3a0dbfff0100000000000000010000000100000000000000a600000000000000cf00000000000000fe86e5f430e6b2f38fa7b96aa2b18645080000000000000001000000010000000000000067010000000000007c01000000000000fa641e31531fc003e9fc98f36d80a1540c000000000000000000000001000000000000000000000000000000bd00000000000000b12fa5c50728418dd8a6ccfcaf6d52b209000000000000000100000001000000000000007c030000000000008c0300000000000053c8fd372559e892423811e68a8bacbe0000000000000000`;
const proof = (await new Presentation(proofHex)) as _Presentation;
const result = await proof.verify();
console.timeEnd('verify');