Rename ECDH benchmark -> ECDHComputeKey and add ECDHKeyGen.

This makes clearer what the benchmarks measure, and also allows tracking
keygen performance separately as well.

This is a follow-up to commit ed2f7e8c26006ff9284279702708797b46d590d6.

Overview:

```
--------------------------------------------------------------------------------
Benchmark                                      Time             CPU   Iterations
--------------------------------------------------------------------------------
BM_SpeedECDHKeyGen/p224/threads:1          86029 ns        86029 ns         8127
BM_SpeedECDHKeyGen/p256/threads:1           7060 ns         7058 ns        98374
BM_SpeedECDHKeyGen/p384/threads:1         309585 ns       309301 ns         2267
BM_SpeedECDHKeyGen/p521/threads:1         776386 ns       775704 ns          899
BM_SpeedECDHComputeKey/p224/threads:1      91222 ns        91195 ns         7664
BM_SpeedECDHComputeKey/p256/threads:1      39382 ns        39329 ns        17586
BM_SpeedECDHComputeKey/p384/threads:1     333345 ns       333123 ns         2092
BM_SpeedECDHComputeKey/p521/threads:1     848211 ns       846023 ns          828
BM_SpeedECDHEphemeral/p224/threads:1      183712 ns       183670 ns         3809
BM_SpeedECDHEphemeral/p256/threads:1       50315 ns        50290 ns        13886
BM_SpeedECDHEphemeral/p384/threads:1      666594 ns       666588 ns         1046
BM_SpeedECDHEphemeral/p521/threads:1     1692489 ns      1692147 ns          414
```

Change-Id: I562a6b51dd4d75dc559a70375b437f416a6a6964
Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/101087
Auto-Submit: Rudolf Polzer <rpolzer@google.com>
Commit-Queue: David Benjamin <davidben@google.com>
Reviewed-by: David Benjamin <davidben@google.com>
diff --git a/bench/ecdh.cc b/bench/ecdh.cc
index 07ea2ee..71099a8 100644
--- a/bench/ecdh.cc
+++ b/bench/ecdh.cc
@@ -30,7 +30,20 @@
 static constexpr size_t kMaxCoordinateSize = 66;
 static constexpr size_t kMaxPointBytes = 1 + 2 * kMaxCoordinateSize;
 
-void BM_SpeedECDH(benchmark::State &state, const EC_GROUP *group) {
+void BM_SpeedECDHKeyGen(benchmark::State &state, const EC_GROUP *group) {
+  for (auto _ : state) {
+    UniquePtr<EC_KEY> key(EC_KEY_new());
+    if (!key || !EC_KEY_set_group(key.get(), group) ||
+        !EC_KEY_generate_key(key.get())) {
+      state.SkipWithError("self keygen failed.");
+      return;
+    }
+
+    benchmark::DoNotOptimize(key.get());
+  }
+}
+
+void BM_SpeedECDHComputeKey(benchmark::State &state, const EC_GROUP *group) {
   UniquePtr<EC_KEY> peer_key(EC_KEY_new());
   if (!peer_key || !EC_KEY_set_group(peer_key.get(), group) ||
       !EC_KEY_generate_key(peer_key.get())) {
@@ -109,6 +122,7 @@
     benchmark::ClobberMemory();
 
     // Generate an ephemeral keypair.
+    // This part is basically `EC_KEY_generate_key`.
     UniquePtr<BIGNUM> priv(BN_new());
     UniquePtr<EC_POINT> pub(EC_POINT_new(group));
     if (!priv || !pub ||
@@ -119,6 +133,7 @@
       return;
     }
 
+    // Serialize the public key to bytes.
     ScopedCBB cbb;
     if (!CBB_init(cbb.get(), kMaxPointBytes) ||
         !EC_POINT_point2cbb(cbb.get(), group, pub.get(),
@@ -128,7 +143,7 @@
     }
     benchmark::DoNotOptimize(CBB_data(cbb.get()));
 
-    // Parse the peer's public key point and compute the shared secret.
+    // Parse the peer's public key point.
     UniquePtr<EC_POINT> peer_point(EC_POINT_new(group));
     UniquePtr<EC_POINT> result(EC_POINT_new(group));
     UniquePtr<BIGNUM> x(BN_new());
@@ -145,6 +160,8 @@
       return;
     }
 
+    // Compute the shared secret.
+    // This part is basically `ECDH_compute_key`.
     if (!EC_POINT_mul(group, result.get(), nullptr, peer_point.get(),
                       priv.get(), nullptr) ||
         !EC_POINT_get_affine_coordinates_GFp(group, result.get(), x.get(),
@@ -164,13 +181,22 @@
 }
 
 BSSL_BENCH_LAZY_REGISTER() {
-  BENCHMARK_CAPTURE(BM_SpeedECDH, p224, EC_group_p224())
+  BENCHMARK_CAPTURE(BM_SpeedECDHKeyGen, p224, EC_group_p224())
       ->Apply(bench::SetThreads);
-  BENCHMARK_CAPTURE(BM_SpeedECDH, p256, EC_group_p256())
+  BENCHMARK_CAPTURE(BM_SpeedECDHKeyGen, p256, EC_group_p256())
       ->Apply(bench::SetThreads);
-  BENCHMARK_CAPTURE(BM_SpeedECDH, p384, EC_group_p384())
+  BENCHMARK_CAPTURE(BM_SpeedECDHKeyGen, p384, EC_group_p384())
       ->Apply(bench::SetThreads);
-  BENCHMARK_CAPTURE(BM_SpeedECDH, p521, EC_group_p521())
+  BENCHMARK_CAPTURE(BM_SpeedECDHKeyGen, p521, EC_group_p521())
+      ->Apply(bench::SetThreads);
+
+  BENCHMARK_CAPTURE(BM_SpeedECDHComputeKey, p224, EC_group_p224())
+      ->Apply(bench::SetThreads);
+  BENCHMARK_CAPTURE(BM_SpeedECDHComputeKey, p256, EC_group_p256())
+      ->Apply(bench::SetThreads);
+  BENCHMARK_CAPTURE(BM_SpeedECDHComputeKey, p384, EC_group_p384())
+      ->Apply(bench::SetThreads);
+  BENCHMARK_CAPTURE(BM_SpeedECDHComputeKey, p521, EC_group_p521())
       ->Apply(bench::SetThreads);
 
   BENCHMARK_CAPTURE(BM_SpeedECDHEphemeral, p224, EC_group_p224())