)]}'
{
  "commit": "147ff45f41cf894a1153eac4f0cc9c1362fa392a",
  "tree": "46166bd19c56ec0c25a61bf6aded4fe7e10efd7c",
  "parents": [
    "2898206f28a7e8b654fc60f4eb55030a32b927b2"
  ],
  "author": {
    "name": "Michael Brown",
    "email": "mcb30@ipxe.org",
    "time": "Fri Aug 21 13:59:15 2026 +0100"
  },
  "committer": {
    "name": "Michael Brown",
    "email": "mcb30@ipxe.org",
    "time": "Mon Aug 24 16:45:22 2026 +0100"
  },
  "message": "[crypto] Add a standalone implementation of the TLS key schedules\n\nThe TLS implementation has become too complex to reason about safely,\nand needs to be split up into smaller and well-defined units before\nadding any further complexity (e.g. to support TLS version 1.3).\n\nDefine an abstraction of a TLS key schedule responsible for performing\nall cryptographic calculations required by the TLS protocol.  Three\nimplementations of this abstraction are provided:\n\n  - a TLS version 1.3 key schedule using HKDF\n\n  - a TLS version 1.2 key schedule using PRF based on P_Hash()\n\n  - a TLS version 1.0/1.1 key schedule using PRF based on\n    P_MD5()+P_SHA1()\n\nTest cases are included for the HKDF key schedule using the example\nknown-working handshake traces provided in RFC 8448, and for the\nearlier key schedules using manually constructed dummy minimal tests\n(with non-functional handshake records) that at least guard against\nfuture regressions.\n\nThe separation of concerns will allow the TLS code to become merely a\n(still fairly complex) protocol engine, with the responsibility for\nall cryptographic calculations being delegated to the key schedule\nimplementation.\n\nSigned-off-by: Michael Brown \u003cmcb30@ipxe.org\u003e\n",
  "tree_diff": [
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "1cf2f3d83c14958fd704c0778d1bb47a0c93d8ce",
      "new_mode": 33188,
      "new_path": "src/crypto/tlskey.c"
    },
    {
      "type": "modify",
      "old_id": "4e36d64628f0cdb0e2d20d623e71703aee163c89",
      "old_mode": 33188,
      "old_path": "src/include/ipxe/errfile.h",
      "new_id": "0e908d957e8cbcbec809a1c18b4ae6ad5b552454",
      "new_mode": 33188,
      "new_path": "src/include/ipxe/errfile.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "ed8de3cf6c42294b189ba90d9926a893d5c159ef",
      "new_mode": 33188,
      "new_path": "src/include/ipxe/tlskey.h"
    },
    {
      "type": "modify",
      "old_id": "f183cba15b37a7fef74741dbeb6c9c9a65cbb74d",
      "old_mode": 33188,
      "old_path": "src/tests/tests.c",
      "new_id": "8a048e54e85b194c90c0ab6b618ad0469134a2bb",
      "new_mode": 33188,
      "new_path": "src/tests/tests.c"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "b3ca5f9905c0416c60ca6d8d953629cb348c2e0e",
      "new_mode": 33188,
      "new_path": "src/tests/tlskey_test.c"
    }
  ]
}
