{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "cell-00",
   "metadata": {},
   "source": [
    "# Chapter 31: Elliptic Curves and the Group Law\n",
    "\n",
    "\n",
    "<!-- Adapted from: Elliptic_curve_group_law.ipynb -->\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cell-01",
   "metadata": {},
   "source": [
    "## 31.1 Historical Background\n",
    "\n",
    "The application of elliptic curves to cryptography emerged from two independent proposals in the mid-1980s:\n",
    "\n",
    "- In **1985**, **Victor Miller** presented the idea of using the group of rational points on an elliptic curve over a finite field as the basis for a public-key cryptosystem at a crypto conference, with the paper appearing in 1986.\n",
    "\n",
    "- In **1987**, **Neal Koblitz** independently proposed essentially the same idea, publishing in *Mathematics of Computation*.\n",
    "\n",
    "Both recognized a key insight: the **discrete logarithm problem** on an elliptic curve group appeared to be significantly harder than the corresponding problem in the multiplicative group of a finite field. This meant that the same level of security could be achieved with dramatically smaller key sizes. For example, a 256-bit elliptic curve key provides roughly the same security as a 3072-bit RSA key.\n",
    "\n",
    "Elliptic curves had been studied as abstract mathematical objects for over a century -- by Weierstrass, Mordell, Weil, and many others -- but their application to practical cryptography was revolutionary. Today, **Elliptic Curve Cryptography (ECC)** underpins TLS 1.3, Bitcoin, Signal, and numerous other protocols.\n",
    "\n",
    "```{note}\n",
    "This chapter focuses on the *mathematics* of elliptic curves: defining the group law, implementing arithmetic over finite fields, and verifying the group axioms computationally. Cryptographic protocols built on these foundations (ECDH, ECDSA, etc.) are treated in later chapters.\n",
    "```"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cell-02",
   "metadata": {},
   "source": [
    "## 31.2 The Weierstrass Equation\n",
    "\n",
    "````{prf:definition} Elliptic Curve (Short Weierstrass Form)\n",
    ":label: def-31-1\n",
    "\n",
    "An **elliptic curve** $E$ over a field $K$ (with $\\text{char}(K) \\neq 2, 3$) is the set of points $(x, y) \\in K \\times K$ satisfying\n",
    "\n",
    "$$\n",
    "E: \\quad y^2 = x^3 + ax + b, \\qquad a, b \\in K,\n",
    "\n",
    "$$\n",
    "\n",
    "together with a distinguished **point at infinity** $\\mathcal{O}$, subject to the non-singularity condition\n",
    "\n",
    "$$\n",
    "\\Delta = -16(4a^3 + 27b^2) \\neq 0.\n",
    "\n",
    "$$\n",
    "````\n",
    "\n",
    "The discriminant condition $\\Delta \\neq 0$ ensures the cubic $x^3 + ax + b$ has no repeated roots, which is equivalent to the curve having no cusps or self-intersections. When $\\Delta = 0$, the curve degenerates into a **singular** curve that does not carry a group structure in the usual sense.\n",
    "\n",
    "Over the **real numbers** $\\mathbb{R}$, elliptic curves appear as smooth plane curves. Over a **finite field** $\\mathbb{F}_p$, the \"curve\" is a discrete set of points. In both cases, the same algebraic formulas define the group operation."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "cell-03",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-03-04T22:42:28.083138Z",
     "iopub.status.busy": "2026-03-04T22:42:28.082948Z",
     "iopub.status.idle": "2026-03-04T22:42:29.113217Z",
     "shell.execute_reply": "2026-03-04T22:42:29.112933Z"
    },
    "tags": [
     "hide-input"
    ]
   },
   "outputs": [
    {
     "data": {
      "image/png": "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r7wiNW587ibR2eTObRpHo0ZJW7eaEUb33CPFxUk//STde6/ZbGfKFCklxdc/VWg5flzq08ecDxggXXKJ1TgBQ6MICKDJk6XkZDMs9NZbbacBACDTkSNm6kFysnnzkbE7JwAg8I4cMbsjDxhgZiPceKMZWfT882a6ma+4XNKVV5oRpDt3Ss8+a0Yhbd0q9expGkavvx65O6iNHGk2IipTRho+3HaawKFRBATI8ePSmDHm/KGHWO8BABA8HEfq2lX65RepVClp/nymHACALTt3mp3J3nvPjP55+WXp44/NzmX+VLiweZ+ydav00kumObJ9u9Shg3TFFdLKlf59/GCzaVPmRZNx48xaTpGCt6pAgLz6qlnIunx5s5MMAADBYtQo0xyKiZHeeot1iQDAlr/+MuuYrl1rRvYsWyb16hXYJSvy5JH69pU2b5aeecY0SL7/3ow27dDBLIQd7tLTpfvuM+s5NW9uRtxGEhpFQACkpZlhopL0wANcpQUABI933jFXkCVp7FjpqqusxgGAiLV7t9SkifT772b00DffmGlhtuTJIw0davL06GGaVa+/Ll10kVkjKZyno02YYNZuio83azVF2tqyNIqAAFiwwMxtLVpU6tLFdhoAAIzvvzdXhx3H7KjTq5ftRAAQmY4dM2uYZjSJli2TKlWyncooUcKstfrtt2ZXtIMHzXTljKZWuNmyRXrkEXP+wgtmRkikoVEE+JnjmEXhJLPVZN68dvMAACBJ27ZJt9xi1tBr0cKMJoq0K6YAEAwcx+w4+cMPUpEi0pIlUoUKtlOdqX59c4Fh1CjznmbFCunSS00TyXFsp/MNt9tc2D9+3DTCune3ncgOGkWAny1aJK1fb4Yt9u5tOw0AAGbNvBtuMMdatTLXJwIABN7YsdLbb5uFq997T6pa1Xais4uJkQYPNpsfNGliRkLdf790880unThhO13OjR8vLV9uGmHTp0fuBkQR+mMDgTNypDn27CkVKmQ3CwAABw9KzZqZRUorVJA++khKSLCdCgAi05o1mevEjRljdjsLBRUrSp99ZjLHxUmffurSqlW5tWCB7WTZt26d9OCD5vz556XKle3msYlGEeBHX34pffWVuTowcKDtNACASHf4sHTTTeY/wyVLmv/kly1rOxUARKaUFOnuu6XUVKl1azMyJ5RERUkDBphmV926jtLSXGrXLkrd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uKz5+/flrrviNXZsvMaPT1XjxgfPeVtvapzLcRzPhhH4wf79+7V///5z3qZixYq666679MEHH8jlcp36enp6uqKjo9W+fXu9+uqrWX5vVp3ocuXK6eDBg8qfP79vfohscrvd2rdvn4oVK8Y/pH9xu92aM2eOOnbsyPPyL/78fWnTxqV333WpTx9H48ad/+UgOTlZhQoVUlJSkvV/R0Awo8ZR4/6LGpe1nP6+nDghVarkUmKiS3PnunXnndnPQo0DPEONo8b9FzUua/7+fdm+XapSxSW326UNG9y68MKz39abGmd1RFHRokVVtGjR897upZde0tNPP33q8127dunGG2/U/Pnzdfnll5/1+2JjYxUbG3vG16OiooLil9flcgVNlmDC85I1fz0vPXpI774rvfaaS88/71KePOe+PX8vgGeocbyWZ4XnJWs5eV7y5pV69ZKGD5fGjYtSu3bZz8HfC+AZahyv5VnhecmaP5+XihWlm26SPvxQmj49Si++ePbbevP4IbFGUfny5U/7PD4+XpJUpUoVlS1b1kYkIGzccINUoYLZVvGtt6SOHW0nAiILNQ7IuZ49pREjpG+/lb7+WrryStuJAEjUOCAQevY0jaJZs6Snn9Z5L/x7glYfEOGioqSuXc25P7ZWBADA30qUkNq3N+djx1qNAgBAQDVvbi78//23ufDvCyHZKKpYsaIcx1Ht2rVtRwHCwr33mobRypXSxo220wCRjRoHZM+AAeb49tvSjh1WowA4C2oc4HvR0VL37uZ88mTf3GdINooA+FaZMlLLluZ8+nS7WQAAyI5ataRrrpHS06UpU2ynAQAgcO67T4qJkVatktaty/n90SgCIEnq1s0cX31V+tcmEwAAhIy+fc1x6lRqGQAgcpQsKbVubc59MaqIRhEASWZua9my0oEDZhc0AABCzW23mVq2b5/05pu20wAAEDg9epjj669LR4/m7L5oFAGQZIYq3nefOWdRawBAKIqJMbu/SNL48XazAAAQSE2aSJUrS8nJOV/UmkYRgFO6dJFcLmnpUun3322nAQDAe926SblzS999Zz4AAIgEUVHm/ZyU8wv/NIoAnFK+vHTjjeZ85ky7WQAAyI7ixaU77zTnL79sNwsAAIHUubPZBe2rr3K2mzWNIgCnyehCz5pldo4BACDU9Oljjm+8ISUm2s0CAECglC4t3Xyz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",
      "text/plain": [
       "<Figure size 1400x450 with 3 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# Plot y^2 = x^3 + ax + b over the reals for several parameter choices\n",
    "fig, axes = plt.subplots(1, 3, figsize=(14, 4.5))\n",
    "\n",
    "curves = [\n",
    "    (-1, 0, r\"$y^2 = x^3 - x$\"),\n",
    "    (0, 1, r\"$y^2 = x^3 + 1$\"),\n",
    "    (-2, 2, r\"$y^2 = x^3 - 2x + 2$\"),\n",
    "]\n",
    "\n",
    "for ax, (a, b, title) in zip(axes, curves):\n",
    "    x_vals = np.linspace(-3, 3, 2000)\n",
    "    rhs = x_vals**3 + a * x_vals + b\n",
    "    # Only plot where rhs >= 0\n",
    "    mask = rhs >= 0\n",
    "    y_pos = np.sqrt(rhs[mask])\n",
    "    y_neg = -y_pos\n",
    "\n",
    "    ax.plot(x_vals[mask], y_pos, \"b-\", linewidth=1.5)\n",
    "    ax.plot(x_vals[mask], y_neg, \"b-\", linewidth=1.5)\n",
    "    ax.axhline(0, color=\"gray\", linewidth=0.5)\n",
    "    ax.axvline(0, color=\"gray\", linewidth=0.5)\n",
    "    ax.set_title(title, fontsize=13)\n",
    "    ax.set_xlabel(\"x\")\n",
    "    ax.set_ylabel(\"y\")\n",
    "    ax.set_xlim(-3, 3)\n",
    "    ax.set_ylim(-5, 5)\n",
    "    ax.set_aspect(\"equal\")\n",
    "    ax.grid(True, alpha=0.3)\n",
    "\n",
    "    # Check discriminant\n",
    "    disc = -16 * (4 * a**3 + 27 * b**2)\n",
    "    ax.text(0.05, 0.95, f\"$\\\\Delta = {disc}$\", transform=ax.transAxes,\n",
    "            fontsize=10, verticalalignment=\"top\",\n",
    "            bbox=dict(boxstyle=\"round\", facecolor=\"wheat\", alpha=0.5))\n",
    "\n",
    "plt.tight_layout()\n",
    "plt.savefig(\"fig_ch31_real_curves.png\", dpi=150, bbox_inches=\"tight\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cell-04",
   "metadata": {},
   "source": [
    "## 31.3 The Group Law: Point Addition\n",
    "\n",
    "The remarkable fact about elliptic curves is that their points form an **abelian group** under a geometric operation called \"point addition.\"\n",
    "\n",
    "````{prf:definition} Point Addition\n",
    ":label: def-31-2\n",
    "\n",
    "Let $P = (x_1, y_1)$ and $Q = (x_2, y_2)$ be two points on $E$ with $P \\neq Q$ and $P \\neq -Q$. Their sum $R = P + Q = (x_3, y_3)$ is defined by:\n",
    "\n",
    "$$\n",
    "\\lambda = \\frac{y_2 - y_1}{x_2 - x_1}, \\qquad x_3 = \\lambda^2 - x_1 - x_2, \\qquad y_3 = \\lambda(x_1 - x_3) - y_1.\n",
    "\n",
    "$$\n",
    "\n",
    "**Geometric interpretation (over $\\mathbb{R}$):** Draw the line through $P$ and $Q$. It intersects $E$ at a third point $(x_3, y_3')$. Then $R = P + Q$ is the reflection of that third point across the $x$-axis: $y_3 = -y_3'$.\n",
    "````\n",
    "\n",
    "````{prf:definition} Point Doubling\n",
    ":label: def-31-3\n",
    "\n",
    "When $P = Q$ (and $y_1 \\neq 0$), the tangent line at $P$ is used instead. The **doubling** formula is:\n",
    "\n",
    "$$\n",
    "\\lambda = \\frac{3x_1^2 + a}{2y_1}, \\qquad x_3 = \\lambda^2 - 2x_1, \\qquad y_3 = \\lambda(x_1 - x_3) - y_1.\n",
    "\n",
    "$$\n",
    "````\n",
    "\n",
    "````{prf:definition} Point at Infinity\n",
    ":label: def-31-4\n",
    "\n",
    "The **point at infinity** $\\mathcal{O}$ serves as the identity element:\n",
    "\n",
    "$$\n",
    "P + \\mathcal{O} = \\mathcal{O} + P = P \\quad \\text{for all } P \\in E.\n",
    "\n",
    "$$\n",
    "\n",
    "For any point $P = (x, y)$, its **inverse** is $-P = (x, -y)$, and we have $P + (-P) = \\mathcal{O}$.\n",
    "````"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "cell-05",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-03-04T22:42:29.115034Z",
     "iopub.status.busy": "2026-03-04T22:42:29.114884Z",
     "iopub.status.idle": "2026-03-04T22:42:29.327993Z",
     "shell.execute_reply": "2026-03-04T22:42:29.327618Z"
    },
    "tags": [
     "hide-input"
    ]
   },
   "outputs": [
    {
     "data": {
      "image/png": "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KhX27duHoKAguLq64qWXXsLVq1cBACtWrMDkyZNx7tw53YzpK1asMOgcszYhVqhQAV9//TUGDBgAd3d3lCtXDosWLcr0nHv37qFnz54oXrw4fHx80KVLF91ah97e0C2r8uiRmKGDMmMCIyKTc3Nzg5ubG7Zt25ZphfSMJElCcHAw7t+/j507d+L06dMIDAxEu3btdLW0kJAQdOvWDcHBwThz5owuEWmlpKRgypQpOHfuHLZt24Zbt27hvffey/Za48ePx/fff49Tp07B3t4eAwYMAAD07NkT48aNw4svvojIyEhERkaiZ8+ehT7v77//HkFBQThz5gyGDRuGDz74AFeuXAEAPHv2DG3atIGbmxsOHjyIw4cPw83NDZ06dUJKSgo7cxiATYhE1mLYsJy3T5gABAQAkZHAlCmAJEEtSWIGWe16UfPni59hYcCSJdmPERAgjgMAISHipn2OAezt7bFixQoMHjwYP//8MwIDA9GqVSv06tULderUAQD89ddfuHDhAqKionRr+M2cORPbtm3Dpk2b8P7772PatGno1atXpkVw69atqytrExEAVKpUCT/++CMaNWqEJ0+ewMvLS/fYtGnT0KpVKwDAZ599huDgYCQlJcHFxQVubm6wt7dHyZIlDT6/3Lz66qsY9vzv8umnn+KHH35AaGgoqlevjvXr10OtVmPJkiW6dbuWL18OLy8vhIaGokOHDvDz00/sGx2deYwYsQZGRGbSvXt3REREYMeOHejYsSNCQ0MRGBioa6I7ffo0njx5Ah8fH12Nzc3NDbdu3cK///4LADh79izatWuX62ucOXMGXbp0Qfny5eHu7o7WrVsDAG7fvp1pP23SBICAgAAAyNTUaCwZX0elUqFkyZK61zl9+jRu3LgBd3d33bl6e3sjKSlJd77aZVYA/TIrpMcaGJG1yK9GFBAg9pEkaNLSoLa319fAtAID8z9OcLC4FYKzszPat2+P9u3b43//+x8GDRqEiRMnon///tBoNAgICEBoaGi252lrTy4uLrke++nTp+jQoQM6dOiANWvWwM/PD7dv30bHjh2RkpKSaV8HBwddWVv7KehKz4bI+Dra19K+jkajQYMGDbB27dpsz/PLUNXy8wP++0+UHz5kZ46MmMCISDY1a9bEtm3bAACBgYG4f/8+7O3tUaFChRz3r1OnDvbt25fjda0rV67g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668c/579+vWTOzSjy+1/dfny5XKHZjIDBgzQvZf9/Pykdu3aSbt375Y7LJPibPRERKRIyruIQ0REBCYwIiJSKCYwIiJSJCYwIiJSJCYwIiJSJCYwIiJSJCYwIiJSJCYwIiJSJCYwIiJSJCYwIiJSJCYwIiJSJCYwIoVJSkpC/fr1UaVKFcTFxem2379/HyVLlkTr1q2Rnp4uY4RE5sEERqQwzs7O+PXXXxEVFYUBAwYAADQaDfr06QNJkrBu3TrY2dnJHCWR6XE9MCIFqlq1KpYsWYKePXtizpw5ePTokW7tp4CAALnDIzILLqdCpGDDhg3DkiVLkJ6eji+++AJTpkyROyQis2ECI1KwU6dOoWHDhnB0dMTdu3fh5+cnd0hEZsMERqRQT58+RVBQEDQaDR48eIBWrVph+/btcodFZDbsxEGkUEOHDsXt27exZcsWLF26FDt27MAPP/wgd1hEZsMERqRAS5YswZo1azBv3jy8+OKL6N69O0aMGIFPP/0UJ06ckDs8IrNgEyKRwly4cAGNGzdGjx49sGLFCt325ORkNGvWDDExMThz5gy8vLxki5HIHJjAiIhIkdiESEREisQERkREisQERkREisQERkREisQERkREisQERkREisQERkREisQERkREisQERkREisQERkREisQERkREisQERkREivR/lM0C7s+eKoMAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 700x700 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "P = (-1.0000, 1.7321)\n",
      "Q = (1.5000, 1.5411)\n",
      "P + Q = (-0.4942, -1.6934)\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# Geometric illustration of point addition on y^2 = x^3 - 2x + 2\n",
    "a, b = -2, 2\n",
    "\n",
    "fig, ax = plt.subplots(1, 1, figsize=(7, 7))\n",
    "\n",
    "# Plot the curve\n",
    "x_vals = np.linspace(-2.0, 3.5, 3000)\n",
    "rhs = x_vals**3 + a * x_vals + b\n",
    "mask = rhs >= 0\n",
    "y_pos = np.sqrt(rhs[mask])\n",
    "ax.plot(x_vals[mask], y_pos, \"b-\", linewidth=2, label=r\"$E: y^2 = x^3 - 2x + 2$\")\n",
    "ax.plot(x_vals[mask], -y_pos, \"b-\", linewidth=2)\n",
    "\n",
    "# Choose two points on the curve\n",
    "x1 = -1.0\n",
    "y1 = np.sqrt(x1**3 + a * x1 + b)\n",
    "x2 = 1.5\n",
    "y2 = np.sqrt(x2**3 + a * x2 + b)\n",
    "\n",
    "# Compute the addition\n",
    "lam = (y2 - y1) / (x2 - x1)\n",
    "x3 = lam**2 - x1 - x2\n",
    "y3_intersect = lam * (x1 - x3) - y1  # this is y3 = y-coordinate of P+Q\n",
    "y3_third = -y3_intersect  # the third intersection point (before reflection)\n",
    "\n",
    "# Draw the secant line through P and Q\n",
    "x_line = np.linspace(-2, 3.5, 500)\n",
    "y_line = lam * (x_line - x1) + y1\n",
    "ax.plot(x_line, y_line, \"r--\", linewidth=1.2, alpha=0.7, label=\"Secant line\")\n",
    "\n",
    "# Draw the vertical reflection line\n",
    "ax.plot([x3, x3], [y3_third, y3_intersect], \"g--\", linewidth=1.2, alpha=0.7, label=\"Reflect\")\n",
    "\n",
    "# Plot points\n",
    "ax.plot(x1, y1, \"ro\", markersize=9, zorder=5)\n",
    "ax.annotate(\"$P$\", (x1, y1), textcoords=\"offset points\", xytext=(-15, 10),\n",
    "            fontsize=14, fontweight=\"bold\")\n",
    "\n",
    "ax.plot(x2, y2, \"go\", markersize=9, zorder=5)\n",
    "ax.annotate(\"$Q$\", (x2, y2), textcoords=\"offset points\", xytext=(10, 5),\n",
    "            fontsize=14, fontweight=\"bold\")\n",
    "\n",
    "ax.plot(x3, y3_third, \"ks\", markersize=8, zorder=5)\n",
    "ax.annotate(\"$R'$\", (x3, y3_third), textcoords=\"offset points\", xytext=(10, -15),\n",
    "            fontsize=13)\n",
    "\n",
    "ax.plot(x3, y3_intersect, \"m^\", markersize=11, zorder=5)\n",
    "ax.annotate(\"$P+Q$\", (x3, y3_intersect), textcoords=\"offset points\", xytext=(10, 8),\n",
    "            fontsize=14, fontweight=\"bold\", color=\"purple\")\n",
    "\n",
    "ax.axhline(0, color=\"gray\", linewidth=0.5)\n",
    "ax.set_xlim(-2.2, 3.8)\n",
    "ax.set_ylim(-5, 5)\n",
    "ax.set_aspect(\"equal\")\n",
    "ax.set_xlabel(\"x\", fontsize=12)\n",
    "ax.set_ylabel(\"y\", fontsize=12)\n",
    "ax.set_title(\"Point Addition on an Elliptic Curve\", fontsize=14)\n",
    "ax.legend(loc=\"lower right\", fontsize=10)\n",
    "ax.grid(True, alpha=0.3)\n",
    "\n",
    "plt.tight_layout()\n",
    "plt.savefig(\"fig_ch31_point_addition_geometry.png\", dpi=150, bbox_inches=\"tight\")\n",
    "plt.show()\n",
    "\n",
    "print(f\"P = ({float(x1):.4f}, {float(y1):.4f})\")\n",
    "print(f\"Q = ({float(x2):.4f}, {float(y2):.4f})\")\n",
    "print(f\"P + Q = ({float(x3):.4f}, {float(y3_intersect):.4f})\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cell-06",
   "metadata": {},
   "source": [
    "## 31.4 The Group Structure\n",
    "\n",
    "````{prf:theorem} Abelian Group of Points\n",
    ":label: thm-31-1\n",
    "\n",
    "Let $E$ be an elliptic curve over a field $K$. The set $E(K)$ of $K$-rational points on $E$, together with the point at infinity $\\mathcal{O}$, forms an **abelian group** under the addition law defined above. That is:\n",
    "\n",
    "1. **Closure:** If $P, Q \\in E(K)$, then $P + Q \\in E(K)$.\n",
    "2. **Associativity:** $(P + Q) + R = P + (Q + R)$ for all $P, Q, R \\in E(K)$.\n",
    "3. **Identity:** $P + \\mathcal{O} = P$ for all $P \\in E(K)$.\n",
    "4. **Inverses:** For each $P = (x, y) \\in E(K)$, the point $-P = (x, -y)$ satisfies $P + (-P) = \\mathcal{O}$.\n",
    "5. **Commutativity:** $P + Q = Q + P$ for all $P, Q \\in E(K)$.\n",
    "````\n",
    "\n",
    "Closure and commutativity are relatively straightforward from the addition formulas. The identity and inverse properties follow from the definitions. **Associativity** is the hardest to prove -- it requires a careful algebraic verification (or an argument via the Riemann-Roch theorem). We will verify it computationally in Section 31.7."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cell-07",
   "metadata": {},
   "source": [
    "## 31.5 Elliptic Curves over Finite Fields\n",
    "\n",
    "When we work over a finite field $\\mathbb{F}_p$ (where $p > 3$ is prime), all arithmetic is performed modulo $p$. The curve equation becomes:\n",
    "\n",
    "$$\n",
    "E(\\mathbb{F}_p): \\quad y^2 \\equiv x^3 + ax + b \\pmod{p},\n",
    "\n",
    "$$\n",
    "\n",
    "and the set of points $E(\\mathbb{F}_p)$ is finite. The following theorem gives a tight bound on how many points the curve can have.\n",
    "\n",
    "````{prf:theorem} Hasse's Theorem\n",
    ":label: thm-31-2\n",
    "\n",
    "Let $E$ be an elliptic curve over $\\mathbb{F}_p$. Then the number of points $\\#E(\\mathbb{F}_p)$ (including $\\mathcal{O}$) satisfies\n",
    "\n",
    "$$\n",
    "|\\#E(\\mathbb{F}_p) - p - 1| \\leq 2\\sqrt{p}.\n",
    "\n",
    "$$\n",
    "````\n",
    "\n",
    "In other words, the number of points is approximately $p + 1$, with an error of at most $2\\sqrt{p}$. The quantity $t = p + 1 - \\#E(\\mathbb{F}_p)$ is called the **trace of Frobenius**.\n",
    "\n",
    "```{tip}\n",
    "Hasse's theorem tells us that for large $p$, the group $E(\\mathbb{F}_p)$ has roughly $p$ elements. This is crucial for cryptographic applications: if we choose $p \\approx 2^{256}$, the group has approximately $2^{256}$ elements, making brute-force attacks infeasible.\n",
    "```"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cell-08",
   "metadata": {},
   "source": [
    "## 31.6 Implementation: The `EllipticCurve` Class\n",
    "\n",
    "We now implement a complete elliptic curve arithmetic class over $\\mathbb{F}_p$ using only Python integers and modular arithmetic. Points are represented as `(x, y)` tuples, with `None` representing the point at infinity $\\mathcal{O}$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "cell-09",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-03-04T22:42:29.329769Z",
     "iopub.status.busy": "2026-03-04T22:42:29.329658Z",
     "iopub.status.idle": "2026-03-04T22:42:29.337953Z",
     "shell.execute_reply": "2026-03-04T22:42:29.337691Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "EllipticCurve(a=2, b=3, p=97)\n",
      "#E(F_97) = 100  (including point at infinity)\n",
      "First 10 affine points: [(0, 87), (0, 10), (1, 54), (1, 43), (3, 91), (3, 6), (4, 47), (4, 50), (10, 76), (10, 21)]\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "import math\n",
    "\n",
    "\n",
    "class EllipticCurve:\n",
    "    \"\"\"Elliptic curve y^2 = x^3 + ax + b over F_p.\n",
    "\n",
    "    Points are represented as (x, y) tuples with integer coordinates\n",
    "    in the range [0, p-1]. The point at infinity is represented as None.\n",
    "    \"\"\"\n",
    "\n",
    "    def __init__(self, a, b, p):\n",
    "        \"\"\"Initialize the curve E: y^2 = x^3 + ax + b (mod p).\n",
    "\n",
    "        Parameters\n",
    "        ----------\n",
    "        a, b : int\n",
    "            Curve coefficients.\n",
    "        p : int\n",
    "            A prime defining the field F_p.\n",
    "\n",
    "        Raises\n",
    "        ------\n",
    "        ValueError\n",
    "            If the discriminant is zero (singular curve) or p < 5.\n",
    "        \"\"\"\n",
    "        if p < 5:\n",
    "            raise ValueError(f\"Prime p={p} must be >= 5.\")\n",
    "        self.a = a % p\n",
    "        self.b = b % p\n",
    "        self.p = p\n",
    "        disc = (4 * pow(self.a, 3, p) + 27 * pow(self.b, 2, p)) % p\n",
    "        if disc == 0:\n",
    "            raise ValueError(\n",
    "                f\"Singular curve: 4a^3 + 27b^2 = 0 (mod {p}). \"\n",
    "                f\"a={self.a}, b={self.b}.\"\n",
    "            )\n",
    "\n",
    "    def is_on_curve(self, P):\n",
    "        \"\"\"Check whether P lies on the curve.\"\"\"\n",
    "        if P is None:\n",
    "            return True\n",
    "        x, y = P\n",
    "        return (y * y - x * x * x - self.a * x - self.b) % self.p == 0\n",
    "\n",
    "    def neg(self, P):\n",
    "        \"\"\"Return -P.\"\"\"\n",
    "        if P is None:\n",
    "            return None\n",
    "        x, y = P\n",
    "        return (x, (-y) % self.p)\n",
    "\n",
    "    def add(self, P, Q):\n",
    "        \"\"\"Return P + Q on the curve.\"\"\"\n",
    "        if P is None:\n",
    "            return Q\n",
    "        if Q is None:\n",
    "            return P\n",
    "        x1, y1 = P\n",
    "        x2, y2 = Q\n",
    "        if x1 == x2:\n",
    "            if (y1 + y2) % self.p == 0:\n",
    "                # P + (-P) = O\n",
    "                return None\n",
    "            else:\n",
    "                # P == Q, use doubling\n",
    "                return self.double(P)\n",
    "\n",
    "        # General addition\n",
    "        dx = (x2 - x1) % self.p\n",
    "        dy = (y2 - y1) % self.p\n",
    "        lam = (dy * pow(dx, -1, self.p)) % self.p\n",
    "        x3 = (lam * lam - x1 - x2) % self.p\n",
    "        y3 = (lam * (x1 - x3) - y1) % self.p\n",
    "        return (x3, y3)\n",
    "\n",
    "    def double(self, P):\n",
    "        \"\"\"Return 2P on the curve.\"\"\"\n",
    "        if P is None:\n",
    "            return None\n",
    "        x, y = P\n",
    "        if y == 0:\n",
    "            return None\n",
    "        num = (3 * x * x + self.a) % self.p\n",
    "        den = (2 * y) % self.p\n",
    "        lam = (num * pow(den, -1, self.p)) % self.p\n",
    "        x3 = (lam * lam - 2 * x) % self.p\n",
    "        y3 = (lam * (x - x3) - y) % self.p\n",
    "        return (x3, y3)\n",
    "\n",
    "    def scalar_mult(self, k, P):\n",
    "        \"\"\"Return k*P using the double-and-add algorithm.\n",
    "\n",
    "        Parameters\n",
    "        ----------\n",
    "        k : int\n",
    "            Scalar (may be negative).\n",
    "        P : tuple or None\n",
    "            A point on the curve.\n",
    "\n",
    "        Returns\n",
    "        -------\n",
    "        tuple or None\n",
    "            The point k*P.\n",
    "        \"\"\"\n",
    "        if k < 0:\n",
    "            return self.scalar_mult(-k, self.neg(P))\n",
    "        if k == 0 or P is None:\n",
    "            return None\n",
    "        result = None  # identity\n",
    "        addend = P\n",
    "        while k > 0:\n",
    "            if k & 1:\n",
    "                result = self.add(result, addend)\n",
    "            addend = self.double(addend)\n",
    "            k >>= 1\n",
    "        return result\n",
    "\n",
    "    def points(self):\n",
    "        \"\"\"Enumerate all points on E(F_p), including O.\"\"\"\n",
    "        pts = [None]  # point at infinity\n",
    "        for x in range(self.p):\n",
    "            rhs = (x * x * x + self.a * x + self.b) % self.p\n",
    "            if rhs == 0:\n",
    "                pts.append((x, 0))\n",
    "            else:\n",
    "                # Euler criterion: rhs^((p-1)/2) == 1 mod p iff QR\n",
    "                if pow(rhs, (self.p - 1) // 2, self.p) == 1:\n",
    "                    y = self._sqrt_mod(rhs)\n",
    "                    pts.append((x, y))\n",
    "                    if y != 0:\n",
    "                        pts.append((x, self.p - y))\n",
    "        return pts\n",
    "\n",
    "    def _sqrt_mod(self, n):\n",
    "        \"\"\"Compute a square root of n mod p (Tonelli-Shanks).\"\"\"\n",
    "        p = self.p\n",
    "        n = n % p\n",
    "        if n == 0:\n",
    "            return 0\n",
    "        if p % 4 == 3:\n",
    "            return pow(n, (p + 1) // 4, p)\n",
    "        # Tonelli-Shanks for general primes\n",
    "        q, s = p - 1, 0\n",
    "        while q % 2 == 0:\n",
    "            q //= 2\n",
    "            s += 1\n",
    "        z = 2\n",
    "        while pow(z, (p - 1) // 2, p) != p - 1:\n",
    "            z += 1\n",
    "        m, c, t, r = s, pow(z, q, p), pow(n, q, p), pow(n, (q + 1) // 2, p)\n",
    "        while True:\n",
    "            if t == 1:\n",
    "                return r\n",
    "            i = 1\n",
    "            tmp = (t * t) % p\n",
    "            while tmp != 1:\n",
    "                tmp = (tmp * tmp) % p\n",
    "                i += 1\n",
    "            b_val = pow(c, 1 << (m - i - 1), p)\n",
    "            m, c, t, r = i, (b_val * b_val) % p, (t * b_val * b_val) % p, (r * b_val) % p\n",
    "\n",
    "    def order(self):\n",
    "        \"\"\"Return #E(F_p) by brute-force point counting.\"\"\"\n",
    "        return len(self.points())\n",
    "\n",
    "    def __repr__(self):\n",
    "        return f\"EllipticCurve(a={self.a}, b={self.b}, p={self.p})\"\n",
    "\n",
    "\n",
    "# Quick test\n",
    "E = EllipticCurve(a=2, b=3, p=97)\n",
    "print(E)\n",
    "pts = E.points()\n",
    "print(f\"#E(F_97) = {len(pts)}  (including point at infinity)\")\n",
    "print(f\"First 10 affine points: {pts[1:11]}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cell-10",
   "metadata": {},
   "source": [
    "## 31.7 Verifying Curve Membership\n",
    "\n",
    "Let us confirm that every point returned by `points()` actually satisfies the curve equation $y^2 \\equiv x^3 + ax + b \\pmod{p}$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "cell-11",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-03-04T22:42:29.339459Z",
     "iopub.status.busy": "2026-03-04T22:42:29.339355Z",
     "iopub.status.idle": "2026-03-04T22:42:29.342537Z",
     "shell.execute_reply": "2026-03-04T22:42:29.342131Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "All 100 points satisfy the curve equation: True\n",
      "\n",
      "Sample verifications on E: y^2 = x^3 + 2x + 3 (mod 97):\n",
      "  P = ( 0, 87)  |  y^2 mod 97 =  3  |  x^3+2x+3 mod 97 =  3  |  match: True\n",
      "  P = ( 0, 10)  |  y^2 mod 97 =  3  |  x^3+2x+3 mod 97 =  3  |  match: True\n",
      "  P = ( 1, 54)  |  y^2 mod 97 =  6  |  x^3+2x+3 mod 97 =  6  |  match: True\n",
      "  P = ( 1, 43)  |  y^2 mod 97 =  6  |  x^3+2x+3 mod 97 =  6  |  match: True\n",
      "  P = ( 3, 91)  |  y^2 mod 97 = 36  |  x^3+2x+3 mod 97 = 36  |  match: True\n",
      "  P = ( 3,  6)  |  y^2 mod 97 = 36  |  x^3+2x+3 mod 97 = 36  |  match: True\n",
      "  P = ( 4, 47)  |  y^2 mod 97 = 75  |  x^3+2x+3 mod 97 = 75  |  match: True\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "\n",
    "# Verify every point is actually on the curve\n",
    "E = EllipticCurve(a=2, b=3, p=97)\n",
    "pts = E.points()\n",
    "\n",
    "all_valid = all(E.is_on_curve(P) for P in pts)\n",
    "print(f\"All {len(pts)} points satisfy the curve equation: {all_valid}\")\n",
    "\n",
    "# Show a few points with verification\n",
    "print(f\"\\nSample verifications on E: y^2 = x^3 + {E.a}x + {E.b} (mod {E.p}):\")\n",
    "for P in pts[1:8]:\n",
    "    x, y = P\n",
    "    lhs = (y * y) % E.p\n",
    "    rhs = (x**3 + E.a * x + E.b) % E.p\n",
    "    print(f\"  P = ({int(x):2d}, {int(y):2d})  |  y^2 mod 97 = {int(lhs):2d}  |  \"\n",
    "          f\"x^3+2x+3 mod 97 = {int(rhs):2d}  |  match: {lhs == rhs}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cell-12",
   "metadata": {},
   "source": [
    "## 31.8 Plotting the Curve over $\\mathbb{F}_p$ and $\\mathbb{R}$\n",
    "\n",
    "Over the reals, $E$ is a smooth plane curve. Over $\\mathbb{F}_p$, it becomes a discrete scatter of points. Let us compare the two views for the same curve parameters."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "cell-13",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-03-04T22:42:29.344207Z",
     "iopub.status.busy": "2026-03-04T22:42:29.344115Z",
     "iopub.status.idle": "2026-03-04T22:42:29.646998Z",
     "shell.execute_reply": "2026-03-04T22:42:29.646623Z"
    },
    "tags": [
     "hide-input"
    ]
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABGcAAAIcCAYAAABb4sNQAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAACAgUlEQVR4nO3deXiTVfr/8U8CpIUurG0DsgiC4oYiKOIGHUe0IiKoo+KCjAsIqFjHBfGrRQUGVMQRUZlRURzFUVEctUrVgs4PF0RURGVxQVQyBQVKWRpLnt8fZ7rRQtOQ5mR5v66rV855mqR32/OkJ3fPuR+X4ziOAAAAAAAAYIXbdgAAAAAAAACJjOQMAAAAAACARSRnAAAAAAAALCI5AwAAAAAAYBHJGQAAAAAAAItIzgAAAAAAAFhEcgYAAAAAAMAikjMAAAAAAAAWkZwBAAAAAACwiOQMAAAAAACARSRnAMS10tJSXXXVVerSpYtSU1PVrVs3zZgxw3ZYtRo9erQ6dOig9PR0HXDAARo3bpz8fr/tsAAAALAfmI8iGCRnAMS1srIyeb1eLVy4UNu2bdPzzz+vSZMm6fnnn7cdWg1jx47VN998o+LiYn322Wf6/PPPNXnyZNthAQAAYD8wH0UwSM4ACWblypVq3LixFi5cGNGv++KLLyopKUnfffddRL9uSkqK7r77bnXt2lUul0vHHHOMcnJy9P/+3/+LaBzBOOyww5SSkiJJcrvdaty4sdasWWM5qsTUv39/9e/f3/pzoG6LFi2Sy+XSnDlzbIcCAGgg4Zi/2pqLSsxHERySM0CMKy4ultvtlsvl2uvHO++8U3H/G2+8Uccff7wGDBgQ0TjPPfdcHXroobr55psj+nX3VFZWpg8++EA9evSwGsfe/PWvf1VaWpratGmjTz/9VNddd12Df83Vq1frjjvu0PHHH6+MjAylpaXp6KOP1qRJk7R9+/YG//qhWLVqlS6++GIdeuihat68uVJSUnTooYfqxhtvlM/na7CvW9/zLZKmTJmi888/X126dJHL5dKBBx5Y52Oee+459erVS02bNlWbNm100UUXad26dft931jzww8/KC8vT5999pntUAAgIdiYv0bLXFRiPro3sTYnDfd8tHEDxAgggj799FM5jqMLL7xQAwcOrPU+ffv2lSR9+OGHeuutt/TCCy/Uer/x48frgw8+UElJiVJSUuRyuap9vlWrVpo/f35IcbpcLo0bN04jRozQypUrdfjhh4f0PPtr7NixatGihS677DIrX78ut956q2699VZ9/fXXeuaZZ3TAAQc0+Nd84oknNHPmTA0aNEjDhg2Tx+NRYWGhbr/9dv3rX//Shx9+qKZNmzZ4HPXx008/yefzaciQIWrfvr0aN26sFStW6LHHHtNzzz2n5cuXKysrK+xftz7nW6TddtttatWqlY455hht2bKlzvvPnDlT1157rU488UQ98MAD2rRpk2bMmKH33ntPS5cuVbt27UK6b6Sdcsop2rlzp5o0aRLyc/zwww+aOHGiDjzwQB199NHhCw4AUKtIzF/Lysp00EEH6Y477tBBBx0UNXNRifno3sTanDTs81EHQEy7//77HUnO66+/Xud9L7vsMqdFixbOrl27av38mWee6TiO4/zpT38Ka4zliouLnWbNmjljxoxpkOevyw033OAceeSRzsaNG618/fp6/vnnnf79+9frMYWFhY4kp7CwMOjHLF261Nm8eXON4xMmTHAkOTNnzqxXDPURSrz78vzzzzuSnEmTJu3X8/Tr18/p169fjeP1Od/29hwN5dtvv61oH3744U6nTp32et9NmzY5qampzjHHHOP8/vvvFceXLl3quFwu54orrgjpvrGqfBw++eSTtkMBgIQQzvnroEGDHMdxnKFDh1Y7vnv3bmfUqFHO2LFjna1btzqOY38u6jjMR/clXuakoc5H2dYExLhly5ZJko477rh93q+srEzz58/XqaeeqqSkpBqfX7Vqlbp3767t27c3WEY6LS1NJ598sv71r3/JcZxqn/v222/1zTffBPU8o0aNksvl0o8//ljjc999952Sk5M1cuTIasfHjRunhQsX6p133lGbNm1C/ybqYdeuXerYsaMOOOAA7dy5s9rnxowZI7fbraeffnqvj9+9e7dWr17d0GGqd+/eatGiRY3jf/rTnyRJK1asqHZ8f7+vhtS5c2dJ0ubNmxvk+YM932zo0qVL0PddsGCBSkpKdN1116lx48pFtL1799Ypp5yif/3rXxVXZqjPffdlzpw5crlcevvtt5WXl6dOnTopKSlJRx55pJ599tka9//111913XXXqWPHjvJ4PGrXrp2uvPJKbdiwodr9aqs5U/613n33XU2dOlVdunRRUlKSDj74YD311FPVHp+Xl6fs7GxJ0ogRIyqW019++eWSzHjPy8tT9+7d1axZM6Wnp6t79+4RW+INAPEo3PPXLVu21Jjf+Xw+tW/fXieccIIWL14sad9z0T0FMzet75zUxnxU2r+5W6Tmo1L95qTxOB8lOQPEuE8//VQdOnSQJG3atKnGR/kfnk8//VQlJSXq06dPrc/z9ttv67TTTtPixYt14oknNli8ffv21caNG7Vy5cpqx0899VQdeuihQT3HCSecIEn6+OOPa3zuxhtvVHJysu65556KY9ddd53efvttvfvuu8rIyKjz+QOBQK0/y719BAKBWp8nOTlZd999t3755RfNnDmz4nheXp5mzZql+++/v2I569atWzVnzhxt2bJFjuNoxYoVuvvuu5WTkxPUz6Qh/Pzzz5KkzMzMasfr8301tF27dmnTpk366aef9Pbbb+uaa66RJJ155pkN8vWCPd+CFa6xVl/l5075uVTVCSecoG3btlVMSOtz32Dccsstmjdvnq655hrddddd+v3333XxxRfr8ccfr7hPcXGxTjrpJM2cOVOnnnqqHnzwQQ0ZMkRz5sxRnz599N///jeorzV+/Hg9++yzGjVqlKZOnSq3263LL7+8WgHGoUOH6rbbbpMkXX311Zo7d67mzp1bMZkeM2aMJk6cqOOOO07Tp0/XX//6Vw0cOFCLFi0K+nsGAFQXrvlrQUGBBgwYoHfeeadGPZo33nhDf/jDH1RWVlbt7+fe5qJ7CmZuWp85qa35qBT83C0a56NS7XPSuJyP7veaHQDWbNu2zXG73Y6kWj9atmzpBAIBx3Ec54knnnAkOS+99FKtz3XhhRc6O3bscMaNG+esXbu2wWKeO3euI8mZN29eteOdOnVygn1JWr16tSPJuemmm6odLygocCQ506dPrzj2ww8/OJKcpKQkJyUlpeLjjDPO2Ovzf//993v9mdb28f333+/1uXbv3u306NHDad26tbN161Zn5syZjiRnwoQJ1e63detW59RTT3VatmzppKSkOJ07d3ZuuukmZ/v27UH9TMqFa0lmWVmZc/zxxzuNGzd2vvnmmxqfD/b7auh4H3rooWq/iw4dOjhPPfVUSM9VVW1bkupzvu3tOfYUzrFWVV3bms466yxHkrNjx44an3v44YerLTWvz3335cknn3QkOR07dnS2bNlScXzLli1Ox44dnebNmzslJSWO41QuX54xY0a153jmmWccSc5VV11Vcay2LUnlX+voo492SktLK47/9NNPjsfjcS688MJqz7uvbU0tW7as2PIJANh/4Z6/7ty50xkzZky1vy2O4zgjRoxwysrKnPPPP99Zv359xfG9zUX3FMzcNNg5qe35qOMEN3eLtvmo4+x7Thqu+ej+xhyu+SgFgYEY9tlnnykQCOjaa6/V2WefXePz6enpFUXRNm7cKMkU9d3T7t27VVZWpqZNm2r16tU66KCDGizm1q1bS5KKioqqHf/hhx+Cfo5u3bqpTZs21f5LUVZWpnHjxumQQw7R2LFjK4536tSp3qsZvF6vCgoK6nX/vXG73Zo6dapycnI0ZMgQLVq0SKNGjaq2skcyv6u33367XnEGAgH99ttv1Y5t3bq14nbTpk3VPteqVSu53cEtmLzuuuv04Ycf6p577tEhhxxS4/PBfl8NHe8555yj7t27q6SkRMuXL9e///3vBtvSVJ/zLVjhHGv1sWPHDkmqdYl4cnJytfvU577BuOaaa9S8efOKfvPmzTVq1CjddtttKiws1FlnnaWXX35ZrVq10ujRo6s9dtiwYcrLy9PLL7+s2bNn1/m1Ro8eLY/HU9E/4IADdPDBB9frkqAtWrTQl19+qRUrVujII48M+nEAgNqFc/66e/duJScnq6SkpNrflrKyMm3ZskUTJkzQkUceqfbt21d8bm9z0T0FMzcNdk5qez4qBTd3i7b5qLTvOWko89GGiDlc81GSM0AMK9+vO2jQIP3xj3/c533L/8jV9ofhk08+0bHHHqsNGzboyy+/VP/+/at9/qijjtJ1112n6667Th988IGaNGmiP//5z5o0aVLFC1Vqamq1x5SWlurQQw/VF198Ue14+dev75vYPR1//PFatGiRAoGA3G63Zs2apZUrV+qNN97Yr6u2SOYNZ10/z/o444wzdOyxx+rdd9/Veeedp4cffjgsz/vjjz9W7Gnd0znnnFPj2Pfffx/U5ZVvv/12zZo1S1deeWXFdo/a1Pf7aoh427dvXzHhOuecc3Tuuefq2GOP1Y4dOzR+/Ph9Pra+6nO+BSvcYy1YzZo1k2TO0z1rTJXv2y6/T33uG4zalogfdthhksz+fsns0z/66KNrnMsul0uHH364FixYoOLiYqWnp+/za9VWh6d169b1ugT4gw8+qEsuuUQ9evRQ586dlZ2drbPOOkuDBw+u1+QSAGCEa/768ccf67jjjtO3336rgoKCivmr4zj67bfflJWVpd69e+u8886r9rhwzUXLNdSctCHmCA0xJ22o+agU3Jw0lO8p3DGHaz5KcgaIYZ9++qkk6YgjjqjzvuV7W2vL4r799ts688wzVVBQoClTpmjYsGHVPr9792716NFDZ5xxhubPn6+ioiKdddZZatGihW655RZJUklJSbXH9OjRQxdeeGGNr1WepQ5mr+2+9O3bV6+99pq++uortW3bVnl5eTrzzDPDsid29+7dFf+pCUZGRoYaNWq018+/9NJLFRORtLS0sL2hq+0/Kp9//rn+8pe/6L777tNRRx1V4/51ycvL06RJk3TZZZfpscce2+fEpb7fV0PEu6cePXqoZ8+emjVrVtiTM/U534IV7rEWrPJLYv7000/q1q1btc+V7+sun2TU577BqG1M1WeiXJ//PO7tZ1Wf5xg0aJB++OEH5efna9GiRXr33Xf1xBNPqE+fPiosLIyqS3oCQCwI5/z17LPPVkFBgZ577jmdcsopOvvss/Xss8/q9ttv1xVXXFHrisdwzUXLNdSctCHmCA0xJ22o+V2wc9JQvqeGnpOGPB+t90YoAFHj8MMPd1q1ahXUfZcuXepIcqZOnVrjcxdccIETCASc4cOHO0VFRTU+v3LlSsftdlerOfHkk086Bx54YK1f66OPPnIaNWrk/PzzzzU+d+eddzqSnC+//DKouPfm3XffdSQ5jz/+uDNq1CinSZMmtdZGCUU49/gWFBQ4Ho/HOeecc5yLL77YcbvdzhdffBGWOGuzP/tl8/LyHEnOJZdc4uzevXuf9w3X9xXuS2k7juP06NHDadas2X49R231Yupzvu3tOfZkq+bMP/7xD0eSM2fOnFrjTk1NrajVUp/77kt5HZgpU6bU+NzkyZMdSc6///1vx3Ec57DDDnNatWrl+P3+Gvft2rWr06ZNm4r+vmrO1Dau+vXrV+Nns2jRor3WnKlN+bnyxBNPBHV/AEClcM1fzz//fCcQCDgXX3xxxd+hF1980Xn44Yed9evXO5dddlmtzxmuuWi5hpqThnuOEMk56f7O74Kdk4bzewr3nDSU+SgrZ4AYtXPnTn3zzTe1XkGlNj179lR6enqNavI7d+5Us2bN5HK59Ouvv9b6XwTHcSo+qh774Ycfat1a8PjjjysnJ0ft2rWr8Vwffvih2rRpU7GNody3336r33//Xd27dw/q+znuuOPUqFEjzZkzR0uWLNH1119fa22UUIRrj+/SpUs1ZMgQ9e3bV88995x8Pp9eeOEF3XLLLXrjjTfCEmu43HXXXcrLy9PFF1+sOXPm7PO/DtHwffl8vlp/7oWFhbVuzdtf9T3fgmWr5szgwYN13XXX6W9/+5suvvjiiktkf/LJJ3rvvfc0YsSIilot9blvMB555JFqdWe2bt2qRx99VC1atKi4pPWQIUM0adIkPfbYY9VqSM2bN09r167V1VdfHZafQ7nybZl7/md29+7d2rZtW43Leh5zzDGSVGO/OgBg38I1f92+fbtSU1MVCARUWlpa8XdoyJAhOuOMMzRq1Cg1bdpUq1atqjE/3NtcdE/Bzk0bak4azjlCNMzdghXsnDQavqdwz0dJzgAx6rPPPtPu3bvlcrn0zDPP1HqfM844Q23atJFklvcPHTpUCxYsUGlpaUVxz/fee0+nnHKKvvzyS/Xo0aPW5znkkEPUrVs33XbbbZoyZYp8Pp8eeOABSaqRnNmxY4fmzZunp59+usbzbNu2Te+//76GDx9eY2niqaeeqnXr1gW93SAlJUVHHnmk3n//fWVkZOiOO+4I6nHBCMce36+//lo5OTnq2rWrXn31VSUnJ+vAAw/U1VdfrZkzZ+rdd9/VH/7whzBFvH8efvhh3XnnnerYsaNOO+00Pffcc9U+n5WVpdNOO01S9Hxf11xzjTZs2KA//OEP6tSpk3bt2qVly5Zp3rx5SktL0/3331/t/gceeGC9xtee6nu+BSuc+8nnzp1bUUtl48aN8vv9FQXxWrRoUS3J0aZNG02ePFnjxo1T//79demll2rTpk164IEHlJWVpbvuuiuk+wajTZs26tOnj/785z/LcRw9+eST+vHHH/WPf/xDKSkpkqSbb75ZL774oq677jotX75cxx57rL788ks99thjat++fb2/Zl0OO+wwpaamatasWUpJSVF6ero6d+6sQw45RG3bttXZZ5+to48+WllZWVq3bp0effRRpaamaujQoWGNAwDiXbjmr4sXL1a/fv20dOlS9ezZs+KxbrdbgwYN0vz583XTTTdp8uTJevzxxys+v6+56J6CnZs21Jw0XHOEaJm7BSPYOWm0fE/1nY/WKSxrdgBEXPml4vb1sXHjxmqP+eijjxxJzosvvlhx7KabbnKOOeYY57DDDnMWLVq016+3atUqJycnx8nIyHAOOeQQZ9q0aY7L5aq49G25J5980vF6vc7vv/9e4znKtxrUttywPpfSLnf11Vc7kpzZs2fX63ENbd26dU779u2dLl26OD6fr9rnfD6fk5KS4vTq1avaZZfDJZQlmcOHD9/nOCrfmtMQ31eoS0iff/5558wzz3Tat2/vJCUlOcnJyc4hhxzijB071lm3bl2N+7du3dpp165d0M+/55akUM63YLY1hVO/fv32Gtvetjg988wzTs+ePZ3k5GSnVatWzgUXXOB89913+33f2pSf/wUFBc4dd9zhdOjQwfF4PM7hhx/u/POf/6xx/02bNjljx4512rdv7zRp0sTxer3OFVdcUWO7ZDi2NTmO47z66qtOjx49HI/H40hyhg8f7pSWljq33nqrc9xxxzmtWrVyPB6P07FjR+fSSy91vvrqq6C/dwCAEa756w033OAcc8wxziGHHOJ88MEH1e5fUlLiHHbYYU6/fv2c5s2bV/tbta+56J7qMzdlTlpdqPO7YOakDfU9hRJzfeejdXE5Toj/RgQQk8444wxt375d77///n49z8MPP6ynn35aH330UbXjJ510kk466ST99a9/rXbccRwdc8wx6tKli1566aX9+tqSuUxh+X+7P/nkE66agr364osvdNRRR+mJJ57QiBEjgnpM+TLURYsWhfx1w/Ec8WTOnDkaMWKECgsLw77tDAAQ38Ixfw33XLQcc1KEC9uagARz//3366ijjtLChQs1YMCAoB/3xRdfqEuXLkpOTlZhYaHuueeeGluXVq1apSVLluiJJ56o8fj58+frq6++0osvvrjf34Nkvo+1a9fq/fff548g9umtt97SUUcdpeHDh9sOBQAAhCDU+WtV4Z6LVo2NOSnCgeQMkGAOP/xwlZWV1ftxL7zwgmbNmqVdu3ape/fu+sc//lFRh6Tc448/rpNPPlkHH3xwjcefe+65Ki0tDTluyRTffOutt/TFF1/o3nvv1fXXX68TTzxxv54T8e+mm27STTfdZDsMAAAQolDnr1WFYy5ajjkpGgLJGQBBufvuu3X33Xfv8z7Tpk1r0BjeeustDRs2TBkZGbr++us1derUBv16AAAAwJ6Yk6IhUHMGAAAAAADAIjbFAQAAAAAAWERy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Qw89VHEfxg0ANIz6vpf8/vvvdeaZZ+rkk0/W8uXLddttt+m6667TSy+9FNG4g3mPszerVq3Shg0bKj66desWgYgrHX744dW+/ooVK/Z632j5edfgoFbHHXecM2rUqGrHunfv7tx6662WIkI0KyoqciQ5ixcvdhzHcQKBgOP1ep2//vWvFffZtWuX07x5c+fRRx+1FSaixLZt25xu3bo5BQUFTr9+/Zzrr7/ecRzGDWp3yy23OCeddNJeP8+4QW0GDhzo/PnPf652bOjQoc4ll1ziOA7jBgAaUn3fS958881O9+7dqx0bOXKkc/zxxzdYjMHY8z1ObQoLCx1JzubNmyMX2B7uvPNO56ijjgr6/tH682blTC38fr+WLVumAQMGVDs+YMAALVmyxFJUiGZbt26VJLVq1UqSycb6fL5qYygpKUn9+vVjDEFjxozRwIED9cc//rHaccYNavPqq6+qd+/eOv/885WZmamePXvq73//e8XnGTeozUknnaR33nlHq1evliR9/vnn+s9//qMzzzxTEuMGABpKKO8lP/jggxr3P/300/XJJ5/o999/b7BY67Lne5x96dmzp9q2batTTz1VhYWFDR1aDWvWrFG7du3UuXNnXXjhhfruu+/2et9o/XmTnKnFpk2btHv3bmVlZVU7npWVJZ/PZykqRCvHcZSbm6uTTjpJRxxxhCRVjBPGEPY0b948ffrpp5oyZUqNzzFuUJvvvvtOjzzyiLp166a33npLo0aN0nXXXaenn35aEuMGtbvlllt00UUXqXv37mrSpIl69uypcePG6aKLLpLEuAGAhhLKe0mfz1fr/cvKyrRp06YGi3VfanuPU5u2bdtq9uzZeumllzR//nwdcsghOvXUU/Xee+9FLNY+ffro6aef1ltvvaW///3v8vl8OuGEE/Trr7/Wev9o/HlLUmNrXzkGuFyuan3HcWocA8aOHasvvvhC//nPf2p8jjGEqtavX6/rr79eCxcuVHJy8l7vx7hBVYFAQL1799bkyZMlmf9MrVy5Uo888oguu+yyivsxblDV888/r2eeeUbPPvusDj/8cH322WcaN26c2rVrp+HDh1fcj3EDAA2jvq+vtd2/tuORsq/3OFUdcsghOuSQQyr6ffv21fr163XffffplFNOaegwJUk5OTkV7SOPPFJ9+/bVQQcdpKeeekq5ubm1Pibaft4SK2dq1aZNGzVq1KhGZrOoqKhGhg2J7dprr9Wrr76qwsJCtW/fvuJ4eXVwxhCqWrZsmYqKitSrVy81btxYjRs31uLFi/W3v/1NjRs3rhgbjBtU1bZtWx122GHVjh166KEVRQV5vUFtbrrpJt1666268MILdeSRR+rSSy/VDTfcULFqj3EDAA0jlPeSXq+31vs3btxYrVu3brBY92Zv73GCdfzxx2vNmjUNEFlwUlJSdOSRR+41hmj7eZcjOVMLj8ejXr16qaCgoNrxgoICnXDCCZaiQjRxHEdjx47V/Pnz9e6776pz587VPt+5c2d5vd5qY8jv92vx4sWMoQR26qmnasWKFfrss88qPnr37q2LL75Yn332mbp06cK4QQ0nnnhijctYrl69Wp06dZLE6w1qt2PHDrnd1ad5jRo1qriUNuMGABpGKO8l+/btW+P+CxcuVO/evdWkSZMGi3VPdb3HCdby5cvVtm3bMEcXvNLSUn399dd7jSFaft412KlDHP3mzZvnNGnSxHn88cedr776yhk3bpyTkpLi/PDDD7ZDQxS45pprnObNmzuLFi1yNmzYUPGxY8eOivv89a9/dZo3b+7Mnz/fWbFihXPRRRc5bdu2dYqLiy1GjmhT9WpNjsO4QU0ff/yx07hxY2fSpEnOmjVrnH/+859Os2bNnGeeeabiPowb7Gn48OHOAQcc4Lz22mvO999/78yfP99p06aNc/PNN1fch3EDAA2jrveSt956q3PppZdW3P+7775zmjVr5txwww3OV1995Tz++ONOkyZNnBdffDGicQfzHmfP2B944AHn5ZdfdlavXu18+eWXzq233upIcl566aWIxX3jjTc6ixYtcr777jvnww8/dM466ywnLS0t6n/eeyI5sw8PP/yw06lTJ8fj8TjHHHPMPi8hhsQiqdaPJ598suI+gUDAufPOOx2v1+skJSU5p5xyirNixQp7QSMq7ZmcYdygNv/+97+dI444wklKSnK6d+/uzJ49u9rnGTfYU3FxsXP99dc7HTt2dJKTk50uXbo4EyZMcEpLSyvuw7gBgIazr/eSw4cPd/r161ft/osWLXJ69uzpeDwe58ADD3QeeeSRCEcc3HucPWOfOnWqc9BBBznJyclOy5YtnZNOOsl5/fXXIxr3BRdc4LRt29Zp0qSJ065dO2fo0KHOypUr9xqz40THz3tPLsf5X+UbAAAAAAAARBw1ZwAAAAAAACwiOQMAAAAAAGARyRkAAAAAAACLSM4AAAAAAABYRHIGAAAAAADAIpIzAAAAAAAAFpGcAQAAAAAAsIjkDAAAAAAAgEUkZwAAAAAAACwiOQMAAAAAAGARyRkAAAAAAACLSM4AACKiuLhYnTp10vnnn1/t+JgxY9SyZUv99NNPliIDAACIL8y7Yg/JGQBARKSnp2vOnDl66aWXNHfuXEnSW2+9pVmzZmnWrFlq37695QgBAADiA/Ou2ONyHMexHQQAIHHk5ubqiSee0KJFizRw4ECdfPLJmjdvnu2wAAAA4g7zrthBcgYAEFG7du1Sr1699O2336p169b68ssv1bJlS9thAQAAxB3mXbGDbU0AgIhKTk7W0KFDVVpaqosvvpgJAgAAQANh3hU7WDkDAIioL7/8Ur1799Zhhx2mr7/+WsuWLdNhhx1mOywAAIC4w7wrdpCcAQBEjN/vV58+fZSSkqJ3331XJ510knbv3q0PP/xQTZo0sR0eAABA3GDeFVvY1gQAiJg777xTa9as0VNPPSWPx6O5c+fq66+/1l133WU7NAAAgLjCvCu2kJwBAETEkiVLNG3aNN1///066KCDJEmHHHKIpk2bpilTpuijjz6yHCEAAEB8YN4Ve9jWBAAAAAAAYBErZwAAAAAAACwiOQMAAAAAAGARyRkAAAAAAACLSM4AAAAAAABYRHIGAAAAAADAIpIzAAAAAAAAFpGcAQAAAAAAsIjkDAAAAAAAgEUkZwAAAAAAACwiOQMAAAAAAGARyRkAAAAAAACLSM4AAAAAAABY9P8B/OT8fhugL44AAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 1400x550 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# Plot E(F_p) as a discrete scatter plot alongside E(R)\n",
    "E = EllipticCurve(a=2, b=3, p=97)\n",
    "pts = E.points()\n",
    "\n",
    "affine_pts = [P for P in pts if P is not None]\n",
    "xs = [P[0] for P in affine_pts]\n",
    "ys = [P[1] for P in affine_pts]\n",
    "\n",
    "fig, axes = plt.subplots(1, 2, figsize=(14, 5.5))\n",
    "\n",
    "# Left: F_p scatter\n",
    "ax = axes[0]\n",
    "ax.scatter(xs, ys, s=12, c=\"blue\", alpha=0.7)\n",
    "ax.set_title(f\"$E(\\\\mathbb{{F}}_{{97}})$: $y^2 = x^3 + 2x + 3$, $|E| = {len(pts)}$ points\", fontsize=13)\n",
    "ax.set_xlabel(\"x\", fontsize=11)\n",
    "ax.set_ylabel(\"y\", fontsize=11)\n",
    "ax.set_xlim(-2, 99)\n",
    "ax.set_ylim(-2, 99)\n",
    "ax.grid(True, alpha=0.3)\n",
    "\n",
    "# Right: same curve over R for comparison\n",
    "ax = axes[1]\n",
    "a_coeff, b_coeff = 2, 3\n",
    "x_vals = np.linspace(-2, 5, 3000)\n",
    "rhs = x_vals**3 + a_coeff * x_vals + b_coeff\n",
    "mask = rhs >= 0\n",
    "y_pos = np.sqrt(rhs[mask])\n",
    "ax.plot(x_vals[mask], y_pos, \"b-\", linewidth=2)\n",
    "ax.plot(x_vals[mask], -y_pos, \"b-\", linewidth=2)\n",
    "ax.axhline(0, color=\"gray\", linewidth=0.5)\n",
    "ax.axvline(0, color=\"gray\", linewidth=0.5)\n",
    "ax.set_title(r\"$E(\\mathbb{R}): y^2 = x^3 + 2x + 3$\", fontsize=13)\n",
    "ax.set_xlabel(\"x\", fontsize=11)\n",
    "ax.set_ylabel(\"y\", fontsize=11)\n",
    "ax.set_xlim(-2, 5)\n",
    "ax.set_ylim(-12, 12)\n",
    "ax.set_aspect(\"equal\")\n",
    "ax.grid(True, alpha=0.3)\n",
    "\n",
    "plt.tight_layout()\n",
    "plt.savefig(\"fig_ch31_curve_Fp_vs_R.png\", dpi=150, bbox_inches=\"tight\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cell-14",
   "metadata": {},
   "source": [
    "## 31.9 Step-by-Step Point Addition over $\\mathbb{F}_p$\n",
    "\n",
    "Let us pick two points on $E(\\mathbb{F}_{97})$ and trace the addition algorithm step by step, verifying that the result lies on the curve."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "cell-15",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-03-04T22:42:29.648628Z",
     "iopub.status.busy": "2026-03-04T22:42:29.648517Z",
     "iopub.status.idle": "2026-03-04T22:42:29.652795Z",
     "shell.execute_reply": "2026-03-04T22:42:29.652474Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Curve: y^2 = x^3 + 2x + 3 (mod 97)\n",
      "P = (0, 87)\n",
      "Q = (3, 91)\n",
      "\n",
      "Step-by-step:\n",
      "  dx = (x2 - x1) mod 97 = (3 - 0) mod 97 = 3\n",
      "  dy = (y2 - y1) mod 97 = (91 - 87) mod 97 = 4\n",
      "  dx^(-1) mod 97 = 65\n",
      "  lambda = dy * dx^(-1) mod 97 = 66\n",
      "  x3 = lambda^2 - x1 - x2 mod 97 = 85\n",
      "  y3 = lambda*(x1 - x3) - y1 mod 97 = 26\n",
      "  P + Q = (85, 26)\n",
      "  On curve? True\n",
      "\n",
      "Using E.add: (85, 26)\n",
      "Results match: True\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "\n",
    "E = EllipticCurve(a=2, b=3, p=97)\n",
    "pts = E.points()\n",
    "\n",
    "# Pick two distinct affine points\n",
    "P = pts[1]\n",
    "Q = pts[5]\n",
    "print(f\"Curve: y^2 = x^3 + {E.a}x + {E.b} (mod {E.p})\")\n",
    "print(f\"P = {P}\")\n",
    "print(f\"Q = {Q}\")\n",
    "\n",
    "# Step-by-step addition\n",
    "x1, y1 = P\n",
    "x2, y2 = Q\n",
    "p = E.p\n",
    "\n",
    "dx = (x2 - x1) % p\n",
    "dy = (y2 - y1) % p\n",
    "dx_inv = pow(dx, -1, p)\n",
    "lam = (dy * dx_inv) % p\n",
    "x3 = (lam * lam - x1 - x2) % p\n",
    "y3 = (lam * (x1 - x3) - y1) % p\n",
    "R = (x3, y3)\n",
    "\n",
    "print(f\"\\nStep-by-step:\")\n",
    "print(f\"  dx = (x2 - x1) mod {p} = ({x2} - {x1}) mod {p} = {dx}\")\n",
    "print(f\"  dy = (y2 - y1) mod {p} = ({y2} - {y1}) mod {p} = {dy}\")\n",
    "print(f\"  dx^(-1) mod {p} = {dx_inv}\")\n",
    "print(f\"  lambda = dy * dx^(-1) mod {p} = {lam}\")\n",
    "print(f\"  x3 = lambda^2 - x1 - x2 mod {p} = {x3}\")\n",
    "print(f\"  y3 = lambda*(x1 - x3) - y1 mod {p} = {y3}\")\n",
    "print(f\"  P + Q = {R}\")\n",
    "print(f\"  On curve? {E.is_on_curve(R)}\")\n",
    "\n",
    "# Verify with the class method\n",
    "R_class = E.add(P, Q)\n",
    "print(f\"\\nUsing E.add: {R_class}\")\n",
    "print(f\"Results match: {R == R_class}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cell-16",
   "metadata": {},
   "source": [
    "## 31.10 Verifying the Group Axioms\n",
    "\n",
    "We now computationally verify all five group axioms on a small curve $E(\\mathbb{F}_p)$. For a small prime, we can exhaustively check associativity for all triples -- a luxury we will not have for cryptographic-size primes."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "cell-17",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-03-04T22:42:29.654742Z",
     "iopub.status.busy": "2026-03-04T22:42:29.654465Z",
     "iopub.status.idle": "2026-03-04T22:42:29.661953Z",
     "shell.execute_reply": "2026-03-04T22:42:29.661680Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Curve: y^2 = x^3 + x + 6 (mod 11)\n",
      "#E(F_11) = 13\n",
      "Points: [None, (2, 4), (2, 7), (3, 5), (3, 6), (5, 9), (5, 2), (7, 9), (7, 2), (8, 3), (8, 8), (10, 9), (10, 2)]\n",
      "\n",
      "1. Closure: PASS\n",
      "2. Identity (O): PASS\n",
      "3. Inverses: PASS\n",
      "4. Commutativity: PASS\n",
      "5. Associativity: PASS  (2197 triples checked)\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "\n",
    "# Use a smaller prime for exhaustive verification\n",
    "E = EllipticCurve(a=1, b=6, p=11)\n",
    "pts = E.points()\n",
    "n = len(pts)\n",
    "print(f\"Curve: y^2 = x^3 + x + 6 (mod 11)\")\n",
    "print(f\"#E(F_11) = {n}\")\n",
    "print(f\"Points: {pts}\")\n",
    "\n",
    "# 1. CLOSURE: P + Q is on the curve for all P, Q\n",
    "closure_ok = True\n",
    "for P in pts:\n",
    "    for Q in pts:\n",
    "        R = E.add(P, Q)\n",
    "        if not E.is_on_curve(R):\n",
    "            closure_ok = False\n",
    "            print(f\"  CLOSURE FAIL: {P} + {Q} = {R}\")\n",
    "print(f\"\\n1. Closure: {'PASS' if closure_ok else 'FAIL'}\")\n",
    "\n",
    "# 2. IDENTITY: P + O = P for all P\n",
    "identity_ok = all(E.add(P, None) == P and E.add(None, P) == P for P in pts)\n",
    "print(f\"2. Identity (O): {'PASS' if identity_ok else 'FAIL'}\")\n",
    "\n",
    "# 3. INVERSES: P + (-P) = O for all P\n",
    "inverse_ok = all(E.add(P, E.neg(P)) is None for P in pts)\n",
    "print(f\"3. Inverses: {'PASS' if inverse_ok else 'FAIL'}\")\n",
    "\n",
    "# 4. COMMUTATIVITY: P + Q = Q + P for all P, Q\n",
    "comm_ok = True\n",
    "for P in pts:\n",
    "    for Q in pts:\n",
    "        if E.add(P, Q) != E.add(Q, P):\n",
    "            comm_ok = False\n",
    "print(f\"4. Commutativity: {'PASS' if comm_ok else 'FAIL'}\")\n",
    "\n",
    "# 5. ASSOCIATIVITY: (P + Q) + R = P + (Q + R) for all P, Q, R\n",
    "assoc_ok = True\n",
    "count = 0\n",
    "for P in pts:\n",
    "    for Q in pts:\n",
    "        for R in pts:\n",
    "            lhs = E.add(E.add(P, Q), R)\n",
    "            rhs = E.add(P, E.add(Q, R))\n",
    "            if lhs != rhs:\n",
    "                assoc_ok = False\n",
    "                print(f\"  ASSOC FAIL: P={P}, Q={Q}, R={R}\")\n",
    "            count += 1\n",
    "print(f\"5. Associativity: {'PASS' if assoc_ok else 'FAIL'}  ({count} triples checked)\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cell-18",
   "metadata": {},
   "source": [
    "## 31.11 Scalar Multiplication and the Double-and-Add Algorithm\n",
    "\n",
    "Given a point $P$ and a positive integer $k$, the **scalar multiple** $kP$ is defined as:\n",
    "\n",
    "$$\n",
    "kP = \\underbrace{P + P + \\cdots + P}_{k \\text{ times}}.\n",
    "\n",
    "$$\n",
    "\n",
    "Computing this naively requires $k - 1$ additions, which is infeasible when $k \\approx 2^{256}$. The **double-and-add** algorithm (analogous to square-and-multiply for modular exponentiation) computes $kP$ in $O(\\log k)$ group operations by processing the binary representation of $k$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "cell-19",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-03-04T22:42:29.663738Z",
     "iopub.status.busy": "2026-03-04T22:42:29.663618Z",
     "iopub.status.idle": "2026-03-04T22:42:29.667432Z",
     "shell.execute_reply": "2026-03-04T22:42:29.667086Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Curve: y^2 = x^3 + 2x + 3 (mod 97)\n",
      "Base point P = (0, 87)\n",
      "\n",
      "Scalar multiples of P:\n",
      "   k                    kP   on curve?\n",
      "----------------------------------------\n",
      "   1               (0, 87)        True\n",
      "   2              (65, 65)        True\n",
      "   3              (23, 73)        True\n",
      "   4              (52, 29)        True\n",
      "   5              (88, 41)        True\n",
      "   6              (95, 31)        True\n",
      "   7              (10, 21)        True\n",
      "   8              (84, 60)        True\n",
      "   9              (11, 17)        True\n",
      "  10              (80, 87)        True\n",
      "  11              (17, 10)        True\n",
      "  12              (74, 77)        True\n",
      "  13              (87, 27)        True\n",
      "  14              (46, 25)        True\n",
      "  15              (53, 73)        True\n",
      "  16              (92, 16)        True\n",
      "  17               (1, 54)        True\n",
      "  18              (21, 24)        True\n",
      "  19              (85, 71)        True\n",
      "\n",
      "Order of P: 50\n",
      "#E(F_97) = 100\n",
      "Order of P divides #E? True\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "\n",
    "E = EllipticCurve(a=2, b=3, p=97)\n",
    "pts = E.points()\n",
    "P = pts[1]\n",
    "\n",
    "print(f\"Curve: y^2 = x^3 + {E.a}x + {E.b} (mod {E.p})\")\n",
    "print(f\"Base point P = {P}\")\n",
    "print(f\"\\nScalar multiples of P:\")\n",
    "print(f\"{'k':>4s}  {'kP':>20s}  {'on curve?':>10s}\")\n",
    "print(\"-\" * 40)\n",
    "\n",
    "# Compute successive multiples\n",
    "for k in range(1, 20):\n",
    "    kP = E.scalar_mult(k, P)\n",
    "    on_curve = E.is_on_curve(kP)\n",
    "    if kP is None:\n",
    "        print(f\"{int(k):4d}  {'O (infinity)':>20s}  {str(on_curve):>10s}\")\n",
    "    else:\n",
    "        print(f\"{int(k):4d}  {str(kP):>20s}  {str(on_curve):>10s}\")\n",
    "\n",
    "# Find the order of P (smallest k > 0 with kP = O)\n",
    "order_P = None\n",
    "for k in range(1, len(pts) + 1):\n",
    "    if E.scalar_mult(k, P) is None:\n",
    "        order_P = k\n",
    "        break\n",
    "print(f\"\\nOrder of P: {order_P}\")\n",
    "print(f\"#E(F_{E.p}) = {len(pts)}\")\n",
    "print(f\"Order of P divides #E? {len(pts) % order_P == 0}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cell-20",
   "metadata": {},
   "source": [
    "## 31.12 Tracing the Double-and-Add Algorithm\n",
    "\n",
    "The double-and-add method processes the binary digits of $k$ from the least significant bit to the most. Here we trace each step to see how $kP$ is built up."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "cell-21",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-03-04T22:42:29.669110Z",
     "iopub.status.busy": "2026-03-04T22:42:29.668996Z",
     "iopub.status.idle": "2026-03-04T22:42:29.673257Z",
     "shell.execute_reply": "2026-03-04T22:42:29.673011Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Computing 53 * P where P = (0, 87)\n",
      "Binary representation of 53: 0b110101\n",
      "Binary digits (MSB first): [1, 1, 0, 1, 0, 1]\n",
      "\n",
      "Step  Bit           Action                     Result                     Addend\n",
      "--------------------------------------------------------------------------------\n",
      "   0    1              add                    (0, 87)                    (0, 87)\n",
      "   1    0             skip                    (0, 87)                   (65, 65)\n",
      "   2    1              add                   (88, 41)                   (52, 29)\n",
      "   3    0             skip                   (88, 41)                   (84, 60)\n",
      "   4    1              add                   (47, 18)                   (92, 16)\n",
      "   5    1              add                   (23, 73)                   (21, 73)\n",
      "\n",
      "Final result: 53P = (23, 73)\n",
      "Verification: (23, 73)\n",
      "Match: True\n",
      "\n",
      "Total group operations: 6 doubles + 4 adds\n",
      "Naive method would require 52 additions\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "\n",
    "E = EllipticCurve(a=2, b=3, p=97)\n",
    "pts = E.points()\n",
    "P = pts[1]\n",
    "\n",
    "k = 53\n",
    "print(f\"Computing {k} * P where P = {P}\")\n",
    "print(f\"Binary representation of {k}: {bin(k)}\")\n",
    "print(f\"Binary digits (MSB first): {[int(b) for b in bin(k)[2:]]}\")\n",
    "print()\n",
    "\n",
    "# Trace the right-to-left double-and-add\n",
    "result = None\n",
    "addend = P\n",
    "k_copy = k\n",
    "step = 0\n",
    "\n",
    "print(f\"{'Step':>4s}  {'Bit':>3s}  {'Action':>15s}  {'Result':>25s}  {'Addend':>25s}\")\n",
    "print(\"-\" * 80)\n",
    "\n",
    "while k_copy > 0:\n",
    "    bit = k_copy & 1\n",
    "    if bit:\n",
    "        result = E.add(result, addend)\n",
    "        action = \"add\"\n",
    "    else:\n",
    "        action = \"skip\"\n",
    "\n",
    "    result_str = str(result) if result is not None else \"O\"\n",
    "    addend_str = str(addend) if addend is not None else \"O\"\n",
    "    print(f\"{int(step):4d}  {int(bit):3d}  {action:>15s}  {result_str:>25s}  {addend_str:>25s}\")\n",
    "\n",
    "    addend = E.double(addend)\n",
    "    k_copy >>= 1\n",
    "    step += 1\n",
    "\n",
    "print(f\"\\nFinal result: {k}P = {result}\")\n",
    "print(f\"Verification: {E.scalar_mult(k, P)}\")\n",
    "print(f\"Match: {result == E.scalar_mult(k, P)}\")\n",
    "print(f\"\\nTotal group operations: {step} doubles + {bin(k).count('1')} adds\")\n",
    "print(f\"Naive method would require {k - 1} additions\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cell-22",
   "metadata": {},
   "source": [
    "## 31.13 The Elliptic Curve Discrete Logarithm Problem (ECDLP)\n",
    "\n",
    "````{prf:definition} ECDLP\n",
    ":label: def-31-5\n",
    "\n",
    "Given an elliptic curve $E$ over $\\mathbb{F}_p$, a base point $G \\in E(\\mathbb{F}_p)$ of order $n$, and a point $Q = kG$ for some unknown $k \\in \\{0, 1, \\ldots, n-1\\}$, the **Elliptic Curve Discrete Logarithm Problem** is to find $k$.\n",
    "````\n",
    "\n",
    "The best known algorithms for the general ECDLP on a well-chosen curve run in $O(\\sqrt{n})$ time (e.g., Pollard's rho algorithm). There is no known sub-exponential algorithm (unlike the ordinary DLP in $\\mathbb{F}_p^*$, which can be solved in sub-exponential time via the number field sieve). This is the fundamental reason ECC can use shorter keys than RSA or classical Diffie-Hellman.\n",
    "\n",
    "```{warning}\n",
    "Not all elliptic curves are suitable for cryptography. Curves susceptible to the **MOV attack** (embedding degree too small), **anomalous curves** ($\\#E(\\mathbb{F}_p) = p$), or curves with other special structure can have their ECDLP solved efficiently. Standardized curves (NIST P-256, Curve25519, etc.) are carefully chosen to avoid these pitfalls.\n",
    "```"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "cell-23",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-03-04T22:42:29.675069Z",
     "iopub.status.busy": "2026-03-04T22:42:29.674940Z",
     "iopub.status.idle": "2026-03-04T22:42:29.689406Z",
     "shell.execute_reply": "2026-03-04T22:42:29.689043Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Base point G = (0, 87), order = 50\n",
      "\n",
      "Secret k = 42\n",
      "Public Q = kG = (84, 37)\n",
      "\n",
      "Brute-force search for k such that kG = (84, 37):\n",
      "  Found: k = 42\n",
      "\n",
      "For a 256-bit curve, brute force requires ~2^256 operations.\n",
      "Pollard's rho requires ~2^128 operations -- still infeasible.\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "\n",
    "E = EllipticCurve(a=2, b=3, p=97)\n",
    "pts = E.points()\n",
    "n_E = len(pts)\n",
    "\n",
    "# Find a point with large order to use as a base point\n",
    "G = None\n",
    "order_G = 0\n",
    "for candidate in pts[1:]:\n",
    "    for k in range(1, n_E + 1):\n",
    "        if E.scalar_mult(k, candidate) is None:\n",
    "            if k > order_G:\n",
    "                order_G = k\n",
    "                G = candidate\n",
    "            break\n",
    "    if order_G == n_E:\n",
    "        break  # found a generator\n",
    "\n",
    "print(f\"Base point G = {G}, order = {order_G}\")\n",
    "\n",
    "# Choose a secret scalar and compute Q = kG\n",
    "secret_k = 42\n",
    "Q = E.scalar_mult(secret_k, G)\n",
    "print(f\"\\nSecret k = {secret_k}\")\n",
    "print(f\"Public Q = kG = {Q}\")\n",
    "\n",
    "# Brute-force ECDLP\n",
    "print(f\"\\nBrute-force search for k such that kG = {Q}:\")\n",
    "for k_test in range(order_G):\n",
    "    if E.scalar_mult(k_test, G) == Q:\n",
    "        print(f\"  Found: k = {k_test}\")\n",
    "        break\n",
    "\n",
    "print(f\"\\nFor a 256-bit curve, brute force requires ~2^256 operations.\")\n",
    "print(f\"Pollard's rho requires ~2^128 operations -- still infeasible.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cell-24",
   "metadata": {},
   "source": [
    "## 31.14 Verifying Hasse's Theorem\n",
    "\n",
    "We now verify Hasse's bound $|\\#E(\\mathbb{F}_p) - p - 1| \\leq 2\\sqrt{p}$ by counting points on a fixed curve for several primes, and plotting the results."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "cell-25",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-03-04T22:42:29.691177Z",
     "iopub.status.busy": "2026-03-04T22:42:29.691047Z",
     "iopub.status.idle": "2026-03-04T22:42:30.130082Z",
     "shell.execute_reply": "2026-03-04T22:42:30.129816Z"
    },
    "tags": [
     "hide-input"
    ]
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABW4AAAHqCAYAAACUWtfDAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd3gUVdvH8e9uekgjQAo19N4URQRpAgqCIlh58AEFCyDKo9hRERUUFRtipSiI6AuCioqACAioKEgXqaEHQoAU0rPz/nFIIwkpJNkk/D7XtVeyM2dm75lMdmfvOXMfm2VZFiIiIiIiIiIiIiJSZtidHYCIiIiIiIiIiIiIZKfErYiIiIiIiIiIiEgZo8StiIiIiIiIiIiISBmjxK2IiIiIiIiIiIhIGaPErYiIiIiIiIiIiEgZo8StiIiIiIiIiIiISBmjxK2IiIiIiIiIiIhIGaPErYiIiIiIiIiIiEgZo8StiIiIiIiIiIiISBmjxK2IiIiIiIiIiIhIGaPErUg5t3LlSmw2G7NmzXJ2KBVa165d6dq1a7Gsa/v27bi6urJ06dJiWV+6+fPn4+Hhwb59+3KdX5zbIJKua9euhIWFOTsMERERERGRCkeJW5FSlJ5kzfrw8fHh8ssv5+233yYtLc0pcYWHhzN+/Hg2bdpU6GUTExN599136dKlC1WqVMHNzY2goCCuu+46Pv74Y5KSkoo/4ItwMduam5iYGOx2e46/a9bHzz//nG2ZRx99lKuuuopevXoVSwzpBg4cSNOmTXn88ceLdb0lJf3/4ZVXXsmzjY+PT4VKNuf2HuDp6Un9+vUZNmwYu3btcnaIIiIiIiXq0KFDDBw4kODgYGw2G/3793d2SID5nmCz2Rg/fryzQ8FmszF06FBnhyEiZYCrswMQuRTdfvvt9O3bF8uyOHr0KLNmzWLMmDFs376djz76qFDr6ty5MwkJCbi5uRU5nvDwcF544QXCwsJo06ZNoZa74YYb2LFjB927d+eJJ56gWrVqREVFsXLlSh544AH+/PPPQm9TSSrqtuZl48aNWJbFHXfcwQ033JBrmw4dOmT8/vvvv/PTTz/xf//3f7m2feqpp/jtt9+Ii4ujUqVK2Gy2bPMDAwP5+uuvc13WZrMxZswY7r77brZv307z5s2LuFVS0tLfAwASEhLYsmULn3zyCfPnz2fr1q3Url3byRGKiIhIcTr/nO5C9u/fX6HvZhkyZAh///03Tz/9NKGhodSqVSvPtuHh4dStWzfP+TNnzlSCU0QqNCVuRZygTZs2DB48OOP5iBEjaNq0KZ988gkvvvgiwcHBBV6X3W7H09OzJMK8oMTERPr27cu///7LV199xa233ppt/tixY9m2bVuxlwMoazZu3AjAXXfdRZ8+ffJt//777xMQEEC/fv1ynb9lyxZWrlzJ7bffzpdfflnoeAYOHMioUaN4//33mTp1aqGXl9Jx/nsAQMOGDXn44Yf5+uuvGTNmjHMCExERkRIxe/bsbM//+ecfJk6cyM0338yAAQOyzatWrVpphlaqkpKSWLlyJaNHj+axxx4r8HLdu3fn7rvvzjH96quvLs7wyoyEhARcXFycHYaIlAEqlSBSBvj5+dGhQwcsy8qoTxoVFcVDDz1E7dq1cXd3p3r16gwfPpxjx45lWza3GrezZs3CZrOxYsUKXn31VerVq4eHhweNGjXi008/zbb8+PHj6datGwB33313xu3b+V25nj59Otu3b+eRRx7JkbRN16JFCx555JGM5wXdpvHjx2Oz2QgPD8+xzrCwsBy3zhd0e4u6rReyYcMGAK688sp826ampvL1119z7bXX4uHhkWP+v//+S5MmTTh79ixeXl5FisfX15drrrmGr776CsuyirSOH3/8EZvNxpQpU3Kdf80111ClShWSk5NJTExk/PjxNGnSBG9vb/z8/GjSpAkPPfRQkV67IGJjYxk3bhzt27enatWqeHh40KBBA5588kni4+OztS1ofAVtl5SUxMSJE2nevDmenp4ZSfi///77orerevXqADl6zzv7/ybdkSNHuPPOOwkICMDHx4fu3btnXLgQERGRCxs8eHC2R8+ePQFo1apVjnmVKlXKtmxcXJwzQi4Rx48fx7IsKleuXKjlGjZsmGM/DR48mHr16uXa3uFwkJCQUBwhO4Wnp+dF3VEpIhWHErciZYBlWezZsweAqlWrEhMTQ6dOnZg6dSrXXnstb7/9NjfffDOzZs2iffv2HD9+vEDrfeqpp5g7dy4PPPAAr776Kna7naFDh7J27dqMNgMGDODpp58G4L777mP27NnMnj2b+++//4LrTr/VP7926Yprmy4kv+0t6rZeyMaNGzNu7zp58mSOR9bk6caNG4mLi6N9+/a5rmv58uX07NmTVatW0bFjxyLH1KFDByIjI9m+fXuRlu/VqxehoaF89tlnOebt37+ftWvXcscdd+Du7s6oUaN44YUXuPLKK5kyZQqvvPIKN9xwAytXrizw68XHx+e6706ePJlr+yNHjjB9+nTat2/Pc889x5QpU7jsssuYPHkyN998c7a2BY2vIO1SUlK4/vrreeGFF+jQoQNvvvkmTz75JP/88w8dO3bkr7/+KtI2Hzp0iB9//JFnnnmGqlWrMnDgwIx2ZeH/BuDMmTMZFwRuv/12XnvtNcLCwrj22ms5fPjwRccgIiIiRvrF1r///pvrrrsOf39/WrZsCRTu4jWY7xgff/wx7du3x8fHBx8fH1q2bMlzzz2XrV1xXJg+ePAgQ4cOJTQ0FHd3d8LCwnjkkUeIjo7OaDN06FDq1KkDwAsvvJDRiaIw5425Sb8YvXz5cl588UXq16+Ph4dHxt1r8fHxjBs3joYNG+Lh4UG1atW4/fbbLzi2wBdffEGrVq3w9PSkVq1aPPfcc6SkpORod+zYMUaMGJHtAvt9993HiRMnsrVLv8C+c+dOHn/8cWrUqIGHhwetW7fmhx9+yLHe8zuXXKj+bm4X7w8dOsSwYcOoU6cOHh4eVKlShSuuuIKPP/44n70pImWOJSKl5pdffrEA69lnn7UiIyOtEydOWJs3b7aGDx9uAdYVV1xhWZZlPfPMMxZgvfXWW9mWnzNnjgVY9957b451zpw5M2PazJkzLcBq06aNlZSUlDH98OHDlru7u3XHHXfkGlfWdeQnMDDQ8vX1LXD7wmzT888/bwHW/v37c6ynTp06VpcuXbJNK8z2FmVbLcuyunTpkuN1Y2NjLbvdbgG5PipXrmw5HI6M9jNmzLAAa8GCBbm+xh133GHFx8dbY8aMsfbs2VOo+LKaPXu2BVjz5s3LdxvyMnbsWAuwNm/enG36+PHjLcD6448/LMuyrMqVK1t9+vQpUpzpf4v8HufHnJSUZKWkpORY37hx47LFVpj4CtLujTfesADrxx9/zDY9OjraqlWrVoH27YW2uWnTptb27duztS8r/zdPPfWUBVjvv/9+tnW89tprFmDVqVMn320XERGRTOnnBM8//3y26XXq1LHq1q1rVa5c2brvvvusDz/80HrjjTcsy7Ksf/75xwoJCbFGjx5tvf3229bUqVOtW2+91bLZbFavXr1yvMZ//vMfC7A6dOhgTZw40Zo2bZr10EMPWU2bNs1ok5ycbHXt2tVyd3e3hg0bZk2bNs2aNGmSVb9+fcvLy8v6888/892WgwcPWsHBwZabm5s1evRo67333rMGDx5sAVbr1q2t+Ph4y7Isa926ddabb75pAdbNN99szZ4925o9e7YVERGR57r3799vAdaQIUOsyMjIbI/Tp09blpV5TtO6dWurefPm1qRJk6z33nvPWrdunZWSkmJ17tw54zWnTp1qPfbYY5a3t7fl7+9v7dixI8drXXbZZZa/v7/19NNPW++8847Vo0cPC7DuuuuubLEdOHDAql69ulW1alXriSeesD766CPriSeesHx9fa0GDRpYZ86cyWibfp525ZVXWtdcc4315ptvWq+++qoVGhpqubm55Th/S9/m82M7/3jJuu70daSkpFiNGze2fHx8rMcee8z65JNPrClTplj33HOPNXjw4Hz/niJStihxK1KK8kra2Gw2q3fv3taRI0csy7KsZs2aWYGBgVZycnK25R0Oh9WgQQOratWqOdaZW+L2o48+yhFDixYtrMsvvzzXuAqTzHR1dbVq1KhR4PaF2aaiJqAKsr3Fmbj99ddfLcAaPXq0tWzZshyPrAlEy7KsV1991QKsX375Jcf6U1NTrVtuucWyLKvIidB0P/zwgwVY77zzTr7bkJetW7dagPXoo49mm96gQQOrSZMmGc/r1q1r1a5d29qyZUuh40z/WwwbNizX/bds2TLL09PzgjGnpKRYp06dsiIjI62VK1fm2O6CxleQdpdddpnVsGHDHF8aIiMjrXvuucdycXHJ+GJSmG3+/vvvrbfeessKCwuzQkNDra1bt2a0Lyv/N82aNbOqVKmSI2GemJho+fr6KnErIiJSSBdK3ALWjBkzcixTmIvXX375ZUayMS0tLVv7rM+L48J0eoJ40aJF2aa/9NJLFmC9/PLLGdMulIDMTXr73B6tW7e2LCvznKZx48Y5zsU+/vhjC7DGjBmTbfqaNWsswOrZs2eO17Lb7daGDRsypjscDqt///4WYK1ZsyZjer9+/ayqVatahw4dyrbuP//803Jxccm2jennaTfccEO2jh3r16+3AOvJJ5/Mto6LSdxu3rzZAqzJkyfn3KEiUu5ocDIRJxg2bBh33HEHNpsNb29vGjVqRJUqVTLm79u3jzZt2uSoa2Sz2WjevDnffPMNMTEx+Pn5XfB1cqv5VKVKFQ4cOHDR2+Dn50dsbGyB2xfXNl1ISW5vbtLr2/br148ePXrk2z59NGErl9qzf/31F1dccQXHjh1j27ZtOeqRtm7dmrfffrtAcaWvvzCjF5+vRYsWtG3blrlz5/Lqq6/i4uLC2rVr2bNnD5MmTcpo9/bbbzN48GBatWpF3bp16datG3379uWmm27Cbi9YNZ4GDRrkuf/yGpRh2rRpfPDBB2zfvh2Hw5Ft3unTpwsdX0Ha/fPPPyQkJFxwwJCTJ09ecGTkC23zTTfdRJMmTRgxYgS//vorUHb+b/bu3Uvbtm1xdc1+2uDh4UG9evU4c+ZMkV9fREREsqtSpQpDhgzJMd3d3T3j99TUVGJjY0lLS6NHjx689NJL/PHHHxnjLnz++ecAGWWQssr6/PPPP6dhw4a0a9cuR5mqnj178umnn5KQkJDn+AsOh4Nvv/2Wli1bctNNN2Wb98gjj/DKK6/w9ddfZ5QrK6q+ffvy8MMPZ5vm6+ub7fmIESNyxLlw4UJsNhvjxo3LNr1jx450796dn3/+Oce5VM+ePbnssssynttsNh5//HEWLVrEwoUL6dixI2fOnOH777/nv//9L56entn2XVhYGA0aNGDp0qU5Shs8/PDD2c7Rr7jiCnx9fdm9e3fhdsgF+Pv7A7BixQr++9//FmrgaxEpe5S4FXGCCyWq8pNb0i8veSW9CrOOvLRs2ZJVq1axd+9e6tevf1HrOj+eCyUcU1NT85xXktubm/SBmVq0aFGg9ukJv6yJxXTLly+nT58+LFu2jEmTJjFo0KAix3Xq1Klsr1dUQ4YMYcyYMSxbtozrr7+ezz77DLvdzuDBgzPa9OvXj/DwcH788UdWrlzJihUrmDFjBu3bt+eXX34p8iBrF/LGG28wduxYevXqxUMPPUT16tVxd3fnyJEjDB06NFsit6DxFaSdZVk0a9bsggn0i9nnYWFhNGnShLVr1xIfH4+3t/cF25f2/83FXAgQERGRgqtXr16eF8ALevF69+7dBAUFERoaesHXutgL05GRkcTGxtK8efMc87y8vKhfv37G4MsXo0aNGvl+f2rYsGGOafv27SM4ODhbJ5l0LVu2ZMWKFYSHh9OqVauM6U2bNs3RtlmzZoC5mA2wa9cuHA4Hs2bNyjZIdFa5XRzPbVpgYCBRUVG5b1QR1KlTh+eee46XXnqJ6tWr07p1a6699loGDhzIVVddVWyvIyKlQ4OTiZRB9erVY9euXbkWwN+xYwdVq1a9qB525ytKQuaWW24BKHCB+8JsU2BgIJCZgEyXmJjIsWPHCh1rVsWZfNqwYQOBgYH5nhCnS0/wpg9El9XWrVtp06YNK1asyBhlOKvly5cTFhbGqFGjqFu3LgEBATzyyCO5vk76+guaUM7LoEGDcHNz47PPPiMpKYmvvvqK7t27U7NmzWztKleuzKBBg/joo4/Ys2cP48eP548//mDevHkX9fp5mTNnDmFhYfz4448MHz6cPn360KNHjzx7ExQ0vvzaNWrUiMjISLp3706PHj1yfXh6el7UtqWkpGBZVsbo0WXl/6Z+/frs2rUrRwI4KSmpWL6MiYiISKa8Lt6+8cYbjBo1itDQUD788EO+//57li1blpE4zJrILWjHhfQL08uWLcvzcaGkbn6vU1IdKHKT23670OvnNe9C3xfOv4PuzjvvzHO/5TbQb1E7mhT2Av0LL7zAnj17eOedd2jUqBEzZ86kQ4cOPPTQQxd8HREpe5S4FSmDbr75Zk6dOsWHH36Ybfq8efPYs2cPAwYMKNbX8/HxAXLvCZqXYcOG0bRpU9544w2+/vrrXNts3bqVN954AyjcNjVq1Agwycqs3nzzzRw9CwqrKNuam4SEBHbu3Jlr74K8tG3bFj8/P9avX59jXd7e3thsNqKionI9Od60aRMHDx6kbt26bN++nV9++YX333+f1atX52j7+++/U7Vq1YyeAUVVrVo1evfuzaJFi/j88885c+ZMttv20tLScr1FPv3WsvMTiMXFxcUFm82W7QQ3NTWVV155JVu7gsZX0HZ33XUXkZGRvPbaa7nGdfz48UJvS1bbtm1j165d1KxZk6CgIKDs/N/079+fqKgoPvnkk2zT33333UKVTBEREZGiK8zF68aNG3PixIl8L95e7IXpoKAgfH192b59e455iYmJ7Nu376LvzrsY9evX5/jx47n2aN2+fTt2u52wsLBs03fs2JGjbfq09B6zDRo0wGazkZSUlOd+69ixY7FtR14X6IE8L6LXrVuXUaNGMW/ePI4cOcJ1113Hu+++y/79+4stLhEpeSqVIFIGPf7448yfP5+HHnqIv//+myuuuIJt27bx4YcfUrNmTSZMmFCsr9esWTN8fHyYNm0alSpVws/Pj7p169K+ffs8l/Hy8mLx4sXccMMNDBw4kB49etCrVy+qVq1KVFQUq1at4ocffuDee+8t9Db16NGDJk2a8NxzzxEVFUXdunVZs2ZNRkKytLc1N5s2bSItLQ2bzcacOXNybXP99ddni9fFxYUBAwbwzTffkJSUhIeHBwCrV6+mc+fObNu2LdttWllt3ryZW2+9lbFjxwImCdy2bVt27NhB586dM9rFxsby66+/MmTIkGLpXTxkyBC+/fZb/ve//+Hj45MtURgbG0toaCg33ngjbdq0ITg4mAMHDvDBBx/kaFucbrnlFp566il69+7NgAEDiImJYe7cuTnqwBY0voK2e/jhh1m2bBlPPvkkK1eu5Nprr8XPz4+DBw/y888/4+npyS+//FKgbdi0aVPGcZOcnMzu3bv5+OOPSUtLy5YYLiv/N4899hhffPEFo0aNYtOmTbRu3Zo///yThQsXUr9+/QuWYhAREZHiUdCL1wD/+c9/+Oabb3jiiSeYNWtWttILlmVlnCfeddddPPbYY7z22ms88cQTOdZz/PjxC9ZItdvt3HjjjXz++ecsXryYvn37Zsx76623iIuLK7FzwoK4+eab+eGHH5g0aRKvv/56xvTffvst40638+9kXLZsGRs3bsy4iG9ZFpMnT85YH5g6xH369OGbb75h7dq1OZK0lmVx8uTJiy5dls7X15eQkBBWrFiR7e+3b98+Fi1alK1tdHQ03t7e2c6NPTw8aN68OT/99BOnTp2ibt26xRKXiJQ8JW5FyiA/Pz/Wrl3L+PHjWbRoEbNnz84YpGDChAnFXmDey8uLuXPnMm7cOEaPHk1ycjJDhgzJN5lZr149NmzYwMcff8z8+fOZNGkSsbGxVK5cmcsuu4yPP/44ox5qYbbJxcWFb775hoceeoh3330Xd3d3evXqxapVqy76ynVRt/V86fVtV69enWuvVzA1v843YsQIZs2axeLFixk4cCAAP//8Mz///DOJiYlMmzYt13Vt2rQpR8L+2LFjOU4GFyxYQHx8PCNGjCjU9uSlb9++BAYGcurUKYYOHZrtFjRvb2/GjBnDihUrWL58OXFxcYSEhHDdddfx1FNPldgJ4WOPPYZlWUyfPp2HH36YkJAQbr/9du6+++5svYwLGl9B27m5ufH9998zbdo0Zs+ezfPPPw9A9erVufLKK3MdRCQvX375JV9++SVgbn0LDAzkyiuvZOzYsXTv3j2jXVn5vwkICODXX39l7NixzJs3jzlz5nDllVfy888/88gjjxAeHn5R6xcREZH8FfTiNcCtt97K7bffzuzZs9mzZw833ngjlStXZteuXfz0009s27YNKJ4L05MmTWL58uUMHDiQBx54gCZNmvD777/z2Wef0bp16xyDipWmoUOHMnv2bN544w3Cw8Pp3r07Bw4c4L333sPPz4+33norxzKtW7eme/fuGWUpvvnmG5YvX85dd92V7Zzq/fffp1OnTnTr1o277rqLyy67DIfDwb59+/jmm2/473//m2Nwsovx4IMPMm7cOHr37k3//v05evQoH3zwAS1atODPP//MaPfLL79w3333MXDgQBo1aoSvry+bNm3iww8/pFWrVrRp06bYYhKRUmCJiEi+unTpYnXp0qVY1nXddddZnTp1KnD7xMREy9XV1Vq3bl3GtN9//92qVKmSderUqYxpDofDatOmjTVgwIBc11Oc2yAiIiIiRffLL79YgPX8889nm16nTp08z9dSU1OtiRMnWvXr17fc3d2t2rVrW4899pi1Y8eOXNeVlpZmTZ061Wrbtq3l5eVl+fj4WC1btrTGjx+frV1KSor19ttvW+3atbO8vb0tb29vq0GDBtagQYOsn376qUDbEx4ebv33v/+1goODLTc3N6t27drW//73P+vMmTPZ2u3fvz/XWPOS3v7+++/Ps83MmTMtwPrll19ynX/27Fnr6aefturXr2+5ublZVapUsW677TZr586decY2d+5cq2XLlpa7u7tVs2ZN69lnn7WSk5NzrDsyMtIaO3as1bBhQ8vDw8Py9/e3WrRoYT300EPW9u3bM9o9//zzFmDt378/xzpy+5sD1pAhQ7JNS0lJsR577DErJCTE8vDwsNq2bWt9++23Oda9b98+6/7777eaNm1q+fr6Wt7e3lbjxo2tJ5980oqKispzP4pI2WSzrFKsFi4iUk517doVgJUrV170urZv307r1q354Ycf6NWrV77tN27cyJVXXskDDzzAW2+9xc6dO7n11lsZNmxYRukEML1tBw0axI4dO3KtJVac2yAiIiIiIiIiJUulEkRESlnz5s0LVRN006ZN9OnTh6SkJCpXrkxwcDCPPPIII0eOzNZu4MCBJCUlFXe4IiIiIiIiIuIEStyKiJRxmzdvpmXLlrz88st8/PHHzg5HREREREREREqBSiWIiJRxXbp04YEHHuDOO+90digiIiIiIiIiUkrszg5AREQubMuWLbRo0cLZYYiIiIiIiIhIKVKPWxEREREREREREZEyRj1uRURERERERERERMoYJW5FREREREREREREyhhXZwdQVjgcDo4ePYqvry82m83Z4YiIiIgIYFkWsbGxVK9eHbtdfQ4KQ+e3IiIiImVPYc5vlbg95+jRo9SqVcvZYYiIiIhILg4dOkTNmjWdHUa5ovNbERERkbKrIOe3Stye4+vrC5id5ufnl22ew+EgMjKSatWqqadHHrSP8qd9VDDaT/nTPsqf9lH+tI/yp32Uv9LYRzExMdSqVSvjXE0K7kLnt6VJ/0uSGx0XkhsdF5IbHReSm/J8XBTm/FaJ23PSbx/z8/PLNXGbmJiIn59fuTsYSov2Uf60jwpG+yl/2kf50z7Kn/ZR/rSP8lea+6ii3er//vvv8/777xMeHg5A8+bNee655+jduzdgbqF74YUX+Oijjzh9+jTt27fnvffeo3nz5gV+jQud35Ym/S9JbnRcSG50XEhudFxIbirCcVGQ89vyuWUiIiIiIuVYzZo1eeWVV/jrr7/466+/6N69OzfddBPbt28HYPLkyUyZMoWpU6fy559/EhISQs+ePYmNjXVy5CIiIiJSWpS4FREREREpZf369aNPnz40atSIRo0a8fLLL+Pj48Pvv/+OZVm89dZbPPPMMwwYMIAWLVrw6aefEh8fz9y5c50duoiIiIiUEpVKKCDLskhJScGyLGeHUiY5HA5SUlJITEwst13US1pF2UcuLi64urpWuFtWRUREnCUtLY3/+7//4+zZs3To0IH9+/cTERFBr169Mtp4eHjQpUsX1q1bx/3335/repKSkkhKSsp4HhMTA5hzEIfDkedrp6SkFOPW5ORwOEhOTiY+Pr5cnwPlRedGReNwOLAsK89jUy5NOi4kNzouJDfl+bgoTMxK3BZAcnIyZ86c4fTp0zohy0P6P0tsbKz2UR4q0j7y9vYmNDQUd3d3Z4ciIiJSbm3dupUOHTqQmJiIj48PCxcupFmzZqxbtw6A4ODgbO2Dg4M5cOBAnuubNGkSL7zwQo7pkZGRJCYm5pienJyckdwtaQ6Ho9Req7RZloWrqyt+fn64uLg4O5xyw+FwEB0djWVZFTKhL0Wj40Jyo+NCclOej4vClL5S4jYfDoeD8PBwXFxcCA4Oxt3dvdwn3UqCZVmkpqaqt8EFVIR9ZFkWycnJREZGsn//fho2bFju3iBFRETKisaNG7Np0ybOnDnDggULGDJkCKtWrcqYf/75gmVZFzyHeOqpp3jkkUcynqePWFytWrUcg5OlpaWxd+9e/Pz8qFq1aomfm6SkpODm5lair+EM6XflRUZGEhsbS4MGDXRuVEAOhwObzVYuRwOXkqPjQnKj40JyU56PC09PzwK3VeI2H8nJyTgcDqpXr46vr2+5TbiVtIqQlCxpFWUfeXl54ebmxoEDB0hOTi7UG46IiIhkcnd3p0GDBgC0a9eOP//8k7fffpsnnngCgIiICEJDQzPanzhxIkcv3Kw8PDzw8PDIMd1ut+f4QpOcnIxlWVSrVg0vL6/i2Jw8pfdILe/nQBeSfm6Umpqqc6NCsNlsuR6fcmnTcSG50XEhuSmvx0Vh4i1fW+ZEFfUkU6QoytubooiISHlgWRZJSUnUrVuXkJAQli1bljEvOTmZVatWcfXVVxfra+oct3jo3EhERERKgnrcioiIiIiUsqeffprevXtTq1YtYmNjmTdvHitXrmTJkiXYbDbGjBnDxIkTadiwIQ0bNmTixIl4e3szaNAgZ4cuIiIiIqVEiVsRERERkVJ2/Phx7rrrLo4dO4a/vz+tWrViyZIl9OzZE4DHH3+chIQERo4cyenTp2nfvj1Lly7F19fXyZGLiIiISGnRPT0VyKxZsxg6dGihlpk3bx633357kV6vZ8+eLF++/KJjEBEREbnUTJ8+nfDwcJKSkjhx4gTLly/PSNqCKWEwfvx4jh07RmJiIqtWraJFixZOjFhERERESpsStxVYSkoKnp6eVKpUCR8fn4xHjx49ADMC39NPP824ceOKtP5x48bx2GOPFWfIIiIiIiKl6tixY9hstkI/REREREqaSiWUgt27YcYMCA+HsDC45x5o2LDkX3f79u0kJycTExODj49Pjvk//PADgYGBtGzZMmPakCFDCA8Pp3LlytmWefbZZ2ncuHG25Tt37syZM2dYu3ZtsQ+UISIiIiJSGhYsWIBlWc4OQ0RERCQHJW5L2MyZMHw42GxgWebn5MkwfTqUdEWBjRs3UqdOnVyTtgDffvst3bt3z3iekJBAo0aNuOqqq7j//vvzHR3XZrPRvXt3vv32WyVuRURERKTciYyMJCgoyNlhiIiIiORKpRIKybLg7NmCPTZvNklbhwPS0rL/HDYMtmzJfx0Xc/F/48aNF6yFtmnTJpo0aZLxfNWqVXTv3p1KlSrlm7RN16xZMzZt2lT0IEVERERELlJSUhL33nsvdevWxdfXlyZNmjBjxox8l1u6dCm9evUqhQhFRESk1FgWxMXBoUOQlJQ5/a+/4NdfnRdXEajHbSHFx0MeHVgLxeGA1q3zbxcXB5UqFe01Nm7cyMaNGwkICMiYFhYWlpFoPX36NH5+fhnz/v77b4YMGcJjjz3GDz/8AEDTpk15/vnn83wNPz8/Tp8+XbQARUREpPyJjTW3EBXHCZFIIa1cuZLx48ezcuXKbNNTU1MJDQ1l+fLl1KtXjz/++IPevXtTs2bNCyZmz5w5k+1cWURERMqw2FjYuxeaNAF3dzPt//4PPvsMTp+GU6fMz9OnISXFzF+/Hq64wvz+yy9m+WuucU78RaDEbQWVlpbG5s2bmT9/Pn379s21TeXKlYmJicl4brfbWblyJUuWLMmzvML5YmJiqFy5crHELCIiImVYYiJERMCxYxASosStlCmVKlViwoQJGc+vuuoqunXrxpo1a/JM3CYlJeHl5ZVt2uLFi3n00Ufp3r07P/74IzExMYwePZoXXnihROMXERGRLPbsgbVrTZJ1717Yt8/8jIw08zdsgDZtzO8HD8K5zoc5uLmZZG+61q3B07NEQy9uStwWkre36QVbEM8/D2+9ZcojnM/FBcaMgfzOAb29CxuhsXPnTuLj42nXrl2ebdq0acPOnTsBOHr0KHXq1CEiIiJH0rZt27bUr1+fw4cPU79+fT7//POMeTt27KBN+j+LiIiIVDxpaXDyJBw+nFnHSQM5VVxnz+Y9z8Ul+5edC7W12yFrUvTsWXB1Nb21i3o7WSEkJiayfv16Bg0alGebX375hW7dumWbtmXLFvbs2cPIkSN58803Wb9+Pd27d+fWW2+9YAkyERERycfhw7B1a2bP2PTesadOQVQUvP666UkLsGgRPPZY7uupVs0sl65XL6hSBSpXhsBA8zP9d29vc+6RtW05K5GkxG0hFeZc8/774c03c59nWfDAAyV33rpx40Zq1KhBSEhInm369euX0TNhxYoVXHfddcyaNStbm6SkJA4dOsSiRYuoU6cOnTp14siRI9SoUQMwJ7yffvppyWyEiIiIOI9lwZkzcPSoOaH28oLgYHNiLRXXhXpS9+kD33+f+TwoyNQRy02XLpClnIFrw4bYTp40T0o48W9ZFsOHD6dhw4YMGDAgY/qSJUuoUaMGLVu2BGDfvn1cf/312ZbdvHkzgwcP5uGHHwagc+fONGrUiJ07dypxKyIikhfLMr1gv/gCVq0y54unTsHixZllCRYtgtGj817H3XdnJm5bt4Zrr4X69bM/6tWD9JKfDof52bJlwWqRllNK3Jaghg1h+nQzEJnNZo7j9J/Tp0ODBiX32hs3buTYsWM5es/OnTuXG2+8EYA+ffrw0EMPsW3bNn799VfmzZvH6PP+ibZt20b//v2pU6cOAG5ubhm3lP3666/4+vpyzTXXYKnnjYiISMURH28StsePm5OXqlVNb0sRJxg5ciRz584FTC3bxMTEbHVpFy9eTKdOnQCTtB0xYgT//vsvy5cvzxhwNzExkX379rF69eqMxG1ug/Fu3ryZN8/reREREUG1atVKYtNERETKt4MHYcYMmDsXdu/OOf/Uqczfa9eGtm0ze8Om945N/9m2bWbbnj3NQ5S4LWlDh0KnTiZRGx4OYWEmkVuSSVuAN998M8dJ5/lcXFyYOHEiL774Il9++WWubTZv3oztXLfyv/76i2rVqhEYGAjASy+9xOuvv168gYuIiIjzpKTAiRMmaZuYaE6i0wd+kEvDhWqCnZ+8P3Ei77bnJUVTd+/G1dU147yyMKZNm8a0adOAvAcnA5O0HTVqFOvXr+fnn3/G398/Y56npycjRoygR48egBmU9/xyXwkJCezevTvbHWs//fQTLi4uXHXVVYWOW0REpEJK75UIsHNnZg1QLy+48UYYOBBq1TLnkbVqZS53443mIYWixG0paNAAJk1ydhS5u/POO7nzzjvznL9p0yY8PT3p0aMHHh4eTJ8+PWPeTz/9VBohioiISEmzLNMj4vBhiI42t8sHBzs7KnGGwtTxKmzb9Bq3JeTBBx9k7dq1rFixItfBc202G/Xq1WPv3r388ccf3H///dnmb926FZvNxpw5c2jVqhVbtmxhxIgRvPLKK3h4eJRY3CIiImVeVBTMn29KIVx5JUyebKZ37w533AF9+8JNN2nw2hKgxG0F0qZNm2y3jRWH7du388MPPxT4ZLVNmza5niiLiIhIGRUXB0eOmFF6XV0hKIjdBz2Y8aE/4UdcCauRyj0Do2kYluLsSEXydODAAaZNm4aHh0dGiS+AwYMH88EHH2Q879evH9988w1eXl45ev9u2bKFfv36ERUVRUBAAKGhoTz//PMMGTKk1LZDRESkTHA4zEX9pUtNGYSffoLUVDNv3z549VVzMdbV1SRzpcQocVuBtGnTJsctXxfr7Nmzheph0KZNG9pmrUsiIiIiZVNysqlhe/So+f1cWYSZC/wYPi44W33+yZ9UZvrLxxk6IMbZUcslrmvXrrmWSahTp06Bxlzo2bMnEyZM4Pnnn88xb/PmzbRs2ZIJEybkGLBXRESk3Nu+3dSkTR84LOvj7FlYuDCz7Y03Zh+QFEwN2jvvND1sS/AOGslOiVu5oN9//93ZIYiIiEhxcjjMCfuhQxAbC/7+JmkL7A53Y/i4YByO80/GLYY9E0ynyxNoUIi740XKGi8vLxo0aMC1116bY97mzZsZNWqUE6ISEREpRidOwB9/wK5d8OijmdOfeCJnMjarpCRI77iXfid1w4YmUXvnndC0acnFLHlS4lZERETkUhEdbcoiREWZE/OQkGw9JmYs8M+jA4UNm81i+nx/Jg05VmrhipSETz75BG9v7xzTt2zZQrNmzZwQkYiISBElJsLff5tEbfpj//7M+ffck5mEbdzY3GlVpQoEBmY+0p9nNW0afPJJZiJXnEaJWxEREZGKLjERjh2DiAjT47ZKFVOT7DzhR1zJ625zyzLzRco7nzwGTjlz5kzpBiIiIlIYlmXqy9auDW5uZtro0SbBer4mTeCqq0wJhPTE7RtvFPy1fH0vPl4pFjr7FhEREamoUlPh5EnTy/bsWQgIAE/PPJuH1UjNs2SZ7dx8ERERESkFsbHw55/w++/w22/m58mT8NdfcPnlps2VV8KiRSZJ2769eVxxhTnnkwpBiVsRERGRisay4MwZk7A9dQoqVTJlEfJxz8BoXv24cq7z0hxwVesEnnq/NuFnAghrAUOHmhK5IiIiIlJMfvzR1KPdto0ct0K5u5tet+mJ27vvhuHDNVhYBabErYiIiEhFEh9v6pcdPw52O1SrBi4uBVq0YVgKTesns2OPB3abBTbT0zbNAWCj/6jquNjBAmw/wuTJNqZM8WL06BLcHhEREZGKJDUVDhyAnTtNj9rffjMlD/r2NfM9PGDrVvN7nTqmN+1VV0GHDtCmTfa6s7mUvpKKRX9hERERkYogJYXdv0cx4xMH4Uf8CAvz557b4mhYJaXAq4iIdGHnPncA7rs9mjOxdsJqpFK7ejIjxwcDtnNJ3EyPPOJH794WjRoV47aIiIiIlGeWBSkppocswJ498OijsGsX7N1r5mXVokVm4vbKK+Hrr02yNjS0dOOWMkeJWxEREZHyzLLg1ClmTj3L8Am1sNnMJJsNJs+syvSXjzN0QEyBVvV/S3xxOGy0b53A+y+cyJj+1BtVsdvNuGbZ2bDZLGbMsPHKK8W3SSIiIiLlgsNhkrEbN5qfWR8PPQQvvWTaubvDt99mLufhAQ0awGWXmQRt9+6Z83x84OabS3c7pMxS4lZERESkvIqNhaNH2b0hhuET2uFwnF/fzGLYM8F0ujyBBnXy73n7xfdmBOE7b4jNNj38SN6njJYF4eGFDVxERESkHEq/Og7mBOjyy814ArnZtSvz95o1YepUaNTIPGrVMiWtRPKhxK2IiIhIeZOcDBERcOwYJCczY0WTPMakMD1ip8/3Z9KjJy+4yvDDrvz2txd2u8VtvbMnbsNqpOY55oXNBmFhRdoKERERkbLLsuDgQVi3LvPRpg1Mn27m16plSh54epoEbtOmmYnZRo2gXr3MddntMGqUUzZDyjclbkVERETKC4cDoqLg0CGIiwM/P6hcmfAIjxyDDqezrAv3mE335Q+mt23XKxMIDUrLNu+egdFM/qQy54Yly7p2LAvuuef86SIiIiLlkGXBO+/AmjUmUXv0aPb5MVnKT7m4mMHF6tbNrGUrUszUL1sKZOrUqbRr1w4PDw/69+/v7HBEREQuPdHRZvThnTvNaMTBweDtDZgesXmx2S48P11GmYS+OevhNgxLYfrLx7HbwcXFwm63cHExnUemTImhQYMibpOIiIiIs5w+Dd9/Dx9+mDnNZoNPPoH5803S1tUVrrgCHn4YvvwSVqzIvo7GjZW0lRKlHreXuJUrVzJ+/HhWrlx5wXbVq1dn3LhxLF++nMOHD5dOcCIiIgKJiaYkQkSE6XFbpYr5EpHFDV3ieOWjyrksbHrEDrsl+oIv8c9edzbv9MTNzWJAz7hc2wwdEEOnyxOY/pkb4WcCCGvhw913W/j5JQC+Rdw4ERERkVJgWbB3L6xdm/nYscPM8/SEu+/OTMCOGGF61l59NbRrl3GhXMQZlLitQBYvXsyjjz5K9+7d+fHHH4mJiWH06NG88MILF73uAQMGALBp0yYlbkVEREpDWhpERsKRI3D2LAQEmC8W57EseOXjQEypAtMTNi0NwIbdBtNfPp7vwGRfLDaJ1+s6nSUwwJFnuwZ1Upg04hiEJEM9HxwOOHGiyFsoUiYcO3aM6tWrF3o5K6/6JCIi4lyJiXDyJAQFZSZj//tfmDMnZ9tGjaBjR5OorVrVTBs5svRiFcmHErdFdfZs3vNcXLJ/sbpQW7sdvLxyb1upUqFC2rJlC3v27GHkyJG8+eabrF+/nu7du3PrrbfSokWLQq1LREREnMSy4MwZk7A9dcqcD4SE5Nl81td+fL/SB3c3B4veO8rqv7z5dKEfxyJdefqBUwwdkLP0wfkvl1Em4YbYC7YVqYgWLFigJKyISFkWH4/rP//A9u3QoUNmD9hFi+D//s/U/z95MvORnlfZvBlatTK/t2hhkrjt2plEbceOpkdttWpO2SSRglLitqh8fPKe16ePqZOSLigI4uNzb9ulC2QtUxAWZt5ogDxHGcnD5s2bGTx4MA8//DAAnTt3plGjRuzcuVOJWxERkfIgPt7UUzt+3FzcrVbNXBDOw6FjroyZaL5wTHgoit5d4undJR4fbwfj3qrK7gNu+b7khm0e7Dngjpengxu7514mQaSiioyMJCgoyNlhiIhIbjZsgI8+wjZ3LlXjzp2jZE3G7tgBc+fmvqyrqxkfIN3IkaZObS53L4mUZUrcViCbN2/mzTffzDYtIiKCauddQRo5ciRzz725paamkpiYSEBAQMb8xYsX06lTpxKPV0RERM5JSTE1B44eNbf3Va6c70AXlgXDngkmJs6Fq9okMHbY6Yx5V7dNAGDd3155LZ4hvbftjd3j8KmkXodSPiUlJfHggw+yfPlyTp48SY0aNXj88ce55557Lrjc0qVLueGGG0opShERyVdMjEnGfvQR/P03YIpBOQICsIWGYkvJUv6pRw/w8DAlDs5/+PmZgcbS+aoev5RPStwWVdwFeqSc3zPmQsXf7Pbsz8PDixROQkICu3fvJiTLrZQ//fQTLi4uXHXVVdnaTps2jWnTpgEFH5xMRERESoBlmXIIhw+bXiE+PhAcXKBFP/rSn2VrK+Hp4WDWpIhspx9XtkrExcXi0DE3Dh1zpVZoaq7rcDjgyx9UJkHKv9TUVEJDQ1m+fDn16tXjjz/+oHfv3tSsWZNevXrludyZM2eydWAQEREn+/VXMzgYmIvYAwfiGD6cE02bEhQcjC1rDuXKK81DpAKz599EclWpUt6P87veX6itl1febQth69at2Gw25syZQ1paGn///TcjRozglVdewcPD4yI3NrNnbmpqKg6Hg8TERJKTky96vSIiIpesuDjYvRv++QcSEkxppQuVYspi/yFXHn3V3FEz6ZGTNK6XffCxSt4WbZokAbDu77xvCfz1Ly+OHHcjwC+N6zvnUdZJpByoVKkSEyZMoH79+thsNq666iq6devGmjVr8lwmKSkJr/POxRcvXkzjxo0ZMWIEYWFhBAYG8vzzz5d0+CIil6boaJg2DT78MHPa9debnrRTpph6/3PnQteu2XvPilxC1OO2gtiyZQv9+vUjKiqKgIAAQkNDef755xkyZEixrP+ll17ihRdeyHju5eVFly5d1FNXRESksJKTTQ3bo0fN7wUoi5CVwwF3Px3C2Xg7na+I56H/nsm13dWXJbBhuydrN3pxe5/c7xT6YrHpbTugZxwe7iqTIJTsALyuruaLdyE7KBRFYmIi69evZ9CgQXm2+eWXX+jWrVu2aRrsV0SkhFkW/P67KYXw5Zfm4nVoKNxzD7i5mc+aZcucHWWxe27enwVuO+GOK0owEilv1OO2gti8eTMtW7Zk1qxZxMbGsmvXrgIlbbt27Vqg5Ov48eOxLCvbQ0lbERGRQnA4IDIStm2DfftMTbbg4EIlbQGmzglg1XpvKnk7mDnpeI6qS+mubpsIwLqNude5TUmB+T+dK5PQV2US5Bwfn7wfAwdmb5veSzy3R+/e2Zq6NmyIzde3wL3Ks0pJSSExMTHPh3XegL6WZTF8+HAaNmzIgAEDMqYvWbKErVu3Zjzft28fdevWzbZs1sF+PT09sw32KyIiF2BZcPo07NoF69bBN9+YpGy6WbPMZ0PjxnD11eZ5QgI0bw5PPglpac6KXKRMU4/bCmLz5s2MGjXK2WGIiIhIbmJiTB3bqCiTsA0JKdItf7v2u/HkG1UBmDw2knq1UvJs2/Ey82Vp004PzsbbqOSdPbm1bF0los64EFw1lW7tVSZByq6bb76Z77//Ps/5+/fvJywsDDBJ2xEjRvDvv/+yfPly7OeubCQmJrJv3z5Wr15Ny5YtATLmZVXQwX5FRAR46y2YPh1OnjSP1PNq6v/7LzRqZH7fuxeWLDG/e3nB7bfDfffBVVepDILIBShxW0Fs2bKFZs2aOTsMERERySoxESIi4Ngx05OkShVzu3gRpKXB0KdCSEi0c22HszxwZ/QF29cKTaVmSAqHI9xYv8WTblclZJufXibhtt6xOcZVlUtYCQ3Am7p7N66urtiK8OV88eLFBWpnWRajRo1i/fr1/Pzzz/j7+2fM8/T0ZMSIEfTo0QOAv//+mzZt2mRbvjCD/YqIXDJOnIDVq2HlSli1Cn76CapXN/NOnTJ3EmXl6wvVqkHVqtkTuf37Q7165m6Njh1BA0OKFIgStxXEmTNnnB2CiIiIpEtLMz1PDh82tT0DAnIOXlpIU2ZW5re/vfCtlMaMiXmXSMjq6raJfPWjG+v+9sqWuI1PsLFoubll/c4bVCZBsihM/dnCtk2vcVtCHnzwQdauXcuKFSuoXLlyjvk2m4169eqxd+9e/vjjD+6///5s87MO9tuqVSu2bNlSrIP9ioiUCydPws8/myTtypVmENWsVq+GO+4wvw8eDNdcY5K06cnavM53Lr/cPESkUJS4FRERESkulgVnzpiBx06dMrcCZum9V1Q79rjz7NtVAHjzqUhqV0/NZwmj42UJfPWjL2vPq3P7/cpKxMXbqVMjhavaJF50fCLOduDAAaZNm4aHhwd16tTJmD548GA++OCDjOf9+vXjm2++wcvLK0fv35Ie7FdEpMxJSICdO03CtVYtM+2nn0xCNquWLaFLF+jaFbIO6tioUWYpBBEpEUrcioiIiBSH+HhTEiEiwvQqrFo1563lRZCaCkOeCCEp2U6fLnHcc0tMgZe9uq3pZfvbJk8cjsy71+f9YMok3NEnVmXlpEKoU6dOjkHKctOzZ08mTJjA888/n2Ne+mC/EyZMYNasWSUQpYiIk6SkwI4dsH179se+fWbw1JdegmeeMW27dIHWrU2StkuXzB61IuIUStyKiIiIXIzUVFP/7cgRU9O2cmVwdy+21b/yUSB/bfMkwC+Nj188XqhEa+smSXh7OTgT48LOfe40a5BMdKyd71eaW9zv7FvwJLBIReDl5UWDBg249tprc8zTYL8iUu5ZlknQbt1qetB27Gim79oF59X1zhAYmL0Wbc2asGlTSUcqIgWkxK2IiIhIUViWKYdw5Igpj+DjA8HBxfoSm3e6M2GaKZHw7rgTVA9OK9Tybm5wZctEVq73Zu1GL5o1SGbRch+Sku00rZ9Eq8bJxRqvSHnwySef4O3tnWO6BvsVkXJt61YYORLWrDHPhw7NTNw2bGhq0DZqBM2bZ38EB5do/XERuThK3IqIiIgUVlycqWN74oQZcCkoiAKNFlYIycmmREJKio3+PeL4z41FG0Ts6ssSWLnem3V/e3LvbdF8sdiUSbjzBpVJkEuTj49PrtM12K+IlEuxsfDCC/DWW2ZwVE9PaNs2e+1Zd3c4flwJWpFySIlbERERkYJKTs4si5CcXOxlEbJ66f0qbN7pSZWAND54oXAlErK6uq0ZfGztRi8iT7mw/DfT0/DOvkVLBIuIiEgZ8e23ppftkSPm+cCB8OabmQONZaWkrUi5pMStiIiISH4cDoiKMl+MYmLA19ckbUvIX1s9mPhhIADvjz9OcNXClUjIqkMbM0DZ7nB3ps31Jy3NRrsWiTSok1IssYqIiIiTHD1qzk3q1YOpU6F3b2dHJCLFTIlbERERkQuJiYGICIiMBA+PEq8Fl5hkY8iTIaSl2bi9Twy39o67qPUFBjioXyuZvYfcefFcvdweV58tjlBFRESkNCUmwv790LSpeX7ffabm/tCh4OXl1NBEpGQUbzG2Ipg0aRJXXHEFvr6+BAUF0b9/f/79999sbSzLYvz48VSvXh0vLy+6du3K9u3bs7VJSkpi9OjRVK1alUqVKnHjjTdy+PDh0twUERERqUiSkkxZhH/+Mb1tq1SBgIASv9Xw+XeqsGOPB0FVUpn67ImLXt/MBX7sO+QGQFqaDbCY/Ekgs772u+h1i4iISClZsgRatDC9as+euwBrt8OIEUrailRgTk/crlq1ilGjRvH777+zbNkyUlNT6dWrF2fPZvYEmTx5MlOmTGHq1Kn8+eefhISE0LNnT2JjM2uzjRkzhoULFzJv3jzWrFlDXFwcffv2JS2t6LcWilQ0x44dw2azFfohInJJSUszA3js2GESt15eZiRm15K/Uem3vz15fYYpwfDRhONUDXRc1Pp2h7sxfFwwFlnfy204HDDsmWD2HHC7qPVL+WdZlrNDqBC0H0WkxBw+DLfcYhK2e/dCSgrs2ePsqESklDg9cbtkyRKGDh1K8+bNad26NTNnzuTgwYNs2LABMCdBb731Fs888wwDBgygRYsWfPrpp8THxzN37lwAoqOjmT59Om+88QY9evSgbdu2zJkzh61bt7J8+XJnbp5ImbJgwQIsyyr0Q0TkknHmDPz7r3mkpZketqXUiyU+wZRIcDhs3HVTDDf1uPhyBjMW+OfRQdiGzQbT5/tf9GtI+eTi4gJAcnKykyOpGOLj4wFwc9PFEBEpJikp8MYb0KQJLFgALi7wyCOwcye0bu3s6ESklJS5GrfR0dEABAaaATn2799PREQEvXr1ymjj4eFBly5dWLduHffffz8bNmwgJSUlW5vq1avTokUL1q1bx3XXXVe6GyF5CgsL46233qJ///6l8nqLFi1izJgxhIeHl8rrlWWRkZEEBQU5OwwRkbIpIQGOHTO1bMH0sLXbIe7i6ssWxtNTqrI73J3qQam8/czFl0gACD/iSl7X3yzLzJdLk6urK97e3kRGRuLm5obdXnL9OSzLIjU1FVdX1wp3J49lWcTHx3PixAkCAgIyEuIiIoWSmmrOQ2rVypzWti2kl4i8+mp4/31o1co58YmI05Sps3XLsnjkkUfo1KkTLVq0ACDi3Beo4ODgbG2Dg4M5cOBARht3d3cqnze6c3BwcMby50tKSiIpKSnjeUxMDAAOhwOHI/O2xPTf03sdZvQ+TE01PXFKkotLoW7L7NatGzfddBNjxozJNt1ut7Nx40batGlTvPGdJ8c+ukC70urFWdCYSsLUqVP59NNP2bp1K71792bhwoXFEk9SUhIPPvggP//8MydPnqRGjRo89thj3HPPPRdc7qeffuKGG24oln2R/jc8//+lODgcjox1S+60j/KnfZQ/7aNzUlNN/drDh03yNiDADEAGONLf60rhM2TVei/e/sycx3z88jH8/dJwFMPL1qmekmdJXpvNzC/Q9qW3sdnM75YF5z4DSvo4uuSP0RJis9kIDQ1l//79GefUJSX9GLHb7RUucZsuICCAkJAQZ4chIuXByZOweTNs2ZL52L4dgoLg4MHMdiEh5oLya6/BkCHmgrKIXHLKVOL2wQcfZMuWLaxZsybHvPNP8izLyvfE70JtJk2axAsvvJBjemRkJImJiRnPU1JSMpJTKSkpZn2pqWagkoSEgmxW0Xl5mdEiC5i8TT8pTk1NzTEvNTU11+nFxbKsjHrC+f1d0tLSSjSW818LKNbXW7VqFS+++GK+ZTiCg4N58sknWbFiBYcPHyYlJSXffVSQdScmJhIcHMyPP/5IvXr1WL9+Pf369SM0NJSePXvmudypU6fw8fEpln2RmpqKw+EgKiqq2G8JdDgcREdHY1lWifb+Kc+0j/KnfZS/S34fWZbpTXvqFMTGgqcnVKpkbktMSQFM4jY6MRELsJdgsulsvJ2hT4UBMKh/JJe1PcGJYuroe2PvFF6bHghYkK3OrYVlwU19jnEiLimPpQ3XnTvxfecdEm6+mcSePSE52eyzEydK5TjKOqaBFC93d3caNmxY4uUS0s8ZqlSpUiHfb9zc3NTTVkQMy4LTp03C9fhxUyv/9tsz5/frB4sX577smTPm3MTHxzyfPt3cAeTtXeJhi0jZVWYSt6NHj+bbb79l9erV1KxZM2N6+pXriIgIQkNDM6afOHEioxduSEgIycnJnD59Oluv2xMnTnD11Vfn+npPPfUUjzzySMbzmJgYatWqRbVq1fDzyxxlOTExkdjYWOx2e2aCKi3NfKnz9AR394vf+NwkJ5vXsNkKnLi12WzY7XZcc2nv6uqKq6srU6ZM4YMPPiAiIoKgoCDGjBnDgw8+mNFuypQpvP3225w+fZoqVarwzDPPMHz48DynA8TFxfHkk0/y3XffkZiYyPXXX88777yDv3/udfN27tzJxIkT2bNnDx06dGDGjBlUr1494/UvFF/dunUZMWIECxcuZPv27Vx22WXMnj2bWuduKTl8+DDDhg3j999/p2HDhgwYMCBj+3OzePFixo4dS7du3ViyZAkxMTE8+OCDuSb107m4uGCz2fJcZ7pbb70VgK1bt3L06NGM4+dCic6CrNvf35+XXnop43nHjh3p1q0bv/32G7179851maSkJCpVqpRtvUXZ9nSurq7Y7XaqVKmCp6dnvu0Lw+FwYLPZqFatWoX8clcctI/yp32Uv0t6H509a75QRUSYu1tq1Mi1F4vDMkN6VfPxKdHE7cjXgzl4xIPa1VN4b9wZ/NK/sBWDoGbw8UsR3DsuBJvNJGvTO81+/FIE7Zu6AXl8Lh05gu3tt7F9+y0A7lFR+PXvD4mJ4OsLQUGlchwV9+eMZGe320t8HzscDtzc3PD09Lz03m9EpOJISjI9Y/ftM4OFpZswAb77LjNZe+4CcIa+fc3FYTDnHAD165s6ta1aZf4MC8t+PlKnTolujoiUD05P3FqWxejRo1m4cCErV66kbt262ebXrVuXkJAQli1bRtu2bQEziMKqVat49dVXAbj88stxc3Nj2bJl3HbbbQAcO3aMbdu2MXny5Fxf18PDA49zt0JmZbfbs51Qpv+e3kPSZrORcc+hh0fJJW7Te/Zmfb0CLWbLtTdn+vSwsDBWrFhBzZo1WblyJX369OGyyy6jY8eO7Nq1i2effZaNGzfSpEkTjh8/zvHjx9m9e3eu09NfZ9iwYbi6urJhwwa8vLy49957GT16NLNnz841xunTp/Pjjz9Su3ZtRowYweDBg/nll18ALhhfutmzZ/Ptt99SvXp1BgwYwHPPPcesWbMA+M9//kPdunWJiIjg4MGDGYnMvHq4bt26lT179jBy5Ejeeust1q9fT/fu3bntttsyynXkti8vtM682hdk2cKuG8zFhfXr1zNo0KA8l1u5ciXdu3fPNr8o2541zvQLBSXxBawk111RaB/lT/sof5fcPkpJMT1fjhwxX74qV873c9xms2E/9ygJy9Z68+G8AABmTowgwPf8nrEX756BsXRul8j0+f6EH3ElrEYqw26JpkGdlNxfKzoaPvwQZs82F5IB+vbFNmYMNrs989wkyzlSSR5Hl8zxKSIiZcfJk7BpkylpsGmTeezcab6jg7nzJP1C64ED8Ndf2ZevXBmCg025g/j4zMTthAnw+uuZy4qI5MPpZ8KjRo1izpw5zJ07F19fXyIiIoiIiCDhXBkCm83GmDFjmDhxIgsXLmTbtm0MHToUb29vBg0aBJgeiMOGDePRRx/l559/5u+//2bw4MG0bNmSHj16OHPzSt1TTz1FQEBAtkdWAwcOpFatWthsNrp168Z1113HypUrAdPb07Istm/fTkJCAsHBwbRq1SrP6WBKSyxYsIB3332XgIAAKlWqxIQJE/jyyy8zygKcb8SIETRp0gRvb28mT57MypUrOXz4cL7xpXvwwQepV68enp6e/Oc//2HDhg0AHDp0iF9//ZXXXnsNb29vmjRpwgMPPHDB/bV582YGDx7Mww8/jKenJ507d6ZRo0bs3LmzkHu+6EaOHJnxt+rbty9r1qzJ9vfLrXRIOsuyGD58eLbexQBLlixh69atGc/37duX46JIWdh2EZFSYVmmju2OHbB3r7mTJTi45C6+FlB0rJ1hz5i7h0b95wzdO5RcCaYGdVKY9OhJvpgSwaRHT55L2ubi+++hZ09ze2ZyMlx5Jcyfb0a1zjpgily0SZMmccUVV+Dr60tQUBD9+/fn33//zdbGsizGjx9P9erV8fLyomvXrmxPH6hGREQunsMBu3fD//1f9p6yY8eaz8OxY2HOHNi2zSRtAwOhUydz9066ESNMj9v1602N2sREU4rpn3/gl19MuYN0QUFK2opIoTg9cfv+++8THR1N165dCQ0NzXh8+eWXGW0ef/xxxowZw8iRI2nXrh1Hjhxh6dKl+Pr6ZrR588036d+/P7fddhsdO3bE29ub77777pKrNzVp0iTOnDmT7ZHV559/zmWXXUblypUJCAjghx9+4OTJkwDUr1+fTz/9lKlTpxIcHEyvXr3YtGlTntMBwsPDcTgc1K9fn2rVqlG5cmWuuOIK7HZ7ngPD1clyy0dwcDAeHh4cOXIk3/jSZR34oVKlShm1744ePYqnpydBQUG5vlZuNm/ezB133JFtWkREBNWyfrhyccnV/EybNi3jb7V48WI6deqU7e/XqVOnXJezLIsRI0bw77//smjRooweSYmJiezbt48vvvgio21uvZUKuu0iIuVabCzs2mWStgkJZeoL0yOTqnHomBv1ayfz6thIZ4djBAaaHrcNG8JHH8Fnn0HLls6OqkJatWoVo0aN4vfff2fZsmWkpqbSq1cvzmZJBkyePJkpU6YwdepU/vzzT0JCQujZs6fq/oqIFERiYmYPWYDffoPx4+GBB+Cmm+CKK8DPDxo1gttug6wXz9q2hQYNYOBAePFFk5g9dMj0xP31V3MBOF27dqYcwhVXmIucudzZKyJSVGWiVEJ+bDYb48ePZ/z48Xm28fT05N133+Xdd98txugqloMHDzJkyBCWLFlC165dcXV1pX///tn+Brfddhu33XYbCQkJPPfcc9x1111s3bo1z+m1atXCbrdz5MgR3N3dcXV1zfc2/6wjF584cYKkpCRq1KhRoPgupHr16iQmJnLixImM5O3BrKNynichIYHdu3dnSwT/9NNPuLi4cNVVV2VrO23aNKZNmwaYsgPjx4/P0RO4NFmWxahRo1i/fj0///xztnrCnp6ejBgxIqO3+d9//02bNm2yLV+YbRcRKZeSk02duaNHze+BgVDMgylejO9XVmLGAn9sNouZk45Tybtgn3XF7o8/TOmI9Ls2OnQwZRI6dSpwjX0pmiVLlmR7PnPmTIKCgtiwYQOdO3fGsizeeustnnnmmYy7aj799FOC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Tmwbli2D+++H5GSzLjERAgPdd59NiQJbEbfZu3cvN998Mx9++CG7d+8mISGBYcOGMXHiRLp16+bp4YmItCi3v7LmgDU24Y5CslxbqTjfwp0XD2jUcYmIeIt6B7czZszgjDPO4O23367UHuGOO+7g3HPPZcaMGQpuRUQOh8sFe/aYtghZWRAebkK7RrJ2nQlP+7kruF27FubNgx9/NJejouD66+GCC0ww3ZJVDGzDw01gGxmpwFakAY0fP57333+fyy+/nG7durFz507efvttnnnmGebMmcOUKVM8PUQREREREeAQgttff/2VWbNmVelpa1kW1157LaNGjWqwwYmItDg5OaYtQlqa6WMbH++WPrY1KSqCnzf4A9C/V2HD34HLBbffDn/+CUFBcMUVMG4chIY2/H01JU6n6V1cVKTAVsTNli9fzrx587j++uvL1t17773873//49prryUyMpIrrrjCgyOs6vHHH2fevHns3LmTnj178uCDD6o9mYiIiEgLUO/gNjQ0lJSUlGq3bd++ndCW/uZbRORQFBebtggpKSa8K22L0Mh+2xRAUbGD1mFOOrdvoMnIdu82wWxAADgcMHUqfPop3HCD6dfbkrlcpsK2sNC0ROjcWYGtiJsFBATQs2fPSuscDgeXX345KSkp3HvvvV4V3L766qtMmjSJxx9/nOOOO46nnnqKESNGsH79ejp06ODp4YmIiIiIGznqe4VzzjmHW2+9lY8//rjS+mXLljF9+nRGjhzZYIMTEWn2bNsEm+vXw99/myrbuDiPtQyo2N/2sAt98/Lgscfg1FPhxRfL1w8dCnff3bJDW5fLTMaWlmb6+h55JPToATExCm1F3Oyss87ihRdeqHbbsccey9atWxt5RAd3//33M27cOMaPH8+RRx7Jgw8+SPv27XniiSc8PTQRERERcbN6V9zOmzePX3/9lREjRhAWFkZcXBy7du1i3759DBgwgHnz5rljnCIizU9ubnlbBF9fE2Q2YluE6nz/WwBwmG0SnE5480146CFITzfrvv7atEXw8OPzuIoVtuHhpsI2IsL8/EWkUURGRvLUU08RGBjIjBkzaNOmTdm2jz/+mH/84x+eG9wBioqKWLt2Lbfeemul9cOGDWPVqlVV9i8sLKSwsPz5Ozs7GwCXy4XL5XLvYMtUN4GmXWEp13hjkprVbcLTyj+ruk+S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RERERES8zCG/I83MzOS3335j27ZtjBgxgoiICAoKCvD398fhqPecZyIi3ik72wS2u3ebsDYuzisqUf/eGsCDH0azZYcfiQklXHl+Fl0Ti2u/4ubNkJBgJtjy9SXliul89uQfTEiZTnxUAFempNTtdpoLBbYiIl7hzosHeHoIIiLShOn/iDRX9X5n6nQ6ue2223j44YfJy8vDsizWrFlDREQEo0aNYtCgQdxxxx3uGKuISOMpKjItEXbuNJWpUVFeE+YtWhLG1bfFY1mm24FlwdxnI1gwexdjR2VXf6WMDHj0UXjtNbjpJrjiChYtCWP8HVdg22Bj8ddWm+4jEg9+O82FAlsRERERERHxcvUujb3jjjt49NFHmTdvHuvXr680C+8555zD0qVLG3SAIiKNyuWC9HRYtw62bIGgINPL1ksCvU3Jflx9Wzwul4XTaVX4CuOmx/HnlgPaHOTlwWOPwWmnwcsvmxB6wwY2JfsxfkYcLpeFbZsKYts+yO00Fy4X7N0LaWmm6rh7d+jVC2JjveZnLCIiIiIiIgKHENwuXryYe+65h2uvvZauXbtW2talSxf++uuvBhuciEijysmBP/6ADRuguNi0RQgK8vSoKlm4JLyGTg0WlgUL3gg3F0tK4PXXYdgwePhhE+D26gXPPw/33lv322kuFNiKiIiIiIhIE1Pvd6u7d+/myCOPrHaby+WiuLgF9UYUkeahuBh27YKUFNMiITLSayfoSk7xpcKJDpXYttkOwD33wIsvmu/btYPJk2HECNjfg7zOt9PUuVywb59aIohIJT4+PixatIhOnTpV+l5ERERExJvU+51rt27dWL58OaecckqVbZ9//jm9evVqkIGJiLidbcOePWbysawsaNUKIiI8PaqDSkwogRoCVwcusx3g4ovhww/hmmtgzBhTZXrA7dQ0x5plUX47TZXLBbm5poo6PFyBrYhUcfnll1f7vYiIiIiIt6j3O9gbb7yRq666Cj8/P0aPHg3A9u3bWb16NQ8//DCLFy9u6DGKiDS83FzYscNU2vr6mrYINSWZXqRVsBOXXXmciWxmNtPJdoVx6uhbzMpu3eCLLyAgoNrbufL8LOY+U11IbWPbMG50VsMOvLFUnHTMzw86d/aqieVERETEvTSzfPOnn7GItCT17nE7duxY7r33Xh566CH69u0LwLnnnsstt9zC3Xff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5kjfu7u7Izo6GkOHDkVFRQVMTU2xe/dunD59GhcvXoSrqysA4KOPPsKkSZPw/vvvq9yTgYiIiIgangZTuAWAGTNmYMaMGfoOg4iIiIhIa9euXcO3334LPz8/mJqaAgDS09Ph5eUlFW0BoH///igvL8exY8fQt29fleOUl5ejvLxcelxSUgLg75vIVVdXP+ZXUbvq6moIIfQaAxke5gWpw7wgdZgXpM6TnBcPEnODKtwSERERET0poqKisGbNGty+fRs9evTAjh07pG2FhYUqN9m1t7eHmZmZyg15ayxduhSLFi1Saf/rr79QVlZWv8E/gOrqaty4cQNCCN5sjiTMC1KHeUHqMC9InSc5L0pLS7Xuy8ItEREREVE9iI2NVVs4vVdGRga6dOkCAIiMjMTUqVORl5eHRYsWYcKECdixYwcUCgUASP/eSwihth0A5s+fj7lz50qPS0pK0Lx5czg6Our10grV1dVQKBRwdHR84n6woseHeUHqMC9IHeYFqfMk54WFhYXWfVm4JSIiIiKqB2FhYRg7dmydfVq2bCl9r1QqoVQq0aZNG7Rr1w7NmzfH4cOH4evrC2dnZ/z222+yfYuLi1FRUaGyEreGubk5zM3NVdpNTEz0/gONQqEwiDjIsDAvSB3mBanDvCB1ntS8eJB4WbglIiIiIqoHNYXYhyGEAADpGrW+vr54//33UVBQABcXFwDA7t27YW5uDh8fn/oJmIiIiIgMGgu3REREREQ6dOTIERw5cgS9evWCvb09cnJy8O6778LDwwO+vr4AgKCgIDz33HMYP348li9fjmvXrmHevHkIDQ3V62UPiIiIiEh3nqy1xERERERETzhLS0skJiYiMDAQnp6emDJlCry8vJCamipd6uCpp55CUlISLCws0LNnT4wePRpDhw7FihUr9Bw9EREREekKV9z+T82fp5WUlKhsq66uRmlpKSwsLJ6462boCsdIM46RdjhOmnGMNOMYacYx0oxjpJkuxqhmblYzV2sIvL29sXfvXo39WrRogR07djz089Q1v9UlvpdIHeYFqcO8IHWYF6TOk5wXDzK/ZeH2f0pLSwEAzZs313MkRERERHS/0tJS2NnZ6TuMJwrnt0RERESGS5v5rUI0pOULj6C6uhqXLl2CjY0NFAqFbFtJSQmaN2+Oixcv8ppiteAYacYx0g7HSTOOkWYcI804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",
      "text/plain": [
       "<Figure size 1400x500 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "    p     #E    p+1   trace   2sqrt(p)   Hasse OK?\n",
      "------------------------------------------------\n",
      "    7      5      8       3       5.29         YES\n",
      "   11     14     12      -2       6.63         YES\n",
      "   13     18     14      -4       7.21         YES\n",
      "   17     18     18       0       8.25         YES\n",
      "   19     21     20      -1       8.72         YES\n",
      "   23     28     24      -4       9.59         YES\n",
      "   29     36     30      -6      10.77         YES\n",
      "   37     48     38     -10      12.17         YES\n",
      "   41     35     42       7      12.81         YES\n",
      "   43     34     44      10      13.11         YES\n",
      "   47     60     48     -12      13.71         YES\n",
      "   53     58     54      -4      14.56         YES\n",
      "   59     63     60      -3      15.36         YES\n",
      "   61     50     62      12      15.62         YES\n",
      "   67     56     68      12      16.37         YES\n",
      "   71     59     72      13      16.85         YES\n",
      "   73     72     74       2      17.09         YES\n",
      "   79     86     80      -6      17.78         YES\n",
      "   83     90     84      -6      18.22         YES\n",
      "   89    100     90     -10      18.87         YES\n",
      "   97     97     98       1      19.70         YES\n",
      "  101    105    102      -3      20.10         YES\n",
      "  103     87    104      17      20.30         YES\n",
      "  107    105    108       3      20.69         YES\n",
      "  109    123    110     -13      20.88         YES\n",
      "  113    125    114     -11      21.26         YES\n",
      "  127    126    128       2      22.54         YES\n",
      "  131    128    132       4      22.89         YES\n",
      "  137    126    138      12      23.41         YES\n",
      "  139    126    140      14      23.58         YES\n",
      "  149    136    150      14      24.41         YES\n",
      "  151    154    152      -2      24.58         YES\n",
      "  157    171    158     -13      25.06         YES\n",
      "  163    189    164     -25      25.53         YES\n",
      "  167    144    168      24      25.85         YES\n",
      "  173    172    174       2      26.31         YES\n",
      "  179    180    180       0      26.76         YES\n",
      "  181    190    182      -8      26.91         YES\n",
      "  191    217    192     -25      27.64         YES\n",
      "  193    201    194      -7      27.78         YES\n",
      "  197    222    198     -24      28.07         YES\n",
      "  199    218    200     -18      28.21         YES\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import math\n",
    "\n",
    "# Count points on y^2 = x^3 + x + 1 for various primes\n",
    "primes = [7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67,\n",
    "          71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137,\n",
    "          139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199]\n",
    "\n",
    "a_coeff, b_coeff = 1, 1\n",
    "valid_primes = []\n",
    "counts = []\n",
    "traces = []\n",
    "\n",
    "for p in primes:\n",
    "    try:\n",
    "        E_tmp = EllipticCurve(a_coeff, b_coeff, p)\n",
    "        n = E_tmp.order()\n",
    "        valid_primes.append(p)\n",
    "        counts.append(n)\n",
    "        traces.append(p + 1 - n)\n",
    "    except ValueError:\n",
    "        pass  # singular curve for this prime\n",
    "\n",
    "ps = np.array(valid_primes)\n",
    "cs = np.array(counts)\n",
    "ts = np.array(traces)\n",
    "\n",
    "fig, axes = plt.subplots(1, 2, figsize=(14, 5))\n",
    "\n",
    "# Left: point count vs p+1\n",
    "ax = axes[0]\n",
    "ax.plot(ps, cs, \"bo-\", markersize=5, label=r\"$|E(\\mathbb{F}_p)|$\")\n",
    "ax.plot(ps, ps + 1, \"r--\", linewidth=1.5, label=r\"$p + 1$\")\n",
    "ax.fill_between(ps, ps + 1 - 2*np.sqrt(ps), ps + 1 + 2*np.sqrt(ps),\n",
    "                alpha=0.15, color=\"red\", label=r\"Hasse band $p+1 \\pm 2\\sqrt{p}$\")\n",
    "ax.set_xlabel(\"Prime $p$\", fontsize=11)\n",
    "ax.set_ylabel(\"Number of points\", fontsize=11)\n",
    "ax.set_title(r\"Point Count $|E(\\mathbb{F}_p)|$ vs Hasse Bound\", fontsize=13)\n",
    "ax.legend(fontsize=9)\n",
    "ax.grid(True, alpha=0.3)\n",
    "\n",
    "# Right: trace of Frobenius\n",
    "ax = axes[1]\n",
    "ax.bar(range(len(ts)), ts, color=\"steelblue\", alpha=0.7)\n",
    "ax.axhline(0, color=\"black\", linewidth=0.5)\n",
    "hasse_bounds = 2 * np.sqrt(ps)\n",
    "ax.plot(range(len(ts)), hasse_bounds, \"r--\", label=r\"$+2\\sqrt{p}$\")\n",
    "ax.plot(range(len(ts)), -hasse_bounds, \"r--\", label=r\"$-2\\sqrt{p}$\")\n",
    "ax.set_xlabel(\"Index (sorted by prime)\", fontsize=11)\n",
    "ax.set_ylabel(r\"Trace $t = p + 1 - |E|$\", fontsize=11)\n",
    "ax.set_title(\"Trace of Frobenius\", fontsize=13)\n",
    "ax.legend(fontsize=9)\n",
    "ax.grid(True, alpha=0.3)\n",
    "\n",
    "plt.tight_layout()\n",
    "plt.savefig(\"fig_ch31_hasse_bound.png\", dpi=150, bbox_inches=\"tight\")\n",
    "plt.show()\n",
    "\n",
    "# Print table\n",
    "print(f\"{'p':>5s}  {'#E':>5s}  {'p+1':>5s}  {'trace':>6s}  {'2sqrt(p)':>9s}  {'Hasse OK?':>10s}\")\n",
    "print(\"-\" * 48)\n",
    "for p_val, c_val, t_val in zip(ps, cs, ts):\n",
    "    bound = 2 * math.sqrt(p_val)\n",
    "    ok = abs(t_val) <= bound\n",
    "    print(f\"{int(p_val):5d}  {int(c_val):5d}  {int(p_val+1):5d}  {int(t_val):6d}  {float(bound):9.2f}  {'YES' if ok else 'NO':>10s}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cell-26",
   "metadata": {},
   "source": [
    "## 31.15 Group Structure and Point Orders\n",
    "\n",
    "The group $E(\\mathbb{F}_p)$ is always isomorphic to $\\mathbb{Z}/n_1\\mathbb{Z} \\times \\mathbb{Z}/n_2\\mathbb{Z}$ for some $n_1, n_2$ with $n_2 \\mid n_1$. In many cases (especially for cryptographic curves), $n_2 = 1$, meaning the group is **cyclic**. A point $G$ whose order equals $\\#E(\\mathbb{F}_p)$ is called a **generator** of the group.\n",
    "\n",
    "Let us examine the order distribution of points on our curve."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "cell-27",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-03-04T22:42:30.131617Z",
     "iopub.status.busy": "2026-03-04T22:42:30.131503Z",
     "iopub.status.idle": "2026-03-04T22:42:30.276416Z",
     "shell.execute_reply": "2026-03-04T22:42:30.276054Z"
    },
    "tags": [
     "hide-input"
    ]
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Curve: y^2 = x^3 + 2x + 3 (mod 97)\n",
      "#E(F_97) = 100\n",
      "\n",
      "Order distribution:\n",
      "  Order    1:   1 points\n",
      "  Order    2:   3 points\n",
      "  Order    5:   4 points\n",
      "  Order   10:  12 points\n",
      "  Order   25:  20 points\n",
      "  Order   50:  60 points\n",
      "\n",
      "Number of generators (order = 100): 0\n",
      "\n",
      "Factorization of #E = 100: [2, 2, 5, 5]\n"
     ]
    },
    {
     "data": {
      "image/png": "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unTpkn766SeHbzLXuHFjBQQE6LvvvsuzHF9fX1ksFp0+fTrfvQiGYdge17YdOnQo33PDcs8VCg8Pz7eWzZs3q2LFirZDKgE4h0OhgGJux44d+uCDDyT9ccjAgQMHtGLFCv38889q3ry5li5dWuAhERkZGQoLC1P37t3VqFEjhYSE6PDhw5ozZ478/PzsNlbq1q0rPz8/vf322ypTpowCAgIUERFR4CUmHVGxYkVFRUXp6aeflmEYmj9/vo4cOaJ58+apTJkytn4dO3ZU7dq19be//U2nT59WRESENmzYYNuIuJazdY4dO1YfffSRRo0apR9++EHNmjWzXcazUqVKevnllwv9+grijjHdXUdhPj9lypTRp59+qi5duujBBx/UI488onbt2qlkyZLasmWLPvjgA/n5+emTTz5RaGiow7W8+OKL+s9//qPhw4drx44datiwobZu3aply5apevXqdnsynnvuOSUlJWn8+PFKTk5Whw4dFBAQoCNHjujrr79W6dKlHbrQgDPftfzcynW1Y8cOZWdny2Kx2H5brtelSxfbd69EiRLq2bOnli9frqysLNu9LNatW6f7779fu3fvVoMGDfJdTq1atRQZGamXXnpJCQkJSklJ0euvvy5Jec4ZuXjxohYvXqz3338/32VlZGRo/fr16t+/P+dYAIV1y69DBeC2kHv5ztyHl5eXERAQYNSqVct4/PHHjY8//ti4evVqvvPkXvIzKyvLGD9+vNG8eXOjfPnyhre3t1GlShWjX79+xt69e/OM+emnnxoNGjQwvL29DUlG//79DcP4v8tbrlmzpsA687tMaVJSkvG3v/3NqFy5suHt7W3Uq1fP+Pe//53v6923b5/RuXNnw8fHxwgMDDQee+wx49ixY3kuN3ujOgu65OmpU6eMESNGGJUqVTJKlSplhIaGGgMHDjR+++03u343ep1t2rSxu0zpzTg6ZmEvN3ujyxAXpo4brUdH34+C1svNnDt3zpg8ebLRsGFDo0yZMkbp0qWNWrVqGc8//7xx/PjxPP1vVFeuY8eOGX369DECAwONMmXKGO3atTO2bduWb91XrlwxZs2aZTRt2tTw9fU1fH19jRo1ahh9+/Y1vvzyS4fGdfa7lp9b9TlNTEws8DKzuY+TJ0/azbNlyxZDkvHRRx/Z2l588UWjSZMmRt26dY3k5OQCx9u3b58R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",
      "text/plain": [
       "<Figure size 800x400 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from collections import Counter\n",
    "\n",
    "E = EllipticCurve(a=2, b=3, p=97)\n",
    "pts = E.points()\n",
    "n_E = len(pts)\n",
    "\n",
    "print(f\"Curve: y^2 = x^3 + {E.a}x + {E.b} (mod {E.p})\")\n",
    "print(f\"#E(F_{E.p}) = {n_E}\")\n",
    "\n",
    "# Compute order of each point\n",
    "orders = {}\n",
    "generators = []\n",
    "for P in pts:\n",
    "    if P is None:\n",
    "        orders[str(P)] = 1\n",
    "        continue\n",
    "    for k in range(1, n_E + 1):\n",
    "        if E.scalar_mult(k, P) is None:\n",
    "            orders[str(P)] = k\n",
    "            if k == n_E:\n",
    "                generators.append(P)\n",
    "            break\n",
    "\n",
    "# Distribution of orders\n",
    "order_counts = Counter(orders.values())\n",
    "print(f\"\\nOrder distribution:\")\n",
    "for order in sorted(order_counts.keys()):\n",
    "    print(f\"  Order {int(order):4d}: {int(order_counts[order]):3d} points\")\n",
    "\n",
    "print(f\"\\nNumber of generators (order = {n_E}): {len(generators)}\")\n",
    "if generators:\n",
    "    print(f\"Sample generators: {generators[:5]}\")\n",
    "\n",
    "# Factor the group order\n",
    "def factorize(n):\n",
    "    factors = []\n",
    "    d = 2\n",
    "    while d * d <= n:\n",
    "        while n % d == 0:\n",
    "            factors.append(d)\n",
    "            n //= d\n",
    "        d += 1\n",
    "    if n > 1:\n",
    "        factors.append(n)\n",
    "    return factors\n",
    "\n",
    "print(f\"\\nFactorization of #E = {n_E}: {factorize(n_E)}\")\n",
    "\n",
    "# Plot order distribution\n",
    "fig, ax = plt.subplots(figsize=(8, 4))\n",
    "order_vals = sorted(order_counts.keys())\n",
    "order_freqs = [order_counts[o] for o in order_vals]\n",
    "ax.bar([str(o) for o in order_vals], order_freqs, color=\"steelblue\", alpha=0.8)\n",
    "ax.set_xlabel(\"Point Order\", fontsize=11)\n",
    "ax.set_ylabel(\"Number of Points\", fontsize=11)\n",
    "ax.set_title(f\"Distribution of Point Orders on $E(\\\\mathbb{{F}}_{{{E.p}}})$\", fontsize=13)\n",
    "ax.grid(True, alpha=0.3, axis=\"y\")\n",
    "\n",
    "plt.tight_layout()\n",
    "plt.savefig(\"fig_ch31_order_distribution.png\", dpi=150, bbox_inches=\"tight\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cell-28",
   "metadata": {},
   "source": [
    "## 31.16 Singular Curves: A Cautionary Note\n",
    "\n",
    "When the discriminant $\\Delta = -16(4a^3 + 27b^2)$ vanishes, the curve is **singular** -- it has a cusp or a node. Singular curves do *not* form a group in the usual sense, and their \"discrete logarithm problem\" can be solved efficiently. This is why the discriminant check is critical."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "cell-29",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-03-04T22:42:30.278248Z",
     "iopub.status.busy": "2026-03-04T22:42:30.278130Z",
     "iopub.status.idle": "2026-03-04T22:42:30.617270Z",
     "shell.execute_reply": "2026-03-04T22:42:30.616769Z"
    },
    "tags": [
     "hide-input"
    ]
   },
   "outputs": [
    {
     "data": {
      "image/png": "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e/WyFoaIiIiITz7/HP75x5QbNYLTTgvaoZUMiUSCn36CxYtN+eyz4aab7MYjIiIiklvTpnnL7doF9dBKhkQiQeZeoZ49NZ22iIiIhIf//jNTagOULw+NGwf18EqGRMLdf//B66+bcokSmk5bREREwsfLL5tJoADatoWCBYN6eCVDIuFu8mRISzPljh2hSBG78YiIiIjkhuPA9One7Q4dgh6CkiGRcJaaCpMmmXJsLHTvbjceERERkdz6+mv46y9Tvu46OP30oIegZEgknL35phkmB9C0KVStajceERERkdzKPHFCx45WQlAyJBKuHAdGj/ZuazptERERCRe7dsFbb5ly6dLmoq4FSoZEwtV338HKlaZcpw7Ur283HhEREZHceuUV7z3PrVtDfLyVMJQMiYQrTactIiIi4chxsg6RszBxgoeSIZFw9Pff8PbbplyhAtx9t914RERERHJryRL47TdTvuoqOOcca6EoGRIJRxMmgNttyl26WOtaFhEREfHZ1KnecqdO9uJAyZBI+Dl40Nu1HBcHnTvbjUdEREQkt/buNbPhglks/q67bEajZEgk7Myebb5IAFq2hHLlrIYjIiIikmuvvQaHD5vy/fdDoUJWw1EyJBJO3G4YO9a73bOnvVhEREREfOE4WYfIWVpbKDMlQyLh5JNP4PffTfnaa+Hii62GIyIiIpJry5fDzz+b8uWXw4UX2o0HJUMi4WXUKG+5d297cYiIiIj4KvN02iHQKwRKhkTCx6pV8MUXpnzGGdC4sdVwRERERHJt/354/XVTLloUWrSwG88xSoZEwsXxvUIx+vMVERGRMDF3Lhw4YMotW5qEKATobEokHGzZYr5EAEqXhtat7cYjIiIi4osQHCIHSoZEwsO4cXD0qCl36QKFC9uNR0RERCS3fv4Zli0z5dq1oU4du/FkomRIJNTt3w9TpphyXBx062Y3HhERERFfHN8r5HLZi+U4SoZEQt3MmZCcbMr33w8VKtiNR0RERCS3Dh6EOXNMuXBhc79QCFEyJBLKjh6F0aO92336WAtFRERExGdvvOG9qNuiBRQvbjee4ygZEgllCxbApk2mfMstcN55VsMRERER8cnkyd5yly724jgBJUMiocpxsk6n/fDD9mIRERER8dWKFd6JEy65BOrWtRtPDpQMiYSq77+HH34w5QsvhOuvtxuPiIiIiC8y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ppyUBHPm2I1HRERExBcdOngv7E6fDkeO2I0nB0qGRELZww97yy+8AG63vVhEREREfFGxItxxhylv3w7vvWc1nJwoGRIJZXXrwjXXmPLvv8PHH9uNR0RERMQXmSdSmDTJXhwnoGRIJNRl7h0aNcpeHCIiIiK+uu46qFXLlD//HNavtxvPcZQMiYS6226DM8805S+/hJ9+shuPiIiISG7FxJh7hzxmzLAXSw6UDImEupgY6N3bu63eIREREQknbdpAgQKmPHNmSE2koGRIJBw88ACULm3Kb7wBW7bYjUdEREQkt8qXhyZNTPm//+CDD+zGk4mSIZFwULgwdO1qykePwtixduMRERER8UWnTt7ytGn24jiOkiGRcNGtG8THm/LUqbB/v914RERERHLrxhuhWjVT/uQT2LzZbjzHKBkSCRfly8P995tycnLI3YAoIiIickIxMdC+vSk7TsicxygZEgknffp4y2PHQnq6vVhEREREfNG2rUmKwEykEALnMUqGRMLJuefCzTeb8saN8P77duMRERERya3KleHWW015yxYzXM4yJUMi4aZnT295zBh7cYiIiIj4qmNHbzkEJlJQMiQSbm6+Gc46y5S/+gp+/tlqOCIiIiK51qgRVKpkyh98AFu3Wg1HyZBIuImJgYce8m6rd0hERETCRYEC3okU0tNh1iyr4SgZEglHDzwAJUqY8muvwY4dVsMRERERybX27cHlMuUZM8DtthaKkiGRcFS0KHToYMqpqTBlit14RERERHKrWjW46SZT3rgRPv/cWihKhkTCVffu3ukpJ06EtDS78YiIiIjkVohMpKBkSCRcVasGTZua8vbt8OabduMRERERya0mTcyC8gDvvGNtyL+SIZFwdvw0245jLxYRERGR3CpYENq0MeUjR+Dll62EoWRIJJxddRXUrm3Ky5fDkiV24xERERHJLc/9zwDTp1u5qKtkSCScuVzQq5d3e/RoW5GIiIiI+KZWLWjY0JT//BMWLw56CEqGRMJdixbeMbdvvw2bN9uNR0RERCS3OnXylqdODfrhlQyJhLv4eOjc2ZTT02HCBLvxiIiIiORW06ZQurQpz58Pu3cH9fBKhkQiQefOEBdnytOmwcGDduMRERERyY34eLOYPJi1E+fMCerhlQyJRIIKFeCee0x5z56gf5GIiIiI5FnmiRRmzAjqRApKhkQihabZFhERkXB07rlwxRWm/MsvsHJl0A6tZEgkUlxyCVx9tSmvXQuLFtmNR0RERCS32rf3lmfMCNphlQyJRJLMvUPjx9uLQ0RERMQXd98NhQub8muvweHDQTmskiGRSHL77VC5sil/8AFs3Gg3HhEREZHcSEw0CRFAcrJZLiQIlAyJRJICBbzTbDsOTJpkNx4RERGR3GrXzlueOTMoh1QyJBJpOnb0TrM9fTocOmQ3HhEREZHcuOoqOOMMU/7iC9iwIeCHVDIkEmnKlYMWLUx5zx6YO9duPCIiIiK54XJl7R2aNSvgh1QyJBKJunf3lseN0zTbIiIiEh5at4bYWFN+6SVITw/o4ZQMiUSiyy6DSy815VWrYMkSq+GIiIiI5ErFitCokSlv2RLwpUKUDIlEqsy9Q5pmW0RERMJF5jWHAjyRgpIhkUh1991Qpowpz5sH27bZjUdEREQkN2691dwDDfDOO7BzZ8AOFZRkKDU1lYsvvhiXy8WqVauCcUgRSUgwM8sBHD0K06bZjUdEQp7aaxEJCQULwgMPmPKRI/DqqwE7VFCSob59+1KpUqVgHEpEMuvcGWKO/ZlPnmy+UERETkDttYiEjMyzys2YEbDJoAoE5Fkz+fjjj1m4cCHz58/n448/PuljU1NTSU1NzdhOTk4GYO/evbjd7oDF6Ha72bdvH3FxccTERMbIwUirU6TVB4JUp8REXI0a4frwQ9i2Dffs2XDnnQE51N69ewFwNHOdSFjypb0Gtdn+Emn1gcirU6TVB8KkThUr4rr0UlzLlsHq1bi//BIuuSTHh+bnHCSgydB///1Hx44deeeddyhcuPApHz9ixAiGDh2abX+1atUCEZ5I9OnQwfwLoF27dlG8ePGAHkNE/MvX9hrUZotIkF1//SkfkpdzEJcToMu4juPwv//9jyuvvJLHHnuMTZs2UaNGDX766ScuvvjiHH/n+KtMbreb3bt3U7p0aVwuVyDCBGDfvn1UqVKFf/75h8TExIAdJ5girU6RVh+IvDolJydTtWpV9uzZQ4kSJWyHIyK5lJf2GtRm+0uk1Qcir06RVh+IvDrl5xzE556hIUOG5HglKLNly5bx/fffs2/fPgYMGJDr546Pjyc+Pj7LvmCeVCUmJkbEByKzSKtTpNUHIq9OIdvdLhJlAtleg9psf4u0+kDk1SnS6gORV6e8nIP4nAx1796de+6556SPqV69OsOGDWPp0qXZvijr1q3Lfffdx8svv+zroUVERCSX1F6LiJyaz8lQmTJlKONZu+Qkxo4dy7BhwzK2t27dys0338wbb7zB5Zdf7uthRURExAdqr0VETi1gEyhUrVo1y3bRokUBOP3006lcuXKgDpsn8fHxDB48ONtVsXAWaXWKtPpA5NUp0uojEi3Cqb2GyPuuibT6QOTVKdLqA5FXp/zUJ2ATKBwvtzdkioiIiD1qr0UkmgQtGRIREREREQklmvZJRERERESikpIhERERERGJSkqGREREREQkKikZEhERERGRqKRkKAfDhw+nfv36FC5cOKirafvLxIkTqVGjBgkJCdSpU4dvvvnGdkj5snjxYho3bkylSpVwuVy88847tkPKsxEjRnDppZdSrFgxypUrxx133MEff/xhO6x8mTRpEhdeeGHGKtb16tXj448/th2WiES4TZs20b59e2rUqEGhQoU4/fTTGTx4MGlpabZDyxedg4QWnYOENn+cgygZykFaWhrNmzenS5cutkPx2RtvvEGvXr0YNGgQP/30E1dffTWNGjVi8+bNtkPLs4MHD3LRRRcxfvx426Hk29dff023bt1YunQpixYt4ujRo9x0000cPHjQdmh5VrlyZZ555hmWL1/O8uXLue6667j99ttZs2aN7dBEJIL9/vvvuN1upkyZwpo1a3jxxReZPHkyAwcOtB1avugcJLToHCS0+eUcxJETmjVrllO8eHHbYfjksssuczp37pxl39lnn+3079/fUkT+BTgLFiywHYbf7NixwwGcr7/+2nYoflWyZEln+vTptsMQkSgzcuRIp0aNGrbD8Audg4QenYOEB1/PQdQzFEHS0tJYsWIFN910U5b9N910E99//72lqORkkpOTAShVqpTlSPwjPT2duXPncvDgQerVq2c7HBGJMsnJyRHzfRpudA4SfnQOYhQIYEwSZDt37iQ9PZ3y5ctn2V++fHm2b99uKSo5Ecdx6NOnD1dddRXnn3++7XDyZfXq1dSrV4+UlBSKFi3KggULOPfcc22HJSJRZP369YwbN45Ro0bZDiUq6RwkvOgcxCtqeoaGDBmCy+U66b/ly5fbDtMvXC5Xlm3HcbLtE/u6d+/OL7/8wuuvv247lHw766yzWLVqFUuXLqVLly60bt2a3377zXZYIhKG8tJeb926lVtuuYXmzZvToUMHS5GfmM5BdA4SanQO4hU1PUPdu3fnnnvuOeljqlevHpxgAqRMmTLExsZmuwKzY8eObFdqxK4ePXrw3nvvsXjxYipXrmw7nHyLi4ujVq1aANStW5dly5YxZswYpkyZYjkyEQk3vrbXW7dupWHDhtSrV4+pU6cGOLq80TmIzkFCic5BsoqaZKhMmTKUKVPGdhgBFRcXR506dVi0aBFNmzbN2L9o0SJuv/12i5GJh+M49OjRgwULFvDVV19Ro0YN2yEFhOM4pKam2g5DRMKQL+31v//+S8OGDalTpw6zZs0iJiY0B7zoHETnIKFA5yA5i5pkyBebN29m9+7dbN68mfT0dFatWgVArVq1KFq0qN3gTqFPnz60atWKunXrZlwl27x5M507d7YdWp4dOHCAdevWZWxv3LiRVatWUapUKapWrWoxMt9169aN1157jXfffZdixYplXEErXrw4hQoVshxd3gwcOJBGjRpRpUoV9u/fz9y5c/nqq6/45JNPbIcmIhFs69atNGjQgKpVq/L888+TlJSU8bMKFSpYjCx/dA4SWnQOEtr8cg4SgBntwl7r1q0dINu/L7/80nZouTJhwgSnWrVqTlxcnHPJJZeE/ZSJX375ZY7vR+vWrW2H5rOc6gE4s2bNsh1anrVr1y7j81a2bFnn+uuvdxYuXGg7LBGJcLNmzTrhd2o40zlIaNE5SGjzxzmIy3EcJy+ZmIiIiIiISDgLzcG1IiIiIiIiAaZkSEREREREopKSIRERERERiUpKhkREREREJCopGRIRERERkaikZEhERERERKKSkiEREREREYlKSoZERERERCQqKRkSEREREZGopGRIRERERESikpIhERERERGJSv8H+NO6YIGPBAkAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 1200x500 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "a=0, b=0: correctly rejected -- Singular curve: 4a^3 + 27b^2 = 0 (mod 97). a=0, b=0.\n",
      "a=-3, b=2: correctly rejected -- Singular curve: 4a^3 + 27b^2 = 0 (mod 97). a=94, b=2.\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "fig, axes = plt.subplots(1, 2, figsize=(12, 5))\n",
    "\n",
    "# Cusp: y^2 = x^3 (a=0, b=0, discriminant = 0)\n",
    "ax = axes[0]\n",
    "x_vals = np.linspace(-1, 3, 2000)\n",
    "rhs = x_vals**3\n",
    "mask = rhs >= 0\n",
    "y_pos = np.sqrt(rhs[mask])\n",
    "ax.plot(x_vals[mask], y_pos, \"r-\", linewidth=2)\n",
    "ax.plot(x_vals[mask], -y_pos, \"r-\", linewidth=2)\n",
    "ax.plot(0, 0, \"ko\", markersize=8)\n",
    "ax.annotate(\"Cusp\", (0, 0), textcoords=\"offset points\", xytext=(15, 15),\n",
    "            fontsize=12, fontweight=\"bold\",\n",
    "            arrowprops=dict(arrowstyle=\"->\", color=\"black\"))\n",
    "ax.set_title(r\"$y^2 = x^3$ (cusp, $\\Delta = 0$)\", fontsize=13, color=\"red\")\n",
    "ax.set_xlim(-1.5, 3)\n",
    "ax.set_ylim(-4, 4)\n",
    "ax.set_aspect(\"equal\")\n",
    "ax.grid(True, alpha=0.3)\n",
    "\n",
    "# Node: y^2 = (x-1)^2(x+2) has a node at x=1\n",
    "ax = axes[1]\n",
    "x_vals = np.linspace(-2.5, 3, 3000)\n",
    "rhs = (x_vals - 1)**2 * (x_vals + 2)\n",
    "mask = rhs >= 0\n",
    "y_pos = np.sqrt(rhs[mask])\n",
    "ax.plot(x_vals[mask], y_pos, \"r-\", linewidth=2)\n",
    "ax.plot(x_vals[mask], -y_pos, \"r-\", linewidth=2)\n",
    "ax.plot(1, 0, \"ko\", markersize=8)\n",
    "ax.annotate(\"Node\", (1, 0), textcoords=\"offset points\", xytext=(15, 15),\n",
    "            fontsize=12, fontweight=\"bold\",\n",
    "            arrowprops=dict(arrowstyle=\"->\", color=\"black\"))\n",
    "ax.set_title(r\"$y^2 = (x-1)^2(x+2)$ (node, $\\Delta = 0$)\", fontsize=13, color=\"red\")\n",
    "ax.set_xlim(-2.5, 3)\n",
    "ax.set_ylim(-4, 4)\n",
    "ax.set_aspect(\"equal\")\n",
    "ax.grid(True, alpha=0.3)\n",
    "\n",
    "plt.tight_layout()\n",
    "plt.savefig(\"fig_ch31_singular_curves.png\", dpi=150, bbox_inches=\"tight\")\n",
    "plt.show()\n",
    "\n",
    "# Show that our class correctly rejects singular curves\n",
    "for a_test, b_test in [(0, 0), (-3, 2)]:\n",
    "    try:\n",
    "        E_bad = EllipticCurve(a_test, b_test, 97)\n",
    "        print(f\"a={a_test}, b={b_test}: accepted (unexpected)\")\n",
    "    except ValueError as e:\n",
    "        print(f\"a={a_test}, b={b_test}: correctly rejected -- {e}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cell-30",
   "metadata": {},
   "source": [
    "## 31.17 Comparing Curves: Point Counts and the Hasse Band\n",
    "\n",
    "Different curve parameters $(a, b)$ yield different group orders over the same field. Let us survey several curves over $\\mathbb{F}_{97}$ and see how their point counts distribute within the Hasse band."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "cell-31",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-03-04T22:42:30.619179Z",
     "iopub.status.busy": "2026-03-04T22:42:30.619029Z",
     "iopub.status.idle": "2026-03-04T22:42:30.919609Z",
     "shell.execute_reply": "2026-03-04T22:42:30.919207Z"
    },
    "tags": [
     "hide-input"
    ]
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "p = 97\n",
      "Hasse band: [78.3, 117.7]\n",
      "Center: p + 1 = 98\n",
      "\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA90AAAHqCAYAAAAZLi26AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAAByJUlEQVR4nO3dd3wUdf7H8fdsegJJSKOE0HtVBGyAoICioIINQS8IFiwoYsWCggoedxaUQ6xwKIjnCcrPAxSVoqdYgCAqoghKESmBJIT07Pz+yBEMyUI2mcnsbl7Px2Mfm52Z/e575juTySczO2OYpmkKAAAAAABYzuV0AAAAAAAAAhVFNwAAAAAANqHoBgAAAADAJhTdAAAAAADYhKIbAAAAAACbUHQDAAAAAGATim4AAAAAAGxC0Q0AAAAAgE0ougEAAAAAsAlFNwAAAAAANqHoBgAAAADAJhTdAKpt1apVMgxDc+fOdfQz586dK8MwtGrVqhrL4SmLP9i5c6cuu+wy1a9fX4Zh6NJLL63xDP667AKRL6wPNYl1DwBQUyi6AZRx9A/Ro4+goCDFxsaqffv2GjFihBYtWqTi4mLLPu/XX3/Vo48+qrS0NMvatIO/5PRGamqqPvnkE9199916/fXXdeedd3qc9vj1wjAM1alTR6eddppmzJhh6Trhjer0S15enp5//nmdc845io+PV0hIiJKSknT++efr5ZdfVn5+vvWBq8HuddCb9cEKV1xxhQzDOOn8tGvXTnXq1NHhw4dtzeMP/G2dBQCUCHY6AADfdNVVV2nw4MEyTVPZ2dn6+eef9f777+vNN99Ujx49tGjRIjVu3FiS1KdPH+Xm5iokJMTrz/n11181efJkNWvWTKecckql31edz6yKE+Ws6SxWyM/P16pVqzRu3Djdc889lX7fn9eL33//XXPnztX48eP1/fff66WXXvI6R3WXXVXXn19//VUXXXSRfvjhB5177rm67777lJiYqPT0dK1atUpjx47V119/XaV5sktV57Uyqro+VMf111+vf//733rttdf03HPPVTjNf//7X23ZskWjRo1S3bp1Lf18f9tu/XGdRcUmTpyoL774QtnZ2YqKipJhGGXGx8XFadGiRQ6lA2AHim4AFTrllFN0zTXXlBn21FNPafr06br//vt10UUXad26dQoODpbL5VJ4eHiN5HK73crP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ortp06ZavHixJMnlcundd98tPeoNAAAAAAAq5vUtw1auXKkOHTrYkaV2OnX6sdMwAACwwaej7lTvptGqGx/rdBQAQKCirvHI66L7nHPOkSRt3bpVn3zyidLT05WQkKB+/fqpVatWlgcMeJx6AQCw2Za+F6pnn9aqGx3hdBQAQKCirvHI66LbNE2NGzdOs2fPltvtLh3ucrl0yy236LnnnrM0IAAAAAAA/qpStwz7s2eeeUazZs3STTfdpC+//FI7d+7Ul19+qbFjx2rWrFl65pln7MgJAAAAAIDf8fpI9yuvvKJx48ZpxowZpcOSk5PVo0cPBQUF6eWXX9add95paciAVpx/7Oegiq8IDwBAddTb9auCNhdKsXWktm2djgMACETUNR55faR727ZtGjx4cIXjBg8erG3btlU7VK2ypKX0VnjJMwAANrjsoRtU74zu0nnnOR0FABCoqGs88rrojomJ0W+//VbhuN9++03R0dHVDgUAAAAAQCDw+vTyAQMG6KGHHtKpp56q0047rXR4WlqaHnnkEZ1//vmWBgx4CWdK+fulsESnkwAAAABA1VDXeOR10T1t2jStWrVKPXv2VIcOHdSwYUPt2bNHP/zwgxo1aqRp06bZkTNw9X7b6QQAAAAAUD3UNR55fXp5SkqK0tLSdO+99yoqKkrbt29XVFSU7r//fm3YsEGNGze2IycAAAAAAH7H6yPdkpSQkMARbQAAAAAATsLrI90AAAAAAKByfKronjZtmgzD0Pjx452OUnO+ukn69IqSZwAAAADwR9Q1HlXp9HI7fP3113rppZfUpUsXp6PUrN3/kXJ3SxHJTicBAAAAgKqhrvHIJ450Z2dna+TIkXr55ZdVr149p+MAAAAAAGAJr490FxQUKCQkRIZhWBbi1ltv1UUXXaT+/fvr8ccft6xdv3DB15JZLBlBTicBAASoN59eoMt7NFFcbB2nowAAAhV1jUdeFd15eXmKiorSv//9bw0dOtSSAAsXLtT69ev19ddfV2r6/Px85efnl77OysqSJLndbrndbksy1aiw+sd+9sf8AMow3W7JNCWZFjVoyvTX32+1hC19blrb5pF6CSpu2Eju6Aif39dYujzZfgCg5vh5XWPnvsKrojs8PFzx8fGKioqy5MN37typO+64Qx9++KHCw8Mr9Z5p06Zp8uTJ5Ybv379feXl5luQC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tEg//fSTLr744jLTWbINmah1LrroInP06NFlhg0bNsy85pprTNM0TbfbbTZo0MB88sknS8fn5eWZMTEx5uzZs2s0a210sv4xTdNMTU01L7nkkhpOBtM0zZycHDMoKMh8//33ywzv2rWr+eCDD7L9OOxk/WOabD9OkmQuXry49HVltpeMjAwzJCTEXLhwYek0u3fvNl0ul7l8+fIay14bVKV/TNM0zznnHPOOO+6owaS10/H982fbt283JZkbNmwoM5ztp2ZVpY9Mk22oppyof4766quvTEnmb7/9ZpqmddsQR7proV69eunjjz/WTz/9JEnauHGjPvvsM1144YWSpO3bt+uPP/7QwIEDS98TFhamc845R59//rkjmWuTk/XPUatWrVJSUpLatGmjG264Qfv27XMibq1TVFSk4uJihYeHlxkeERGhzz77jO3HYSfrn6PYfnxDZbaXdevWqbCwsMw0jRo1UqdOndimbObN77P58+crISFBHTt21N13382ZPT6C7cd/sA35hszMTBmGodjYWEnWbUPBVgeF77vvvvuUmZmpdu3aKSgoSMXFxXriiSd09dVXS5L++OMPSVL9+vXLvK9+/fr67bffajxvbXOy/pGkQYMG6YorrlDTpk21fft2Pfzwwzr33HO1bt06hYWFOZg+8NWtW1dnnnmmHnvsMbVv317169fXm2++qS+//FKtW7dm+3HYyfpHYvvxJZXZXv744w+FhoaqXr165aY5+n7Yo7K/z0aOHKnmzZurQYMG+u677zRx4kRt3LhRK1asqNG8KI/txz+wDfmGvLw83X///RoxYoSio6MlWbcNUXTXQm+99ZbeeOMNLViwQB07dlRaWprGjx+vRo0aKTU1tXQ6wzDKvM80zXLDYL3K9M9VV11VOn2nTp3UvXt3NW3aVP/5z380bNgwp6LXGq+//rpGjx6t5ORkBQUFqVu3bhoxYoTWr19fOg3bj3NO1j9sP76nKtsL21TNOVn/3HDDDaU/d+rUSa1bt1b37t21fv16devWrcZyovLYfnwL25DzCgsLNXz4cLndbs2aNeuk03u7DXF6eS10zz336P7779fw4cPVuXNnXXvttbrzzjs1bdo0SVKDBg0kqdx/b/bt21fuv92w3sn6pyINGzZU06ZN9fPPP9dg0tqrZcuWWr16tbKzs7Vz50599dVXKiwsLP0vtcT246QT9U9F2H6cU5ntpUGDBiooKNChQ4c8TgN7VPX3Wbdu3RQSEsI25QPYfvwT21DNKiws1JVXXqnt27drxYoVpUe5Jeu2IYruWignJ0cuV9muDwoKKr0l1dHC4c+ntBQUFGj16tU666yzajRrbXSy/qlIenq6du7cqYYNG9odD38SFRWlhg0b6tChQ/rggw90ySWXsP34kIr6pyJsP86pzPZy2mmnKSQkpMw0e/bs0Xfffcc2ZbOq/j77/vvvVVhYyDblA9h+/BPbUM05WnD//PPP+uijjxQfH19mvFXbEKeX10JDhgzRE088oSZNmqhjx47asGGDnn76aY0ePVpSyWlk48eP19SpU9W6dWu1bt1aU6dOVWRkpEaMGOFw+sB3sv7Jzs7Wo48+qssuu0wNGzbUr7/+qgceeEAJCQkaOnSow+lrhw8++ECmaapt27baunWr7rnnHrVt21bXXXcd248POFH/sP3UvOzsbG3durX09fbt25WWlqa4uDg1adLkpNtLTEyMxowZo7vuukvx8fGKi4vT3Xffrc6dO6t///5OzVbAqG7//PLLL5o/f74uvPBCJSQk6IcfftBdd92lU089VWeffbZTsxUwTtY/Bw8e1I4dO0rvK7xlyxZJJUfnGjRowPZTA6rbR2xD9jpR/zRq1EiXX3651q9fr/fff1/FxcWlZ/bExcUpNDTUum3Im8usIzBkZWWZd9xxh9mkSRMzPDzcbNGihfnggw+a+fn5pdO43W7zkUceMRs0aGCGhYWZffr0MTdt2uRg6trjZP2Tk5NjDhw40ExMTDRDQkLMJk2amKmpqeaOHTscTl57vPXWW2aLFi3M0NBQs0GDBuatt95qZmRklI5n+3HWifqH7afmrVy50pRU7pGammqaZuW2l9zcXPO2224z4+LizIiICHPw4MH0mUWq2z87duww+/TpY8bFxZmhoaFmy5Ytzdtvv91MT093aI4Cy8n6Z86cORWOf+SRR0rbYPuxV3X7iG3IXifqn6O3cavosXLlytI2rNiGDNM0zcqX6AAAAAAAoLL4TjcAAAAAADah6AYAAAAAwCYU3QAAAAAA2ISiGwAAAAAAm1B0AwAAAABgE4puAAAAAABsQtENAAAAAIBNKLoBAAAAALAJRTcAAAAAADah6AYAAAAAwCYU3QAAOKhZs2Z69NFHywxbunSpDMPw+Hj11VdP+H5JmjJlijp06CC3223zHJR49dVXlZycrCNHjtTI5wEA4C+CnQ4AAADKWr9+vSTpvffeU1JSUrnxHTp0OOH7f//9d02fPl1z586Vy1X2/+umaapHjx6Kjo7Wzp071bRp0zLjQ0JC9J///Kfc+04mNTVVf/3rXzV9+nRNnjzZq/cCABDIKLoBAPAx69evV3R0tIYMGSLDMLx+/4wZMxQbG6thw4aVG/ftt9/qkksu0fnnn6+0tDTdeOONVkRWcHCwbrrpJj322GO67777FBkZaUm7AAD4O04vBwDAx6xbt05du3atUsFdUFCgV199VSNGjKjwaPVHH32k888/XytWrNCAAQOsiFtq5MiRysrK0sKFCy1tFwAAf0bRDQCAD0lPT9eOHTvUuXNnFRUVlXuYpnnC93/55ZdKT09Xv379Khy/YcMGde/eXdu2bVPz5s0tzd6gQQO1a9dO//nPfyxtFwAAf0bRDQCADzn6fe5Zs2YpJCSk3OOHH3444fu/+OILSVK3bt3KjSsoKFBoaKhyc3NVp06dcuO//fZb9e7dW9HR0erQoYNWrVpVOq5OnTplHi6XS0899VS5Nrp166b//ve/3swyAAABje90AwDgQ9atWydJWrRokVJSUsqNr8xF1AzDUEJCQrlxX3zxhc466yytXr1aH3zwgfr37186zjRN/frrr7rrrru0atUq/fvf/9all16qX375RfHx8crOzi6dds+ePUpJSanwO+NJSUnat2+fioqKFBzMnxkAALA3BADAh6xfv17h4eG6+OKLFRQU5PX7c3NzFRISUuF7P/74Y11//fV69tlntWbNmjJXRv/uu+90zjnn6JZbbpEkXXXVVZo0aZIWL16s66+/vkw78+fP15lnnlnh6enh4eEyTVN5eXkVHk0HAKC24fRyAAB8yPr169WpU6cqFdySlJCQoIKCggrvl71r1y41adJEe/fuLXcrsoq+K+52u/X999+XG/7666/rL3/5S4Wff/DgQYWFhVFwAwDwPxTdAAD4iMzMTG3btk1du3atchvt2rWTJP3yyy9lhmdlZSkuLk579uxRcnJyufe1bdtWderU0XPPPafCwkLNnz9fW7duLVe8b9q0SVu2bNEVV1xR4edv27btpKfAAwBQm3B6OQAAPmL9+vUyTVNRUVFau3ZtufHJyckVfs/7z/r27StJWrt2rbp06VI6fOXKlTr33HO1YsWKMt/lPio0NFSLFy/WuHHjNHnyZPXp00d9+/ZV48aNy0w3b948XXzxxYqNjS3Xhtvt1ldffaUxY8ZUYm4BAKgdKLoBAPARR69c/txzz+m5554rN/6VV145aUGbkpKi3r1767333tONN95YOvzjjz/Wt99+q71795Z+zvH+fOXx4uJitWzZUvfdd1/peLfbrQULFmj27NkVvn/VqlXKzMzUyJEjTzyjAADUIhTdAAD4iLvuukt33XVXtdu54447dNVVV2n37t2lp5JXVMQf77vvvlPr1q1VUFCgKVOmqH79+rrgggtKx3/88ccqLCzUoEGDKnz/nDlzdNZZZ1V4uzIAAGorvtMNAECAGTZsmHr06KFp06Z59b65c+eqfv36Sk5O1rZt2/Tee++VGf/6669r+PDhFd4K7JdfftFbb72lv/71r9XKDgBAoOFINwAAAcYwDL388stasmSJ3G63XK7K/Y/973//u/7+9797HD9v3jyP43bs2KGZM2eqV69eXucFACCQUXQDABCAOnXqpE6dOtXY5/Xr10/9+vWrsc8DAMBfGGZFN+YEAAAAAADVxne6AQAAAACwCUU3AAAAAAA2oegGAAAAAMAmFN0AAAAAANiEohsAAAAAAJtQdAMAAAAAYBOKbgAAAAAAbELRDQAAAACATSi6AQAAAACwCUU3AAAAAAA2oegGAAAAAMAm/w/k46flmbL82wAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 1000x500 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Total non-singular curves tested: 89\n",
      "Min #E = 79, Max #E = 117\n",
      "All within Hasse bound: True\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import math\n",
    "\n",
    "p = 97\n",
    "hasse_center = p + 1\n",
    "\n",
    "print(f\"p = {p}\")\n",
    "print(f\"Hasse band: [{float(p + 1 - 2*math.sqrt(p)):.1f}, {float(p + 1 + 2*math.sqrt(p)):.1f}]\")\n",
    "print(f\"Center: p + 1 = {hasse_center}\")\n",
    "print()\n",
    "\n",
    "curve_orders = []\n",
    "\n",
    "for a in range(0, 10):\n",
    "    for b in range(1, 10):\n",
    "        disc = (4 * a**3 + 27 * b**2) % p\n",
    "        if disc == 0:\n",
    "            continue\n",
    "        try:\n",
    "            E_tmp = EllipticCurve(a, b, p)\n",
    "            n = E_tmp.order()\n",
    "            curve_orders.append(n)\n",
    "        except ValueError:\n",
    "            continue\n",
    "\n",
    "curve_orders = np.array(curve_orders)\n",
    "\n",
    "fig, ax = plt.subplots(figsize=(10, 5))\n",
    "ax.hist(curve_orders, bins=range(int(curve_orders.min()) - 1, int(curve_orders.max()) + 2),\n",
    "        color=\"steelblue\", alpha=0.7, edgecolor=\"white\")\n",
    "ax.axvline(hasse_center, color=\"red\", linestyle=\"--\", linewidth=2,\n",
    "           label=f\"$p+1 = {hasse_center}$\")\n",
    "ax.axvline(hasse_center - 2*math.sqrt(p), color=\"orange\", linestyle=\":\",\n",
    "           linewidth=2, label=r\"$p+1 - 2\\sqrt{p}$\")\n",
    "ax.axvline(hasse_center + 2*math.sqrt(p), color=\"orange\", linestyle=\":\",\n",
    "           linewidth=2, label=r\"$p+1 + 2\\sqrt{p}$\")\n",
    "ax.set_xlabel(r\"$|E|(\\mathbb{F}_{97})$\", fontsize=12)\n",
    "ax.set_ylabel(\"Number of curves\", fontsize=12)\n",
    "ax.set_title(f\"Distribution of Point Counts for Various Curves over \"\n",
    "             f\"$\\\\mathbb{{F}}_{{{p}}}$\", fontsize=13)\n",
    "ax.legend(fontsize=10)\n",
    "ax.grid(True, alpha=0.3, axis=\"y\")\n",
    "\n",
    "plt.tight_layout()\n",
    "plt.savefig(\"fig_ch31_order_histogram.png\", dpi=150, bbox_inches=\"tight\")\n",
    "plt.show()\n",
    "\n",
    "print(f\"Total non-singular curves tested: {len(curve_orders)}\")\n",
    "print(f\"Min #E = {curve_orders.min()}, Max #E = {curve_orders.max()}\")\n",
    "print(f\"All within Hasse bound: \"\n",
    "      f\"{all(abs(int(n) - hasse_center) <= 2*math.sqrt(p) for n in curve_orders)}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cell-32",
   "metadata": {},
   "source": [
    "## 31.18 Exercises\n",
    "\n",
    "````{exercise}\n",
    ":label: ex-ch31-discriminant\n",
    "\n",
    "**Discriminant and Singularities.** Prove algebraically that the curve $y^2 = x^3 + ax + b$ has a singular point (where both partial derivatives vanish simultaneously) if and only if $4a^3 + 27b^2 = 0$. Then, using the `EllipticCurve` class, verify that for $p = 101$ and all $a \\in \\{0, \\ldots, 100\\}$, the class rejects exactly those pairs $(a, b)$ where $b^2 \\equiv -4a^3/27 \\pmod{101}$.\n",
    "\n",
    "```{hint}\n",
    ":class: dropdown\n",
    "\n",
    "The partial derivatives of $f(x, y) = y^2 - x^3 - ax - b$ are $f_x = -3x^2 - a$ and $f_y = 2y$. Setting both to zero gives $y = 0$ and $x^2 = -a/3$. Substituting into the curve equation yields $0 = x^3 + ax + b = x(-a/3) + ax + b = 2ax/3 + b$. Combining $x^2 = -a/3$ with $x = -3b/(2a)$ and eliminating $x$ gives the discriminant condition.\n",
    "```\n",
    "````\n",
    "\n",
    "````{exercise}\n",
    ":label: ex-ch31-inverse-verify\n",
    "\n",
    "**Inverse Verification.** For the curve $E: y^2 = x^3 + 3x + 5$ over $\\mathbb{F}_{127}$, enumerate all points and verify that for every point $P = (x, y)$, we have $-P = (x, p - y)$ and $P + (-P) = \\mathcal{O}$. Count how many points satisfy $P = -P$ (i.e., $2y \\equiv 0$) and explain why this count is always 0 or equal to the number of roots of $x^3 + 3x + 5$ in $\\mathbb{F}_{127}$.\n",
    "\n",
    "```{hint}\n",
    ":class: dropdown\n",
    "\n",
    "$P = -P$ means $(x, y) = (x, -y \\bmod p)$, which requires $2y \\equiv 0 \\pmod{p}$. Since $p$ is odd, this forces $y = 0$. The number of such points equals the number of $x \\in \\mathbb{F}_p$ with $x^3 + 3x + 5 \\equiv 0 \\pmod{p}$. A cubic over $\\mathbb{F}_p$ has 0, 1, 2, or 3 roots.\n",
    "```\n",
    "````\n",
    "\n",
    "````{exercise}\n",
    ":label: ex-ch31-cyclic-test\n",
    "\n",
    "**Cyclic Group Test.** Determine whether $E(\\mathbb{F}_p)$ is cyclic for each of the following curves and primes: (a) $y^2 = x^3 + x + 1$ over $\\mathbb{F}_{23}$, (b) $y^2 = x^3 + 2x + 3$ over $\\mathbb{F}_{31}$, (c) $y^2 = x^3 + 4x + 7$ over $\\mathbb{F}_{43}$. A group is cyclic if and only if it contains an element whose order equals $\\#E$.\n",
    "\n",
    "```{hint}\n",
    ":class: dropdown\n",
    "\n",
    "Compute $\\#E(\\mathbb{F}_p)$ and check if any point has that exact order. By Lagrange's theorem, every point order divides $\\#E$. If $\\#E$ is prime, the group is automatically cyclic (every non-identity element is a generator). If $\\#E$ is composite, you need to check whether there exists a point whose order is not a strict divisor of $\\#E$.\n",
    "```\n",
    "````\n",
    "\n",
    "````{exercise}\n",
    ":label: ex-ch31-baby-giant\n",
    "\n",
    "**Baby-Step Giant-Step ECDLP.** Implement the baby-step giant-step algorithm to solve the ECDLP on $E: y^2 = x^3 + 2x + 3$ over $\\mathbb{F}_{97}$. Given a generator $G$ and $Q = kG$, recover $k$ in $O(\\sqrt{n})$ time and space. Compare the number of group operations with the brute-force approach.\n",
    "\n",
    "```{hint}\n",
    ":class: dropdown\n",
    "\n",
    "Set $m = \\lceil\\sqrt{n}\\rceil$. Compute the \"baby steps\" $jG$ for $j = 0, 1, \\ldots, m-1$ and store them in a dictionary mapping point tuples to indices. Then compute the \"giant steps\" $Q - i \\cdot mG$ for $i = 0, 1, \\ldots, m-1$. If $Q - imG = jG$, then $k = im + j \\pmod{n}$. The total work is $O(m)$ group operations and $O(m)$ storage.\n",
    "```\n",
    "````\n",
    "\n",
    "````{exercise}\n",
    ":label: ex-ch31-addition-formulas\n",
    "\n",
    "**Deriving the Addition Formulas.** Starting from two generic points $P = (x_1, y_1)$ and $Q = (x_2, y_2)$ on $y^2 = x^3 + ax + b$ (with $x_1 \\neq x_2$), derive the addition formulas by: (1) writing the equation of the line through $P$ and $Q$, (2) substituting into the curve equation to get a cubic in $x$, (3) using Vieta's formulas (the sum of the three roots equals $\\lambda^2$) to find $x_3$, and (4) evaluating $y_3$. Verify your derivation matches Definition 31.2.\n",
    "\n",
    "```{hint}\n",
    ":class: dropdown\n",
    "\n",
    "The line through $P$ and $Q$ is $y = \\lambda(x - x_1) + y_1$ where $\\lambda = (y_2 - y_1)/(x_2 - x_1)$. Substituting into $y^2 = x^3 + ax + b$: $(\\lambda(x - x_1) + y_1)^2 = x^3 + ax + b$. Since $y_1^2 = x_1^3 + ax_1 + b$ and $y_2^2 = x_2^3 + ax_2 + b$, both $x_1$ and $x_2$ are roots. The cubic is $x^3 - \\lambda^2 x^2 + \\ldots = 0$, and by Vieta's formulas, $x_1 + x_2 + x_3 = \\lambda^2$, giving $x_3 = \\lambda^2 - x_1 - x_2$.\n",
    "```\n",
    "````"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cell-33",
   "metadata": {},
   "source": [
    "## 31.19 Summary\n",
    "\n",
    "In this chapter we established the mathematical foundations of elliptic curve arithmetic:\n",
    "\n",
    "- An **elliptic curve** in short Weierstrass form is $y^2 = x^3 + ax + b$ with $4a^3 + 27b^2 \\neq 0$ (non-singular).\n",
    "- The points on $E$ over a field $K$, together with a point at infinity $\\mathcal{O}$, form an **abelian group** under the chord-and-tangent addition law.\n",
    "- Over a finite field $\\mathbb{F}_p$, **Hasse's theorem** constrains the group order: $|\\#E(\\mathbb{F}_p) - p - 1| \\leq 2\\sqrt{p}$.\n",
    "- The **scalar multiplication** $kP$ is computed efficiently via the double-and-add algorithm in $O(\\log k)$ group operations.\n",
    "- The **Elliptic Curve Discrete Logarithm Problem** (ECDLP) -- given $G$ and $Q = kG$, find $k$ -- is believed to be computationally intractable for well-chosen curves, forming the basis of modern ECC.\n",
    "\n",
    "We implemented a complete `EllipticCurve` class over $\\mathbb{F}_p$ and verified all group axioms computationally.\n",
    "\n",
    "```{tip}\n",
    "**Looking ahead.** In subsequent chapters, we will use the group law developed here to build cryptographic protocols: **ECDH** (key exchange), **ECDSA** (digital signatures), and **EdDSA** (Edwards-curve signatures). We will also study specialized attacks on poorly chosen curves.\n",
    "```"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cell-34",
   "metadata": {},
   "source": [
    "## 31.20 References\n",
    "\n",
    "1. **V. S. Miller**, \"Use of Elliptic Curves in Cryptography,\" *Advances in Cryptology -- CRYPTO '85*, LNCS 218, Springer, 1986, pp. 417--426.\n",
    "\n",
    "2. **N. Koblitz**, \"Elliptic Curve Cryptosystems,\" *Mathematics of Computation*, vol. 48, no. 177, 1987, pp. 203--209.\n",
    "\n",
    "3. **J. H. Silverman**, *The Arithmetic of Elliptic Curves*, 2nd edition, Graduate Texts in Mathematics 106, Springer, 2009.\n",
    "\n",
    "4. **L. C. Washington**, *Elliptic Curves: Number Theory and Cryptography*, 2nd edition, CRC Press, 2008.\n",
    "\n",
    "5. **H. Hasse**, \"Zur Theorie der abstrakten elliptischen Funktionenkorper,\" *Journal fur die reine und angewandte Mathematik*, 1936.\n",
    "\n",
    "6. **D. Hankerson, A. Menezes, S. Vanstone**, *Guide to Elliptic Curve Cryptography*, Springer, 2004."
   ]
  }
 ],
 "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.12.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
