{
  "module": "symmetric",
  "title": "Security & symmetric encryption",
  "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": "aes-modes",
      "repo": "systemslibrarian/crypto-lab-aes-modes",
      "url": "https://systemslibrarian.github.io/crypto-lab-aes-modes/",
      "worksheet": "https://crypto-lab.systemslibrarian.dev/teach/symmetric/aes-modes/",
      "source_commit": "cbfb1b4dfa2c",
      "checked": "2026-09-22",
      "anchors": [
        {
          "kind": "id",
          "value": "tab-compare"
        },
        {
          "kind": "id",
          "value": "compare-plaintext"
        },
        {
          "kind": "id",
          "value": "compare-btn"
        },
        {
          "kind": "id",
          "value": "compare-output"
        },
        {
          "kind": "id",
          "value": "tab-ecb"
        },
        {
          "kind": "id",
          "value": "ecb-plaintext"
        },
        {
          "kind": "id",
          "value": "ecb-encrypt-btn"
        },
        {
          "kind": "id",
          "value": "ecb-decrypt-tamper-btn"
        },
        {
          "kind": "id",
          "value": "ecb-decrypt-output"
        },
        {
          "kind": "id",
          "value": "tab-cbc"
        },
        {
          "kind": "id",
          "value": "cbc-plaintext"
        },
        {
          "kind": "id",
          "value": "cbc-encrypt-btn"
        },
        {
          "kind": "id",
          "value": "cbc-bitflip-btn"
        },
        {
          "kind": "id",
          "value": "cbc-targeted-btn"
        },
        {
          "kind": "id",
          "value": "cbc-vuln-content"
        },
        {
          "kind": "id",
          "value": "cbc-decrypt-tamper-btn"
        },
        {
          "kind": "id",
          "value": "cbc-decrypt-output"
        },
        {
          "kind": "id",
          "value": "tab-ctr"
        },
        {
          "kind": "id",
          "value": "ctr-plaintext"
        },
        {
          "kind": "id",
          "value": "ctr-encrypt-btn"
        },
        {
          "kind": "id",
          "value": "ctr-decrypt-tamper-btn"
        },
        {
          "kind": "id",
          "value": "ctr-decrypt-output"
        },
        {
          "kind": "id",
          "value": "tab-gcm"
        },
        {
          "kind": "id",
          "value": "gcm-plaintext"
        },
        {
          "kind": "id",
          "value": "gcm-encrypt-btn"
        },
        {
          "kind": "id",
          "value": "gcm-tamper-btn"
        },
        {
          "kind": "id",
          "value": "gcm-tamper-content"
        },
        {
          "kind": "id",
          "value": "tab-ccm"
        },
        {
          "kind": "id",
          "value": "ccm-plaintext"
        },
        {
          "kind": "id",
          "value": "ccm-encrypt-btn"
        },
        {
          "kind": "id",
          "value": "ccm-tamper-btn"
        },
        {
          "kind": "id",
          "value": "ccm-tamper-content"
        }
      ]
    },
    {
      "exhibit": "hidden-bit",
      "repo": "systemslibrarian/crypto-lab-hidden-bit",
      "url": "https://systemslibrarian.github.io/crypto-lab-hidden-bit/",
      "worksheet": "https://crypto-lab.systemslibrarian.dev/teach/symmetric/hidden-bit/",
      "source_commit": "00705ccbf695",
      "checked": "2026-09-22",
      "anchors": [
        {
          "kind": "id",
          "value": "tab-cpa"
        },
        {
          "kind": "id",
          "value": "cpa-scheme"
        },
        {
          "kind": "id",
          "value": "cpa-scheme-detail"
        },
        {
          "kind": "id",
          "value": "cpa-adversary"
        },
        {
          "kind": "id",
          "value": "cpa-step"
        },
        {
          "kind": "id",
          "value": "cpa-coin"
        },
        {
          "kind": "id",
          "value": "cpa-ciphertext"
        },
        {
          "kind": "id",
          "value": "cpa-trials"
        },
        {
          "kind": "id",
          "value": "cpa-run"
        },
        {
          "kind": "id",
          "value": "cpa-retirement"
        },
        {
          "kind": "id",
          "value": "cpa-wins"
        },
        {
          "kind": "id",
          "value": "cpa-advantage"
        },
        {
          "kind": "id",
          "value": "cpa-interval"
        },
        {
          "kind": "id",
          "value": "cpa-verdict"
        },
        {
          "kind": "id",
          "value": "cbc-negative"
        },
        {
          "kind": "id",
          "value": "cbc-negative-title"
        }
      ]
    },
    {
      "exhibit": "nonce-collision",
      "repo": "systemslibrarian/crypto-lab-nonce-collision",
      "url": "https://systemslibrarian.github.io/crypto-lab-nonce-collision/",
      "worksheet": "https://crypto-lab.systemslibrarian.dev/teach/symmetric/nonce-collision/",
      "source_commit": "d23b6ec02c35",
      "checked": "2026-09-22",
      "anchors": [
        {
          "kind": "id",
          "value": "reuse-ctr"
        },
        {
          "kind": "id",
          "value": "run-ctr"
        },
        {
          "kind": "id",
          "value": "out-ctr"
        },
        {
          "kind": "id",
          "value": "reuse-cbc"
        },
        {
          "kind": "id",
          "value": "run-cbc"
        },
        {
          "kind": "id",
          "value": "out-cbc"
        },
        {
          "kind": "id",
          "value": "run-all-reuse"
        },
        {
          "kind": "id",
          "value": "out-gcm"
        },
        {
          "kind": "id",
          "value": "out-chacha"
        },
        {
          "kind": "id",
          "value": "cancel-gcm-btn"
        },
        {
          "kind": "id",
          "value": "cancel-gcm-run"
        },
        {
          "kind": "id",
          "value": "bits-32"
        },
        {
          "kind": "id",
          "value": "bits-96"
        },
        {
          "kind": "id",
          "value": "nonce-count"
        },
        {
          "kind": "id",
          "value": "nonce-prob"
        },
        {
          "kind": "id",
          "value": "nonce-5050"
        }
      ]
    },
    {
      "exhibit": "otp-vault",
      "repo": "systemslibrarian/crypto-lab-otp-vault",
      "url": "https://systemslibrarian.github.io/crypto-lab-otp-vault/",
      "worksheet": "https://crypto-lab.systemslibrarian.dev/teach/symmetric/otp-vault/",
      "source_commit": "6b2bb1c14f73",
      "checked": "2026-09-22",
      "anchors": [
        {
          "kind": "id",
          "value": "ps-target"
        },
        {
          "kind": "id",
          "value": "ttp-reuse-key"
        },
        {
          "kind": "id",
          "value": "ttp-p1"
        },
        {
          "kind": "id",
          "value": "ttp-p2"
        },
        {
          "kind": "id",
          "value": "ttp-reroll-keys"
        },
        {
          "kind": "id",
          "value": "ttp-crib-word"
        },
        {
          "kind": "id",
          "value": "ttp-crib-target"
        },
        {
          "kind": "id",
          "value": "ttp-crib-offset"
        },
        {
          "kind": "id",
          "value": "ttp-nudge-left"
        },
        {
          "kind": "id",
          "value": "ttp-nudge-right"
        },
        {
          "kind": "id",
          "value": "ttp-pin"
        },
        {
          "kind": "id",
          "value": "ttp-undo"
        },
        {
          "kind": "id",
          "value": "ks-new-keystream"
        },
        {
          "kind": "id",
          "value": "import-challenge-easy"
        },
        {
          "kind": "id",
          "value": "import-challenge-medium"
        },
        {
          "kind": "id",
          "value": "import-challenge-hard"
        },
        {
          "kind": "id",
          "value": "import-challenge-control"
        },
        {
          "kind": "id",
          "value": "import-crib-word"
        },
        {
          "kind": "id",
          "value": "import-crib-target"
        },
        {
          "kind": "id",
          "value": "import-crib-offset"
        },
        {
          "kind": "id",
          "value": "import-nudge-left"
        },
        {
          "kind": "id",
          "value": "import-nudge-right"
        },
        {
          "kind": "id",
          "value": "import-pin"
        },
        {
          "kind": "id",
          "value": "import-reveal-truth"
        }
      ]
    },
    {
      "exhibit": "padding-oracle",
      "repo": "systemslibrarian/crypto-lab-padding-oracle",
      "url": "https://systemslibrarian.github.io/crypto-lab-padding-oracle/",
      "worksheet": "https://crypto-lab.systemslibrarian.dev/teach/symmetric/padding-oracle/",
      "source_commit": "3a7e02e6daeb",
      "checked": "2026-09-22",
      "anchors": [
        {
          "kind": "id",
          "value": "tab-1"
        },
        {
          "kind": "id",
          "value": "p1-craft-setup-btn"
        },
        {
          "kind": "id",
          "value": "p1-craft-byte"
        },
        {
          "kind": "id",
          "value": "p1-predict-valid-btn"
        },
        {
          "kind": "id",
          "value": "p1-predict-invalid-btn"
        },
        {
          "kind": "id",
          "value": "p1-craft-result"
        },
        {
          "kind": "id",
          "value": "tab-3"
        },
        {
          "kind": "id",
          "value": "p3-plaintext"
        },
        {
          "kind": "id",
          "value": "p3-speed"
        },
        {
          "kind": "id",
          "value": "p3-encrypt-btn"
        },
        {
          "kind": "id",
          "value": "p3-run-btn"
        },
        {
          "kind": "id",
          "value": "p3-result"
        },
        {
          "kind": "id",
          "value": "tab-4"
        },
        {
          "kind": "id",
          "value": "p4-plaintext"
        },
        {
          "kind": "id",
          "value": "p4-generate-btn"
        },
        {
          "kind": "id",
          "value": "p4-run-btn"
        },
        {
          "kind": "id",
          "value": "tab-5"
        },
        {
          "kind": "id",
          "value": "tab-6"
        },
        {
          "kind": "id",
          "value": "p6-bench-plaintext"
        },
        {
          "kind": "id",
          "value": "p6-bench-btn"
        },
        {
          "kind": "id",
          "value": "p6-bench-rows"
        },
        {
          "kind": "id",
          "value": "p6-aead-btn"
        },
        {
          "kind": "id",
          "value": "p6-tamper-btn"
        },
        {
          "kind": "id",
          "value": "p6-aead-result"
        }
      ]
    }
  ]
}
