From: Eric Biggers <ebiggers@kernel.org>
To: linux-crypto@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, Ard Biesheuvel <ardb@kernel.org>,
"Jason A . Donenfeld" <Jason@zx2c4.com>,
Zhiqi Song <songzhiqi1@huawei.com>,
Longfang Liu <liulongfang@huawei.com>,
x86@kernel.org, linux-arm-kernel@lists.infradead.org,
linuxppc-dev@lists.ozlabs.org, Eric Biggers <ebiggers@kernel.org>
Subject: [PATCH 3/6] lib/crypto: tests: Add Curve25519 benchmark
Date: Mon, 1 Sep 2025 13:18:12 -0700 [thread overview]
Message-ID: <20250901201815.594177-4-ebiggers@kernel.org> (raw)
In-Reply-To: <20250901201815.594177-1-ebiggers@kernel.org>
Add a benchmark to curve25519_kunit. This brings it in line with the
other crypto KUnit tests and provides an easy way to measure
performance.
Signed-off-by: Eric Biggers <ebiggers@kernel.org>
---
lib/crypto/tests/curve25519_kunit.c | 31 +++++++++++++++++++++++++++++
1 file changed, 31 insertions(+)
diff --git a/lib/crypto/tests/curve25519_kunit.c b/lib/crypto/tests/curve25519_kunit.c
index 585f7ad3ed5f7..2e1d781563648 100644
--- a/lib/crypto/tests/curve25519_kunit.c
+++ b/lib/crypto/tests/curve25519_kunit.c
@@ -3,10 +3,11 @@
* Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
*/
#include <crypto/curve25519.h>
#include <kunit/test.h>
+#include <linux/timekeeping.h>
struct curve25519_test_vector {
u8 private[CURVE25519_KEY_SIZE];
u8 public[CURVE25519_KEY_SIZE];
u8 result[CURVE25519_KEY_SIZE];
@@ -1317,13 +1318,43 @@ static void test_curve25519_basepoint(struct kunit *test)
KUNIT_EXPECT_MEMEQ_MSG(test, out, out2, CURVE25519_KEY_SIZE,
"in=%*phN", CURVE25519_KEY_SIZE, in);
}
}
+static void benchmark_curve25519(struct kunit *test)
+{
+ const u8 *private = curve25519_test_vectors[0].private;
+ const u8 *public = curve25519_test_vectors[0].public;
+ u8 out[CURVE25519_KEY_SIZE];
+ const size_t warmup_niter = 5000;
+ const size_t benchmark_niter = 1024;
+ bool ok = true;
+ u64 t;
+
+ if (!IS_ENABLED(CONFIG_CRYPTO_LIB_BENCHMARK))
+ kunit_skip(test, "not enabled");
+
+ /* Warm-up */
+ for (size_t i = 0; i < warmup_niter; i++)
+ ok &= curve25519(out, private, public);
+
+ /* Benchmark */
+ preempt_disable();
+ t = ktime_get_ns();
+ for (size_t i = 0; i < benchmark_niter; i++)
+ ok &= curve25519(out, private, public);
+ t = ktime_get_ns() - t;
+ preempt_enable();
+ KUNIT_EXPECT_TRUE(test, ok);
+ kunit_info(test, "%llu ops/s",
+ div64_u64((u64)benchmark_niter * 1000000000, t ?: 1));
+}
+
static struct kunit_case curve25519_test_cases[] = {
KUNIT_CASE(test_curve25519),
KUNIT_CASE(test_curve25519_basepoint),
+ KUNIT_CASE(benchmark_curve25519),
{},
};
static struct kunit_suite curve25519_test_suite = {
.name = "curve25519",
--
2.50.1
next prev parent reply other threads:[~2025-09-01 23:18 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-09-01 20:18 [PATCH 0/6] Curve25519 cleanup Eric Biggers
2025-09-01 20:18 ` [PATCH 1/6] crypto: curve25519 - Remove kpp support Eric Biggers
2025-09-04 8:10 ` Geert Uytterhoeven
2025-09-01 20:18 ` [PATCH 2/6] lib/crypto: tests: Migrate Curve25519 self-test to KUnit Eric Biggers
2025-09-01 20:18 ` Eric Biggers [this message]
2025-09-01 20:18 ` [PATCH 4/6] lib/crypto: curve25519: Move a couple functions out-of-line Eric Biggers
2025-09-01 20:18 ` [PATCH 5/6] lib/crypto: curve25519: Consolidate into single module Eric Biggers
2025-09-03 2:12 ` Eric Biggers
2025-09-01 20:18 ` [PATCH 6/6] wireguard: kconfig: Simplify crypto kconfig selections Eric Biggers
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250901201815.594177-4-ebiggers@kernel.org \
--to=ebiggers@kernel.org \
--cc=Jason@zx2c4.com \
--cc=ardb@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-crypto@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=liulongfang@huawei.com \
--cc=songzhiqi1@huawei.com \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.