diff options
author | Jussi Kivilinna <jussi.kivilinna@iki.fi> | 2021-06-16 20:27:15 +0300 |
---|---|---|
committer | Jussi Kivilinna <jussi.kivilinna@iki.fi> | 2021-07-01 18:13:54 +0300 |
commit | 38d80fdfddd027fe87bf5508e453d3e2cdbaa337 (patch) | |
tree | c057e99a041d99473ad1decede33b7baa3afd78d /mpi | |
parent | 1652377763892213fa2cd53aa64884934b2c900f (diff) | |
download | libgcrypt-38d80fdfddd027fe87bf5508e453d3e2cdbaa337.tar.gz |
mpi_ec_get_affine: fast path for Z==1 case
* mpi/ec.c (_gcry_mpi_ec_get_affine): Return X and Y as is
if Z is 1 (for Weierstrass and Edwards curves).
--
Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
Diffstat (limited to 'mpi')
-rw-r--r-- | mpi/ec.c | 18 |
1 files changed, 18 insertions, 0 deletions
@@ -1117,6 +1117,15 @@ _gcry_mpi_ec_get_affine (gcry_mpi_t x, gcry_mpi_t y, mpi_point_t point, { gcry_mpi_t z1, z2, z3; + if (!mpi_cmp_ui (point->z, 1)) + { + if (x) + mpi_set (x, point->x); + if (y) + mpi_set (y, point->y); + return 0; + } + z1 = mpi_new (0); z2 = mpi_new (0); ec_invm (z1, point->z, ctx); /* z1 = z^(-1) mod p */ @@ -1156,6 +1165,15 @@ _gcry_mpi_ec_get_affine (gcry_mpi_t x, gcry_mpi_t y, mpi_point_t point, { gcry_mpi_t z; + if (!mpi_cmp_ui (point->z, 1)) + { + if (x) + mpi_set (x, point->x); + if (y) + mpi_set (y, point->y); + return 0; + } + z = mpi_new (0); ec_invm (z, point->z, ctx); |