)]}'
{
  "commit": "70ca6bc24be103dabd68e448cd3af29b929b771d",
  "tree": "94623ac86b4bcb440269c101a2d821ede31dbb84",
  "parents": [
    "251ee0b761b165ce815c760065dba4b5721e8d06"
  ],
  "author": {
    "name": "David Benjamin",
    "email": "davidben@google.com",
    "time": "Wed Nov 29 15:32:33 2023 -0500"
  },
  "committer": {
    "name": "Boringssl LUCI CQ",
    "email": "boringssl-scoped@luci-project-accounts.iam.gserviceaccount.com",
    "time": "Wed Nov 29 21:57:51 2023 +0000"
  },
  "message": "Add CRYPTO_{addc,subc}_* functions to crypto/internal.h\n\nI\u0027m getting tired of having to rederive the best way to convince the\ncompiler to emit addc and subb functions. Do it once and use the Clang\nbuiltins when available, because compilers seem to generally be terrible\nat this. (See https://github.com/llvm/llvm-project/issues/73847.)\n\nThe immediate trigger was the FIPS 186-2 PRF, which completely doesn\u0027t\nmatter, but reminded me of this mess.\n\nAs far as naming and calling conventions go, I just mimicked the Clang\nones. In doing so, also use the Clang builtins when available, which\nhelps Clang x86_64 no-asm builds a bit:\n\nBefore:\nDid 704 ECDH P-384 operations in 1018920us (690.9 ops/sec)\nDid 1353 ECDSA P-384 signing operations in 1077927us (1255.2 ops/sec)\nDid 1190 ECDSA P-384 verify operations in 1020788us (1165.8 ops/sec)\nDid 784 RSA 2048 signing operations in 1058644us (740.6 ops/sec)\nDid 34000 RSA 2048 verify (same key) operations in 1011854us (33601.7 ops/sec)\nDid 30000 RSA 2048 verify (fresh key) operations in 1005974us (29821.8 ops/sec)\nDid 7799 RSA 2048 private key parse operations in 1061203us (7349.2 ops/sec)\nDid 130 RSA 4096 signing operations in 1082617us (120.1 ops/sec)\nDid 10472 RSA 4096 verify (same key) operations in 1082857us (9670.7 ops/sec)\nDid 9086 RSA 4096 verify (fresh key) operations in 1039164us (8743.6 ops/sec)\nDid 2574 RSA 4096 private key parse operations in 1078946us (2385.7 ops/sec)\n\nAfter:\nDid 775 ECDH P-384 operations in 1008465us (768.5 ops/sec)\nDid 1474 ECDSA P-384 signing operations in 1062096us (1387.8 ops/sec)\nDid 1485 ECDSA P-384 verify operations in 1086574us (1366.7 ops/sec)\nDid 812 RSA 2048 signing operations in 1043705us (778.0 ops/sec)\nDid 36000 RSA 2048 verify (same key) operations in 1005643us (35798.0 ops/sec)\nDid 33000 RSA 2048 verify (fresh key) operations in 1028256us (32093.2 ops/sec)\nDid 10087 RSA 2048 private key parse operations in 1018067us (9908.0 ops/sec)\nDid 132 RSA 4096 signing operations in 1033049us (127.8 ops/sec)\nDid 11000 RSA 4096 verify (same key) operations in 1070502us (10275.6 ops/sec)\nDid 9812 RSA 4096 verify (fresh key) operations in 1047618us (9366.0 ops/sec)\nDid 3245 RSA 4096 private key parse operations in 1083247us (2995.6 ops/sec)\n\nBut this is also a no-asm build, so we don\u0027t really care. Builds with\nassembly, broadly, do not use these codepaths. The exception is the\ngeneric ECC code on 32-bit Arm, which has a few mod-add functions, and\nwe don\u0027t have 32-bit Arm bn_add_words assembly:\n\nBefore:\nDid 168 ECDH P-384 operations in 1003229us (167.5 ops/sec)\nDid 330 ECDSA P-384 signing operations in 1076600us (306.5 ops/sec)\nDid 319 ECDSA P-384 verify operations in 1080750us (295.2 ops/sec)\nAfter:\nDid 195 ECDH P-384 operations in 1026458us (190.0 ops/sec)\nDid 350 ECDSA P-384 signing operations in 1005392us (348.1 ops/sec)\nDid 341 ECDSA P-384 verify operations in 1008486us (338.1 ops/sec)\n\nChange-Id: Ia3fa51e59398224b9c39180e1d856bb412aa1246\nReviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/64309\nReviewed-by: Adam Langley \u003cagl@google.com\u003e\nCommit-Queue: David Benjamin \u003cdavidben@google.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "38a845062e6eb83aec2164cbe78e248f462f94a4",
      "old_mode": 33188,
      "old_path": "crypto/fipsmodule/bn/add.c",
      "new_id": "1a8785e52005a391982f7e39d6d95d26e62b3e5f",
      "new_mode": 33188,
      "new_path": "crypto/fipsmodule/bn/add.c"
    },
    {
      "type": "modify",
      "old_id": "e4f4518e94949d991735d0658b4e33772fc8ff49",
      "old_mode": 33188,
      "old_path": "crypto/fipsmodule/bn/generic.c",
      "new_id": "247398fddbc8f56b26861af79079ec353ecb18c4",
      "new_mode": 33188,
      "new_path": "crypto/fipsmodule/bn/generic.c"
    },
    {
      "type": "modify",
      "old_id": "fe4e4d7aa06a8556d2e4cbd07a8deadb988571e6",
      "old_mode": 33188,
      "old_path": "crypto/fipsmodule/bn/mul.c",
      "new_id": "7537899c0e0548275930ef5d52c5ffe30bdc79be",
      "new_mode": 33188,
      "new_path": "crypto/fipsmodule/bn/mul.c"
    },
    {
      "type": "modify",
      "old_id": "35dda2fa2bba78ba3732bb4fd17771b5d7611d7b",
      "old_mode": 33188,
      "old_path": "crypto/fipsmodule/sha/sha1.c",
      "new_id": "4baeed669a92f26e632d2d1c602ed8558e950934",
      "new_mode": 33188,
      "new_path": "crypto/fipsmodule/sha/sha1.c"
    },
    {
      "type": "modify",
      "old_id": "4de4597de06d997de5a86be5bed4da2c1688844b",
      "old_mode": 33188,
      "old_path": "crypto/internal.h",
      "new_id": "f2db41c41479c4bb8ab5c3ebc133a04c2b6b5b07",
      "new_mode": 33188,
      "new_path": "crypto/internal.h"
    }
  ]
}
