{
  "module": "post-quantum",
  "title": "Post-quantum transition",
  "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": "grover",
      "repo": "systemslibrarian/crypto-lab-grover",
      "url": "https://systemslibrarian.github.io/crypto-lab-grover/",
      "worksheet": "https://crypto-lab.systemslibrarian.dev/teach/post-quantum/grover/",
      "source_commit": "873e40d8f891",
      "checked": "2026-09-22",
      "anchors": [
        {
          "kind": "id",
          "value": "panel-a"
        },
        {
          "kind": "id",
          "value": "n-slider"
        },
        {
          "kind": "id",
          "value": "n-value"
        },
        {
          "kind": "id",
          "value": "random-btn"
        },
        {
          "kind": "id",
          "value": "target-display"
        },
        {
          "kind": "id",
          "value": "step-btn"
        },
        {
          "kind": "id",
          "value": "reset-btn"
        },
        {
          "kind": "id",
          "value": "decompose-toggle"
        },
        {
          "kind": "id",
          "value": "predict-toggle"
        },
        {
          "kind": "id",
          "value": "predict-prompt"
        },
        {
          "kind": "id",
          "value": "iter-display"
        },
        {
          "kind": "id",
          "value": "phase-label"
        },
        {
          "kind": "id",
          "value": "viz-rotation"
        },
        {
          "kind": "id",
          "value": "viz-amplitudes"
        },
        {
          "kind": "id",
          "value": "bar-chart"
        },
        {
          "kind": "id",
          "value": "amp-values"
        },
        {
          "kind": "id",
          "value": "math-layer"
        },
        {
          "kind": "id",
          "value": "banner"
        },
        {
          "kind": "id",
          "value": "misconception"
        },
        {
          "kind": "id",
          "value": "prob-canvas"
        },
        {
          "kind": "id",
          "value": "measure-btn"
        },
        {
          "kind": "id",
          "value": "measure-stats"
        },
        {
          "kind": "id",
          "value": "panel-b"
        },
        {
          "kind": "id",
          "value": "race-classical-stats"
        },
        {
          "kind": "id",
          "value": "race-quantum-stats"
        },
        {
          "kind": "id",
          "value": "panel-c"
        },
        {
          "kind": "id",
          "value": "panel-signature"
        },
        {
          "kind": "id",
          "value": "key-selector"
        },
        {
          "kind": "id",
          "value": "aes-example"
        },
        {
          "kind": "id",
          "value": "panel-budget"
        },
        {
          "kind": "id",
          "value": "budget-selector"
        },
        {
          "kind": "id",
          "value": "budget-box"
        },
        {
          "kind": "id",
          "value": "reality-panel"
        },
        {
          "kind": "id",
          "value": "panel-challenge"
        },
        {
          "kind": "id",
          "value": "challenge-list"
        },
        {
          "kind": "label",
          "value": "Grover vs Shor — The Two Quantum Threats"
        }
      ]
    },
    {
      "exhibit": "harvest-vault",
      "repo": "systemslibrarian/crypto-lab-harvest-vault",
      "url": "https://systemslibrarian.github.io/crypto-lab-harvest-vault/",
      "worksheet": "https://crypto-lab.systemslibrarian.dev/teach/post-quantum/harvest-vault/",
      "source_commit": "1c8241953291",
      "checked": "2026-09-22",
      "anchors": [
        {
          "kind": "id",
          "value": "progress-nav"
        },
        {
          "kind": "id",
          "value": "capture"
        },
        {
          "kind": "id",
          "value": "capture-message"
        },
        {
          "kind": "id",
          "value": "send-session"
        },
        {
          "kind": "id",
          "value": "deploy-pqc"
        },
        {
          "kind": "id",
          "value": "run-qday"
        },
        {
          "kind": "id",
          "value": "reset-capture"
        },
        {
          "kind": "id",
          "value": "capture-status"
        },
        {
          "kind": "id",
          "value": "capture-body"
        },
        {
          "kind": "id",
          "value": "mosca"
        },
        {
          "kind": "id",
          "value": "x-slider"
        },
        {
          "kind": "id",
          "value": "y-slider"
        },
        {
          "kind": "id",
          "value": "z-slider"
        },
        {
          "kind": "id",
          "value": "x-value"
        },
        {
          "kind": "id",
          "value": "y-value"
        },
        {
          "kind": "id",
          "value": "z-value"
        },
        {
          "kind": "id",
          "value": "z-year"
        },
        {
          "kind": "id",
          "value": "scenario-strip"
        },
        {
          "kind": "label",
          "value": "Library"
        },
        {
          "kind": "id",
          "value": "whatbreaks"
        },
        {
          "kind": "id",
          "value": "mitigations"
        },
        {
          "kind": "id",
          "value": "matrix-grid"
        },
        {
          "kind": "id",
          "value": "matrix-info"
        },
        {
          "kind": "id",
          "value": "brief"
        },
        {
          "kind": "id",
          "value": "brief-pre"
        },
        {
          "kind": "id",
          "value": "copy-brief"
        }
      ]
    },
    {
      "exhibit": "hybrid-wire",
      "repo": "systemslibrarian/crypto-lab-hybrid-wire",
      "url": "https://systemslibrarian.github.io/crypto-lab-hybrid-wire/",
      "worksheet": "https://crypto-lab.systemslibrarian.dev/teach/post-quantum/hybrid-wire/",
      "source_commit": "5b7ae68ae3bc",
      "checked": "2026-09-22",
      "anchors": [
        {
          "kind": "id",
          "value": "tab-handshake"
        },
        {
          "kind": "id",
          "value": "next-step"
        },
        {
          "kind": "id",
          "value": "reset-handshake"
        },
        {
          "kind": "id",
          "value": "tab-threat"
        },
        {
          "kind": "id",
          "value": "tab-wires"
        },
        {
          "kind": "id",
          "value": "tab-why"
        },
        {
          "kind": "id",
          "value": "tab-deployed"
        }
      ]
    },
    {
      "exhibit": "kyber-vault",
      "repo": "systemslibrarian/crypto-lab-kyber-vault",
      "url": "https://systemslibrarian.github.io/crypto-lab-kyber-vault/",
      "worksheet": "https://crypto-lab.systemslibrarian.dev/teach/post-quantum/kyber-vault/",
      "source_commit": "3f80e2eaa9c9",
      "checked": "2026-09-22",
      "anchors": [
        {
          "kind": "id",
          "value": "tab-encaps"
        },
        {
          "kind": "id",
          "value": "variant-ml-kem-512"
        },
        {
          "kind": "id",
          "value": "variant-ml-kem-768"
        },
        {
          "kind": "id",
          "value": "variant-ml-kem-1024"
        },
        {
          "kind": "id",
          "value": "selected-profile-title"
        },
        {
          "kind": "id",
          "value": "prev-step"
        },
        {
          "kind": "id",
          "value": "next-step"
        },
        {
          "kind": "id",
          "value": "kem-status"
        },
        {
          "kind": "id",
          "value": "hybrid-message"
        },
        {
          "kind": "id",
          "value": "hybrid-encrypt"
        },
        {
          "kind": "id",
          "value": "hybrid-decrypt"
        },
        {
          "kind": "id",
          "value": "hybrid-tamper"
        },
        {
          "kind": "id",
          "value": "hybrid-status"
        },
        {
          "kind": "id",
          "value": "tab-params"
        },
        {
          "kind": "id",
          "value": "implementation-heading"
        },
        {
          "kind": "id",
          "value": "tab-how"
        },
        {
          "kind": "label",
          "value": "Fujisaki-Okamoto (FO) transform"
        },
        {
          "kind": "id",
          "value": "tab-lattice"
        },
        {
          "kind": "id",
          "value": "model-boundary-heading"
        },
        {
          "kind": "id",
          "value": "solve-clean"
        },
        {
          "kind": "id",
          "value": "solve-noisy"
        },
        {
          "kind": "id",
          "value": "new-lwe"
        },
        {
          "kind": "id",
          "value": "tab-compare"
        },
        {
          "kind": "id",
          "value": "run-benchmark"
        }
      ]
    },
    {
      "exhibit": "lattice-gentle",
      "repo": "systemslibrarian/crypto-lab-lattice-gentle",
      "url": "https://systemslibrarian.github.io/crypto-lab-lattice-gentle/",
      "worksheet": "https://crypto-lab.systemslibrarian.dev/teach/post-quantum/lattice-gentle/",
      "source_commit": "893db9f6f046",
      "checked": "2026-09-22",
      "anchors": [
        {
          "kind": "id",
          "value": "mode-guided"
        },
        {
          "kind": "id",
          "value": "mode-reference"
        },
        {
          "kind": "id",
          "value": "rail-step-1"
        },
        {
          "kind": "id",
          "value": "rail-step-2"
        },
        {
          "kind": "id",
          "value": "rail-step-3"
        },
        {
          "kind": "id",
          "value": "rail-step-4"
        },
        {
          "kind": "id",
          "value": "rail-step-5"
        },
        {
          "kind": "id",
          "value": "rail-step-6"
        },
        {
          "kind": "label",
          "value": "B decodes closer"
        },
        {
          "kind": "label",
          "value": "B′ decodes closer"
        },
        {
          "kind": "label",
          "value": "Same dots — they must tie"
        },
        {
          "kind": "label",
          "value": "Good basis B (Ex 2.24)"
        },
        {
          "kind": "label",
          "value": "Bad basis B′ (Ex 2.24)"
        },
        {
          "kind": "id",
          "value": "ex1-tx"
        },
        {
          "kind": "id",
          "value": "ex1-ty"
        },
        {
          "kind": "id",
          "value": "ex1-b1x"
        },
        {
          "kind": "label",
          "value": "Predict: yes, it changes"
        },
        {
          "kind": "label",
          "value": "Predict: no, it stays"
        },
        {
          "kind": "label",
          "value": "Good basis B₂ = (2,0), (0,1)"
        },
        {
          "kind": "label",
          "value": "Bad basis B₃ = (−2,−2), (4,3)"
        },
        {
          "kind": "label",
          "value": "Gauss — Ex 9.11"
        },
        {
          "kind": "label",
          "value": "Gauss — Ex 9.12 (big numbers)"
        },
        {
          "kind": "label",
          "value": "LLL — Ex 9.21 (4-dimensional)"
        },
        {
          "kind": "label",
          "value": "Step"
        },
        {
          "kind": "label",
          "value": "Run to end"
        },
        {
          "kind": "label",
          "value": "Stuck? Reveal the known solutions"
        },
        {
          "kind": "label",
          "value": "A wrong guess: s = (1, 2, 3)"
        },
        {
          "kind": "label",
          "value": "Solution 1: s = (2, 15, 12)"
        },
        {
          "kind": "id",
          "value": "lwe-s2"
        },
        {
          "kind": "label",
          "value": "Solution 1: z = (2, -2, 0, 3, 0)"
        },
        {
          "kind": "label",
          "value": "The cheat: z = 0"
        },
        {
          "kind": "id",
          "value": "sis-z0"
        },
        {
          "kind": "label",
          "value": "Worked example from the slides"
        },
        {
          "kind": "label",
          "value": "Fresh seeded keys"
        },
        {
          "kind": "label",
          "value": "Reroll seed"
        },
        {
          "kind": "label",
          "value": "Copy experiment link"
        },
        {
          "kind": "id",
          "value": "kyber-seed"
        },
        {
          "kind": "id",
          "value": "kyber-noise"
        },
        {
          "kind": "label",
          "value": "The KEM layer: Fujisaki–Okamoto with implicit rejection, live"
        },
        {
          "kind": "label",
          "value": "Run KEM: encapsulate → decapsulate"
        },
        {
          "kind": "label",
          "value": "Tamper with the ciphertext, then decapsulate"
        },
        {
          "kind": "label",
          "value": "Replay the slides’ worked example"
        },
        {
          "kind": "label",
          "value": "Sign (live, with rejection sampling)"
        },
        {
          "kind": "id",
          "value": "dil-msg"
        },
        {
          "kind": "label",
          "value": "Verify"
        },
        {
          "kind": "label",
          "value": "Verify against a tampered message"
        },
        {
          "kind": "label",
          "value": "Tamper with z, then verify"
        }
      ]
    },
    {
      "exhibit": "shor",
      "repo": "systemslibrarian/crypto-lab-shor",
      "url": "https://systemslibrarian.github.io/crypto-lab-shor/",
      "worksheet": "https://crypto-lab.systemslibrarian.dev/teach/post-quantum/shor/",
      "source_commit": "66c0e3109427",
      "checked": "2026-09-22",
      "anchors": [
        {
          "kind": "id",
          "value": "n-input"
        },
        {
          "kind": "id",
          "value": "preset-15"
        },
        {
          "kind": "id",
          "value": "preset-91"
        },
        {
          "kind": "id",
          "value": "run-btn"
        },
        {
          "kind": "id",
          "value": "reset-btn"
        },
        {
          "kind": "id",
          "value": "step-log"
        },
        {
          "kind": "id",
          "value": "viz-panel"
        },
        {
          "kind": "id",
          "value": "aha-period"
        },
        {
          "kind": "id",
          "value": "aha-period-live"
        },
        {
          "kind": "id",
          "value": "aha-qft"
        },
        {
          "kind": "id",
          "value": "live-callout"
        }
      ]
    }
  ]
}
