)]}'
{
  "commit": "bfa89261e59df17dc365936fda026bcf85f606a9",
  "tree": "48c99d7b9f1dbd970cf56159134813b482fbf182",
  "parents": [
    "53c86c1a00992a3e0f34edd31dd450a66f564a0c"
  ],
  "author": {
    "name": "Anthony Rocha",
    "email": "anthony.rocha@amd.com",
    "time": "Tue Jun 30 13:03:11 2026 -0700"
  },
  "committer": {
    "name": "Anthony Rocha",
    "email": "116300062+rusty1968@users.noreply.github.com",
    "time": "Thu Jul 16 06:42:47 2026 -0700"
  },
  "message": "ast10x0-hace: eliminate remaining panic_is_possible in digest/HMAC path\n\nThe no_panics_test scans the compiled ELF and fails if any panic path is\nreachable. Two root causes remained in the SHA-2 / HMAC code linked into\nthe hace_sha256 binary:\n\n- div_by_zero: chunks_exact(4).zip(..) in load_iv / digest_from_context.\n  ChunksExact stores its chunk size as a runtime field, so Zip::new emits\n  a len / chunk_size division the optimizer cannot prove non-zero.\n  Replaced with index-stride loops over length-proven [u8; 4] arrays.\n\n- copy_from_slice len_mismatch_fail: the staging copies in\n  HaceDigest::update and HaceHmacCtx::update copy between two range-sliced\n  \u0026[u8] of equal-by-construction length the optimizer cannot prove equal.\n  Replaced with zip element-wise copies (no length assert, no division).\n\nAlso hardened the AES IV copies (AesCipher::crypt, AesSkin CBC chaining)\nto use \u003c[u8; AES_BLOCK]\u003e::try_from array assignment instead of\ncopy_from_slice, per the project no-panic patterns.\n\nno_panics_test now PASSES; nm shows no panic_is_possible, len_mismatch_fail,\nor div_by_zero symbols.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "4c906d1cf5b4895a6673b25ce6437019baf4bb14",
      "old_mode": 33188,
      "old_path": "target/ast10x0/peripherals/hace/aes.rs",
      "new_id": "19ca4a457255fae4ee698a935544fcb99e5f3231",
      "new_mode": 33188,
      "new_path": "target/ast10x0/peripherals/hace/aes.rs"
    },
    {
      "type": "modify",
      "old_id": "19fc07c27738ad94a077ee32375b7fcd9ef2c5bc",
      "old_mode": 33188,
      "old_path": "target/ast10x0/peripherals/hace/digest.rs",
      "new_id": "e0b43b7000aa58816b193766b2e061b47b7e10e6",
      "new_mode": 33188,
      "new_path": "target/ast10x0/peripherals/hace/digest.rs"
    },
    {
      "type": "modify",
      "old_id": "3e38631bab38910a60a6475fc0a1f6028b72c310",
      "old_mode": 33188,
      "old_path": "target/ast10x0/peripherals/hace/helpers.rs",
      "new_id": "c4e6ce8919eee316c16e7b0c90a6a53ba90a7625",
      "new_mode": 33188,
      "new_path": "target/ast10x0/peripherals/hace/helpers.rs"
    },
    {
      "type": "modify",
      "old_id": "9cfbcf641fe8d86e480c0dad1b3d66751ec37adf",
      "old_mode": 33188,
      "old_path": "target/ast10x0/peripherals/hace/hmac.rs",
      "new_id": "d82f6dec1c9d521b6fc24e1f65b44d775be7b3f9",
      "new_mode": 33188,
      "new_path": "target/ast10x0/peripherals/hace/hmac.rs"
    }
  ]
}
