bench: add internal benchmark for `secp256k1_fe_normalize_var`
What changed, and why it matters
This commit only adds a new internal performance benchmark for a low-level math helper function (secp256k1_fe_normalize_var). It does not change any cryptographic logic, library behavior, or user-facing code. There is no security issue here.
No action required. This is a benign benchmark-only change.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The diff adds bench_field_normalize_var() to src/bench_internal.c and registers it under the existing ‘normalize’ benchmark group. The benchmark repeatedly calls secp256k1_fe_normalize_var() on a field element. The function being benchmarked is unchanged; only benchmark harness code is added. A comment notes the benchmark measures the optimistic/common path.
Changed components
src/bench_internal.cInspect captured patch +12 / −0
diff --git a/src/bench_internal.c b/src/bench_internal.c
index f3c1be9..453f3bb 100644
--- a/src/bench_internal.c
+++ b/src/bench_internal.c
@@ -194,6 +194,17 @@ static void bench_field_normalize(void* arg, int iters) {
}
}
+static void bench_field_normalize_var(void* arg, int iters) {
+ int i;
+ bench_inv *data = (bench_inv*)arg;
+
+ /* Note that this benchmark measures the optimistic path. The worst-case path with the final
+ reduction is very unlikely to be needed, so this is representative of the common case. */
+ for (i = 0; i < iters; i++) {
+ secp256k1_fe_normalize_var(&data->fe[0]);
+ }
+}
+
static void bench_field_normalize_weak(void* arg, int iters) {
int i;
bench_inv *data = (bench_inv*)arg;
@@ -421,6 +432,7 @@ int main(int argc, char **argv) {
if (d || have_flag(argc, argv, "field") || have_flag(argc, argv, "half")) run_benchmark("field_half", bench_field_half, bench_setup, NULL, &data, 10, iters*100);
if (d || have_flag(argc, argv, "field") || have_flag(argc, argv, "normalize")) run_benchmark("field_normalize", bench_field_normalize, bench_setup, NULL, &data, 10, iters*100);
+ if (d || have_flag(argc, argv, "field") || have_flag(argc, argv, "normalize")) run_benchmark("field_normalize_var", bench_field_normalize_var, bench_setup, NULL, &data, 10, iters*100);
if (d || have_flag(argc, argv, "field") || have_flag(argc, argv, "normalize")) run_benchmark("field_normalize_weak", bench_field_normalize_weak, bench_setup, NULL, &data, 10, iters*100);
if (d || have_flag(argc, argv, "field") || have_flag(argc, argv, "sqr")) run_benchmark("field_sqr", bench_field_sqr, bench_setup, NULL, &data, 10, iters*10);
if (d || have_flag(argc, argv, "field") || have_flag(argc, argv, "mul")) run_benchmark("field_mul", bench_field_mul, bench_setup, NULL, &data, 10, iters*10);
Why this scored 15/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.