Merge pull request #15 from tlsnotary/docusaurus

This commit is contained in:
Hendrik Eeckhaut
2025-05-20 09:02:29 +02:00
committed by GitHub
266 changed files with 25476 additions and 6075 deletions

View File

@@ -1,13 +0,0 @@
#root = true
[*]
indent_style = space
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
max_line_length = 120
indent_size = 2
[*.md]
trim_trailing_whitespace = false

View File

@@ -1,3 +0,0 @@
{
"extends": "next/core-web-vitals"
}

View File

@@ -1,4 +1,4 @@
name: Deploy TLSnotary landing page to GitHub Pages
name: Deploy to GitHub Pages
on:
# Runs on pushes targeting the default branch
@@ -8,12 +8,6 @@ on:
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
permissions:
contents: read
pages: write
id-token: write
# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
concurrency:
@@ -21,12 +15,14 @@ concurrency:
cancel-in-progress: false
jobs:
# Build job
build:
name: Build
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Detect package manager
id: detect-package-manager
run: |
@@ -51,30 +47,14 @@ jobs:
cache: ${{ steps.detect-package-manager.outputs.manager }}
- name: Setup Pages
uses: actions/configure-pages@v5
with:
# Automatically inject basePath in your Next.js configuration file and disable
# server side image optimization (https://nextjs.org/docs/api-reference/next/image#unoptimized).
#
# You may remove this line if you want to manage the configuration yourself.
static_site_generator: next
- name: Restore cache
uses: actions/cache@v4
with:
path: |
.next/cache
# Generate a new cache whenever packages or source files change.
key: ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json', '**/yarn.lock') }}-${{ hashFiles('**.[jt]s', '**.[jt]sx') }}
# If source files changed but packages didn't, rebuild from a prior cache.
restore-keys: |
${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json', '**/yarn.lock') }}-
- name: Install dependencies
run: ${{ steps.detect-package-manager.outputs.manager }} ${{ steps.detect-package-manager.outputs.command }}
- name: Build with Next.js
run: ${{ steps.detect-package-manager.outputs.runner }} next build
- name: Build
run: ${{ steps.detect-package-manager.outputs.runner }} run build
- name: Upload artifact
uses: actions/upload-pages-artifact@v3
with:
path: ./out
path: build
# Deployment job
deploy:
@@ -83,6 +63,10 @@ jobs:
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
needs: build
# Grant GITHUB_TOKEN the permissions required to make a Pages deployment
permissions:
pages: write # to deploy to Pages
id-token: write # to verify the deployment originates from an appropriate source
steps:
- name: Deploy to GitHub Pages
id: deployment

21
.github/workflows/test-deploy.yml vendored Normal file
View File

@@ -0,0 +1,21 @@
name: Test deployment
on:
pull_request:
jobs:
test-deploy:
name: Test deployment
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: actions/setup-node@v4
with:
node-version: 20
cache: npm
- name: Install dependencies
run: npm ci
- name: Test build website
run: npm run build

39
.gitignore vendored
View File

@@ -1,45 +1,20 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
/.vscode
# dependencies
# Dependencies
/node_modules
/.pnp
.pnp.js
.yarn/install-state.gz
# testing
/coverage
# production
# Production
/build
build-*
# misc
# Generated files
.docusaurus
.cache-loader
# Misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local
# debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# next.js
/.next/
/out/
# misc
.DS_Store
*.pem
# local env files
.env*.local
# vercel
.vercel
# typescript
*.tsbuildinfo
next-env.d.ts

1
CNAME
View File

@@ -1 +0,0 @@
tlsnotary.org

View File

@@ -1,28 +1,36 @@
# Privacy and Scaling Explorations
Main branch served at: https://appliedzkp.org/
# TLSNotary Website
This is the React re-write of the PSE website, formally just a landing page.
This repository contains the source files for the TLSNotary website: https://tlsnotary.org
## Get Started with Development
The site is built using [Docusaurus](https://docusaurus.io/)
`npm install`
### Local Development
`npm run dev` serves a development server at [http://localhost:8080](http://localhost:8080)
```sh
npm ci
npm run start
```
The app live under `/app`.
This starts a local development server and opens a browser window. Most changes are reflected live without needing to restart the server.
## How to contribute
Before submitting a PR, please make sure there are no warnings when you run:
```sh
npm run build
```
### Have an idea?
### Diagrams
Create an [issue](https://github.com/AtHeartEngineering/pse_landingpage/issues/new) and tell us the idea!
All diagrams are created using draw.io. The diagram source files are stored in the diagrams folder.
“Before use, each diagram must be converted to both light and dark SVG versions with the `convert_all.sh` script in the same folder.
### Want to contribute?
### Useful Docusaurus links
Feel free to fork this repo and make a pull request to the `dev` branch.
* Sidebar: https://docusaurus.io/docs/sidebar/autogenerated
* MDX: https://mdxjs.com/playground/
* Front matter: https://docusaurus.io/docs/markdown-features#front-matter
### Build and deployment process
Other Docusaurus websites at PSE:
* MACI: https://github.com/privacy-scaling-explorations/maci/tree/dev/apps/website
* MPC: https://github.com/privacy-scaling-explorations/mpc-framework-website
1. When a pull request or push is made to the `dev` branch, github actions builds a static/production version of the site to the `gh-pages-dev` branch.
2. Once changes have been verified on the `gh-pages-dev` branch, the `dev` branch is merged into `master` where github actions builds and deploys a production version of the site to `gh-pages`
3. `gh-pages` is served at [http://projects.appliedzkp.org](http://projects.appliedzkp.org)
> **Disclaimer**: While we appreciate all contributions, we do not prioritize minor grammatical fixes (e.g., correcting typos or rewording sentences) unless they significantly improve clarity in technical documentation. These contributions can be a distraction for the team. If you notice a grammatical error, please let us know on our Discord.

View File

@@ -1,55 +0,0 @@
import { AppContainer } from "../../components/AppContainer";
import { Section } from "../../components/Section";
import { Button } from "../../components/ui/Button";
import React from "react";
import { LINKS } from "../settings";
import { Banner } from "../../components/ui/Banner";
import { LABELS } from "../../content";
import { AppLink } from "@/components/AppLink";
export default function AboutPage() {
return (
<main>
<AppContainer className="flex flex-col gap-12 md:gap-20 pt-20 pb-16" size="small">
<Section
title={
<h2 className="text-primary font-semibold font-inter text-center text-[32px]">
{LABELS.ABOUT.WHO_WE_ARE.TITLE}
</h2>
}
description={LABELS.ABOUT.WHO_WE_ARE.DESCRIPTION}
>
<div className="mx-auto">
<AppLink href={LINKS.DOCUMENTATION} external showExternalIcon>
<Button variant="transparent">{LABELS.COMMON.VIEW_DOCUMENTATION}</Button>
</AppLink>
</div>
</Section>
<Section
title={
<h2 className="text-primary font-semibold font-inter text-center text-[32px]">
{LABELS.ABOUT.GET_INVOLVED.TITLE}
</h2>
}
description={LABELS.ABOUT.GET_INVOLVED.DESCRIPTION}
>
<div className="mx-auto">
<AppLink href={LINKS.GITHUB} external showExternalIcon>
<Button variant="transparent">{LABELS.COMMON.CHECKOUT_GITHUB}</Button>
</AppLink>
</div>
</Section>
</AppContainer>
<Banner
title={LABELS.COMMON.CONNECT_WITH_US.TITLE}
description={LABELS.COMMON.CONNECT_WITH_US.DESCRIPTION}
actions={
<AppLink href={LINKS.DISCORD} external>
<Button variant="primary">{LABELS.COMMON.JOIN_DISCORD}</Button>
</AppLink>
}
/>
</main>
);
}

View File

@@ -1,48 +0,0 @@
import { AppMarkdown } from "@/components/AppMarkdown";
import { AppContainer } from "../../components/AppContainer";
import { Section } from "../../components/Section";
import { Accordion } from "../../components/ui/Accordion";
import { LABELS } from "../../content";
import { FAQS } from "../../content/faq";
import React from "react";
export default function FAQPage() {
return (
<main>
<AppContainer size="small" className="flex flex-col py-16 md:py-[120px]">
<Section
title={
<h2 className="text-primary text-center font-bold font-inter text-[32px] md:text-[56px]">
{LABELS.COMMON.FAQ}
</h2>
}
>
<div className="flex flex-col gap-6">
{FAQS.map(({ answer, question }, index) => {
return (
<Accordion label={question} key={index}>
<AppMarkdown
customComponents={{
p: ({ ...props }) => (
<p
className="block overflow-hidden pt-4 text-primary text-sm leading-5 font-sans font-normal"
{...props}
/>
),
strong: ({ ...props }) => <span className="font-bold" {...props} />,
a: ({ ...props }) => (
<a className="font-semibold underline" target="_blank" rel="noopener noreferrer" {...props} />
),
}}
>
{answer}
</AppMarkdown>
</Accordion>
);
})}
</div>
</Section>
</AppContainer>
</main>
);
}

View File

@@ -1,44 +0,0 @@
@import url('https://fonts.googleapis.com/css2?family=DM+Sans:ital,opsz,wght@0,9..40,100..1000;1,9..40,100..1000&display=swap');
@tailwind base;
@tailwind components;
@tailwind utilities;
:root {
--foreground-rgb: 0, 0, 0;
--background-start-rgb: 214, 219, 220;
--background-end-rgb: 255, 255, 255;
}
@media (prefers-color-scheme: dark) {
:root {
--foreground-rgb: 255, 255, 255;
--background-start-rgb: 0, 0, 0;
--background-end-rgb: 0, 0, 0;
}
}
body {
color: rgb(var(--foreground-rgb));
}
@layer utilities {
.text-balance {
text-wrap: balance;
}
}
@keyframes appear {
from { opacity: 0; scale: 0.8; }
to { opacity: 1; scale: 1; }
}
.shadow-card {
box-shadow: 5px 39px 28px 0px rgba(0, 0, 0, 0.06);
}
.appear {
animation: appear linear both;
animation-timeline: view();
animation-range: entry 25% cover 45%;
}

View File

@@ -1,55 +0,0 @@
import type { Metadata } from "next";
import { Inter, DM_Sans } from "next/font/google";
import "./globals.css";
import { AppFooter } from "../components/AppFooter";
import { AppHeader } from "../components/AppHeader";
import Script from "next/script";
const inter = Inter({ subsets: ["latin"], variable: "--font-inter", display: "swap" });
const sans = DM_Sans({ subsets: ["latin"], variable: "--font-sans", display: "swap" });
export const metadata: Metadata = {
title: "TLSNotary",
description: "Proof of data authenticity",
openGraph: {
images: [
{
url: "/images/og-image.png",
width: 1200,
height: 800,
},
],
},
};
export default function RootLayout({
children,
}: Readonly<{
children: React.ReactNode;
}>) {
return (
<html lang="en">
<head />
<body className={`${inter.className} ${inter.variable} ${sans.variable} font-inter`}>
<AppHeader />
{children}
<AppFooter />
<Script id="matomo-tracking" strategy="afterInteractive">
{`
var _paq = window._paq = window._paq || [];
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
var u="https://psedev.matomo.cloud/";
_paq.push(['setTrackerUrl', u+'matomo.php']);
_paq.push(['setSiteId', '16']);
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.async=true; g.src='//cdn.matomo.cloud/psedev.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s);
})();
`}
</Script>
</body>
</html>
);
}

View File

@@ -1,149 +0,0 @@
import { AppLink } from "@/components/AppLink";
import { AppContainer } from "../components/AppContainer";
import { Banner, BannerTitle, BannerWrapper } from "../components/ui/Banner";
import { Button } from "../components/ui/Button";
import { Label } from "../components/ui/Label";
import { LABELS } from "../content";
import { LINKS } from "./settings";
import { Icons } from "@/components/Icons";
import { Section } from "@/components/Section";
import Image from "next/image";
import { classed } from "@tw-classed/react";
import App from 'next/app';
interface ComparisonTableProps {
title: string;
tls: boolean;
tlsNotary: boolean;
}
const TableWrapper = classed.div("grid grid-cols-4 ");
const TableTitle = classed.h4("font-semibold text-xs text-inter text-brown-50 uppercase md:text-[15px]");
const TableContent = classed.div("p-4");
const ComparisonTable = ({ title, tls, tlsNotary }: ComparisonTableProps) => {
return (
<TableWrapper>
<TableContent className=" col-span-2">
<span className="text-primary font-semibold text-sm text-inter md:text-lg">{title}</span>
</TableContent>
<TableContent className="m-auto">{tls ? <Icons.Check /> : <Icons.X />}</TableContent>
<TableContent className="m-auto">{tlsNotary ? <Icons.Check /> : <Icons.X />}</TableContent>
</TableWrapper>
);
};
export default function Home() {
return (
<main>
<AppContainer className="flex flex-col">
<div className="flex flex-col gap-8 md:gap-12 pt-10 pb-0 lg:gap-16 lg:py-16 ">
<div className="flex flex-col gap-4 md:gap-10">
<div className="flex flex-col gap-2 w-full lg:w-3/4">
<Label.Subtitle className=" ">{LABELS.HOMEPAGE.SUBTITLE}</Label.Subtitle>
<Label.Title>{LABELS.HOMEPAGE.TITLE}</Label.Title>
</div>
<span className="w-full lg:w-3/4 text-primary text-sm leading-5 font-inter md:text-xl font-medium">
{LABELS.HOMEPAGE.DESCRIPTION}
</span>
</div>
<div className="flex flex-row gap-4">
<AppLink href={LINKS.DOCUMENTATION} external>
<Button className="w-full md:w-auto">{LABELS.COMMON.CHECKOUT_DOCS}</Button>
</AppLink>
<AppLink href={LINKS.DEMO} external>
<Button className="w-full md:w-auto">
{LABELS.COMMON.CHECKOUT_DEMO}{' '}
(Desktop Only{' '} <Icons.ChromeIcon className="inline-block" />)
</Button>
</AppLink>
</div>
</div>
<Icons.DividerHomepage className="hidden md:flex mx-auto w-full" />
</AppContainer>
<AppContainer className="py-8 md:py-[120px] w-full lg:!max-w-[960px]">
<Section
title={
<h3 className="text-primary text-2xl font-bold md:text-center md:text-5xl md:leading-[49px]">
{LABELS.HOMEPAGE.WHY_USE_TLSNOTARY.TITLE}
</h3>
}
description={LABELS.HOMEPAGE.WHY_USE_TLSNOTARY.DESCRIPTION}
>
<div className="relative w-full h-[200px] py-16">
<Image className="hidden md:block" src="/images/infographic.svg" alt="infographic" fill />
<Image className="block md:hidden" src="/images/infographic-mobile.svg" alt="infographic mobile" fill />
</div>
</Section>
</AppContainer>
<AppContainer className="pb-16 md:pb-[120px]">
<div className="!max-w-[640px] mx-auto">
<TableWrapper className="hidden md:!grid px-8">
<div className=" col-span-2"></div>
<TableContent className="text-center">
<span className="text-primary font-bold py-4 font-inter text-xs md:text-2xl">TLS</span>
</TableContent>
<TableContent className="text-center">
<span className="text-primary font-bold py-4 font-inter text-xs md:text-2xl">TLSNotary</span>
</TableContent>
</TableWrapper>
<div className="p-2 border border-gray-100 bg-gray rounded-xl md:p-8 ">
<TableWrapper className="block md:hidden">
<div className=" col-span-2"></div>
<TableContent className="text-center">
<span className="text-primary font-black py-4 font-inter text-[13px]">TLS</span>
</TableContent>
<TableContent className="text-center">
<span className="text-primary font-black py-4 font-inter text-[13px]">TLSN</span>
</TableContent>
</TableWrapper>
<TableContent>
<TableTitle>{LABELS.COMMON.SERVER_AUTHENTICATION}</TableTitle>
</TableContent>
<ComparisonTable title="Data Origin" tls tlsNotary />
<ComparisonTable title="Data Integrity" tls tlsNotary />
<TableContent>
<TableTitle>{LABELS.COMMON.DATA_PORTABILITY}</TableTitle>
</TableContent>
<ComparisonTable title="Trustless" tls={false} tlsNotary />
<ComparisonTable title="Privacy Preserving" tls={false} tlsNotary />
</div>
</div>
</AppContainer>
<BannerWrapper color="gray">
<AppContainer className="flex flex-col gap-4 md:gap-8">
<BannerTitle className="text-center" variant="primary">
{LABELS.COMMON.LEARN_THE_BASICS}
</BannerTitle>
<div className="mx-auto">
<iframe
className="w-full min-w-autos md:min-h-[320px] md:min-w-[560px]"
src="https://www.youtube.com/embed/bNGSdlvIPfI?si=xJSG43Go-JQGy_hs"
title="YouTube video player"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
// @ts-ignore
referrerPolicy="strict-origin-when-cross-origin"
allowFullScreen
/>
</div>
</AppContainer>
</BannerWrapper>
<Banner
title={LABELS.HOMEPAGE.BUILD_WITH_US.TITLE}
description={LABELS.HOMEPAGE.BUILD_WITH_US.DESCRIPTION}
actions={
<AppLink href={LINKS.DISCORD} external>
<Button variant="primary">{LABELS.COMMON.JOIN_DISCORD}</Button>
</AppLink>
}
/>
</main>
);
}

View File

@@ -1,89 +0,0 @@
import { Icons } from "../components/Icons";
import { ReactNode } from "react";
type NavItem = {
label: string;
href: string;
icon?: ReactNode;
external?: boolean;
};
// list of links used in the app
export const LINKS = {
DISCORD: "https://discord.gg/9XwESXtcN7",
GITHUB: "https://github.com/tlsnotary/tlsn",
TWITTER: "https://twitter.com/tlsnotary",
DOCUMENTATION: "https://docs.tlsnotary.org/",
DEMO: "https://demo.tlsnotary.org/",
BLOG: "#",
};
// app header navigation
export const NAVIGATION: NavItem[] = [
{
label: "About",
href: "/about",
},
{
label: "Use Cases",
href: "/use-cases",
},
{
label: "FAQ",
href: "/faq",
},
{
label: "Documentation",
href: LINKS.DOCUMENTATION,
external: true,
},
{
label: "API",
href: "https://tlsnotary.github.io/tlsn/",
external: true,
},
];
// app footer navigation
export const SOCIALS_FOOTER: NavItem[] = [
{
label: "Discord",
href: LINKS.DISCORD,
external: true,
icon: <Icons.Discord />,
},
{
label: "GitHub",
href: LINKS.GITHUB,
external: true,
icon: <Icons.Github />,
},
{
label: "Twitter",
href: LINKS.TWITTER,
external: true,
icon: <Icons.Twitter />,
},
];
// app header socials
export const SOCIALS_HEADER: NavItem[] = [
{
label: "Discord",
href: LINKS.DISCORD,
external: true,
icon: <Icons.DiscordCircle />,
},
{
label: "GitHub",
href: LINKS.GITHUB,
external: true,
icon: <Icons.GithubCircle />,
},
{
label: "Twitter",
href: LINKS.TWITTER,
external: true,
icon: <Icons.TwitterCircle />,
},
];

View File

@@ -1,88 +0,0 @@
import { AppLink } from "@/components/AppLink";
import { Banner } from "@/components/ui/Banner";
import { Button } from "@/components/ui/Button";
import { LABELS } from "@/content";
import React from "react";
import { LINKS } from "../settings";
import { AppContainer } from "@/components/AppContainer";
import { Section } from "@/components/Section";
import { ProjectList, WebsiteType } from "@/content/projects";
import { Card } from "@/components/ui/Card";
import { Icons } from "@/components/Icons";
const IconMapping: Record<WebsiteType, React.ReactNode> = {
twitter: <Icons.Twitter className="text-white hover:text-brown-50 duration-200" />,
github: <Icons.Github className="text-white hover:text-brown-50 duration-200" />,
website: <Icons.Website className="text-white hover:text-brown-50 duration-200" />,
};
export default function UseCases() {
return (
<div className="flex flex-col">
<div className=" py-10 md:py-16">
<AppContainer className="flex flex-col gap-16 !max-w-[800px]">
<Section
title={
<h2 className=" text-primary font-semibold text-2xl md:text-[32px] text-center">
{LABELS.USE_CASES.USE_CASES.TITLE}
</h2>
}
description={LABELS.USE_CASES.USE_CASES.DESCRIPTION}
></Section>
<Section
title={
<h2 className=" text-primary font-inter w-3/4 mx-auto font-semibold text-2xl leading-6 md:text-[32px] md:w-full text-center">
{LABELS.USE_CASES.BUILD_WITH_TLSNOTARY}
</h2>
}
>
<div className="grid grid-cols-1 gap-5 md:grid-cols-2">
{ProjectList.map((project) => {
return (
<Card.Base key={project.title}>
<div className="flex flex-col gap-3">
<h5 className=" text-white font-inter font-semibold text-[22px] leading-5 md:text-[28px] md:leading-[28px]">
{project.title}
</h5>
<div className="min-h-[100px]">
<span className="text-white text-sm font-normal font-inter line-clamp-5">{project.tldr}</span>
</div>
</div>
<div className="flex items-center gap-2 mt-5">
{Object.keys(project?.links ?? []).map((website, index) => {
// @ts-ignore
const url: string | undefined = project.links?.[website] ?? undefined;
const icon: any = IconMapping[website as WebsiteType];
if (!url) return null;
if (!icon) return null;
return (
<AppLink key={index} href={url} external>
{icon}
</AppLink>
);
})}
</div>
</Card.Base>
);
})}
</div>
</Section>
</AppContainer>
</div>
<Banner
title={LABELS.USE_CASES.BANNER.TITLE}
description={LABELS.USE_CASES.BANNER.DESCRIPTION}
descriptionClass="text-center"
actions={
<AppLink href={LINKS.DISCORD} external>
<Button variant="primary">{LABELS.COMMON.JOIN_DISCORD}</Button>
</AppLink>
}
/>
</div>
);
}

View File

@@ -0,0 +1,37 @@
#!/bin/bash
FORMAT="svg"
# Convert all diagrams in the diagrams folder to pngs in the mdbook src/png-diagrams folder
SOURCE_DIR=$(dirname "$0")
TARGET_DIR=$(realpath "$(dirname "$0")/")
OS=$(uname)
case "$OS" in
"Darwin") # Mac
DRAW_IO="/Applications/draw.io.app/Contents/MacOS/draw.io"
;;
"Linux") # Linux
DRAW_IO="drawio"
;;
esac
if ! command -v "$DRAW_IO" &>/dev/null; then
echo "Error: draw.io executable not found. Please install draw.io and make sure it's in your PATH."
exit 1
fi
pushd "$SOURCE_DIR" >/dev/null
for page in $(seq 0 3); do
SOURCE="diagrams.drawio"
TARGET="${TARGET_DIR}/${SOURCE%.drawio}_${page}.${FORMAT}"
# Only convert if the source is more recent than the target
if [[ "$SOURCE" -nt "${TARGET}" ]]; then
"$DRAW_IO" --export --page-index ${page} --format ${FORMAT} --scale 2.5 -o "${TARGET}" "${SOURCE}"
if [ "$FORMAT" = "svg" ]; then
# add styling for dark mode (https://github.com/jgraph/drawio-github/blob/master/DARK-MODE.md)
sed -i -e "s$<defs/>$<defs><style type=\"text/css\"> @media (prefers-color-scheme: dark) { svg { filter: invert(93%) hue-rotate(180deg); background-color: transparent !important; } image { filter: invert(100%) hue-rotate(180deg) saturate(1.25); } } </style></defs>$" "${TARGET}"
fi
fi
done
popd >/dev/null

View File

@@ -0,0 +1,248 @@
<mxfile host="Electron" modified="2023-09-13T08:13:23.040Z" agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/21.6.8 Chrome/114.0.5735.289 Electron/25.5.0 Safari/537.36" version="21.6.8" etag="v2Ntmq55qNim5saO4JRN" type="device" pages="4">
<diagram name="Simple Overview" id="1K7dc4YacWnzJAUZZLNN">
<mxGraphModel dx="759" dy="1200" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="4681" pageHeight="3300" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="FO-Th2_5Wnf5gWxcU9zP-1" value="Prover" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;shadow=1;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="620" y="250" width="80" height="80" as="geometry" />
</mxCell>
<mxCell id="FO-Th2_5Wnf5gWxcU9zP-2" value="Server" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;shadow=1;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="460" y="250" width="80" height="80" as="geometry" />
</mxCell>
<mxCell id="FO-Th2_5Wnf5gWxcU9zP-3" value="Verifier" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;shadow=1;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="780" y="250" width="80" height="80" as="geometry" />
</mxCell>
<mxCell id="uXpAJVi9-J_ntRPUj_sc-1" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" target="FO-Th2_5Wnf5gWxcU9zP-1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="540" y="290" as="sourcePoint" />
<mxPoint x="-180" y="290" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="uXpAJVi9-J_ntRPUj_sc-2" value="&lt;font style=&quot;font-size: 12px;&quot;&gt;TLS&lt;/font&gt;" style="whiteSpace=wrap;html=1;fillColor=none;strokeColor=none;fontSize=11;" parent="1" vertex="1">
<mxGeometry x="550" y="274" width="50" height="10" as="geometry" />
</mxCell>
<mxCell id="uXpAJVi9-J_ntRPUj_sc-3" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="FO-Th2_5Wnf5gWxcU9zP-1" target="FO-Th2_5Wnf5gWxcU9zP-3" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="540" y="300" as="sourcePoint" />
<mxPoint x="630" y="300" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="uXpAJVi9-J_ntRPUj_sc-4" value="&lt;font style=&quot;font-size: 12px;&quot;&gt;MPC&lt;/font&gt;" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="uXpAJVi9-J_ntRPUj_sc-3" vertex="1" connectable="0">
<mxGeometry x="0.025" y="1" relative="1" as="geometry">
<mxPoint x="-1" y="-10" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="4YpQ24D73eh0dbAzUkyk-1" value="Data" style="whiteSpace=wrap;html=1;shape=mxgraph.basic.document;fontSize=10;shadow=1;" parent="1" vertex="1">
<mxGeometry x="560" y="300" width="50" height="58" as="geometry" />
</mxCell>
<mxCell id="4YpQ24D73eh0dbAzUkyk-2" value="&lt;font style=&quot;font-size: 10px;&quot;&gt;Redacted Data&lt;/font&gt;" style="whiteSpace=wrap;html=1;shape=mxgraph.basic.document;fontSize=11;shadow=1;" parent="1" vertex="1">
<mxGeometry x="720" y="300" width="50" height="58" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
<diagram id="kcIGn_kX_1L25iIxUXLg" name="Notaries">
<mxGraphModel dx="1757" dy="829" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="GdnXkJGOJiVmK7E47u4y-44" value="" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;dashed=1;dashPattern=8 8;" parent="1" vertex="1">
<mxGeometry x="170" y="220" width="140" height="285" as="geometry" />
</mxCell>
<mxCell id="EZAqd18MQriHtEKbU3QA-1" value="Prover" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;shadow=1;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="200" y="260" width="80" height="80" as="geometry" />
</mxCell>
<mxCell id="EZAqd18MQriHtEKbU3QA-2" value="Server" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;shadow=1;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="30" y="262" width="80" height="80" as="geometry" />
</mxCell>
<mxCell id="EZAqd18MQriHtEKbU3QA-3" value="Notary" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;shadow=1;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="200" y="410" width="80" height="80" as="geometry" />
</mxCell>
<mxCell id="GdnXkJGOJiVmK7E47u4y-40" value="blindly&lt;br&gt;signed&lt;br style=&quot;font-size: 11px;&quot;&gt;data" style="whiteSpace=wrap;html=1;shape=mxgraph.basic.document;fontSize=11;shadow=1;" parent="1" vertex="1">
<mxGeometry x="251" y="346" width="50" height="58" as="geometry" />
</mxCell>
<mxCell id="GdnXkJGOJiVmK7E47u4y-43" value="Verifier" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;shadow=1;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="410" y="260" width="80" height="80" as="geometry" />
</mxCell>
<mxCell id="GdnXkJGOJiVmK7E47u4y-45" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=1.028;exitY=0.462;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="EZAqd18MQriHtEKbU3QA-2" target="EZAqd18MQriHtEKbU3QA-1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="350" y="490" as="sourcePoint" />
<mxPoint x="400" y="440" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="GdnXkJGOJiVmK7E47u4y-46" value="TLS" style="whiteSpace=wrap;html=1;fillColor=none;strokeColor=none;fontSize=11;" parent="1" vertex="1">
<mxGeometry x="118" y="284" width="60" height="10" as="geometry" />
</mxCell>
<mxCell id="GdnXkJGOJiVmK7E47u4y-47" value="" style="endArrow=classic;html=1;rounded=0;" parent="1" source="EZAqd18MQriHtEKbU3QA-3" target="EZAqd18MQriHtEKbU3QA-1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="350" y="490" as="sourcePoint" />
<mxPoint x="400" y="440" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="vS6lQRuDm8DtBRq3Yqvl-2" value="notarize" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="GdnXkJGOJiVmK7E47u4y-47" vertex="1" connectable="0">
<mxGeometry x="-0.0599" y="2" relative="1" as="geometry">
<mxPoint x="-21" y="1" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="GdnXkJGOJiVmK7E47u4y-48" value="redacted&lt;br style=&quot;font-size: 11px;&quot;&gt;data" style="whiteSpace=wrap;html=1;shape=mxgraph.basic.document;fontSize=11;shadow=1;" parent="1" vertex="1">
<mxGeometry x="330" y="310" width="50" height="60" as="geometry" />
</mxCell>
<mxCell id="GdnXkJGOJiVmK7E47u4y-49" value="" style="endArrow=classic;html=1;rounded=0;" parent="1" source="EZAqd18MQriHtEKbU3QA-1" target="GdnXkJGOJiVmK7E47u4y-43" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="350" y="490" as="sourcePoint" />
<mxPoint x="400" y="440" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="GdnXkJGOJiVmK7E47u4y-50" value="&lt;span style=&quot;font-family: Helvetica; font-size: 11px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: center; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial; float: none; display: inline !important;&quot;&gt;selective disclosure&lt;/span&gt;" style="text;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="330" y="262" width="50" height="40" as="geometry" />
</mxCell>
<mxCell id="GdnXkJGOJiVmK7E47u4y-53" value="&lt;span style=&quot;font-family: Helvetica; font-size: 11px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial; float: none; display: inline !important;&quot;&gt;MPC&lt;/span&gt;" style="text;whiteSpace=wrap;html=1;align=center;verticalAlign=middle;" parent="1" vertex="1">
<mxGeometry x="177" y="215" width="125" height="40" as="geometry" />
</mxCell>
<mxCell id="GdnXkJGOJiVmK7E47u4y-54" value="1" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fontSize=10;" parent="1" vertex="1">
<mxGeometry x="141.5" y="268" width="13" height="13" as="geometry" />
</mxCell>
<mxCell id="GdnXkJGOJiVmK7E47u4y-55" value="2" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fontSize=10;" parent="1" vertex="1">
<mxGeometry x="210" y="357" width="13" height="13" as="geometry" />
</mxCell>
<mxCell id="GdnXkJGOJiVmK7E47u4y-56" value="3" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fontSize=10;" parent="1" vertex="1">
<mxGeometry x="344.5" y="256" width="13" height="13" as="geometry" />
</mxCell>
<mxCell id="GdnXkJGOJiVmK7E47u4y-58" value="4" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fontSize=10;" parent="1" vertex="1">
<mxGeometry x="429" y="316.5" width="13" height="13" as="geometry" />
</mxCell>
<mxCell id="GdnXkJGOJiVmK7E47u4y-59" value="&lt;span style=&quot;font-family: Helvetica; font-size: 11px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial; float: none; display: inline !important;&quot;&gt;verify&lt;/span&gt;" style="text;whiteSpace=wrap;html=1;align=center;verticalAlign=middle;" parent="1" vertex="1">
<mxGeometry x="438" y="313.25" width="40" height="19.5" as="geometry" />
</mxCell>
<mxCell id="_06KIDZZ9NYgVlEzEhfi-3" value="" style="endArrow=classic;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="EZAqd18MQriHtEKbU3QA-1" target="EZAqd18MQriHtEKbU3QA-3" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="180" y="330" as="sourcePoint" />
<mxPoint x="110" y="354" as="targetPoint" />
<Array as="points">
<mxPoint x="180" y="370" />
</Array>
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
<diagram name="AES" id="mOAZV9J1HD8CvUNmk5yk">
<mxGraphModel dx="759" dy="1200" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="4681" pageHeight="3300" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="imKlexnwQG8ijFvp7Sfa-1" style="html=1;fontSize=12;rounded=0;entryX=0.013;entryY=0.284;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="628.83" y="180.12" as="sourcePoint" />
<mxPoint x="701.9999999999999" y="180" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="imKlexnwQG8ijFvp7Sfa-2" value="Key share" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=11;" parent="imKlexnwQG8ijFvp7Sfa-1" vertex="1" connectable="0">
<mxGeometry relative="1" as="geometry">
<mxPoint y="-11" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="imKlexnwQG8ijFvp7Sfa-12" style="rounded=0;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;fontSize=12;" parent="1" source="imKlexnwQG8ijFvp7Sfa-13" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="747" y="270" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="imKlexnwQG8ijFvp7Sfa-14" style="html=1;fontSize=12;rounded=0;entryX=0.013;entryY=0.718;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="629" y="220" as="sourcePoint" />
<mxPoint x="702.1699999999998" y="220.25999999999993" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="imKlexnwQG8ijFvp7Sfa-15" value="&lt;font style=&quot;font-size: 11px;&quot;&gt;Plaintext&lt;/font&gt;" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=11;" parent="imKlexnwQG8ijFvp7Sfa-14" vertex="1" connectable="0">
<mxGeometry relative="1" as="geometry">
<mxPoint y="-10" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="imKlexnwQG8ijFvp7Sfa-4" value="Prover" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;shadow=1;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="554" y="160" width="80" height="80" as="geometry" />
</mxCell>
<mxCell id="imKlexnwQG8ijFvp7Sfa-13" value="&lt;font style=&quot;font-size: 12px;&quot;&gt;AES&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fontSize=10;shadow=1;" parent="1" vertex="1">
<mxGeometry x="702" y="165" width="90" height="70" as="geometry" />
</mxCell>
<mxCell id="imKlexnwQG8ijFvp7Sfa-18" style="html=1;fontSize=12;rounded=0;entryX=0.013;entryY=0.284;entryDx=0;entryDy=0;entryPerimeter=0;startArrow=classic;startFill=1;endArrow=none;endFill=0;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="792" y="199.98" as="sourcePoint" />
<mxPoint x="865.1699999999996" y="199.85999999999999" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="imKlexnwQG8ijFvp7Sfa-19" value="&lt;style=&quot;font-size: 11px;&quot;&gt;Key share&lt;/font&gt;" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=11;" parent="imKlexnwQG8ijFvp7Sfa-18" vertex="1" connectable="0">
<mxGeometry relative="1" as="geometry">
<mxPoint y="-11" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="imKlexnwQG8ijFvp7Sfa-7" value="Verifier" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;shadow=1;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="859" y="160" width="80" height="80" as="geometry" />
</mxCell>
<mxCell id="imKlexnwQG8ijFvp7Sfa-22" value="&lt;span style=&quot;font-family: Helvetica; font-size: 11px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial; float: none; display: inline !important;&quot;&gt;Ciphertext&lt;/span&gt;" style="text;whiteSpace=wrap;html=1;fontSize=11;align=center;" parent="1" vertex="1">
<mxGeometry x="717" y="270" width="60" height="20" as="geometry" />
</mxCell>
<mxCell id="ugwm5q7jo5HeXQWcRzf4-1" value="&lt;span style=&quot;font-family: Helvetica; font-size: 11px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial; float: none; display: inline !important;&quot;&gt;Garbled Circuit&lt;/span&gt;" style="text;whiteSpace=wrap;html=1;fontSize=11;align=center;" parent="1" vertex="1">
<mxGeometry x="707" y="140" width="80" height="20" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
<diagram name="Proxy mode" id="QbUhlncA6uj8AHGzzR_Y">
<mxGraphModel dx="759" dy="1200" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="4681" pageHeight="3300" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="csndq4Mb--6Wtup8P-S2-3" style="edgeStyle=orthogonalEdgeStyle;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fontSize=12;rounded=0;" parent="1" source="bSltM_TDOgC1kJBMOoSB-1" target="csndq4Mb--6Wtup8P-S2-1" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="csndq4Mb--6Wtup8P-S2-5" value="Record" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=12;" parent="csndq4Mb--6Wtup8P-S2-3" vertex="1" connectable="0">
<mxGeometry x="-0.48" relative="1" as="geometry">
<mxPoint x="-30" y="-11" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="bSltM_TDOgC1kJBMOoSB-1" value="Verifier" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;shadow=1;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="700" y="150" width="80" height="80" as="geometry" />
</mxCell>
<mxCell id="bSltM_TDOgC1kJBMOoSB-2" value="Server" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;shadow=1;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="540" y="150" width="80" height="80" as="geometry" />
</mxCell>
<mxCell id="csndq4Mb--6Wtup8P-S2-2" style="edgeStyle=orthogonalEdgeStyle;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;fontSize=12;rounded=0;" parent="1" source="bSltM_TDOgC1kJBMOoSB-3" target="csndq4Mb--6Wtup8P-S2-1" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="csndq4Mb--6Wtup8P-S2-6" value="Key" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=12;" parent="csndq4Mb--6Wtup8P-S2-2" vertex="1" connectable="0">
<mxGeometry x="-0.4889" relative="1" as="geometry">
<mxPoint x="20" y="2" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="bSltM_TDOgC1kJBMOoSB-3" value="Prover" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;shadow=1;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="860" y="150" width="80" height="80" as="geometry" />
</mxCell>
<mxCell id="bSltM_TDOgC1kJBMOoSB-4" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" target="bSltM_TDOgC1kJBMOoSB-1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="620" y="190" as="sourcePoint" />
<mxPoint x="-100" y="190" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="bSltM_TDOgC1kJBMOoSB-6" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="bSltM_TDOgC1kJBMOoSB-1" target="bSltM_TDOgC1kJBMOoSB-3" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="620" y="200" as="sourcePoint" />
<mxPoint x="710" y="200" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="bSltM_TDOgC1kJBMOoSB-8" value="Encrypted Data" style="whiteSpace=wrap;html=1;shape=mxgraph.basic.document;fontSize=10;shadow=1;" parent="1" vertex="1">
<mxGeometry x="750" y="270" width="50" height="58" as="geometry" />
</mxCell>
<mxCell id="bSltM_TDOgC1kJBMOoSB-9" value="&lt;font style=&quot;font-size: 10px;&quot;&gt;Redacted Data&lt;/font&gt;" style="whiteSpace=wrap;html=1;shape=mxgraph.basic.document;fontSize=11;shadow=1;" parent="1" vertex="1">
<mxGeometry x="820" y="300" width="50" height="58" as="geometry" />
</mxCell>
<mxCell id="csndq4Mb--6Wtup8P-S2-4" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;fontSize=12;" parent="1" source="csndq4Mb--6Wtup8P-S2-1" target="bSltM_TDOgC1kJBMOoSB-9" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="csndq4Mb--6Wtup8P-S2-1" value="&lt;font style=&quot;font-size: 12px;&quot;&gt;ZKP&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fontSize=10;shadow=1;" parent="1" vertex="1">
<mxGeometry x="820" y="240" width="50" height="40" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 128 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

View File

@@ -0,0 +1,207 @@
---
title: TLSNotary Updates
authors: [sinu]
# tags: [mpc-tls, proxy]
---
# Introduction
TLSNotary is a protocol which allows people to export data from any web application and prove facts about it to a third-party in a privacy preserving way.
<!-- truncate -->
It enables privacy-preserving **data provenance and data portability**, empowering users to share their data with others as they see fit.
To do this, TLSNotary leverages secure multi-party computation (MPC) to authenticate data communicated between a Prover and a TLS-enabled web server, as depicted in Figure 1.
| ![Simple Overview](./diagrams_0.svg) |
| :----------------------------------: |
| Figure 1: Simple Overview |
Importantly, the protocol supports *selective disclosure* of data to a Verifier. This way the Prover can keep secrets hidden, such as passwords or any other information not necessary to prove some specific statement.
Selective disclosure may involve simple redactions, or more advanced techniques such as a zero-knowledge proof that a number in the data is within a specific range, without disclosing its exact value.
| ![Redaction](./redacted.png) |
| :----------------------------: |
| Figure 2: Selective Disclosure |
The TLSNotary protocol presents a compelling alternative to other solutions for sharing data for the following reasons:
- It does not require the Server to integrate data sharing into its application, such as OAuth.
- The act of disclosing data to a third-party is not known to the Server, nor can it be practically censored.
- The Prover has very fine-grained control over *exactly* what data is disclosed to the Verifier.
- The Verifier does not need to trust that the Prover is honest, the authenticity of the data comes with cryptographic assurances.
For more introductory information, see our [website](https://tlsnotary.org) which also includes some example use-cases and a link to our (work-in-progress) documentation.
TLSNotary is a project under the [Privacy & Scaling Explorations (PSE)](https://pse.dev) team at the Ethereum Foundation. PSE is a multi-disciplinary team exploring how programmable cryptography can be applied to enhance privacy and scale trust-minimized systems.
## General-purpose Verifier: Notary
We envision an ecosystem of general-purpose verifiers, called Notaries, which help users take back control of their data in a privacy preserving way.
We find it important that our protocol supports hiding the identity of the Server, as well as hiding virtually *all information* about the application the Prover is interacting with.
A Notary is a special kind of verifier which allows the Prover to do just that. It decouples the process of proving the authenticity of data from the process of selective disclosure. Notaries being completely blind of context preserves neutrality, and helps mitigate bad incentives or censorship which could arise in circumstances with an application-specific Verifier.
Of course, we still need to support selective disclosure of the data to _someone_. How do we do that if a Notary is to know nothing? Fortunately this is still possible to do in a relatively simple way.
| ![Notaries](./diagrams_1.svg) |
| :---------------------------: |
| Figure 3: Notaries |
During the MPC, efficient commitments to the data are generated and we can reuse them for selective disclosure. The Notary simply signs an attestation which includes these commitments, as well as a commitment to the Server identity, which the Prover can store and carry around (in a data backpack? 🎒). Later the Prover can use this attestation to selectively disclose data to someone else.
This enables users to privately export data with the help of a neutral third-party, receiving an attestation to its authenticity. Using these attestations, other verifiers can accept proofs if they consider the attesting Notary trustworthy. Of course, a verifier can require attestations from multiple Notaries, which reduces to a 1-of-N trust assumption!
# How It Works
As mentioned in the introduction, TLSNotary leverages MPC to provide cryptographic assurances that the Prover can not cheat or lie about the communications with the Server. Additionally, the Verifier can not tamper with the connection as to leak secrets or cause malicious state updates within the application. In other words, the protocol is designed to be [malicious secure](https://en.wikipedia.org/wiki/Secure_multi-party_computation#Security_definitions) for both parties.
The Prover and Verifier securely secret-share the TLS session keys such that neither party is able to unilaterally send or receive messages from the Server. This ensures the authenticity of data, while hiding the plaintext from the Verifier.
Under the hood we employ primitives such as [Garbled Circuits](https://en.wikipedia.org/wiki/Garbled_circuit), [Oblivious Transfer](https://en.wikipedia.org/wiki/Oblivious_transfer#1%E2%80%932_oblivious_transfer) and Oblivious Linear Evaluation (OLE) to do this. These primitives have historically suffered from high resource costs in terms of both compute and bandwidth requirements, particularly in adversarial settings which require malicious security. Fortunately, over the past decade or so, there have been many breakthroughs in concrete efficiency which have brought MPC closer to a practical reality for many applications.
Even so, implementing a protocol like TLSNotary pushes up against the bounds of practical feasability in the malicious setting.
For example, the dominant cost of our protocol comes from performing binary computation using Garbled Circuits. Modern techniques such as free-XOR[^1] and half-gates[^2] still comes with a cost of ~200kB of communication to evaluate a single AES block (the most widely used cipher in TLS) in the semi-honest setting. Extrapolating, it costs ~50MB to encrypt only 4kB of data! Doing so with malicious security can easily add an order of magnitude to this cost figure, rendering such pursuits practically infeasible.
| ![AES](./diagrams_2.svg) |
| :-------------------------------------: |
| Figure 4: 2PC AES with Garbled Circuits |
Naturally, we require the TLSNotary protocol to be secure against malicious adversaries. We must find a way to make it malicious secure, but malicious security is expensive. Wat do?
Before we get into how we solved this problem for our protocol, we wanted to highlight a viable alternative approach which we decided not to take.
## Alternative: Proxy Mode
An alternative approach to this problem is to side-step the need to use expensive MPC techniques and stick to cheaper approaches which operate in the zero-knowledge setting. Or more specifically, the setting where only 1 party has private inputs (the Prover).
Rather than having the Prover connect directly to the Server and operating the connection cooperatively with the Verifier, instead, the Verifier is situated in-between the Prover and Server, as shown in Figure 5.
| ![Proxy Mode](./diagrams_3.svg) |
| :-----------------------------: |
| Figure 5: Proxy Mode |
In this configuration, the Verifier acts as a proxy and simply records the encrypted data being communicated between the Prover and Server. Afterwards, the Prover can selectively disclose parts of the data with a zero-knowledge proof using their TLS keys as private inputs.
This approach is quite viable and is one which other teams are pursuing. However, it comes with a different set of security assumptions. Rather than relying just on cryptographic assumptions, the proxy approach also makes _network topology_ assumptions. It assumes that the Verifier has a direct connection to the Server, and that a malicious Prover can not bypass or otherwise insert themselves in-between the Verifier and Server. As the Prover holds the full TLS session keys, if they are able to invalidate this assumption it completely breaks the integrity of the protocol.
As explained in the above [section on Notaries](#general-purpose-verifier-notary), we find the ability to hide the identity of the Server from the Verifier important. This is clearly not possible with this model.
To be fair, there are viable mitigations to network attacks and in many scenarios these assumptions are acceptable. We look forward to seeing what is unlocked with the application of this model, as the simplicity and efficiency of this approach is enticing.
However, we decided to pursue the MPC approach and found a way to practically achieve malicious security without making such network assumptions.
## Achieving Practicality with MPC
A key observation enabling our approach is that all private inputs from the Verifier in the MPC are ephemeral. That is, after the TLS connection has been terminated the Verifier can reveal their share of the TLS session keys to the Prover without consequence. Moreover, multiple bits of the Verifier's inputs can be leaked prematurely without compromising security of the overall protocol.
Malicious secure protocols typically aim to prevent *any* leakage of any parties inputs, employing techniques such as authenticated garbling or variants of cut-and-choose, which add significant compute and/or communication overhead.
For our needs, we implemented a novel\* variant of so-called Dual Execution, which we dubbed Dual Execution with Asymmetric Privacy (DEAP). Is there a better name for it? Probably. Nonetheless, you can read our informal [explanation of it here](https://docs.tlsnotary.org/mpc/deap.html).
The jist of it is this: During the TLS session one party, the Prover, acts as the Garbler while also committing to their inputs prior to learning the output of the circuit. Later, these commitments are used to prove the Prover acted honestly (or at least leakage was statistically bounded), and aborting otherwise.
Some key take aways of this approach:
- Garbled circuits on their own are secure against a malicious evaluator. The Verifier, acting as the evaluator, can not cheat or otherwise corrupt the output without detection. This ensures the privacy and integrity of the data to the Prover during the TLS session.
- In the final phase of DEAP the Verifier opens all their inputs to the Prover. This allows the Prover to check the Verifier has behaved honestly and ensures *no leakage* of the private data, contrary to the leakage inherent in the equality check of standard Dual Execution.
Exploiting the rather niche privacy requirements of our protocol allows us to achieve malicious security without the typical overhead that comes with it.
In fact, the final phase of DEAP reduces to the much cheaper zero-knowledge scenario. While we currently use garbled circuits for this ZK phase, as pioneered in JKO13[^4], we can take advantage of even more efficient ZK proof systems. We're planning on switching to new methods known as VOLE-based IZK[5], which boast over 100x reduction in communication cost compared to garbled circuits. Doing so will make our protocol marginally more expensive than the semi-honest security setting.
Using the efficient VOLE-based IZK in combination with the simple trick of deferring decryption until after the TLS connection is closed, **TLSNotary will achieve efficiency similar to that of the proxy mode configuration**. Specifically, we do not need to utilize expensive Garbled Circuits for proving Server response data, which is typically the dominant cost.
\* This approach has recently also been articulated by XYWY23[^3]
## A note on Oracles
While the TLSNotary protocol can be used to construct a [blockchain oracle protocol](https://ethereum.org/en/developers/docs/oracles/), that is not its primary purpose, especially in regards to _public_ data feeds. TLSNotary is best suited for contexts which require proving of _private_ data which is typically only accessible to an authenticated user. Moreover, because it is an _interactive_ protocol, it must be run by an off-chain Verifier. Bringing data on-chain still requires a trust assumption, ie an attestation from a trusted party(s).
# Where We Are
An alpha version of the TLSNotary protocol is [available for testing](https://github.com/tlsnotary/tlsn). We welcome folks to start playing around with it, including trying to break it! We have some examples available and a quick start to get you running.
The underlying MPC primitives are contained in a separate project named [`mpz`](https://github.com/privacy-scaling-explorations/mpz) which is intended to evolve into a general-purpose MPC stack.
Both codebases are 100% Rust 🦀 and compile to WASM targets with an eye on deployment into browser environments.
All our code is and always will be open source! Dual-licensed under Apache 2 and MIT, at your choice.
We've invested effort into making sure our code is modular and capable of evolving. We hope that others may find some of the components independently interesting and useful. Contributions are welcome!
## Current Limitations
While we're excited to start experimenting with TLSNotary, we acknowledge the work we have ahead of us.
Below are some important points to consider:
- Our protocol currently lacks security proofs and has not been audited.
- It is functional but under active development.
- Until we integrate VOLE-based IZK, it is only practical to prove data volumes in the **low kB** range (largely dependent on network bandwidth between the Prover and Verifier). This works for many use-cases involving API queries for succinct representations of data, eg. identity information.
- Selective disclosure *tooling* is currently limited to simple redactions.
# Roadmap
We have a number of items on our roadmap that we are tackling across a few different areas.
## Core Protocol (MPC TLS)
In addition to standard things like better tests, audits and documentation, we have a number of improvements in mind for our core protocol:
- The security proofs for the protocol we use for OT extension, KOS15[^6], was called into question around the time we adopted and implemented it. We're due to replace it with the more recent SoftSpokenOT protocol, Roy22[^7]
- Implement and integrate VOLE-based IZK. As mentioned earlier, this is a critical piece which will significantly boost efficiency and make proving larger data volumes (MBs) practical.
- Improve the P256 point-addition protocol used in the ECDHE key exchange, as well as the protocol for GHASH used in AES-GCM. We implement both using Gilboa-style (Gil99[^8]) OLE with additional consistency checks, but a more efficient approach was recently demonstrated by XYWY23[^ 3].
- Add support for the ChaCha20-Poly1305 ciphersuite. ChaCha20 has ~50% lower communication cost compared to AES when executed in MPC.
- TLS 1.3 support.
## Selective Disclosure
Being able to prove the authenticity of data is one thing, but it's important that selective disclosure tooling is available for developers to easily build privacy preserving applications.
Below are some items we will be prioritizing:
- Gadgets and examples for using the commitments with SNARKs. We intend to make it easy to integrate SNARKs using tooling such as Circom.
- Support proving arbitrary statements to the Verifier with IZK. Presently, we only provide tools for simple redactions out of the box.
- Tooling for common application contexts, eg. HTTP, and JSON. Web applications do not represent data in formats friendly to ZK proofs, so it can be quite burdensome to work with. Developers need good abstractions at their disposal for working with these formats.
## Infrastructure
### Reference Notary Server
We're building a reference [Notary server implementation](https://github.com/tlsnotary/notary-server) which enables anyone to spin up a Notary and start attesting!
This implementation will also serve as a reference for building application-specific verifiers.
### Browser extension
Desktop applications have mostly fallen out of style, which is a shame because building cryptography applications in the browser is *difficult*! But we work with what we've got. So we're building a [web extension](https://github.com/tlsnotary/tlsn-extension) to let people run the TLSNotary protocol in their browser using WASM.
It is still in very early stages, but the plan is to provide some UI conveniences for users, and a plugin system for developers to build proving flows in a sandboxed environment. We envision an open ecosystem of these plugins which users can select depending on their needs. This no doubt will come with some security challenges!
# Join Us!
Come find us in our [public Discord server](https://discord.gg/9XwESXtcN7), and tune in for further updates on [Twitter](https://twitter.com/tlsnotary).
We're looking forward to seeing all the great privacy-centric applications folks can come up with!
# References
[^1]: Kolesnikov, V., Schneider, T.: Improved garbled circuit: Free XOR gates and applications. In: ICALP 2008, Part II (2008)
[^2]: Zahur, S., Rosulek, M., and Evans, D.: Two Halves Make a Whole Reducing Data Transfer in Garbled Circuits using Half Gates. In: 34th Eurocrypt, Sofia, Bulgaria, April 2015
[^3]: Xie, X., Yang, K., Wang, X., Yu, Y.: Lightweight Authentication of Web Data via Garble-Then-Prove
[^4]: Jawurek, M., Kerschbaum, F., Orlandi, C.: Zero-Knowledge Using Garbled Circuits or How To Prove Non-Algebraic Statements Efficiently.
[^5]: Baum, C., Dittmer, S., Scholl, P., Wang, X.: SoK: Vector OLE-Based Zero-Knowledge Protocols
[^6]: Keller, M., Orsini, E., Scholl, P.: Actively Secure OT Extension with Optimal Overhead
[^7]: Roy, L.: SoftSpokenOT: CommunicationComputation Tradeoffs in OT Extension
[^8]: Gilboa, N.: Two Party RSA Key Generation. In: Advances in Cryptology - Crypto '99

Binary file not shown.

After

Width:  |  Height:  |  Size: 309 KiB

283
blog/2024-11-14-devcon.md Normal file
View File

@@ -0,0 +1,283 @@
---
title: TLSNotary Workshop DevCon 2024
authors: [heeckhau]
---
This blog post contains the instructions for the TLSNotary workshop we presented at [DevCon 2024](https://app.devcon.org/schedule/VPMQGM). The workshop aimed to introduce participants to TLSNotary, covering its use in both native Rust and browser environments.
:::warning
Please note that some of the instructions provided here might be outdated, as they were written for the version of TLSNotary available at the time of the workshop. For the latest updates and documentation, refer to the [official TLSNotary repository](https://github.com/tlsnotary).
:::
<!-- truncate -->
## Introduction
This workshop introduces you to TLSNotary, both in native Rust and in the browser.
**Workshop Objectives:**
* Understand the applications of TLSNotary.
* Learn the basics of attesting, proving, and verifying data using TLSNotary.
## Pre-Workshop Setup
To avoid network issues on conference Wi-Fi, please download the following dependencies in advance:
1. Clone repositories, get dependencies and build code
```shell
# Clone Git Repositories:
git clone -b dev https://github.com/tlsnotary/tlsn
git clone https://github.com/tlsnotary/tlsn-plugin-boilerplate
git clone https://github.com/tlsnotary/tlsn-js
# Install websocket proxy
cargo install wstcp
# Build rust code (and download dependencies)
cargo build --manifest-path tlsn/Cargo.toml --release --examples
# Build Javascript code (and download dependencies)
npm install --prefix tlsn-plugin-boilerplate
npm run --prefix tlsn-plugin-boilerplate build
```
Note that this requires the [Rust](https://www.rust-lang.org/tools/install) and [NPM](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) toolchains.
2. [Install the TLSNotary Browser Plugin from the Chrome Web Store](https://chromewebstore.google.com/detail/tlsn-extension/gcfkkledipjbgdbimfpijgbkhajiaaph)
## Getting Started
In the first part of the workshop, well begin with the basics. To keep things simple, well use a local, single-computer setup wherever possible.
### Rust: Interactive Verification without a Trusted Notary
Well start by running the most basic TLSNotary setup.
![Overview Prover Verifier](https://hackmd.io/_uploads/ByCJOjF-Jg.svg)
Well run a local test server that serves the Prover JSON or HTML content. The Prover and Verifier will fetch this data via MPC, allowing the Prover to reveal parts of the JSON to the Verifier, who then verifies it.
We call this setup **Interactive Verification**.
> 🚀 The first examples use Rust. If youre not a Rust dev, dont worry—you dont need to write Rust code yourself. 😇
#### Source Code
The source code is located at `crates/examples/interactive/interactive.rs` in the `tlsn` repository.
The setup has three main parts:
* `main()`: wires everything together.
* `prover(...)`:
* Connects to the Verifier.
* Connects to the TLS Server.
* Performs MPC-TLS handshake.
* Sends a request to the Server and waits for the response.
* Redacts/reveals data and creates a proof for the Verifier.
* `verifier(...)`:
* Verifies MPC-TLS and waits for (redacted) data.
* Verifies disclosed data (hostname, content).
#### Start the Server
```shell
PORT=4000 cargo run --bin tlsn-server-fixture
```
#### Run the Example
To run the interactive example:
```shell
SERVER_PORT=4000 cargo run --release --example interactive
```
Expected log:
```log
Successfully verified https://test-server.io:4000/formats/html
Verified sent data:
GET https://test-server.io:4000/formats/html HTTP/1.1
host: test-server.io
connection: close
secret: 🙈🙈🙈🙈🙈🙈🙈🙈🙈🙈🙈🙈🙈🙈🙈🙈🙈🙈🙈🙈🙈🙈🙈🙈🙈🙈🙈🙈
```
For detailed debug information:
```shell
RUST_LOG=debug,yamux=info,uid_mux=info SERVER_PORT=4000 cargo run --release --example interactive
```
> **Note:** We run in `release` mode because `debug` mode is too slow to complete the TLS session before it times out.
#### Extra Tasks (optional)
- [ ] Experiment with different redactions.
- [ ] Try proving JSON content instead (`/formats/json`).
### Rust: Notarize with a Trusted Notary
Next, well run the TLSNotary protocol with a Notary server blindly verifying the TLS session.
![Overview Notary](https://hackmd.io/_uploads/r1haDsKWkg.svg)
Leave the test server running.
Start the notary server:
```shell
cd crates/notary/server
cargo run -r -- --tls-enabled false
```
The `--tls-enabled false` argument disables TLS between the Prover and the Notary. We use it here to simplify the setup.
The process has three steps:
1. **Notarize** a request and response from the test server and obtain an attestation.
2. **Create a redacted, verifiable presentation** from the attestation.
3. **Verify the presentation.**
The term *presentation* aligns with [W3 Verifiable Credentials](https://www.w3.org/TR/vc-data-model/#dfn-verifiable-presentations).
#### 1. Notarize
Next create a presentation with:
```shell
SERVER_PORT=4000 cargo run --release --example attestation_prove
```
This notarizes a request and `json`-response from the test server and acquires an attestation. The result is written to two files: an attestation and the MPC secrets. In the next step the Prover can use these two files to create different presentations for the Verifier to verify.
#### 2. Create Presentation
```shell
cargo run --release --example attestation_present
```
In `crates/examples/attestation/present.rs`, inspect how certain content is revealed or concealed.
#### 3. Verify
Finally the verifier can verify the presentation:
```shell
cargo run --release --example attestation_verify
```
This will verify the presentation and print the disclosed data to the console.
Note that in a real world scenario, the Prover would send the Presentation to the Verifier, here we just used the filesystem.
#### Extra tasks (optional)
Try the above steps with different types of web content:
- [ ] **HTML**: Append `-- html` to the commands for each of the steps
- [ ] **Authenticated content**: Append `-- authenticated` to the commands for each of the steps. (This will add an authentication token to the request to access 'private' data).
### Browser: notarize with the Browser extension
Good job. Now that you have a better understanding of what is going on under the hood: Let's try TLSNotary in the Browser with our Browser Extension.
Running the TLSNotary protocol in the Browser needs something special. Browser extensions can not open TCP connections, and this is required to connect the Prover to the Server. So to run the Prover in a browser we need a workaround: a websocket proxy.
The easiest way to run a local websocket proxy is to use `wstcp`:
```shell
wstcp --bind-addr 127.0.0.1:55688 api.x.com:443
```
This command allows the browser to setup a TCP connection to `api.x.com` by talking to the websocket at port `55688`.
Next we need to configure the Browser Extension options to use the local notary and websocket proxy.
* Click the **Options** button in the Extension and make following changes
* **Notary** API: Keep the default, this will use PSE's development notary server. Note that you can also use a local notary server, but make sure its version matches the version of the browser extension (i.e. `v0.1.0-alpha.7`)
* **Proxy API**: `ws://localhost:55688`
> You can also use the [proxy server hosted by PSE](https://docs.tlsnotary.org/developers/notary_server.html#websocket-proxy-server). Note that this proxy server only supports a limited list of whitelisted domains. If you want to access other domains, you will need to run your own proxy server.
#### Notarize
Try either the Twitter or Discord plugin and follow the steps in UI. If everything works correctly, you should and up with a valid presentation. Click the **View Proof** button to check the verified presentation.
#### Extra items (optional)
- [ ] Instead of using a plugin, try to manually notarize a page as documented on https://docs.tlsnotary.org/quick_start/browser_extension.html
## Notarize in teams
This part is optional but should be fun: team up with your neighbors and distribute roles: Server, Prover, Verifier and Notary. Can you make it work?
Make sure to open the required ports on your firewall.
### Notarize with a Trusted Notary
Distribute the roles and make sure to configure `NOTARY_HOST`, `NOTARY_PORT`,`SERVER_HOST` and `SERVER_PORT` to the correct values. Check `/crates/examples/attestation/prove.rs` for the details.
### Interactive verifier
For the interactive verifier you can use the *interactive verifier* demo from the https://github.com/tlsnotary/tlsn-js repo. The demo is in the `demo/interactive-demo` folder.
One team member starts the Verifier:
```bash
cd interactive-demo/verifier-rs; cargo run --release
```
And another team member runs the Prover. Make sure to configure the correct `VERIFIER_HOST` first:
```bash
cd interactive-demo/prover-rs; cargo run --release
```
- [ ] Make it work
- [ ] Check that the Verifier is not talking to the TLS server
- [ ] Check that the Verifier only sees what the prover wants to disclose.
- [ ] Try to make it break
## Building apps with TLSNotary
👍 Good job! We are progressing nicely and learning a lot.
The next topic is building web applications that use TLSNotary attestations.
First we will test a demonstration webapp that uses the browser extension to request an attestation of the user's Twitter profile.
Next we will build this plugin ourselves.
### Browser extension Connection API
Next topic is exploring a web application that verifies that you have a Twitter account and rewards you with a POAP if you do.
Visit https://demo.tlsnotary.org and walk through the steps.
You can verify what the web app is doing by reading the source code at https://github.com/tlsnotary/tlsn-plugin-demo.
You can find more information on the [Provider API in our documentation](https://docs.tlsnotary.org/extension/provider.html).
> ⚠️ **Note:** This demo allows for proving with any notary (so that you can use local notary to avoid stressing the network). In real world applications, please verify the attestation more carefully to make sure the attestations you receive are trustworthy.
### Browser extension plugins
```shell
git clone https://github.com/tlsnotary/tlsn-plugin-boilerplate
npm i
npm run build
```
After you run the above commands, the dist folder should now contain a `twitter_profile.tlsn.wasm` file. This is a plugin that can be loaded in the Extension.
Before we add the plugin into the extension, remove the existing Twitter plugin to avoid confusion (Hover the plugin and click the red cross in the top right of the extension).
Next click **Add plugin** and select the `twitter_profile.tlsn.wasm` file in the `dist` folder.
Next try the plugin by clicking it in the extension and following the steps in the sidebar.
You can find more information at https://docs.tlsnotary.org/extension/plugins.html
> Note: Because we use Extism to build the TLSNotary Extension plugins, you can also write plugins in Rust. See https://github.com/tlsnotary/tlsn-plugin-boilerplate/tree/main/examples/twitter_profile_rs for an example.
### Play Time
You now have experimented with the basic building blocks. Next step is to build your own applications with TLSNotary.
Think of what Web2 data you'd like to unlock: Private message, identity providers, reputation sources, financial information, ...
Build a custom plugin or develop a complete webapp with TLSNotary.

18
blog/authors.yml Normal file
View File

@@ -0,0 +1,18 @@
sinu:
name: Sinu
title: Tech lead
url: https://github.com/sinui0
image_url: https://github.com/sinui0.png
page: true
socials:
x: sinu_eth
github: sinui0
heeckhau:
name: Hendrik Eeckhaut
url: https://github.com/heeckhau
image_url: https://github.com/heeckhau.png
page: true
socials:
x: heeckhau
github: heeckhau

19
blog/tags.yml Normal file
View File

@@ -0,0 +1,19 @@
facebook:
label: MPC-TLS
permalink: /facebook
description: Facebook tag description
hello:
label: Hello
permalink: /hello
description: Hello tag description
docusaurus:
label: Docusaurus
permalink: /docusaurus
description: Docusaurus tag description
hola:
label: Hola
permalink: /hola
description: Hola tag description

View File

@@ -1,13 +0,0 @@
import { classed } from "@tw-classed/react";
export const AppContainer = classed.div("px-6 mx-auto w-full", {
variants: {
size: {
small: "max-w-[700px] md:px-0",
medium: "max-w-screen-2xl md:px-16",
},
},
defaultVariants: {
size: "medium",
},
});

View File

@@ -1,87 +0,0 @@
import { AppContainer } from "./AppContainer";
import { Icons } from "./Icons";
import { classed } from "@tw-classed/react";
import { NAVIGATION, SOCIALS_FOOTER } from "../app/settings";
import Link from "next/link";
import { LABELS } from "../content";
const NavLabel = classed.span("flex gap-2 items-center font-sans text-white-100 text-sm duration-300", {
variants: {
hover: {
true: "hover:text-gold",
},
},
});
export const AppFooter = () => {
return (
<div className="bg-primary">
<AppContainer className="py-8 px-8 flex gap-10 flex-col justify-between md:flex-row md:gap-0 md:px-0 ">
<div className="flex flex-col md:flex-row items-center gap-[34px] my-auto order-2 md:order-1">
<Link href="/">
<Icons.Logo className="text-gray" />
</Link>
<NavLabel className="text-center px-4 font-normal text-xs font-inter md:px-0 md:text-left md:max-w-[250px]">
{LABELS.COMMON.FOOTER.TITLE}
</NavLabel>
</div>
<div className="flex flex-col md:flex-row gap-10 md:gap-[100px] order-1 md:order-1">
<div className="flex flex-col gap-6">
{NAVIGATION.map(({ label, href, external }, index) => {
if (external) return null;
return (
<Link
className="flex md:block uppercase"
key={index}
href={href}
target={external ? "_blank" : undefined}
>
<NavLabel className="md:mx-auto" hover>
{label}
</NavLabel>
</Link>
);
})}
</div>
<div className="flex flex-col gap-6">
{NAVIGATION.map(({ label, href, external }, index) => {
if (!external) return null;
return (
<Link
className="flex gap-1 items-center md:block uppercase group"
key={index}
href={href}
target={external ? "_blank" : undefined}
>
<NavLabel className="md:mx-auto" hover>
<div className="flex items-center gap-1">
<Icons.ExternalLink className="text-white group-hover:text-brown-50 duration-200" />
{label}
</div>
</NavLabel>
</Link>
);
})}
</div>
<div className="flex flex-col gap-6">
{SOCIALS_FOOTER.map(({ label, href, external, icon }, index) => {
return (
<Link
className="flex md:block uppercase"
key={index}
href={href}
target={external ? "_blank" : undefined}
>
<NavLabel className="md:mx-auto" hover>
{icon}
{label}
</NavLabel>
</Link>
);
})}
</div>
</div>
</AppContainer>
</div>
);
};

View File

@@ -1,148 +0,0 @@
"use client";
import Link from "next/link";
import { AppContainer } from "./AppContainer";
import { Icons } from "./Icons";
import { NAVIGATION, SOCIALS_HEADER } from "../app/settings";
import { classed } from "@tw-classed/react";
import { usePathname } from "next/navigation";
import { useState } from "react";
import { cn } from "../shared/utils";
import { LABELS } from "../content";
const NavLabel = classed.span(
"relative overflow-hidden text-base md:text-lg text-primary font-semibold group-hover:text-brown-50 hover:text-gold duration-300 after:content-[''] after:h-1 after:w-full after:bottom-0 after:left-0 after:absolute p-2 duration-200",
{
variants: {
active: {
false: "after:bg-transparent",
true: "after:bg-brown-50",
},
},
}
);
const AppMobileNav = () => {
const [isOpen, setIsOpen] = useState(false);
return (
<div className="relative flex items-center lg:hidden">
<AppContainer className="flex w-full justify-between items-center py-4">
<Link href="/" type="button" aria-label="logo">
<Icons.Logo className="text-primary" size={48} />
</Link>
<button type="button" aria-label="burgher menu" onClick={() => setIsOpen(true)}>
<Icons.Burgher className="text-primary" />
</button>
</AppContainer>
{isOpen && (
<div
className="z-20 absolute inset-0 flex justify-end h-screen bg-black opacity-50"
onClick={() => setIsOpen(false)}
></div>
)}
<div
className={cn(
"fixed h-screen overflow-hidden duration-200 inset-y-0 right-0 z-30 flex flex-col bg-white dark:bg-gray-1000 text-white",
{
"w-full": isOpen,
"w-0": !isOpen,
}
)}
>
<div className="flex justify-end p-6">
<button type="button" onClick={() => setIsOpen(false)} aria-label="toggle menu">
<Icons.Close className="text-primary dark:text-white" />
</button>
</div>
<div className="flex w-full flex-col px-[16px] text-base font-medium">
{NAVIGATION.map((item, index) => {
return (
<Link
key={index}
href={`${item.href}`}
onClick={() => setIsOpen(false)}
className="flex items-center py-3 gap-3"
>
<span className="capitalize text-primary text-lg dark:text-white duration-200 font-semibold hover:text-gray-900">
{item.label}
</span>
{item.external && <Icons.ExternalLink className="text-primary" />}
</Link>
);
})}
</div>
<div className="flex h-full w-full flex-col items-center justify-end gap-5 py-[40px] text-sm">
<div className="flex gap-5">
{SOCIALS_HEADER.map(({ href, external, icon }, index) => {
return (
<Link
className="text-primary hover:text-gold duration-300"
key={index}
href={href}
target={external ? "_blank" : undefined}
>
{icon}
</Link>
);
})}
</div>
<span className="text-center font-sans text-primary text-sm px-8">{LABELS.COMMON.FOOTER.TITLE}</span>
</div>
</div>
</div>
);
};
const AppDesktopNav = () => {
const pathname = usePathname();
return (
<AppContainer className="hidden lg:py-[25px] lg:grid items-center grid-cols-[200px_1fr_200px]">
<Link href="/">
<Icons.Logo className="text-primary" />
</Link>
<div className="mx-auto flex items-center gap-16">
{NAVIGATION.map(({ label, href, external }, index) => {
const pathParts = href.split("/").filter(Boolean);
const isHome = pathname === "/" && href === "/";
// is home or the first part of the path matches the first part of the href
const isActive = isHome || (pathname !== null && pathParts[0] === pathname.split("/")[1]);
return (
<Link className="flex items-center group" key={index} href={href} target={external ? "_blank" : undefined}>
<NavLabel active={isActive}>{label}</NavLabel>
{external && <Icons.ExternalLink className="text-primary group-hover:text-brown-50 duration-200" />}
</Link>
);
})}
</div>
<div className="ml-auto">
<div className="flex gap-4">
{SOCIALS_HEADER.map(({ href, external, icon }, index) => {
return (
<Link
className="text-primary hover:text-gold duration-300"
key={index}
href={href}
target={external ? "_blank" : undefined}
>
{icon}
</Link>
);
})}
</div>
</div>
</AppContainer>
);
};
export const AppHeader = () => {
return (
<header className="sticky right-0 left-0 top-0 bg-gray backdrop-blur-xl z-10">
<AppDesktopNav />
<AppMobileNav />
</header>
);
};

View File

@@ -1,35 +0,0 @@
import Link from "next/link";
import React from "react";
import { Icons } from "./Icons";
import { cn } from "@/shared/utils";
interface LinkProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> {
children: React.ReactNode;
href: string;
external?: boolean;
showExternalIcon?: boolean;
}
/**
* This component easily manages internal and external links and adds the necessary attributes.
*
* @param {string} href - The URL of the link.
* @param {React.ReactNode} children - The content of the link.
* @param {boolean} external - If the link is external, in this case it will open in a new tab and also add rel="noreferrer noopener nofollow".
*/
export const AppLink = ({ href, children, external, className, showExternalIcon = false, ...props }: LinkProps) => {
return (
<Link
href={href}
target={external ? "_blank" : undefined}
rel={external ? "noreferrer noopener nofollow" : undefined}
className={cn(className, "flex items-center group")}
{...props}
>
{children}
{showExternalIcon && external && (
<Icons.ExternalLink className="text-brown-50 group-hover:text-brown-70 duration-300" />
)}
</Link>
);
};

View File

@@ -1,65 +0,0 @@
import ReactMarkdown, { Components } from "react-markdown";
import remarkGfm from "remark-gfm";
import rehypeRaw from "rehype-raw";
import { Label } from "./ui/Label";
import { createElement } from "react";
export const createMarkdownElement = (tag: keyof JSX.IntrinsicElements, props: any) =>
createElement(tag, {
...props,
});
// Styling for HTML attributes for markdown component
const REACT_MARKDOWN_CONFIG: Components = {
img: ({ node, className, ...props }) =>
createMarkdownElement("img", {
className: `${className} py-10`,
...props,
}),
a: ({ node, ...props }) =>
createMarkdownElement("a", {
className: "text-orange",
target: "_blank",
...props,
}),
u: ({ node, ...props }) =>
createMarkdownElement("span", {
className: "underline",
...props,
}),
ins: ({ node, ...props }) =>
createMarkdownElement("span", {
className: "underline",
...props,
}),
strong: ({ node, ...props }) =>
createMarkdownElement("span", {
className: "font-bold",
...props,
}),
b: ({ node, ...props }) =>
createMarkdownElement("b", {
className: "font-bold",
...props,
}),
span: ({ ...props }: any) => <Label.Paragraph {...props} />,
p: ({ ...props }: any) => <Label.Paragraph {...props} />,
};
interface MarkdownProps {
children: string;
customComponents?: Components;
}
export const AppMarkdown = ({ children, customComponents, ...props }: MarkdownProps) => {
return (
<ReactMarkdown
skipHtml={false}
components={{ ...REACT_MARKDOWN_CONFIG, ...customComponents }}
remarkPlugins={[remarkGfm]}
rehypePlugins={[rehypeRaw]}
>
{children}
</ReactMarkdown>
);
};

View File

@@ -1,197 +0,0 @@
interface IconProps extends React.SVGProps<SVGSVGElement> {
size?: number | string;
}
export const Icons: Record<string, any> = {
ExternalLink: (props: IconProps) => (
<svg
xmlns="http://www.w3.org/2000/svg"
width={props?.size || 20}
height={props?.size || 21}
viewBox="0 0 20 21"
fill="none"
{...props}
>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M3.06704 17.2267C3.25735 17.4169 3.53223 17.5331 3.81769 17.5331L3.80606 17.5204C4.08094 17.5204 4.35583 17.4042 4.5567 17.214L4.55776 17.2151L13.3348 8.44422V15.4201C13.3348 16.0011 13.7999 16.4766 14.392 16.4766C14.9735 16.4766 15.4492 16.0011 15.4492 15.4201V5.9115C15.4492 5.66553 15.367 5.44146 15.2291 5.26361C15.1993 5.22394 15.1664 5.18588 15.1302 5.14977C14.8641 4.88451 14.5017 4.78617 14.1669 4.855H4.87679C4.28473 4.855 3.81954 5.31986 3.81954 5.9115C3.81954 6.49258 4.28473 6.96801 4.87679 6.96801H11.8105L3.05647 15.7159V15.7265C2.64414 16.1385 2.64414 16.8147 3.06704 17.2267Z"
fill="currentColor"
/>
</svg>
),
Logo: (props: IconProps) => (
<svg
xmlns="http://www.w3.org/2000/svg"
width={props?.size || "88"}
height={props?.size || "89"}
viewBox="0 0 88 89"
fill="none"
{...props}
>
<path
d="M25.5484 1.20899C25.5484 0.67436 26.1196 0.332624 26.5923 0.58442L33.6891 4.36446C33.9202 4.48756 34.0645 4.72766 34.0645 4.98902V9.94049H37.6129C38.0048 9.94049 38.3226 10.2575 38.3226 10.6485V21.9766L36.1936 20.5606V12.0645H34.0645V81.4919C34.0645 81.6134 34.0332 81.7328 33.9735 81.8388L30.4251 88.1388C30.1539 88.6204 29.459 88.6204 29.1878 88.1388L25.6394 81.8388C25.5797 81.7328 25.5484 81.6134 25.5484 81.4919V1.20899Z"
fill="currentColor"
/>
<path d="M21.2903 26.2246V77.2012H12.7742V34.7207H0V26.2246H21.2903Z" fill="currentColor" />
<path d="M63.871 77.2012H72.3871V34.7207H76.6452V77.2012H85.1613V26.2246H63.871V77.2012Z" fill="currentColor" />
<path
d="M38.3226 26.2246H59.6129V34.7207H46.8387V47.4649H59.6129V77.2012H38.3226V68.7051H51.0968V55.9609H38.3226V26.2246Z"
fill="currentColor"
/>
</svg>
),
Close: (props: IconProps) => (
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" {...props}>
<path
id="Vector"
d="M12.0007 10.586L16.9507 5.63599L18.3647 7.04999L13.4147 12L18.3647 16.95L16.9507 18.364L12.0007 13.414L7.05072 18.364L5.63672 16.95L10.5867 12L5.63672 7.04999L7.05072 5.63599L12.0007 10.586Z"
fill="currentColor"
/>
</svg>
),
Burgher: (props: IconProps) => (
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" {...props}>
<path id="Vector" d="M18 18V20H6V18H18ZM21 11V13H3V11H21ZM18 4V6H6V4H18Z" fill="currentColor" />
</svg>
),
Discord: (props: IconProps) => (
<svg
xmlns="http://www.w3.org/2000/svg"
width={props?.size || "15"}
height={props?.size || "13"}
viewBox="0 0 15 13"
fill="none"
{...props}
>
<path
d="M12.7105 1.75655C11.7595 1.32021 10.7398 0.998736 9.67358 0.814615C9.65416 0.811062 9.63476 0.819942 9.62476 0.837703C9.49361 1.07096 9.34834 1.37527 9.24661 1.61445C8.09983 1.44276 6.95893 1.44276 5.83567 1.61445C5.73392 1.36995 5.58337 1.07096 5.45164 0.837703C5.44163 0.820535 5.42224 0.811654 5.40282 0.814615C4.3372 0.998148 3.31745 1.31962 2.36591 1.75655C2.35767 1.7601 2.35061 1.76602 2.34592 1.77371C0.41167 4.66345 -0.118203 7.48215 0.141735 10.2659C0.142911 10.2795 0.150556 10.2926 0.161142 10.3008C1.43731 11.238 2.67349 11.807 3.88672 12.1841C3.90613 12.19 3.92671 12.1829 3.93906 12.1669C4.22605 11.775 4.48188 11.3618 4.70122 10.9272C4.71417 10.9018 4.70181 10.8716 4.67535 10.8615C4.26957 10.7076 3.88319 10.5199 3.51151 10.3068C3.48211 10.2896 3.47976 10.2475 3.5068 10.2274C3.58502 10.1688 3.66325 10.1078 3.73794 10.0462C3.75145 10.035 3.77028 10.0326 3.78616 10.0397C6.22792 11.1546 8.87141 11.1546 11.2843 10.0397C11.3002 10.032 11.3191 10.0344 11.3332 10.0457C11.4079 10.1072 11.4861 10.1688 11.5649 10.2274C11.5919 10.2475 11.5902 10.2896 11.5608 10.3068C11.1891 10.524 10.8027 10.7076 10.3963 10.8609C10.3699 10.871 10.3581 10.9018 10.3711 10.9272C10.5951 11.3612 10.8509 11.7744 11.1326 12.1663C11.1444 12.1829 11.1656 12.19 11.185 12.1841C12.4041 11.807 13.6403 11.238 14.9164 10.3008C14.9276 10.2926 14.9347 10.2801 14.9358 10.2665C15.2469 7.04817 14.4148 4.25258 12.7299 1.7743C12.7258 1.76602 12.7187 1.7601 12.7105 1.75655ZM5.06586 8.57089C4.33072 8.57089 3.72499 7.89598 3.72499 7.06712C3.72499 6.23826 4.31898 5.56335 5.06586 5.56335C5.8186 5.56335 6.41847 6.24419 6.4067 7.06712C6.4067 7.89598 5.81272 8.57089 5.06586 8.57089ZM10.0235 8.57089C9.28837 8.57089 8.68263 7.89598 8.68263 7.06712C8.68263 6.23826 9.2766 5.56335 10.0235 5.56335C10.7762 5.56335 11.3761 6.24419 11.3643 7.06712C11.3643 7.89598 10.7762 8.57089 10.0235 8.57089Z"
fill="currentColor"
/>
</svg>
),
Github: (props: IconProps) => (
<svg
xmlns="http://www.w3.org/2000/svg"
width={props?.size || "18"}
height={props?.size || "17"}
viewBox="0 0 18 17"
fill="none"
{...props}
>
<path
d="M8.58004 1.41669C4.6665 1.41669 1.49671 4.58648 1.49671 8.50002C1.4959 9.98701 1.96336 11.4365 2.83277 12.6428C3.70218 13.8492 4.92939 14.7511 6.34029 15.2207C6.69446 15.2823 6.82691 15.0698 6.82691 14.8835C6.82691 14.7156 6.81771 14.1582 6.81771 13.5646C5.03837 13.8926 4.57796 13.1311 4.43629 12.7323C4.35625 12.5283 4.01129 11.9 3.71025 11.7314C3.46233 11.599 3.10816 11.271 3.70104 11.2625C4.25921 11.2533 4.65729 11.7761 4.79046 11.9886C5.42796 13.0596 6.44654 12.7585 6.85312 12.5729C6.91546 12.1125 7.10104 11.803 7.30504 11.6259C5.729 11.4488 4.08212 10.8375 4.08212 8.12815C4.08212 7.35748 4.35625 6.72069 4.80816 6.22414C4.73733 6.04706 4.48941 5.32102 4.879 4.34706C4.879 4.34706 5.47187 4.16148 6.82691 5.07381C7.40354 4.91377 7.99932 4.83322 8.59775 4.8344C9.19983 4.8344 9.80191 4.91373 10.3686 5.0731C11.7229 4.15227 12.3165 4.34777 12.3165 4.34777C12.7061 5.32173 12.4582 6.04777 12.3873 6.22485C12.8385 6.72069 13.1134 7.34898 13.1134 8.12815C13.1134 10.8467 11.458 11.4488 9.88196 11.6259C10.1384 11.8469 10.3601 12.2719 10.3601 12.9363C10.3601 13.8834 10.3509 14.6448 10.3509 14.8842C10.3509 15.0698 10.484 15.2908 10.8382 15.22C12.2443 14.7453 13.4661 13.8416 14.3316 12.6361C15.1972 11.4306 15.663 9.98406 15.6634 8.50002C15.6634 4.58648 12.4936 1.41669 8.58004 1.41669Z"
fill="currentColor"
/>
</svg>
),
Twitter: (props: IconProps) => (
<svg
xmlns="http://www.w3.org/2000/svg"
width={props?.size || "18"}
height={props?.size || "17"}
viewBox="0 0 18 17"
fill="none"
{...props}
>
<path
d="M15.7782 4.00634C15.2374 4.24554 14.6639 4.40264 14.0768 4.47243C14.6957 4.10227 15.1589 3.51973 15.3801 2.83334C14.7993 3.17901 14.1625 3.42126 13.4988 3.5523C13.0529 3.07529 12.462 2.75894 11.8178 2.65242C11.1737 2.54591 10.5124 2.65519 9.93673 2.96329C9.36109 3.27139 8.90336 3.76104 8.63471 4.35611C8.36606 4.95119 8.30153 5.61835 8.45117 6.25388C7.27329 6.19485 6.12099 5.88876 5.06908 5.35548C4.01717 4.8222 3.08918 4.07367 2.34533 3.15847C2.08204 3.6107 1.94368 4.12479 1.94442 4.64809C1.94442 5.67518 2.46717 6.58255 3.26192 7.1138C2.79159 7.09899 2.33162 6.97198 1.92033 6.74334V6.78018C1.92048 7.46421 2.15718 8.12715 2.59031 8.65659C3.02344 9.18603 3.62634 9.54939 4.29679 9.68505C3.86019 9.80337 3.40239 9.82081 2.95804 9.73605C3.14707 10.3248 3.51551 10.8398 4.01175 11.2088C4.508 11.5777 5.10722 11.7823 5.7255 11.7938C5.11101 12.2764 4.40742 12.6331 3.65496 12.8436C2.9025 13.0541 2.11593 13.1143 1.34021 13.0206C2.69433 13.8914 4.27065 14.3538 5.88063 14.3523C11.3298 14.3523 14.3098 9.83805 14.3098 5.92309C14.3098 5.79559 14.3063 5.66668 14.3006 5.54059C14.8806 5.12138 15.3812 4.60206 15.7789 4.00705L15.7782 4.00634Z"
fill="currentColor"
/>
</svg>
),
Website: (props: IconProps) => (
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="17" viewBox="0 0 18 17" fill="none" {...props}>
<path
d="M9.24984 16.9179C4.64734 16.9179 0.916504 13.1871 0.916504 8.58459C0.916504 3.98208 4.64734 0.251251 9.24984 0.251251C13.8523 0.251251 17.5832 3.98208 17.5832 8.58459C17.5832 13.1871 13.8523 16.9179 9.24984 16.9179ZM7.3415 14.9738C6.51935 13.2298 6.04306 11.3431 5.939 9.41792H2.63484C2.79699 10.7003 3.32811 11.9081 4.16364 12.8943C4.99918 13.8806 6.10318 14.603 7.3415 14.9738ZM7.60817 9.41792C7.734 11.4504 8.31484 13.3596 9.24984 15.0446C10.2101 13.315 10.771 11.3925 10.8915 9.41792H7.60817ZM15.8648 9.41792H12.5607C12.4566 11.3431 11.9803 13.2298 11.1582 14.9738C12.3965 14.603 13.5005 13.8806 14.336 12.8943C15.1716 11.9081 15.7027 10.7003 15.8648 9.41792ZM2.63484 7.75125H5.939C6.04306 5.82607 6.51935 3.93932 7.3415 2.19542C6.10318 2.56615 4.99918 3.28855 4.16364 4.27483C3.32811 5.26112 2.79699 6.46884 2.63484 7.75125ZM7.609 7.75125H10.8907C10.7705 5.77675 10.2098 3.85419 9.24984 2.12458C8.28957 3.85413 7.72863 5.77669 7.60817 7.75125H7.609ZM11.1582 2.19542C11.9803 3.93932 12.4566 5.82607 12.5607 7.75125H15.8648C15.7027 6.46884 15.1716 5.26112 14.336 4.27483C13.5005 3.28855 12.3965 2.56615 11.1582 2.19542Z"
fill="currentColor"
/>
</svg>
),
DiscordCircle: (props: IconProps) => (
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32" fill="none" {...props}>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M17.744 18.8C17.984 19.104 18.272 19.448 18.272 19.448C20.04 19.392 20.72 18.232 20.72 18.232C20.72 15.656 19.568 13.568 19.568 13.568C18.416 12.704 17.32 12.728 17.32 12.728L17.208 12.856C18.568 13.272 19.2 13.872 19.2 13.872C18.368 13.416 17.552 13.192 16.792 13.104C16.216 13.04 15.664 13.056 15.176 13.12C15.1341 13.12 15.0983 13.1261 15.0579 13.133L15.04 13.136C14.76 13.16 14.08 13.264 13.224 13.64C12.928 13.776 12.752 13.872 12.752 13.872C12.752 13.872 13.416 13.24 14.856 12.824L14.776 12.728C14.776 12.728 13.68 12.704 12.528 13.568C12.528 13.568 11.376 15.656 11.376 18.232C11.376 18.232 12.048 19.392 13.816 19.448C13.816 19.448 14.112 19.088 14.352 18.784C13.336 18.48 12.952 17.84 12.952 17.84C12.952 17.84 13.032 17.896 13.176 17.976C13.184 17.984 13.192 17.992 13.208 18C13.22 18.008 13.232 18.014 13.244 18.02C13.256 18.026 13.268 18.032 13.28 18.04C13.48 18.152 13.68 18.24 13.864 18.312C14.192 18.44 14.584 18.568 15.04 18.656C15.64 18.768 16.344 18.808 17.112 18.664C17.488 18.6 17.872 18.488 18.272 18.32C18.552 18.216 18.864 18.064 19.192 17.848C19.192 17.848 18.792 18.504 17.744 18.8ZM13.736 16.6C13.736 16.112 14.096 15.712 14.552 15.712C15.008 15.712 15.376 16.112 15.368 16.6C15.368 17.088 15.008 17.488 14.552 17.488C14.104 17.488 13.736 17.088 13.736 16.6ZM16.656 16.6C16.656 16.112 17.016 15.712 17.472 15.712C17.928 15.712 18.288 16.112 18.288 16.6C18.288 17.088 17.928 17.488 17.472 17.488C17.024 17.488 16.656 17.088 16.656 16.6Z"
fill="currentColor"
/>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M16 0C24.8366 0 32 7.16344 32 16C32 24.8366 24.8366 32 16 32C7.16344 32 0 24.8366 0 16C0 7.16344 7.16344 0 16 0ZM9 10.648C9 9.736 9.736 9 10.64 9H21.36C22.264 9 23 9.736 23 10.648V25L21.28 23.48L20.312 22.584L19.288 21.632L19.712 23.112H10.64C9.736 23.112 9 22.376 9 21.464V10.648Z"
fill="currentColor"
/>
</svg>
),
ChromeIcon: (props: IconProps) => (
<svg xmlns="http://www.w3.org/2000/svg"width="32" height="32" viewBox="0 0 48 48" {...props}>
<path
fillRule="evenodd"
clipRule="evenodd"
fill="currentColor"
d="M44,24c0,11.044-8.956,20-20,20S4,35.044,4,24S12.956,4,24,4S44,12.956,44,24z"></path>
<path fill="#ffc107" d="M24,4v20l8,4l-8.843,16c0.317,0,0.526,0,0.843,0c11.053,0,20-8.947,20-20S35.053,4,24,4z"></path>
<path fill="#4caf50" d="M44,24c0,11.044-8.956,20-20,20S4,35.044,4,24S12.956,4,24,4S44,12.956,44,24z"></path>
<path fill="#ffc107" d="M24,4v20l8,4l-8.843,16c0.317,0,0.526,0,0.843,0c11.053,0,20-8.947,20-20S35.053,4,24,4z"></path>
<path fill="#f44336" d="M41.84,15H24v13l-3-1L7.16,13.26H7.14C10.68,7.69,16.91,4,24,4C31.8,4,38.55,8.48,41.84,15z"></path>
<path fill="#dd2c00" d="M7.158,13.264l8.843,14.862L21,27L7.158,13.264z"></path>
<path fill="#558b2f" d="M23.157,44l8.934-16.059L28,25L23.157,44z"></path>
<path fill="#f9a825" d="M41.865,15H24l-1.579,4.58L41.865,15z"></path>
<path fill="#fff" d="M33,24c0,4.969-4.031,9-9,9s-9-4.031-9-9s4.031-9,9-9S33,19.031,33,24z"></path>
<path fill="#2196f3" d="M31,24c0,3.867-3.133,7-7,7s-7-3.133-7-7s3.133-7,7-7S31,20.133,31,24z"></path>
</svg>
),
TwitterCircle: (props: IconProps) => (
<svg xmlns="http://www.w3.org/2000/svg" width="33" height="33" viewBox="0 0 33 33" fill="none" {...props}>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M0.532715 16.834C0.532715 8.00056 7.69367 0.8396 16.5272 0.8396C25.3606 0.8396 32.5216 8.00056 32.5216 16.834C32.5216 25.6675 25.3606 32.8285 16.5272 32.8285C7.69367 32.8285 0.532715 25.6675 0.532715 16.834ZM22.625 12.3356C23.3248 12.2356 23.9246 12.1357 24.5244 11.8358C24.1245 12.5355 23.5247 13.1353 22.825 13.5352C23.0249 18.2336 19.6261 23.3318 13.5282 23.3318C11.7288 23.3318 10.0294 22.732 8.52994 21.8323C10.2293 22.0322 12.0287 21.5324 13.2283 20.6327C11.7288 20.6327 10.5292 19.6331 10.1294 18.3335C10.6292 18.4335 11.129 18.3335 11.6289 18.2336C10.1294 17.8337 9.02976 16.4342 9.02976 14.9347C9.52959 15.1346 10.0294 15.3346 10.5292 15.3346C9.12973 14.3349 8.6299 12.4356 9.52959 10.9361C11.229 12.9354 13.6282 14.2349 16.3272 14.3349C15.8274 12.3356 17.4268 10.3363 19.5261 10.3363C20.4258 10.3363 21.3255 10.7362 21.9253 11.336C22.725 11.136 23.4248 10.9361 24.0246 10.5362C23.8246 11.336 23.3248 11.9357 22.625 12.3356Z"
fill="currentColor"
/>
</svg>
),
ArrowUp: (props: IconProps) => (
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" {...props}>
<path
d="M12 10.828L7.04999 15.778L5.63599 14.364L12 8L18.364 14.364L16.95 15.778L12 10.828Z"
fill="currentColor"
/>
</svg>
),
GithubCircle: (props: IconProps) => (
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32" fill="none" {...props}>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M0 16C0 7.16344 7.16344 0 16 0C24.8366 0 32 7.16344 32 16C32 24.8366 24.8366 32 16 32C7.16344 32 0 24.8366 0 16ZM8 16.1675C8 11.7639 11.5718 8.192 15.9755 8.192C20.3792 8.192 23.951 11.7639 24 16.1675C24 19.6905 21.7492 22.6752 18.5688 23.7516C18.1774 23.8006 18.0306 23.5559 18.0306 23.3602V21.1584C18.0306 20.4244 17.7859 19.9351 17.4924 19.6905C19.2538 19.4948 21.1132 18.8587 21.1132 15.7761C21.1132 14.8954 20.7706 14.1614 20.2814 13.6232C20.2852 13.6078 20.2906 13.5885 20.297 13.5655C20.3719 13.2953 20.5892 12.5111 20.1835 11.5192C20.1835 11.5192 19.4985 11.3235 17.9816 12.351C17.3456 12.2042 16.6605 12.1064 15.9755 12.1064C15.2905 12.1064 14.6055 12.1553 13.9694 12.351C12.4526 11.3235 11.7676 11.5192 11.7676 11.5192C11.3351 12.5763 11.6105 13.3975 11.6669 13.5657L11.6697 13.5743C11.1315 14.1614 10.8379 14.8464 10.8379 15.7272C10.8379 18.8097 12.6973 19.4948 14.4587 19.6905C14.263 19.8862 14.0184 20.2287 13.9694 20.7669C13.5291 20.9626 12.4037 21.3052 11.6697 20.0819C11.6697 20.0819 11.2294 19.299 10.4465 19.2501C10.4465 19.2501 9.66364 19.2501 10.3976 19.7394C10.3976 19.7394 10.9358 19.9841 11.2783 20.9137C11.2783 20.9137 11.7676 22.4795 13.9694 21.9902V23.3602C13.9694 23.5559 13.8226 23.8006 13.4312 23.7516C10.2997 22.6752 8 19.6905 8 16.1675Z"
fill="currentColor"
/>
</svg>
),
DividerHomepage: (props: IconProps) => (
<svg xmlns="http://www.w3.org/2000/svg" width="766" height="112" viewBox="0 0 766 112" fill="none" {...props}>
<path
d="M7.08083 111.735C2.43838 111.735 -0.529098 106.775 1.65739 102.67L34.4815 41.045C35.5504 39.0382 37.6354 37.7849 39.9049 37.7849H82.9012V6.97233C82.9012 3.56887 85.6537 0.809822 89.0492 0.809822H187.417L175.121 19.2973H101.345V37.7849H704.221C705.276 37.7849 706.313 38.057 707.233 38.5749L761.94 69.3875C766.121 71.7428 766.121 77.7771 761.94 80.1324L707.233 110.945C706.313 111.463 705.276 111.735 704.221 111.735H7.08083Z"
fill="#243F5F"
/>
</svg>
),
Check: (props: IconProps) => (
<svg xmlns="http://www.w3.org/2000/svg" width="25" height="25" viewBox="0 0 25 25" fill="none" {...props}>
<path
d="M17.3445 8.03185C17.5557 7.83075 17.8368 7.71957 18.1284 7.72178C18.4201 7.72399 18.6994 7.8394 18.9076 8.04367C19.1158 8.24794 19.2364 8.52509 19.2441 8.81663C19.2518 9.10818 19.146 9.39131 18.9489 9.6063L12.966 17.0887C12.8631 17.1995 12.739 17.2884 12.6009 17.3502C12.4629 17.4119 12.3138 17.4451 12.1627 17.4479C12.0115 17.4507 11.8613 17.423 11.7211 17.3665C11.5808 17.3099 11.4535 17.2256 11.3466 17.1187L7.37893 13.1511C7.26844 13.0481 7.17982 12.924 7.11835 12.786C7.05689 12.6481 7.02384 12.4991 7.02117 12.3481C7.01851 12.1971 7.04628 12.0471 7.10285 11.9071C7.15941 11.7671 7.2436 11.6399 7.35039 11.5331C7.45718 11.4263 7.58438 11.3421 7.72442 11.2855C7.86445 11.229 8.01444 11.2012 8.16545 11.2039C8.31645 11.2065 8.46537 11.2396 8.60332 11.301C8.74127 11.3625 8.86542 11.4511 8.96838 11.5616L12.1083 14.7L17.316 8.06483C17.3254 8.05329 17.3354 8.04228 17.346 8.03185H17.3445Z"
fill="#12E700"
/>
</svg>
),
X: (props: IconProps) => (
<svg xmlns="http://www.w3.org/2000/svg" width="25" height="25" viewBox="0 0 25 25" fill="none" {...props}>
<path
d="M7.86138 7.48757C7.93102 7.41775 8.01376 7.36236 8.10484 7.32456C8.19593 7.28677 8.29358 7.26731 8.39219 7.26731C8.49081 7.26731 8.58846 7.28677 8.67954 7.32456C8.77063 7.36236 8.85336 7.41775 8.92301 7.48757L12.8906 11.4567L16.8583 7.48757C16.928 7.41787 17.0107 7.36257 17.1018 7.32485C17.1929 7.28712 17.2905 7.2677 17.3891 7.2677C17.4876 7.2677 17.5853 7.28712 17.6763 7.32485C17.7674 7.36257 17.8502 7.41787 17.9199 7.48757C17.9896 7.55728 18.0449 7.64004 18.0826 7.73111C18.1203 7.82219 18.1398 7.91981 18.1398 8.01839C18.1398 8.11697 18.1203 8.21459 18.0826 8.30567C18.0449 8.39674 17.9896 8.4795 17.9199 8.54921L13.9508 12.5168L17.9199 16.4844C17.9896 16.5542 18.0449 16.6369 18.0826 16.728C18.1203 16.8191 18.1398 16.9167 18.1398 17.0153C18.1398 17.1138 18.1203 17.2115 18.0826 17.3025C18.0449 17.3936 17.9896 17.4764 17.9199 17.5461C17.8502 17.6158 17.7674 17.6711 17.6763 17.7088C17.5853 17.7465 17.4876 17.766 17.3891 17.766C17.2905 17.766 17.1929 17.7465 17.1018 17.7088C17.0107 17.6711 16.928 17.6158 16.8583 17.5461L12.8906 13.577L8.92301 17.5461C8.8533 17.6158 8.77055 17.6711 8.67947 17.7088C8.58839 17.7465 8.49077 17.766 8.39219 17.766C8.29361 17.766 8.19599 17.7465 8.10492 17.7088C8.01384 17.6711 7.93108 17.6158 7.86138 17.5461C7.79167 17.4764 7.73637 17.3936 7.69865 17.3025C7.66092 17.2115 7.64151 17.1138 7.64151 17.0153C7.64151 16.9167 7.66092 16.8191 7.69865 16.728C7.73637 16.6369 7.79167 16.5542 7.86138 16.4844L11.8305 12.5168L7.86138 8.54921C7.79156 8.47956 7.73616 8.39683 7.69836 8.30574C7.66057 8.21466 7.64111 8.11701 7.64111 8.01839C7.64111 7.91977 7.66057 7.82213 7.69836 7.73104C7.73616 7.63995 7.79156 7.55722 7.86138 7.48757Z"
fill="#FF0000"
/>
</svg>
),
};

View File

@@ -1,20 +0,0 @@
import { HTMLAttributes, ReactNode } from "react";
import { Label } from "./ui/Label";
import { AppMarkdown } from "./AppMarkdown";
interface SectionProps extends Omit<HTMLAttributes<HTMLDivElement>, "title"> {
title: ReactNode;
description?: string;
}
export const Section = ({ title, description, children }: SectionProps) => {
return (
<div className="flex flex-col gap-4 md:gap-16">
<div className="flex flex-col gap-4 md:gap-8">
{typeof title === "string" ? <Label.SectionTitle className="text-center">{title}</Label.SectionTitle> : title}
{description && <AppMarkdown>{description}</AppMarkdown>}
{children && <div className="flex">{children}</div>}
</div>
</div>
);
};

View File

@@ -1,53 +0,0 @@
"use client";
import { ReactNode, useState } from "react";
import { Icons } from "../Icons";
import { cn } from "../../shared/utils";
interface AccordionProps {
label: string;
children?: ReactNode;
}
const Accordion = ({ label, children }: AccordionProps) => {
const [isOpen, setIsOpen] = useState(false);
return (
<div
className="flex flex-col py-3 px-6 rounded-lg bg-gray border border-gray-100 hover:bg-gray-100 duration-200"
aria-expanded={isOpen}
>
<div
className="grid grid-cols-[1fr_20px] gap-1 justify-between items-center cursor-pointer"
onClick={() => {
setIsOpen(!isOpen);
}}
>
<span className="font-inter leading-5 text-base text-primary font-bold">{label}</span>
<Icons.ArrowUp
className={cn("duration-200", {
"transform rotate-180": !isOpen,
})}
/>
</div>
<div className="overflow-hidden box-border transition-all duration-300 ease-in-out">
<div
className={cn(
"block overflow-hidden max-h-0 duration-200 ease-in-out",
isOpen ? "grid-rows-[1fr] opacity-100 max-h-full" : "grid-rows-[0fr] opacity-0"
)}
>
{typeof children === "string" ? (
<p className="block overflow-hidden pt-4 text-primary text-sm leading-5 font-sans font-normal">
{children}
</p>
) : (
children
)}
</div>
</div>
</div>
);
};
Accordion.displayName = "Accordion";
export { Accordion };

View File

@@ -1,100 +0,0 @@
import { ReactNode } from "react";
import remarkGfm from "remark-gfm";
import rehypeRaw from "rehype-raw";
import type * as Classed from "@tw-classed/react";
import { classed } from "@tw-classed/react";
import { cn } from "../../shared/utils";
import ReactMarkdown from "react-markdown";
import { createMarkdownElement } from "../AppMarkdown";
import { AppContainer } from "../AppContainer";
export const BannerWrapper = classed.div("relative md:py-[120px]", {
variants: {
color: {
brown: "bg-brown-50",
gray: "bg-gray",
},
spacing: {
small: "py-8",
medium: "py-16",
},
},
defaultVariants: {
color: "brown",
spacing: "small",
},
});
export const BannerTitle = classed.h4("text-gold", {
variants: {
titleSize: {
small: "text-[32px] font-semibold",
medium: "text-2xl md:text-4xl lg:text-5xl md:leading-[49px] font-bold",
},
variant: {
brown: "text-gold",
primary: "text-primary",
},
},
defaultVariants: {
titleSize: "medium",
},
});
type BannerProps = Classed.VariantProps<typeof BannerTitle> &
Classed.VariantProps<typeof BannerWrapper> & {
title: string;
description?: string;
actions?: ReactNode;
children?: ReactNode;
descriptionClass?: string;
};
export const Banner = ({ title, description, actions, descriptionClass, color }: BannerProps) => {
return (
<BannerWrapper spacing="medium" color={color}>
<AppContainer>
<div className="mx-auto py-10 md:py-16 px-8 md:px-[120px] bg-white rounded-3xl w-full md:max-w-[900px]">
<div className={cn("flex flex-col gap-8")}>
<div className="flex flex-col gap-4 md:gap-6">
<span className=" text-primary font-inter font-bold text-2xl text-center md:text-5xl">{title}</span>
{description && (
<ReactMarkdown
remarkPlugins={[remarkGfm]}
rehypePlugins={[rehypeRaw]}
skipHtml={false}
components={{
strong: ({ node, ...props }) =>
createMarkdownElement("span", {
className: "font-medium",
...props,
}),
a: ({ node, ...props }) =>
createMarkdownElement("a", {
className: "text-primary font-medium leading-5 text-sm font-inter md:text-xl md:leading-6",
target: "_blank",
...props,
}),
span: ({ ...props }: any) => (
<span className="text-primary font-normal text-lg md:text-xl md:leading-6" {...props} />
),
p: ({ ...props }: any) => (
<span
className="text-primary font-inter font-medium text-sm leading-5 md:font-normal md:text-xl md:leading-6"
{...props}
/>
),
}}
className={cn(descriptionClass, "text-primary font-normal text-lg md:text-xl md:leading-6")}
>
{description}
</ReactMarkdown>
)}
</div>
<div className="mx-auto">{actions}</div>
</div>
</div>
</AppContainer>
</BannerWrapper>
);
};

View File

@@ -1,45 +0,0 @@
import { classed } from "@tw-classed/react";
import type * as Classed from "@tw-classed/react";
import React, { forwardRef, HTMLAttributes } from "react";
const ButtonComponent = classed.button(
"relative overflow-hidden font-medium cursor-pointer justify-center flex items-center gap-2 border rounded-[32px] inline-block disabled:opacity-50 disabled:cursor-not-allowed transition-all duration-300 ease-in-out",
{
variants: {
variant: {
transparent: "border-transparent bg-transparent text-brown-50 hover:text-brown-70 !p-2",
primary: "bg-primary border-primary text-white hover:bg-brown-70 hover:border-brown-70 hover:text-white",
},
size: {
medium: "text-sm md:text-base lg:text-xl md:leading-6 py-2 md:py-[14px] px-8",
},
},
defaultVariants: {
variant: "primary",
size: "medium",
},
}
);
type ButtonVariants = Classed.VariantProps<typeof ButtonComponent>;
interface ButtonProps extends ButtonVariants, HTMLAttributes<HTMLButtonElement> {
children?: React.ReactNode;
icon?: React.ReactNode;
disabled?: boolean;
}
const Button = forwardRef<HTMLButtonElement, ButtonProps>((props, ref) => {
const { children, variant, size, icon } = props;
return (
<ButtonComponent ref={ref} variant={variant} size={size} {...props}>
{icon}
<span className="z-[2]">{children}</span>
</ButtonComponent>
);
});
Button.displayName = "Button";
export { Button };

View File

@@ -1,29 +0,0 @@
import { classed } from "@tw-classed/react";
const CardBase = classed.div("bg-primary border border-gray-100 rounded-[16px] overflow-hidden", {
variants: {
spacing: {
small: "p-8",
medium: "py-8 px-10 md:px-16",
},
shadow: {
true: "shadow-card",
},
},
defaultVariants: {
shadow: true,
spacing: "small",
},
});
const CardImage = classed.div("min-h-[155px] bg-gray-300 bg-cover bg-center");
const CardContent = classed.div("p-4");
const Card = {
displayName: "Card",
Base: CardBase,
Image: CardImage,
Content: CardContent,
};
export { Card };

View File

@@ -1,27 +0,0 @@
import { classed } from "@tw-classed/react";
const Title = classed.h1(
"text-2xl font-extrabold leading-1 text-primary md:text-6xl md:font-black lg:text-[96px] lg:leading-[101px]"
);
const Subtitle = classed.h6(
"text-brown-50 font-extrabold text-sm leading-none md:font-black md:text-2xl lg:text-7xl md:leading-6"
);
const SectionTitle = classed.h6(
"font-semibold font-inter text-primary text-2xl leading-[24px] md:text-[56px] md:leading-[56px]"
);
const Paragraph = classed.span(
"text-primary leading-5 font-medium fon-inter text-sm md:font-normal md:text-xl md:leading-6"
);
const Label = {
displayName: "Label",
Title,
Subtitle,
SectionTitle,
Paragraph,
};
export { Label };

View File

@@ -1,43 +0,0 @@
import { Icons } from "../components/Icons";
/**
Markdown supported for description
*/
export const ABOUT_CONTENT = {
WHO_WE_ARE: {
TITLE: "Who we are",
DESCRIPTION: `TLSNotary is an open-source protocol developed by the **Privacy and Scaling Exploration (PSE)** research lab of the Ethereum Foundation.
\nTLSNotary is not a new project; in fact, it has been around for **more than a decade**. In 2022, TLSNotary was rebuilt from the ground up in **Rust** incorporating state-of-the-art cryptographic protocols. This renewed version of the TLSNotary protocol offers enhanced security, privacy, and performance.
`,
},
HOW_IT_WORKS: {
TITLE: "How it works",
DESCRIPTION: `TLSNotary is a protocol which allows people to export data from any web application and prove facts about it to a third-party in a privacy-preserving way by leveraging secure multi-party computation (MPC) to authenticate data communicated between a Prover and a TLS-enabled web server.
<img class="w-full" src="/images/tlsnotary-diagram.svg" />
`,
STEPS: [
{
TITLE: "Step 1: Multiparty TLS Request",
DESCRIPTION:
"The Prover requests data from a Server over TLS. The verifier cooperates in secure and privacy-preserving multi-party computation (MPC). This cooperation guaranties that the Prover can not cheat and allows the Verifier to check the authenticity of the data in step 3.",
},
{
TITLE: "Step 2: Selective Disclosure",
DESCRIPTION:
"The Prover selectively discloses the data to the Verifier by redacting sensitive information prior to sharing it. Selective disclosure may involve simple redactions, or more advanced techniques such as a zero-knowledge proofs that can prove properties of redacted data without revealing the data itself.",
},
{
TITLE: "Step 3: Data Verification",
DESCRIPTION:
"The Verifier verifies that the prover did not tamper with the data and also verifiers the data origin, by inspecting the Server certificate through trusted certificate authorities (CAs). The Verifier can now make assertions about the non-redacted content of the transcript.",
},
],
},
GET_INVOLVED: {
TITLE: "Get involved",
DESCRIPTION:
"An alpha version of the TLSNotary protocol is available for testing. We welcome folks to start playing around with it, including trying to break it!\n\nBoth codebases are 100% Rust and compile to WASM targets with an eye on deployment into browser environments. All our code is and always will be open source! Dual-licensed under Apache 2 and MIT, at your choice.\n\nWe've invested effort into making sure our code is modular and capable of evolving. We hope that others may find some of the components independently interesting and useful. Contributions are welcome!",
},
};

View File

@@ -1,21 +0,0 @@
export const COMMON_CONTENT = {
VIEW_DOCUMENTATION: "View Documentation",
FORK_REPO: "Fork github repo",
AND_MORE: "... and more!",
CHECKOUT_GITHUB: "Check out our Github",
CHECKOUT_DOCS: "Check out our documentation",
CHECKOUT_DEMO: "Try TLSNotary",
LEARN_THE_BASICS: "Learn the basics",
SERVER_AUTHENTICATION: "Server Authentication",
DATA_PORTABILITY: "Data Portability",
FAQ: "FAQ",
JOIN_DISCORD: "Join Our Discord",
CONNECT_WITH_US: {
TITLE: "Connect with us",
DESCRIPTION:
"Our team believes in open-source development with a strong emphasis on trustlessness. We are committed to transparency and community-driven improvements. Come find us in our public Discord to learn more and collaborate!",
},
FOOTER: {
TITLE: "TLSNotary is a project of Privacy and Scaling Explorations, an Ethereum Foundation supported team.",
},
};

View File

@@ -1,63 +0,0 @@
interface FAQItem {
question: string;
answer: string;
}
/**
Markdown supported for answer
*/
export const FAQS: FAQItem[] = [
{
question: "Why is TLS not sufficient for data portability?",
answer:
"TLS indeed signs a checksum (a Message Authentication Code, MAC) to check data integrity. However, in TLS, both the Server and the User use symmetric keys for data exchange, meaning the same key is employed for both encryption and decryption. This symmetric key usage allows a User to modify the data and retroactively compute a new checksum. As a result, this checksum alone is insufficient to guarantee data authenticity to a third party.",
},
{
question: "How can I verify the data origin in a TLSNotary proof?",
answer:
"The proof contains the domain name and ephemeral public key of the server. A standard certificate verifier can verify whether the key is valid for the provided server name and that it chains to at least one trusted root certificate.",
},
{
question: "What does “privacy-centric” exactly mean for TLSNotary?",
answer:
"TLSNotary does not compromise on privacy for performance reasons. It prioritizes user privacy in all its operations. The verifier only sees the data the prover decides to share. <br /><br/> If a generic notary is used to verify the TLS session, this notary only sees encrypted data and does not know what Server the Prover communicates with. The only information the Notary can see is: the time of the TLS-session, the length of the requests and responses, the number or round trips, and which cipher suite is used.",
},
{
question: "What is the overhead of using TLSNotary?",
answer:
"The Multi-Party Computation (MPC) between the Prover and the Verifier requires significant bandwidth, orders of magnitude more than the Server's data size.",
},
{
question: "Can the server detect that a TLS session is being notarized?",
answer: "To the server, the TLS connection appears the same as any other connection. Only the User communicates with the Server, not the Notary or the Verifier. However, the timing patterns of TLS communication might have a different fingerprint, so through statistical analysis, specific identifying patterns might be uncovered.",
},
{
question: "Can TLSNotary be used for public data?",
answer:
"Yes, but for public data, a less-resource-intensive man-in-the-middle approach is more economical since the privacy features of TLSNotary are superfluous in this scenario.",
},
{
question: "How can I inspect and verify a TLSNotary proof?",
answer:
"The easiest way is to use the proof-of-concept [TLSNotary Explorer](https://explorer.tlsnotary.org)",
},
{
question: "Which TLS versions are supported?",
answer: "TLSNotary currently supports TLS 1.2. Support for TLS 1.3 is on the roadmap.",
},
{
question: "How can I use TLSNotary to verify data on-chain?",
answer:
"At the moment the most practical way to verify data on-chain is to prove the data directly to an off-chain application specific verifier. There are planned upgrades to make TLSNotary proofs directly verifiable on-chain.",
},
{
question: "Why can a verifier trust a TLSNotary proof?",
answer:
"A TLSNotary proof is trustworthy because of its cryptographic integrity and its inclusion of an ephemeral key, allowing verifiers to confirm the data's origin from the claimed domain. This trust also hinges on the verifier's confidence in the data source (the server) and the validity of any redactions. Additionally, if the verifier did not conduct the TLS-MPC process themselves, they must trust in the notary's neutrality, ensuring it has not been influenced or compromised by the Prover.",
},
{
question: "How does TLSNotary differ from other TLS portability approaches?",
answer:
"TLSNotary distinguishes itself with its dedication to open-source development and a strong emphasis on trustlessness. Developed as a public good without a business model, it fosters transparency and allows for community-driven improvements. Unlike other solutions, TLSNotary is designed to prioritize trustlessness, thereby guaranteeing superior levels of privacy and security. It achieves this without depending on particular network assumptions or compromising on privacy or security to enhance performance. This strategy positions TLSNotary as the go-to choice for projects that place a high value on security and privacy in their TLS portability needs.",
},
];

View File

@@ -1,17 +0,0 @@
export const HOMEPAGE_CONTENT = {
TITLE: "Privacy-preserving data portability",
SUBTITLE: "TLSNotary",
DESCRIPTION:
" TLSNotary is an open-source protocol that can verify the authenticity of TLS data while protecting privacy. If you're looking for a way to make data portable without compromising on security, check out the protocol and integrate it into your applications!",
BUILD_WITH_US: {
TITLE: "Build with us",
DESCRIPTION:
"Interested in using TLSNotary, contributing, or just learning more about how it works? Join the conversation on our [Discord server](https://discord.gg/9XwESXtcN7), check out our [Github](https://github.com/tlsnotary/tlsn), or use our Quick Start guide to try it out!",
},
WHY_USE_TLSNOTARY: {
TITLE: "Why use TLSNotary?",
DESCRIPTION: `TLS (Transport Layer Security), also known as the "s" in "https" 🔐, can secure communication between a server and a user. But what if you want to credibly share data with others without compromising security, privacy, or control? </br> </br>TLSNotary solves this by adding a Verifier to the TLS connection using secure Multi-Party Computation (MPC). MPC provides cryptographic guarantees, allowing the Verifier to authenticate the TLS transcript without requiring external trust or revealing the complete data to anyone. TLSNotary can sign (aka notarize) data and make it portable in a privacy preserving way.
</br></br> With TLSNotary, users are in full control over the data they choose to share.
`,
},
};

View File

@@ -1,11 +0,0 @@
import { ABOUT_CONTENT } from "./about";
import { COMMON_CONTENT } from "./common";
import { HOMEPAGE_CONTENT } from "./homepage";
import { USE_CASES_CONTENT } from "./useCases";
export const LABELS = {
ABOUT: ABOUT_CONTENT,
HOMEPAGE: HOMEPAGE_CONTENT,
COMMON: COMMON_CONTENT,
USE_CASES: USE_CASES_CONTENT,
};

View File

@@ -1,60 +0,0 @@
export type WebsiteType = "website" | "twitter" | "github";
type Project = {
title: string;
tldr: string;
links?: Partial<Record<WebsiteType, string>>;
};
export const ProjectList: Project[] = [
{
title: "ZKP2P",
tldr: "Completely peer-to-peer leveraging everyday payment networks",
links: {
website: "https://zkp2p.xyz",
twitter: "https://x.com/zkp2p",
github: "https://github.com/zkp2p",
},
},
{
title: "OpenLayer (Jomo)",
tldr: "Scale web3 through optimistic verifiable computation",
links: {
website: "https://www.openlayer.tech/",
twitter: "https://x.com/OpenLayerHQ",
github: "https://github.com/0xJomo"
},
},
{
title: "Opacity Labs",
tldr: "The ZKP protocol for proving anything without revealing the details",
links: {
website: "https://www.opacity.network/",
twitter: "https://warpcast.com/~/channel/opacity"
},
},
{
title: "vlayer",
tldr: "Empowering web3 with Verifiable Data",
links: {
website: "https://www.vlayer.xyz",
twitter: "https://x.com/vlayer_xyz",
github: "https://github.com/vlayer-xyz"
},
},
{
title: "ZeroTrustBounty",
tldr: "A trustless bug bounty platform with redacted bug reports & guaranteed payments to whitehats.",
links: {
github: "https://github.com/antojoseph/ZeroTrustBounty",
},
},
{
title: "RealReturn",
tldr: "An open leaderboard of verified real investment returns, enabled by TLSNotary and Jomo.",
links: {
github: "https://github.com/chcharcharlie/realreturn",
},
},
];

View File

@@ -1,19 +0,0 @@
export const USE_CASES_CONTENT = {
USE_CASES: {
TITLE: "Use Cases",
DESCRIPTION: `You can use TLSNotary for: </br></br>- <b>Identity Verification</b>: verify your name, age, or citizenship from online government services
</br></br>- <b>Reputation Verification</b>: verify user experience or trustworthiness on platforms like AirBnb, Uber, Strava
</br></br>- <b>Real World Asset Ownership Verification</b>: confirm ownership of tangible assets (e.g. vehicles, real estate)
</br></br>- <b>Health Information Verification</b>: verify personal health records from platforms like MyHealth, HealthVault etc
</br></br>- <b>Account Ownership Verification</b>: confirm control over online accounts (e.g. Google, Microsoft, Apple, Twitter)
</br></br>- <b>Financial Verification</b>: verify your financial standing or prove financial dealings from your bank or other service
</br></br>- <b>User Restriction Verification</b>: confirm if a user is barred from accessing specific applications or services
</br></br> <span class="text-center">...and more!</span>
`,
},
BUILD_WITH_TLSNOTARY: "Projects using TLSNotary",
BANNER: {
TITLE: "Share what you're building with TLSNotary.",
DESCRIPTION: "Are you using TLSNotary in your project? Reach out on Discord and tell us about your work!",
},
};

View File

@@ -0,0 +1 @@
<mxfile host="app.diagrams.net" modified="2022-06-03T01:45:18.560Z" agent="5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.61 Safari/537.36" etag="7kz6cC5QjGoVDeZ1rP9-" version="18.2.1" type="device"><diagram id="L_tK45wmRM6DJ-EOD-vB" name="Page-1">7Vxbd5s4EP41fmyOuQjDY+q4zW67m54kp00fCcg2W4wcIcf2/voVRtxxInvBAz04D0EjCcsz+uYijTTSpqvdZ2qvl38RF/sjdezuRtrNSOUfZPF/EWUfUxR1YsaUBfVcQcsID96/WBDHgrrxXBwWGjJCfOati0SHBAF2WIFmU0q2xWZz4he/dW0vcIXw4Nh+lfrDc9lSUCfjcVZxi73FMvlqJalZ2UlrQQiXtku2OZI2G2lTSgiLn1a7KfYj9iWMift9OlKbjozigMl0+LJEn9HDt/CH+efLbGuZ1tP94wdFE4Nj++QnY5dzQBQJZUuyIIHtzzLqR2dDX3H0VoUXKNkE7qE05qWsw1dC1qLJP5ixvZCtvWGEk5Zs5YtavPPYU+75Z/SqKyRKNzvx5kNhnxQCRvdP+UKuV1TMuh1KSb/4x0a/8CgTBSkkG+rgtzgnZqNNF5i90Q6louYowWSF+Xh4P4p9m3mvxXHYYrYu0naZPPmDEOkp4tUH8bYrXh1UvPF7X21/I77pj8Bjnu1zYbgVyWeijGSxXXoMP6ztAxe2XH0XxTb3fH9KfEIPfbU5iv4iOglYjh5/OD1klPzCuRrj8EmF8oopw7u3xVJlo+igCxUqrAhKdOw2U8mmIC1zyjihNc93pcLcAVZSsNIlYTUBhZU6iLdd8RqQ4tUrWnO2W3Pn8QFzCdKRavh86B+fo6dF9HTL30l+I22qWCV1agCrU2uA23lwQ32AWxLKDeJtS7ygxhKdo03vqFCq5dr7aEz3+GWDQ/Ybq1xdg/ZgjQGU54HSkASlAhr4GxVUTslq7WOGq5iLkXoEkLd24PpesGgUjC7CpqvXgc5Un7WmQKdNiqAzVGDQ6RN40MEDaCIJIB3Ua0EdcEp7JCtQZTc54oJUtdkscOh+zaLFsUrVjuEg9EgQNqvqbGzOnVr/wjHx87wdVachYFVnnoGexjyK8ZWauBE/817EOy7F1QQVgPYOzApgB/D6/y/kDl2vKbX3uQZr4gUszL35W0TIJlq6MZc4skpp06ncHr3Znj/EI8hmWvpTzp986hBxnrvrITv5FBNS4asdiF76JCzY1fRjKwRVGzzlNtCbe44dhSm9izeQ2rF4Q+uAHuwATGSdWNUChYm8FxsH7F92PcSIWcaIBYwRtQMJMB3AiClrSkAxog4LKCcJC9bum+fZ/Yq2YzbbhHc1Wwk91oPGpGN7sOo5EXtb0Lo6KRBvElpWP6BlNQmtHsKn7EaAw0cb3IjUg5aAj6ZCwkfrQFZsn4R1BIsX8vnkdV3sD9yQoEbV3dFIE97jlx5qO6trG5ka6hCAwJwFTTZHHFjbVbPEz3IW2sjKuQx+FEXpmrvQJW8bzALFuJABEGgqgDakApwkLNDQKBmmdD5i7C70X6cZJrBO07u02wDnFMjmBwLDpJogGMPkb7ytYuTRc37hXlp+1eiY5dfVDqEEzphIJ5aBxp7asT25qdPHVbMKGuBtxrASk05yGTRokGjQ5QPJT17ghcuGzyBfCCR65xwrTZrvj9Se8/i9j2xHXdNNaIjR08xumXRUUH9Wl08ya0c3XSTNu7ztlaoqMIx04CKEDmBENubTQbNnEHzoAcF0NIZkun4s0D5x9b2l/auLqC1UOgSgQp9OQV3av4JTW7IbwAj0kqNkmJD54xeBiVE6JK5BX3OEOpDUkh7pyp/oSmrePdEFtQqcKLiuewTjZoxTK1vDIJhToPPRUZeONsHhR/YiKdiDx+jYVVIn4uc7pt5830P4lANSeJMlf4qmlbWyi3DdMktc14G5blTtyBtsHb/PVtc+rNBUeRxEu/XNHJkvrTcqkyoTJ3oNF1NuN8/G6gJ779iIanITFdW6LB/VGj4K+CfoTwjRdVAFDhsvG5JUfAgPNvKaN1DV9S7uJupTNfL1QbnSktfx8cZvLH4LJ+e+uSRSznxWlFtRewhh1cjP9r1FwIsOFxbm9I+RKLmN8a9Fxcpz3YOHUDdRilOpMFea8KzK+Kq58kqpxVdr06JqrVueFuowLSq2qzQtzBq129S04MXsevX4consmnpt9h8=</diagram></mxfile>

35
diagrams/convert_all.sh Executable file
View File

@@ -0,0 +1,35 @@
#!/bin/bash
FORMAT="svg"
# Convert all diagrams in the diagrams folder to pngs in the mdbook src/png-diagrams folder
SOURCE_DIR=$(dirname "$0")
TARGET_DIR=$(realpath "$(dirname "$0")/")
OS=$(uname)
case "$OS" in
"Darwin") # Mac
DRAW_IO="/Applications/draw.io.app/Contents/MacOS/draw.io"
;;
"Linux") # Linux
DRAW_IO="drawio"
;;
esac
if ! command -v "$DRAW_IO" &>/dev/null; then
echo "Error: draw.io executable not found. Please install draw.io and make sure it's in your PATH."
exit 1
fi
pushd "$SOURCE_DIR" >/dev/null
for file in *.drawio; do
for theme in "dark" "light"; do
SOURCE="$file"
TARGET="${TARGET_DIR}/${theme}/${file%.drawio}.${FORMAT}"
# Only convert if the source is more recent than the target
if [[ "$SOURCE" -nt "${TARGET}" ]]; then
"$DRAW_IO" --export --format ${FORMAT} --scale 2.5 --svg-theme "${theme}" -o "${TARGET}" "$SOURCE"
fi
done
done
popd >/dev/null

View File

@@ -0,0 +1 @@
<mxfile host="app.diagrams.net" modified="2022-06-04T08:51:11.798Z" agent="5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.61 Safari/537.36" etag="oL7MEAuQHYHFvtbwb_oL" version="19.0.0" type="device"><diagram id="CEkUc7t8Aq7GvisyquvB" name="Page-1">5VrbcpswEP0aP6YDAmL7Mc2lmbaZtpN0EvelI4MKuAIxQvjSr68I4mqMscEWaZ+MVgtIZ4/OroRH2rW3/kBh4DwQC+ERUKz1SLsZAaAqU8B/YssmsRjTcWKwqWsJp9zw6P5B6Z3CGrkWCkuOjBDM3KBsNInvI5OVbJBSsiq7/SK4/NYA2mjL8GhCvG19di3mJNaJoeT2e+TaTvpmVRE9c2j+timJfPE+n/go6fFg+hjhGjrQIqvC+7TbkXZNCWHJlbe+RjiGNUUsue9uR282ZIp81uYG/BHP7qMZtZ7vpvZirtpPTLnQJmJwbJNigSwOjWgSyhxiEx/i29z6/nW+KH6swluLyAtSf0hNbsnv+kxIwM1q7IYY24jIw4gRbnKYh0UvnwPdvBQbs/jx74y0ebMWr0tam6yVsknjrWQu8QR2YiRMIYmoKbx+mJ8mT+Him7fCj+76ylj+fFhdpCyE1EasyS8PJV8diHiID4/fSBGGzF2WBwIFTe3ML48XvxAhqw9f0yiXEEfiTV5gXpiEoq2w5kGLIV45LkOPAXzFYMUXdTkcO3FbIsrQukri0sxFr57yXkiCni6mVWGBCZNTWFu60h2reqrrjVRHeE5Wp2b52mUvKXP5dYHjvJVTPG7kDB/YytDbrgztTCujPtqG/GinkSsEa1aK1VAjJ1PS9FpJgy4ZnKJpk/MpWn2cmhWtTfLuImKZcM0KPXtErIelcAzzjYM0a2u5SROx8UCqsyzkYzkx70X+2pJA7xjy11uvKIWbgkNAXJ+FhSd/jQ25uGRikorLpVGu5iv++mWjP79IRpCTL5tKBz5Oh8ZHcBQfx4MlZC3swJDCSP0wRoJmBh/KyO8hol/mi3i3DxQM5wgnj2U4zKsBcUhQ09OYOIt4Ct5LrCu0al2hnqyu4M0CroeUGjt2mi41Izdh0aAwPOdus7GSKAAWMbfI0AGhJb2SBc27tRNXsmohh7TejiulFHLUdvyoc6lxyyoG6LWZSlYpC4DMCB9buIJhFAqtgy6lUKgmfjBtLhSqhUXF/zSlq6525t+/eShUx61aBNXpmfSjcZiFfBpQwlNet2RqwdDJfHvIrKCSWbOUKS2zXkrVXUkH3UcthMkbzaya3Mz6prfgrYMuJbPqulFWk0nlE+8+/32ZuDlzd87EjZAXlNwnHP/NsJS8etovX8m3v4x0/9DbN2rVneU5UatXRznfSHrcJR6qcw3F2xl0rlOwUhb8z0V66/Cd5qh4R/yaTmNN7MYTAu0OZPfvLXo5kd2SrBrgW1fx5z2RbcQ6U/wjkQa9n333i/TpTiJrkOam/P93SX2T/79Ru/0L</diagram></mxfile>

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 330 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 65 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 90 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 139 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 114 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 105 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 774 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 266 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 450 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 147 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 43 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 42 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 261 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 55 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 177 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 91 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 46 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 612 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 301 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 308 KiB

View File

@@ -0,0 +1,45 @@
<mxfile host="65bd71144e">
<diagram name="Page-1" id="E1Tv2Iv79u1PMs5fWFh_">
<mxGraphModel dx="829" dy="769" 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="HxEEL8P-OPklS3m3PPNj-46" value="No Data Provenance" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="70" y="160" width="120" height="20" as="geometry"/>
</mxCell>
<mxCell id="HxEEL8P-OPklS3m3PPNj-1" value="Server" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;shadow=1;" parent="1" vertex="1">
<mxGeometry x="70" y="190" width="60" height="60" as="geometry"/>
</mxCell>
<mxCell id="HxEEL8P-OPklS3m3PPNj-2" value="Alice" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;shadow=1;" parent="1" vertex="1">
<mxGeometry x="230" y="190" width="60" height="60" as="geometry"/>
</mxCell>
<mxCell id="HxEEL8P-OPklS3m3PPNj-3" value="Bob" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;shadow=1;" parent="1" vertex="1">
<mxGeometry x="390" y="190" width="60" height="60" as="geometry"/>
</mxCell>
<mxCell id="HxEEL8P-OPklS3m3PPNj-5" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="HxEEL8P-OPklS3m3PPNj-2" target="HxEEL8P-OPklS3m3PPNj-3" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="HxEEL8P-OPklS3m3PPNj-4" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="HxEEL8P-OPklS3m3PPNj-1" target="HxEEL8P-OPklS3m3PPNj-2" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="410" y="360" as="sourcePoint"/>
<mxPoint x="460" y="310" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="HxEEL8P-OPklS3m3PPNj-6" value="TLS" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;" parent="HxEEL8P-OPklS3m3PPNj-4" vertex="1" connectable="0">
<mxGeometry x="-0.1464" y="-1" relative="1" as="geometry">
<mxPoint y="-11" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="HxEEL8P-OPklS3m3PPNj-8" value="&lt;br&gt;signed&lt;br&gt;data&lt;br&gt;⁉️" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;size=17;" parent="1" vertex="1">
<mxGeometry x="310" y="230" width="60" height="70" as="geometry"/>
</mxCell>
<mxCell id="HxEEL8P-OPklS3m3PPNj-9" value="&lt;ul style=&quot;font-size: 11px;&quot;&gt;&lt;li&gt;Origin ⁉️&lt;/li&gt;&lt;li style=&quot;border-color: var(--border-color);&quot;&gt;Integrity ⁉️&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;Too much info&amp;nbsp;&lt;/span&gt;⁉️&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;fillColor=none;strokeColor=none;horizontal=1;" parent="1" vertex="1">
<mxGeometry x="346" y="250" width="136" height="60" as="geometry"/>
</mxCell>
<mxCell id="wdAgGlkL8JTToDsr7vY7-1" value="🔐&lt;br&gt;signed&lt;br&gt;data&lt;br&gt;" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;size=17;" parent="1" vertex="1">
<mxGeometry x="150" y="230" width="60" height="70" as="geometry"/>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

View File

@@ -0,0 +1,72 @@
<mxfile host="65bd71144e">
<diagram name="Page-1" id="E1Tv2Iv79u1PMs5fWFh_">
<mxGraphModel dx="829" dy="769" 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="HxEEL8P-OPklS3m3PPNj-47" value="Status Quo&amp;nbsp;" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="70" y="500" width="120" height="20" as="geometry"/>
</mxCell>
<mxCell id="HxEEL8P-OPklS3m3PPNj-18" value="&lt;ul style=&quot;font-size: 11px;&quot;&gt;&lt;li&gt;Origin ✅&lt;/li&gt;&lt;li style=&quot;border-color: var(--border-color);&quot;&gt;Integrity&amp;nbsp;✅&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;Too much info&amp;nbsp;&lt;/span&gt;⁉️&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;fillColor=none;strokeColor=none;horizontal=1;" parent="1" vertex="1">
<mxGeometry x="350" y="705" width="136" height="60" as="geometry"/>
</mxCell>
<mxCell id="HxEEL8P-OPklS3m3PPNj-24" value="Server" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;shadow=1;" parent="1" vertex="1">
<mxGeometry x="230" y="645" width="60" height="60" as="geometry"/>
</mxCell>
<mxCell id="HxEEL8P-OPklS3m3PPNj-25" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="HxEEL8P-OPklS3m3PPNj-24" target="HxEEL8P-OPklS3m3PPNj-28" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="HxEEL8P-OPklS3m3PPNj-26" value="TLS" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;" parent="HxEEL8P-OPklS3m3PPNj-25" vertex="1" connectable="0">
<mxGeometry x="-0.1121" y="2" relative="1" as="geometry">
<mxPoint x="6" y="-8" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="HxEEL8P-OPklS3m3PPNj-27" value="Alice" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;shadow=1;" parent="1" vertex="1">
<mxGeometry x="70" y="535" width="60" height="60" as="geometry"/>
</mxCell>
<mxCell id="HxEEL8P-OPklS3m3PPNj-28" value="Bob" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;shadow=1;" parent="1" vertex="1">
<mxGeometry x="390" y="645" width="60" height="60" as="geometry"/>
</mxCell>
<mxCell id="HxEEL8P-OPklS3m3PPNj-29" value="" style="endArrow=none;html=1;rounded=0;startArrow=classic;startFill=1;endFill=0;" parent="1" source="HxEEL8P-OPklS3m3PPNj-33" target="HxEEL8P-OPklS3m3PPNj-27" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="110" y="575" as="sourcePoint"/>
<mxPoint x="450" y="665" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="HxEEL8P-OPklS3m3PPNj-30" value="grant access&lt;br&gt;to Bob" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;" parent="HxEEL8P-OPklS3m3PPNj-29" vertex="1" connectable="0">
<mxGeometry x="-0.0036" y="-1" relative="1" as="geometry">
<mxPoint y="-19" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="HxEEL8P-OPklS3m3PPNj-32" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;startArrow=classic;startFill=1;endArrow=none;endFill=0;" parent="1" source="HxEEL8P-OPklS3m3PPNj-33" target="HxEEL8P-OPklS3m3PPNj-24" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="2jyW2hphGHJ1HJf9qghL-2" value="delegate&lt;br&gt;access control" style="edgeLabel;html=1;align=right;verticalAlign=middle;resizable=0;points=[];fontSize=11;fontFamily=Helvetica;labelBackgroundColor=none;" parent="HxEEL8P-OPklS3m3PPNj-32" vertex="1" connectable="0">
<mxGeometry x="0.24" y="2" relative="1" as="geometry">
<mxPoint x="-4" y="-3" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="HxEEL8P-OPklS3m3PPNj-33" value="OAuth&lt;br&gt;Server" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;shadow=1;" parent="1" vertex="1">
<mxGeometry x="230" y="535" width="60" height="60" as="geometry"/>
</mxCell>
<mxCell id="HxEEL8P-OPklS3m3PPNj-34" value="&lt;ul style=&quot;font-size: 11px;&quot;&gt;&lt;li&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;censoring possible&lt;/span&gt;&amp;nbsp;⁉️&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;sees all requests&lt;/span&gt;&amp;nbsp;⁉️&lt;/li&gt;&lt;/ul&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;fillColor=none;strokeColor=none;horizontal=1;" parent="1" vertex="1">
<mxGeometry x="266" y="535" width="148" height="40" as="geometry"/>
</mxCell>
<mxCell id="0T9UpzUMcqbGcj6tkd16-13" value="🔐&lt;br&gt;signed&lt;br&gt;data&lt;br&gt;" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;size=17;" parent="1" vertex="1">
<mxGeometry x="310" y="700" width="60" height="70" as="geometry"/>
</mxCell>
<mxCell id="2jyW2hphGHJ1HJf9qghL-3" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0;entryDx=0;entryDy=0;" parent="1" source="HxEEL8P-OPklS3m3PPNj-33" target="HxEEL8P-OPklS3m3PPNj-28" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="310" y="645" as="sourcePoint"/>
<mxPoint x="360" y="595" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="2jyW2hphGHJ1HJf9qghL-4" value="access token" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;" parent="2jyW2hphGHJ1HJf9qghL-3" vertex="1" connectable="0">
<mxGeometry x="0.2378" relative="1" as="geometry">
<mxPoint x="16" y="-23" as="offset"/>
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

View File

@@ -0,0 +1,49 @@
<mxfile host="65bd71144e">
<diagram name="Page-1" id="E1Tv2Iv79u1PMs5fWFh_">
<mxGraphModel dx="829" dy="769" 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="0T9UpzUMcqbGcj6tkd16-11" value="TLSNotary" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="70" y="832" width="120" height="20" as="geometry"/>
</mxCell>
<mxCell id="0T9UpzUMcqbGcj6tkd16-1" value="Server" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;shadow=1;" parent="1" vertex="1">
<mxGeometry x="70" y="859" width="60" height="60" as="geometry"/>
</mxCell>
<mxCell id="0T9UpzUMcqbGcj6tkd16-4" value="Prover&lt;br&gt;Alice" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;shadow=1;" parent="1" vertex="1">
<mxGeometry x="230" y="859" width="60" height="60" as="geometry"/>
</mxCell>
<mxCell id="0T9UpzUMcqbGcj6tkd16-5" value="Verifier&lt;br&gt;Bob" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;shadow=1;" parent="1" vertex="1">
<mxGeometry x="403" y="859" width="60" height="60" as="geometry"/>
</mxCell>
<mxCell id="0T9UpzUMcqbGcj6tkd16-2" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="0T9UpzUMcqbGcj6tkd16-4" target="0T9UpzUMcqbGcj6tkd16-5" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="3" value="Selective disclosure" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;" parent="0T9UpzUMcqbGcj6tkd16-2" vertex="1" connectable="0">
<mxGeometry x="0.14" y="-1" relative="1" as="geometry">
<mxPoint x="-13" y="-10" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="0T9UpzUMcqbGcj6tkd16-8" value="🔐&lt;br&gt;signed&lt;br&gt;data&lt;br&gt;" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;size=17;" parent="1" vertex="1">
<mxGeometry x="150" y="899" width="60" height="70" as="geometry"/>
</mxCell>
<mxCell id="0T9UpzUMcqbGcj6tkd16-9" value="🔐redacted&lt;br&gt;signed&lt;br style=&quot;border-color: var(--border-color);&quot;&gt;data" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;size=17;" parent="1" vertex="1">
<mxGeometry x="309" y="899" width="60" height="70" as="geometry"/>
</mxCell>
<mxCell id="0T9UpzUMcqbGcj6tkd16-10" value="&lt;ul style=&quot;font-size: 11px;&quot;&gt;&lt;li style=&quot;border-color: var(--border-color);&quot;&gt;Origin ✅&lt;/li&gt;&lt;li style=&quot;border-color: var(--border-color);&quot;&gt;Integrity&amp;nbsp;✅&lt;/li&gt;&lt;li style=&quot;border-color: var(--border-color);&quot;&gt;Only required info&amp;nbsp;✅&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;fillColor=none;strokeColor=none;horizontal=1;" parent="1" vertex="1">
<mxGeometry x="359" y="918" width="164" height="60" as="geometry"/>
</mxCell>
<mxCell id="0T9UpzUMcqbGcj6tkd16-15" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="0T9UpzUMcqbGcj6tkd16-1" target="0T9UpzUMcqbGcj6tkd16-4" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="147.5" y="889" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="2" value="MPC-TLS" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;" parent="0T9UpzUMcqbGcj6tkd16-15" vertex="1" connectable="0">
<mxGeometry y="-1" relative="1" as="geometry">
<mxPoint y="-10" as="offset"/>
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

View File

@@ -0,0 +1,50 @@
<mxfile host="65bd71144e">
<diagram name="Page-1" id="E1Tv2Iv79u1PMs5fWFh_">
<mxGraphModel dx="829" dy="769" 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="HxEEL8P-OPklS3m3PPNj-48" value="Ultimate solution" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="70" y="330" width="120" height="20" as="geometry"/>
</mxCell>
<mxCell id="HxEEL8P-OPklS3m3PPNj-37" value="Server" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;shadow=1;" parent="1" vertex="1">
<mxGeometry x="70" y="360" width="60" height="60" as="geometry"/>
</mxCell>
<mxCell id="HxEEL8P-OPklS3m3PPNj-39" value="Alice" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;shadow=1;" parent="1" vertex="1">
<mxGeometry x="230" y="360" width="60" height="60" as="geometry"/>
</mxCell>
<mxCell id="HxEEL8P-OPklS3m3PPNj-40" value="Bob" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;shadow=1;" parent="1" vertex="1">
<mxGeometry x="390" y="360" width="60" height="60" as="geometry"/>
</mxCell>
<mxCell id="HxEEL8P-OPklS3m3PPNj-38" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="HxEEL8P-OPklS3m3PPNj-39" target="HxEEL8P-OPklS3m3PPNj-40" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="HxEEL8P-OPklS3m3PPNj-49" value="ZKP" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;" parent="HxEEL8P-OPklS3m3PPNj-38" vertex="1" connectable="0">
<mxGeometry x="-0.2352" y="1" relative="1" as="geometry">
<mxPoint x="12" y="-9" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="HxEEL8P-OPklS3m3PPNj-41" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="HxEEL8P-OPklS3m3PPNj-37" target="HxEEL8P-OPklS3m3PPNj-39" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="410" y="530" as="sourcePoint"/>
<mxPoint x="460" y="480" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="HxEEL8P-OPklS3m3PPNj-42" value="Improved TLS" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;" parent="HxEEL8P-OPklS3m3PPNj-41" vertex="1" connectable="0">
<mxGeometry x="-0.1464" y="-1" relative="1" as="geometry">
<mxPoint x="7" y="-11" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="HxEEL8P-OPklS3m3PPNj-43" value="🔐&lt;br&gt;signed&lt;br&gt;data&lt;br&gt;" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;size=17;" parent="1" vertex="1">
<mxGeometry x="150" y="400" width="60" height="70" as="geometry"/>
</mxCell>
<mxCell id="HxEEL8P-OPklS3m3PPNj-44" value="🔐redacted&lt;br&gt;signed&lt;br style=&quot;border-color: var(--border-color);&quot;&gt;data" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;size=17;" parent="1" vertex="1">
<mxGeometry x="310" y="400" width="60" height="70" as="geometry"/>
</mxCell>
<mxCell id="HxEEL8P-OPklS3m3PPNj-45" value="&lt;ul style=&quot;font-size: 11px;&quot;&gt;&lt;li style=&quot;border-color: var(--border-color);&quot;&gt;Authenticity ✅&lt;/li&gt;&lt;li style=&quot;border-color: var(--border-color);&quot;&gt;Integrity&amp;nbsp;✅&lt;/li&gt;&lt;li style=&quot;border-color: var(--border-color);&quot;&gt;Only required info&amp;nbsp;✅&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;fillColor=none;strokeColor=none;horizontal=1;" parent="1" vertex="1">
<mxGeometry x="346" y="413" width="164" height="60" as="geometry"/>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

View File

@@ -0,0 +1,351 @@
<mxfile host="app.diagrams.net" modified="2023-11-02T10:34:22.379Z" agent="Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/117.0" etag="SDixSy31L28PSCi-7lEa" version="22.0.8" type="device">
<diagram name="Page-1" id="OeXwliGOqlnER99A9c5q">
<mxGraphModel dx="1039" dy="509" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="1" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="NpA3MupIFTiq58dDBDXs-1" value="0" style="whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
<mxGeometry x="320" y="80" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="NpA3MupIFTiq58dDBDXs-4" value="1" style="whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
<mxGeometry x="360" y="80" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="NpA3MupIFTiq58dDBDXs-5" value="1" style="whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
<mxGeometry x="400" y="80" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="NpA3MupIFTiq58dDBDXs-6" value="0" style="whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
<mxGeometry x="440" y="80" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="NpA3MupIFTiq58dDBDXs-7" value="1" style="whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
<mxGeometry x="480" y="80" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="NpA3MupIFTiq58dDBDXs-8" value="0" style="whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
<mxGeometry x="520" y="80" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="NpA3MupIFTiq58dDBDXs-9" value="0" style="whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
<mxGeometry x="560" y="80" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="NpA3MupIFTiq58dDBDXs-10" value="0" style="whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
<mxGeometry x="600" y="80" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="NpA3MupIFTiq58dDBDXs-12" value="$$w_0^1$$" style="whiteSpace=wrap;html=1;aspect=fixed;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="320" y="160" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="NpA3MupIFTiq58dDBDXs-13" value="$$w_1^1$$" style="whiteSpace=wrap;html=1;aspect=fixed;fillStyle=auto;fillColor=#d5e8d4;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="360" y="160" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="NpA3MupIFTiq58dDBDXs-14" value="$$w_2^1$$" style="whiteSpace=wrap;html=1;aspect=fixed;fillStyle=auto;fillColor=#d5e8d4;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="400" y="160" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="NpA3MupIFTiq58dDBDXs-15" value="$$w_3^1$$" style="whiteSpace=wrap;html=1;aspect=fixed;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="440" y="160" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="NpA3MupIFTiq58dDBDXs-16" value="$$w_4^1$$" style="whiteSpace=wrap;html=1;aspect=fixed;fillStyle=auto;fillColor=#d5e8d4;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="480" y="160" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="NpA3MupIFTiq58dDBDXs-17" value="$$w_5^1$$" style="whiteSpace=wrap;html=1;aspect=fixed;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="520" y="160" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="NpA3MupIFTiq58dDBDXs-18" value="$$w_6^1$$" style="whiteSpace=wrap;html=1;aspect=fixed;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="560" y="160" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="NpA3MupIFTiq58dDBDXs-19" value="$$w_7^1$$" style="whiteSpace=wrap;html=1;aspect=fixed;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="600" y="160" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="NpA3MupIFTiq58dDBDXs-36" value="$$w_0^0$$" style="whiteSpace=wrap;html=1;aspect=fixed;fillColor=#D5E8D4;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="320" y="200" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="NpA3MupIFTiq58dDBDXs-37" value="$$w_1^0$$" style="whiteSpace=wrap;html=1;aspect=fixed;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="360" y="200" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="NpA3MupIFTiq58dDBDXs-38" value="$$w_2^0$$" style="whiteSpace=wrap;html=1;aspect=fixed;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="400" y="200" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="NpA3MupIFTiq58dDBDXs-39" value="$$w_3^0$$" style="whiteSpace=wrap;html=1;aspect=fixed;fillColor=#D5E8D4;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="440" y="200" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="NpA3MupIFTiq58dDBDXs-40" value="$$w_4^0$$" style="whiteSpace=wrap;html=1;aspect=fixed;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="480" y="200" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="NpA3MupIFTiq58dDBDXs-41" value="$$w_5^0$$" style="whiteSpace=wrap;html=1;aspect=fixed;fillColor=#D5E8D4;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="520" y="200" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="NpA3MupIFTiq58dDBDXs-42" value="$$w_6^0$$" style="whiteSpace=wrap;html=1;aspect=fixed;fillColor=#D5E8D4;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="560" y="200" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="NpA3MupIFTiq58dDBDXs-43" value="$$w_7^0$$" style="whiteSpace=wrap;html=1;aspect=fixed;fillColor=#D5E8D4;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="600" y="200" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-1" value="$$w_1^1$$" style="whiteSpace=wrap;html=1;aspect=fixed;fillStyle=auto;fillColor=#d5e8d4;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="360" y="280" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-2" value="$$w_2^1$$" style="whiteSpace=wrap;html=1;aspect=fixed;fillStyle=auto;fillColor=#d5e8d4;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="400" y="280" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-3" value="$$w_4^1$$" style="whiteSpace=wrap;html=1;aspect=fixed;fillStyle=auto;fillColor=#d5e8d4;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="480" y="280" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-4" value="$$w_0^0$$" style="whiteSpace=wrap;html=1;aspect=fixed;fillColor=#D5E8D4;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="320" y="280" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-5" value="$$w_3^0$$" style="whiteSpace=wrap;html=1;aspect=fixed;fillColor=#D5E8D4;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="440" y="280" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-6" value="$$w_5^0$$" style="whiteSpace=wrap;html=1;aspect=fixed;fillColor=#D5E8D4;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="520" y="280" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-7" value="$$w_6^0$$" style="whiteSpace=wrap;html=1;aspect=fixed;fillColor=#D5E8D4;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="560" y="280" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-8" value="$$w_7^0$$" style="whiteSpace=wrap;html=1;aspect=fixed;fillColor=#D5E8D4;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="600" y="280" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-9" value="$$w_1^1$$" style="whiteSpace=wrap;html=1;aspect=fixed;fillStyle=auto;fillColor=#d5e8d4;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="360" y="400" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-10" value="$$w_2^1$$" style="whiteSpace=wrap;html=1;aspect=fixed;fillStyle=auto;fillColor=#d5e8d4;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="400" y="400" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-11" value="$$w_4^1$$" style="whiteSpace=wrap;html=1;aspect=fixed;fillStyle=auto;fillColor=#d5e8d4;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="480" y="400" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-12" value="$$w_0^0$$" style="whiteSpace=wrap;html=1;aspect=fixed;fillColor=#D5E8D4;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="320" y="400" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-13" value="$$w_3^0$$" style="whiteSpace=wrap;html=1;aspect=fixed;fillColor=#D5E8D4;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="440" y="400" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-14" value="$$w_5^0$$" style="whiteSpace=wrap;html=1;aspect=fixed;fillColor=#D5E8D4;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="520" y="400" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-15" value="$$w_6^0$$" style="whiteSpace=wrap;html=1;aspect=fixed;fillColor=#D5E8D4;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="560" y="400" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-16" value="$$w_7^0$$" style="whiteSpace=wrap;html=1;aspect=fixed;fillColor=#D5E8D4;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="600" y="400" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-18" value="0" style="whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
<mxGeometry x="320" y="520" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-19" value="1" style="whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
<mxGeometry x="360" y="520" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-20" value="1" style="whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
<mxGeometry x="400" y="520" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-21" value="0" style="whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
<mxGeometry x="440" y="520" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-22" value="1" style="whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
<mxGeometry x="480" y="520" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-23" value="0" style="whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
<mxGeometry x="520" y="520" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-24" value="1" style="whiteSpace=wrap;html=1;aspect=fixed;fillColor=#F8CECC;" parent="1" vertex="1">
<mxGeometry x="560" y="520" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-25" value="0" style="whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
<mxGeometry x="600" y="520" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-26" value="$$w_0^1$$" style="whiteSpace=wrap;html=1;aspect=fixed;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="320" y="600" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-27" value="$$w_1^1$$" style="whiteSpace=wrap;html=1;aspect=fixed;fillStyle=auto;fillColor=#d5e8d4;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="360" y="600" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-28" value="$$w_2^1$$" style="whiteSpace=wrap;html=1;aspect=fixed;fillStyle=auto;fillColor=#d5e8d4;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="400" y="600" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-29" value="$$w_3^1$$" style="whiteSpace=wrap;html=1;aspect=fixed;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="440" y="600" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-30" value="$$w_4^1$$" style="whiteSpace=wrap;html=1;aspect=fixed;fillStyle=auto;fillColor=#d5e8d4;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="480" y="600" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-31" value="$$w_5^1$$" style="whiteSpace=wrap;html=1;aspect=fixed;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="520" y="600" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-32" value="$$w_6^1$$" style="whiteSpace=wrap;html=1;aspect=fixed;fillColor=#F8CECC;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="560" y="600" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-33" value="$$w_7^1$$" style="whiteSpace=wrap;html=1;aspect=fixed;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="600" y="600" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-34" value="$$w_0^0$$" style="whiteSpace=wrap;html=1;aspect=fixed;fillColor=#D5E8D4;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="320" y="640" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-35" value="$$w_1^0$$" style="whiteSpace=wrap;html=1;aspect=fixed;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="360" y="640" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-36" value="$$w_2^0$$" style="whiteSpace=wrap;html=1;aspect=fixed;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="400" y="640" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-37" value="$$w_3^0$$" style="whiteSpace=wrap;html=1;aspect=fixed;fillColor=#D5E8D4;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="440" y="640" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-38" value="$$w_4^0$$" style="whiteSpace=wrap;html=1;aspect=fixed;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="480" y="640" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-39" value="$$w_5^0$$" style="whiteSpace=wrap;html=1;aspect=fixed;fillColor=#D5E8D4;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="520" y="640" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-40" value="$$w_6^0$$" style="whiteSpace=wrap;html=1;aspect=fixed;fillColor=#D5E8D4;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="560" y="640" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-41" value="$$w_7^0$$" style="whiteSpace=wrap;html=1;aspect=fixed;fillColor=#D5E8D4;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="600" y="640" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-42" value="$$w_1^1$$" style="whiteSpace=wrap;html=1;aspect=fixed;fillStyle=auto;fillColor=#d5e8d4;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="360" y="720" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-43" value="$$w_2^1$$" style="whiteSpace=wrap;html=1;aspect=fixed;fillStyle=auto;fillColor=#d5e8d4;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="400" y="720" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-44" value="$$w_4^1$$" style="whiteSpace=wrap;html=1;aspect=fixed;fillStyle=auto;fillColor=#d5e8d4;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="480" y="720" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-45" value="$$w_0^0$$" style="whiteSpace=wrap;html=1;aspect=fixed;fillColor=#D5E8D4;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="320" y="720" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-46" value="$$w_3^0$$" style="whiteSpace=wrap;html=1;aspect=fixed;fillColor=#D5E8D4;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="440" y="720" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-47" value="$$w_5^0$$" style="whiteSpace=wrap;html=1;aspect=fixed;fillColor=#D5E8D4;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="520" y="720" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-49" value="$$w_7^0$$" style="whiteSpace=wrap;html=1;aspect=fixed;fillColor=#D5E8D4;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="600" y="720" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-50" value="$$w_1^1$$" style="whiteSpace=wrap;html=1;aspect=fixed;fillStyle=auto;fillColor=#d5e8d4;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="360" y="840" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-51" value="$$w_2^1$$" style="whiteSpace=wrap;html=1;aspect=fixed;fillStyle=auto;fillColor=#d5e8d4;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="400" y="840" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-52" value="$$w_4^1$$" style="whiteSpace=wrap;html=1;aspect=fixed;fillStyle=auto;fillColor=#d5e8d4;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="480" y="840" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-53" value="$$w_0^0$$" style="whiteSpace=wrap;html=1;aspect=fixed;fillColor=#D5E8D4;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="320" y="840" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-54" value="$$w_3^0$$" style="whiteSpace=wrap;html=1;aspect=fixed;fillColor=#D5E8D4;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="440" y="840" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-55" value="$$w_5^0$$" style="whiteSpace=wrap;html=1;aspect=fixed;fillColor=#D5E8D4;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="520" y="840" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-57" value="$$w_7^0$$" style="whiteSpace=wrap;html=1;aspect=fixed;fillColor=#D5E8D4;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="600" y="840" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-58" value="$$w_6^1$$" style="whiteSpace=wrap;html=1;aspect=fixed;fillColor=#F8CECC;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="560" y="720" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-59" value="$$w_6^1$$" style="whiteSpace=wrap;html=1;aspect=fixed;fillColor=#F8CECC;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="560" y="840" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-60" value="Full&lt;br&gt;Encoding" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="200" y="160" width="80" height="80" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-61" value="1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="280" y="160" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-62" value="0" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="280" y="200" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-63" value="Data" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="200" y="80" width="80" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-64" value="Active&lt;br&gt;Encoding" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="200" y="280" width="80" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-65" value="Full&lt;br data-darkreader-inline-border=&quot;&quot; style=&quot;border-color: var(--border-color); --darkreader-inline-border: var(--darkreader-border--border-color);&quot;&gt;Encoding" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="200" y="600" width="80" height="80" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-66" value="Purported&lt;br&gt;Data" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="200" y="520" width="80" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-67" value="Active&lt;br style=&quot;border-color: var(--border-color);&quot;&gt;Encoding" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="200" y="720" width="80" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-68" value="" style="endArrow=none;dashed=1;html=1;rounded=0;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="40" y="470" as="sourcePoint" />
<mxPoint x="720" y="470" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-70" value="&lt;font style=&quot;font-size: 10px;&quot;&gt;Notary generates full encoding using a PRG&lt;/font&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="40" y="180" width="140" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-76" value="&lt;font style=&quot;font-size: 10px;&quot;&gt;Prover only knows the active encoding during commitment&lt;/font&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="40" y="280" width="140" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-77" value="&lt;font style=&quot;font-size: 10px;&quot;&gt;Prover hashes the active encoding and commits to it in the merkle tree&lt;/font&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="40" y="400" width="140" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-78" value="&lt;font style=&quot;font-size: 30px; font-weight: normal;&quot;&gt;H(&lt;/font&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="280" y="400" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-79" value="&lt;font style=&quot;font-size: 30px; font-weight: normal;&quot;&gt;)&lt;/font&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="640" y="400" width="20" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-80" value="&lt;font style=&quot;font-size: 30px; font-weight: normal;&quot;&gt;H(&lt;/font&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="280" y="840" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-81" value="&lt;font style=&quot;font-size: 30px; font-weight: normal;&quot;&gt;)&lt;/font&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="640" y="840" width="20" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-82" value="&lt;font style=&quot;font-size: 10px;&quot;&gt;Prover sends purported data to the Verifier&lt;/font&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="40" y="520" width="140" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-83" value="&lt;font style=&quot;font-size: 10px;&quot;&gt;Verifier checks Notary signature of PRG seed, and regenerates full encodings&lt;/font&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="40" y="620" width="140" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-84" value="&lt;font style=&quot;font-size: 10px;&quot;&gt;Verifier selects active encoding for the purported data&lt;/font&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="40" y="720" width="140" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-85" value="&lt;font style=&quot;font-size: 10px;&quot;&gt;Verifier computes hash of the active encoding&lt;/font&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="40" y="840" width="140" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-86" value="&lt;font style=&quot;font-size: 10px;&quot;&gt;UTF-8: &#39;h&#39; -&amp;gt; 01101000&lt;/font&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="410" y="50" width="140" height="30" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-87" value="" style="endArrow=classic;html=1;rounded=0;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="480" y="330" as="sourcePoint" />
<mxPoint x="480" y="390" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-88" value="Commits" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="qIlj4OkVHRwQaVCLI-OZ-87" vertex="1" connectable="0">
<mxGeometry x="-0.2292" relative="1" as="geometry">
<mxPoint y="9" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-89" value="&lt;font style=&quot;font-size: 10px;&quot;&gt;UTF-8: &#39;j&#39; -&amp;gt; 01101010&lt;/font&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="410" y="490" width="140" height="30" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-90" value="☢️ Flipped bit" style="shape=callout;whiteSpace=wrap;html=1;perimeter=calloutPerimeter;size=10;position=0.08;position2=0.08;" parent="1" vertex="1">
<mxGeometry x="570" y="480" width="100" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-92" value="&lt;font style=&quot;font-size: 10px;&quot;&gt;Prover can not create a merkle proof with this hash in the tree, because he did not know&lt;/font&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;labelBorderColor=default;" parent="1" vertex="1">
<mxGeometry x="360" y="920" width="140" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-93" value="&lt;font style=&quot;font-size: 10px;&quot;&gt;when committing. He only knew the authentic encoding&lt;/font&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="360" y="1020" width="140" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-94" value="$$w_6^1$$" style="whiteSpace=wrap;html=1;aspect=fixed;fillColor=#F8CECC;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="410" y="970" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-95" value="$$w_6^0$$" style="whiteSpace=wrap;html=1;aspect=fixed;fillColor=#D5E8D4;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="410" y="1060" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="qIlj4OkVHRwQaVCLI-OZ-96" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0;exitDx=0;exitDy=0;" parent="1" source="qIlj4OkVHRwQaVCLI-OZ-92" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="530" y="930" as="sourcePoint" />
<mxPoint x="560" y="890" as="targetPoint" />
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

1
diagrams/gc-types.drawio Normal file
View File

@@ -0,0 +1 @@
<mxfile host="Electron" modified="2023-01-18T18:21:57.200Z" agent="5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/20.2.3 Chrome/102.0.5005.167 Electron/19.0.11 Safari/537.36" etag="60YorzGP6y3ohCO94Poq" version="20.2.3" type="device"><diagram id="kpe8PfQCO1v1qYzAWRtj" name="Page-1">7V1bc9o4FP41PDZjWb4+5tJ2d6edyUxmd5unjotVcGsQY0Qh++tXxrLBkghKCj6yyRNICGF/R5/O0bmYEb6dbT4WyWL6maYkH7lOuhnhu5HrIowc/lL2PFU9YYSrjkmRpWLQruMh+4+ITvG9ySpLybI1kFGas2zR7hzT+ZyMWasvKQq6bg/7TvP2ry6SCVE6HsZJrvb+m6VsWvV6QbT3wR8km0zFT2PsiCufJfVoMXQ5TVK6rrq2Y/D7Eb4tKGXVu9nmluQlejUw1UQfDnzaXEBB5szkC9n9+O7L5x8/l3/7K/rucf3rL+a8i9xqml9JvhK3LK6WPdUYFHQ1T0k5Cxrhm/U0Y+RhkYzLT9dc6rxvyma5+DhNltNm7Pcsz29pTgventM5/8bNkhX0Z4NlOUhcACkY2Ry8NdQAxpcaoTPCiic+RHwhFrfuiFUWeH7VXu9khn0xZronrliMS8QymTRT74DkbwSWL8A1jIeIqxc7Zrgi91zABv4QgEXIkVZsoK5YFGiQrftODqwfKTiSlO+FokkLNqUTOk/y97vemx3SDm/txnyidCHQ+kEYexIbe7JitI0+x6t4+lJ+/8qvm49ium3jbtNqPYlWda3lBT4vAX4/dFWMyXM3XuuVpJgQ9sxAz9PLtCB5wrJf7Ss5vXzQEBZ+jNvr3kfqjqJd9/G51r0BrOUdZ9wm+JR8I/k9XWYso3P+0TfKGJ2VUNWq3dnHtWwkeTYph445PqRoC6Ce9lqMYSVnyrkW5e/ONpPSpLoiObdrinLcVU4n2fjrJGFkufe+JN6CFIm4qGSebonJ6o7YOY/omva+6JwutywD2+VNdJVYkG2yw2+yM5VdbJvsvDfZmZp5oW2yCxXZ/TlfrBjvulaEyG+ctfGvbALJUNDYDooMZcHNsjTdWpA6I6VtVbbslBMIJYraMoli1fTWWSD4XCKJDork5kJEghrAbZGJwfGdzNPr0sNUYpony2U2bgumDdnI8MCiYrQHge6oXfcZn0LEL9zTbM72WCEdSCNXgrY6R4lv7buZpIlkM7GhWz1Rdc5SJtqKqbnt37DnHUV0/2YF+cjFsbgQOoWeJAJH1TqdsqleS1C+hZZn4SpsPA0HnAvb1j0pMn73pWxP7XFAph6HA2LuxuGA1JOxKsa2kI54HFSPwj6xUvI9WeXsRIdVScmHGs+lq6GAvOudjgJIwQ6QAi44BdxeUED1MKhitJUC/FxhGwc0RtQlqwFsyAEXlAOqp6ZPHHBt4wC2iQPwesDrBQdUj1d/TCHkeLZxwLOJA/B6wDfkAAblgBp475EeQNZxwLeJA/B6IOgFB4JecyCwjQOBTRyA1wOhIQdA81CQGkHqkS2ErPMLhTZxAF4PRL3ggBqy6xEHXOv8QiqcKimGFW2T3RJyvN842iYlGDShno6iba4aKP1n+1aWnx2RthPQJ5QQb4JtUME1bFXi7jvnCnkRsBbBxgE20PBCfZmtfY8rNm898t+PwhtnFN59Fa/VB71RMrHfZkkQqSzBnbIktoklHaa3Y1PvEgJ1sWJdXcceF5DgAuohFyLLuOCpxuqFcMHUy4RA3UxYdTNpueD2jwtKJjo8GYATM+DIYOpuQqBnbaz6m7RGEu4jGTzbyOBqwP6tkzjZZOxLvej5+8fdmuet3SovG2dY5N6BjbyjY/4hK/jFx3w/aE8kFy6f+ZjvqUkgZVLttrpDWSCDOepH+Dg9Oz3qD6L2OZazkzWodlv6rDO3egerUlIOj6tnUChmP7ByQQN8qb5nsA8MzF8uPy7h9dUpniTMoFtFqu41WyW6HLlBMiuX+9a4FAVg/Dec6/EWt/rjyc72HKLKDaXjoa+JTSFdcOp8JrHh+WMATlrf1zw2p1OsdYFADdYDcALCY60rcdRgPQQnEzjYNdEuwYkBD7bqxDiiYz+sylkvU8N6IbSG9Q2eBTIwc1ZK//DlrA1zcxa1J0Ld+oV83QlPE6kYgnHkQm9rlxMhhcf6giJw8GAfOWGhIRlH4GBfah5M7Y07Gu6s3HtQ4c5Ad1I4uNpt9Zkqzmj45zyGwEWHcAvfOBkSduEfSYastYDXQy2AJHsfPM4fAldewZHBNSVDAEoG1YWhJYPfRzLYlhocApdgwZHB9AEkVc0fGBl0/iGN8zToIxlsyw0Oraom6ZIMpk8iqYr/wMhwxONWkyHsIRlc23KDgyNuIGdANil42CYwDLQPweaBB9sw0j4EnQoPtmGofQh7NjjYdTjzEvwI4N7k0NBpM4g9GxxsQ6fAIPZscLCPHDrRkPZsaLAjdc+uMnYe+EnsLWnH3fsjzUbNauIpXqcyUwlyXGaXlcysSC3Q/f1Lt1IzKMl4YYFf7bpBV46DW86bK4zDIw4c7ZNA6prB+v3jaFc/ePaKwcjUKVr9dSpUChnC8hMtX1sSgbD0B1NBKM105iSySE1saooL75OsGO4GEcnZIdDPEooMSuGGlYoZH1KsLy/R9SVZet2ySOc+uyzRvfohanVSVD1RiLoVnc4/9HtKWaNBnWc1aEuNh2017jnua9T4KZWyafJW9b/bYErZlVSp/9qCf0W9+/Kef+Y1Wd9Iv/PQ4rC9KYeRetKNu1Swsc5h1jtYEcKd4cqbBaVsf3WXf/L5maakHPE/</diagram></mxfile>

View File

@@ -0,0 +1,286 @@
<mxfile host="app.diagrams.net" modified="2023-03-24T09:51:40.108Z" agent="Mozilla/5.0 (X11; Linux x86_64; rv:111.0) Gecko/20100101 Firefox/111.0" etag="h3CG53iG5ZOzR4rXlG7G" version="21.1.0">
<diagram name="Page-1" id="eszlM19UStC2sOhDblEI">
<mxGraphModel dx="1759" dy="928" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="yljYMQVLApDA5sVLynB2-1" value="TLSNotary Protocol Overview" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=16;" vertex="1" parent="1">
<mxGeometry x="260" y="30" width="330" height="60" as="geometry" />
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-3" value="Web Server" style="text;html=1;strokeColor=default;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;strokeWidth=2;" vertex="1" parent="1">
<mxGeometry x="170" y="110" width="90" height="30" as="geometry" />
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-4" value="User" style="text;html=1;strokeColor=default;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;strokeWidth=2;" vertex="1" parent="1">
<mxGeometry x="380" y="110" width="90" height="30" as="geometry" />
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-5" value="Notary" style="text;html=1;strokeColor=default;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;strokeWidth=2;" vertex="1" parent="1">
<mxGeometry x="590" y="110" width="90" height="30" as="geometry" />
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-8" value="" style="group" vertex="1" connectable="0" parent="1">
<mxGeometry x="472" y="170" width="130" height="30" as="geometry" />
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-6" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="yljYMQVLApDA5sVLynB2-8">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="120" y="30" as="sourcePoint" />
<mxPoint y="30" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-7" value="&lt;font style=&quot;font-size: 10px;&quot;&gt;Notary Public Key Share&lt;br&gt;&lt;/font&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="yljYMQVLApDA5sVLynB2-8">
<mxGeometry width="130" height="30" as="geometry" />
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-11" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="380" y="240" as="sourcePoint" />
<mxPoint x="260" y="240" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-12" value="&lt;div style=&quot;font-size: 10px;&quot;&gt;&lt;font style=&quot;font-size: 10px;&quot;&gt;Combined PK =&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 10px;&quot;&gt;&lt;font style=&quot;font-size: 10px;&quot;&gt;User Public Key Share +&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 10px;&quot;&gt;&lt;font style=&quot;font-size: 10px;&quot;&gt;Notary Public Key Share&lt;font style=&quot;font-size: 10px;&quot;&gt;&lt;br&gt;&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="260" y="200" width="130" height="30" as="geometry" />
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-13" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="264" y="280" as="sourcePoint" />
<mxPoint x="384" y="280" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-14" value="Web Server Public Key" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;" vertex="1" parent="1">
<mxGeometry x="264" y="250" width="110" height="30" as="geometry" />
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-15" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="475" y="320" as="sourcePoint" />
<mxPoint x="595" y="320" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-16" value="Web Server Public Key" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=10;" vertex="1" parent="1">
<mxGeometry x="475" y="290" width="110" height="30" as="geometry" />
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-17" value="&lt;b&gt;Key Exchange&lt;/b&gt;" style="rounded=1;whiteSpace=wrap;html=1;verticalAlign=top;" vertex="1" parent="1">
<mxGeometry x="454" y="360" width="152" height="120" as="geometry" />
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-18" value="Point Addition" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="473.75" y="400" width="112.5" height="30" as="geometry" />
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-20" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="420" y="411" as="sourcePoint" />
<mxPoint x="454" y="411" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-21" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="453" y="454" as="sourcePoint" />
<mxPoint x="419" y="454" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-22" value="&lt;div style=&quot;font-size: 11px;&quot;&gt;PMSLabel&lt;/div&gt;&lt;div style=&quot;font-size: 11px;&quot;&gt;Computation&lt;br style=&quot;font-size: 11px;&quot;&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="473.75" y="440" width="112.5" height="30" as="geometry" />
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-23" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="639" y="411" as="sourcePoint" />
<mxPoint x="605" y="410.58" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-24" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="607" y="454.58" as="sourcePoint" />
<mxPoint x="641" y="454.58" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-25" value="&lt;b&gt;Session Key Derivation&lt;br&gt;&lt;/b&gt;" style="rounded=1;whiteSpace=wrap;html=1;verticalAlign=top;" vertex="1" parent="1">
<mxGeometry x="455" y="521" width="152" height="120" as="geometry" />
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-26" value="Master Key" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="474.75" y="561" width="112.5" height="30" as="geometry" />
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-27" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="421" y="572" as="sourcePoint" />
<mxPoint x="455" y="572" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-28" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="454" y="615" as="sourcePoint" />
<mxPoint x="420" y="615" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-29" value="Session Key" style="rounded=1;whiteSpace=wrap;html=1;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="474.75" y="601" width="112.5" height="30" as="geometry" />
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-30" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="640" y="572" as="sourcePoint" />
<mxPoint x="606" y="571.5799999999999" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-31" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="608" y="615.5799999999999" as="sourcePoint" />
<mxPoint x="642" y="615.5799999999999" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-33" value="&lt;b&gt;Encrypt Request&lt;br&gt;&lt;/b&gt;" style="rounded=1;whiteSpace=wrap;html=1;verticalAlign=top;" vertex="1" parent="1">
<mxGeometry x="457" y="680" width="152" height="120" as="geometry" />
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-34" value="Encrypt" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="476.75" y="720" width="112.5" height="30" as="geometry" />
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-35" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="423" y="721" as="sourcePoint" />
<mxPoint x="457" y="721" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-36" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="456" y="777" as="sourcePoint" />
<mxPoint x="422" y="777" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-37" value="Compute MAC" style="rounded=1;whiteSpace=wrap;html=1;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="476.75" y="760" width="112.5" height="30" as="geometry" />
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-38" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="642" y="721" as="sourcePoint" />
<mxPoint x="608" y="720.5799999999999" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-39" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="610" y="774.5799999999999" as="sourcePoint" />
<mxPoint x="644" y="774.5799999999999" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-40" value="PMS EC Additive Share" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="294" y="396" width="120" height="30" as="geometry" />
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-41" value="&lt;b&gt;Decrypt Response&lt;br&gt;&lt;/b&gt;" style="rounded=1;whiteSpace=wrap;html=1;verticalAlign=top;" vertex="1" parent="1">
<mxGeometry x="454" y="880" width="152" height="120" as="geometry" />
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-42" value="Decrypt" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="473.75" y="920" width="112.5" height="30" as="geometry" />
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-45" value="Verify MAC" style="rounded=1;whiteSpace=wrap;html=1;fontSize=11;" vertex="1" parent="1">
<mxGeometry x="473.75" y="960" width="112.5" height="30" as="geometry" />
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-46" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="639" y="931" as="sourcePoint" />
<mxPoint x="605" y="930.5799999999999" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-47" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="607" y="974.5799999999999" as="sourcePoint" />
<mxPoint x="641" y="974.5799999999999" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-48" value="PMS EC Additive Share" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="640" y="396" width="120" height="30" as="geometry" />
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-49" value="Encoded PMS" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="305" y="440" width="120" height="30" as="geometry" />
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-50" value="Encoded PMS" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="630" y="440" width="120" height="30" as="geometry" />
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-51" value="Encoded PMS" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="305" y="558" width="120" height="30" as="geometry" />
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-52" value="Encoded PMS" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="630" y="558" width="120" height="30" as="geometry" />
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-53" value="Encoded Session Keys" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="305" y="601" width="120" height="30" as="geometry" />
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-54" value="Encoded Session Keys" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="640" y="601" width="120" height="30" as="geometry" />
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-55" value="Encoded Session Keys" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="305" y="704" width="120" height="30" as="geometry" />
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-56" value="Encoded Session Keys" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="640" y="708" width="120" height="30" as="geometry" />
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-57" value="Encrypted Request" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="305" y="765" width="115" height="35" as="geometry" />
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-58" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="422" y="747" as="sourcePoint" />
<mxPoint x="456" y="747" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-61" value="Request" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="308" y="731" width="115" height="35" as="geometry" />
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-62" value="Encrypted Request" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="630" y="757.5" width="115" height="35" as="geometry" />
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-63" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="422" y="917" as="sourcePoint" />
<mxPoint x="456" y="917" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-64" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="455" y="973" as="sourcePoint" />
<mxPoint x="421" y="973" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-65" value="Encoded Session Keys" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="304" y="900" width="120" height="30" as="geometry" />
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-66" value="Response" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="330" y="954" width="115" height="35" as="geometry" />
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-67" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="421" y="943" as="sourcePoint" />
<mxPoint x="455" y="943" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-68" value="Encrypted Response" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="290" y="924" width="132" height="35" as="geometry" />
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-69" value="Encrypted Response" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="640" y="957.5" width="132" height="35" as="geometry" />
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-70" value="Encoded Session Keys" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="640" y="910" width="120" height="30" as="geometry" />
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-71" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="380" y="840" as="sourcePoint" />
<mxPoint x="260" y="840" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-72" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="260" y="870" as="sourcePoint" />
<mxPoint x="380" y="870" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-73" value="Encrypted Request" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="257" y="813" width="130" height="30" as="geometry" />
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-74" value="Encrypted Response" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="261" y="845" width="130" height="30" as="geometry" />
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-75" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="600" y="1060" as="sourcePoint" />
<mxPoint x="457" y="1060" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="yljYMQVLApDA5sVLynB2-76" value="Sign Transcript" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="471" y="1030" width="120" height="30" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

View File

@@ -0,0 +1,141 @@
<mxfile host="Electron" modified="2023-09-14T13:15:23.621Z" agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/21.6.8 Chrome/114.0.5735.289 Electron/25.5.0 Safari/537.36" version="21.6.8" etag="U83G3o7G2LZjyDhE_P2v" type="device">
<diagram id="kcIGn_kX_1L25iIxUXLg" name="Page-1">
<mxGraphModel dx="2060" dy="1200" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="EZAqd18MQriHtEKbU3QA-54" value="" style="sketch=0;pointerEvents=1;shadow=1;dashed=0;html=1;strokeColor=default;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#7FBA42;opacity=50;fontStyle=1;expand=0;" parent="1" vertex="1">
<mxGeometry x="650" y="488" width="25" height="53" as="geometry">
<mxRectangle x="300" y="330" width="90" height="20" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="EZAqd18MQriHtEKbU3QA-5" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="EZAqd18MQriHtEKbU3QA-1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="440" y="720" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="EZAqd18MQriHtEKbU3QA-1" value="Prover" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;shadow=1;" parent="1" vertex="1">
<mxGeometry x="400" y="200" width="80" height="80" as="geometry" />
</mxCell>
<mxCell id="EZAqd18MQriHtEKbU3QA-4" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;startArrow=none;" parent="1" source="EZAqd18MQriHtEKbU3QA-56" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="200" y="720" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="EZAqd18MQriHtEKbU3QA-2" value="Server" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;shadow=1;" parent="1" vertex="1">
<mxGeometry x="160" y="200" width="80" height="80" as="geometry" />
</mxCell>
<mxCell id="EZAqd18MQriHtEKbU3QA-6" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="EZAqd18MQriHtEKbU3QA-3" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="680" y="720" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="EZAqd18MQriHtEKbU3QA-3" value="Verifier&lt;br&gt;(Notary)" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;shadow=1;" parent="1" vertex="1">
<mxGeometry x="640" y="200" width="80" height="80" as="geometry" />
</mxCell>
<mxCell id="EZAqd18MQriHtEKbU3QA-29" value="" style="endArrow=classic;html=1;rounded=0;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="200.25" y="440" as="sourcePoint" />
<mxPoint x="440.75" y="440" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="EZAqd18MQriHtEKbU3QA-30" value="" style="endArrow=classic;html=1;rounded=0;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="440" y="440" as="sourcePoint" />
<mxPoint x="680" y="440" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="EZAqd18MQriHtEKbU3QA-12" value="Server&lt;br&gt;Public Key" style="sketch=0;pointerEvents=1;shadow=1;dashed=0;html=1;strokeColor=default;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#7FBA42;container=1;" parent="1" vertex="1">
<mxGeometry x="310.25" y="410" width="25" height="53" as="geometry">
<mxRectangle x="300" y="330" width="90" height="20" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="EZAqd18MQriHtEKbU3QA-32" value="Server&lt;br&gt;Public Key" style="sketch=0;pointerEvents=1;shadow=1;dashed=0;html=1;strokeColor=default;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#7FBA42;container=1;" parent="1" vertex="1">
<mxGeometry x="545" y="410" width="25" height="53" as="geometry" />
</mxCell>
<mxCell id="EZAqd18MQriHtEKbU3QA-36" value="" style="endArrow=classic;html=1;rounded=0;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="679.88" y="329.26" as="sourcePoint" />
<mxPoint x="439.88" y="329.26" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="EZAqd18MQriHtEKbU3QA-26" value="Verifier&lt;br&gt;Public Key" style="sketch=0;pointerEvents=1;shadow=1;dashed=0;html=1;strokeColor=default;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#3333FF;" parent="1" vertex="1">
<mxGeometry x="544.88" y="300" width="25" height="53" as="geometry" />
</mxCell>
<mxCell id="EZAqd18MQriHtEKbU3QA-37" value="" style="endArrow=classic;html=1;rounded=0;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="440.63" y="329.26" as="sourcePoint" />
<mxPoint x="200.13" y="329.26" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="EZAqd18MQriHtEKbU3QA-38" value="Verifier&lt;br&gt;Public Key" style="sketch=0;pointerEvents=1;shadow=1;dashed=0;html=1;strokeColor=default;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#3333FF;" parent="1" vertex="1">
<mxGeometry x="259.88" y="300" width="25" height="53" as="geometry" />
</mxCell>
<mxCell id="EZAqd18MQriHtEKbU3QA-39" value="Prover Public &lt;br&gt;Key" style="sketch=0;pointerEvents=1;shadow=1;dashed=0;html=1;strokeColor=default;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#FF3333;" parent="1" vertex="1">
<mxGeometry x="359.88" y="300" width="25" height="53" as="geometry" />
</mxCell>
<mxCell id="EZAqd18MQriHtEKbU3QA-48" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.3;exitY=1.02;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="EZAqd18MQriHtEKbU3QA-44" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="440" y="610" as="targetPoint" />
<Array as="points">
<mxPoint x="538" y="610" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="EZAqd18MQriHtEKbU3QA-49" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.75;exitY=1;exitDx=0;exitDy=0;" parent="1" source="EZAqd18MQriHtEKbU3QA-44" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="680" y="610" as="targetPoint" />
<Array as="points">
<mxPoint x="583" y="610" />
<mxPoint x="680" y="610" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="EZAqd18MQriHtEKbU3QA-44" value="Secure 2PC" style="rounded=0;whiteSpace=wrap;html=1;shadow=1;sketch=0;strokeColor=#000000;fillColor=#99CCFF;" parent="1" vertex="1">
<mxGeometry x="507.5" y="530" width="100" height="40" as="geometry" />
</mxCell>
<mxCell id="EZAqd18MQriHtEKbU3QA-47" value="" style="endArrow=classic;html=1;rounded=0;entryX=-0.007;entryY=0.458;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" target="EZAqd18MQriHtEKbU3QA-44" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="440" y="548" as="sourcePoint" />
<mxPoint x="347" y="580.3799999999999" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="EZAqd18MQriHtEKbU3QA-50" value="PMS Key Share" style="sketch=0;pointerEvents=1;shadow=1;dashed=0;html=1;strokeColor=default;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#fdff01;fillStyle=solid;gradientColor=#FFFFFF;" parent="1" vertex="1">
<mxGeometry x="476" y="614" width="25" height="53" as="geometry" />
</mxCell>
<mxCell id="EZAqd18MQriHtEKbU3QA-51" value="PMS Key Share" style="sketch=0;pointerEvents=1;shadow=1;dashed=0;html=1;strokeColor=default;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#FFFF00;gradientColor=#FFFFFF;gradientDirection=north;" parent="1" vertex="1">
<mxGeometry x="615" y="614" width="25" height="53" as="geometry" />
</mxCell>
<mxCell id="EZAqd18MQriHtEKbU3QA-53" value="Prover&lt;br&gt;Private Key" style="sketch=0;pointerEvents=1;shadow=1;dashed=0;html=1;strokeColor=default;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#FF3333;opacity=50;" parent="1" vertex="1">
<mxGeometry x="462.5" y="493.5" width="25" height="53" as="geometry" />
</mxCell>
<mxCell id="EZAqd18MQriHtEKbU3QA-52" value="Verifier&lt;br&gt;Private Key" style="sketch=0;pointerEvents=1;shadow=1;dashed=0;html=1;strokeColor=default;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#3333FF;opacity=50;" parent="1" vertex="1">
<mxGeometry x="634" y="493.5" width="25" height="53" as="geometry" />
</mxCell>
<mxCell id="EZAqd18MQriHtEKbU3QA-55" value="" style="sketch=0;pointerEvents=1;shadow=1;dashed=0;html=1;strokeColor=default;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#7FBA42;opacity=50;" parent="1" vertex="1">
<mxGeometry x="476" y="488" width="25" height="53" as="geometry">
<mxRectangle x="476" y="524" width="90" height="20" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="EZAqd18MQriHtEKbU3QA-56" value="PMS Key" style="sketch=0;pointerEvents=1;shadow=1;dashed=0;html=1;strokeColor=default;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#FFFF00;" parent="1" vertex="1">
<mxGeometry x="187.5" y="614" width="25" height="53" as="geometry" />
</mxCell>
<mxCell id="EZAqd18MQriHtEKbU3QA-57" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;" parent="1" source="EZAqd18MQriHtEKbU3QA-2" target="EZAqd18MQriHtEKbU3QA-56" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="200" y="760" as="targetPoint" />
<mxPoint x="200" y="280" as="sourcePoint" />
</mxGeometry>
</mxCell>
<mxCell id="2" value="" style="endArrow=classic;html=1;rounded=0;entryX=1.01;entryY=0.458;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" target="EZAqd18MQriHtEKbU3QA-44" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="680" y="548" as="sourcePoint" />
<mxPoint x="608.5" y="548.32" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="3" value="&lt;font style=&quot;font-size: 50px;&quot;&gt;+&lt;/font&gt;" style="text;strokeColor=none;align=center;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;fillStyle=solid;fontSize=50;" parent="1" vertex="1">
<mxGeometry x="302.88" y="299" width="39.75" height="50" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 330 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 65 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 90 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 139 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 114 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 105 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 774 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 266 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 450 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 147 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 43 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 42 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 261 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 55 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 177 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 91 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 46 KiB

Some files were not shown because too many files have changed in this diff Show More