mirror of
https://github.com/tlsnotary/website.git
synced 2026-01-08 21:48:05 -05:00
- move all files in `MPC` to `mpc` and delete `MPC` - rename folder `Protocol` to `protocol`
209 lines
52 KiB
Plaintext
209 lines
52 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 1,
|
|
"id": "71de0621-6285-49a1-a5b5-89b56c4e4060",
|
|
"metadata": {
|
|
"id": "71de0621-6285-49a1-a5b5-89b56c4e4060"
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"import numpy as np\n",
|
|
"import matplotlib.pyplot as plt\n",
|
|
"import matplotlib.ticker as ticker"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "f1658d97-0d39-49d3-b2e7-176d8305f20b",
|
|
"metadata": {
|
|
"id": "f1658d97-0d39-49d3-b2e7-176d8305f20b"
|
|
},
|
|
"source": [
|
|
"## Data"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"id": "0bceac9d-3ce2-47c5-b499-1935453036de",
|
|
"metadata": {
|
|
"id": "0bceac9d-3ce2-47c5-b499-1935453036de"
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"no_of_ranges = np.array([1, 2, 78, 538, 716, 1074], dtype=float)\n",
|
|
"secret_sizes = np.array([2873, 3133, 22621, 134525, 177765, 265421], dtype=float)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "86d5cb46-dd20-4d5a-8f44-fd56127b2e50",
|
|
"metadata": {
|
|
"id": "86d5cb46-dd20-4d5a-8f44-fd56127b2e50"
|
|
},
|
|
"source": [
|
|
"## Compute a best-fit line using np.polyfit (degree=1 for linear)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"id": "d88f787b-b33e-4caf-98e2-b63e089bfcf2",
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/"
|
|
},
|
|
"id": "d88f787b-b33e-4caf-98e2-b63e089bfcf2",
|
|
"outputId": "70e5ed8a-de3c-4d90-f28d-64fc06956d8d"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"output_type": "stream",
|
|
"name": "stdout",
|
|
"text": [
|
|
"Slope = 244.401, Intercept = 2929.222\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"slope, intercept = np.polyfit(no_of_ranges, secret_sizes, 1)\n",
|
|
"print(f\"Slope = {slope:.3f}, Intercept = {intercept:.3f}\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "5e1d98f8-b479-48d0-a93d-c37bfaf14238",
|
|
"metadata": {
|
|
"editable": true,
|
|
"tags": [],
|
|
"id": "5e1d98f8-b479-48d0-a93d-c37bfaf14238"
|
|
},
|
|
"source": [
|
|
"## Create a function for the fitted line"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 4,
|
|
"id": "e43c50b0-380a-4ee4-b8e7-7fd972542a4c",
|
|
"metadata": {
|
|
"id": "e43c50b0-380a-4ee4-b8e7-7fd972542a4c"
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"def line_of_best_fit(x):\n",
|
|
" return slope * x + intercept"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "185e7cb5-36ac-485f-8c7a-ab1bc35c4dc6",
|
|
"metadata": {
|
|
"id": "185e7cb5-36ac-485f-8c7a-ab1bc35c4dc6"
|
|
},
|
|
"source": [
|
|
"## Plot: data points and best-fit line"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 5,
|
|
"id": "30a80b4b-7787-4eec-b1b9-df0f7813ee5a",
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/",
|
|
"height": 407
|
|
},
|
|
"id": "30a80b4b-7787-4eec-b1b9-df0f7813ee5a",
|
|
"outputId": "7b3bfa2c-21b1-43d8-b16a-80ef475409fc"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"output_type": "display_data",
|
|
"data": {
|
|
"text/plain": [
|
|
"<Figure size 600x400 with 1 Axes>"
|
|
],
|
|
"image/png": "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\n"
|
|
},
|
|
"metadata": {}
|
|
}
|
|
],
|
|
"source": [
|
|
"x_line = np.linspace(no_of_ranges.min() - 1, no_of_ranges.max() + 1, 100)\n",
|
|
"y_line = line_of_best_fit(x_line)\n",
|
|
"\n",
|
|
"plt.figure(figsize=(6, 4))\n",
|
|
"plt.scatter(no_of_ranges, secret_sizes, color=\"red\", label=\"Data points\")\n",
|
|
"\n",
|
|
"plt.plot(x_line, y_line, color=\"blue\", label=f\"y = {slope:.2f}x + {intercept:.2f}\")\n",
|
|
"plt.title(\"Secret Size v.s. Ranges Committed\")\n",
|
|
"plt.ylabel(\"Size of Secret (Bytes)\")\n",
|
|
"plt.xlabel(\"No. of Ranges Committed\")\n",
|
|
"plt.legend()\n",
|
|
"\n",
|
|
"# Access current axes and set a FuncFormatter\n",
|
|
"def bytes_to_kb(y, pos):\n",
|
|
" # y is the tick value (in bytes)\n",
|
|
" return f\"{y / 1024:.1f}K\"\n",
|
|
"\n",
|
|
"ax = plt.gca()\n",
|
|
"ax.yaxis.set_major_formatter(ticker.FuncFormatter(bytes_to_kb))\n",
|
|
"\n",
|
|
"plt.grid(True)\n",
|
|
"plt.tight_layout()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "be14170a-fce8-489f-b01f-d8e12f0b91f9",
|
|
"metadata": {
|
|
"id": "be14170a-fce8-489f-b01f-d8e12f0b91f9"
|
|
},
|
|
"source": [
|
|
"\n",
|
|
"## Info\n",
|
|
"- `Transcript` of 1076 bytes (sent len: 226 bytes, recv len: 850 bytes) is used.\n",
|
|
"- `No. of Ranges Committed (K)` are generated by different commit strategies:\n",
|
|
" - Commit to request (1 range)\n",
|
|
" - Commit to request and response (2 ranges)\n",
|
|
" - Commit to HTTP objects (78 ranges)\n",
|
|
" - Commit to every single byte (1076 ranges)\n",
|
|
" - Commit to every X byte (538 ranges, 717 ranges)\n",
|
|
"- `Size of Secret` is the size of the resulting secret file generated, which includes:\n",
|
|
" - Data that don't grow with increasing `K`, e.g. transcript itself, server cert info\n",
|
|
" - Data that grows **linearly**: `EncodingTree`, which has\n",
|
|
" - `MerkleTree`, where no. of leaves = `K`, hence total number of nodes scales in `O(K)`\n",
|
|
" - `Vec<Blinder>`, where no. of blinder = `K`\n",
|
|
" - `BiMap<usize, (Direction, Idx)>`, where `(Direction, Idx)` = ranges committed\n",
|
|
"- `Attestation` generated don't grow with increasing `K` as only the merkle root is committed."
|
|
]
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": "Python 3 (ipykernel)",
|
|
"language": "python",
|
|
"name": "python3"
|
|
},
|
|
"language_info": {
|
|
"codemirror_mode": {
|
|
"name": "ipython",
|
|
"version": 3
|
|
},
|
|
"file_extension": ".py",
|
|
"mimetype": "text/x-python",
|
|
"name": "python",
|
|
"nbconvert_exporter": "python",
|
|
"pygments_lexer": "ipython3",
|
|
"version": "3.11.10"
|
|
},
|
|
"colab": {
|
|
"provenance": []
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 5
|
|
} |