{
  "module": "public-key",
  "title": "Public-key & signatures",
  "about": "The controls each worksheet names, by exhibit. Generated by tools/teach-build.js from the worksheet front matter; a lab whose build removes one of these breaks that worksheet.",
  "worksheets": [
    {
      "exhibit": "ec-point-arithmetic",
      "repo": "systemslibrarian/crypto-lab-ec-point-arithmetic",
      "url": "https://systemslibrarian.github.io/crypto-lab-ec-point-arithmetic/",
      "worksheet": "https://crypto-lab.systemslibrarian.dev/teach/public-key/ec-point-arithmetic/",
      "source_commit": "ce6c3d3eb0c2",
      "checked": "2026-09-22",
      "anchors": [
        {
          "kind": "id",
          "value": "add"
        },
        {
          "kind": "id",
          "value": "cl-tab-real"
        },
        {
          "kind": "id",
          "value": "cl-panel-real"
        },
        {
          "kind": "label",
          "value": "Real teaching curve"
        },
        {
          "kind": "label",
          "value": "Show −P (the reflection)"
        },
        {
          "kind": "label",
          "value": "Tangent (P = Q)"
        },
        {
          "kind": "label",
          "value": "P + (−P) = O"
        },
        {
          "kind": "label",
          "value": "2P = O (y = 0)"
        },
        {
          "kind": "id",
          "value": "cl-tab-fp"
        },
        {
          "kind": "id",
          "value": "cl-panel-fp"
        },
        {
          "kind": "label",
          "value": "Finite-field curve"
        },
        {
          "kind": "label",
          "value": "Point P"
        },
        {
          "kind": "label",
          "value": "Point Q"
        },
        {
          "kind": "label",
          "value": "Doubling (P = Q)"
        },
        {
          "kind": "label",
          "value": "P + O = P"
        },
        {
          "kind": "label",
          "value": "secp256k1 (y² = x³ + 7)"
        },
        {
          "kind": "id",
          "value": "scalar"
        },
        {
          "kind": "label",
          "value": "Curve"
        },
        {
          "kind": "label",
          "value": "Method"
        },
        {
          "kind": "label",
          "value": "Double-and-add (efficient)"
        },
        {
          "kind": "label",
          "value": "Repeated addition (definition)"
        },
        {
          "kind": "label",
          "value": "Scalar k"
        },
        {
          "kind": "label",
          "value": "Step ▸"
        },
        {
          "kind": "label",
          "value": "Show all"
        },
        {
          "kind": "label",
          "value": "k = order → O"
        },
        {
          "kind": "id",
          "value": "hard"
        },
        {
          "kind": "label",
          "value": "Walk the subgroup ▶"
        }
      ]
    },
    {
      "exhibit": "ecdsa-forge",
      "repo": "systemslibrarian/crypto-lab-ecdsa-forge",
      "url": "https://systemslibrarian.github.io/crypto-lab-ecdsa-forge/",
      "worksheet": "https://crypto-lab.systemslibrarian.dev/teach/public-key/ecdsa-forge/",
      "source_commit": "1de890f5e9f9",
      "checked": "2026-09-22",
      "anchors": [
        {
          "kind": "id",
          "value": "curve-select"
        },
        {
          "kind": "id",
          "value": "btn-generate"
        },
        {
          "kind": "id",
          "value": "private-hidden"
        },
        {
          "kind": "id",
          "value": "public-key"
        },
        {
          "kind": "id",
          "value": "msg-sign"
        },
        {
          "kind": "id",
          "value": "btn-sign-random"
        },
        {
          "kind": "id",
          "value": "btn-sign-det"
        },
        {
          "kind": "id",
          "value": "sig-view"
        },
        {
          "kind": "id",
          "value": "btn-verify"
        },
        {
          "kind": "id",
          "value": "verify-status"
        },
        {
          "kind": "id",
          "value": "vd-slider"
        },
        {
          "kind": "id",
          "value": "vd-label"
        },
        {
          "kind": "id",
          "value": "toy-d"
        },
        {
          "kind": "id",
          "value": "toy-k"
        },
        {
          "kind": "id",
          "value": "toy-e1"
        },
        {
          "kind": "id",
          "value": "toy-e2"
        },
        {
          "kind": "id",
          "value": "toy-attack-output"
        },
        {
          "kind": "id",
          "value": "victim-key"
        },
        {
          "kind": "id",
          "value": "btn-attack"
        },
        {
          "kind": "id",
          "value": "step1"
        },
        {
          "kind": "id",
          "value": "step2"
        },
        {
          "kind": "id",
          "value": "step3"
        },
        {
          "kind": "id",
          "value": "step4"
        },
        {
          "kind": "id",
          "value": "step5"
        },
        {
          "kind": "id",
          "value": "attack-detail"
        },
        {
          "kind": "id",
          "value": "attack-fullnums"
        },
        {
          "kind": "id",
          "value": "msg-compare"
        },
        {
          "kind": "id",
          "value": "btn-random-sample"
        },
        {
          "kind": "id",
          "value": "btn-det-sample"
        },
        {
          "kind": "id",
          "value": "btn-reset-sample"
        },
        {
          "kind": "id",
          "value": "random-list"
        },
        {
          "kind": "id",
          "value": "det-list"
        },
        {
          "kind": "id",
          "value": "btn-safe-attack"
        },
        {
          "kind": "id",
          "value": "safe-attack-status"
        }
      ]
    },
    {
      "exhibit": "nonce-lattice",
      "repo": "systemslibrarian/crypto-lab-nonce-lattice",
      "url": "https://systemslibrarian.github.io/crypto-lab-nonce-lattice/",
      "worksheet": "https://crypto-lab.systemslibrarian.dev/teach/public-key/nonce-lattice/",
      "source_commit": "6b023a9e821b",
      "checked": "2026-09-22",
      "anchors": [
        {
          "kind": "id",
          "value": "attack-config-form"
        },
        {
          "kind": "id",
          "value": "feasibility-slot"
        },
        {
          "kind": "id",
          "value": "gloss-def-information-floor"
        },
        {
          "kind": "label",
          "value": "Curve"
        },
        {
          "kind": "label",
          "value": "Leak Mode"
        },
        {
          "kind": "label",
          "value": "Leak Size (bits)"
        },
        {
          "kind": "label",
          "value": "Signature Count"
        },
        {
          "kind": "label",
          "value": "Measure this column"
        }
      ]
    },
    {
      "exhibit": "rsa-educational",
      "repo": "systemslibrarian/crypto-lab-rsa-educational",
      "url": "https://systemslibrarian.github.io/crypto-lab-rsa-educational/",
      "worksheet": "https://crypto-lab.systemslibrarian.dev/teach/public-key/rsa-educational/",
      "source_commit": "ad0235d64da7",
      "checked": "2026-09-22",
      "anchors": [
        {
          "kind": "id",
          "value": "overview"
        },
        {
          "kind": "id",
          "value": "keygen"
        },
        {
          "kind": "id",
          "value": "kg-p"
        },
        {
          "kind": "id",
          "value": "kg-q"
        },
        {
          "kind": "id",
          "value": "kg-e"
        },
        {
          "kind": "id",
          "value": "kg-generate"
        },
        {
          "kind": "id",
          "value": "kg-random"
        },
        {
          "kind": "id",
          "value": "kg-weak"
        },
        {
          "kind": "id",
          "value": "encrypt"
        },
        {
          "kind": "id",
          "value": "ed-msg"
        },
        {
          "kind": "id",
          "value": "ed-math-toggle"
        },
        {
          "kind": "id",
          "value": "ed-e-tiny"
        },
        {
          "kind": "id",
          "value": "ed-e-real"
        },
        {
          "kind": "id",
          "value": "roundtrip"
        },
        {
          "kind": "id",
          "value": "rt-replay"
        },
        {
          "kind": "id",
          "value": "sign"
        },
        {
          "kind": "id",
          "value": "sv-msg"
        },
        {
          "kind": "id",
          "value": "sv-tamper"
        },
        {
          "kind": "id",
          "value": "breaks"
        },
        {
          "kind": "id",
          "value": "wb-factor"
        },
        {
          "kind": "id",
          "value": "wb-factor-2048"
        },
        {
          "kind": "id",
          "value": "realworld"
        },
        {
          "kind": "id",
          "value": "rw-run-oaep"
        }
      ]
    },
    {
      "exhibit": "rsa-forge",
      "repo": "systemslibrarian/crypto-lab-rsa-forge",
      "url": "https://systemslibrarian.github.io/crypto-lab-rsa-forge/",
      "worksheet": "https://crypto-lab.systemslibrarian.dev/teach/public-key/rsa-forge/",
      "source_commit": "2152e7023198",
      "checked": "2026-09-22",
      "anchors": [
        {
          "kind": "id",
          "value": "tab-4"
        },
        {
          "kind": "id",
          "value": "cfg-vulnerable"
        },
        {
          "kind": "id",
          "value": "cfg-safe"
        },
        {
          "kind": "id",
          "value": "cfg-result-title"
        },
        {
          "kind": "id",
          "value": "cfg-result-text"
        },
        {
          "kind": "id",
          "value": "hastad-setup"
        },
        {
          "kind": "id",
          "value": "hastad-n1"
        },
        {
          "kind": "id",
          "value": "hastad-n2"
        },
        {
          "kind": "id",
          "value": "hastad-n3"
        },
        {
          "kind": "id",
          "value": "hastad-message"
        },
        {
          "kind": "id",
          "value": "hastad-broadcast"
        },
        {
          "kind": "id",
          "value": "hastad-c1"
        },
        {
          "kind": "id",
          "value": "hastad-c2"
        },
        {
          "kind": "id",
          "value": "hastad-c3"
        },
        {
          "kind": "id",
          "value": "hastad-attack"
        },
        {
          "kind": "id",
          "value": "hastad-recovered-text"
        },
        {
          "kind": "id",
          "value": "hastad-whatjust-text"
        },
        {
          "kind": "id",
          "value": "tab-5"
        },
        {
          "kind": "id",
          "value": "bb-setup"
        },
        {
          "kind": "id",
          "value": "bb-n"
        },
        {
          "kind": "id",
          "value": "bb-e"
        },
        {
          "kind": "id",
          "value": "bb-target-msg"
        },
        {
          "kind": "id",
          "value": "bb-oracle-input"
        },
        {
          "kind": "id",
          "value": "bb-oracle-query"
        },
        {
          "kind": "id",
          "value": "bb-oracle-result"
        },
        {
          "kind": "id",
          "value": "bb-hom-run"
        },
        {
          "kind": "id",
          "value": "bb-hom-prod"
        },
        {
          "kind": "id",
          "value": "bb-hom-encab"
        },
        {
          "kind": "id",
          "value": "bb-hom-verdict"
        },
        {
          "kind": "id",
          "value": "bb-run"
        },
        {
          "kind": "id",
          "value": "bb-query-count"
        },
        {
          "kind": "id",
          "value": "bb-iteration"
        },
        {
          "kind": "id",
          "value": "bb-interval-size"
        },
        {
          "kind": "id",
          "value": "bb-byte-row"
        },
        {
          "kind": "id",
          "value": "bb-attack-log"
        },
        {
          "kind": "id",
          "value": "bb-recovered-text"
        },
        {
          "kind": "id",
          "value": "bb-whatjust-text"
        },
        {
          "kind": "id",
          "value": "bb-run-oracle-mode"
        },
        {
          "kind": "id",
          "value": "bb-om-b0"
        },
        {
          "kind": "id",
          "value": "bb-om-b1"
        },
        {
          "kind": "id",
          "value": "bb-om-yes"
        },
        {
          "kind": "id",
          "value": "bb-om-no"
        },
        {
          "kind": "id",
          "value": "bb-om-feedback"
        },
        {
          "kind": "id",
          "value": "bb-om-total"
        },
        {
          "kind": "id",
          "value": "bb-om-autocomplete"
        },
        {
          "kind": "id",
          "value": "bb-abort"
        }
      ]
    }
  ]
}
