)]}'
{
  "commit": "327378a764064b5edbc8bbebbb95980234892d04",
  "tree": "96cbc2ec766f36ef6fa99a74713247a78bf7109b",
  "parents": [
    "449d2acf3d3a41ff1d6e3a74c2f122b70601dd94"
  ],
  "author": {
    "name": "Michael Brown",
    "email": "mcb30@ipxe.org",
    "time": "Tue Jun 23 12:46:55 2026 +0100"
  },
  "committer": {
    "name": "Michael Brown",
    "email": "mcb30@ipxe.org",
    "time": "Tue Jun 23 13:24:22 2026 +0100"
  },
  "message": "[crypto] Generalise implementation of Merkle-Damgård hash algorithms\n\nAll of our current digest algorithms (MD4, MD5, SHA-1, and the SHA-2\nfamily) use a Merkle-Damgård construction, with only the compression\nfunction, the initial digest values, the field sizes, and the\nendianness differing between algorithms.\n\nProvide a common implementation for Merkle-Damgård hash algorithms to\nreduce code size.  Values are now held as host-endian quantities, with\nany swapping performed byte-by-byte as data is accumulated (using a\ncompile-time constant that is XORed with the byte index).\n\nFor the SHA family of algorithms, the values w[] are now calculated\niteratively as we progress through the main loop: this substantially\nreduces the stack space required for the compression function.\n\nSigned-off-by: Michael Brown \u003cmcb30@ipxe.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "e644bb195f524ae29d902a160536c6fb788a7d82",
      "old_mode": 33188,
      "old_path": "src/crypto/md4.c",
      "new_id": "7a3aa2c7b04874678a9d3be8284ecfcaed788638",
      "new_mode": 33188,
      "new_path": "src/crypto/md4.c"
    },
    {
      "type": "modify",
      "old_id": "06d4c95289e6606a20d58d38805b32b5a1cac7fc",
      "old_mode": 33188,
      "old_path": "src/crypto/md5.c",
      "new_id": "ce467559ee524bc37577013d41e4fe609f02c770",
      "new_mode": 33188,
      "new_path": "src/crypto/md5.c"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "f282e473f08336707a887089f2700a85e63c72d2",
      "new_mode": 33188,
      "new_path": "src/crypto/mdhash.c"
    },
    {
      "type": "modify",
      "old_id": "d2b3c62ea614e1d518b486a93a401c0531de8837",
      "old_mode": 33188,
      "old_path": "src/crypto/sha1.c",
      "new_id": "359dc4b938aa6045c21435f73a76bfa38ad4a65f",
      "new_mode": 33188,
      "new_path": "src/crypto/sha1.c"
    },
    {
      "type": "modify",
      "old_id": "4eb55051ee5e4aea631f3bbcf0432e212995b9c3",
      "old_mode": 33188,
      "old_path": "src/crypto/sha224.c",
      "new_id": "a71b3dc10a9a3fe2ae55be7656287e8b138e8215",
      "new_mode": 33188,
      "new_path": "src/crypto/sha224.c"
    },
    {
      "type": "modify",
      "old_id": "9d87ca10a394c2b19d860de3ecd4fe082ceaaaec",
      "old_mode": 33188,
      "old_path": "src/crypto/sha256.c",
      "new_id": "6e203d428c637bf33176e5cb86d6f0250411e2e0",
      "new_mode": 33188,
      "new_path": "src/crypto/sha256.c"
    },
    {
      "type": "modify",
      "old_id": "fd624cc5176896d98b36a12f7e2ef50dcc2ec515",
      "old_mode": 33188,
      "old_path": "src/crypto/sha384.c",
      "new_id": "5c3384436b3d53eb9eefd9e36f3980dc17c58dbd",
      "new_mode": 33188,
      "new_path": "src/crypto/sha384.c"
    },
    {
      "type": "modify",
      "old_id": "5f6276095a0cfbd260152b1b5d444773696974b3",
      "old_mode": 33188,
      "old_path": "src/crypto/sha512.c",
      "new_id": "12bc881a2a2d9ead4b3e7376b1cb97bf487c4896",
      "new_mode": 33188,
      "new_path": "src/crypto/sha512.c"
    },
    {
      "type": "modify",
      "old_id": "d9e0eb18d076c8f6967a7bc9bd09d8564643fd50",
      "old_mode": 33188,
      "old_path": "src/crypto/sha512_224.c",
      "new_id": "c622ff33ae6519a59134df706792c163be563ab0",
      "new_mode": 33188,
      "new_path": "src/crypto/sha512_224.c"
    },
    {
      "type": "modify",
      "old_id": "c8fd1a47fc29a05e3c6a43e4be9621bd736901cd",
      "old_mode": 33188,
      "old_path": "src/crypto/sha512_256.c",
      "new_id": "4c0b0418d28ef6159d8a540bbb4f93ba68721318",
      "new_mode": 33188,
      "new_path": "src/crypto/sha512_256.c"
    },
    {
      "type": "modify",
      "old_id": "60512993b9439f937befad35d720167dbead0839",
      "old_mode": 33188,
      "old_path": "src/include/ipxe/md4.h",
      "new_id": "bd863ba217e6e2997feb62d10b3c0f67212ea75a",
      "new_mode": 33188,
      "new_path": "src/include/ipxe/md4.h"
    },
    {
      "type": "modify",
      "old_id": "275e63824994af478c256d01a8fa2e62a9c402d6",
      "old_mode": 33188,
      "old_path": "src/include/ipxe/md5.h",
      "new_id": "cad594e12c833b919f737d496d38640bed8b0336",
      "new_mode": 33188,
      "new_path": "src/include/ipxe/md5.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "3589b4e62eaef0a4a37d8142bb98de5535fc4353",
      "new_mode": 33188,
      "new_path": "src/include/ipxe/mdhash.h"
    },
    {
      "type": "modify",
      "old_id": "33b07ecc3343bbd0ff7561a314ef1938dde6ebe0",
      "old_mode": 33188,
      "old_path": "src/include/ipxe/sha1.h",
      "new_id": "56c5146d157f91a526a64f931cb546725509928d",
      "new_mode": 33188,
      "new_path": "src/include/ipxe/sha1.h"
    },
    {
      "type": "modify",
      "old_id": "9f8864806bf73f3be94a10e605cf27e1e49fff1c",
      "old_mode": 33188,
      "old_path": "src/include/ipxe/sha256.h",
      "new_id": "6cf65ec909304ae3d297f1655179ff4c0c786d35",
      "new_mode": 33188,
      "new_path": "src/include/ipxe/sha256.h"
    },
    {
      "type": "modify",
      "old_id": "e7ac87389dd662e5c9723e47357872d27b5e7bd6",
      "old_mode": 33188,
      "old_path": "src/include/ipxe/sha512.h",
      "new_id": "fc3d8596b27ce523815b5e9a98cdbfe2c43100e2",
      "new_mode": 33188,
      "new_path": "src/include/ipxe/sha512.h"
    }
  ]
}
