[PATCH 4/4] bench-slope: add X25519 and X448 scalar multiplication
Jussi Kivilinna
jussi.kivilinna at iki.fi
Sun Jun 20 11:52:14 CEST 2021
* tests/bench-slope.c (ECC_ALGO_X25519, ECC_ALGO_X448): New.
(ecc_algo_name, ecc_algo_curve, ecc_nbits): Add X25519 and X448.
(bench_ecc_mult_do_bench): Pass Y as NULL to ec_get_affine with
X25519 and X448.
(cipher_ecc_one): Run only multiplication bench for X25519 and X448.
--
Signed-off-by: Jussi Kivilinna <jussi.kivilinna at iki.fi>
---
tests/bench-slope.c | 30 ++++++++++++++++++++++++++++--
1 file changed, 28 insertions(+), 2 deletions(-)
diff --git a/tests/bench-slope.c b/tests/bench-slope.c
index 9b4a139a..35272094 100644
--- a/tests/bench-slope.c
+++ b/tests/bench-slope.c
@@ -2144,6 +2144,8 @@ enum bench_ecc_algo
{
ECC_ALGO_ED25519 = 0,
ECC_ALGO_ED448,
+ ECC_ALGO_X25519,
+ ECC_ALGO_X448,
ECC_ALGO_NIST_P192,
ECC_ALGO_NIST_P224,
ECC_ALGO_NIST_P256,
@@ -2197,6 +2199,10 @@ ecc_algo_name (int algo)
return "Ed25519";
case ECC_ALGO_ED448:
return "Ed448";
+ case ECC_ALGO_X25519:
+ return "X25519";
+ case ECC_ALGO_X448:
+ return "X448";
case ECC_ALGO_NIST_P192:
return "NIST-P192";
case ECC_ALGO_NIST_P224:
@@ -2223,6 +2229,10 @@ ecc_algo_curve (int algo)
return "Ed25519";
case ECC_ALGO_ED448:
return "Ed448";
+ case ECC_ALGO_X25519:
+ return "Curve25519";
+ case ECC_ALGO_X448:
+ return "X448";
case ECC_ALGO_NIST_P192:
return "NIST P-192";
case ECC_ALGO_NIST_P224:
@@ -2249,6 +2259,10 @@ ecc_nbits (int algo)
return 255;
case ECC_ALGO_ED448:
return 448;
+ case ECC_ALGO_X25519:
+ return 255;
+ case ECC_ALGO_X448:
+ return 448;
case ECC_ALGO_NIST_P192:
return 192;
case ECC_ALGO_NIST_P224:
@@ -2355,15 +2369,26 @@ bench_ecc_mult_free (struct bench_obj *obj)
static void
bench_ecc_mult_do_bench (struct bench_obj *obj, void *buf, size_t num_iter)
{
+ struct bench_ecc_oper *oper = obj->priv;
struct bench_ecc_mult_hd *hd = obj->hd;
+ gcry_mpi_t y;
size_t i;
(void)buf;
+ if (oper->algo == ECC_ALGO_X25519 || oper->algo == ECC_ALGO_X448)
+ {
+ y = NULL;
+ }
+ else
+ {
+ y = hd->y;
+ }
+
for (i = 0; i < num_iter; i++)
{
gcry_mpi_ec_mul (hd->Q, hd->k, hd->G, hd->ec);
- if (gcry_mpi_ec_get_affine (hd->x, hd->y, hd->Q, hd->ec))
+ if (gcry_mpi_ec_get_affine (hd->x, y, hd->Q, hd->ec))
{
fprintf (stderr, PGM ": gcry_mpi_ec_get_affine failed\n");
exit (1);
@@ -2634,7 +2659,8 @@ cipher_ecc_one (enum bench_ecc_algo algo, struct bench_ecc_oper *poper)
struct bench_obj obj = { 0 };
double result;
- if (algo == ECC_ALGO_SECP256K1 && oper.oper != ECC_OPER_MULT)
+ if ((algo == ECC_ALGO_X25519 || algo == ECC_ALGO_X448 ||
+ algo == ECC_ALGO_SECP256K1) && oper.oper != ECC_OPER_MULT)
return;
oper.algo = algo;
--
2.30.2
More information about the Gcrypt-devel
mailing list