)]}'
{
  "commit": "1c79e9cc2aa030d9019ef0ffddf3e93feaa5ccde",
  "tree": "6df4621d87e422ee92b0a0c645232a852de786fd",
  "parents": [
    "ebbbd97eff2edd7d1ef2ad5b14f22b5751c4b2ea"
  ],
  "author": {
    "name": "Alex Gaynor",
    "email": "alex.gaynor@gmail.com",
    "time": "Fri Sep 11 01:57:43 2026"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Fri Sep 11 01:57:43 2026"
  },
  "message": "Only pre-key one cipher context for direction-independent AEADs (#15614)\n\n* Key a single base context in EvpCipherAead\n\nPreviously every EvpCipherAead pre-keyed two contexts, one for\nencryption and one for decryption. Most of our AEADs (GCM, ChaCha20-\nPoly1305, SIV, GCM-SIV) only use the forward block cipher, so a context\nkeyed for encryption can be switched to decryption by re-initializing\nit with no cipher or key, which we already do per-operation to set the\nnonce. Only key one context in that case.\n\nOCB is the exception: OpenSSL picks its hardware stream routine at\nkey-setup time based on the direction, so flipping a keyed context\nyields wrong output. It keeps a separate pre-keyed decryption context.\n\nCo-Authored-By: Claude Fable 5.1 \u003cnoreply@anthropic.com\u003e\nClaude-Session: https://claude.ai/code/session_01NMHEsFraACZfyKod2vniDh\n\n* Model AEAD pre-keyed contexts by key schedule kind\n\nReplace the \"base context plus optional decryption context\" shape with\nan explicit KeySchedule enum. A cipher\u0027s key setup is either direction\nindependent (GCM, ChaCha20-Poly1305, SIV, GCM-SIV), in which case one\nkeyed context serves both directions, or per-direction (OCB), in which\ncase one context is keyed for each. CCM keeps no pre-keyed contexts.\n\nThis makes it clear the single-context case is not an assumption about\nwhich direction is more common.\n\nCo-Authored-By: Claude Fable 5.1 \u003cnoreply@anthropic.com\u003e\nClaude-Session: https://claude.ai/code/session_01NMHEsFraACZfyKod2vniDh\n\n* Gate per-direction key schedule on backends that support OCB\n\nOCB is the only cipher with a direction-dependent key schedule, and it\nis unsupported on LibreSSL, BoringSSL, and AWS-LC, so the PerDirection\nvariants were dead code there and failed clippy with -D warnings.\n\nCo-Authored-By: Claude Fable 5.1 \u003cnoreply@anthropic.com\u003e\nClaude-Session: https://claude.ai/code/session_01NMHEsFraACZfyKod2vniDh\n\n---------\n\nCo-authored-by: Claude Fable 5.1 \u003cnoreply@anthropic.com\u003e",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "47528a55d337bb8389384952c9ea1d713d9f9b38",
      "old_mode": 33188,
      "old_path": "src/rust/src/backend/aead.rs",
      "new_id": "2289d1c3f11f10e4c33bd1956a54f38b38c8c66a",
      "new_mode": 33188,
      "new_path": "src/rust/src/backend/aead.rs"
    }
  ]
}
