plugin sdk presentation

This commit is contained in:
Hendrik Eeckhaut
2025-06-23 14:59:16 +01:00
parent 3bb0f33988
commit 73f6caa7af
8 changed files with 546 additions and 0 deletions

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 97 KiB

View File

@@ -0,0 +1,10 @@
* https://marpit.marp.app/
* https://chris-ayers.com/2023/03/31/customizing-marp
```
brew install marp-cli
```
```
marp sdk.md --preview
```

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 32 KiB

View File

@@ -0,0 +1,61 @@
<mxfile host="Electron" agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/27.0.5 Chrome/134.0.6998.205 Electron/35.3.0 Safari/537.36" version="27.0.5">
<diagram name="Page-1" id="ZVzS0hWE6rFlb-wLMT9V">
<mxGraphModel dx="1190" dy="694" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="wI3hIcFJyoDZbVb4rXhT-1" value="&lt;font style=&quot;font-size: 20px;&quot;&gt;Desktop&lt;br&gt;App&lt;/font&gt;" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="50" y="180" width="90" height="60" as="geometry" />
</mxCell>
<mxCell id="wI3hIcFJyoDZbVb4rXhT-2" value="&lt;span style=&quot;font-size: 20px;&quot;&gt;Browser&lt;/span&gt;" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="150" y="180" width="90" height="60" as="geometry" />
</mxCell>
<mxCell id="wI3hIcFJyoDZbVb4rXhT-3" value="&lt;span style=&quot;font-size: 20px;&quot;&gt;Mobile&lt;br&gt;App&lt;/span&gt;" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="250" y="180" width="90" height="60" as="geometry" />
</mxCell>
<mxCell id="wI3hIcFJyoDZbVb4rXhT-4" value="&lt;span style=&quot;font-size: 20px;&quot;&gt;Plugin&lt;br&gt;Tester&lt;/span&gt;" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="350" y="180" width="90" height="60" as="geometry" />
</mxCell>
<mxCell id="wI3hIcFJyoDZbVb4rXhT-5" value="Plugin" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="55" y="240" width="40" height="30" as="geometry" />
</mxCell>
<mxCell id="wI3hIcFJyoDZbVb4rXhT-6" value="Plugin" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="95" y="240" width="40" height="30" as="geometry" />
</mxCell>
<mxCell id="wI3hIcFJyoDZbVb4rXhT-7" value="Plugin" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="155" y="240" width="40" height="30" as="geometry" />
</mxCell>
<mxCell id="wI3hIcFJyoDZbVb4rXhT-8" value="Plugin" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="195" y="240" width="40" height="30" as="geometry" />
</mxCell>
<mxCell id="wI3hIcFJyoDZbVb4rXhT-9" value="Plugin" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="255" y="240" width="40" height="30" as="geometry" />
</mxCell>
<mxCell id="wI3hIcFJyoDZbVb4rXhT-10" value="Plugin" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="295" y="240" width="40" height="30" as="geometry" />
</mxCell>
<mxCell id="wI3hIcFJyoDZbVb4rXhT-11" value="Plugin" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="355" y="240" width="40" height="30" as="geometry" />
</mxCell>
<mxCell id="wI3hIcFJyoDZbVb4rXhT-12" value="Plugin" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="395" y="240" width="40" height="30" as="geometry" />
</mxCell>
<mxCell id="wI3hIcFJyoDZbVb4rXhT-15" value="&lt;span style=&quot;font-size: 20px;&quot;&gt;Verifier&lt;br&gt;Server&lt;/span&gt;" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="630" y="180" width="90" height="60" as="geometry" />
</mxCell>
<mxCell id="wI3hIcFJyoDZbVb4rXhT-16" value="Plugin" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="635" y="240" width="40" height="30" as="geometry" />
</mxCell>
<mxCell id="wI3hIcFJyoDZbVb4rXhT-17" value="Plugin" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="675" y="240" width="40" height="30" as="geometry" />
</mxCell>
<mxCell id="wI3hIcFJyoDZbVb4rXhT-18" value="" style="shape=flexArrow;endArrow=classic;startArrow=classic;html=1;rounded=0;width=25.555555555555554;endSize=7.444444444444445;" edge="1" parent="1">
<mxGeometry width="100" height="100" relative="1" as="geometry">
<mxPoint x="480" y="220" as="sourcePoint" />
<mxPoint x="590" y="220" as="targetPoint" />
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 123 KiB

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,144 @@
---
theme: gaia
class: invert
paginate: true
marp: true
style: |
.columns {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 1rem;
}
---
<!-- _class: lead invert -->
# TLSNotary SDK
A modular SDK for private web data verification
without compromising flexibility, privacy, or security.
---
<!-- Speaker notes go here. -->
## From Breakthrough to SDK
- ✅ TLSNotary: zkTLS **0 → 1**
- 🔓 Censorship-resistant, open source, private, and secure
- ⚠️ Next challenge: safe & flexible developer experience
---
## What Does TLSNotary Proving Involve?
![](https://tlsnotary.org/assets/images/overview_prover_verifier-d1c5dd944ba01e3fe8983375aad61c1e.svg#gh-dark-mode-only)
1. **Prover** creates request (with headers, cookies, payload)
2. **Prover** redacts/zkps sensitive parts
3. **Verifier** validates the revealed data
4. **Verifier** performs a follow-up action (e.g., attestation)
---
## Challenge: How to Use TLSNotary in Practice?
- TLSNotary is a Rust library 🦀 (+WASM 🌍)
- Clone getting started examples (low level)
- Clone our browser extension (requires access to **all data on all sites** 😱)
How to ensure that:
- it is secure?
- user privacy is truly protected?
---
## Insight: App Logic Is "Same But Different"
- Wide variety of integration patterns across **web, mobile, and server environments**
- A structured solution is required to handle diverse use cases safely and allow for independent **audits**
---
## Solution: SDK with Plugin System
- App-specific logic lives in isolated plugins
- TLSNotary runtime handles the rest
Web, Mobile, Desktop, Server runtimes (wasm/native bindings)
_Plugin-style architecture, running in a secure sandbox._
![bg vertical 80%](./none)
![bg vertical 80%](./plugins.svg)
---
<!-- - Plugins allow for independent inspection
-->
## What Exactly Is a Plugin?
- Small WebAssembly module defining app-specific logic
- Called by the TLSNotary runtime during proof or verification
- Written in Rust, TypeScript, or any WASM-compatible language
- Compiled, auditable, and sandboxed
_(We currently use [Extism](https://extism.org/) to handle this.)_
![bg vertical 80%](./none)
![bg vertical 80%](./plugins.svg)
---
## Why Not Simple Templates?
- **Templates** cover common cases but break under edge-case needs
- Rigid approaches lead to workarounds and **security** risks
A simple template engine could be added as a plugin (e.g., to support Reclaim templates).
---
## Prover Plugins: Creating proofs
- Developed by app developer (often also the verifier)
- Should be open source
- Balance between:
- user privacy
- verifiability (valid JSON with "holes")
- ease of development
- Handles 2 major application specific tasks:
- Creating requests requires input: headers, cookies, etc.
- Redaction (more complicated than it sounds)
---
## Verifier Plugins: Interpreting Proofs Safely
- Can be closed source
- Verification on multiple levels:
- TLSNotary checks protocol and commitments
- Plugins verify structure of revealed data...
- ...and process the data for higher-level app consumption
---
## Performance and Security Considerations
- Performance-critical operations reside in core runtime
- Plugin execution (control logic) incurs negligible WASM overhead
- Sandboxed plugins reduce risk of misconfiguration and simplify auditing
- SDK defines a clear API → low level development also fully supported
---
## What About Generic Notaries?
A **blind notary** is a verifier plugin:
- Verifies commitments only, without inspecting revealed data
- Issues signed attestation for downstream verification
→ Plugins enable both public attestations and fully private verification flows
---
## Closing: Enabling the Next Wave of Use Cases
- Modular integrations without modifying TLSNotary internals
- Safer, more consistent developer experience
- Foundation for broader adoption across Web2 and Web3 applications

View File

@@ -0,0 +1,17 @@
<svg width="529" height="548" viewBox="-15 -1 550 550" xmlns="http://www.w3.org/2000/svg">
<rect
fill="#243f5f"
width="550"
height="550"
x="-15"
y="-1" />
<path
d="M153.581 4.41505C153.581 1.08579 157.014 -1.04229 159.856 0.525709L202.517 24.065C203.907 24.8316 204.774 26.3268 204.774 27.9544V58.7885H226.105C228.461 58.7885 230.371 60.7624 230.371 63.1974V133.741L217.573 124.923V72.0154H204.774V504.359C204.774 505.115 204.586 505.859 204.227 506.519L182.897 545.751C181.266 548.75 177.089 548.75 175.458 545.751L154.128 506.519C153.769 505.859 153.581 505.115 153.581 504.359V4.41505Z"
fill="#FCFCFC" />
<path d="M127.984 160.194V477.639H76.7903V213.102H0V160.194H127.984Z" fill="#FCFCFC" />
<path d="M383.952 477.639H435.145V213.102H460.742V477.639H511.935V160.194H383.952V477.639Z"
fill="#FCFCFC" />
<path
d="M230.371 160.194H358.355V213.102H281.565V292.463H358.355V477.639H230.371V424.732H307.161V345.37H230.371V160.194Z"
fill="#FCFCFC" />
</svg>

After

Width:  |  Height:  |  Size: 1.0 KiB