)]}'
{
  "commit": "f958727f75b8636d48beb4e4014eb3ed3b514443",
  "tree": "b887b06eddfd75a343031a86ffc8fff83026b86b",
  "parents": [
    "4937f05ccd0b97ff5aeaa1d038cf7f6bc8f7dd36"
  ],
  "author": {
    "name": "David Benjamin",
    "email": "davidben@google.com",
    "time": "Tue Sep 21 16:33:15 2021 -0400"
  },
  "committer": {
    "name": "Adam Langley",
    "email": "agl@google.com",
    "time": "Wed Sep 22 20:59:34 2021 +0000"
  },
  "message": "Speed up constant-time base64 decoding.\n\nI was inspired to look at this again recently and noticed we could do a\nbit better. Instead of a tower of selects, rely on all the cases being\nmutually exclusive and use the ret |\u003d mask \u0026 value formulation without\nloss in clarity. We do need to fixup the invalid case slightly, but\nsince that computation is mostly independent, I\u0027m guessing the CPU and\ncompiler are able to schedule it effectively.\n\nBefore:\nDid 251000 base64 decode operations in 2002569us (159.4 MB/sec)\nAfter:\nDid 346000 base64 decode operations in 2005426us (219.5 MB/sec) [+37.7%]\n\nChange-Id: I542167202fd4e94c93dd5a2519a97bc388072c89\nReviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/49525\nReviewed-by: Adam Langley \u003cagl@google.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "349452dd4f58a5b1821daac0dde1e153c99f54b8",
      "old_mode": 33188,
      "old_path": "crypto/base64/base64.c",
      "new_id": "3d920598c475855e8611bb5bfbf6582219da8cff",
      "new_mode": 33188,
      "new_path": "crypto/base64/base64.c"
    },
    {
      "type": "modify",
      "old_id": "613e630f49865fba3885ca4a6b3e45592138d23b",
      "old_mode": 33188,
      "old_path": "tool/speed.cc",
      "new_id": "b91a4ceb72e0a5deae8ff610fdddf5e9bc0b703c",
      "new_mode": 33188,
      "new_path": "tool/speed.cc"
    }
  ]
}
